# Show all commands when run with environment variable VERBOSE=yes.
test -z "$VERBOSE" || set -x
+test "$USE_ACL" = 0 &&
+ {
+ echo "Skipping test: insufficient ACL support"
+ exit 77
+ }
+
# func_tmpdir
# creates a temporary directory.
# Sets variable
# Classification of the platform according to the programs available for
# manipulating ACLs.
# Possible values are:
- # linux, cygwin, freebsd, solaris, hpux, osf1, aix, macosx, irix, none.
- # TODO: Support also native Win32 platforms (mingw).
+ # linux, cygwin, freebsd, solaris, hpux, hpuxjfs, osf1, aix, macosx, irix, none.
+ # TODO: Support also native Windows platforms (mingw).
acl_flavor=none
if (getfacl tmpfile0 >/dev/null) 2>/dev/null; then
# Platforms with the getfacl and setfacl programs.
if (lsacl / >/dev/null) 2>/dev/null; then
# Platforms with the lsacl and chacl programs.
# HP-UX, sometimes also IRIX.
- acl_flavor=hpux
+ if (getacl tmpfile0 >/dev/null) 2>/dev/null; then
+ # HP-UX 11.11 or newer.
+ acl_flavor=hpuxjfs
+ else
+ # HP-UX 11.00.
+ acl_flavor=hpux
+ fi
else
if (getacl tmpfile0 >/dev/null) 2>/dev/null; then
- # Tru64.
- acl_flavor=osf1
+ # Tru64, NonStop Kernel.
+ if (getacl -m tmpfile0 >/dev/null) 2>/dev/null; then
+ # Tru64.
+ acl_flavor=osf1
+ else
+ # NonStop Kernel.
+ acl_flavor=nsk
+ fi
else
if (aclget tmpfile0 >/dev/null) 2>/dev/null; then
# AIX.
acl_flavor=aix
else
if (fsaclctl -v >/dev/null) 2>/dev/null; then
- # MacOS X.
+ # Mac OS X.
acl_flavor=macosx
else
if test -f /sbin/chacl; then
fi
fi
- # func_test_has_acl file expected
- # tests the result of the file_has_acl function on file, and checks that it
- # matches the expected value.
- func_test_has_acl ()
- {
- res=`"$builddir"/test-file-has-acl${EXEEXT} "$1"`
- test "$res" = "$2" || {
- echo "file_has_acl(\"$1\") returned $res, expected $2" 1>&2
- exit 1
- }
- }
-
# func_test_file_has_acl file expected
# tests the result of the file_has_acl function on file, and checks that it
# matches the expected value.
func_test_has_acl tmpfile0 no
+ mkdir tmpdir0
+ func_test_has_acl tmpdir0 no
+
if test $acl_flavor != none; then
+ # A POSIX compliant 'id' program.
+ if test -f /usr/xpg4/bin/id; then
+ ID=/usr/xpg4/bin/id
+ else
+ ID=id
+ fi
# Use a user and group id different from the current one, to avoid
# redundant/ambiguous ACLs.
- myuid=`id -u`
- mygid=`id -g`
+ myuid=`$ID -u`
+ mygid=`$ID -g`
auid=1
if test "$auid" = "$myuid"; then auid=2; fi
agid=1
if test "$agid" = "$mygid"; then agid=2; fi
case $acl_flavor in
- linux | cygwin | freebsd | solaris)
+ linux | freebsd | solaris)
# Set an ACL for a user.
if setfacl -m user:$auid:1 tmpfile0; then
*) setfacl -d user:$auid:1 tmpfile0 ;;
esac
- # On Linux, the ACL for the mask is implicitly added.
+ # On Linux and FreeBSD, the ACL for the mask is implicitly added.
# On Solaris, it is always there.
case $acl_flavor in
- linux) func_test_has_acl tmpfile0 yes ;;
- *) func_test_has_acl tmpfile0 no ;;
+ linux | freebsd) func_test_has_acl tmpfile0 yes ;;
+ *) func_test_has_acl tmpfile0 no ;;
esac
# Remove the ACL for the mask, if it was implicitly added.
fi
;;
- hpux)
+ cygwin)
+
+ # Set an ACL for a group.
+ if setfacl -m group:0:1 tmpfile0; then
+
+ func_test_has_acl tmpfile0 yes
+
+ # Remove the ACL for the group.
+ setfacl -d group:0 tmpfile0
+
+ func_test_has_acl tmpfile0 no
+
+ fi
+ ;;
+
+ hpux | hpuxjfs)
# Set an ACL for a user.
orig=`lsacl tmpfile0 | sed -e 's/ tmpfile0$//'`
func_test_has_acl tmpfile0 no
+ else
+ if test $acl_flavor = hpuxjfs; then
+
+ # Set an ACL for a user.
+ setacl -m user:$auid:1 tmpfile0
+
+ func_test_has_acl tmpfile0 yes
+
+ # Remove the ACL for the user.
+ setacl -d user:$auid tmpfile0
+
+ func_test_has_acl tmpfile0 no
+
+ fi
fi
;;
fi
;;
+ nsk)
+
+ # Set an ACL for a user.
+ setacl -m user:$auid:1 tmpfile0
+
+ func_test_has_acl tmpfile0 yes
+
+ # Remove the ACL for the user.
+ setacl -d user:$auid tmpfile0
+
+ func_test_has_acl tmpfile0 no
+
+ ;;
+
aix)
# Set an ACL for a user.
fi
rm -f tmpfile[0-9] tmp.err
+ rm -rf tmpdir0
) || exit 1
rm -rf "$tmp"