[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Tue Sep 13 06:53:04 MDT 2011


The branch, master has been updated
       via  924b2d5 s3:torture: use CLI_BUFFER_SIZE instead of cli->max_xmit
       via  a4548ef s3:libsmb: make use of cli_state_available_size() in cli_smbwrite()
       via  96fc0d6 s3:libsmb: make use of cli_state_available_size() in cli_write_max_bufsize()
       via  c887e37 s3:libsmb: make use of cli_state_available_size() in cli_read_max_bufsize()
       via  a15fd83 s3:libsmb: make use of cli_state_available_size() in cli_list_old_send()
       via  76c1164 s3:libsmb: make use of cli_state_available_size() in cli_sesssetup_blob_send()
       via  afda15a s3:libsmb: make use of cli_state_available_size() in cli_trans_format()
       via  2a5f8da s3:libsmb: add cli_state_available_size()
       via  5848249 s3:clitar: remove unused/not existing extern variables
      from  e63d0c5 s3: Fix Coverity ID 2613 -- UNINIT

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


- Log -----------------------------------------------------------------
commit 924b2d5b7fdfc562765ffe7181ffb479bb05ae84
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 13:12:09 2011 +0200

    s3:torture: use CLI_BUFFER_SIZE instead of cli->max_xmit
    
    The max_data parameter of trans2/nttrans calls are not bound
    to cli->max_xmit. Even with cli->max_xmit, which means the max
    size of the whole SMB pdu, we would get fragmented trans2/nttrans
    replies. That's why we can also use our maximum, which is CLI_BUFFER_SIZE.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Tue Sep 13 14:52:35 CEST 2011 on sn-devel-104

commit a4548efe675881ce745368f1e8dc7649a2bba8e2
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 13:10:33 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_smbwrite()
    
    metze

commit 96fc0d601899b7c1647cc771f14fcef0b480b26a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:39:07 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_write_max_bufsize()
    
    metze

commit c887e37275378ddaf772309738bc2cd92d5e2819
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:38:21 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_read_max_bufsize()
    
    metze

commit a15fd8376770a1e2191e561c93a93887f94fe347
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:37:20 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_list_old_send()
    
    metze

commit 76c1164406fa642fccdda0e4643a2ff4afdaedb4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:35:53 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_sesssetup_blob_send()
    
    metze

commit afda15aa868856a727d860d04b7c7c1277484fe1
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:34:33 2011 +0200

    s3:libsmb: make use of cli_state_available_size() in cli_trans_format()
    
    metze

commit 2a5f8daa3e2563166413af75e53c8c2b90d22d8c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 11:23:49 2011 +0200

    s3:libsmb: add cli_state_available_size()
    
    metze

commit 58482494fd58cd364ee80ce77fe75b7deccb26b4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 13 08:44:17 2011 +0200

    s3:clitar: remove unused/not existing extern variables
    
    metze

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

Summary of changes:
 source3/client/clitar.c       |    3 ---
 source3/libsmb/cliconnect.c   |   14 ++++++++------
 source3/libsmb/clientgen.c    |   13 +++++++++++++
 source3/libsmb/clilist.c      |    4 +++-
 source3/libsmb/clireadwrite.c |    7 ++++---
 source3/libsmb/clitrans.c     |    9 +++++----
 source3/libsmb/proto.h        |    1 +
 source3/torture/torture.c     |    2 +-
 8 files changed, 35 insertions(+), 18 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/client/clitar.c b/source3/client/clitar.c
index cc642c3..5943926 100644
--- a/source3/client/clitar.c
+++ b/source3/client/clitar.c
@@ -105,9 +105,6 @@ static bool must_free_cliplist = False;
 extern char *cmd_ptr;
 
 extern bool lowercase;
-extern uint16 cnum;
-extern bool readbraw_supported;
-extern int max_xmit;
 extern int get_total_time_ms;
 extern int get_total_size;
 
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index e0d2419..f47336b 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -1198,6 +1198,7 @@ static struct tevent_req *cli_sesssetup_blob_send(TALLOC_CTX *mem_ctx,
 {
 	struct tevent_req *req, *subreq;
 	struct cli_sesssetup_blob_state *state;
+	uint32_t usable_space;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct cli_sesssetup_blob_state);
@@ -1208,16 +1209,17 @@ static struct tevent_req *cli_sesssetup_blob_send(TALLOC_CTX *mem_ctx,
 	state->blob = blob;
 	state->cli = cli;
 
-	if (cli->max_xmit < BASE_SESSSETUP_BLOB_PACKET_SIZE + 1) {
+	usable_space = cli_state_available_size(cli,
+				BASE_SESSSETUP_BLOB_PACKET_SIZE);
+
+	if (usable_space == 0) {
 		DEBUG(1, ("cli_session_setup_blob: cli->max_xmit too small "
-			  "(was %u, need minimum %u)\n",
-			  (unsigned int)cli->max_xmit,
-			  BASE_SESSSETUP_BLOB_PACKET_SIZE));
+			  "(not possible to send %u bytes)\n",
+			  BASE_SESSSETUP_BLOB_PACKET_SIZE + 1));
 		tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
 		return tevent_req_post(req, ev);
 	}
-	state->max_blob_size =
-		MIN(cli->max_xmit - BASE_SESSSETUP_BLOB_PACKET_SIZE, 0xFFFF);
+	state->max_blob_size = MIN(usable_space, 0xFFFF);
 
 	if (!cli_sesssetup_blob_next(state, &subreq)) {
 		tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index f274dc0..21ecab8 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -501,6 +501,19 @@ uint32_t cli_state_capabilities(struct cli_state *cli)
 	return cli->capabilities;
 }
 
+uint32_t cli_state_available_size(struct cli_state *cli, uint32_t ofs)
+{
+	uint32_t ret = cli->max_xmit;
+
+	if (ofs >= ret) {
+		return 0;
+	}
+
+	ret -= ofs;
+
+	return ret;
+}
+
 struct cli_echo_state {
 	uint16_t vwv[1];
 	DATA_BLOB data;
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index ac10795..521afc9 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -298,6 +298,7 @@ static struct tevent_req *cli_list_old_send(TALLOC_CTX *mem_ctx,
 	struct cli_list_old_state *state;
 	uint8_t *bytes;
 	static const uint16_t zero = 0;
+	uint32_t usable_space;
 
 	req = tevent_req_create(mem_ctx, &state, struct cli_list_old_state);
 	if (req == NULL) {
@@ -311,7 +312,8 @@ static struct tevent_req *cli_list_old_send(TALLOC_CTX *mem_ctx,
 	if (tevent_req_nomem(state->mask, req)) {
 		return tevent_req_post(req, ev);
 	}
-	state->num_asked = (cli->max_xmit - 100) / DIR_STRUCT_SIZE;
+	usable_space = cli_state_available_size(cli, 100);
+	state->num_asked = usable_space / DIR_STRUCT_SIZE;
 
 	SSVAL(state->vwv + 0, 0, state->num_asked);
 	SSVAL(state->vwv + 1, 0, state->attribute);
diff --git a/source3/libsmb/clireadwrite.c b/source3/libsmb/clireadwrite.c
index 2fe41b4..a6f79fb 100644
--- a/source3/libsmb/clireadwrite.c
+++ b/source3/libsmb/clireadwrite.c
@@ -46,7 +46,7 @@ static size_t cli_read_max_bufsize(struct cli_state *cli)
 	data_offset += wct * sizeof(uint16_t);
 	data_offset += 1; /* pad */
 
-	useable_space = cli->max_xmit - data_offset;
+	useable_space = cli_state_available_size(cli, data_offset);
 
 	return useable_space;
 }
@@ -81,7 +81,7 @@ static size_t cli_write_max_bufsize(struct cli_state *cli,
 		data_offset += wct * sizeof(uint16_t);
 		data_offset += 1; /* pad */
 
-		useable_space = cli->max_xmit - data_offset;
+		useable_space = cli_state_available_size(cli, data_offset);
 
 		return useable_space;
 	}
@@ -732,7 +732,8 @@ NTSTATUS cli_smbwrite(struct cli_state *cli, uint16_t fnum, char *buf,
 	bytes[0] = 1;
 
 	do {
-		size_t size = MIN(size1, cli->max_xmit - 48);
+		uint32_t usable_space = cli_state_available_size(cli, 48);
+		size_t size = MIN(size1, usable_space);
 		struct tevent_req *req;
 		uint16_t vwv[5];
 		uint16_t *ret_vwv;
diff --git a/source3/libsmb/clitrans.c b/source3/libsmb/clitrans.c
index dd8063b..91157b6 100644
--- a/source3/libsmb/clitrans.c
+++ b/source3/libsmb/clitrans.c
@@ -184,6 +184,7 @@ static NTSTATUS cli_trans_pull_blob(TALLOC_CTX *mem_ctx,
 static void cli_trans_format(struct cli_trans_state *state, uint8_t *pwct,
 			     int *piov_count)
 {
+	struct cli_state *cli = state->cli;
 	uint8_t wct = 0;
 	struct iovec *iov = state->iov;
 	uint8_t *pad = state->pad;
@@ -242,7 +243,7 @@ static void cli_trans_format(struct cli_trans_state *state, uint8_t *pwct,
 	}
 
 	param_offset += wct * sizeof(uint16_t);
-	useable_space = state->cli->max_xmit - param_offset;
+	useable_space = cli_state_available_size(cli, param_offset);
 
 	param_pad = param_offset % 4;
 	if (param_pad > 0) {
@@ -252,7 +253,7 @@ static void cli_trans_format(struct cli_trans_state *state, uint8_t *pwct,
 		iov += 1;
 		param_offset += param_pad;
 	}
-	useable_space = state->cli->max_xmit - param_offset;
+	useable_space = cli_state_available_size(cli, param_offset);
 
 	if (state->param_sent < state->num_param) {
 		this_param = MIN(state->num_param - state->param_sent,
@@ -263,7 +264,7 @@ static void cli_trans_format(struct cli_trans_state *state, uint8_t *pwct,
 	}
 
 	data_offset = param_offset + this_param;
-	useable_space = state->cli->max_xmit - data_offset;
+	useable_space = cli_state_available_size(cli, data_offset);
 
 	data_pad = data_offset % 4;
 	if (data_pad > 0) {
@@ -273,7 +274,7 @@ static void cli_trans_format(struct cli_trans_state *state, uint8_t *pwct,
 		iov += 1;
 		data_offset += data_pad;
 	}
-	useable_space = state->cli->max_xmit - data_offset;
+	useable_space = cli_state_available_size(cli, data_offset);
 
 	if (state->data_sent < state->num_data) {
 		this_data = MIN(state->num_data - state->data_sent,
diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h
index 83da457..c618fda 100644
--- a/source3/libsmb/proto.h
+++ b/source3/libsmb/proto.h
@@ -180,6 +180,7 @@ uint16_t cli_state_set_uid(struct cli_state *cli, uint16_t uid);
 bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive);
 enum protocol_types cli_state_protocol(struct cli_state *cli);
 uint32_t cli_state_capabilities(struct cli_state *cli);
+uint32_t cli_state_available_size(struct cli_state *cli, uint32_t ofs);
 struct tevent_req *cli_echo_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
 				 struct cli_state *cli, uint16_t num_echos,
 				 DATA_BLOB data);
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 0cba5c7..d791684 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -3436,7 +3436,7 @@ static NTSTATUS new_trans(struct cli_state *pcli, int fnum, int level)
 	NTSTATUS status;
 
 	status = cli_qfileinfo(talloc_tos(), pcli, fnum, level, 0,
-			       pcli->max_xmit, NULL, &buf, &len);
+			       CLI_BUFFER_SIZE, NULL, &buf, &len);
 	if (!NT_STATUS_IS_OK(status)) {
 		printf("ERROR: qfileinfo (%d) failed (%s)\n", level,
 		       nt_errstr(status));


-- 
Samba Shared Repository


More information about the samba-cvs mailing list