acl: Complete the 2010-08-10 fix.
authorBruno Haible <bruno@clisp.org>
Sun, 12 Jun 2011 23:17:20 +0000 (01:17 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 12 Jun 2011 23:17:20 +0000 (01:17 +0200)
* lib/file-has-acl.c (file_has_acl) [HP-UX]: Also test against ENOTSUP.
* lib/set-mode-acl.c (qset_acl) [HP-UX]: Likewise.
* lib/copy-acl.c (qcopy_acl) [HP-UX]: Test for the errno values
explicitly.
* tests/test-sameacls.c (main) [HP-UX]: Also test against ENOTSUP.
Reported in <http://debbugs.gnu.org/db/60/6053.html>.

ChangeLog
lib/copy-acl.c
lib/file-has-acl.c
lib/set-mode-acl.c
tests/test-sameacls.c

index 498caedfe7cda306db5461bb7620cae20a997be1..5a0d7af5c825a62ce4ca04c7b605ad7695162d9c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2011-06-12  Bruno Haible  <bruno@clisp.org>
+
+       acl: Complete the 2010-08-10 fix.
+       * lib/file-has-acl.c (file_has_acl) [HP-UX]: Also test against ENOTSUP.
+       * lib/set-mode-acl.c (qset_acl) [HP-UX]: Likewise.
+       * lib/copy-acl.c (qcopy_acl) [HP-UX]: Test for the errno values
+       explicitly.
+       * tests/test-sameacls.c (main) [HP-UX]: Also test against ENOTSUP.
+       Reported in <http://debbugs.gnu.org/db/60/6053.html>.
+
 2011-06-12  Bruno Haible  <bruno@clisp.org>
 
        spawn-pipe tests: Comments.
index f0dc1165deb2988d9c750fccec42cd1cd8c70acc..d933fa2faba48d68b9ac89c043bedb2dacf551bd 100644 (file)
@@ -420,7 +420,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name,
 
       if (count < 0)
         {
-          if (ACL_NOT_WELL_SUPPORTED (errno))
+          if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)
             {
               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 (ACL_NOT_WELL_SUPPORTED (errno))
+      if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)
         {
           struct stat source_statbuf;
 
index a815e4c47deb6f07b52be898b36cc5cf1e0f7e1e..03decf46ba94c357c88ed36b4f681319db552b3d 100644 (file)
@@ -527,7 +527,15 @@ file_has_acl (char const *name, struct stat const *sb)
           count = getacl (name, 0, NULL);
 
           if (count < 0)
-            return (errno == ENOSYS || errno == EOPNOTSUPP ? 0 : -1);
+            {
+              /* ENOSYS is seen on newer HP-UX versions.
+                 EOPNOTSUPP is typically seen on NFS mounts.
+                 ENOTSUP was seen on Quantum StorNext file systems (cvfs).  */
+              if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)
+                return 0;
+              else
+                return -1;
+            }
 
           if (count == 0)
             return 0;
index 377597c0faec7ac8b16fcbab7724fb74953f943d..1392378fd71fe7c25e68646c9e99987be16cbac8 100644 (file)
@@ -432,7 +432,7 @@ qset_acl (char const *name, int desc, mode_t mode)
     ret = setacl (name, sizeof (entries) / sizeof (struct acl_entry), entries);
   if (ret < 0)
     {
-      if (errno == ENOSYS || errno == EOPNOTSUPP)
+      if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP)
         return chmod_or_fchmod (name, desc, mode);
       return -1;
     }
index 0f777b55be9c68244398ae1eb060cc8eb145d071..661a9266a9e87ff485d15ceefe57c5c7815c25a7 100644 (file)
@@ -360,10 +360,12 @@ main (int argc, char *argv[])
   int count2;
 
   count1 = getacl (file1, 0, NULL);
-  if (count1 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP))
+  if (count1 < 0
+      && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP))
     count1 = 0;
   count2 = getacl (file2, 0, NULL);
-  if (count2 < 0 && (errno == ENOSYS || errno == EOPNOTSUPP))
+  if (count2 < 0
+      && (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP))
     count2 = 0;
 
   if (count1 < 0)