bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Solaris ACL handling


From: Ben Walton
Subject: [PATCH] Solaris ACL handling
Date: Fri, 12 Feb 2010 08:32:00 -0500
User-agent: Sup/git

Hi All,

I'm building coreutils for OpenCSW (http://opencsw.org) and was seeing
the test suite fail several tests with 'Operation not supported on
tranport endpoint' messages.  After digging around a bit, I found that
errno was EOPNOTSUPP in several ACL handling routines and that wasn't
covered.

This patch resolved those test failures for me.  Please let me know if
there is more information required or if my submission isn't up to
snuff for any reason.

Thanks
-Ben

>From a06d449a84a393d2d764a0d7871840cb99f665d7 Mon Sep 17 00:00:00 2001
From: Ben Walton <address@hidden>
Date: Thu, 11 Feb 2010 04:43:29 +0100
Subject: [PATCH] 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

Signed-off-by: Ben Walton <address@hidden>
---
 lib/copy-acl.c     |    4 ++--
 lib/set-mode-acl.c |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/copy-acl.c b/lib/copy-acl.c
index 1e82240..e187cda 100644
--- a/lib/copy-acl.c
+++ b/lib/copy-acl.c
@@ -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,7 @@ 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
diff --git a/lib/set-mode-acl.c b/lib/set-mode-acl.c
index c5b4726..2cd2c75 100644
--- a/lib/set-mode-acl.c
+++ b/lib/set-mode-acl.c
@@ -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;
       }
-- 
1.6.6


-- 
Ben Walton
Systems Programmer - CHASS
University of Toronto
C:416.407.5610 | W:416.978.4302

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]