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 <[email protected]>
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 <[email protected]>
    Autobuild-Date: Tue Sep 13 14:52:35 CEST 2011 on sn-devel-104

commit a4548efe675881ce745368f1e8dc7649a2bba8e2
Author: Stefan Metzmacher <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Date:   Tue Sep 13 11:23:49 2011 +0200

    s3:libsmb: add cli_state_available_size()
    
    metze

commit 58482494fd58cd364ee80ce77fe75b7deccb26b4
Author: Stefan Metzmacher <[email protected]>
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

Reply via email to