libcli:smb: Return NTSTATUS for smb_signing_sign_pdu()
authorAndreas Schneider <asn@samba.org>
Thu, 11 Apr 2019 08:19:16 +0000 (10:19 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 21 May 2019 00:03:21 +0000 (00:03 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libcli/smb/smbXcli_base.c
libcli/smb/smb_signing.c
libcli/smb/smb_signing.h

index bde0db7e33c27aadba2abeeeb95e41bbdadd66cf..65381a1b9ceba94dee3765b729e7d1f77a77b915 100644 (file)
@@ -1623,6 +1623,7 @@ static NTSTATUS smb1cli_conn_signv(struct smbXcli_conn *conn,
                                   bool one_way_seqnum)
 {
        TALLOC_CTX *frame = NULL;
+       NTSTATUS status;
        uint8_t *buf;
 
        /*
@@ -1655,9 +1656,13 @@ static NTSTATUS smb1cli_conn_signv(struct smbXcli_conn *conn,
 
        *seqnum = smb_signing_next_seqnum(conn->smb1.signing,
                                          one_way_seqnum);
-       smb_signing_sign_pdu(conn->smb1.signing,
-                            buf, talloc_get_size(buf),
-                            *seqnum);
+       status = smb_signing_sign_pdu(conn->smb1.signing,
+                                     buf,
+                                     talloc_get_size(buf),
+                                     *seqnum);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
        memcpy(iov[1].iov_base, buf, iov[1].iov_len);
 
        TALLOC_FREE(frame);
index 34e6dc0fe58d51b7d7c05c85b48be453d84ad62b..93e2c82ee7ff035dedf521fa394bc24bb65535d8 100644 (file)
@@ -237,9 +237,9 @@ void smb_signing_cancel_reply(struct smb_signing_state *si, bool oneway)
        }
 }
 
-void smb_signing_sign_pdu(struct smb_signing_state *si,
-                         uint8_t *outhdr, size_t len,
-                         uint32_t seqnum)
+NTSTATUS smb_signing_sign_pdu(struct smb_signing_state *si,
+                             uint8_t *outhdr, size_t len,
+                             uint32_t seqnum)
 {
        uint8_t calc_md5_mac[16];
        uint8_t com;
@@ -247,7 +247,7 @@ void smb_signing_sign_pdu(struct smb_signing_state *si,
 
        if (si->mac_key.length == 0) {
                if (!si->negotiated) {
-                       return;
+                       return NT_STATUS_OK;
                }
        }
 
@@ -294,7 +294,7 @@ void smb_signing_sign_pdu(struct smb_signing_state *si,
                                         seqnum,
                                         calc_md5_mac);
                if (!NT_STATUS_IS_OK(status)) {
-                       return;
+                       return status;
                }
        }
 
@@ -305,6 +305,8 @@ void smb_signing_sign_pdu(struct smb_signing_state *si,
 
 /*     outhdr[HDR_SS_FIELD+2]=0;
        Uncomment this to test if the remote server actually verifies signatures...*/
+
+       return NT_STATUS_OK;
 }
 
 bool smb_signing_check_pdu(struct smb_signing_state *si,
index 7d9e8ad4cac434a5fbb453147972bca79a343b85..094b860a44edc3426c3023c2ebb87de02ddd5374 100644 (file)
@@ -36,9 +36,9 @@ struct smb_signing_state *smb_signing_init_ex(TALLOC_CTX *mem_ctx,
                                              void (*free_fn)(TALLOC_CTX *, void *));
 uint32_t smb_signing_next_seqnum(struct smb_signing_state *si, bool oneway);
 void smb_signing_cancel_reply(struct smb_signing_state *si, bool oneway);
-void smb_signing_sign_pdu(struct smb_signing_state *si,
-                         uint8_t *outhdr, size_t len,
-                         uint32_t seqnum);
+NTSTATUS smb_signing_sign_pdu(struct smb_signing_state *si,
+                             uint8_t *outhdr, size_t len,
+                             uint32_t seqnum);
 bool smb_signing_check_pdu(struct smb_signing_state *si,
                           const uint8_t *inhdr, size_t len,
                           uint32_t seqnum);