s3: explicitly pass domain_sid to wbint_LookupRids() (bug #7841)
authorVolker Lendecke <vl@samba.org>
Mon, 27 Jun 2011 12:34:39 +0000 (14:34 +0200)
committerKarolin Seeger <kseeger@samba.org>
Tue, 26 Jul 2011 19:51:15 +0000 (21:51 +0200)
Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Mon Jun 27 18:21:30 CEST 2011 on sn-devel-104
(cherry picked from commit 0a74caa473f491050bc5f64b6d6956c00088c5cd)
(cherry picked from commit 44cfdd92e73d9ecb68b5a0ee1167f9e64c2aebeb)

source3/librpc/idl/wbint.idl
source3/winbindd/wb_lookupsids.c
source3/winbindd/winbindd_dual_srv.c
source3/winbindd/winbindd_lookuprids.c

index 5f7e9bf808f2f94173b5ec0637392bcc3dd6c79a..cb8a4e42a358a61404d43bc3da5674773b2c4234 100644 (file)
@@ -164,6 +164,7 @@ interface wbint
        );
 
     NTSTATUS wbint_LookupRids(
+       [in] dom_sid *domain_sid,
        [in] wbint_RidArray *rids,
        [out,string,charset(UTF8)] char **domain_name,
        [out] wbint_Principals *names
index bf2ddb3c6fd290eff3f56c48d711c68ce2008b42..cdca7c7e48e8966163b55c7094913d2a2c7f3f99 100644 (file)
@@ -198,7 +198,7 @@ static bool wb_lookupsids_next(struct tevent_req *req,
                        }
                        subreq = dcerpc_wbint_LookupRids_send(
                                state, state->ev, dom_child_handle(d->domain),
-                               &state->rids, &state->domain_name,
+                               &d->sid, &state->rids, &state->domain_name,
                                &state->rid_names);
                        if (tevent_req_nomem(subreq, req)) {
                                return false;
index f8316ce09761d78a2673a071f034c43488ad7524..70bee1802f54b1c45be01eb4962fb856fb9afed3 100644 (file)
@@ -548,7 +548,7 @@ NTSTATUS _wbint_LookupRids(struct pipes_struct *p, struct wbint_LookupRids *r)
        }
 
        status = domain->methods->rids_to_names(
-               domain, talloc_tos(), &domain->sid, r->in.rids->rids,
+               domain, talloc_tos(), r->in.domain_sid, r->in.rids->rids,
                r->in.rids->num_rids, &domain_name, &names, &types);
        reset_cm_connection_on_error(domain, status);
        if (!NT_STATUS_IS_OK(status)) {
@@ -564,7 +564,8 @@ NTSTATUS _wbint_LookupRids(struct pipes_struct *p, struct wbint_LookupRids *r)
        }
 
        for (i=0; i<r->in.rids->num_rids; i++) {
-               sid_compose(&result[i].sid, &domain->sid, r->in.rids->rids[i]);
+               sid_compose(&result[i].sid, r->in.domain_sid,
+                           r->in.rids->rids[i]);
                result[i].type = types[i];
                result[i].name = talloc_move(result, &names[i]);
        }
index 738adbaefc3bb42cb2207849102474b0eaf98dbf..e1d7d18e0b70094bf2ad072c2f0e514c2c60ea94 100644 (file)
@@ -24,6 +24,7 @@
 
 struct winbindd_lookuprids_state {
        struct tevent_context *ev;
+       struct dom_sid domain_sid;
        const char *domain_name;
        struct wbint_RidArray rids;
        struct wbint_Principals names;
@@ -42,7 +43,6 @@ struct tevent_req *winbindd_lookuprids_send(TALLOC_CTX *mem_ctx,
        struct tevent_req *req, *subreq;
        struct winbindd_lookuprids_state *state;
        struct winbindd_domain *domain;
-       struct dom_sid sid;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct winbindd_lookuprids_state);
@@ -56,16 +56,16 @@ struct tevent_req *winbindd_lookuprids_send(TALLOC_CTX *mem_ctx,
 
        DEBUG(3, ("lookuprids (%s)\n", request->data.sid));
 
-       if (!string_to_sid(&sid, request->data.sid)) {
+       if (!string_to_sid(&state->domain_sid, request->data.sid)) {
                DEBUG(5, ("%s not a SID\n", request->data.sid));
                tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
                return tevent_req_post(req, ev);
        }
 
-       domain = find_lookup_domain_from_sid(&sid);
+       domain = find_lookup_domain_from_sid(&state->domain_sid);
        if (domain == NULL) {
                DEBUG(5, ("Domain for sid %s not found\n",
-                         sid_string_dbg(&sid)));
+                         sid_string_dbg(&state->domain_sid)));
                tevent_req_nterror(req, NT_STATUS_NO_SUCH_DOMAIN);
                return tevent_req_post(req, ev);
        }
@@ -84,8 +84,8 @@ struct tevent_req *winbindd_lookuprids_send(TALLOC_CTX *mem_ctx,
        }
 
        subreq = dcerpc_wbint_LookupRids_send(
-               state, ev, dom_child_handle(domain), &state->rids,
-               &state->domain_name, &state->names);
+               state, ev, dom_child_handle(domain), &state->domain_sid,
+               &state->rids, &state->domain_name, &state->names);
        if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
        }