copy-acl: enhance Solaris ACL error handling
authorBen Walton <bwalton@artsci.utoronto.ca>
Fri, 12 Feb 2010 13:32:00 +0000 (08:32 -0500)
committerIan Beckwith <ianb@erislabs.net>
Mon, 8 Mar 2010 02:36:17 +0000 (02:36 +0000)
Gracefully handle EOPNOTSUPP in qcopy_acl and qset_acl.  These
functions, as used in coreutils, were causing the test suite to fail
on Solaris 8 i386 with ZFS-backed NFSv3 mounts.  The failures included
errors such as:

FAIL: cp/backup-dir
cp: preserving permissions for `y/x': Operation not supported on
transport endpoint

* lib/copy-acl.c (qcopy_acl): Also ignore EOPNOTSUPP.
* lib/set-mode-acl.c (qset_acl): Likewise.

Signed-off-by: Ben Walton <bwalton@artsci.utoronto.ca>
Signed-off-by: Eric Blake <eblake@redhat.com>
(cherry picked from commit ca156dd87d41d9dbd0eb90f4d8b7a2a73c78a47e)

ChangeLog
lib/copy-acl.c
lib/set-mode-acl.c

index 28c48ae..f6d7e64 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-02  Ben Walton  <bwalton@artsci.utoronto.ca>  (tiny change)
+
+       copy-acl: enhance Solaris ACL error handling
+       * lib/copy-acl.c (qcopy_acl): Also ignore EOPNOTSUPP.
+       * lib/set-mode-acl.c (qset_acl): Likewise.
+
 2010-03-02  Bruno Haible  <bruno@clisp.org>
 
        spawn: Don't override the system defined values on FreeBSD 8.
index 1e82240..c047913 100644 (file)
@@ -294,7 +294,7 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name,
 
       if (count < 0)
         {
-          if (errno == ENOSYS || errno == ENOTSUP)
+          if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP)
             {
               count = 0;
               entries = NULL;
@@ -358,7 +358,8 @@ qcopy_acl (const char *src_name, int source_desc, const char *dst_name,
       if (ret < 0 && saved_errno == 0)
         {
           saved_errno = errno;
-          if (errno == ENOSYS && !acl_nontrivial (count, entries))
+          if ((errno == ENOSYS || errno == EOPNOTSUPP)
+              && !acl_nontrivial (count, entries))
             saved_errno = 0;
         }
       else
index c5b4726..2cd2c75 100644 (file)
@@ -387,7 +387,7 @@ qset_acl (char const *name, int desc, mode_t mode)
       ret = acl (name, SETACL, sizeof (entries) / sizeof (aclent_t), entries);
     if (ret < 0)
       {
-        if (errno == ENOSYS)
+        if (errno == ENOSYS || errno == EOPNOTSUPP)
           return chmod_or_fchmod (name, desc, mode);
         return -1;
       }