smbd_lock_socket(xconn);
if (do_signing) {
+ NTSTATUS status;
+
/* Sign the outgoing packet if required. */
- srv_calculate_sign_mac(xconn, buf_out, seqnum);
+ status = srv_calculate_sign_mac(xconn, buf_out, seqnum);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_ERR("Failed to calculate signing mac: %s\n",
+ nt_errstr(status));
+ return false;
+ }
}
if (do_encrypt) {
bool srv_check_sign_mac(struct smbXsrv_connection *conn,
const char *inbuf, uint32_t *seqnum, bool trusted_channel);
-void srv_calculate_sign_mac(struct smbXsrv_connection *conn,
- char *outbuf, uint32_t seqnum);
+NTSTATUS srv_calculate_sign_mac(struct smbXsrv_connection *conn,
+ char *outbuf, uint32_t seqnum);
void srv_cancel_sign_response(struct smbXsrv_connection *conn);
bool srv_init_signing(struct smbXsrv_connection *conn);
void srv_set_signing_negotiated(struct smbXsrv_connection *conn,
Called to sign an outgoing packet to the client.
************************************************************/
-void srv_calculate_sign_mac(struct smbXsrv_connection *conn,
- char *outbuf, uint32_t seqnum)
+NTSTATUS srv_calculate_sign_mac(struct smbXsrv_connection *conn,
+ char *outbuf, uint32_t seqnum)
{
uint8_t *outhdr;
size_t len;
/* Check if it's a non-session message. */
if(CVAL(outbuf,0)) {
- return;
+ return NT_STATUS_OK;;
}
len = smb_len(outbuf);
outhdr = (uint8_t *)outbuf + NBT_HDR_SIZE;
- smb_signing_sign_pdu(conn->smb1.signing_state, outhdr, len, seqnum);
+ return smb_signing_sign_pdu(conn->smb1.signing_state,
+ outhdr,
+ len,
+ seqnum);
}