1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

nsswitch: wbinfo --lookup-sids

Signed-off-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Volker Lendecke 2011-03-09 16:36:20 +01:00 committed by Jeremy Allison
parent 4be643d4ce
commit 69ba25948a

View File

@ -1269,6 +1269,58 @@ done:
return ret;
}
static bool wbinfo_lookup_sids(const char *arg)
{
char sidstr[WBC_SID_STRING_BUFLEN];
struct wbcDomainSid *sids;
struct wbcDomainInfo *domains;
struct wbcTranslatedName *names;
int num_domains;
int i, num_sids;
const char *p;
wbcErr wbc_status;
num_sids = 0;
sids = NULL;
p = arg;
while (next_token(&p, sidstr, LIST_SEP, sizeof(sidstr))) {
sids = talloc_realloc(talloc_tos(), sids, struct wbcDomainSid,
num_sids+1);
if (sids == NULL) {
d_fprintf(stderr, "talloc failed\n");
return false;
}
wbc_status = wbcStringToSid(sidstr, &sids[num_sids]);
if (!WBC_ERROR_IS_OK(wbc_status)) {
d_fprintf(stderr, "wbcSidToString(%s) failed: %s\n",
sidstr, wbcErrorString(wbc_status));
TALLOC_FREE(sids);
return false;
}
num_sids += 1;
}
wbc_status = wbcLookupSids(sids, num_sids, &domains, &num_domains,
&names);
if (!WBC_ERROR_IS_OK(wbc_status)) {
d_fprintf(stderr, "wbcLookupSids failed: %s\n",
wbcErrorString(wbc_status));
TALLOC_FREE(sids);
return false;
}
for (i=0; i<num_sids; i++) {
wbcSidToStringBuf(&sids[i], sidstr, sizeof(sidstr));
d_printf("%s -> %s\\%s %d\n", sidstr,
domains[names[i].domain_index].short_name,
names[i].name, names[i].type);
}
return true;
}
/* Convert string to sid */
static bool wbinfo_lookupname(const char *full_name)
@ -1900,6 +1952,7 @@ enum {
OPT_USERDOMGROUPS,
OPT_SIDALIASES,
OPT_USERSIDS,
OPT_LOOKUP_SIDS,
OPT_ALLOCATE_UID,
OPT_ALLOCATE_GID,
OPT_SET_UID_MAPPING,
@ -1958,6 +2011,9 @@ int main(int argc, char **argv, char **envp)
{ "sid-to-fullname", 0, POPT_ARG_STRING, &string_arg,
OPT_SID_TO_FULLNAME, "Converts sid to fullname", "SID" },
{ "lookup-rids", 'R', POPT_ARG_STRING, &string_arg, 'R', "Converts RIDs to names", "RIDs" },
{ "lookup-sids", 0, POPT_ARG_STRING, &string_arg,
OPT_LOOKUP_SIDS, "Converts SIDs to types and names",
"Sid-List"},
{ "uid-to-sid", 'U', POPT_ARG_INT, &int_arg, 'U', "Converts uid to sid" , "UID" },
{ "gid-to-sid", 'G', POPT_ARG_INT, &int_arg, 'G', "Converts gid to sid", "GID" },
{ "sid-to-uid", 'S', POPT_ARG_STRING, &string_arg, 'S', "Converts sid to uid", "SID" },
@ -2102,6 +2158,13 @@ int main(int argc, char **argv, char **envp)
goto done;
}
break;
case OPT_LOOKUP_SIDS:
if (!wbinfo_lookup_sids(string_arg)) {
d_fprintf(stderr, "Could not lookup SIDs %s\n",
string_arg);
goto done;
}
break;
case 'n':
if (!wbinfo_lookupname(string_arg)) {
d_fprintf(stderr, "Could not lookup name %s\n",