diff options
Diffstat (limited to 'source4/smb_server/request.c')
-rw-r--r-- | source4/smb_server/request.c | 33 |
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); } |