s3/winbindd: fix invalid free
[sfrench/samba-autobuild/.git] / source3 / winbindd / winbindd_getuserdomgroups.c
index 0bba0248624071785c7f80f935b273f909d23cc1..24ec1ddc019c6aac5c1904ad301c161e3c77e1a3 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "winbindd.h"
+#include "../libcli/security/security.h"
 
 struct winbindd_getuserdomgroups_state {
        struct dom_sid sid;
@@ -35,7 +36,6 @@ struct tevent_req *winbindd_getuserdomgroups_send(TALLOC_CTX *mem_ctx,
 {
        struct tevent_req *req, *subreq;
        struct winbindd_getuserdomgroups_state *state;
-       struct winbindd_domain *domain;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct winbindd_getuserdomgroups_state);
@@ -55,15 +55,7 @@ struct tevent_req *winbindd_getuserdomgroups_send(TALLOC_CTX *mem_ctx,
                return tevent_req_post(req, ev);
        }
 
-       domain = find_domain_from_sid_noinit(&state->sid);
-       if (domain == NULL) {
-               DEBUG(1,("could not find domain entry for sid %s\n",
-                        request->data.sid));
-               tevent_req_nterror(req, NT_STATUS_NO_SUCH_DOMAIN);
-               return tevent_req_post(req, ev);
-       }
-
-       subreq = wb_lookupusergroups_send(state, ev, domain, &state->sid);
+       subreq = wb_gettoken_send(state, ev, &state->sid, false);
        if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
        }
@@ -79,11 +71,10 @@ static void winbindd_getuserdomgroups_done(struct tevent_req *subreq)
                req, struct winbindd_getuserdomgroups_state);
        NTSTATUS status;
 
-       status = wb_lookupusergroups_recv(subreq, state, &state->num_sids,
-                                         &state->sids);
+       status = wb_gettoken_recv(subreq, state, &state->num_sids,
+                                 &state->sids);
        TALLOC_FREE(subreq);
-       if (!NT_STATUS_IS_OK(status)) {
-               tevent_req_nterror(req, status);
+       if (tevent_req_nterror(req, status)) {
                return;
        }
        tevent_req_done(req);