summaryrefslogtreecommitdiff
path: root/libcli
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2019-04-11 10:19:16 +0200
committerAndrew Bartlett <abartlet@samba.org>2019-05-21 00:03:21 +0000
commit754e15518330038611f38c26ae3ce6e8a97f2006 (patch)
treeba383d8bbb5dea5ba8ba094408971925bb1706dc /libcli
parent7368a20043af0a51cb95330a57849927cc9e3e5e (diff)
downloadsamba-754e15518330038611f38c26ae3ce6e8a97f2006.tar.gz
libcli:smb: Return NTSTATUS for smb_signing_sign_pdu()
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'libcli')
-rw-r--r--libcli/smb/smbXcli_base.c11
-rw-r--r--libcli/smb/smb_signing.c12
-rw-r--r--libcli/smb/smb_signing.h6
3 files changed, 18 insertions, 11 deletions
diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c
index bde0db7e33c..65381a1b9ce 100644
--- a/libcli/smb/smbXcli_base.c
+++ b/libcli/smb/smbXcli_base.c
@@ -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);
diff --git a/libcli/smb/smb_signing.c b/libcli/smb/smb_signing.c
index 34e6dc0fe58..93e2c82ee7f 100644
--- a/libcli/smb/smb_signing.c
+++ b/libcli/smb/smb_signing.c
@@ -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,
diff --git a/libcli/smb/smb_signing.h b/libcli/smb/smb_signing.h
index 7d9e8ad4cac..094b860a44e 100644
--- a/libcli/smb/smb_signing.h
+++ b/libcli/smb/smb_signing.h
@@ -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);