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 <bwal...@artsci.utoronto.ca> 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 <bwal...@artsci.utoronto.ca> --- 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
signature.asc
Description: PGP signature