winbindd: make a copy of xid's in wb_xids2sids_send()
authorRalph Boehme <slow@samba.org>
Thu, 21 Feb 2019 17:34:51 +0000 (18:34 +0100)
committerKarolin Seeger <kseeger@samba.org>
Mon, 4 Mar 2019 10:37:54 +0000 (10:37 +0000)
This is in preparation of setting the result of the mapping in the top-
level callback wb_xids2sids_done(), not in the per-idmap-domain callback
wb_xids2sids_dom_done().

When caching the mapping we need the id-type from the backend, so we
need a way to pass up that information from wb_xids2sids_dom_done() up
to wb_xids2sids_done()

The xids array copy gets passed from wb_xids2sids_send() to
wb_xids2sids_dom_send(), so wb_xids2sids_dom_done() can then directly
update the top-level copy.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=13802

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
(cherry picked from commit f5a8bc2f945be45cdade5f70d4f975bae8337f67)

source3/winbindd/wb_xids2sids.c

index 0d21e55c25dbbfc033ab392cddfc77e7aa446807..f4ff1a577d0dc35904d79e7116855bf54ae177d3 100644 (file)
@@ -449,9 +449,14 @@ struct tevent_req *wb_xids2sids_send(TALLOC_CTX *mem_ctx,
                return NULL;
        }
        state->ev = ev;
-       state->xids = xids;
        state->num_xids = num_xids;
 
+       state->xids = talloc_array(state, struct unixid, num_xids);
+       if (tevent_req_nomem(state->xids, req)) {
+               return tevent_req_post(req, ev);
+       }
+       memcpy(state->xids, xids, num_xids * sizeof(struct unixid));
+
        state->sids = talloc_zero_array(state, struct dom_sid, num_xids);
        if (tevent_req_nomem(state->sids, req)) {
                return tevent_req_post(req, ev);