diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c index a0e390e..a224e9c 100644 --- a/source3/smbd/smb2_server.c +++ b/source3/smbd/smb2_server.c @@ -573,6 +573,25 @@ static void smb2_set_operation_credit(struct smbd_server_connection *sconn, (unsigned int)sconn->smb2.seqnum_range)); } +/* + * Sign each of the responses. + */ +static NTSTATUS smb2_sign_response(struct smbd_smb2_request *req) +{ + NTSTATUS status = NT_STATUS_OK; + int idx = 0; + int count = req->out.vector_count; + + for (idx=1; idx < count; idx += 3) { + status = smb2_signing_sign_pdu(req->session->session_key, + &req->out.vector[idx], 3); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + } + return status; +} + static void smb2_calculate_credits(const struct smbd_smb2_request *inreq, struct smbd_smb2_request *outreq) { @@ -1821,9 +1840,8 @@ static NTSTATUS smbd_smb2_request_reply(struct smbd_smb2_request *req) smb2_calculate_credits(req, req); if (req->do_signing) { - NTSTATUS status; - status = smb2_signing_sign_pdu(req->session->session_key, - &req->out.vector[i], 3); + NTSTATUS status = smb2_sign_response(req); + if (!NT_STATUS_IS_OK(status)) { return status; }