changeset 12906:05cf771f8b65

copy-acl: enhance Solaris ACL error handling 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>
author Ben Walton <bwalton@artsci.utoronto.ca>
date Fri, 12 Feb 2010 08:32:00 -0500
parents 8d1732828ada
children 41c34f933d77
files ChangeLog lib/copy-acl.c lib/set-mode-acl.c
diffstat 3 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- a/lib/copy-acl.c
+++ b/lib/copy-acl.c
@@ -294,7 +294,7 @@
 
       if (count < 0)
         {
-          if (errno == ENOSYS || errno == ENOTSUP)
+          if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP)
             {
               count = 0;
               entries = NULL;
@@ -358,7 +358,8 @@
       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
--- a/lib/set-mode-acl.c
+++ b/lib/set-mode-acl.c
@@ -387,7 +387,7 @@
       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;
       }