s3:smbd: Return NTSTATUS for srv_calculate_sign_mac()
authorAndreas Schneider <asn@samba.org>
Thu, 11 Apr 2019 08:22:26 +0000 (10:22 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 21 May 2019 00:03:22 +0000 (00:03 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/smbd/process.c
source3/smbd/proto.h
source3/smbd/signing.c

index d6545101f0157f1541392f2d80cd383f4fd62066..2842c98458c400e1ef02081b613c769083586471 100644 (file)
@@ -228,8 +228,15 @@ bool srv_send_smb(struct smbXsrv_connection *xconn, char *buffer,
        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) {
index 05208166ebf0fdf2dabaa58135c307b8c5136fb7..7d4f7757ec3645b6213a3d2bb3e20e81d336f004 100644 (file)
@@ -52,8 +52,8 @@ struct smbXsrv_connection;
 
 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,
index 9fac87b508137c9d9f09d04c31d604b3be8d2b6e..eb1bf389b0ff40523e0521c25ac00cbfae0f5bb4 100644 (file)
@@ -75,21 +75,24 @@ bool srv_check_sign_mac(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);
 }