[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[sfrench/samba-autobuild/.git] / source3 / winbindd / winbindd_misc.c
index 1f23bf1bee1d829b2ca9ced5e1f585b06f57dd28..5513e1790ba820f6318d90d20c5a37d8ffbdd8da 100644 (file)
@@ -209,12 +209,21 @@ enum winbindd_result winbindd_dual_list_trusted_domains(struct winbindd_domain *
 
 void winbindd_getdcname(struct winbindd_cli_state *state)
 {
+       struct winbindd_domain *domain;
+
        state->request.domain_name
                [sizeof(state->request.domain_name)-1] = '\0';
 
        DEBUG(3, ("[%5lu]: Get DC name for %s\n", (unsigned long)state->pid,
                  state->request.domain_name));
 
+       domain = find_domain_from_name_noinit(state->request.domain_name);
+       if (domain && domain->internal) {
+               fstrcpy(state->response.data.dc_name, global_myname());
+               request_ok(state);      
+               return;
+       }
+
        sendto_domain(state, find_our_domain());
 }
 
@@ -227,6 +236,7 @@ enum winbindd_result winbindd_dual_getdcname(struct winbindd_domain *domain,
        NTSTATUS result;
        WERROR werr;
        unsigned int orig_timeout;
+       struct winbindd_domain *req_domain;
 
        state->request.domain_name
                [sizeof(state->request.domain_name)-1] = '\0';
@@ -246,9 +256,18 @@ enum winbindd_result winbindd_dual_getdcname(struct winbindd_domain *domain,
 
        orig_timeout = cli_set_timeout(netlogon_pipe->cli, 35000);
 
-       werr = rpccli_netlogon_getanydcname(netlogon_pipe, state->mem_ctx, domain->dcname,
-                                           state->request.domain_name,
-                                           dcname_slash);
+       req_domain = find_domain_from_name_noinit(state->request.domain_name);
+       if (req_domain == domain) {
+               werr = rpccli_netlogon_getdcname(netlogon_pipe, state->mem_ctx,
+                                                domain->dcname,
+                                                state->request.domain_name,
+                                                dcname_slash);
+       } else {
+               werr = rpccli_netlogon_getanydcname(netlogon_pipe, state->mem_ctx,
+                                                   domain->dcname,
+                                                   state->request.domain_name,
+                                                   dcname_slash);
+       }
        /* And restore our original timeout. */
        cli_set_timeout(netlogon_pipe->cli, orig_timeout);