1*2889ec41SGordon Ross#!/bin/ksh -p
2*2889ec41SGordon Ross#
3*2889ec41SGordon Ross# CDDL HEADER START
4*2889ec41SGordon Ross#
5*2889ec41SGordon Ross# The contents of this file are subject to the terms of the
6*2889ec41SGordon Ross# Common Development and Distribution License (the "License").
7*2889ec41SGordon Ross# You may not use this file except in compliance with the License.
8*2889ec41SGordon Ross#
9*2889ec41SGordon Ross# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*2889ec41SGordon Ross# or http://www.opensolaris.org/os/licensing.
11*2889ec41SGordon Ross# See the License for the specific language governing permissions
12*2889ec41SGordon Ross# and limitations under the License.
13*2889ec41SGordon Ross#
14*2889ec41SGordon Ross# When distributing Covered Code, include this CDDL HEADER in each
15*2889ec41SGordon Ross# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*2889ec41SGordon Ross# If applicable, add the following below this CDDL HEADER, with the
17*2889ec41SGordon Ross# fields enclosed by brackets "[]" replaced with your own identifying
18*2889ec41SGordon Ross# information: Portions Copyright [yyyy] [name of copyright owner]
19*2889ec41SGordon Ross#
20*2889ec41SGordon Ross# CDDL HEADER END
21*2889ec41SGordon Ross#
22*2889ec41SGordon Ross
23*2889ec41SGordon Ross#
24*2889ec41SGordon Ross# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
25*2889ec41SGordon Ross# Use is subject to license terms.
26*2889ec41SGordon Ross#
27*2889ec41SGordon Ross
28*2889ec41SGordon Ross#
29*2889ec41SGordon Ross# Copyright (c) 2012 by Delphix. All rights reserved.
30*2889ec41SGordon Ross# Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
31*2889ec41SGordon Ross#
32*2889ec41SGordon Ross
33*2889ec41SGordon Ross. $STF_SUITE/tests/functional/acl/acl_common.kshlib
34*2889ec41SGordon Ross. $STF_SUITE/tests/functional/acl/cifs/cifs.kshlib
35*2889ec41SGordon Ross
36*2889ec41SGordon Ross#
37*2889ec41SGordon Ross# DESCRIPTION:
38*2889ec41SGordon Ross#	Verify the ability to continue writing to a file
39*2889ec41SGordon Ross#	after opening the file read/write, and setting
40*2889ec41SGordon Ross#	the DOS Readonly flag on that file.
41*2889ec41SGordon Ross#
42*2889ec41SGordon Ross# STRATEGY:
43*2889ec41SGordon Ross#	Run the special program "dos_ro"
44*2889ec41SGordon Ross
45*2889ec41SGordon Rossverify_runnable "both"
46*2889ec41SGordon Ross
47*2889ec41SGordon Rossfunction cleanup
48*2889ec41SGordon Ross{
49*2889ec41SGordon Ross	if [[ -n $gobject ]]; then
50*2889ec41SGordon Ross		destroy_object $gobject
51*2889ec41SGordon Ross	fi
52*2889ec41SGordon Ross
53*2889ec41SGordon Ross	for fs in $TESTPOOL/$TESTFS $TESTPOOL ; do
54*2889ec41SGordon Ross		mtpt=$(get_prop mountpoint $fs)
55*2889ec41SGordon Ross		log_must rm -rf $mtpt/file.* $mtpt/dir.*
56*2889ec41SGordon Ross	done
57*2889ec41SGordon Ross
58*2889ec41SGordon Ross	[[ -f $TESTFILE ]] && rm $TESTFILE
59*2889ec41SGordon Ross}
60*2889ec41SGordon Ross
61*2889ec41SGordon Ross#
62*2889ec41SGordon Ross# Set the special attribute to the given node
63*2889ec41SGordon Ross#
64*2889ec41SGordon Ross# $1: The given node (file/dir)
65*2889ec41SGordon Ross# $2: The special attribute to be set
66*2889ec41SGordon Ross#
67*2889ec41SGordon Rossfunction set_attribute
68*2889ec41SGordon Ross{
69*2889ec41SGordon Ross	typeset object=$1
70*2889ec41SGordon Ross	typeset attr=$2
71*2889ec41SGordon Ross
72*2889ec41SGordon Ross	if [[ -z $attr ]]; then
73*2889ec41SGordon Ross		attr="AHRSadimu"
74*2889ec41SGordon Ross		if [[ -f $object ]]; then
75*2889ec41SGordon Ross			attr="${attr}q"
76*2889ec41SGordon Ross		fi
77*2889ec41SGordon Ross	fi
78*2889ec41SGordon Ross	chmod S+c${attr} $object
79*2889ec41SGordon Ross	return $?
80*2889ec41SGordon Ross}
81*2889ec41SGordon Ross
82*2889ec41SGordon Ross#
83*2889ec41SGordon Ross# Clear the special attribute to the given node
84*2889ec41SGordon Ross#
85*2889ec41SGordon Ross# $1: The given node (file/dir)
86*2889ec41SGordon Ross# $2: The special attribute to be cleared
87*2889ec41SGordon Ross#
88*2889ec41SGordon Rossfunction clear_attribute
89*2889ec41SGordon Ross{
90*2889ec41SGordon Ross	typeset object=$1
91*2889ec41SGordon Ross	typeset attr=$2
92*2889ec41SGordon Ross
93*2889ec41SGordon Ross	if [[ -z $attr ]]; then
94*2889ec41SGordon Ross		if is_global_zone ; then
95*2889ec41SGordon Ross			attr="AHRSadimu"
96*2889ec41SGordon Ross			if [[ -f $object ]]; then
97*2889ec41SGordon Ross				attr="${attr}q"
98*2889ec41SGordon Ross			fi
99*2889ec41SGordon Ross		else
100*2889ec41SGordon Ross			attr="AHRS"
101*2889ec41SGordon Ross		fi
102*2889ec41SGordon Ross	fi
103*2889ec41SGordon Ross
104*2889ec41SGordon Ross	chmod S-c${attr} $object
105*2889ec41SGordon Ross	return $?
106*2889ec41SGordon Ross}
107*2889ec41SGordon Ross
108*2889ec41SGordon RossFILES="file.0 file.1"
109*2889ec41SGordon RossFS="$TESTPOOL $TESTPOOL/$TESTFS"
110*2889ec41SGordon RossATTRS="R"
111*2889ec41SGordon Ross
112*2889ec41SGordon RossTESTFILE=/tmp/tfile
113*2889ec41SGordon RossTESTDIR=tdir
114*2889ec41SGordon RossTESTATTR=tattr
115*2889ec41SGordon RossTESTACL=user:$ZFS_ACL_OTHER1:write_data:allow
116*2889ec41SGordon RossTESTMODE=777
117*2889ec41SGordon RossTESTSTR="ZFS test suites"
118*2889ec41SGordon Ross
119*2889ec41SGordon Rosslog_assert "Verify writable open handle still works after " \
120*2889ec41SGordon Ross    "setting the DOS Readonly flag on a file."
121*2889ec41SGordon Rosslog_onexit cleanup
122*2889ec41SGordon Ross
123*2889ec41SGordon Rossecho "$TESTSTR" > $TESTFILE
124*2889ec41SGordon Ross
125*2889ec41SGordon Rosstypeset gobject
126*2889ec41SGordon Rosstypeset gattr
127*2889ec41SGordon Rossfor fs in $FS ; do
128*2889ec41SGordon Ross	mtpt=$(get_prop mountpoint $fs)
129*2889ec41SGordon Ross	chmod 777 $mtpt
130*2889ec41SGordon Ross	for user in root $ZFS_ACL_STAFF1; do
131*2889ec41SGordon Ross		log_must set_cur_usr $user
132*2889ec41SGordon Ross		for file in $FILES ; do
133*2889ec41SGordon Ross			gobject=$mtpt/$file
134*2889ec41SGordon Ross			create_object "file" $gobject $ZFS_ACL_CUR_USER
135*2889ec41SGordon Ross			log_must dos_ro $gobject
136*2889ec41SGordon Ross			destroy_object $gobject
137*2889ec41SGordon Ross		done
138*2889ec41SGordon Ross	done
139*2889ec41SGordon Rossdone
140*2889ec41SGordon Ross
141*2889ec41SGordon Rosslog_pass "Writable handle OK after setting DOS R/O flag."
142