[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Thu Nov 14 09:26:05 UTC 2019


The branch, master has been updated
       via  0361a26e395 libcli:auth Check return code of netlogon_creds_aes_encrypt()
       via  32e75bb4cca libcli:auth: Check return code of netlogon_creds_step_crypt()
       via  05f59cbcf80 libcli:auth: Check return code of netlogon_creds_step()
       via  a64a5b7e17d s4:librpc: Check return code of netlogon_creds_client_authenticator()
       via  0906848936c libcli:auth: Check return code of netlogon_creds_client_authenticator()
       via  d3fffca5e9a auth:pycreds: Check return code of netlogon_creds_client_authenticator()
       via  7c7dc855ba9 libcli:auth: Return NTSTATUS for netlogon_creds_client_authenticator()
       via  0ed92e3e606 libcli:auth: Check return status of netlogon_creds_first_step()
       via  e4ae1ba451d libcli:auth: Check return status of netlogon_creds_init_64bit()
       via  2c21cd6d49d libcli:auth: Check return value of netlogon_creds_init_128bit()
       via  fbfb11b0f7e s4:torture: Remove calls to gnutls_global_(de)init() in backupkey test
       via  0e159b725ec s4:lib: Remove gnutls_global_(de)init() from libtls
       via  afb5cb669ce s4:rpc_server: Remove gnutls_global_(de)init()
       via  3db2ca2dcf3 libcli:auth: Check return code of SMBOWFencrypt_ntv2()
       via  dc75a5f27eb libcli:auth: Return NTSTATUS for SMBOWFencrypt_ntv2()
       via  0914824684b libcli:auth: Check return codes of SMBsesskeygen_ntv2()
       via  045b9eb3f08 libcli:auth: Return NTSTATUS for SMBOWFencrypt_ntv2()
       via  83b1c21dd0f librpc: Do not return an NDR table for a zero GUID
      from  e45feaf28da ctdb-tcp: Simplify freeing of transport data on shutdown

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


- Log -----------------------------------------------------------------
commit 0361a26e395723296899c3d48cff86d532372710
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Nov 14 11:16:09 2019 +1300

    libcli:auth Check return code of netlogon_creds_aes_encrypt()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Thu Nov 14 09:25:36 UTC 2019 on sn-devel-184

commit 32e75bb4cca994af80bb8440009446e4a0ff5d40
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 10:13:53 2019 +0100

    libcli:auth: Check return code of netlogon_creds_step_crypt()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 05f59cbcf803d57ab41b4c7fa4f81da50cd02cd6
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 10:12:41 2019 +0100

    libcli:auth: Check return code of netlogon_creds_step()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit a64a5b7e17d80a4363774d4e35d3ee676ecf426d
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 10:06:20 2019 +0100

    s4:librpc: Check return code of netlogon_creds_client_authenticator()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 0906848936c410f49b26f7688df7ce1a0e1097f5
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 10:06:20 2019 +0100

    libcli:auth: Check return code of netlogon_creds_client_authenticator()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit d3fffca5e9ab45b43fa3f460ad6051356c9a00a9
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 10:06:20 2019 +0100

    auth:pycreds: Check return code of netlogon_creds_client_authenticator()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 7c7dc855ba982a37cb5040752ca473aab3446d6c
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 09:52:53 2019 +0100

    libcli:auth: Return NTSTATUS for netlogon_creds_client_authenticator()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 0ed92e3e60684bfb02b01479d985535d525a5be5
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 09:44:32 2019 +0100

    libcli:auth: Check return status of netlogon_creds_first_step()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit e4ae1ba451d408b3b5c74d303493cb7c38e6e1c8
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 09:41:18 2019 +0100

    libcli:auth: Check return status of netlogon_creds_init_64bit()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 2c21cd6d49d56611acb2f364473d8c2e73e74545
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 09:39:19 2019 +0100

    libcli:auth: Check return value of netlogon_creds_init_128bit()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit fbfb11b0f7ebd69cc4b1b545b398a367720d5473
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 14:01:46 2019 +0100

    s4:torture: Remove calls to gnutls_global_(de)init() in backupkey test
    
    This is handled by the gnutls library constructor/destructor.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 0e159b725ecf2f9a6d026170253e2d1eb73ed0c2
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 13:59:30 2019 +0100

    s4:lib: Remove gnutls_global_(de)init() from libtls
    
    This is handled by the gnutls library constructor/destructor.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit afb5cb669ceeb68bf93ef8db07abcc5d424580cd
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 13:57:53 2019 +0100

    s4:rpc_server: Remove gnutls_global_(de)init()
    
    This is done by the gnutls library constructor/destructor.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 3db2ca2dcf367a6c57071a76668d19f3cbf62565
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 12:52:44 2019 +0100

    libcli:auth: Check return code of SMBOWFencrypt_ntv2()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit dc75a5f27eb32caf2f2adc289bc82fb0f8042cb3
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 12:48:18 2019 +0100

    libcli:auth: Return NTSTATUS for SMBOWFencrypt_ntv2()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 0914824684b3a69a9926402d447e1d5781f2ec02
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 12:45:04 2019 +0100

    libcli:auth: Check return codes of SMBsesskeygen_ntv2()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 045b9eb3f088c66e20bd19e144a2ce3597328d93
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Nov 13 12:40:02 2019 +0100

    libcli:auth: Return NTSTATUS for SMBOWFencrypt_ntv2()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14195
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 83b1c21dd0fb932b81491065067a973398bdca91
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Wed Nov 13 15:51:08 2019 +1300

    librpc: Do not return an NDR table for a zero GUID
    
    The source3 RPC server will do a lookup by GUID and should
    not be returned a table for a zero GUID.
    
    Thankfully such a pipe would also need to have been registered
    but regardless this is not a determinsitic result so should
    be avoided.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

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

Summary of changes:
 auth/credentials/pycredentials.c                |  11 +-
 libcli/auth/credentials.c                       | 138 +++++++++++++++++++-----
 libcli/auth/netlogon_creds_cli.c                |  76 +++++++++----
 libcli/auth/ntlm_check.c                        |  33 +++++-
 libcli/auth/proto.h                             |  18 ++--
 libcli/auth/smbencrypt.c                        |  84 +++++++++++----
 librpc/ndr/ndr_table.c                          |   8 ++
 source4/lib/tls/tls_tstream.c                   |  12 ---
 source4/lib/tls/tlscert.c                       |   3 -
 source4/librpc/rpc/dcerpc_schannel.c            |   8 +-
 source4/rpc_server/backupkey/dcesrv_backupkey.c |   3 -
 source4/torture/rpc/backupkey.c                 |  48 ---------
 12 files changed, 288 insertions(+), 154 deletions(-)


Changeset truncated at 500 lines:

diff --git a/auth/credentials/pycredentials.c b/auth/credentials/pycredentials.c
index 446f30970a2..7427e286dca 100644
--- a/auth/credentials/pycredentials.c
+++ b/auth/credentials/pycredentials.c
@@ -832,6 +832,7 @@ static PyObject *py_creds_new_client_authenticator(PyObject *self,
 	struct cli_credentials *creds = NULL;
 	struct netlogon_creds_CredentialState *nc = NULL;
 	PyObject *ret = NULL;
+	NTSTATUS status;
 
 	creds = PyCredentials_AsCliCredentials(self);
 	if (creds == NULL) {
@@ -848,9 +849,13 @@ static PyObject *py_creds_new_client_authenticator(PyObject *self,
 		return NULL;
 	}
 
-	netlogon_creds_client_authenticator(
-		nc,
-		&auth);
+	status = netlogon_creds_client_authenticator(nc, &auth);
+	if (!NT_STATUS_IS_OK(status)) {
+		PyErr_SetString(PyExc_ValueError,
+				"Failed to create client authenticator");
+		return NULL;
+	}
+
 	ret = Py_BuildValue("{s"PYARG_BYTES_LEN"si}",
 			    "credential",
 			    (const char *) &auth.cred, sizeof(auth.cred),
diff --git a/libcli/auth/credentials.c b/libcli/auth/credentials.c
index baa436df71b..f1088a1d8e0 100644
--- a/libcli/auth/credentials.c
+++ b/libcli/auth/credentials.c
@@ -33,17 +33,25 @@
 #include <gnutls/gnutls.h>
 #include <gnutls/crypto.h>
 
-static void netlogon_creds_step_crypt(struct netlogon_creds_CredentialState *creds,
-				      const struct netr_Credential *in,
-				      struct netr_Credential *out)
+static NTSTATUS netlogon_creds_step_crypt(struct netlogon_creds_CredentialState *creds,
+					  const struct netr_Credential *in,
+					  struct netr_Credential *out)
 {
+	NTSTATUS status;
 	if (creds->negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
 		memcpy(out->data, in->data, sizeof(out->data));
 
-		netlogon_creds_aes_encrypt(creds, out->data, sizeof(out->data));
+		status = netlogon_creds_aes_encrypt(creds,
+						    out->data,
+						    sizeof(out->data));
+		if (!NT_STATUS_IS_OK(status)) {
+			return status;
+		}
 	} else {
 		des_crypt112(out->data, in->data, creds->session_key, 1);
 	}
+
+	return NT_STATUS_OK;
 }
 
 /*
@@ -51,10 +59,10 @@ static void netlogon_creds_step_crypt(struct netlogon_creds_CredentialState *cre
 
   this call is made after the netr_ServerReqChallenge call
 */
-static void netlogon_creds_init_64bit(struct netlogon_creds_CredentialState *creds,
-				      const struct netr_Credential *client_challenge,
-				      const struct netr_Credential *server_challenge,
-				      const struct samr_Password *machine_password)
+static NTSTATUS netlogon_creds_init_64bit(struct netlogon_creds_CredentialState *creds,
+					 const struct netr_Credential *client_challenge,
+					 const struct netr_Credential *server_challenge,
+					 const struct samr_Password *machine_password)
 {
 	uint32_t sum[2];
 	uint8_t sum2[8];
@@ -68,6 +76,8 @@ static void netlogon_creds_init_64bit(struct netlogon_creds_CredentialState *cre
 	ZERO_ARRAY(creds->session_key);
 
 	des_crypt128(creds->session_key, sum2, machine_password->hash);
+
+	return NT_STATUS_OK;
 }
 
 /*
@@ -172,24 +182,39 @@ static NTSTATUS netlogon_creds_init_hmac_sha256(struct netlogon_creds_Credential
 	return NT_STATUS_OK;
 }
 
-static void netlogon_creds_first_step(struct netlogon_creds_CredentialState *creds,
-				      const struct netr_Credential *client_challenge,
-				      const struct netr_Credential *server_challenge)
+static NTSTATUS netlogon_creds_first_step(struct netlogon_creds_CredentialState *creds,
+					  const struct netr_Credential *client_challenge,
+					  const struct netr_Credential *server_challenge)
 {
-	netlogon_creds_step_crypt(creds, client_challenge, &creds->client);
+	NTSTATUS status;
+
+	status = netlogon_creds_step_crypt(creds,
+					   client_challenge,
+					   &creds->client);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
-	netlogon_creds_step_crypt(creds, server_challenge, &creds->server);
+	status = netlogon_creds_step_crypt(creds,
+					   server_challenge,
+					   &creds->server);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
 	creds->seed = creds->client;
+
+	return NT_STATUS_OK;
 }
 
 /*
   step the credentials to the next element in the chain, updating the
   current client and server credentials and the seed
 */
-static void netlogon_creds_step(struct netlogon_creds_CredentialState *creds)
+static NTSTATUS netlogon_creds_step(struct netlogon_creds_CredentialState *creds)
 {
 	struct netr_Credential time_cred;
+	NTSTATUS status;
 
 	DEBUG(5,("\tseed        %08x:%08x\n",
 		 IVAL(creds->seed.data, 0), IVAL(creds->seed.data, 4)));
@@ -199,7 +224,12 @@ static void netlogon_creds_step(struct netlogon_creds_CredentialState *creds)
 
 	DEBUG(5,("\tseed+time   %08x:%08x\n", IVAL(time_cred.data, 0), IVAL(time_cred.data, 4)));
 
-	netlogon_creds_step_crypt(creds, &time_cred, &creds->client);
+	status = netlogon_creds_step_crypt(creds,
+					   &time_cred,
+					   &creds->client);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
 	DEBUG(5,("\tCLIENT      %08x:%08x\n",
 		 IVAL(creds->client.data, 0), IVAL(creds->client.data, 4)));
@@ -210,12 +240,17 @@ static void netlogon_creds_step(struct netlogon_creds_CredentialState *creds)
 	DEBUG(5,("\tseed+time+1 %08x:%08x\n",
 		 IVAL(time_cred.data, 0), IVAL(time_cred.data, 4)));
 
-	netlogon_creds_step_crypt(creds, &time_cred, &creds->server);
+	status = netlogon_creds_step_crypt(creds, &time_cred, &creds->server);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
 	DEBUG(5,("\tSERVER      %08x:%08x\n",
 		 IVAL(creds->server.data, 0), IVAL(creds->server.data, 4)));
 
 	creds->seed = time_cred;
+
+	return NT_STATUS_OK;
 }
 
 
@@ -458,10 +493,23 @@ struct netlogon_creds_CredentialState *netlogon_creds_client_init(TALLOC_CTX *me
 			return NULL;
 		}
 	} else {
-		netlogon_creds_init_64bit(creds, client_challenge, server_challenge, machine_password);
+		status = netlogon_creds_init_64bit(creds,
+						   client_challenge,
+						   server_challenge,
+						   machine_password);
+		if (!NT_STATUS_IS_OK(status)) {
+			talloc_free(creds);
+			return NULL;
+		}
 	}
 
-	netlogon_creds_first_step(creds, client_challenge, server_challenge);
+	status = netlogon_creds_first_step(creds,
+					   client_challenge,
+					   server_challenge);
+	if (!NT_STATUS_IS_OK(status)) {
+		talloc_free(creds);
+		return NULL;
+	}
 
 	dump_data_pw("Session key", creds->session_key, 16);
 	dump_data_pw("Credential ", creds->client.data, 8);
@@ -496,10 +544,12 @@ struct netlogon_creds_CredentialState *netlogon_creds_client_init_session_key(TA
   produce the next authenticator in the sequence ready to send to
   the server
 */
-void netlogon_creds_client_authenticator(struct netlogon_creds_CredentialState *creds,
-				struct netr_Authenticator *next)
+NTSTATUS
+netlogon_creds_client_authenticator(struct netlogon_creds_CredentialState *creds,
+				    struct netr_Authenticator *next)
 {
 	uint32_t t32n = (uint32_t)time(NULL);
+	NTSTATUS status;
 
 	/*
 	 * we always increment and ignore an overflow here
@@ -522,10 +572,15 @@ void netlogon_creds_client_authenticator(struct netlogon_creds_CredentialState *
 		}
 	}
 
-	netlogon_creds_step(creds);
+	status = netlogon_creds_step(creds);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
 	next->cred = creds->client;
 	next->timestamp = creds->sequence;
+
+	return NT_STATUS_OK;
 }
 
 /*
@@ -580,6 +635,8 @@ struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *me
 {
 
 	struct netlogon_creds_CredentialState *creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState);
+	NTSTATUS status;
+
 
 	if (!creds) {
 		return NULL;
@@ -604,8 +661,6 @@ struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *me
 	}
 
 	if (negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
-		NTSTATUS status;
-
 		status = netlogon_creds_init_hmac_sha256(creds,
 							 client_challenge,
 							 server_challenge,
@@ -615,14 +670,32 @@ struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *me
 			return NULL;
 		}
 	} else if (negotiate_flags & NETLOGON_NEG_STRONG_KEYS) {
-		netlogon_creds_init_128bit(creds, client_challenge, server_challenge,
-					   machine_password);
+		status = netlogon_creds_init_128bit(creds,
+						    client_challenge,
+						    server_challenge,
+						    machine_password);
+		if (!NT_STATUS_IS_OK(status)) {
+			talloc_free(creds);
+			return NULL;
+		}
 	} else {
-		netlogon_creds_init_64bit(creds, client_challenge, server_challenge,
-					  machine_password);
+		status = netlogon_creds_init_64bit(creds,
+						   client_challenge,
+						   server_challenge,
+						   machine_password);
+		if (!NT_STATUS_IS_OK(status)) {
+			talloc_free(creds);
+			return NULL;
+		}
 	}
 
-	netlogon_creds_first_step(creds, client_challenge, server_challenge);
+	status = netlogon_creds_first_step(creds,
+					   client_challenge,
+					   server_challenge);
+	if (!NT_STATUS_IS_OK(status)) {
+		talloc_free(creds);
+		return NULL;
+	}
 
 	dump_data_pw("Session key", creds->session_key, 16);
 	dump_data_pw("Client Credential ", creds->client.data, 8);
@@ -648,6 +721,8 @@ NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState
 				 const struct netr_Authenticator *received_authenticator,
 				 struct netr_Authenticator *return_authenticator)
 {
+	NTSTATUS status;
+
 	if (!received_authenticator || !return_authenticator) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
@@ -657,7 +732,12 @@ NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState
 	}
 
 	creds->sequence = received_authenticator->timestamp;
-	netlogon_creds_step(creds);
+	status = netlogon_creds_step(creds);
+	if (!NT_STATUS_IS_OK(status)) {
+		ZERO_STRUCTP(return_authenticator);
+		return status;
+	}
+
 	if (netlogon_creds_server_check_internal(creds, &received_authenticator->cred)) {
 		return_authenticator->cred = creds->server;
 		return_authenticator->timestamp = 0;
diff --git a/libcli/auth/netlogon_creds_cli.c b/libcli/auth/netlogon_creds_cli.c
index 3cc18e7fa60..6f043d774cd 100644
--- a/libcli/auth/netlogon_creds_cli.c
+++ b/libcli/auth/netlogon_creds_cli.c
@@ -1547,7 +1547,11 @@ struct tevent_req *netlogon_creds_cli_check_send(TALLOC_CTX *mem_ctx,
 	 */
 	tevent_req_defer_callback(req, state->ev);
 
-	netlogon_creds_client_authenticator(state->creds, &state->req_auth);
+	status = netlogon_creds_client_authenticator(state->creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return tevent_req_post(req, ev);
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	subreq = dcerpc_netr_LogonGetCapabilities_send(state, state->ev,
@@ -1981,16 +1985,23 @@ static void netlogon_creds_cli_ServerPasswordSet_locked(struct tevent_req *subre
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	if (state->tmp_creds.negotiate_flags & NETLOGON_NEG_PASSWORD_SET2) {
 
 		if (state->tmp_creds.negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
-			netlogon_creds_aes_encrypt(&state->tmp_creds,
-					state->samr_crypt_password.data,
-					516);
+			status = netlogon_creds_aes_encrypt(&state->tmp_creds,
+							    state->samr_crypt_password.data,
+							    516);
+			if (tevent_req_nterror(req, status)) {
+				netlogon_creds_cli_ServerPasswordSet_cleanup(req, status);
+				return;
+			}
 		} else {
 			status = netlogon_creds_arcfour_crypt(&state->tmp_creds,
 							      state->samr_crypt_password.data,
@@ -2416,8 +2427,12 @@ static void netlogon_creds_cli_LogonSamLogon_start(struct tevent_req *req)
 	}
 
 	state->tmp_creds = *state->lk_creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		netlogon_creds_cli_LogonSamLogon_cleanup(req, status);
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	state->logon = netlogon_creds_shallow_copy_logon(state,
@@ -2848,8 +2863,11 @@ static void netlogon_creds_cli_DsrUpdateReadOnlyServerDnsRecords_locked(struct t
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	subreq = dcerpc_netr_DsrUpdateReadOnlyServerDnsRecords_send(state, state->ev,
@@ -3100,8 +3118,11 @@ static void netlogon_creds_cli_ServerGetTrustInfo_locked(struct tevent_req *subr
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	subreq = dcerpc_netr_ServerGetTrustInfo_send(state, state->ev,
@@ -3402,8 +3423,11 @@ static void netlogon_creds_cli_GetForestTrustInformation_locked(struct tevent_re
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	subreq = dcerpc_netr_GetForestTrustInformation_send(state, state->ev,
@@ -3679,14 +3703,21 @@ static void netlogon_creds_cli_SendToSam_locked(struct tevent_req *subreq)
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	if (state->tmp_creds.negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
-		netlogon_creds_aes_encrypt(&state->tmp_creds,
-					   state->opaque.data,
-					   state->opaque.length);
+		status = netlogon_creds_aes_encrypt(&state->tmp_creds,
+						    state->opaque.data,
+						    state->opaque.length);
+		if (tevent_req_nterror(req, status)) {
+			netlogon_creds_cli_SendToSam_cleanup(req, status);
+			return;
+		}
 	} else {
 		status = netlogon_creds_arcfour_crypt(&state->tmp_creds,
 						      state->opaque.data,
@@ -3944,8 +3975,11 @@ static void netlogon_creds_cli_LogonGetDomainInfo_locked(struct tevent_req *subr
 	tevent_req_defer_callback(req, state->ev);
 
 	state->tmp_creds = *state->creds;
-	netlogon_creds_client_authenticator(&state->tmp_creds,
-					    &state->req_auth);
+	status = netlogon_creds_client_authenticator(&state->tmp_creds,
+						     &state->req_auth);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	ZERO_STRUCT(state->rep_auth);
 
 	subreq = dcerpc_netr_LogonGetDomainInfo_send(state, state->ev,
diff --git a/libcli/auth/ntlm_check.c b/libcli/auth/ntlm_check.c
index 3844abde528..5058add3811 100644
--- a/libcli/auth/ntlm_check.c
+++ b/libcli/auth/ntlm_check.c
@@ -93,6 +93,7 @@ static bool smb_pwd_check_ntlmv2(TALLOC_CTX *mem_ctx,
 	uint8_t kr[16];
 	uint8_t value_from_encryption[16];
 	DATA_BLOB client_key_data;
+	NTSTATUS status;
 
 	if (part_passwd == NULL) {
 		DEBUG(10,("No password set - DISALLOWING access\n"));
@@ -125,7 +126,13 @@ static bool smb_pwd_check_ntlmv2(TALLOC_CTX *mem_ctx,
 		return false;
 	}
 
-	SMBOWFencrypt_ntv2(kr, sec_blob, &client_key_data, value_from_encryption);
+	status = SMBOWFencrypt_ntv2(kr,
+				    sec_blob,
+				    &client_key_data,
+				    value_from_encryption);
+	if (!NT_STATUS_IS_OK(status)) {
+		return false;
+	}
 
 #if DEBUG_PASSWORD
 	DEBUG(100,("Part password (P16) was |\n"));
@@ -143,7 +150,13 @@ static bool smb_pwd_check_ntlmv2(TALLOC_CTX *mem_ctx,
 	if (memcmp(value_from_encryption, ntv2_response->data, 16) == 0) { 
 		if (user_sess_key != NULL) {
 			*user_sess_key = data_blob_talloc(mem_ctx, NULL, 16);
-			SMBsesskeygen_ntv2(kr, value_from_encryption, user_sess_key->data);
+
+			status = SMBsesskeygen_ntv2(kr,
+						    value_from_encryption,
+						    user_sess_key->data);
+			if (!NT_STATUS_IS_OK(status)) {
+				return false;
+			}
 		}
 		return true;
 	}
@@ -166,6 +179,7 @@ static bool smb_sess_key_ntlmv2(TALLOC_CTX *mem_ctx,
 	uint8_t kr[16];
 	uint8_t value_from_encryption[16];
 	DATA_BLOB client_key_data;
+	NTSTATUS status;
 
 	if (part_passwd == NULL) {
 		DEBUG(10,("No password set - DISALLOWING access\n"));
@@ -194,9 +208,20 @@ static bool smb_sess_key_ntlmv2(TALLOC_CTX *mem_ctx,
 		return false;
 	}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list