[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Mon Nov 7 03:39:04 MST 2011


The branch, master has been updated
       via  230cd1e s3:libsmb: return NT_STATUS_OK for if a request is not the last one in the chain
       via  597f2ae s3:libsmb: make sure have_andx_command() returns false for non AndX commands
       via  b20775f s3:libsmb: remember the seqnum on all chained requests
       via  20fe765 s3:libsmb: get cmd of the chained request before changing wct_ofs
      from  384eaba s4: samba-tool user --help documenation improvements Signed-off-by: Theresa Halloran <thallora at linux.vnet.ibm.com>

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 230cd1e276f9661f290b3eaeecca005303a68efb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Nov 7 08:55:20 2011 +0100

    s3:libsmb: return NT_STATUS_OK for if a request is not the last one in the chain
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Mon Nov  7 11:38:05 CET 2011 on sn-devel-104

commit 597f2ae3423ce70f84e41ed3293f049920fa0758
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Nov 7 08:54:40 2011 +0100

    s3:libsmb: make sure have_andx_command() returns false for non AndX commands
    
    metze

commit b20775fb3b3c86c4aab913e5cbae19cf4e0e71d3
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Nov 7 08:44:39 2011 +0100

    s3:libsmb: remember the seqnum on all chained requests
    
    This is needed in order to verify the incoming signature
    correctly.
    
    metze

commit 20fe7658a779c24c9a4e0b66da844fd117a97319
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sat Nov 5 12:29:23 2011 +0100

    s3:libsmb: get cmd of the chained request before changing wct_ofs
    
    metze

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

Summary of changes:
 source3/libsmb/async_smb.c |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/libsmb/async_smb.c b/source3/libsmb/async_smb.c
index 79194f5..08b6c35 100644
--- a/source3/libsmb/async_smb.c
+++ b/source3/libsmb/async_smb.c
@@ -51,11 +51,15 @@ static NTSTATUS cli_pull_raw_error(const uint8_t *buf)
  * @retval Is there a command following?
  */
 
-static bool have_andx_command(const char *buf, uint16_t ofs)
+static bool have_andx_command(const char *buf, uint16_t ofs, uint8_t cmd)
 {
 	uint8_t wct;
 	size_t buflen = talloc_get_size(buf);
 
+	if (!is_andx_req(cmd)) {
+		return false;
+	}
+
 	if ((ofs == buflen-1) || (ofs == buflen)) {
 		return false;
 	}
@@ -870,7 +874,7 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
 			}
 		}
 
-		if (!have_andx_command((char *)state->inbuf, wct_ofs)) {
+		if (!have_andx_command((char *)state->inbuf, wct_ofs, cmd)) {
 			/*
 			 * This request was not completed because a previous
 			 * request in the chain had received an error.
@@ -878,6 +882,7 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
 			return NT_STATUS_REQUEST_ABORTED;
 		}
 
+		cmd = CVAL(state->inbuf, wct_ofs + 1);
 		wct_ofs = SVAL(state->inbuf, wct_ofs + 3);
 
 		/*
@@ -889,8 +894,6 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
 		if (wct_ofs+2 > talloc_get_size(state->inbuf)) {
 			return NT_STATUS_INVALID_NETWORK_RESPONSE;
 		}
-
-		cmd = CVAL(state->inbuf, wct_ofs + 1);
 	}
 
 	state->cli->raw_status = cli_pull_raw_error(state->inbuf);
@@ -908,7 +911,7 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
 		status = state->cli->raw_status;
 	}
 
-	if (!have_andx_command((char *)state->inbuf, wct_ofs)) {
+	if (!have_andx_command((char *)state->inbuf, wct_ofs, cmd)) {
 
 		if ((cmd == SMBsesssetupX)
 		    && NT_STATUS_EQUAL(
@@ -928,6 +931,12 @@ NTSTATUS cli_smb_recv(struct tevent_req *req,
 			 */
 			return status;
 		}
+	} else {
+		/*
+		 * Only the last request in the chain get the returned
+		 * status.
+		 */
+		status = NT_STATUS_OK;
 	}
 
 no_err:
@@ -1092,6 +1101,12 @@ NTSTATUS cli_smb_chain_send(struct tevent_req **reqs, int num_reqs)
 		return status;
 	}
 
+	for (i=0; i < (num_reqs - 1); i++) {
+		state = tevent_req_data(reqs[i], struct cli_smb_state);
+
+		state->seqnum = last_state->seqnum;
+	}
+
 	return NT_STATUS_OK;
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list