From: Pavel Raiskup Date: Mon, 3 Feb 2014 13:00:56 +0000 (+0100) Subject: testsuite: add test for buggy default ACLs X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=efbf4cce0b93e8c5a5fc93335b917bbeae2f67cb;p=chaz%2Ftar testsuite: add test for buggy default ACLs * tests/Makefile.am: Mention acls03.at. * tests/testsuite.at: Likewise. * tests/acls03.at: New testcase. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index be00446..76954eb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -225,6 +225,7 @@ TESTSUITE_AT = \ xattr05.at\ acls01.at\ acls02.at\ + acls03.at\ selnx01.at\ selacl01.at\ capabs_raw01.at diff --git a/tests/acls03.at b/tests/acls03.at new file mode 100644 index 0000000..370a08b --- /dev/null +++ b/tests/acls03.at @@ -0,0 +1,131 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2013 Free Software Foundation, Inc. + +# This file is part of GNU tar. + +# GNU tar 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 3 of the License, or +# (at your option) any later version. + +# GNU tar 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, see . +# +# Test description: +# +# Check the storing/restoring with/without default ACLs. When --acls is passed, +# restored directory tree should always match archive contents (even when the +# archive does not contain any ACLs). +# +# References: +# http://www.mail-archive.com/bug-tar@gnu.org/msg04355.html + +AT_SETUP([acls: default ACLs]) +AT_KEYWORDS([xattrs acls acls03]) + +m4_define([ACL_LISTDIR], [ + cd $1 + $1="$(find d1 | sort | xargs -n 1 getfacl)" + cd .. +]) + +m4_define([ACL_ASSERT], [ + echo "$$1" > $1.log + echo "$$2" > $2.log + if test ! "$$1" "$3" "$$2"; then + echo "bad '$1' against '$2' output" + fi +]) + +AT_TAR_CHECK([ +AT_XATTRS_UTILS_PREREQ +AT_ACLS_PREREQ +AT_SORT_PREREQ + +MYNAME=$( id -un ) +MYGROUP=$( id -gn ) + +# Prepare directory structure with default ACLs +mkdir -p pure/d1/d2 +genfile --file pure/d1/f2a +genfile --file pure/d1/f2b +genfile --file pure/d1/d2/f3a +genfile --file pure/d1/d2/f3b +setfacl -m g:$MYGROUP:r-x pure/d1 +setfacl -d -m g:$MYGROUP:rwx pure/d1 +setfacl -d -m u:$MYNAME:rwx pure/d1 +# "*a" files have "some" additional ACLs +setfacl -m u:$MYNAME:--- pure/d1/d2/f3a +setfacl -m u:$MYNAME:--- pure/d1/f2a + +# use default format (no acls stored) +tar -cf noacl.tar -C pure d1 + +# use posix format, acls stored +tar --acls -cf acl.tar -C pure d1 + +# Directory names are chosen based on "how the files were extracted from +# archive". Equivalent no* tags are used also: +# ^sacl_ — extracted archive has stored ACLs +# _def_ — target directory (-C) has default ACLs +# _optacl$ — extraction was done with --acls option + +mkdir sacl_def_optacl +mkdir sacl_def_optnoacl +mkdir sacl_nodef_optacl +mkdir sacl_nodef_optnoacl +mkdir nosacl_def_optacl +mkdir nosacl_def_optnoacl +mkdir nosacl_nodef_optacl +mkdir nosacl_nodef_optnoacl + +setfacl -d -m u:$MYNAME:--- nosacl_def_optnoacl sacl_def_optnoacl sacl_def_optacl nosacl_def_optacl +setfacl -d -m u:$MYGROUP:--- nosacl_def_optnoacl sacl_def_optnoacl sacl_def_optacl nosacl_def_optacl + +tar -xf acl.tar -C sacl_nodef_optnoacl +tar --acls -xf acl.tar -C sacl_nodef_optacl +tar -xf acl.tar -C sacl_def_optnoacl +tar --acls -xf acl.tar -C sacl_def_optacl +tar -xf noacl.tar -C nosacl_def_optnoacl +# _NO_ ACLs in output +tar -xf noacl.tar -C nosacl_nodef_optnoacl +tar -xf noacl.tar -C nosacl_nodef_optacl +tar -cf noacl_repackaged.tar -C nosacl_nodef_optnoacl d1 +# _NO_ ACLs in output (even when default ACLs exist) +tar --acls -xf noacl_repackaged.tar -C nosacl_def_optacl + +ACL_LISTDIR(pure) + +ACL_LISTDIR(sacl_def_optacl) +ACL_LISTDIR(sacl_def_optnoacl) +ACL_LISTDIR(sacl_nodef_optacl) +ACL_LISTDIR(sacl_nodef_optnoacl) +ACL_LISTDIR(nosacl_def_optacl) +ACL_LISTDIR(nosacl_def_optnoacl) +ACL_LISTDIR(nosacl_nodef_optacl) +ACL_LISTDIR(nosacl_nodef_optnoacl) + +ACL_ASSERT(pure, sacl_def_optacl, =) + +ACL_ASSERT(sacl_def_optacl, sacl_nodef_optacl, =) +ACL_ASSERT(sacl_def_optnoacl, nosacl_def_optnoacl, =) +ACL_ASSERT(sacl_nodef_optnoacl, nosacl_nodef_optnoacl, =) +ACL_ASSERT(nosacl_def_optacl, nosacl_nodef_optacl, =) +ACL_ASSERT(nosacl_def_optacl, nosacl_nodef_optnoacl, =) + +ACL_ASSERT(sacl_def_optacl, sacl_def_optnoacl, !=) +ACL_ASSERT(sacl_def_optacl, nosacl_def_optnoacl, !=) +ACL_ASSERT(nosacl_def_optnoacl, nosacl_nodef_optnoacl, !=) +], +[0], +[], +[]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 0e8eebc..ac0119e 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -407,6 +407,7 @@ m4_include([xattr05.at]) m4_include([acls01.at]) m4_include([acls02.at]) +m4_include([acls03.at]) m4_include([selnx01.at]) m4_include([selacl01.at])