[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3567-gaf2b01d

Volker Lendecke vlendec at samba.org
Sun Aug 10 16:22:25 GMT 2008


The branch, v3-3-test has been updated
       via  af2b01d85188d2301580643f7e862e3e3988aadc (commit)
       via  0ff16e8573f3c312f10fc723648319fa1f514ac0 (commit)
      from  59136544ec16b6ceb14a75259aedd22856832bf1 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit af2b01d85188d2301580643f7e862e3e3988aadc
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 10 17:53:35 2008 +0200

    fix smb_len calculation for chained requests
    
    I think chain_reply() is one of the most tricky parts of Samba. This recursion
    needs to go away, we need to sequentially walk the chain list.

commit 0ff16e8573f3c312f10fc723648319fa1f514ac0
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Aug 10 17:37:08 2008 +0200

    Fix andx offset calculation for more than 2 chained requests
    
    Untested code is broken code.... Test follows later, it's quite an intrusive
    change to libsmb/

-----------------------------------------------------------------------

Summary of changes:
 source/smbd/process.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/smbd/process.c b/source/smbd/process.c
index da11652..332a2e4 100644
--- a/source/smbd/process.c
+++ b/source/smbd/process.c
@@ -1653,6 +1653,7 @@ void chain_reply(struct smb_request *req)
 	char *outbuf = (char *)req->outbuf;
 	size_t outsize = smb_len(outbuf) + 4;
 	size_t outsize_padded;
+	size_t padding;
 	size_t ofs, to_move;
 
 	struct smb_request *req2;
@@ -1691,12 +1692,13 @@ void chain_reply(struct smb_request *req)
 	 */
 
 	outsize_padded = (outsize + 3) & ~3;
+	padding = outsize_padded - outsize;
 
 	/*
 	 * remember how much the caller added to the chain, only counting
 	 * stuff after the parameter words
 	 */
-	chain_size += outsize_padded - smb_wct;
+	chain_size += (outsize_padded - smb_wct);
 
 	/*
 	 * work out pointers into the original packets. The
@@ -1804,17 +1806,17 @@ void chain_reply(struct smb_request *req)
 	SCVAL(outbuf, smb_vwv0, smb_com2);
 	SSVAL(outbuf, smb_vwv1, chain_size + smb_wct - 4);
 
-	if (outsize_padded > outsize) {
+	if (padding != 0) {
 
 		/*
 		 * Due to padding we have some uninitialized bytes after the
 		 * caller's output
 		 */
 
-		memset(outbuf + outsize, 0, outsize_padded - outsize);
+		memset(outbuf + outsize, 0, padding);
 	}
 
-	smb_setlen(outbuf, outsize2 + chain_size - 4);
+	smb_setlen(outbuf, outsize2 + caller_outputlen + padding - 4);
 
 	/*
 	 * restore the saved data, being careful not to overwrite any data
@@ -1825,6 +1827,12 @@ void chain_reply(struct smb_request *req)
 	SAFE_FREE(caller_output);
 	TALLOC_FREE(req2);
 
+	/*
+	 * Reset the chain_size for our caller's offset calculations
+	 */
+
+	chain_size -= (outsize_padded - smb_wct);
+
 	return;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list