[SCM] Samba Shared Repository - branch master updated - 353aaf26c5f71d9a94e799a1c1e37449211e7a87

Stefan Metzmacher metze at samba.org
Tue Sep 23 09:40:07 GMT 2008


The branch, master has been updated
       via  353aaf26c5f71d9a94e799a1c1e37449211e7a87 (commit)
       via  61a38d91803cb3c1bf1b09915f8d97792f48966b (commit)
       via  171349bc21cc727685abb5ed836d62f4ae80b496 (commit)
       via  c01426ce731e2cf0b04ee3a0376e613f4970fb30 (commit)
       via  8c3d96993421e8e6a9fc5d265e4caa71acbd80c8 (commit)
       via  7deacc615e92221548fea940b0e90fe03a3ec098 (commit)
       via  e00ab641b4aeafa70d035c66baf31b965a7e5734 (commit)
       via  781d7c4c1cbd34413450f251d4078a9cb8055831 (commit)
       via  588af6901b019d414f4319ea9a1f40cb3d0e140e (commit)
       via  02cffed79dc74541ac9e9c7835573e8dfad1bb05 (commit)
       via  23e31350f5ba23b0b995ff3d14bfbff50cdece6c (commit)
      from  70b0c8f79a427a3227ce01bc930870771076bff7 (commit)

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


- Log -----------------------------------------------------------------
commit 353aaf26c5f71d9a94e799a1c1e37449211e7a87
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 21:15:54 2008 +0200

    selftest: run smb signing tests as part of make quicktest
    
    metze

commit 61a38d91803cb3c1bf1b09915f8d97792f48966b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 21:10:08 2008 +0200

    selftest: test some smb signing combinations against the member server
    
    metze

commit 171349bc21cc727685abb5ed836d62f4ae80b496
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 23 02:30:15 2008 +0200

    s4:smb_server: remove the bogus smbsrv_signing_restart()
    
    Real signing always starts with seqnumber 2, and once signing
    is on the session key never change anymore for the complete
    smb connection.
    
    metze

commit c01426ce731e2cf0b04ee3a0376e613f4970fb30
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 18:02:07 2008 +0200

    libcli/smb_composite: for spnego session setups check the smb signature manually
    
    We need to start signing when we got NT_STATUS_OK from the server
    and manually check the signature of the servers response.
    
    This is needed as the response might be signed with the krb5 acceptor subkey,
    which comes within the server response.
    
    With NTLMSSP this happens for the session setup:
    
    request1  => BSRSPYL		seqnum: 0
    response1 => BSRSPYL		seqnum: 0
    request2  => BSRSPYL		seqnum: 0
    response2  => <SIGNATURE>	seqnum: 1
    
    and with krb5:
    
    request1  => BSRSPYL		seqnum: 0
    response1  => <SIGNATURE>	seqnum: 1
    
    metze

commit 8c3d96993421e8e6a9fc5d265e4caa71acbd80c8
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 23 02:29:20 2008 +0200

    libcli/raw: real signing starts at seqnumber 2
    
    metze

commit 7deacc615e92221548fea940b0e90fe03a3ec098
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 17:56:11 2008 +0200

    libcli/raw: in SMB_SIGNING_ENGINE_BSRSPYL state it's ok to accept any signature
    
    Even if signing is mandatory.
    
    With NTLMSSP this happens for the session setup:
    
    request1  => BSRSPYL
    response1 => BSRSPYL
    request2  => BSRSPYL
    response2  => <SIGNATURE>
    
    and with krb5:
    
    request1  => BSRSPYL
    response1  => <SIGNATURE>
    
    metze

commit e00ab641b4aeafa70d035c66baf31b965a7e5734
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 17:54:13 2008 +0200

    libcli/raw: give the caller the chance to do the signing checks on its own.
    
    metze

commit 781d7c4c1cbd34413450f251d4078a9cb8055831
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 9 17:50:30 2008 +0200

    libcli/raw: give the caller the chance to prevent the talloc_free(req) in the _recv functions
    
    metze

commit 588af6901b019d414f4319ea9a1f40cb3d0e140e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Sep 11 06:47:06 2008 +0200

    gensec_krb5: only give away the session key, when the authentication is done
    
    metze

commit 02cffed79dc74541ac9e9c7835573e8dfad1bb05
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Sep 11 06:46:43 2008 +0200

    gensec_gssapi: only give away the session key, when the authentication is done
    
    metze

commit 23e31350f5ba23b0b995ff3d14bfbff50cdece6c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Sep 11 06:40:26 2008 +0200

    ntlmssp: only give away the session key, when the authentication is done
    
    metze

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

Summary of changes:
 source4/auth/gensec/gensec_gssapi.c      |    9 ++--
 source4/auth/gensec/gensec_krb5.c        |    4 ++
 source4/auth/ntlmssp/ntlmssp.c           |    4 ++
 source4/libcli/raw/libcliraw.h           |    6 ++
 source4/libcli/raw/rawrequest.c          |    6 ++-
 source4/libcli/raw/smb_signing.c         |   10 ++++
 source4/libcli/smb_composite/sesssetup.c |   80 +++++++++++++++++++++---------
 source4/samba4-quick                     |    1 +
 source4/selftest/samba4_tests.sh         |   40 +++++++++++++++
 source4/smb_server/smb/sesssetup.c       |   19 +------
 source4/smb_server/smb/signing.c         |   24 ---------
 11 files changed, 134 insertions(+), 69 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/auth/gensec/gensec_gssapi.c b/source4/auth/gensec/gensec_gssapi.c
index 1334e79..e791226 100644
--- a/source4/auth/gensec/gensec_gssapi.c
+++ b/source4/auth/gensec/gensec_gssapi.c
@@ -1181,6 +1181,10 @@ static NTSTATUS gensec_gssapi_session_key(struct gensec_security *gensec_securit
 	OM_uint32 maj_stat, min_stat;
 	krb5_keyblock *subkey;
 
+	if (gensec_gssapi_state->sasl_state != STAGE_DONE) {
+		return NT_STATUS_NO_USER_SESSION_KEY;
+	}
+
 	if (gensec_gssapi_state->session_key.data) {
 		*session_key = gensec_gssapi_state->session_key;
 		return NT_STATUS_OK;
@@ -1200,10 +1204,7 @@ static NTSTATUS gensec_gssapi_session_key(struct gensec_security *gensec_securit
 	*session_key = data_blob_talloc(gensec_gssapi_state,
 					KRB5_KEY_DATA(subkey), KRB5_KEY_LENGTH(subkey));
 	krb5_free_keyblock(gensec_gssapi_state->smb_krb5_context->krb5_context, subkey);
-	if (gensec_gssapi_state->sasl_state == STAGE_DONE) {
-		/* only cache in the done stage */
-		gensec_gssapi_state->session_key = *session_key;
-	}
+	gensec_gssapi_state->session_key = *session_key;
 	dump_data_pw("KRB5 Session Key:\n", session_key->data, session_key->length);
 
 	return NT_STATUS_OK;
diff --git a/source4/auth/gensec/gensec_krb5.c b/source4/auth/gensec/gensec_krb5.c
index 47df2cc..1f54043 100644
--- a/source4/auth/gensec/gensec_krb5.c
+++ b/source4/auth/gensec/gensec_krb5.c
@@ -515,6 +515,10 @@ static NTSTATUS gensec_krb5_session_key(struct gensec_security *gensec_security,
 	krb5_keyblock *skey;
 	krb5_error_code err = -1;
 
+	if (gensec_krb5_state->state_position != GENSEC_KRB5_DONE) {
+		return NT_STATUS_NO_USER_SESSION_KEY;
+	}
+
 	if (gensec_krb5_state->session_key.data) {
 		*session_key = gensec_krb5_state->session_key;
 		return NT_STATUS_OK;
diff --git a/source4/auth/ntlmssp/ntlmssp.c b/source4/auth/ntlmssp/ntlmssp.c
index 0b7f0da..cea18c4 100644
--- a/source4/auth/ntlmssp/ntlmssp.c
+++ b/source4/auth/ntlmssp/ntlmssp.c
@@ -235,6 +235,10 @@ NTSTATUS gensec_ntlmssp_session_key(struct gensec_security *gensec_security,
 {
 	struct gensec_ntlmssp_state *gensec_ntlmssp_state = (struct gensec_ntlmssp_state *)gensec_security->private_data;
 
+	if (gensec_ntlmssp_state->expected_state != NTLMSSP_DONE) {
+		return NT_STATUS_NO_USER_SESSION_KEY;
+	}
+
 	if (!gensec_ntlmssp_state->session_key.data) {
 		return NT_STATUS_NO_USER_SESSION_KEY;
 	}
diff --git a/source4/libcli/raw/libcliraw.h b/source4/libcli/raw/libcliraw.h
index d55b4cc..bd9bda0 100644
--- a/source4/libcli/raw/libcliraw.h
+++ b/source4/libcli/raw/libcliraw.h
@@ -261,6 +261,12 @@ struct smbcli_request {
 	   counter by one */
 	uint_t sign_single_increment:1;
 
+	/* the caller wants to do the signing check */
+	bool sign_caller_checks;
+
+	/* give the caller a chance to prevent the talloc_free() in the _recv() function */
+	bool do_not_free;
+
 	/* the mid of this packet - used to match replies */
 	uint16_t mid;
 
diff --git a/source4/libcli/raw/rawrequest.c b/source4/libcli/raw/rawrequest.c
index a0e6452..dd9b1f3 100644
--- a/source4/libcli/raw/rawrequest.c
+++ b/source4/libcli/raw/rawrequest.c
@@ -72,7 +72,11 @@ _PUBLIC_ NTSTATUS smbcli_request_destroy(struct smbcli_request *req)
 	}
 
 	status = req->status;
-	talloc_free(req);
+
+	if (!req->do_not_free) {
+		talloc_free(req);
+	}
+
 	return status;
 }
 
diff --git a/source4/libcli/raw/smb_signing.c b/source4/libcli/raw/smb_signing.c
index 1d03686..826d7dd 100644
--- a/source4/libcli/raw/smb_signing.c
+++ b/source4/libcli/raw/smb_signing.c
@@ -298,11 +298,20 @@ bool smbcli_request_check_sign_mac(struct smbcli_request *req)
 {
 	bool good;
 
+	if (!req->transport->negotiate.sign_info.doing_signing &&
+	    req->sign_caller_checks) {
+		return true;
+	}
+
+	req->sign_caller_checks = false;
+
 	switch (req->transport->negotiate.sign_info.signing_state) 
 	{
 	case SMB_SIGNING_ENGINE_OFF:
 		return true;
 	case SMB_SIGNING_ENGINE_BSRSPYL:
+		return true;
+
 	case SMB_SIGNING_ENGINE_ON:
 	{			
 		if (req->in.size < (HDR_SS_FIELD + 8)) {
@@ -350,6 +359,7 @@ bool smbcli_simple_set_signing(TALLOC_CTX *mem_ctx,
 	dump_data_pw("Started Signing with key:\n", sign_info->mac_key.data, sign_info->mac_key.length);
 
 	sign_info->signing_state = SMB_SIGNING_ENGINE_ON;
+	sign_info->next_seq_num = 2;
 
 	return true;
 }
diff --git a/source4/libcli/smb_composite/sesssetup.c b/source4/libcli/smb_composite/sesssetup.c
index 11ac37e..92b49dc 100644
--- a/source4/libcli/smb_composite/sesssetup.c
+++ b/source4/libcli/smb_composite/sesssetup.c
@@ -35,6 +35,7 @@
 
 struct sesssetup_state {
 	union smb_sesssetup setup;
+	NTSTATUS remote_status;
 	NTSTATUS gensec_status;
 	struct smb_composite_sesssetup *io;
 	struct smbcli_request *req;
@@ -85,8 +86,15 @@ static void request_handler(struct smbcli_request *req)
 	DATA_BLOB session_key = data_blob(NULL, 0);
 	DATA_BLOB null_data_blob = data_blob(NULL, 0);
 	NTSTATUS session_key_err, nt_status;
+	struct smbcli_request *check_req = NULL;
 
-	c->status = smb_raw_sesssetup_recv(req, state, &state->setup);
+	if (req->sign_caller_checks) {
+		req->do_not_free = true;
+		check_req = req;
+	}
+
+	state->remote_status = smb_raw_sesssetup_recv(req, state, &state->setup);
+	c->status = state->remote_status;
 	state->req = NULL;
 
 	switch (state->setup.old.level) {
@@ -102,6 +110,7 @@ static void request_handler(struct smbcli_request *req)
 							      state->io, 
 							      &state->req);
 				if (NT_STATUS_IS_OK(nt_status)) {
+					talloc_free(check_req);
 					c->status = nt_status;
 					composite_continue_smb(c, state->req, request_handler, c);
 					return;
@@ -120,6 +129,7 @@ static void request_handler(struct smbcli_request *req)
 							      state->io, 
 							      &state->req);
 				if (NT_STATUS_IS_OK(nt_status)) {
+					talloc_free(check_req);
 					c->status = nt_status;
 					composite_continue_smb(c, state->req, request_handler, c);
 					return;
@@ -138,6 +148,7 @@ static void request_handler(struct smbcli_request *req)
 								      state->io, 
 								      &state->req);
 				if (NT_STATUS_IS_OK(nt_status)) {
+					talloc_free(check_req);
 					c->status = nt_status;
 					composite_continue_smb(c, state->req, request_handler, c);
 					return;
@@ -169,12 +180,16 @@ static void request_handler(struct smbcli_request *req)
 			state->setup.spnego.in.secblob = data_blob(NULL, 0);
 		}
 
-		/* we need to do another round of session setup. We keep going until both sides
-		   are happy */
-		session_key_err = gensec_session_key(session->gensec, &session_key);
-		if (NT_STATUS_IS_OK(session_key_err)) {
-			set_user_session_key(session, &session_key);
-			smbcli_transport_simple_set_signing(session->transport, session_key, null_data_blob);
+		if (NT_STATUS_IS_OK(state->remote_status)) {
+			if (state->setup.spnego.in.secblob.length) {
+				c->status = NT_STATUS_INTERNAL_ERROR;
+				break;
+			}
+			session_key_err = gensec_session_key(session->gensec, &session_key);
+			if (NT_STATUS_IS_OK(session_key_err)) {
+				set_user_session_key(session, &session_key);
+				smbcli_transport_simple_set_signing(session->transport, session_key, null_data_blob);
+			}
 		}
 
 		if (state->setup.spnego.in.secblob.length) {
@@ -186,6 +201,9 @@ static void request_handler(struct smbcli_request *req)
 			session->vuid = state->io->out.vuid;
 			state->req = smb_raw_sesssetup_send(session, &state->setup);
 			session->vuid = vuid;
+			if (state->req) {
+				state->req->sign_caller_checks = true;
+			}
 			composite_continue_smb(c, state->req, request_handler, c);
 			return;
 		}
@@ -196,6 +214,15 @@ static void request_handler(struct smbcli_request *req)
 		break;
 	}
 
+	if (check_req) {
+		check_req->sign_caller_checks = false;
+		if (!smbcli_request_check_sign_mac(check_req)) {
+			c->status = NT_STATUS_ACCESS_DENIED;
+		}
+		talloc_free(check_req);
+		check_req = NULL;
+	}
+
 	/* enforce the local signing required flag */
 	if (NT_STATUS_IS_OK(c->status) && !cli_credentials_is_anonymous(state->io->in.credentials)) {
 		if (!session->transport->negotiate.sign_info.doing_signing 
@@ -222,11 +249,14 @@ static NTSTATUS session_setup_nt1(struct composite_context *c,
 				  struct smb_composite_sesssetup *io,
 				  struct smbcli_request **req) 
 {
-	NTSTATUS nt_status;
+	NTSTATUS nt_status = NT_STATUS_INTERNAL_ERROR;
 	struct sesssetup_state *state = talloc_get_type(c->private_data, struct sesssetup_state);
 	DATA_BLOB names_blob = NTLMv2_generate_names_blob(state, lp_iconv_convenience(global_loadparm), session->transport->socket->hostname, lp_workgroup(global_loadparm));
-	DATA_BLOB session_key;
+	DATA_BLOB session_key = data_blob(NULL, 0);
 	int flags = CLI_CRED_NTLM_AUTH;
+
+	smbcli_temp_set_signing(session->transport);
+
 	if (session->options.lanman_auth) {
 		flags |= CLI_CRED_LANMAN_AUTH;
 	}
@@ -258,12 +288,6 @@ static NTSTATUS session_setup_nt1(struct composite_context *c,
 							      &state->setup.nt1.in.password2,
 							      NULL, &session_key);
 		NT_STATUS_NOT_OK_RETURN(nt_status);
-
-		smbcli_transport_simple_set_signing(session->transport, session_key, 
-						    state->setup.nt1.in.password2);
-		set_user_session_key(session, &session_key);
-		
-		data_blob_free(&session_key);
 	} else if (session->options.plaintext_auth) {
 		const char *password = cli_credentials_get_password(io->in.credentials);
 		state->setup.nt1.in.password1 = data_blob_talloc(state, password, strlen(password));
@@ -277,6 +301,15 @@ static NTSTATUS session_setup_nt1(struct composite_context *c,
 	if (!*req) {
 		return NT_STATUS_NO_MEMORY;
 	}
+
+	if (NT_STATUS_IS_OK(nt_status)) {
+		smbcli_transport_simple_set_signing(session->transport, session_key, 
+						    state->setup.nt1.in.password2);
+		set_user_session_key(session, &session_key);
+		
+		data_blob_free(&session_key);
+	}
+
 	return (*req)->status;
 }
 
@@ -350,9 +383,7 @@ static NTSTATUS session_setup_spnego(struct composite_context *c,
 				     struct smbcli_request **req) 
 {
 	struct sesssetup_state *state = talloc_get_type(c->private_data, struct sesssetup_state);
-	NTSTATUS status, session_key_err;
-	DATA_BLOB session_key = data_blob(NULL, 0);
-	DATA_BLOB null_data_blob = data_blob(NULL, 0);
+	NTSTATUS status;
 	const char *chosen_oid = NULL;
 
 	state->setup.spnego.level           = RAW_SESSSETUP_SPNEGO;
@@ -440,15 +471,18 @@ static NTSTATUS session_setup_spnego(struct composite_context *c,
 	}
 	state->gensec_status = status;
 
-	session_key_err = gensec_session_key(session->gensec, &session_key);
-	if (NT_STATUS_IS_OK(session_key_err)) {
-		smbcli_transport_simple_set_signing(session->transport, session_key, null_data_blob);
-	}
-
 	*req = smb_raw_sesssetup_send(session, &state->setup);
 	if (!*req) {
 		return NT_STATUS_NO_MEMORY;
 	}
+
+	/*
+	 * we need to check the signature ourself
+	 * as the session key might be the acceptor subkey
+	 * which comes within the response itself
+	 */
+	(*req)->sign_caller_checks = true;
+
 	return (*req)->status;
 }
 
diff --git a/source4/samba4-quick b/source4/samba4-quick
index 3627a87..7bea619 100644
--- a/source4/samba4-quick
+++ b/source4/samba4-quick
@@ -35,3 +35,4 @@ rpc.altercontext
 rpc.join
 rpc.handles
 rpc.echo
+smb.signing
diff --git a/source4/selftest/samba4_tests.sh b/source4/selftest/samba4_tests.sh
index bdebddf..36d52ff 100755
--- a/source4/selftest/samba4_tests.sh
+++ b/source4/selftest/samba4_tests.sh
@@ -292,6 +292,46 @@ plantest "rpc.samr.users against member server with local creds" member $VALGRIN
 plantest "rpc.samr.passwords against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" "RPC-SAMR-PASSWORDS" "$*"
 plantest "blackbox.smbclient against member server with local creds" member $samba4srcdir/client/tests/test_smbclient.sh "\$NETBIOSNAME" "\$USERNAME" "\$PASSWORD" "\$NETBIOSNAME" "$PREFIX" 
 
+# Tests SMB signing
+
+for mech in \
+	"-k no" \
+	"-k no --option=usespnego=no" \
+	"-k no --option=gensec:spengo=no" \
+	"-k yes" \
+	"-k yes --option=gensec:fake_gssapi_krb5=yes --option=gensec:gssapi_krb5=no"; do
+   for signing in \
+	"--signing=on" \
+	"--signing=required"; do
+
+	signoptions="$mech $signing"
+	name="smb.signing on with $signoptions"
+	plantest "$name" dc $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp $signoptions -U"\$USERNAME"%"\$PASSWORD" BASE-XCOPY "$*"
+   done
+done
+
+for mech in \
+	"-k no" \
+	"-k no --option=usespnego=no" \
+	"-k no --option=gensec:spengo=no" \
+	"-k yes" \
+	"-k yes --option=gensec:fake_gssapi_krb5=yes --option=gensec:gssapi_krb5=no"; do
+	signoptions="$mech --signing=off"
+	name="smb.signing on with $signoptions"
+	plantest "$name domain-creds" member $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp $signoptions -U"\$DC_USERNAME"%"\$DC_PASSWORD" BASE-XCOPY "$*"
+done
+for mech in \
+	"-k no" \
+	"-k no --option=usespnego=no" \
+	"-k no --option=gensec:spengo=no"; do
+	signoptions="$mech --signing=off"
+	name="smb.signing on with $signoptions"
+	plantest "$name local-creds" member $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp $signoptions -U"\$NETBIOSNAME\\\\\$USERNAME"%"\$PASSWORD" BASE-XCOPY "$*"
+done
+plantest "--signing=yes anon" dc $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp -k no --signing=yes -U% BASE-XCOPY "$*"
+plantest "--signing=required anon" dc $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp -k no --signing=required -U% BASE-XCOPY "$*"
+plantest "--signing=no anon" member $VALGRIND $smb4torture //"\$NETBIOSNAME"/tmp -k no --signing=no -U% BASE-XCOPY "$*"
+
 NBT_TESTS=`$smb4torture --list | grep "^NBT-" | xargs`
 
 for t in $NBT_TESTS; do
diff --git a/source4/smb_server/smb/sesssetup.c b/source4/smb_server/smb/sesssetup.c
index f45cbf1..a12bbd5 100644
--- a/source4/smb_server/smb/sesssetup.c
+++ b/source4/smb_server/smb/sesssetup.c
@@ -193,16 +193,6 @@ static void sesssetup_nt1_send(struct auth_check_password_request *areq,
 		goto done;
 	}
 
-	/* Force check of the request packet, now we know the session key */
-	smbsrv_signing_check_incoming(req);
-/* TODO: why don't we check the result here? */
-
-	/* Unfortunetly win2k3 as a client doesn't sign the request
-	 * packet here, so we have to force signing to start again */
-
-	smbsrv_signing_restart(req->smb_conn, &session_info->session_key, &sess->nt1.in.password2, 
-			       session_info->server_info->authenticated);
-
 done:
 	status = NT_STATUS_OK;
 failed:
@@ -321,13 +311,8 @@ static void sesssetup_spnego_send(struct gensec_update_request *greq, void *priv
 	if (!NT_STATUS_IS_OK(status)) goto failed;
 
 	skey_status = gensec_session_key(smb_sess->gensec_ctx, &session_key);
-	if (NT_STATUS_IS_OK(skey_status) &&
-	    smbsrv_setup_signing(req->smb_conn, &session_key, NULL)) {
-		/* Force check of the request packet, now we know the session key */
-		smbsrv_signing_check_incoming(req);
-
-		smbsrv_signing_restart(req->smb_conn, &session_key, NULL, 
-				       session_info->server_info->authenticated);
+	if (NT_STATUS_IS_OK(skey_status)) {
+		smbsrv_setup_signing(req->smb_conn, &session_key, NULL);
 	}
 
 	/* Ensure this is marked as a 'real' vuid, not one
diff --git a/source4/smb_server/smb/signing.c b/source4/smb_server/smb/signing.c
index 21dc99b..0b5cf56 100644
--- a/source4/smb_server/smb/signing.c
+++ b/source4/smb_server/smb/signing.c
@@ -75,30 +75,6 @@ bool smbsrv_setup_signing(struct smbsrv_connection *smb_conn,
 					 &smb_conn->signing, session_key, response);
 }
 
-void smbsrv_signing_restart(struct smbsrv_connection *smb_conn,
-			    DATA_BLOB *session_key,
-			    DATA_BLOB *response,
-			    bool authenticated_session) 
-{
-	if (!smb_conn->signing.seen_valid) {
-		DEBUG(5, ("Client did not send a valid signature on "
-			  "SPNEGO session setup - ignored, expect good next time\n"));
-		/* force things back on (most clients do not sign this packet)... */
-		smbsrv_setup_signing(smb_conn, session_key, response);
-		smb_conn->signing.next_seq_num = 2;
-
-		/* If mandetory_signing is set, and this was an authenticated logon, then force on */
-		if (smb_conn->signing.mandatory_signing && authenticated_session) {
-			DEBUG(5, ("Configured for mandatory signing, 'good packet seen' forced on\n"));
-			/* if this is mandatory, then
-			 * pretend we have seen a
-			 * valid packet, so we don't
-			 * turn it off */
-			smb_conn->signing.seen_valid = true;
-		}
-	}
-}
-
 bool smbsrv_init_signing(struct smbsrv_connection *smb_conn)
 {
 	smb_conn->signing.mac_key = data_blob(NULL, 0);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list