diff options
author | Andrew Jones <ajones@sgi.com> | 2004-09-15 05:57:50 +0000 |
---|---|---|
committer | Andrew Jones <ajones@sgi.com> | 2004-09-15 05:57:50 +0000 |
commit | d60075c5e70a7fd1e9681fa834b16510e6a9a43e (patch) | |
tree | fd1996c4c4ea7c152e8f2c37ea6e6a45bbbf6cc4 | |
parent | d83ba68c60e3ae5a29f9c9c2521cef77228951be (diff) |
Tests from UDFQA ported to FSQA.
simple attr tests for EAs.
-rwxr-xr-x | 097 | 259 | ||||
-rw-r--r-- | 097.out.udf | 132 | ||||
-rw-r--r-- | 097.out.xfs | 132 | ||||
-rwxr-xr-x | 098 | 278 | ||||
-rw-r--r-- | 098.out | 1594 | ||||
-rwxr-xr-x | 099 | 344 | ||||
-rw-r--r-- | 099.out | 215 | ||||
-rwxr-xr-x | 100 | 92 | ||||
-rw-r--r-- | 100.out | 1 | ||||
-rwxr-xr-x | 101 | 66 | ||||
-rw-r--r-- | 101.out | 19 | ||||
-rwxr-xr-x | 102 | 63 | ||||
-rw-r--r-- | 102.out | 2 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | common.attr | 78 | ||||
-rw-r--r-- | common.rc | 122 | ||||
-rw-r--r-- | group | 45 |
17 files changed, 3378 insertions, 67 deletions
@@ -0,0 +1,259 @@ +#! /bin/sh +# FS QA Test No. 097. Modifed from UDFQA test 033. +# +# simple attr tests for EAs: +# - set +# - get +# - list +# - remove +# Basic testing. +# +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +# +# creator +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +TARGET_DIR= +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + rm -f $tmp.* + cd $TARGET_DIR + rm -f foo +} + +_umount_and_mount() +{ + cd / + umount $TARGET_DIR + if [ "$FSTYP" == "xfs" ]; then + _test_mount + else + _scratch_mount + fi + + cd $TARGET_DIR +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# link correct .out file +# This is done bacause udf and xfs print attrs in different orders. +rm -rf $seq.out +if [ "$FSTYP" == "xfs" ]; then + ln -s $seq.out.xfs $seq.out +else + ln -s $seq.out.udf $seq.out +fi + +# real QA test starts here +_supported_fs udf xfs +_supported_os IRIX + +_require_scratch +_setup_testdir + +TARGET_DIR=$SCRATCH_MNT +[ "$FSTYP" == "xfs" ] && TARGET_DIR=$TEST_DIR +cd $TARGET_DIR + +echo "create file foo" +touch foo + +echo "should be no EAs for foo:" +attr -l foo + +echo "set EA <noise,woof>:" +attr -s noise -V woof foo + +echo "set EA <colour,blue>:" +attr -s colour -V blue foo + +echo "set EA <size,small>:" +attr -s size -V small foo + +echo "list the EAs for foo: noise, colour, size" +attr -l foo + +echo "check the list again for foo" +attr -l foo + +echo "unmount the FS and see if EAs are persistent" +_umount_and_mount + +echo "check the list again for foo after umount/mount" +attr -l foo + +echo "get the value of the noise EA" +attr -g noise foo + +echo "get the value of the colour EA which was removed earlier" +attr -g colour foo + +echo "get the value of the size EA" +attr -g size foo + +echo "remove the colour EA on foo" +attr -r colour foo + +echo "list EAs for foo: noise, size" +attr -l foo + +echo "get the value of the noise EA" +attr -g noise foo + +echo "get the value of the colour EA which was removed earlier" +attr -g colour foo + +echo "get the value of the size EA" +attr -g size foo + +echo "list all the EAs again: noise, size" +attr -l foo + +echo "change the value of the size EA from small to huge" +attr -s size -V huge foo + +echo "get the size EA which should now have value huge" +attr -g size foo + +echo "list EAs: noise, size" +attr -l foo + +echo "remove the size EA from foo" +attr -r size foo + +echo "list EAs: noise (size EA has been removed)" +attr -l foo + +echo "get the noise EA: woof" +attr -g noise foo + +echo "try removing non-existent EA named woof" +attr -r woof foo + +echo "try removing already removed EA size" +attr -r size foo + +echo "list EAs: noise" +attr -l foo + +echo "try removing already removed EA colour" +attr -r colour foo + +echo "list EAs: noise" +attr -l foo + +echo "remove remaining EA noise" +attr -r noise foo + +echo "list EAs: should be no EAs left now" +attr -l foo + +echo "unmount the FS and see if EAs are persistent" +_umount_and_mount + +echo "list EAs: should still be no EAs left" +attr -l foo + +echo "" +echo "*** Test out the root namespace ***" +echo "" + +echo "set EA <root:colour,marone>:" +attr -R -s colour -V marone foo + +echo "set EA <user:colour,beige>:" +attr -s colour -V beige foo + +echo "set EA <user:vomit,pizza>:" +attr -s vomit -V pizza foo + +echo "set EA <root:noise,whack>:" +attr -R -s noise -V whack foo + +echo "list root EAs: <root:colour,noise>:" +attr -R -l foo + +echo "list user EAs: <user:colour,vomit>:" +attr -l foo + +echo "get root EA colour: marone" +attr -R -g colour foo + +echo "get root EA noise: whack" +attr -R -g noise foo + +echo "get root EA vomit which is a user EA => find nothing" +attr -R -g vomit foo + +echo "" +echo "unmount the FS and see if EAs are persistent" +echo "" +_umount_and_mount + +echo "get root EA colour: marone" +attr -R -g colour foo + +echo "get root EA noise: whack" +attr -R -g noise foo + +echo "get user EA vomit: pizza" +attr -g vomit foo + +echo "remove the root colour EA" +attr -R -r colour foo + +echo "list root EAs: <root:noise>:" +attr -R -l foo + +echo "list user EAs: <user:colour,vomit>:" +attr -l foo + +echo "remove the final root EA noise" +attr -R -r noise foo + +echo "list root EAs: none" +attr -R -l foo + +cd / +_cleanup_testdir + +# Check the filesystem +_check_scratch_fs + +# optional stuff if your test has verbose output to help resolve problems +#echo +#echo "If failure, check $seq.full (this) and $seq.full.ok (reference)" + +# success, all done +status=0 +exit diff --git a/097.out.udf b/097.out.udf new file mode 100644 index 00000000..1d36ff76 --- /dev/null +++ b/097.out.udf @@ -0,0 +1,132 @@ +QA output created by 097 +create file foo +should be no EAs for foo: +set EA <noise,woof>: +Attribute "noise" set to a 4 byte value for foo: +woof +set EA <colour,blue>: +Attribute "colour" set to a 4 byte value for foo: +blue +set EA <size,small>: +Attribute "size" set to a 5 byte value for foo: +small +list the EAs for foo: noise, colour, size +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +check the list again for foo +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +unmount the FS and see if EAs are persistent +check the list again for foo after umount/mount +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +Attribute "colour" had a 4 byte value for foo: +blue +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +remove the colour EA on foo +list EAs for foo: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +attr_get: Attribute not found +Could not get "colour" for foo +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +list all the EAs again: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +change the value of the size EA from small to huge +Attribute "size" set to a 4 byte value for foo: +huge +get the size EA which should now have value huge +Attribute "size" had a 4 byte value for foo: +huge +list EAs: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 4 byte value for foo +remove the size EA from foo +list EAs: noise (size EA has been removed) +Attribute "noise" has a 4 byte value for foo +get the noise EA: woof +Attribute "noise" had a 4 byte value for foo: +woof +try removing non-existent EA named woof +attr_remove: Attribute not found +Could not remove "woof" for foo +try removing already removed EA size +attr_remove: Attribute not found +Could not remove "size" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +try removing already removed EA colour +attr_remove: Attribute not found +Could not remove "colour" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +remove remaining EA noise +list EAs: should be no EAs left now +unmount the FS and see if EAs are persistent +list EAs: should still be no EAs left + +*** Test out the root namespace *** + +set EA <root:colour,marone>: +Attribute "colour" set to a 6 byte value for foo: +marone +set EA <user:colour,beige>: +Attribute "colour" set to a 5 byte value for foo: +beige +set EA <user:vomit,pizza>: +Attribute "vomit" set to a 5 byte value for foo: +pizza +set EA <root:noise,whack>: +Attribute "noise" set to a 5 byte value for foo: +whack +list root EAs: <root:colour,noise>: +Attribute "colour" has a 6 byte value for foo +Attribute "noise" has a 5 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "colour" has a 5 byte value for foo +Attribute "vomit" has a 5 byte value for foo +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get root EA vomit which is a user EA => find nothing +attr_get: Attribute not found +Could not get "vomit" for foo + +unmount the FS and see if EAs are persistent + +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get user EA vomit: pizza +Attribute "vomit" had a 5 byte value for foo: +pizza +remove the root colour EA +list root EAs: <root:noise>: +Attribute "noise" has a 5 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "colour" has a 5 byte value for foo +Attribute "vomit" has a 5 byte value for foo +remove the final root EA noise +list root EAs: none diff --git a/097.out.xfs b/097.out.xfs new file mode 100644 index 00000000..0024bf23 --- /dev/null +++ b/097.out.xfs @@ -0,0 +1,132 @@ +QA output created by 097 +create file foo +should be no EAs for foo: +set EA <noise,woof>: +Attribute "noise" set to a 4 byte value for foo: +woof +set EA <colour,blue>: +Attribute "colour" set to a 4 byte value for foo: +blue +set EA <size,small>: +Attribute "size" set to a 5 byte value for foo: +small +list the EAs for foo: noise, colour, size +Attribute "size" has a 5 byte value for foo +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +check the list again for foo +Attribute "size" has a 5 byte value for foo +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +unmount the FS and see if EAs are persistent +check the list again for foo after umount/mount +Attribute "size" has a 5 byte value for foo +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +Attribute "colour" had a 4 byte value for foo: +blue +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +remove the colour EA on foo +list EAs for foo: noise, size +Attribute "size" has a 5 byte value for foo +Attribute "noise" has a 4 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +attr_get: Attribute not found +Could not get "colour" for foo +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +list all the EAs again: noise, size +Attribute "size" has a 5 byte value for foo +Attribute "noise" has a 4 byte value for foo +change the value of the size EA from small to huge +Attribute "size" set to a 4 byte value for foo: +huge +get the size EA which should now have value huge +Attribute "size" had a 4 byte value for foo: +huge +list EAs: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 4 byte value for foo +remove the size EA from foo +list EAs: noise (size EA has been removed) +Attribute "noise" has a 4 byte value for foo +get the noise EA: woof +Attribute "noise" had a 4 byte value for foo: +woof +try removing non-existent EA named woof +attr_remove: Attribute not found +Could not remove "woof" for foo +try removing already removed EA size +attr_remove: Attribute not found +Could not remove "size" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +try removing already removed EA colour +attr_remove: Attribute not found +Could not remove "colour" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +remove remaining EA noise +list EAs: should be no EAs left now +unmount the FS and see if EAs are persistent +list EAs: should still be no EAs left + +*** Test out the root namespace *** + +set EA <root:colour,marone>: +Attribute "colour" set to a 6 byte value for foo: +marone +set EA <user:colour,beige>: +Attribute "colour" set to a 5 byte value for foo: +beige +set EA <user:vomit,pizza>: +Attribute "vomit" set to a 5 byte value for foo: +pizza +set EA <root:noise,whack>: +Attribute "noise" set to a 5 byte value for foo: +whack +list root EAs: <root:colour,noise>: +Attribute "noise" has a 5 byte value for foo +Attribute "colour" has a 6 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "vomit" has a 5 byte value for foo +Attribute "colour" has a 5 byte value for foo +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get root EA vomit which is a user EA => find nothing +attr_get: Attribute not found +Could not get "vomit" for foo + +unmount the FS and see if EAs are persistent + +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get user EA vomit: pizza +Attribute "vomit" had a 5 byte value for foo: +pizza +remove the root colour EA +list root EAs: <root:noise>: +Attribute "noise" has a 5 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "vomit" has a 5 byte value for foo +Attribute "colour" has a 5 byte value for foo +remove the final root EA noise +list root EAs: none @@ -0,0 +1,278 @@ +#! /bin/sh +# FS QA Test No. 098. Modified from UDFQA test 035 +# +# simple attr tests for EAs: +# - set +# - get +# - list +# - remove +# Basic testing. +# + udf_db checks. +# (033 + udf_db) +# +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +# +# creator +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_db_filter() +{ + awk ' + /<file_entry name=/ { fe_on=1 } + /<timestamp/ { ts_on=1; next } + /<\/timestamp/ { ts_on=0; next } + /<cksum/ { next } + /<desc_crc/ { next } + /<pos/ { next } + /<tag_loc/ { next } + /<lb_num/ { next } + fe_on == 1 && ts_on == 0 { print; next } + { next } + ' +} + +_umount_check_mount() +{ + cd / + umount $SCRATCH_MNT + + udf_db -f $SCRATCH_DEV | _db_filter + + _scratch_mount + cd $SCRATCH_MNT +} + +# real QA test starts here +_supported_fs udf +_supported_os IRIX + +_require_scratch +_setup_testdir + +cd $SCRATCH_MNT + +echo "create file foo" +echo "file_contents" >foo +cat foo + +echo "should be no EAs for foo:" +attr -l foo + +echo "set EA <noise,woof>:" +attr -s noise -V woof foo + +echo "set EA <colour,blue>:" +attr -s colour -V blue foo + +echo "set EA <size,small>:" +attr -s size -V small foo + +echo "list the EAs for foo: noise, colour, size" +attr -l foo + +echo "check the list again for foo" +attr -l foo + +echo "unmount the FS and see if EAs are persistent" +_umount_check_mount + +echo "check the list again for foo after umount/mount" +attr -l foo + +echo "get the value of the noise EA" +attr -g noise foo + +echo "get the value of the colour EA which was removed earlier" +attr -g colour foo + +echo "get the value of the size EA" +attr -g size foo + +echo "remove the colour EA on foo" +attr -r colour foo + +echo "list EAs for foo: noise, size" +attr -l foo + +echo "get the value of the noise EA" +attr -g noise foo + +echo "get the value of the colour EA which was removed earlier" +attr -g colour foo + +echo "get the value of the size EA" +attr -g size foo + +echo "list all the EAs again: noise, size" +attr -l foo + +echo "change the value of the size EA from small to huge" +attr -s size -V huge foo + +echo "get the size EA which should now have value huge" +attr -g size foo + +echo "list EAs: noise, size" +attr -l foo + +echo "remove the size EA from foo" +attr -r size foo + +echo "list EAs: noise (size EA has been removed)" +attr -l foo + +echo "get the noise EA: woof" +attr -g noise foo + +echo "try removing non-existent EA named woof" +attr -r woof foo + +echo "try removing already removed EA size" +attr -r size foo + +echo "list EAs: noise" +attr -l foo + +echo "try removing already removed EA colour" +attr -r colour foo + +echo "list EAs: noise" +attr -l foo + +echo "remove remaining EA noise" +attr -r noise foo + +echo "list EAs: should be no EAs left now" +attr -l foo + +echo "unmount the FS and see if EAs are persistent" +_umount_check_mount + +echo "list EAs: should still be no EAs left" +attr -l foo + +echo "" +echo "*** Test out the root namespace ***" +echo "" + +echo "set EA <root:colour,marone>:" +attr -R -s colour -V marone foo + +echo "set EA <user:colour,beige>:" +attr -s colour -V beige foo + +echo "set EA <user:vomit,pizza>:" +attr -s vomit -V pizza foo + +echo "set EA <root:noise,whack>:" +attr -R -s noise -V whack foo + +echo "list root EAs: <root:colour,noise>:" +attr -R -l foo + +echo "list user EAs: <user:colour,vomit>:" +attr -l foo + +echo "get root EA colour: marone" +attr -R -g colour foo + +echo "get root EA noise: whack" +attr -R -g noise foo + +echo "get root EA vomit which is a user EA => find nothing" +attr -R -g vomit foo + +echo "" +echo "unmount the FS and see if EAs are persistent" +echo "" +_umount_check_mount + +echo "get root EA colour: marone" +attr -R -g colour foo + +echo "get root EA noise: whack" +attr -R -g noise foo + +echo "get user EA vomit: pizza" +attr -g vomit foo + +echo "remove the root colour EA" +attr -R -r colour foo + +echo "list root EAs: <root:noise>:" +attr -R -l foo + +echo "list user EAs: <user:colour,vomit>:" +attr -l foo + +echo "remove the final root EA noise" +attr -R -r noise foo + +echo "list root EAs: none" +attr -R -l foo + +cd / +umount $SCRATCH_MNT + +udf_db -f $SCRATCH_DEV | _db_filter + +# Checks the udf filesystem +_check_udf_filesystem $SCRATCH_DEV + +_scratch_mount +cd $SCRATCH_MNT + +echo "delete the file foo - which will delete the associated streams" +rm foo + +cd / +umount $SCRATCH_MNT + +udf_db -f $SCRATCH_DEV | _db_filter + +# Checks the udf filesystem +_check_udf_filesystem $SCRATCH_DEV + +# optional stuff if your test has verbose output to help resolve problems +#echo +#echo "If failure, check $seq.full (this) and $seq.full.ok (reference)" + +# success, all done +status=0 +exit diff --git a/098.out b/098.out new file mode 100644 index 00000000..63772a0a --- /dev/null +++ b/098.out @@ -0,0 +1,1594 @@ +QA output created by 098 +create file foo +file_contents +should be no EAs for foo: +set EA <noise,woof>: +Attribute "noise" set to a 4 byte value for foo: +woof +set EA <colour,blue>: +Attribute "colour" set to a 4 byte value for foo: +blue +set EA <size,small>: +Attribute "size" set to a 5 byte value for foo: +small +list the EAs for foo: noise, colour, size +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +check the list again for foo +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +unmount the FS and see if EAs are persistent + <file_entry name="/"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="4" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x3CA5" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="84" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc." /> + <id_suffix val="" /> + </regid> + <unique_id val="0" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="84" /> + </short_ad> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="10" char=".Parent.Dir." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="4" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="foo" comp_id="8" /> + <extended_file_entry name="foo" comp_id="8"> + <desc_tag name="tag"> + <id val="266" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="2" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="14" /> + <obj_size val="27" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <long_ad name="streamdir_icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="14" /> + </short_ad> + <stream_directory> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="8" char=".Parent..." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="6" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="noise" comp_id="8" /> + <file_entry name="noise" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="4" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="4" /> + </short_ad> + <file_content> + 77 6F 6F 66 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="7" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="colour" comp_id="8" /> + <file_entry name="colour" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="4" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="4" /> + </short_ad> + <file_content> + 62 6C 75 65 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="5" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="size" comp_id="8" /> + <file_entry name="size" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 73 6D 6C 6C + </file_content> + </file_entry> + </fileid_desc> + </stream_directory> + <file_content> + 66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A + </file_content> + </extended_file_entry> + </fileid_desc> + </file_entry> +</udf> +check the list again for foo after umount/mount +Attribute "noise" has a 4 byte value for foo +Attribute "colour" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +Attribute "colour" had a 4 byte value for foo: +blue +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +remove the colour EA on foo +list EAs for foo: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +get the value of the noise EA +Attribute "noise" had a 4 byte value for foo: +woof +get the value of the colour EA which was removed earlier +attr_get: Attribute not found +Could not get "colour" for foo +get the value of the size EA +Attribute "size" had a 5 byte value for foo: +small +list all the EAs again: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 5 byte value for foo +change the value of the size EA from small to huge +Attribute "size" set to a 4 byte value for foo: +huge +get the size EA which should now have value huge +Attribute "size" had a 4 byte value for foo: +huge +list EAs: noise, size +Attribute "noise" has a 4 byte value for foo +Attribute "size" has a 4 byte value for foo +remove the size EA from foo +list EAs: noise (size EA has been removed) +Attribute "noise" has a 4 byte value for foo +get the noise EA: woof +Attribute "noise" had a 4 byte value for foo: +woof +try removing non-existent EA named woof +attr_remove: Attribute not found +Could not remove "woof" for foo +try removing already removed EA size +attr_remove: Attribute not found +Could not remove "size" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +try removing already removed EA colour +attr_remove: Attribute not found +Could not remove "colour" for foo +list EAs: noise +Attribute "noise" has a 4 byte value for foo +remove remaining EA noise +list EAs: should be no EAs left now +unmount the FS and see if EAs are persistent + <file_entry name="/"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="4" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x3CA5" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="84" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc." /> + <id_suffix val="" /> + </regid> + <unique_id val="0" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="84" /> + </short_ad> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="10" char=".Parent.Dir." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="4" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="foo" comp_id="8" /> + <file_entry name="foo" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="14" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="14" /> + </short_ad> + <file_content> + 66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A + </file_content> + </file_entry> + </fileid_desc> + </file_entry> +</udf> +list EAs: should still be no EAs left + +*** Test out the root namespace *** + +set EA <root:colour,marone>: +Attribute "colour" set to a 6 byte value for foo: +marone +set EA <user:colour,beige>: +Attribute "colour" set to a 5 byte value for foo: +beige +set EA <user:vomit,pizza>: +Attribute "vomit" set to a 5 byte value for foo: +pizza +set EA <root:noise,whack>: +Attribute "noise" set to a 5 byte value for foo: +whack +list root EAs: <root:colour,noise>: +Attribute "colour" has a 6 byte value for foo +Attribute "noise" has a 5 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "colour" has a 5 byte value for foo +Attribute "vomit" has a 5 byte value for foo +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get root EA vomit which is a user EA => find nothing +attr_get: Attribute not found +Could not get "vomit" for foo + +unmount the FS and see if EAs are persistent + + <file_entry name="/"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="4" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x3CA5" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="84" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc." /> + <id_suffix val="" /> + </regid> + <unique_id val="0" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="84" /> + </short_ad> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="10" char=".Parent.Dir." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="4" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="foo" comp_id="8" /> + <extended_file_entry name="foo" comp_id="8"> + <desc_tag name="tag"> + <id val="266" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="2" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="14" /> + <obj_size val="35" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <long_ad name="streamdir_icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="14" /> + </short_ad> + <stream_directory> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="8" char=".Parent..." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="16" char="Meta...." /> + <l_fi val="7" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="colour" comp_id="8" /> + <file_entry name="colour" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="6" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="6" /> + </short_ad> + <file_content> + 6D 61 72 6F 6E 65 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="7" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="colour" comp_id="8" /> + <file_entry name="colour" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 62 65 67 65 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="6" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="vomit" comp_id="8" /> + <file_entry name="vomit" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 70 69 7A 61 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="16" char="Meta...." /> + <l_fi val="6" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="noise" comp_id="8" /> + <file_entry name="noise" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 77 68 63 6B + </file_content> + </file_entry> + </fileid_desc> + </stream_directory> + <file_content> + 66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A + </file_content> + </extended_file_entry> + </fileid_desc> + </file_entry> +</udf> +get root EA colour: marone +Attribute "colour" had a 6 byte value for foo: +marone +get root EA noise: whack +Attribute "noise" had a 5 byte value for foo: +whack +get user EA vomit: pizza +Attribute "vomit" had a 5 byte value for foo: +pizza +remove the root colour EA +list root EAs: <root:noise>: +Attribute "noise" has a 5 byte value for foo +list user EAs: <user:colour,vomit>: +Attribute "colour" has a 5 byte value for foo +Attribute "vomit" has a 5 byte value for foo +remove the final root EA noise +list root EAs: none + <file_entry name="/"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="4" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x3CA5" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="84" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc." /> + <id_suffix val="" /> + </regid> + <unique_id val="0" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="84" /> + </short_ad> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="10" char=".Parent.Dir." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="4" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="foo" comp_id="8" /> + <extended_file_entry name="foo" comp_id="8"> + <desc_tag name="tag"> + <id val="266" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="2" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="14" /> + <obj_size val="24" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <long_ad name="streamdir_icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="14" /> + </short_ad> + <stream_directory> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="8" char=".Parent..." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="20" char="Meta.Deleted.." /> + <l_fi val="7" /> + <long_ad name="icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="colour" comp_id="254" /> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="7" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="colour" comp_id="8" /> + <file_entry name="colour" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 62 65 67 65 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="0" char="....." /> + <l_fi val="6" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="16" /> + </long_ad> + <l_iu val="0" /> + <file_id name="vomit" comp_id="8" /> + <file_entry name="vomit" comp_id="8"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="5" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="8192" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x1884" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="5" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc" /> + <id_suffix val="" /> + </regid> + <unique_id val="16" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="5" /> + </short_ad> + <file_content> + 70 69 7A 61 + </file_content> + </file_entry> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="20" char="Meta.Deleted.." /> + <l_fi val="6" /> + <long_ad name="icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="noise" comp_id="254" /> + </stream_directory> + <file_content> + 66 69 6C 65 5F 63 6F 6E 74 65 6E 74 73 A + </file_content> + </extended_file_entry> + </fileid_desc> + </file_entry> +</udf> +delete the file foo - which will delete the associated streams + <file_entry name="/"> + <desc_tag name="tag"> + <id val="261" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <icb_tag name="icbtag"> + <prev_num_dirs val="0" /> + <strat_type val="4" /> + <strat_param val="0x0 0x0" /> + <max_num_entries val="1" /> + <reserved val="0x0" /> + <file_type val="4" /> + <lb_addr name="parent_icb"> + <part_num val="0" /> + </lb_addr> + <flags val="0" /> + </icb_tag> + <uid val="0" /> + <gid val="0" /> + <perm val="0x3CA5" /> + <link_cnt val="1" /> + <rec_format val="0" /> + <rec_disp_attr val="0" /> + <rec_len val="0" /> + <inf_len val="84" /> + <logblks_rec val="1" /> + <ckpoint val="1" /> + <long_ad name="ex_attr_icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <regid name="imp_id"> + <flags val="0" /> + <id val="*Silicon Graphics, Inc." /> + <id_suffix val="" /> + </regid> + <unique_id val="0" /> + <l_ea val="0" /> + <l_ad val="8" /> + <short_ad name="ads.sht"> + <len val="84" /> + </short_ad> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="10" char=".Parent.Dir." /> + <l_fi val="0" /> + <long_ad name="icb"> + <len val="2048" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="" /> + </fileid_desc> + <fileid_desc> + <desc_tag name="tag"> + <id val="257" /> + <descriptor_ver val="3" /> + <reserved val="0" /> + <serial_num val="0" /> + </desc_tag> + <file_num val="1" /> + <file_char val="4" char="..Deleted.." /> + <l_fi val="4" /> + <long_ad name="icb"> + <len val="0" /> + <lb_addr name="loc"> + <part_num val="0" /> + </lb_addr> + <ad_flags val="0" /> + <ad_id val="0" /> + </long_ad> + <l_iu val="0" /> + <file_id name="foo" comp_id="254" /> + </file_entry> +</udf> @@ -0,0 +1,344 @@ +#! /bin/sh +# FS QA Test No. 099. Modified from UDFQA test 036. +# +# ACL test +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +#_acl_list +# modifier +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter +. ./common.attr + +runas=$here/src/runas + +TARGET_DIR=$SCRATCH_MNT +[ "$FSTYP" == "xfs" ] && TARGET_DIR=$TEST_DIR + +_cleanup() +{ + rm -f $tmp.* + cd $TARGET_DIR + rm -rf $seq.dir1 + cd / +} + +# ----- +# minimal access ACL has ACEs: USER_OBJ, GROUP_OBJ, OTHER_OBJ +# This is set with chacl(1) and can be changed by chmod(1). +# +# Test that this is being set for ACL and for std unix permissions +# Test that we can get back the same ACL. +# Test std permissions for rwx. +# ----- +# +# Test out default ACLs and that the ACL is being PASSed +# onto the children of the dir. +# +# ----- +# Test out access check for extended ACLs. +# -> 3 extra ACEs: MASK, GROUP, USER +# -> the GROUP compares with egid of process _and_ the supplementary +# groups (as found in /etc/group) +# +# Test that mask works for USER, GROUP, GROUP_OBJ +# Test that the ACE type priority is working +# -> this would be done by simultaneously matching on ACEs +# -> interesting if it allows user to specify ACEs in any order +# +rm -f $seq.full + +#------------------------------------------------------- +# real QA test starts here +_supported_fs xfs udf +_supported_os IRIX + +_acl_setup_ids +_acl_requirements +[ -x $runas ] || _notrun "$runas executable not found" + +# get dir +#export FILE_SYS=xfs +_require_scratch +_setup_testdir + +cd $TARGET_DIR +rm -rf $seq.dir1 # in case file is left over from previous runs. +mkdir $seq.dir1 +cd $seq.dir1 + +echo "" +echo "=== Test minimal ACE ===" + +echo "Setup file" +# Note: as this is a shell script, +# will need read and execute permission set +# in order to execute it. +touch file1 +cat <<EOF >file1 +#!/bin/sh +echo "Test was executed" +EOF +chmod u=rwx file1 +chmod g=rw- file1 +chmod o=r-- file1 +chown $acl1.$acl2 file1 +_acl_ls file1 + +echo "" +echo "--- Test get and set of ACL ---" +echo "Note: IRIX interface gave an empty ACL - Linux outputs an ACL" +_acl_list file1 +echo "Try using single colon separator" +echo "Note: IRIX interface FAILs because of single colon - Linux one allows it" +chacl u::r--,g::rwx,o:rw- file1 2>&1 +echo "Expect to PASS" +chacl u::r--,g::rwx,o::rw- file1 2>&1 +_acl_list file1 + +echo "" +echo "--- Test sync of ACL with std permissions ---" +_acl_ls file1 +chmod u+w file1 +_acl_ls file1 +_acl_list file1 + +echo "" +echo "--- Test owner permissions ---" +chacl u::r-x,g::---,o::--- file1 2>&1 +_acl_list file1 +# change to owner +echo "Expect to PASS" +$runas -u $acl1 -g $acl1 ./file1 2>&1 +echo "Expect to FAIL" +$runas -u $acl2 -g $acl2 ./file1 2>&1 + +echo "" +echo "--- Test group permissions ---" +chacl u::---,g::r-x,o::--- file1 2>&1 +_acl_list file1 +echo "Expect to FAIL - acl1 is owner" +$runas -u $acl1 -g $acl1 ./file1 2>&1 +echo "Expect to PASS - acl2 matches group" +$runas -u $acl2 -g $acl2 ./file1 2>&1 +echo "Expect to PASS - acl2 matches sup group" +$runas -u $acl2 -g $acl3 -s $acl2 ./file1 2>&1 +echo "Expect to FAIL - acl3 is not in group" +$runas -u $acl3 -g $acl3 ./file1 2>&1 + +echo "" +echo "--- Test other permissions ---" +chacl u::---,g::---,o::r-x file1 2>&1 +_acl_list file1 +echo "Expect to FAIL - acl1 is owner" +$runas -u $acl1 -g $acl1 ./file1 2>&1 +echo "Expect to FAIL - acl2 is in group" +$runas -u $acl2 -g $acl2 ./file1 2>&1 +echo "Expect to FAIL - acl2 is in sup. group" +$runas -u $acl2 -g $acl3 -s $acl2 ./file1 2>&1 +echo "Expect to PASS - acl3 is not owner or in group" +$runas -u $acl3 -g $acl3 ./file1 2>&1 + +#------------------------------------------------------- + +echo "" +echo "=== Test Extended ACLs ===" + +echo "" +echo "--- Test adding a USER ACE ---" +echo "Expect to FAIL as no MASK provided" +chacl u::---,g::---,o::---,u:$acl2:r-x file1 2>&1 | _acl_filter_id +echo "Ensure that ACL has not been changed" +_acl_list file1 +echo "Expect to PASS - USER ACE matches user" +chacl u::---,g::---,o::---,u:$acl2:r-x,m::rwx file1 2>&1 +_acl_list file1 +$runas -u $acl2 -g $acl2 ./file1 2>&1 +echo "Expect to FAIL - USER ACE does not match user" +$runas -u $acl3 -g $acl3 ./file1 2>&1 + +echo "" +echo "--- Test adding a GROUP ACE ---" +echo "Expect to FAIL as no MASK provided" +chacl u::---,g::---,o::---,g:$acl2:r-x file1 2>&1 | _acl_filter_id +echo "Ensure that ACL has not been changed" +_acl_list file1 +chacl u::---,g::---,o::---,g:$acl2:r-x,m::rwx file1 2>&1 +_acl_list file1 | _acl_filter_id +echo "Expect to PASS - GROUP ACE matches group" +$runas -u $acl2 -g $acl2 ./file1 2>&1 +echo "Expect to PASS - GROUP ACE matches sup group" +$runas -u $acl2 -g $acl1 -s $acl2 ./file1 2>&1 +echo "Expect to FAIL - GROUP ACE does not match group" +$runas -u $acl3 -g $acl3 ./file1 2>&1 + +#------------------------------------------------------- + +echo "" +echo "--- Test MASK ---" + +# group +chacl u::---,g::---,o::---,g:$acl2:r-x,m::-w- file1 2>&1 +_acl_list file1 +echo "Expect to FAIL as MASK prohibits execution" +$runas -u $acl2 -g $acl2 ./file1 2>&1 + +# user +chacl u::---,g::---,o::---,u:$acl2:r-x,m::-w- file1 2>&1 +echo "Expect to FAIL as MASK prohibits execution" +$runas -u $acl2 -g $acl2 ./file1 2>&1 + +# user +chacl u::---,g::---,o::---,u:$acl2:r-x,m::r-x file1 2>&1 +echo "Expect to PASS as MASK allows execution" +$runas -u $acl2 -g $acl2 ./file1 2>&1 + +#------------------------------------------------------- + +echo "" +echo "--- Test ACE priority ---" + +chacl o::rwx,g::rwx,u:$acl1:rwx,u::---,m::rwx file1 2>&1 +echo "Expect to FAIL as should match on owner" +$runas -u $acl1 -g $acl2 ./file1 2>&1 + +chacl o::---,g::---,u:$acl2:rwx,u::---,m::rwx file1 2>&1 +echo "Expect to PASS as should match on user" +$runas -u $acl2 -g $acl2 ./file1 2>&1 + + +#------------------------------------------------------- + +echo "" +echo "=== Test can read ACLs without access permissions ===" +# This was a bug in kernel code where syscred wasn't being used +# to override the capabilities +chacl o::---,g::---,u::--- file1 2>&1 +_acl_list file1 + +#------------------------------------------------------- + +echo "" +echo "=== Test Default ACLs ===" +# make test clearer by testing with and without umask +umask 0 + +mkdir acldir +chacl -b "u::rwx,g::rwx,o::rwx" "u::r-x,g::r--,o::---" acldir 2>&1 +_acl_list acldir +cd acldir + +touch file2 +_acl_ls file2 +_acl_list file2 + +#ensure that umask is not having an effect +#so set it and see +umask 722 +touch file3 +_acl_ls file3 +_acl_list file3 + +cd .. +umask 022 + + +#------------------------------------------------------- + +echo "" +echo "=== Removing ACLs ===" +_acl_list file1 +_acl_list acldir +_acl_list acldir/file2 +echo "Remove ACLs..." +chacl -R file1 +chacl -B acldir +chacl -R acldir/file2 +echo "Note: IRIX interface would mean empty ACLs - Linux would show mode ACLs" +_acl_list file1 +_acl_list acldir +_acl_list acldir/file2 + +#------------------------------------------------------- + +echo "" +echo "=== Test out error messages for ACL text parsing ===" + +touch file1 +set -x +chacl u file1 +chacl u: file1 +chacl u:rumpledumpleunknownuser file1 +chacl u:rumpledumpleunknownuser: file1 +chacl g:rumpledumpleunknowngrp file1 +chacl g:rumpledumpleunknowngrp: file1 +chacl o:user1:rwx file1 +chacl m:user1:rwx file1 +chacl a::rwx file1 +set +x + +#------------------------------------------------------- + +echo "" +echo "=== Test out large ACLs ===" +touch largeaclfile +XFS_ACL_MAX_ENTRIES=25 +num_aces_pre=`expr $XFS_ACL_MAX_ENTRIES - 1` +num_aces_post=`expr $XFS_ACL_MAX_ENTRIES + 1` + +acl1=`_create_n_aces $num_aces_pre` +acl2=`_create_n_aces $XFS_ACL_MAX_ENTRIES` +acl3=`_create_n_aces $num_aces_post` + +echo "1 below xfs acl max" +chacl $acl1 largeaclfile +_acl_list largeaclfile | _filter_aces + +echo "xfs acl max" +chacl $acl2 largeaclfile +_acl_list largeaclfile | _filter_aces + +echo "1 above xfs acl max" +chacl $acl3 largeaclfile +_acl_list largeaclfile | _filter_aces + +#------------------------------------------------------- + +if [ "$FSTYP" == "udf" ]; then + cd / + umount $TARGET_DIR + # Check the filesystem + _check_scratch_fs +fi +# success, all done +status=0 +exit diff --git a/099.out b/099.out new file mode 100644 index 00000000..3f4f663f --- /dev/null +++ b/099.out @@ -0,0 +1,215 @@ +QA output created by 099 + +=== Test minimal ACE === +Setup file +-rwxrw-r-- id1 id2 file1 + +--- Test get and set of ACL --- +Note: IRIX interface gave an empty ACL - Linux outputs an ACL +file1 [] +Try using single colon separator +Note: IRIX interface FAILs because of single colon - Linux one allows it +chacl: "u::r--,g::rwx,o:rw-" is an invalid ACL specification. +Expect to PASS +file1 [u::r--,g::rwx,o::rw-] + +--- Test sync of ACL with std permissions --- +-r--rwxrw-+ id1 id2 file1 +-rw-rwxrw-+ id1 id2 file1 +file1 [u::rw-,g::rwx,o::rw-] + +--- Test owner permissions --- +file1 [u::r-x,g::---,o::---] +Expect to PASS +Test was executed +Expect to FAIL +./file1: Permission denied + +--- Test group permissions --- +file1 [u::---,g::r-x,o::---] +Expect to FAIL - acl1 is owner +./file1: Permission denied +Expect to PASS - acl2 matches group +Test was executed +Expect to PASS - acl2 matches sup group +Test was executed +Expect to FAIL - acl3 is not in group +./file1: Permission denied + +--- Test other permissions --- +file1 [u::---,g::---,o::r-x] +Expect to FAIL - acl1 is owner +./file1: Permission denied +Expect to FAIL - acl2 is in group +./file1: Permission denied +Expect to FAIL - acl2 is in sup. group +./file1: Permission denied +Expect to PASS - acl3 is not owner or in group +Test was executed + +=== Test Extended ACLs === + +--- Test adding a USER ACE --- +Expect to FAIL as no MASK provided +chacl: error setting access acl on "file1":Invalid argument +Ensure that ACL has not been changed +file1 [u::---,g::---,o::r-x] +Expect to PASS - USER ACE matches user +file1 [u::---,g::---,o::---,u:id2:r-x,m::rwx] +Test was executed +Expect to FAIL - USER ACE does not match user +./file1: Permission denied + +--- Test adding a GROUP ACE --- +Expect to FAIL as no MASK provided +chacl: error setting access acl on "file1":Invalid argument +Ensure that ACL has not been changed +file1 [u::---,g::---,o::---,u:id2:r-x,m::rwx] +file1 [u::---,g::---,o::---,g:id2:r-x,m::rwx] +Expect to PASS - GROUP ACE matches group +Test was executed +Expect to PASS - GROUP ACE matches sup group +Test was executed +Expect to FAIL - GROUP ACE does not match group +./file1: Permission denied + +--- Test MASK --- +file1 [u::---,g::---,o::---,g:id2:r-x,m::-w-] +Expect to FAIL as MASK prohibits execution +./file1: Permission denied +Expect to FAIL as MASK prohibits execution +./file1: Permission denied +Expect to PASS as MASK allows execution +Test was executed + +--- Test ACE priority --- +Expect to FAIL as should match on owner +./file1: Permission denied +Expect to PASS as should match on user +Test was executed + +=== Test can read ACLs without access permissions === +file1 [o::---,g::---,u::---] + +=== Test Default ACLs === +acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---] +-r--r-----+ 0 0 file2 +file2 [u::r--,g::r--,o::---] +-r--r-----+ 0 0 file3 +file3 [u::r--,g::r--,o::---] + +=== Removing ACLs === +file1 [o::---,g::---,u::---] +acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---] +acldir/file2 [u::r--,g::r--,o::---] +Remove ACLs... +Note: IRIX interface would mean empty ACLs - Linux would show mode ACLs +file1 [] +acldir [] +acldir/file2 [] + +=== Test out error messages for ACL text parsing === ++ chacl u file1 +chacl: "u" is an invalid ACL specification. ++ chacl u: file1 +chacl: "u:" is an invalid ACL specification. ++ chacl u:rumpledumpleunknownuser file1 +chacl: "u:rumpledumpleunknownuser" is an invalid ACL specification. ++ chacl u:rumpledumpleunknownuser: file1 +chacl: "u:rumpledumpleunknownuser:" is an invalid ACL specification. ++ chacl g:rumpledumpleunknowngrp file1 +chacl: "g:rumpledumpleunknowngrp" is an invalid ACL specification. ++ chacl g:rumpledumpleunknowngrp: file1 +chacl: "g:rumpledumpleunknowngrp:" is an invalid ACL specification. ++ chacl o:user1:rwx file1 +chacl: "o:user1:rwx" is an invalid ACL specification. ++ chacl m:user1:rwx file1 +chacl: "m:user1:rwx" is an invalid ACL specification. ++ chacl a::rwx file1 +chacl: "a::rwx" is an invalid ACL specification. + +=== Test out large ACLs === +1 below xfs acl max +largeaclfile +user::rwx +group::rwx +other::rwx +mask::rwx +user:20:rwx +user:19:rwx +user:18:rwx +user:17:rwx +user:16:rwx +user:15:rwx +user:14:rwx +user:13:rwx +user:12:rwx +user:11:rwx +user:10:rwx +user:9:rwx +user:8:rwx +user:7:rwx +user:6:rwx +user:5:rwx +user:4:rwx +user:3:rwx +user:2:rwx +user:1:rwx + +xfs acl max +largeaclfile +user::rwx +group::rwx +other::rwx +mask::rwx +user:21:rwx +user:20:rwx +user:19:rwx +user:18:rwx +user:17:rwx +user:16:rwx +user:15:rwx +user:14:rwx +user:13:rwx +user:12:rwx +user:11:rwx +user:10:rwx +user:9:rwx +user:8:rwx +user:7:rwx +user:6:rwx +user:5:rwx +user:4:rwx +user:3:rwx +user:2:rwx +user:1:rwx + +1 above xfs acl max +chacl: error setting access acl on "largeaclfile":Error 0 +largeaclfile +user::rwx +group::rwx +other::rwx +mask::rwx +user:21:rwx +user:20:rwx +user:19:rwx +user:18:rwx +user:17:rwx +user:16:rwx +user:15:rwx +user:14:rwx +user:13:rwx +user:12:rwx +user:11:rwx +user:10:rwx +user:9:rwx +user:8:rwx +user:7:rwx +user:6:rwx +user:5:rwx +user:4:rwx +user:3:rwx +user:2:rwx +user:1:rwx + @@ -0,0 +1,92 @@ +#! /bin/sh +# FS QA Test No. 093. Modified from UDF QA test 030. +# +# Test whether a tarred directory structure can be untarred onto +# a UDF file system. +# +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +# +# creator +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_cleanup() +{ + rm -f $tmp.* $testfile +} + +# real QA test starts here +_supported_fs xfs udf nfs +_supported_os IRIX Linux + +# Use _populate_fs() in common.rc to create a directory structure. +TEMP_DIR=/tmp +TAR_FILE=temp.tar +NDIRS=3 +NFILES=6 +DEPTH=5 +POPULATED_DIR=$TEMP_DIR/populate_root +SIZE=10 + +rm -f $seq.full + +# Clean up if file exist from prevous run +rm -rf $POPULATED_DIR +rm -f $TEMP_DIR/$TAR_FILE + +# Create the new directory structure +_populate_fs -n $NDIRS -f $NFILES -d $DEPTH -r $POPULATED_DIR -s $SIZE >>$here/$seq.full 2>&1 + +# Then tar up the directory structure +tar -cvf $TEMP_DIR/$TAR_FILE $POPULATED_DIR >>$here/$seq.full 2>&1 + +# create f/s +_require_scratch +_setup_testdir + +# untar on f/s +cd $testdir +tar -xRvf $TEMP_DIR/$TAR_FILE >>$here/$seq.full 2>&1 +cd $here + + +# use diff -qr to compare +ls -R -l ${testdir}${POPULATED_DIR} >>$here/$seq.full 2>&1 +diff -qr $POPULATED_DIR ${testdir}${POPULATED_DIR} + +cd / +_cleanup_testdir +_check_scratch_fs + +status=0 +exit diff --git a/100.out b/100.out new file mode 100644 index 00000000..b6572c46 --- /dev/null +++ b/100.out @@ -0,0 +1 @@ +QA output created by 100 @@ -0,0 +1,66 @@ +#! /bin/sh +# FS QA Test No. 101. Modified from UDFQA test 029. +# +# This tests mkfs_udf with -s [SIZE] option. +# +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +# +# creator +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +FS_SIZE=2048 +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs udf +_supported_os IRIX + +MKFS_OPTIONS="-s $FS_SIZE" + +_require_scratch +_setup_udf_scratchdir +umount $SCRATCH_MNT + +# Inspect the space bitmap +echo bitmap | udf_db -c - $SCRATCH_DEV + +# Run udf_test +_check_udf_filesystem $SCRATCH_DEV $FS_SIZE + +# success, all done +status=0 +exit diff --git a/101.out b/101.out new file mode 100644 index 00000000..1ca59a8c --- /dev/null +++ b/101.out @@ -0,0 +1,19 @@ +QA output created by 101 + <space_bitmap name="unalloc"> + <desc_tag name="tag"> + <id val="264" /> + <descriptor_ver val="3" /> + <cksum val="13" /> + <reserved val="0" /> + <serial_num val="0" /> + <desc_crc val="0" /> + <desc_crc_len val="0" /> + <tag_loc val="1" /> + </desc_tag> + <num_bits val="1500" /> + <num_bytes val="188" /> + <bitmap> + 0-3 [4]: 0 + 4-1499 [1496]: 1 + </bitmap> + </space_bitmap> @@ -0,0 +1,63 @@ +#! /bin/sh +# FS QA Test No. 102 +# +# This tests mkfs_udf/mkudffs and the device detection code +# Modified from UDFQA test 031. +# +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- +# +# creator +owner=ajones@sgi.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + rm -f $tmp.* + cd / + _cleanup_testdir +} +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +# real QA test starts here +_supported_fs udf +_supported_os Linux IRIX + +_require_scratch +_setup_udf_scratchdir + +# Checks the udf filesystem +_check_udf_filesystem $SCRATCH_DEV + +echo "Finished" + +# success, all done +status=0 +exit diff --git a/102.out b/102.out new file mode 100644 index 00000000..bce1a19d --- /dev/null +++ b/102.out @@ -0,0 +1,2 @@ +QA output created by 102 +Finished @@ -23,7 +23,8 @@ Preparing system for tests (IRIX and Linux): mkfs_udf and udf_db for IRIX and mkudffs for Linux. Also download and build the Philips UDF Verification Software from http://www.extra.research.philips.com/udf/, then copy the udf_test - binary to xfstests/src/. + binary to xfstests/src/. If you wish to disable UDF verification test + set the environment variable DISABLE_UDF_TEST to 1. - create two partitions to use for testing diff --git a/common.attr b/common.attr index c3b3578d..2b333efb 100644 --- a/common.attr +++ b/common.attr @@ -1,37 +1,24 @@ ##/bin/sh - +#----------------------------------------------------------------------- +# Copyright (c) 2000-2004 Silicon Graphics, Inc. All Rights Reserved. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, -# Mountain View, CA 94043, or: -# -# http://www.sgi.com -# -# For further information regarding this notice, see: -# -# http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # - +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA +# +# Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, +# Mountain View, CA 94043, USA, or: http://www.sgi.com +#----------------------------------------------------------------------- # common extended attribute and ACL support # pick three unused user/group ids, store them as $acl[1-3] @@ -80,7 +67,7 @@ _acl_list() _file1=$1 if [ $HOSTOS = "IRIX" ]; then - ls -D $_file1 | _acl_filter_id + ls -dD $_file1 | _acl_filter_id else chacl -l $_file1 | _acl_filter_id fi @@ -137,5 +124,32 @@ _acl_requirements() fi } +# filter user ace names to user ids +# +_filter_aces() +{ + tr '\[' '\012' |\ + tr ']' '\012' |\ + tr ',' '\012' |\ + $AWK_PROG ' + BEGIN { + FS=":" + while ( getline <"/etc/passwd" > 0 ) { + idlist[$1] = $3 + } + } + /^u/ { if ($2 in idlist) sub($2, idlist[$2]); print; next} + {print} + ' |\ + sed -e 's/u:/user:/' -e 's/g:/group:/' -e 's/o:/other:/' -e 's/m:/mask:/' +} + +_list_acl() +{ + file=$1 + + ls -dD $file | _acl_filter_id +} + # make sure this script returns success /bin/true @@ -764,13 +764,20 @@ _check_xfs_filesystem() return 0 } +# Filter the knowen errors the UDF Verifier reports. +_udf_test_known_error_filter() +{ + egrep -v "PVD 60 Error: Interchange Level: 1, Maximum Interchange Level: 0|FSD 28 Error: Interchange Level: 1, Maximum Interchange Level: 1,|PVD 72 Warning: Volume Set Identifier: \"\*IRIX UDF\",|Warning: [0-9]+ unused blocks NOT marked as unallocated." + +} + _check_udf_filesystem() { [ "$DISABLE_UDF_TEST" == "1" ] && return if [ $# -ne 1 -a $# -ne 2 ] then - echo "Usage: _check_fs device [last_block]" 1>&2 + echo "Usage: _check_udf_filesystem device [last_block]" 1>&2 exit 1 fi @@ -791,17 +798,13 @@ _check_udf_filesystem() OPT_ARG="-lastvalidblock $LAST_BLOCK" fi - # Output messages format: - # Error messages contain : "Error:" or "error:" - # Warning messages contain : "Warning:" or "warning:" - # Attention messages contain : "Note:" or "note:" - # Message continuation lines start with a "-" character. - rm -f $seq.checkfs sleep 1 # Due to a problem with time stamps in udf_test - $here/src/udf_test $OPT_ARG $device | tee $here/$seq.checkfs | \ - egrep -i "error:|warning:|Error count:|Warning count:" | \ - egrep -v "Error count: 0|Warning count: 0" + $here/src/udf_test $OPT_ARG $device | tee $here/$seq.checkfs | egrep "Error|Warning" | \ + _udf_test_known_error_filter | \ + egrep -iv "Error count:.*[0-9]+.*total occurrences:.*[0-9]+|Warning count:.*[0-9]+.*total occurrences:.*[0-9]+" | \ + sed "s/^.*$/Warning UDF Verifier reported errors see $seq.checkfs./g" + } _check_test_fs() @@ -900,7 +903,7 @@ _setup_xfs_testdir() testdir=$TEST_DIR } -_setup_udf_testdir() +_setup_udf_scratchdir() { [ "$FSTYP" != "udf" ] \ && _fail "setup_udf_testdir: \$FSTYP is not udf" @@ -926,10 +929,10 @@ _setup_udf_testdir() testdir=$SCRATCH_MNT } -_setup_nfs_testdir() +_setup_nfs_scratchdir() { [ "$FSTYP" != "nfs" ] \ - && _fail "setup_udf_testdir: \$FSTYP is not nfs" + && _fail "setup_nfs_testdir: \$FSTYP is not nfs" [ -z "$SCRATCH_DEV" ] \ && _notrun "this test requires a valid host fs for \$SCRATCH_DEV" [ -z "$SCRATCH_MNT" ] \ @@ -938,7 +941,7 @@ _setup_nfs_testdir() # mounted? if _mount | grep -q $SCRATCH_DEV then - # if it's mounted, make sure its on $TEST_RW_DIR + # if it's mounted, make sure its on $SCRATCH_MNT if ! _mount | grep $SCRATCH_DEV | grep -q $SCRATCH_MNT then _fail "\$SCRATCH_DEV is mounted but not on \$SCRATCH_MNT - aborting" @@ -952,6 +955,11 @@ _setup_nfs_testdir() testdir=$SCRATCH_MNT } +# +# Warning for UDF and NFS this function calls _setup_udf_scratchdir and +# _setup_udf_scratchdir. This is done because testdir is a persistent +# XFS only partition. +# _setup_testdir() { case $FSTYP in @@ -959,10 +967,10 @@ _setup_testdir() _setup_xfs_testdir ;; udf) - _setup_udf_testdir + _setup_udf_scratchdir ;; nfs*) - _setup_nfs_testdir + _setup_nfs_scratchdir ;; *) _fail "\$FSTYP is not xfs, udf or nfs" @@ -1045,5 +1053,87 @@ _link_out_file() fi } +# Populate a filesystem with inodes for performance experiments +# +# usage: populate [-v] [-n ndirs] [-f nfiles] [-d depth] [-r root] [-s size] +# + +_die() +{ + echo $@ + exit 1 +} + +_nfiles() +{ + f=0 + while [ $f -lt $1 ] + do + file=f$f + touch $file + if [ $size -gt 0 ]; then + dd if=/dev/zero of=$file bs=1024 count=$size + fi + f=`expr $f + 1` + done +} + +# takes dirname, depth +_descend() +{ + dirname=$1; depth=$2 + mkdir $dirname || die "mkdir $dirname failed" + cd $dirname + + _nfiles $files # files for this dir + + [ $depth -eq 0 ] && return + deep=`expr $depth - 1` # go 1 down + + [ $verbose = true ] && echo "descending, depth from leaves = $deep" + + d=0 + while [ $d -lt $dirs ] + do + _descend d$d $deep & + d=`expr $d + 1` + wait + done +} + + +_populate_fs() +{ + + here=`pwd` + dirs=5 # ndirs in each subdir till leaves + size=0 # sizeof files in K + files=100 # num files in _each_ subdir + depth=2 # depth of tree from root to leaves + verbose=false + root=root # path of initial root of directory tree + + while getopts "d:f:n:r:s:v" c + do + case $c in + d) depth=$OPTARG;; + n) dirs=$OPTARG;; + f) files=$OPTARG;; + s) size=$OPTARG;; + v) verbose=true;; + r) root=$OPTARG;; + esac + done + + + _descend $root $depth + wait + + cd $here + + [ $verbose = true ] && echo done + +} + # make sure this script returns success /bin/true @@ -69,28 +69,31 @@ auto dxm@sgi.com # ioctl - tests which use ioctl commands (directly/indirectly) ioctl nathans@sgi.com +# udf filesystem +udf ajones@sgi.com + # test-group association ... one line per test # -001 rw dir auto -002 metadata auto +001 rw dir udf auto +002 metadata udf auto 003 db auto 004 db auto -005 dir auto -006 dir auto -007 dir auto +005 dir udf auto +006 dir udf auto +007 dir udf auto 008 rw ioctl auto 009 rw ioctl auto -010 other auto -011 dir auto +010 other udf auto +011 dir udf auto 012 rw auto -013 other ioctl auto -014 rw auto +013 other ioctl udf auto +014 rw udf auto 015 other auto 016 rw auto 017 other auto 018 log logprint v2log auto 019 mkfs auto -020 metadata attr auto +020 metadata attr udf auto 021 db attr auto 022 dump ioctl auto 023 dump ioctl auto @@ -121,7 +124,7 @@ ioctl nathans@sgi.com 048 other auto 049 rw auto 050 quota auto -051 acl auto +051 acl udf auto 052 quota db auto 053 acl repair auto 054 quota auto @@ -132,21 +135,21 @@ ioctl nathans@sgi.com 059 dump ioctl 060 dump ioctl 061 dump ioctl auto -062 attr auto +062 attr udf auto 063 dump auto 064 dump 065 dump auto 066 dump ioctl auto 067 acl attr auto 068 other -069 rw auto -070 attr auto +069 rw udf auto +070 attr udf auto 071 rw auto 072 rw auto 073 copy auto -074 rw auto -075 rw auto -076 metadata rw +074 rw udf auto +075 rw udf auto +076 metadata rw udf 077 acl attr auto 078 growfs auto 079 acl attr ioctl metadata auto @@ -163,7 +166,13 @@ ioctl nathans@sgi.com 090 rw 091 rw 092 other auto -093 attr cap auto +093 attr cap udf auto 094 metadata dir ioctl auto 095 log v2log auto 096 mkfs v2log auto +097 udf auto +098 udf auto +099 udf auto +100 udf auto +101 udf auto +102 udf auto |