Hello automakers. Before this change, the removal of a temporary test directory containing subdirectories with restrictive permissions (such as 'r--r--r--') could fail.
Here is a minimal example of the issue just described. $ cd ~/src/automake/tests $ cat > foo.test <<'END' . ./defs mkdir foo : > foo/bar chmod 222 foo END First time the test is run, only the final clenaup fails. No big deal apparently. $ sh foo.test ~/src/automake/tests:...:/bin:/sbin === Running test foo.test ++ pwd /home/stefano/src/automake/tests/foo.dir + mkdir foo + : + chmod 222 foo + exit_status=0 + set +e + cd /home/stefano/src/automake/tests + case $exit_status,$keep_testdirs in + find foo.dir -type d '!' -perm -200 -exec chmod u+w '{}' ';' find: `foo.dir/foo': Permission denied + rm -rf foo.dir rm: cannot remove `foo.dir/foo': Permission denied + test 0 '!=' 0 + echo 'foo: exit 0' foo: exit 0 + exit 0 But the second time it's run, the setup fails, and the test errors out! This is unacceptable. $ sh foo.test ~/src/automake/tests:...:/bin:/sbin find: `foo.dir/foo': Permission denied rm: cannot remove `foo.dir/foo': Permission denied mkdir: cannot create directory `foo.dir': File exists === Running test foo.test ++ pwd /home/stefano/src/automake/tests/foo.dir + mkdir foo mkdir: cannot create directory `foo': File exists + : foo.test: line 3: foo/bar: Permission denied + exit_status=1 + set +e + cd /home/stefano/src/automake/tests + case $exit_status,$keep_testdirs in + test 0 '!=' 0 + echo 'foo: exit 1' foo: exit 1 + exit 1 The attached patch should fix this. OK for maint? Regards, Stefano -*-*-*- * tests/defs: Ensure that all the subdirectories of a temporary test directory have the 'read', 'write' and 'execute' bits set, before trying to remove it with `rm -rf'. * tests/Makefile.am (clean-local-check): Likewise. --- ChangeLog | 11 +++++++++++ tests/Makefile.am | 2 +- tests/defs.in | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-)
From 0988777745de242bb201658a0dfa8df369a1263e Mon Sep 17 00:00:00 2001 From: Stefano Lattarini <stefano.lattar...@gmail.com> Date: Wed, 16 Feb 2011 20:43:22 +0100 Subject: [PATCH] tests: tempdirs with restrictive permissions are cleaned correctly Before this change, the removal of a temporary test directory containing subdirectories with restrictive permissions (such as 'r--r--r--') could fail. * tests/defs: Ensure that all the subdirectories of a temporary test directory have the 'read', 'write' and 'execute' bits set, before trying to remove it with `rm -rf'. * tests/Makefile.am (clean-local-check): Likewise. --- ChangeLog | 11 +++++++++++ tests/Makefile.am | 2 +- tests/defs.in | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4563585..3d233a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,15 @@ 2011-02-16 Stefano Lattarini <stefano.lattar...@gmail.com> + + tests: tempdirs with restrictive permissions are cleaned correctly + Before this change, the removal of a temporary test directory + containing subdirectories with restrictive permissions (such as + 'r--r--r--') could fail. + * tests/defs: Ensure that all the subdirectories of a temporary + test directory have the 'read', 'write' and 'execute' bits set, + before trying to remove it with `rm -rf'. + * tests/Makefile.am (clean-local-check): Likewise. + +2011-02-16 Stefano Lattarini <stefano.lattar...@gmail.com> Ralf Wildenhues <ralf.wildenh...@gmx.de> test defs: add subroutine for input unindenting diff --git a/tests/Makefile.am b/tests/Makefile.am index ed415f2..047bc7b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -839,6 +839,6 @@ clean-local-check: if test "$$#,$$1" = "1,*.dir"; then \ : there is no test directory to clean; \ else \ - find "$$@" -type d '!' -perm -200 -exec chmod u+w {} ';'; \ + find "$$@" -type d ! -perm -700 -exec chmod u+rwx {} ';'; \ rm -rf "$$@"; \ fi; diff --git a/tests/defs.in b/tests/defs.in index ffe21e1..fd0cc9c 100644 --- a/tests/defs.in +++ b/tests/defs.in @@ -263,7 +263,7 @@ Exit () curdir=`pwd` testSubDir=$me.dir test ! -d $testSubDir || { - find $testSubDir -type d ! -perm -200 -exec chmod u+w {} ";" + find $testSubDir -type d ! -perm -700 -exec chmod u+rwx {} ";" rm -rf $testSubDir } mkdir $testSubDir @@ -275,7 +275,7 @@ if test "$sh_errexit_works" = yes; then cd "$curdir" case $exit_status,$keep_testdirs in 0,) - find $testSubDir -type d ! -perm -200 -exec chmod u+w {} ";" + find $testSubDir -type d ! -perm -700 -exec chmod u+rwx {} ";" rm -rf $testSubDir ;; esac -- 1.7.2.3