summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2005-08-28 09:19:10 +0000
committerVolker Lendecke <vlendec@samba.org>2005-08-28 09:19:10 +0000
commit278c885b70929c42acaf832dd58118925430a645 (patch)
tree8632ea23c4178558b0d0412dfbe7fee512285ee5 /source
parent319951f52c2881225e1d7cd7e80c1d63cbb8337a (diff)
downloadsamba-278c885b70929c42acaf832dd58118925430a645.tar.gz
samba-278c885b70929c42acaf832dd58118925430a645.tar.xz
samba-278c885b70929c42acaf832dd58118925430a645.zip
r9709: Fix two bugs found by Brian Moran: Any request sent to winbind while the child
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
Diffstat (limited to 'source')
-rw-r--r--source/nsswitch/winbindd_dual.c10
-rw-r--r--source/nsswitch/winbindd_util.c4
2 files changed, 7 insertions, 7 deletions
diff --git a/source/nsswitch/winbindd_dual.c b/source/nsswitch/winbindd_dual.c
index 940cd12ba53..ec0b7a36e2f 100644
--- a/source/nsswitch/winbindd_dual.c
+++ b/source/nsswitch/winbindd_dual.c
@@ -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);
diff --git a/source/nsswitch/winbindd_util.c b/source/nsswitch/winbindd_util.c
index 2be1520250a..6b1a6b5b4df 100644
--- a/source/nsswitch/winbindd_util.c
+++ b/source/nsswitch/winbindd_util.c
@@ -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)) {