summaryrefslogtreecommitdiff
path: root/source4/smb_server/request.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/smb_server/request.c')
-rw-r--r--source4/smb_server/request.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/source4/smb_server/request.c b/source4/smb_server/request.c
index b1e3b5f66e..8f545e8f59 100644
--- a/source4/smb_server/request.c
+++ b/source4/smb_server/request.c
@@ -297,29 +297,23 @@ void req_reply_dos_error(struct request_context *req, uint8_t eclass, uint16_t e
SCVAL(req->out.hdr, HDR_RCLS, eclass);
SSVAL(req->out.hdr, HDR_ERR, ecode);
-
- SSVAL(req->out.hdr, HDR_FLG2, SVAL(req->out.hdr, HDR_FLG2) & ~FLAGS2_32_BIT_ERROR_CODES);
-
+ SSVAL(req->out.hdr, HDR_FLG2, SVAL(req->out.hdr, HDR_FLG2) & ~FLAGS2_32_BIT_ERROR_CODES);
req_send_reply(req);
}
/*
- construct and send an error packet, then destroy the request
- auto-converts to DOS error format when appropriate
+ setup the header of a reply to include an NTSTATUS code
*/
-void req_reply_error(struct request_context *req, NTSTATUS status)
+void req_setup_error(struct request_context *req, NTSTATUS status)
{
- req_setup_reply(req, 0, 0);
-
- /* error returns never have any data */
- req_grow_data(req, 0);
-
if (!lp_nt_status_support() || !(req->smb->negotiate.client_caps & CAP_STATUS32)) {
/* convert to DOS error codes */
uint8_t eclass;
uint32_t ecode;
ntstatus_to_dos(status, &eclass, &ecode);
- req_reply_dos_error(req, eclass, ecode);
+ SCVAL(req->out.hdr, HDR_RCLS, eclass);
+ SSVAL(req->out.hdr, HDR_ERR, ecode);
+ SSVAL(req->out.hdr, HDR_FLG2, SVAL(req->out.hdr, HDR_FLG2) & ~FLAGS2_32_BIT_ERROR_CODES);
return;
}
@@ -332,7 +326,20 @@ void req_reply_error(struct request_context *req, NTSTATUS status)
SIVAL(req->out.hdr, HDR_RCLS, NT_STATUS_V(status));
SSVAL(req->out.hdr, HDR_FLG2, SVAL(req->out.hdr, HDR_FLG2) | FLAGS2_32_BIT_ERROR_CODES);
}
-
+}
+
+/*
+ construct and send an error packet, then destroy the request
+ auto-converts to DOS error format when appropriate
+*/
+void req_reply_error(struct request_context *req, NTSTATUS status)
+{
+ req_setup_reply(req, 0, 0);
+
+ /* error returns never have any data */
+ req_grow_data(req, 0);
+
+ req_setup_error(req, status);
req_send_reply(req);
}