svn commit: samba r9709 - branches/SAMBA_3_0/source/nsswitch trunk/source/nsswitch

vlendec at samba.org vlendec at samba.org
Sun Aug 28 09:19:12 GMT 2005


Author: vlendec
Date: 2005-08-28 09:19:10 +0000 (Sun, 28 Aug 2005)
New Revision: 9709

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9709

Log:
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

Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c
   branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
   trunk/source/nsswitch/winbindd_dual.c
   trunk/source/nsswitch/winbindd_util.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c	2005-08-28 07:30:40 UTC (rev 9708)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_dual.c	2005-08-28 09:19:10 UTC (rev 9709)
@@ -158,9 +158,8 @@
 		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 @@
 			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);
 

Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2005-08-28 07:30:40 UTC (rev 9708)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_util.c	2005-08-28 09:19:10 UTC (rev 9709)
@@ -444,7 +444,9 @@
 	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)) {

Modified: trunk/source/nsswitch/winbindd_dual.c
===================================================================
--- trunk/source/nsswitch/winbindd_dual.c	2005-08-28 07:30:40 UTC (rev 9708)
+++ trunk/source/nsswitch/winbindd_dual.c	2005-08-28 09:19:10 UTC (rev 9709)
@@ -196,9 +196,8 @@
 		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);
 
@@ -526,13 +525,13 @@
 
 		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);
 
 		SAFE_FREE(state.request.extra_data);
 
-		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);
 

Modified: trunk/source/nsswitch/winbindd_util.c
===================================================================
--- trunk/source/nsswitch/winbindd_util.c	2005-08-28 07:30:40 UTC (rev 9708)
+++ trunk/source/nsswitch/winbindd_util.c	2005-08-28 09:19:10 UTC (rev 9709)
@@ -444,7 +444,9 @@
 	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)) {



More information about the samba-cvs mailing list