On 24/03/2024 16:29, Sven Joachim wrote:
When building coreutils 9.4.170-7b206 on x86_64 GNU/Linux, I got a test
failure in tests/chmod/symlinks, apparently because I was building in a
setgid directory.  The log file of the failed test is attached.

,----
| $ LANG=C ls -ld /usr/local/src/coreutils
| drwxr-sr-x 17 sven src 4096 Mar 24 17:18 /usr/local/src/coreutils
`----

Yes Bruno Haible also noticed this (on Alpine).
The attached should fix this.

cheers,
Pádraig
From f77a6352fbc2bfb7b62bcf7dcd42d053b7a556c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Sun, 24 Mar 2024 19:46:57 +0000
Subject: [PATCH] test: avoid false failure with setgid directories

* tests/chmod/symlinks.sh: Ensure this new test is immune
to setgid directories by resetting modes with =777 rather than 777.
Also output more debugging in all failure cases.
---
 tests/chmod/symlinks.sh | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/tests/chmod/symlinks.sh b/tests/chmod/symlinks.sh
index 815e8fb5c..0bb6be0b1 100755
--- a/tests/chmod/symlinks.sh
+++ b/tests/chmod/symlinks.sh
@@ -40,40 +40,42 @@ ln -s b a/dirlink || framework_failure_
 #  |-- dangle -> foo
 #  '-- dirlink -> b/
 
-reset_modes() { chmod 777 a/b a/c a/b/file a/c/file || fail=1; }
-count_755() { test "$(grep 'rwxr-xr-x' 'out' | wc -l)" = "$1"; }
+reset_modes() { chmod =777 a/b a/c a/b/file a/c/file || fail=1; }
+count_755() {
+  test "$(grep 'rwxr-xr-x' 'out' | wc -l)" = "$1" || { cat out; fail=1; }
+}
 
 reset_modes
 # -R (with default -H) does not deref traversed symlinks (only cli args)
 chmod 755 -R a/c || fail=1
 ls -l a/b > out || framework_failure_
-count_755 0 || fail=1
+count_755 0
 ls -lR a/c > out || framework_failure_
-count_755 1 || fail=1
+count_755 1
 
 reset_modes
 # set a/c a/c/file and a/b/file (through symlink) to 755
 chmod 755 -LR a/c || fail=1
 ls -ld a/c a/c/file a/b/file > out || framework_failure_
-count_755 3 || { cat out; fail=1; }
+count_755 3
 
 reset_modes
 # do not set /a/b/file through symlink (should try to chmod the link itself)
 chmod 755 -RP a/c/ || fail=1
 ls -l a/b > out || framework_failure_
-count_755 0 || fail=1
+count_755 0
 
 reset_modes
 # set /a/b/file through symlink
 chmod 755 --dereference a/c/link || fail=1
 ls -l a/b > out || framework_failure_
-count_755 1 || fail=1
+count_755 1
 
 reset_modes
 # do not set /a/b/file through symlink (should try to chmod the link itself)
 chmod 755 --no-dereference a/c/link 2>err || fail=1
 ls -l a/b > out || framework_failure_
-count_755 0 || fail=1
+count_755 0
 
 # Dangling links should not induce an error if not dereferencing
 for noderef in '-h' '-RP' '-P'; do
-- 
2.44.0

Reply via email to