| #!/bin/ksh -p |
| # |
| # CDDL HEADER START |
| # |
| # The contents of this file are subject to the terms of the |
| # Common Development and Distribution License (the "License"). |
| # You may not use this file except in compliance with the License. |
| # |
| # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| # or http://www.opensolaris.org/os/licensing. |
| # See the License for the specific language governing permissions |
| # and limitations under the License. |
| # |
| # When distributing Covered Code, include this CDDL HEADER in each |
| # file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| # If applicable, add the following below this CDDL HEADER, with the |
| # fields enclosed by brackets "[]" replaced with your own identifying |
| # information: Portions Copyright [yyyy] [name of copyright owner] |
| # |
| # CDDL HEADER END |
| # |
| |
| # |
| # Copyright 2010 Sun Microsystems, Inc. All rights reserved. |
| # |
| |
| # |
| # ID: xattr_008 |
| # |
| # DESCRIPTION: |
| # Verify basic applications work with xattrs: cpio cp find mv pax tar |
| # |
| # STRATEGY: |
| # 1. For each application |
| # 2. Create an xattr and archive/move/copy/find files with xattr support |
| # 3. Also check that when appropriate flag is not used, the xattr |
| # doesn't get copied |
| # |
| |
| . $STF_SUITE/include/libtest.ksh |
| |
| tc_id=xattr_008 |
| tc_desc="Verify basic applications work with xattrs: cpio cp find mv pax tar" |
| print_test_case $tc_id - $tc_desc |
| |
| if [[ $STC_CIFS_CLIENT_DEBUG == 1 ]] || \ |
| [[ *:${STC_CIFS_CLIENT_DEBUG}:* == *:$tc_id:* ]]; then |
| set -x |
| fi |
| |
| server=$(server_name) || return |
| |
| CDIR=$(pwd) |
| testdir_init $TDIR |
| smbmount_clean $TMNT |
| smbmount_init $TMNT |
| |
| cmd="mount -F smbfs //$TUSER:$TPASS@$server/public $TMNT" |
| cti_execute -i '' FAIL $cmd |
| if [[ $? != 0 ]]; then |
| cti_fail "FAIL: smbmount can't mount the public share unexpectedly" |
| return |
| else |
| cti_report "PASS: smbmount can mount the public share as expected" |
| fi |
| |
| smbmount_getmntopts $TMNT |grep /xattr/ >/dev/null |
| if [[ $? != 0 ]]; then |
| smbmount_clean $TMNT |
| cti_unsupported "UNSUPPORTED (no xattr in this mount)" |
| return |
| fi |
| |
| # Create a file, and set an xattr on it. This file is used in several of the |
| # test scenarios below. |
| |
| cti_execute_cmd "touch $TMNT/test_file" |
| create_xattr $TMNT/test_file passwd /etc/passwd |
| |
| # For the archive applications below (tar, cpio, pax) |
| # we create two archives, one with xattrs, one without |
| # and try various cpio options extracting the archives |
| # with and without xattr support, checking for correct behaviour |
| |
| cpio_xattr=$CDIR/xattr.cpio |
| cpio_noxattr=$CDIR/noxattr.cpio |
| |
| cti_report "Checking cpio" |
| cti_execute_cmd "touch $TMNT/cpio_test" |
| create_xattr $TMNT/cpio_test passwd /etc/passwd |
| |
| cti_execute_cmd "echo cpio_test| (cd $TMNT; cpio -oc@ -O $cpio_xattr)" |
| cti_execute_cmd "echo cpio_test| (cd $TMNT; cpio -oc -O $cpio_noxattr)" |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; cpio -iu -I $cpio_xattr)" |
| cti_execute_cmd "runat $TMNT/cpio_test cat passwd" |
| if [[ $? == 0 ]] |
| then |
| cti_fail "Fail: we have xattr here unexpectedly" |
| return |
| fi |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| |
| # we should have an xattr here |
| |
| cti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_xattr)" |
| verify_xattr $TMNT/cpio_test passwd /etc/passwd |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| |
| #do the same for the second time |
| |
| cti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_xattr)" |
| verify_xattr $TMNT/cpio_test passwd /etc/passwd |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; cpio -iu -I $cpio_noxattr)" |
| cti_execute_cmd "runat $TMNT/cpio_test cat passwd" |
| if [[ $? == 0 ]] |
| then |
| cti_fail "Fail: we have xattr here unexpectedly" |
| return |
| fi |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; cpio -iu@ -I $cpio_noxattr)" |
| cti_execute_cmd "runat $TMNT/cpio_test cat passwd" |
| if [[ $? == 0 ]] |
| then |
| cti_fail "Fail: we have xattr here unexpectedly" |
| return |
| fi |
| |
| cti_execute_cmd "rm -rf $TMNT/cpio_test" |
| cti_execute_cmd "rm -rf $cpio_xattr" |
| cti_execute_cmd "rm -rf $cpio_noxattr" |
| |
| cti_report "Checking cp" |
| # check that with the right flag, the xattr is preserved |
| |
| cti_execute_cmd "(cd $TMNT; cp -@ test_file test_file1)" |
| compare_xattrs $TMNT/test_file $TMNT/test_file1 passwd |
| cti_execute_cmd "rm -rf $TMNT/test_file1" |
| |
| # without the right flag, there should be no xattr (ls should fail) |
| |
| cti_execute_cmd "(cd $TMNT; cp test_file test_file1)" |
| cti_execute_cmd "runat $TMNT/cpio_test ls passwd" |
| if [[ $? == 0 ]] |
| then |
| cti_fail "Fail: we have xattr here unexpectedly" |
| return |
| fi |
| cti_execute_cmd "rm -rf $TMNT/test_file1" |
| |
| # create a file without xattrs, and check that find -xattr only finds |
| # our test file that has an xattr. |
| |
| cti_report "Checking find" |
| cti_execute_cmd "mkdir $TMNT/noxattrs" |
| cti_execute_cmd "touch $TMNT/noxattrs/no-xattr" |
| |
| cti_execute_cmd "find $TMNT -xattr | grep test_file" |
| if [ $? -ne 0 ] |
| then |
| cti_fail "find -xattr didn't find our file that had an xattr unexpectedly" |
| fi |
| cti_execute_cmd "find $TMNT -xattr | grep no-xattr" |
| if [ $? -eq 0 ] |
| then |
| cti_fail "find -xattr found a file that didn't have an xattr unexpectedly" |
| fi |
| cti_execute_cmd "rm -rf $TMNT/noxattrs" |
| |
| # mv doesn't have any flags to preserve/ommit xattrs - they're |
| # always moved. |
| |
| cti_report "Checking mv" |
| cti_execute_cmd "touch $TMNT/mvtest" |
| create_xattr $TMNT/mvtest passwd /etc/passwd |
| cti_execute_cmd "(cd $TMNT; mv mvtest mvtest2)" |
| verify_xattr $TMNT/mvtest2 passwd /etc/passwd |
| cti_execute_cmd "rm $TMNT/mvtest" |
| cti_execute_cmd "rm $TMNT/mvtest2" |
| |
| pax_xattr=$CDIR/xattr.pax |
| pax_noxattr=$CDIR/noxattr.pax |
| |
| cti_report "Checking pax" |
| cti_execute_cmd "touch $TMNT/pax_test" |
| create_xattr $TMNT/pax_test passwd /etc/passwd |
| cti_execute_cmd "(cd $TMNT; pax -w -f $pax_noxattr pax_test)" |
| cti_execute_cmd "(cd $TMNT; pax -w@ -f $pax_xattr pax_test)" |
| cti_execute_cmd "rm $TMNT/pax_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; pax -r -f $pax_noxattr)" |
| cti_execute_cmd "runat $TMNT/pax_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/pax_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; pax -r@ -f $pax_noxattr)" |
| cti_execute_cmd "runat $TMNT/pax_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/pax_test" |
| |
| # we should have an xattr here |
| |
| cti_execute_cmd "(cd $TMNT; pax -r@ -f $pax_xattr)" |
| verify_xattr $TMNT/pax_test passwd /etc/passwd |
| cti_execute_cmd "rm $TMNT/pax_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; pax -r -f $pax_xattr)" |
| cti_execute_cmd "runat $TMNT/pax_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/pax_test" |
| cti_execute_cmd "rm $pax_noxattr" |
| cti_execute_cmd "rm $pax_xattr" |
| |
| tar_xattr=$CDIR/xattr.tar |
| tar_noxattr=$CDIR/noxattr.tar |
| |
| cti_report "Checking tar" |
| cti_execute_cmd "touch $TMNT/tar_test" |
| create_xattr $TMNT/tar_test passwd /etc/passwd |
| cti_execute_cmd "(cd $TMNT; tar cf $tar_noxattr tar_test)" |
| cti_execute_cmd "(cd $TMNT; tar c@f $tar_xattr tar_test)" |
| cti_execute_cmd "rm $TMNT/tar_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; tar xf $tar_xattr)" |
| cti_execute_cmd "runat $TMNT/tar_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/tar_test" |
| |
| # we should have an xattr here |
| |
| cti_execute_cmd "(cd $TMNT; tar x@f $tar_xattr)" |
| verify_xattr $TMNT/tar_test passwd /etc/passwd |
| cti_execute_cmd "rm $TMNT/tar_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; tar xf $tar_noxattr)" |
| cti_execute_cmd "runat $TMNT/tar_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/tar_test" |
| |
| # we should have no xattr here |
| |
| cti_execute_cmd "(cd $TMNT; tar x@f $tar_noxattr)" |
| cti_execute_cmd "runat $TMNT/tar_test cat passwd" |
| if [[ $? == 0 ]]; then |
| cti_fail "FAIL: we have xattr here unexpectedly" |
| return |
| else |
| cti_report "PASS: we should have no xattr here as expected" |
| fi |
| cti_execute_cmd "rm $TMNT/tar_test" |
| cti_execute_cmd "rm $tar_noxattr" |
| cti_execute_cmd "rm $tar_xattr" |
| |
| cti_execute_cmd "rm -rf $TMNT/*" |
| |
| smbmount_clean $TMNT |
| cti_pass "$tc_id: PASS" |