Do the setgid test instead of bailing.
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 17 Jul 2006 03:11:51 +0000 (03:11 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 17 Jul 2006 03:11:51 +0000 (03:11 +0000)
tests/chmod/setgid

index c3248a3..93a2c2e 100755 (executable)
@@ -25,8 +25,6 @@ cd $pwd || framework_failure=1
 mkdir $tmp || framework_failure=1
 cd $tmp || framework_failure=1
 
-. $abs_srcdir/../setgid-check
-
 umask 0
 mkdir d || framework_failure=1
 
@@ -36,13 +34,11 @@ chmod g+s d 2> /dev/null ||
     # it may happen that when you create a directory, its group isn't one
     # to which you belong.  When that happens, the above chmod fails.  So
     # here, upon failure, we try to set the group, then rerun the chmod command.
-    group=${COREUTILS_GROUP-`(id -g || /usr/xpg4/bin/id -g) 2>/dev/null`}
-    if test "$group"; then
-      chgrp "$group" d || framework_failure=1
-      chmod g+s d || framework_failure=1
-    else
-      framework_failure=1
-    fi
+
+    id_g=`id -g` &&
+    test -n "$id_g" &&
+    chgrp "$id_g" d &&
+    chmod g+s d || framework_failure=1
   }
 
 if test $framework_failure = 1; then
@@ -54,20 +50,6 @@ fail=0
 
 chmod 755 d
 
-# To be compatible with chmod from other vendors,
-# GNU chmod must not reset a directory's setgid bit.
-# The latest POSIX draft (d5) allows either behavior.  It says:
-#
-#   For regular files, for each bit set in the octal number
-#   corresponding to the set-user-ID-on-execution or the
-#   set-group-ID-on-execution, bits shown in the following table shall
-#   be set; if these bits are not set in the octal number, they are
-#   cleared. For other file types, it is implementation-defined whether
-#   or not requests to set or clear the set-user-ID-on-execution or
-#   set-group-ID-on-execution bits are honored.
-
-# FIXME: consider changing GNU chmod to work like other versions of chmod.
-# For now, this test simply confirms the existing behavior.
-p=`ls -ld d|sed 's/ .*//'`; case $p in drwxr-xr-x);; *) fail=1;; esac
+case `ls -ld d` in drwxr-sr-x*);; *) fail=1;; esac
 
 (exit $fail); exit $fail