[SCM] Samba Shared Repository - branch v3-5-test updated

Karolin Seeger kseeger at samba.org
Wed Nov 16 12:37:42 MST 2011


The branch, v3-5-test has been updated
       via  2bdf872 s3:libsmb: consistently use state->size in cli_write_andx_create() (bug #5326)
       via  9b3a059 s3:libsmb: fix cli_write_and_x() against OS/2 print shares (bug #5326)
      from  467a586 Fix bug #8561 - Password change settings not fully observed.

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


- Log -----------------------------------------------------------------
commit 2bdf8728612dd7ca5b04e38375beabe9db4a91bf
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Nov 11 02:10:00 2011 +0100

    s3:libsmb: consistently use state->size in cli_write_andx_create() (bug #5326)
    
    Otherwise we may get unexpected results.
    
    This is a fix that was missing in commit 95595dd93fd04999fcf56ecaab7c29b064d021f8
    (s3:libsmb: fix cli_write_and_x() against OS/2 print shares (bug #5326))
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Wed Nov  9 10:13:32 CET 2011 on sn-devel-104
    (cherry picked from commit 4b31c4273c45faa639445614061f3da548eb8505)

commit 9b3a0594424a66bb410bdc48aebfdee8485b1df4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Nov 8 08:25:16 2011 +0100

    s3:libsmb: fix cli_write_and_x() against OS/2 print shares (bug #5326)
    
    Print shares doesn't support CAP_LARGE_WRITEX, while it's negotiated
    by the file server part.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Tue Nov  8 17:01:36 CET 2011 on sn-devel-104
    (cherry picked from commit 95595dd93fd04999fcf56ecaab7c29b064d021f8)

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

Summary of changes:
 source3/libsmb/clireadwrite.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/libsmb/clireadwrite.c b/source3/libsmb/clireadwrite.c
index 1f5f925..53ecacc 100644
--- a/source3/libsmb/clireadwrite.c
+++ b/source3/libsmb/clireadwrite.c
@@ -944,7 +944,7 @@ struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
 		return NULL;
 	}
 
-	size = MIN(size, max_write);
+	state->size = MIN(size, max_write);
 
 	vwv = state->vwv;
 
@@ -956,8 +956,8 @@ struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
 	SIVAL(vwv+5, 0, 0);
 	SSVAL(vwv+7, 0, mode);
 	SSVAL(vwv+8, 0, 0);
-	SSVAL(vwv+9, 0, (size>>16));
-	SSVAL(vwv+10, 0, size);
+	SSVAL(vwv+9, 0, (state->size>>16));
+	SSVAL(vwv+10, 0, state->size);
 
 	SSVAL(vwv+11, 0,
 	      cli_smb_wct_ofs(reqs_before, num_reqs_before)
@@ -974,7 +974,7 @@ struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
 	state->iov[0].iov_base = (void *)&state->pad;
 	state->iov[0].iov_len = 1;
 	state->iov[1].iov_base = CONST_DISCARD(void *, buf);
-	state->iov[1].iov_len = size;
+	state->iov[1].iov_len = state->size;
 
 	subreq = cli_smb_req_create(state, ev, cli, SMBwriteX, 0, wct, vwv,
 				    2, state->iov);
@@ -1026,7 +1026,18 @@ static void cli_write_andx_done(struct tevent_req *subreq)
 		return;
 	}
 	state->written = SVAL(vwv+2, 0);
-	state->written |= SVAL(vwv+4, 0)<<16;
+	if (state->size > UINT16_MAX) {
+		/*
+		 * It is important that we only set the
+		 * high bits only if we asked for a large write.
+		 *
+		 * OS/2 print shares get this wrong and may send
+		 * invalid values.
+		 *
+		 * See bug #5326.
+		 */
+		state->written |= SVAL(vwv+4, 0)<<16;
+	}
 	tevent_req_done(req);
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list