From: Stefan Metzmacher Date: Mon, 10 Mar 2008 16:18:01 +0000 (+0100) Subject: wb-ndr: implement WINBIND_LOOKUP_LEVEL_SID2USERINFO X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=9155e033df6de749a30e9ce92c4b923a4a545ea1;p=metze%2Fsamba%2Fwb-ndr.git wb-ndr: implement WINBIND_LOOKUP_LEVEL_SID2USERINFO metze --- diff --git a/source/winbindd/winbindd_async.c b/source/winbindd/winbindd_async.c index 9f4142990e3..e71fdd3e82f 100644 --- a/source/winbindd/winbindd_async.c +++ b/source/winbindd/winbindd_async.c @@ -446,6 +446,44 @@ static void ndr_child_lookup_rids2names(struct winbindd_domain *domain, r->out.result = WINBIND_STATUS_OK; } +static void ndr_child_lookup_sid2userinfo(struct winbindd_domain *domain, + struct winbindd_cli_state *state, + struct winbind_lookup *r) +{ + NTSTATUS status; + WINBIND_USERINFO user_info; + + DEBUG(3, ("lookup sid2userinfo user:%s\n", + sid_string_dbg(r->in.req.sid))); + + + status = domain->methods->query_user(domain, state->mem_ctx, + r->in.req.sid, &user_info); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(1, ("error getting user info for sid %s: %s\n", + sid_string_dbg(r->in.req.sid), nt_errstr(status))); + r->out.result = WINBIND_STATUS_FOOBAR; + return; + } + + r->out.rep->user_info.account = user_info.acct_name; + r->out.rep->user_info.gecos = user_info.full_name; + r->out.rep->user_info.homedir = user_info.homedir; + r->out.rep->user_info.shell = user_info.shell; + r->out.rep->user_info.primary_gid = user_info.primary_gid; + + if (!sid_peek_check_rid(&domain->sid, &user_info.group_sid, + &r->out.rep->user_info.primary_rid)) { + DEBUG(1, ("Could not extract group rid out of %s\n", + sid_string_dbg(&user_info.group_sid))); + r->out.result = WINBIND_STATUS_FOOBAR; + return; + } + + r->out.result = WINBIND_STATUS_OK; +} + + void winbindd_ndr_domain_child_lookup(struct winbindd_domain *domain, struct winbindd_cli_state *state) { @@ -466,6 +504,10 @@ void winbindd_ndr_domain_child_lookup(struct winbindd_domain *domain, case WINBIND_LOOKUP_LEVEL_RIDS2NAMES: ndr_child_lookup_rids2names(domain, state, r); return; + + case WINBIND_LOOKUP_LEVEL_SID2USERINFO: + ndr_child_lookup_sid2userinfo(domain, state, r); + return; } r->out.result = WINBIND_STATUS_UNKNOWN_LEVEL;