Print this page
NEX-1767 ls is unable to display SIDs
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
SUP-795 IDMAP: idmap_getwinnamebyuid() and idmap_getwinnamebygid() fails for empty domains
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
*** 18,28 ****
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
*/
/*LINTLIBRARY*/
#include <grp.h>
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
*/
/*LINTLIBRARY*/
#include <grp.h>
*** 170,179 ****
--- 170,188 ----
free(domain);
return (*sidp ? 0 : 1);
}
+ /*
+ * sid_string_by_id() is an exposed interface via -lsec
+ */
+ int
+ sid_string_by_id(uid_t who, boolean_t user, char **sidp, boolean_t noresolve)
+ {
+ return (getsidname(who, user, sidp, noresolve));
+ }
+
static void
aclent_printacl(acl_t *aclp)
{
aclent_t *tp;
int aclcnt;
*** 414,431 ****
case ACE_EVERYONE:
error = str_append(dynstr, EVERYONEAT_TXT);
break;
case 0:
! if ((flags & ACL_SID_FMT) && acep->a_who > MAXUID) {
if (error = str_append(dynstr, USERSID_TXT))
break;
if (error = getsidname(acep->a_who, B_TRUE,
&sidp, flags & ACL_NORESOLVE))
break;
error = str_append(dynstr, sidp);
} else {
if (error = str_append(dynstr, USER_TXT))
break;
error = str_append(dynstr, pruname(acep->a_who, idp,
sizeof (idp), flags & ACL_NORESOLVE));
}
--- 423,442 ----
case ACE_EVERYONE:
error = str_append(dynstr, EVERYONEAT_TXT);
break;
case 0:
! if ((flags & ACL_SID_FMT) && acep->a_who > MAXUID &&
! (flags & ACL_EPHEMERAL) == 0) {
if (error = str_append(dynstr, USERSID_TXT))
break;
if (error = getsidname(acep->a_who, B_TRUE,
&sidp, flags & ACL_NORESOLVE))
break;
error = str_append(dynstr, sidp);
} else {
+ flags &= ~ACL_NORESOLVE;
if (error = str_append(dynstr, USER_TXT))
break;
error = str_append(dynstr, pruname(acep->a_who, idp,
sizeof (idp), flags & ACL_NORESOLVE));
}
*** 1026,1036 ****
yyinteractive = 0;
return (error);
}
static void
! ace_compact_printacl(acl_t *aclp)
{
int cnt;
ace_t *acep;
dynaclstr_t *dstr;
int len;
--- 1037,1047 ----
yyinteractive = 0;
return (error);
}
static void
! ace_compact_printacl(acl_t *aclp, int flgs)
{
int cnt;
ace_t *acep;
dynaclstr_t *dstr;
int len;
*** 1048,1058 ****
for (cnt = 0, acep = aclp->acl_aclp;
cnt != aclp->acl_cnt; cnt++, acep++) {
dstr->d_aclexport[0] = '\0';
dstr->d_pos = 0;
! if (ace_type_txt(dstr, acep, 0))
break;
len = strlen(&dstr->d_aclexport[0]);
if (ace_perm_txt(dstr, acep->a_access_mask, acep->a_flags,
aclp->acl_flags & ACL_IS_DIR, ACL_COMPACT_FMT))
break;
--- 1059,1069 ----
for (cnt = 0, acep = aclp->acl_aclp;
cnt != aclp->acl_cnt; cnt++, acep++) {
dstr->d_aclexport[0] = '\0';
dstr->d_pos = 0;
! if (ace_type_txt(dstr, acep, flgs))
break;
len = strlen(&dstr->d_aclexport[0]);
if (ace_perm_txt(dstr, acep->a_access_mask, acep->a_flags,
aclp->acl_flags & ACL_IS_DIR, ACL_COMPACT_FMT))
break;
*** 1068,1089 ****
free(dstr->d_aclexport);
free(dstr);
}
static void
! ace_printacl(acl_t *aclp, int cols, int compact)
{
int slot = 0;
char *token;
char *acltext;
! if (compact) {
! ace_compact_printacl(aclp);
return;
}
! acltext = acl_totext(aclp, 0);
if (acltext == NULL)
return;
token = strtok(acltext, ",");
--- 1079,1100 ----
free(dstr->d_aclexport);
free(dstr);
}
static void
! ace_printacl(acl_t *aclp, int cols, int flgs)
{
int slot = 0;
char *token;
char *acltext;
! if (flgs & ACL_COMPACT_FMT) {
! ace_compact_printacl(aclp, flgs);
return;
}
! acltext = acl_totext(aclp, flgs);
if (acltext == NULL)
return;
token = strtok(acltext, ",");
*** 1109,1127 ****
* for ace_t ACL's the cols variable will break up
* the long lines into multiple lines and will also
* print a "slot" number.
*/
void
! acl_printacl(acl_t *aclp, int cols, int compact)
{
switch (aclp->acl_type) {
case ACLENT_T:
aclent_printacl(aclp);
break;
case ACE_T:
! ace_printacl(aclp, cols, compact);
break;
}
}
typedef struct value_table {
--- 1120,1138 ----
* for ace_t ACL's the cols variable will break up
* the long lines into multiple lines and will also
* print a "slot" number.
*/
void
! acl_printacl(acl_t *aclp, int cols, int flgs)
{
switch (aclp->acl_type) {
case ACLENT_T:
aclent_printacl(aclp);
break;
case ACE_T:
! ace_printacl(aclp, cols, flgs);
break;
}
}
typedef struct value_table {