From 98aa8776dd2b510b7f777870fb76b17fd88abbef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Tue, 2 Jun 2015 00:53:48 +0100 Subject: [PATCH] file-has-acl: fix build on Mac OS X 10 This reverts commit f1b37e3a which doesn't work on Mac OS X >= 10.4 which has an incompatible 6 parameter getxattr() call. * doc/glibc-functions/getxattr.texi: Mention the divergent getxattr() call on Mac OS X >= 10.4. * doc/glibc-functions/fgetxattr.texi: Likewise. * lib/file-has-acl.c: Revert to more complete combined check. * m4/acl.m4 (gl_FILE_HAS_ACL): Likewise. Reported by Jack Howarth. --- ChangeLog | 12 ++++++++++++ doc/glibc-functions/fgetxattr.texi | 3 +++ doc/glibc-functions/getxattr.texi | 3 +++ lib/file-has-acl.c | 15 ++------------- m4/acl.m4 | 24 +++++++++++++++++++----- 5 files changed, 39 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 25dec08..2b922ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2015-06-02 Pádraig Brady + file-has-acl: fix build on Mac OS X 10 + This reverts commit f1b37e3a which doesn't work on Mac OS X >= 10.4 + which has an incompatible 6 parameter getxattr() call. + * doc/glibc-functions/getxattr.texi: Mention the divergent getxattr() + call on Mac OS X >= 10.4. + * doc/glibc-functions/fgetxattr.texi: Likewise. + * lib/file-has-acl.c: Revert to more complete combined check. + * m4/acl.m4 (gl_FILE_HAS_ACL): Likewise. + Reported by Jack Howarth. + +2015-06-02 Pádraig Brady + prefix-gnulib-mk: remove no longer needed special case * build-aux/prefix-gnulib-mk (prefix): Since commit e3704b9c, continued lib_SOURCES lines are no longer present, diff --git a/doc/glibc-functions/fgetxattr.texi b/doc/glibc-functions/fgetxattr.texi index 0fc9bac..0fb458f 100644 --- a/doc/glibc-functions/fgetxattr.texi +++ b/doc/glibc-functions/fgetxattr.texi @@ -14,4 +14,7 @@ Portability problems not fixed by Gnulib: This function is missing on many non-glibc platforms: Mac OS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2011-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. address@hidden +This function has extra @code{offset} and @code{options} parameters: +Mac OS X 10.4 @end itemize diff --git a/doc/glibc-functions/getxattr.texi b/doc/glibc-functions/getxattr.texi index f206d25..51ac784 100644 --- a/doc/glibc-functions/getxattr.texi +++ b/doc/glibc-functions/getxattr.texi @@ -14,4 +14,7 @@ Portability problems not fixed by Gnulib: This function is missing on many non-glibc platforms: Mac OS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2011-11, Cygwin 1.5.x, mingw, MSVC 9, Interix 3.5, BeOS. address@hidden +This function has extra @code{offset} and @code{options} parameters: +Mac OS X 10.4 @end itemize diff --git a/lib/file-has-acl.c b/lib/file-has-acl.c index e187117..7e26c53 100644 --- a/lib/file-has-acl.c +++ b/lib/file-has-acl.c @@ -29,11 +29,8 @@ #include "acl-internal.h" -#if HAVE_SYS_XATTR_H +#if GETXATTR_WITH_POSIX_ACLS # include -#endif - -#if HAVE_LINUX_XATTR_H # include #endif @@ -51,15 +48,7 @@ file_has_acl (char const *name, struct stat const *sb) if (! S_ISLNK (sb->st_mode)) { -# if HAVE_GETXATTR - -# ifndef XATTR_NAME_POSIX_ACL_ACCESS -# define XATTR_NAME_POSIX_ACL_ACCESS "system.posix_acl_access" -# endif - -# ifndef XATTR_NAME_POSIX_ACL_DEFAULT -# define XATTR_NAME_POSIX_ACL_DEFAULT "system.posix_acl_default" -# endif +# if GETXATTR_WITH_POSIX_ACLS ssize_t ret; diff --git a/m4/acl.m4 b/m4/acl.m4 index 5da6a43..75fc9ce 100644 --- a/m4/acl.m4 +++ b/m4/acl.m4 @@ -1,5 +1,5 @@ # acl.m4 - check for access control list (ACL) primitives -# serial 20 +# serial 21 # Copyright (C) 2002, 2004-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -181,12 +181,26 @@ AC_DEFUN([gl_FILE_HAS_ACL], [ AC_REQUIRE([gl_FUNC_ACL_ARG]) if test "$enable_acl" != no; then - AC_CHECK_HEADERS([linux/xattr.h]) - AC_CHECK_HEADERS([sys/xattr.h], - [AC_CHECK_FUNCS([getxattr])]) + AC_CACHE_CHECK([for getxattr with XATTR_NAME_POSIX_ACL macros], + [gl_cv_getxattr_with_posix_acls], + [gl_cv_getxattr_with_posix_acls=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + ]], + [[ssize_t a = getxattr (".", XATTR_NAME_POSIX_ACL_ACCESS, 0, 0); + ssize_t b = getxattr (".", XATTR_NAME_POSIX_ACL_DEFAULT, 0, 0); + return a < 0 || b < 0; + ]])], + [gl_cv_getxattr_with_posix_acls=yes])]) fi - if test "$ac_cv_header_sys_xattr_h,$ac_cv_func_getxattr" = yes,yes; then + if test "$gl_cv_getxattr_with_posix_acls" = yes; then LIB_HAS_ACL= + AC_DEFINE([GETXATTR_WITH_POSIX_ACLS], 1, + [Define to 1 if getxattr works with XATTR_NAME_POSIX_ACL_ACCESS + and XATTR_NAME_POSIX_ACL_DEFAULT.]) else dnl Set gl_need_lib_has_acl to a nonempty value, so that any dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL. -- 2.4.1