X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ffile-has-acl.c;h=2ee6ba210664ac1909dc173f76fe3acdebae6504;hb=1bb384c44db25aef8f8b455cef22af32d8401abc;hp=3d4d5c16ff0a27807903962edc40e6670918715d;hpb=227b08bbf68b66e8d7cd4da5c1a6f0ebf5a5d9e8;p=gnulib.git diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c index 3d4d5c16f..2ee6ba210 100644 --- a/lib/file-has-acl.c +++ b/lib/file-has-acl.c @@ -366,12 +366,20 @@ file_has_acl (char const *name, struct stat const *sb) /* Linux, FreeBSD, MacOS X, IRIX, Tru64 */ int ret; - if (HAVE_ACL_EXTENDED_FILE) /* Linux */ + if (HAVE_ACL_EXTENDED_FILE || HAVE_ACL_EXTENDED_FILE_NOFOLLOW) /* Linux */ { +# if HAVE_ACL_EXTENDED_FILE_NOFOLLOW + /* acl_extended_file_nofollow() uses lgetxattr() in order to prevent + unnecessary mounts, but it returns the same result as we already + know that NAME is not a symbolic link at this point (modulo the + TOCTTOU race condition). */ + ret = acl_extended_file_nofollow (name); +# else /* On Linux, acl_extended_file is an optimized function: It only makes two calls to getxattr(), one for ACL_TYPE_ACCESS, one for ACL_TYPE_DEFAULT. */ ret = acl_extended_file (name); +# endif } else /* FreeBSD, MacOS X, IRIX, Tru64 */ {