[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Wed Aug 14 07:55:02 MDT 2013


The branch, master has been updated
       via  fbee7c1 smbd: Fix async echo handler forking (Bug 10086)
      from  5f75814 winbind3: Fix an invalid free

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit fbee7c1eabf5baa9b59878a9e3f3ae482e6a9412
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Aug 14 10:46:46 2013 +0000

    smbd: Fix async echo handler forking (Bug 10086)
    
    If SMB3 is chosen via an SMB1 negprot, we forked the echo handler because
    set_Protocol is called later, after the full protocol negotiation is done.
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org
    
    Autobuild-User(master): Volker Lendecke <vl at samba.org>
    Autobuild-Date(master): Wed Aug 14 15:54:43 CEST 2013 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/negprot.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c
index cfe0983..315bd89 100644
--- a/source3/smbd/negprot.c
+++ b/source3/smbd/negprot.c
@@ -497,6 +497,7 @@ static const struct {
 void reply_negprot(struct smb_request *req)
 {
 	int choice= -1;
+	int chosen_level = -1;
 	int protocol;
 	const char *p;
 	int arch = ARCH_ALL;
@@ -653,8 +654,10 @@ void reply_negprot(struct smb_request *req)
 		if ((supported_protocols[protocol].protocol_level <= lp_srv_maxprotocol()) &&
 				(supported_protocols[protocol].protocol_level >= lp_srv_minprotocol()))
 			while (i < num_cliprotos) {
-				if (strequal(cliprotos[i],supported_protocols[protocol].proto_name))
+				if (strequal(cliprotos[i],supported_protocols[protocol].proto_name)) {
 					choice = i;
+					chosen_level = supported_protocols[protocol].protocol_level;
+				}
 				i++;
 			}
 		if(choice != -1)
@@ -675,14 +678,14 @@ void reply_negprot(struct smb_request *req)
 	DEBUG( 5, ( "negprot index=%d\n", choice ) );
 
 	if ((lp_server_signing() == SMB_SIGNING_REQUIRED)
-	    && (get_Protocol() < PROTOCOL_NT1)) {
+	    && (chosen_level < PROTOCOL_NT1)) {
 		exit_server_cleanly("SMB signing is required and "
 			"client negotiated a downlevel protocol");
 	}
 
 	TALLOC_FREE(cliprotos);
 
-	if (lp_async_smb_echo_handler() && (get_Protocol() < PROTOCOL_SMB2_02) &&
+	if (lp_async_smb_echo_handler() && (chosen_level < PROTOCOL_SMB2_02) &&
 	    !fork_echo_handler(sconn)) {
 		exit_server("Failed to fork echo handler");
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list