s3:winbindd: fix _wbint_LookupSids() on error
authorGregor Beck <gbeck@sernet.de>
Thu, 20 Feb 2014 12:14:31 +0000 (13:14 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Fri, 21 Feb 2014 14:59:28 +0000 (15:59 +0100)
We need to make sure that r->out.domains remains valid,
otherwise we're not able to marshall the response.

Note that wbint_LookupSids() has [out,ref] lsa_RefDomainList *domains,
while lsa_LookupSids() has [out,ref] lsa_RefDomainList **domains.

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

Bug: https://bugzilla.samba.org/show_bug.cgi?id=10458
Signed-off-by: Gregor Beck <gbeck@sernet.de>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/winbindd/winbindd_dual_srv.c

index 851c2c788fe2e98360cb99da663d3538e64c2f9d..f064467bf234da862b140dca7e1c51815e985afd 100644 (file)
@@ -74,6 +74,7 @@ NTSTATUS _wbint_LookupSid(struct pipes_struct *p, struct wbint_LookupSid *r)
 NTSTATUS _wbint_LookupSids(struct pipes_struct *p, struct wbint_LookupSids *r)
 {
        struct winbindd_domain *domain = wb_child_domain();
+       struct lsa_RefDomainList *domains = r->out.domains;
        NTSTATUS status;
 
        if (domain == NULL) {
@@ -87,7 +88,12 @@ NTSTATUS _wbint_LookupSids(struct pipes_struct *p, struct wbint_LookupSids *r)
         * done at the wbint RPC layer.
         */
        status = rpc_lookup_sids(p->mem_ctx, domain, r->in.sids,
-                                &r->out.domains, &r->out.names);
+                                &domains, &r->out.names);
+
+       if (domains != NULL) {
+               r->out.domains = domains;
+       }
+
        reset_cm_connection_on_error(domain, status);
        return status;
 }