s3: Fork multiple children per domain
[obnox/samba-ctdb.git] / source / winbindd / winbindd_util.c
index dae1707393517384b486bdcd178663d727670be2..32af572b2255ce90b70e2c5268777111121ac97a 100644 (file)
@@ -176,6 +176,16 @@ static struct winbindd_domain *add_trusted_domain(const char *domain_name, const
         
        ZERO_STRUCTP(domain);
 
+       domain->children = SMB_MALLOC_ARRAY(
+               struct winbindd_child, lp_winbind_max_domain_connections());
+       if (domain->children == NULL) {
+               SAFE_FREE(domain);
+               return NULL;
+       }
+       memset(domain->children, 0,
+              sizeof(struct winbindd_child)
+              * lp_winbind_max_domain_connections());
+
        fstrcpy(domain->name, domain_name);
        if (alternative_name) {
                fstrcpy(domain->alt_name, alternative_name);
@@ -623,7 +633,7 @@ enum winbindd_result init_child_connection(struct winbindd_domain *domain,
                fstrcpy(request->domain_name, domain->name);
                request->data.init_conn.is_primary = domain->primary ? true : false;
                fstrcpy(request->data.init_conn.dcname, "");
-               async_request(mem_ctx, &domain->child, request, response,
+               async_request(mem_ctx, &domain->children[0], request, response,
                              init_child_recv, state);
                return WINBINDD_PENDING;
        }
@@ -657,7 +667,7 @@ static void init_child_getdc_recv(void *private_data, bool success)
        state->request->data.init_conn.is_primary = False;
        fstrcpy(state->request->data.init_conn.dcname, dcname);
 
-       async_request(state->mem_ctx, &state->domain->child,
+       async_request(state->mem_ctx, &state->domain->children[0],
                      state->request, state->response,
                      init_child_recv, state);
 }