diff options
author | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2010-04-14 13:25:42 -0600 |
---|---|---|
committer | Mark Shellenbaum <Mark.Shellenbaum@Sun.COM> | 2010-04-14 13:25:42 -0600 |
commit | 27dd1e87cd3d939264769dd4af7e6a529cde001f (patch) | |
tree | 71be7e9b44ec87814159094591ebf5680350824a /usr/src/lib/libsec/common/aclutils.c | |
parent | 1cfa752f4e24c34133009b0f6c139127a5c461de (diff) | |
download | illumos-joyent-27dd1e87cd3d939264769dd4af7e6a529cde001f.tar.gz |
PSARC/2010/029 Improved ACL interoperability
6923083 ZFS/NFS/SMB ACL interoperability changes
Diffstat (limited to 'usr/src/lib/libsec/common/aclutils.c')
-rw-r--r-- | usr/src/lib/libsec/common/aclutils.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/usr/src/lib/libsec/common/aclutils.c b/usr/src/lib/libsec/common/aclutils.c index 2850c4dd1a..afe36a3aaa 100644 --- a/usr/src/lib/libsec/common/aclutils.c +++ b/usr/src/lib/libsec/common/aclutils.c @@ -19,8 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -391,7 +390,7 @@ acl_strip(const char *file, uid_t owner, gid_t group, mode_t mode) { int error = 0; aclent_t min_acl[MIN_ACL_ENTRIES]; - ace_t min_ace_acl[6]; /* owner, group, everyone + complement denies */ + ace_t *min_ace_acl; int acl_flavor; int aclcnt; @@ -420,16 +419,11 @@ acl_strip(const char *file, uid_t owner, gid_t group, mode_t mode) aclcnt = 4; error = acl(file, SETACL, aclcnt, min_acl); } else if (acl_flavor & _ACL_ACE_ENABLED) { - (void) memcpy(min_ace_acl, trivial_acl, sizeof (ace_t) * 6); - - /* - * Make aces match request mode - */ - adjust_ace_pair(&min_ace_acl[0], (mode & 0700) >> 6); - adjust_ace_pair(&min_ace_acl[2], (mode & 0070) >> 3); - adjust_ace_pair(&min_ace_acl[4], mode & 0007); - - error = acl(file, ACE_SETACL, 6, min_ace_acl); + if ((error = acl_trivial_create(mode, &min_ace_acl, + &aclcnt)) != 0) + return (error); + error = acl(file, ACE_SETACL, aclcnt, min_ace_acl); + free(min_ace_acl); } else { errno = EINVAL; error = 1; |