copy-acl: ignore ENOTSUP on HP-UX
authorPádraig Brady <P@draigBrady.com>
Thu, 10 Jun 2010 14:12:48 +0000 (15:12 +0100)
committerEric Blake <eblake@redhat.com>
Tue, 10 Aug 2010 15:35:20 +0000 (09:35 -0600)
Fixes Coreutils bug 6053.

* lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Move definition up,
so that it is available for HP-UX.
* lib/copy-acl.c (qcopy_acl): Use it.
Reported by Patrick M. Callahan.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/acl-internal.h
lib/copy-acl.c

index a9fdc9c..dffc9ed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-08-10  Pádraig Brady <P@draigbrady.com>
+       and Eric Blake  <eblake@redhat.com>
+
+       copy-acl: ignore ENOTSUP on HP-UX
+       * lib/acl-internal.h (ACL_NOT_WELL_SUPPORTED): Move definition up,
+       so that it is available for HP-UX.
+       * lib/copy-acl.c (qcopy_acl): Use it.
+       Reported by Patrick M. Callahan.
+
 2010-08-10  Eric Blake  <eblake@redhat.com>
 
        open, chown: relax license
index 676e57a..7f9cde1 100644 (file)
 # define fchmod(fd, mode) (-1)
 #endif
 
+/* Recognize some common errors such as from an NFS mount that does
+   not support ACLs, even when local drives do.  */
+#if defined __APPLE__ && defined __MACH__ /* MacOS X */
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT)
+#elif defined EOPNOTSUPP /* Tru64 NFS */
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP)
+#else
+# define ACL_NOT_WELL_SUPPORTED(Err) \
+     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY)
+#endif
 
 #if USE_ACL
 
@@ -125,17 +137,6 @@ rpl_acl_set_fd (int fd, acl_t acl)
 #   define MODE_INSIDE_ACL 1
 #  endif
 
-#  if defined __APPLE__ && defined __MACH__ /* MacOS X */
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == ENOENT)
-#  elif defined EOPNOTSUPP /* Tru64 NFS */
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY || (Err) == EOPNOTSUPP)
-#  else
-#   define ACL_NOT_WELL_SUPPORTED(Err) \
-     ((Err) == ENOTSUP || (Err) == ENOSYS || (Err) == EINVAL || (Err) == EBUSY)
-#  endif
-
 /* Return the number of entries in ACL.
    Return -1 and set errno upon failure to determine it.  */
 /* Define a replacement for acl_entries if needed. (Only Linux has it.)  */
index c047913..421907d 100644 (file)
@@ -420,7 +420,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name,
 
       if (count < 0)
         {
-          if (errno == ENOSYS || errno == EOPNOTSUPP)
+          if (ACL_NOT_WELL_SUPPORTED (errno))
             {
               count = 0;
               break;
@@ -455,7 +455,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name,
     {
       int saved_errno = errno;
 
-      if (errno == ENOSYS || errno == EOPNOTSUPP)
+      if (ACL_NOT_WELL_SUPPORTED (errno))
         {
           struct stat source_statbuf;