r9709: Fix two bugs found by Brian Moran: Any request sent to winbind while the child
authorVolker Lendecke <vlendec@samba.org>
Sun, 28 Aug 2005 09:19:10 +0000 (09:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:03:24 +0000 (11:03 -0500)
in question is still initializing overwrites domain->dcname. Only overwrite if
the parent actually has sent a dcname and thus really knows it. Second,
ntlm_auth needs the error code, not just the fact it failed.

Jerry, the 3_0 part might qualify as a "recommended patch".

Thanks,

Volker

source/nsswitch/winbindd_dual.c
source/nsswitch/winbindd_util.c

index 940cd12ba53a036ce64f42a3565a7c917af444b9..ec0b7a36e2fb976fb192efa503c49cb763e024e2 100644 (file)
@@ -158,9 +158,8 @@ static void async_reply_recv(void *private_data, BOOL success)
                return;
        }
 
-       if (state->response->result == WINBINDD_OK)
-               SMB_ASSERT(cache_retrieve_response(child->pid,
-                                                  state->response));
+       SMB_ASSERT(cache_retrieve_response(child->pid,
+                                          state->response));
 
        DLIST_REMOVE(child->requests, state);
 
@@ -479,12 +478,11 @@ static BOOL fork_domain_child(struct winbindd_child *child)
                        DEBUG(4,("child daemon request %d\n",
                                 (int)state.request.cmd));
 
+                       ZERO_STRUCT(state.response);
                        state.request.null_term = '\0';
                        child_process_request(child->domain, &state);
 
-                       if (state.response.result == WINBINDD_OK)
-                               cache_store_response(sys_getpid(),
-                                                    &state.response);
+                       cache_store_response(sys_getpid(), &state.response);
 
                        SAFE_FREE(state.response.extra_data);
 
index 2be1520250a77ee6109eaa1878cc103fe89ae51d..6b1a6b5b4dfed924f41dc7d529902ce319d72230 100644 (file)
@@ -444,7 +444,9 @@ enum winbindd_result winbindd_dual_init_connection(struct winbindd_domain *domai
        state->request.data.init_conn.dcname
                [sizeof(state->request.data.init_conn.dcname)-1]='\0';
 
-       fstrcpy(domain->dcname, state->request.data.init_conn.dcname);
+       if (strlen(state->request.data.init_conn.dcname) > 0) {
+               fstrcpy(domain->dcname, state->request.data.init_conn.dcname);
+       }
 
        if (strlen(domain->dcname) > 0) {
                if (!resolve_name(domain->dcname, &ipaddr, 0x20)) {