No Message Supplied

This commit is contained in:
Andrew Gildfind
2001-04-02 00:41:31 +00:00
parent 8f06ea5c30
commit a12763fe45
6 changed files with 285 additions and 55 deletions
+39 -55
View File
@@ -50,6 +50,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks # get standard environment, filters and checks
. ./common.rc . ./common.rc
. ./common.filter . ./common.filter
. ./common.attr
_cleanup() _cleanup()
{ {
@@ -57,41 +58,6 @@ _cleanup()
rm -rf $TEST_DIR/$seq.dir1 rm -rf $TEST_DIR/$seq.dir1
} }
_ls()
{
ls -ln $* | awk '{ print $1, $3, $4, $NF }' | _filter_id
}
_setup_ids()
{
eval `cat /etc/passwd /etc/group | gawk -F: '
{ ids[$3]=1 }
END {
j=1
for(i=1; i<1000000 && j<=3;i++){
if (! (i in ids)) {
printf "acl%d=%d;", j, i;
j++
}
}
}'`
}
_filter_id()
{
sed \
-e "s/u:$acl1/u:id1/" \
-e "s/u:$acl2/u:id2/" \
-e "s/u:$acl3/u:id3/" \
-e "s/g:$acl1/g:id1/" \
-e "s/g:$acl2/g:id2/" \
-e "s/g:$acl3/g:id3/" \
-e "s/ $acl1 / id1 /" \
-e "s/ $acl2 / id2 /" \
-e "s/ $acl3 / id3 /"
}
# ----- # -----
# minimal access ACL has ACEs: USER_OBJ, GROUP_OBJ, OTHER_OBJ # minimal access ACL has ACEs: USER_OBJ, GROUP_OBJ, OTHER_OBJ
# This is set with chacl(1) and can be changed by chmod(1). # This is set with chacl(1) and can be changed by chmod(1).
@@ -118,7 +84,7 @@ _filter_id()
rm -f $seq.full rm -f $seq.full
_need_to_be_root _need_to_be_root
_setup_ids _acl_setup_ids
[ -x /bin/chacl ] || _notrun "chacl command not found" [ -x /bin/chacl ] || _notrun "chacl command not found"
[ -x $runas ] || _notrun "$runas executable not found" [ -x $runas ] || _notrun "$runas executable not found"
@@ -158,28 +124,28 @@ chmod u=rwx file1
chmod g=rw- file1 chmod g=rw- file1
chmod o=r-- file1 chmod o=r-- file1
chown $acl1.$acl2 file1 chown $acl1.$acl2 file1
_ls file1 _acl_ls file1
echo "" echo ""
echo "--- Test get and set of ACL ---" echo "--- Test get and set of ACL ---"
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to FAIL" echo "Expect to FAIL"
chacl u::r--,g::rwx,o:rw- file1 2>&1 chacl u::r--,g::rwx,o:rw- file1 2>&1
echo "Expect to PASS" echo "Expect to PASS"
chacl u::r--,g::rwx,o::rw- file1 2>&1 chacl u::r--,g::rwx,o::rw- file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "" echo ""
echo "--- Test sync of ACL with std permissions ---" echo "--- Test sync of ACL with std permissions ---"
_ls file1 _acl_ls file1
chmod u+w file1 chmod u+w file1
_ls file1 _acl_ls file1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "" echo ""
echo "--- Test owner permissions ---" echo "--- Test owner permissions ---"
chacl u::r-x,g::---,o::--- file1 2>&1 chacl u::r-x,g::---,o::--- file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
# change to owner # change to owner
echo "Expect to PASS" echo "Expect to PASS"
$runas -u $acl1 -g $acl1 ./file1 2>&1 $runas -u $acl1 -g $acl1 ./file1 2>&1
@@ -189,7 +155,7 @@ $runas -u $acl2 -g $acl2 ./file1 2>&1
echo "" echo ""
echo "--- Test group permissions ---" echo "--- Test group permissions ---"
chacl u::---,g::r-x,o::--- file1 2>&1 chacl u::---,g::r-x,o::--- file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to FAIL - acl1 is owner" echo "Expect to FAIL - acl1 is owner"
$runas -u $acl1 -g $acl1 ./file1 2>&1 $runas -u $acl1 -g $acl1 ./file1 2>&1
echo "Expect to PASS - acl2 matches group" echo "Expect to PASS - acl2 matches group"
@@ -202,7 +168,7 @@ $runas -u $acl3 -g $acl3 ./file1 2>&1
echo "" echo ""
echo "--- Test other permissions ---" echo "--- Test other permissions ---"
chacl u::---,g::---,o::r-x file1 2>&1 chacl u::---,g::---,o::r-x file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to FAIL - acl1 is owner" echo "Expect to FAIL - acl1 is owner"
$runas -u $acl1 -g $acl1 ./file1 2>&1 $runas -u $acl1 -g $acl1 ./file1 2>&1
echo "Expect to FAIL - acl2 is in group" echo "Expect to FAIL - acl2 is in group"
@@ -222,10 +188,10 @@ echo "--- Test adding a USER ACE ---"
echo "Expect to FAIL as no MASK provided" echo "Expect to FAIL as no MASK provided"
chacl u::---,g::---,o::---,u:$acl2:r-x file1 2>&1 chacl u::---,g::---,o::---,u:$acl2:r-x file1 2>&1
echo "Ensure that ACL has not been changed" echo "Ensure that ACL has not been changed"
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to PASS - USER ACE matches user" echo "Expect to PASS - USER ACE matches user"
chacl u::---,g::---,o::---,u:$acl2:r-x,m::rwx file1 2>&1 chacl u::---,g::---,o::---,u:$acl2:r-x,m::rwx file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
$runas -u $acl2 -g $acl2 ./file1 2>&1 $runas -u $acl2 -g $acl2 ./file1 2>&1
echo "Expect to FAIL - USER ACE does not match user" echo "Expect to FAIL - USER ACE does not match user"
$runas -u $acl3 -g $acl3 ./file1 2>&1 $runas -u $acl3 -g $acl3 ./file1 2>&1
@@ -235,9 +201,9 @@ echo "--- Test adding a GROUP ACE ---"
echo "Expect to FAIL as no MASK provided" echo "Expect to FAIL as no MASK provided"
chacl u::---,g::---,o::---,g:$acl2:r-x file1 2>&1 chacl u::---,g::---,o::---,g:$acl2:r-x file1 2>&1
echo "Ensure that ACL has not been changed" echo "Ensure that ACL has not been changed"
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
chacl u::---,g::---,o::---,g:$acl2:r-x,m::rwx file1 2>&1 chacl u::---,g::---,o::---,g:$acl2:r-x,m::rwx file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to PASS - GROUP ACE matches group" echo "Expect to PASS - GROUP ACE matches group"
$runas -u $acl2 -g $acl2 ./file1 2>&1 $runas -u $acl2 -g $acl2 ./file1 2>&1
echo "Expect to PASS - GROUP ACE matches sup group" echo "Expect to PASS - GROUP ACE matches sup group"
@@ -252,7 +218,7 @@ echo "--- Test MASK ---"
# group # group
chacl u::---,g::---,o::---,g:$acl2:r-x,m::-w- file1 2>&1 chacl u::---,g::---,o::---,g:$acl2:r-x,m::-w- file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
echo "Expect to FAIL as MASK prohibits execution" echo "Expect to FAIL as MASK prohibits execution"
$runas -u $acl2 -g $acl2 ./file1 2>&1 $runas -u $acl2 -g $acl2 ./file1 2>&1
@@ -287,24 +253,42 @@ echo "=== Test can read ACLs without access permissions ==="
# This was a bug in kernel code where syscred wasn't being used # This was a bug in kernel code where syscred wasn't being used
# to override the capabilities # to override the capabilities
chacl o::---,g::---,u::--- file1 2>&1 chacl o::---,g::---,u::--- file1 2>&1
chacl -l file1 | _filter_id chacl -l file1 | _acl_filter_id
#------------------------------------------------------- #-------------------------------------------------------
echo "" echo ""
echo "=== Test Default ACLs ===" echo "=== Test Default ACLs ==="
mkdir acldir mkdir acldir
chacl -b "u::rwx,g::rwx,o::rwx" "u::r-x,g::r--,o::---" ./acldir 2>&1 chacl -b "u::rwx,g::rwx,o::rwx" "u::r-x,g::r--,o::---" acldir 2>&1
chacl -l acldir | _filter_id chacl -l acldir | _acl_filter_id
cd acldir cd acldir
touch file2 touch file2
_ls file2 _acl_ls file2
chacl -l file2 | _filter_id chacl -l file2 | _acl_filter_id
cd .. cd ..
#------------------------------------------------------- #-------------------------------------------------------
echo ""
echo "=== Removing ACLs ==="
chacl -l file1 | _acl_filter_id
chacl -l acldir | _acl_filter_id
chacl -l acldir/file2 | _acl_filter_id
echo "Remove ACLs..."
chacl -R file1
chacl -B acldir
chacl -R acldir/file2
chacl -l file1 | _acl_filter_id
chacl -l acldir | _acl_filter_id
chacl -l acldir/file2 | _acl_filter_id
#-------------------------------------------------------
# success, all done # success, all done
status=0 status=0
exit exit
+9
View File
@@ -93,3 +93,12 @@ file1 [o::---,g::---,u::---]
acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---] acldir [u::rwx,g::rwx,o::rwx/u::r-x,g::r--,o::---]
-r--r----- 0 0 file2 -r--r----- 0 0 file2
file2 [u::r--,g::r--,o::---] file2 [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::---,o::---]
Remove ACLs...
file1 []
acldir []
acldir/file2 []
Executable
+105
View File
@@ -0,0 +1,105 @@
#! /bin/sh
# XFS QA Test No. 053
# $Id: 1.1 $
#
# xfs_repair breaks acls
#
#-----------------------------------------------------------------------
# Copyright (c) 2000 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/
#-----------------------------------------------------------------------
#
# creator
owner=ajag@bruce.melbourne.sgi.com
seq=`basename $0`
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
. ./common.attr
# real QA test starts here
_require_scratch
_acl_setup_ids
_do_die_on_error=y
test=$SCRATCH_MNT/test
# make filesystem on scratch using the defaults
_do 'make filesystem on $SCRATCH_DEV' \
'mkfs -t xfs -f $SCRATCH_DEV'
_do 'mount filesytem' \
'mount -t xfs $SCRATCH_DEV $SCRATCH_MNT'
# create test files and set acls
acls="
u::r--,g::rwx,o::rw-
u::r-x,g::---,o::---
u::---,g::r-x,o::---
u::---,g::---,o::r-x
u::---,g::r-x,o::rwx
u::---,g::---,o::---,u:$acl2:r-x,m::rwx
u::rwx,g::r-x,o::r--
u::---,g::---,o::---,g:$acl2:r-x,m::-w-"
i=0
for acl in $acls
do
_do "touch $test.$i"
_do "chacl $acl $test.$i"
i=`expr $i + 1`
done
list_acls()
{
i=0
for acl in $acls
do
chacl -l $test.$i | _acl_filter_id | sed -e "s!$SCRATCH_MNT!\$SCRATCH_MNT!"
i=`expr $i + 1`
done
}
echo "acls before repair:"
list_acls
_do 'unmount $SCRATCH_DEV' 'umount $SCRATCH_DEV'
_do 'repair filesystem' 'xfs_repair $SCRATCH_DEV'
_do 'mount filesytem' 'mount -t xfs $SCRATCH_DEV $SCRATCH_MNT'
echo "acls after repair: "
list_acls
# success, all done
status=0; exit
+24
View File
@@ -0,0 +1,24 @@
QA output created by 053
make filesystem on $SCRATCH_DEV... done
mount filesytem... done
acls before repair:
$SCRATCH_MNT/test.0 [u::r--,g::rwx,o::rw-]
$SCRATCH_MNT/test.1 [u::r-x,g::---,o::---]
$SCRATCH_MNT/test.2 [u::---,g::r-x,o::---]
$SCRATCH_MNT/test.3 [u::---,g::---,o::r-x]
$SCRATCH_MNT/test.4 [u::---,g::r-x,o::rwx]
$SCRATCH_MNT/test.5 [u::---,g::---,o::---,u:id2:r-x,m::rwx]
$SCRATCH_MNT/test.6 [u::rwx,g::r-x,o::r--]
$SCRATCH_MNT/test.7 [u::---,g::---,o::---,g:id2:r-x,m::-w-]
unmount $SCRATCH_DEV... done
repair filesystem... done
mount filesytem... done
acls after repair:
$SCRATCH_MNT/test.0 [u::r--,g::rwx,o::rw-]
$SCRATCH_MNT/test.1 [u::r-x,g::---,o::---]
$SCRATCH_MNT/test.2 [u::---,g::r-x,o::---]
$SCRATCH_MNT/test.3 [u::---,g::---,o::r-x]
$SCRATCH_MNT/test.4 [u::---,g::r-x,o::rwx]
$SCRATCH_MNT/test.5 [u::---,g::---,o::---,u:id2:r-x,m::rwx]
$SCRATCH_MNT/test.6 [u::rwx,g::r-x,o::r--]
$SCRATCH_MNT/test.7 [u::---,g::---,o::---,g:id2:r-x,m::-w-]
+78
View File
@@ -0,0 +1,78 @@
##/bin/sh
#
# Copyright (c) 2000 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/
#
# common extended attribute and ACL support
# pick three unused user/group ids, store them as $acl[1-3]
#
_acl_setup_ids()
{
eval `cat /etc/passwd /etc/group | gawk -F: '
{ ids[$3]=1 }
END {
j=1
for(i=1; i<1000000 && j<=3;i++){
if (! (i in ids)) {
printf "acl%d=%d;", j, i;
j++
}
}
}'`
}
# filter for the acl ids selected above
#
_acl_filter_id()
{
sed \
-e "s/u:$acl1/u:id1/" \
-e "s/u:$acl2/u:id2/" \
-e "s/u:$acl3/u:id3/" \
-e "s/g:$acl1/g:id1/" \
-e "s/g:$acl2/g:id2/" \
-e "s/g:$acl3/g:id3/" \
-e "s/ $acl1 / id1 /" \
-e "s/ $acl2 / id2 /" \
-e "s/ $acl3 / id3 /"
}
# filtered ls
#
_acl_ls()
{
ls -ln $* | awk '{ print $1, $3, $4, $NF }' | _acl_filter_id
}
# make sure this script returns success
/bin/true
+30
View File
@@ -262,6 +262,36 @@ _is_block_dev()
[ -b $1 ] && src/lstat64 $1 | $AWK_PROG '/Device type:/ { print $9 }' [ -b $1 ] && src/lstat64 $1 | $AWK_PROG '/Device type:/ { print $9 }'
} }
# do a command, log it to $seq.full, optionally test return status
# and die if command fails
#
_do()
{
if [ $# -eq 1 ]; then
_cmd=$1
elif [ $# -eq 2 ]; then
_note=$1
_cmd=$2
echo -n "$_note... "
else
echo "Usage: _do [note] cmd" 1>&2
status=1; exit
fi
(eval "echo '---' $_cmd") >>$seq.full
(eval "$_cmd") >$tmp._out 2>&1; ret=$?
cat $tmp._out | _fix_malloc >>$seq.full
if [ $# -eq 2 ]; then
if [ $ret -eq 0 ]; then echo "done"; else echo "fail"; fi
fi
if [ "$_do_die_on_error" -a $ret -ne 0 ]; then
eval "echo $_cmd failed \(returned $ret\): see $seq.full"
status=1; exit
fi
return $ret
}
# bail out, setting up .notrun file # bail out, setting up .notrun file
# #
_notrun() _notrun()