libcli:smb: Fix signing with multichannel
authorAndreas Schneider <asn@samba.org>
Tue, 11 Jun 2019 13:39:24 +0000 (15:39 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 11 Jun 2019 14:01:20 +0000 (14:01 +0000)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
libcli/smb/smbXcli_base.c

index a82146a60f4f839778fff9a91d4a80f75f5999a8..e916a17e07a642ab0f22ac8a6dae305937873157 100644 (file)
@@ -3282,7 +3282,8 @@ skip_credits:
                         * If it is a channel binding, we already have the main
                         * signing key and try that one.
                         */
-                       if (!smb2_signing_key_valid(signing_key)) {
+                       if (signing_key != NULL &&
+                           !smb2_signing_key_valid(signing_key)) {
                                signing_key = state->session->smb2->signing_key;
                        }
 
@@ -3290,7 +3291,8 @@ skip_credits:
                         * If we do not have any session key yet, we skip the
                         * signing of SMB2_OP_SESSSETUP requests.
                         */
-                       if (!smb2_signing_key_valid(signing_key)) {
+                       if (signing_key != NULL &&
+                           !smb2_signing_key_valid(signing_key)) {
                                signing_key = NULL;
                        }
                }
@@ -3789,12 +3791,14 @@ static NTSTATUS smb2cli_conn_dispatch_incoming(struct smbXcli_conn *conn,
                         * we try the main signing key, if it is not
                         * the final response.
                         */
-                       if (!smb2_signing_key_valid(signing_key) &&
+                       if (signing_key != NULL &&
+                           !smb2_signing_key_valid(signing_key) &&
                            !NT_STATUS_IS_OK(status)) {
                                signing_key = session->smb2->signing_key;
                        }
 
-                       if (!smb2_signing_key_valid(signing_key)) {
+                       if (signing_key != NULL &&
+                           !smb2_signing_key_valid(signing_key)) {
                                /*
                                 * If we do not have a session key to
                                 * verify the signature, we defer the