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