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 {