/* * lsarpc_s_LookupPrivName * * Server side function used to map a locally unique identifier (LUID) * to the appropriate privilege name string. */ static int lsarpc_s_LookupPrivName(void *arg, ndr_xa_t *mxa) { struct mslsa_LookupPrivName *param = arg; smb_privinfo_t *pi; int rc; if ((pi = smb_priv_getbyvalue(param->luid.low_part)) == NULL) { bzero(param, sizeof (struct mslsa_LookupPrivName)); param->status = NT_SC_ERROR(NT_STATUS_NO_SUCH_PRIVILEGE); return (NDR_DRC_OK); } param->name = NDR_NEW(mxa, mslsa_string_t); if (param->name == NULL) { bzero(param, sizeof (struct mslsa_LookupPrivName)); param->status = NT_SC_ERROR(NT_STATUS_NO_MEMORY); return (NDR_DRC_OK); } rc = NDR_MSTRING(mxa, pi->name, (ndr_mstring_t *)param->name); if (rc == -1) { bzero(param, sizeof (struct mslsa_LookupPrivName)); param->status = NT_SC_ERROR(NT_STATUS_NO_MEMORY); return (NDR_DRC_OK); } param->status = NT_STATUS_SUCCESS; return (NDR_DRC_OK); }
/* * smbadm_group_dump_privs * * Dump group privilege details. */ static void smbadm_group_dump_privs(smb_privset_t *privs) { smb_privinfo_t *pinfo; char *pstatus; int i; (void) printf(gettext("\tPrivileges: \n")); for (i = 0; i < privs->priv_cnt; i++) { pinfo = smb_priv_getbyvalue(privs->priv[i].luid.lo_part); if ((pinfo == NULL) || (pinfo->flags & PF_PRESENTABLE) == 0) continue; switch (privs->priv[i].attrs) { case SE_PRIVILEGE_ENABLED: pstatus = "On"; break; case SE_PRIVILEGE_DISABLED: pstatus = "Off"; break; default: pstatus = "Unknown"; break; } (void) printf(gettext("\t\t%s: %s\n"), pinfo->name, pstatus); } if (privs->priv_cnt == 0) (void) printf(gettext("\t\tNo privileges\n")); }