diff options
Diffstat (limited to 'usr/src/lib/libdevinfo/devinfo_devperm.c')
-rw-r--r-- | usr/src/lib/libdevinfo/devinfo_devperm.c | 40 |
1 files changed, 13 insertions, 27 deletions
diff --git a/usr/src/lib/libdevinfo/devinfo_devperm.c b/usr/src/lib/libdevinfo/devinfo_devperm.c index df1f5dff3c..ef5ca55c48 100644 --- a/usr/src/lib/libdevinfo/devinfo_devperm.c +++ b/usr/src/lib/libdevinfo/devinfo_devperm.c @@ -84,7 +84,6 @@ setdevaccess(char *dev, uid_t uid, gid_t gid, mode_t mode, void (*errmsg)(char *)) { int err = 0, local_errno; - aclent_t acls[4]; char errstring[MAX_LINELEN]; if (chown(dev, uid, gid) == -1) { @@ -106,24 +105,12 @@ setdevaccess(char *dev, uid_t uid, gid_t gid, mode_t mode, (*errmsg)(errstring); } - acls[0].a_type = USER_OBJ; - acls[0].a_id = uid; - acls[0].a_perm = ((mode & 0700) >> 6); - - acls[1].a_type = GROUP_OBJ; - acls[1].a_id = gid; - acls[1].a_perm = ((mode & 0070) >> 3); - - acls[2].a_type = CLASS_OBJ; - acls[2].a_id = (uid_t)-1; - acls[2].a_perm = ((mode & 0070) >> 3); - - acls[3].a_type = OTHER_OBJ; - acls[3].a_id = (uid_t)-1; - acls[3].a_perm = (mode & 0007); + /* + * strip_acl sets an acl and changes the files owner/group + */ + err = acl_strip(dev, uid, gid, mode); - /* Remove ACLs */ - if (acl(dev, SETACL, 4, acls) < 0) { + if (err != 0) { /* * If the file system returned ENOSYS, we know that it * doesn't support ACLs, therefore, we must assume that @@ -139,15 +126,14 @@ setdevaccess(char *dev, uid_t uid, gid_t gid, mode_t mode, (*errmsg)(errstring); } } - } - - if (chmod(dev, mode) == -1) { - err = -1; - if (errmsg) { - (void) snprintf(errstring, MAX_LINELEN, - "failed to chmod device %s: %s\n", - dev, strerror(errno)); - (*errmsg)(errstring); + if (chmod(dev, mode) == -1) { + err = -1; + if (errmsg) { + (void) snprintf(errstring, MAX_LINELEN, + "failed to chmod device %s: %s\n", + dev, strerror(errno)); + (*errmsg)(errstring); + } } } |