1#!/bin/ksh -p 2# 3# CDDL HEADER START 4# 5# The contents of this file are subject to the terms of the 6# Common Development and Distribution License (the "License"). 7# You may not use this file except in compliance with the License. 8# 9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10# or http://www.opensolaris.org/os/licensing. 11# See the License for the specific language governing permissions 12# and limitations under the License. 13# 14# When distributing Covered Code, include this CDDL HEADER in each 15# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16# If applicable, add the following below this CDDL HEADER, with the 17# fields enclosed by brackets "[]" replaced with your own identifying 18# information: Portions Copyright [yyyy] [name of copyright owner] 19# 20# CDDL HEADER END 21# 22 23# 24# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 25# Use is subject to license terms. 26# 27 28. $STF_SUITE/tests/functional/acl/acl_common.kshlib 29 30# 31# DESCRIPTION: 32# Verify that '/usr/bin/cp [-p]' supports ZFS ACL 33# 34# STRATEGY: 35# 1. Create file and directory in zfs filesystem 36# 2. Set special ACE to the file and directory 37# 3. Copy the file/directory within and across zfs file system 38# 4. Verify that the ACL of file/directroy is not changed, when you are 39# inserting an ACL with a user: or group: entry on the top. 40# (abstractions entry are treated special, since they represent the 41# traditional permission bit mapping.) 42# 43 44verify_runnable "both" 45 46function cleanup 47{ 48 if datasetexists $TESTPOOL/$TESTFS1; then 49 log_must $ZFS destroy -f $TESTPOOL/$TESTFS1 50 fi 51 [[ -d $TESTDIR1 ]] && log_must $RM -rf $TESTDIR1 52 [[ -d $TESTDIR ]] && log_must $RM -rf $TESTDIR/* 53} 54 55log_assert "Verify that '$CP [-p]' supports ZFS ACLs." 56log_onexit cleanup 57 58log_note "Create the second zfs file system: $TESTPOOL/$TESTFS1." 59log_must $ZFS create $TESTPOOL/$TESTFS1 60log_must $ZFS set mountpoint=$TESTDIR1 $TESTPOOL/$TESTFS1 61log_must $ZFS set aclmode=passthrough $TESTPOOL/$TESTFS1 62log_must $CHMOD 777 $TESTDIR1 63 64# Define target directory. 65dstdir=$TESTDIR1/dstdir.$$ 66 67for user in root $ZFS_ACL_STAFF1; do 68 # Set the current user 69 log_must set_cur_usr $user 70 71 for obj in $testfile $testdir; do 72 # Create source object and target directroy 73 log_must usr_exec $TOUCH $testfile 74 log_must usr_exec $MKDIR $testdir $dstdir 75 76 # Add the new ACE on the head. 77 log_must usr_exec $CHMOD \ 78 A0+user:$ZFS_ACL_OTHER1:read_acl:deny $obj 79 80 cmd_str="$CP -p" 81 [[ -d $obj ]] && cmd_str="$CP -rp" 82 log_must usr_exec $cmd_str $obj $dstdir 83 log_must usr_exec $cmd_str $obj $TESTDIR1 84 85 for dir in $dstdir $TESTDIR1; do 86 log_must compare_modes $obj $dir/${obj##*/} 87 log_must compare_acls $obj $dir/${obj##*/} 88 done 89 90 # Delete all the test file and directory 91 log_must usr_exec $RM -rf $TESTDIR/* $TESTDIR1/* 92 done 93done 94 95log_pass "'$CP [-p]' succeeds to support ZFS ACLs." 96