In chain_reply, copy the subrequests' error to the main request
authorVolker Lendecke <vl@samba.org>
Sun, 19 Jul 2009 18:52:07 +0000 (14:52 -0400)
committerVolker Lendecke <vl@samba.org>
Fri, 24 Jul 2009 15:17:08 +0000 (17:17 +0200)
source3/smbd/process.c

index c2065caf798b246a7f223f8893de81c1939f8ec9..8a4ff42e7fc97b8c5bd8741992dc162c47b75c4a 100644 (file)
@@ -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),