From c116652a3050a8549b722ae8ab5f9a2bf9a33b9f Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 19 Jul 2009 14:52:07 -0400 Subject: [PATCH] In chain_reply, copy the subrequests' error to the main request --- source3/smbd/process.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source3/smbd/process.c b/source3/smbd/process.c index c2065caf798..8a4ff42e7fc 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -1771,6 +1771,21 @@ void chain_reply(struct smb_request *req) fixup_chain_error_packet(req); done: + /* + * This scary statement intends to set the + * FLAGS2_32_BIT_ERROR_CODES flg2 field in req->chain_outbuf + * to the value req->outbuf carries + */ + SSVAL(req->chain_outbuf, smb_flg2, + (SVAL(req->chain_outbuf, smb_flg2) & ~FLAGS2_32_BIT_ERROR_CODES) + | (SVAL(req->outbuf, smb_flg2) & FLAGS2_32_BIT_ERROR_CODES)); + + /* + * Transfer the error codes from the subrequest to the main one + */ + SSVAL(req->chain_outbuf, smb_rcls, SVAL(req->outbuf, smb_rcls)); + SSVAL(req->chain_outbuf, smb_err, SVAL(req->outbuf, smb_err)); + if (!smb_splice_chain(&req->chain_outbuf, CVAL(req->outbuf, smb_com), CVAL(req->outbuf, smb_wct), -- 2.34.1