diff options
Diffstat (limited to 'source3/winbindd/winbindd_sid_to_gid.c')
-rw-r--r-- | source3/winbindd/winbindd_sid_to_gid.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/source3/winbindd/winbindd_sid_to_gid.c b/source3/winbindd/winbindd_sid_to_gid.c index df44ed8d6b..46ca903cd3 100644 --- a/source3/winbindd/winbindd_sid_to_gid.c +++ b/source3/winbindd/winbindd_sid_to_gid.c @@ -54,7 +54,7 @@ struct tevent_req *winbindd_sid_to_gid_send(TALLOC_CTX *mem_ctx, return tevent_req_post(req, ev); } - subreq = wb_sid2gid_send(state, ev, &state->sid); + subreq = wb_sids2xids_send(state, ev, &state->sid, 1); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } @@ -69,12 +69,26 @@ static void winbindd_sid_to_gid_done(struct tevent_req *subreq) struct winbindd_sid_to_gid_state *state = tevent_req_data( req, struct winbindd_sid_to_gid_state); NTSTATUS status; + struct unixid xid; - status = wb_sid2gid_recv(subreq, &state->gid); + status = wb_sids2xids_recv(subreq, &xid); TALLOC_FREE(subreq); if (tevent_req_nterror(req, status)) { return; } + + /* + * We are filtering further down in sids2xids, but that filtering + * depends on the actual type of the sid handed in (as determined + * by lookupsids). Here we need to filter for the type of object + * actually requested, in this case gid. + */ + if (!(xid.type == ID_TYPE_GID || xid.type == ID_TYPE_BOTH)) { + tevent_req_nterror(req, NT_STATUS_NONE_MAPPED); + return; + } + + state->gid = (gid_t)xid.id; tevent_req_done(req); } |