The branch, master has been updated
       via  6db705d libcli: remove duplicate of #define NT_STATUS_NO_SUCH_JOB
       via  80c6541 s3-client: Remove use of cli_errstr()
       via  1142675 s3-libsmb: Remove use of cli_errstr()
       via  98e0f9d s3-torture: run_shortname_test: Remove uses of cli_errstr()
       via  684095b s3-torture: run_simple_posix_open_test: Remove uses of 
cli_errstr()
       via  840a1c7 s3-torture: use nt_errstr() for cli_unlink() error handling
       via  60873a9 s3-torture: introduce check_both_error()
       via  3cdf962 s3:libsmb: finally remove unused cli_state->outbuf
       via  0f00675 s3:libsmb: remove unused clistr_push_fn()
       via  30574a7 s3:libsmb: remove unused clistr_pull_fn()
       via  fc992e7 s3:torture/scanner: use trans2_bytes_push_str() in 
scan_nttrans()
       via  02171ee s3:torture/scanner: use trans2_bytes_push_str() in 
scan_trans2()
       via  072a27f s3:libsmb: use trans2_bytes_push_str() in 
cli_tcon_andx_create() for the plaintext password
       via  5b1ac1b s3:libsmb: use trans2_bytes_push_str() in cli_set_ea_path()
       via  cea9245 s3:libsmb: use trans2_bytes_push_str() in 
cli_dfs_get_referral()
       via  2453164 s3:libsmb: use a talloc_stackframe in cli_dfs_get_referral()
       via  b77becd s3:libsmb: use trans2_bytes_push_str/bytes() in 
cli_list_trans_*()
       via  d921200 s3:libsmb: use clistr_pull_talloc() for short_name in 
interpret_long_filename()
       via  af66c64 s3:libsmb: interpret_long_filename() short_name is always 
UNICODE
       via  eaeeb5c s3:libsmb: add trans2_bytes_push_bytes()
       via  ed99cad s3:libsmb: make trans2_bytes_push_str() non-static
       via  9a350ca s3:utils: avoid cli_nt_error()/cli_errstr() if we already 
have the status
      from  e595590 s3-printing: remove tdb migration invalid printer name 
checks

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


- Log -----------------------------------------------------------------
commit 6db705d6fcc5b58b205afed2a9140716c6323fae
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 17:43:46 2011 +0200

    libcli: remove duplicate of #define NT_STATUS_NO_SUCH_JOB
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>
    
    Autobuild-User: Stefan Metzmacher <me...@samba.org>
    Autobuild-Date: Thu Jul  7 20:29:13 CEST 2011 on sn-devel-104

commit 80c65416c17169e487ce17314bdc9975679ec331
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 17:36:22 2011 +0200

    s3-client: Remove use of cli_errstr()
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 11426758d71e59ffe9804d2ebb2f145b4ed398e1
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 17:18:40 2011 +0200

    s3-libsmb: Remove use of cli_errstr()
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 98e0f9d1edb77f07f2f733478e91d0410c020b2e
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 16:56:05 2011 +0200

    s3-torture: run_shortname_test: Remove uses of cli_errstr()
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 684095b0a2e24869b684cc12b92ed7847caf0021
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 16:49:12 2011 +0200

    s3-torture: run_simple_posix_open_test: Remove uses of cli_errstr()
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 840a1c7445377c24bfff04ffa619ea6b4aa83029
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 17:56:19 2011 +0200

    s3-torture: use nt_errstr() for cli_unlink() error handling
    
    Use nt_errstr() instead of cli_errstr() for error handling on
    cli_unlink() calls.
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 60873a9e48115e5bfb3c58cccd078c49d43c56bc
Author: Björn Baumbach <b...@sernet.de>
Date:   Thu Jul 7 16:27:39 2011 +0200

    s3-torture: introduce check_both_error()
    
    Check if the server produced the expected dos or nt error code like
    check_error(), but without a cli_state struct.
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>

commit 3cdf962d1ea2823e2a5200533685b3a627a00237
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 18:16:56 2011 +0200

    s3:libsmb: finally remove unused cli_state->outbuf
    
    metze

commit 0f006751ec22a13de898fbafcb6de5a8b8d5ec15
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 17:24:32 2011 +0200

    s3:libsmb: remove unused clistr_push_fn()
    
    metze

commit 30574a73d8073e1bb0a552fdf8444f17eeebec74
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Jul 6 17:57:45 2011 +0200

    s3:libsmb: remove unused clistr_pull_fn()
    
    metze

commit fc992e7029a8cec00b91b50e79f90dea09efcab2
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 15:38:02 2011 +0200

    s3:torture/scanner: use trans2_bytes_push_str() in scan_nttrans()
    
    metze

commit 02171ee0f06c2558adee82e929e8926123e0a13c
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 15:38:02 2011 +0200

    s3:torture/scanner: use trans2_bytes_push_str() in scan_trans2()
    
    metze

commit 072a27fd9f0d6a34eb33543e14a708ff0567d0d1
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 10:55:00 2011 +0200

    s3:libsmb: use trans2_bytes_push_str() in cli_tcon_andx_create() for the 
plaintext password
    
    This makes sure we push the string always in DOS charset.
    
    metze

commit 5b1ac1bcc3d0bd0af4d5b745e0e2e834aae34e54
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 10:16:38 2011 +0200

    s3:libsmb: use trans2_bytes_push_str() in cli_set_ea_path()
    
    metze

commit cea924590916c3c69245af56a2bb18743d299cbb
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Jul 6 18:36:29 2011 +0200

    s3:libsmb: use trans2_bytes_push_str() in cli_dfs_get_referral()
    
    metze

commit 2453164317e350fd398858a84b6ef5e030faab1b
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 08:58:25 2011 +0200

    s3:libsmb: use a talloc_stackframe in cli_dfs_get_referral()
    
    metze

commit b77becdb55da195da6932a289b8cdc7d2e1dd4dc
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Jul 6 18:24:50 2011 +0200

    s3:libsmb: use trans2_bytes_push_str/bytes() in cli_list_trans_*()
    
    metze

commit d921200e75e90fbda2cf7ba7950ae71e09c50468
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Jul 6 18:57:27 2011 +0200

    s3:libsmb: use clistr_pull_talloc() for short_name in 
interpret_long_filename()
    
    metze

commit af66c64e95183647bce39754089c591cbbdfbc50
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 14:46:40 2011 +0200

    s3:libsmb: interpret_long_filename() short_name is always UNICODE
    
    metze

commit eaeeb5ce0e7282cf0d4db3dd9f39848b0afcb1fa
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 10:02:36 2011 +0200

    s3:libsmb: add trans2_bytes_push_bytes()
    
    metze

commit ed99caded241925dbd8beee5bb57ba2d4a3b1c5e
Author: Stefan Metzmacher <me...@samba.org>
Date:   Wed Jul 6 18:23:52 2011 +0200

    s3:libsmb: make trans2_bytes_push_str() non-static
    
    We should use this and get rid of clistr_push().
    
    metze

commit 9a350ca3b6ddcebff67bad87210adf1be5f5a725
Author: Stefan Metzmacher <me...@samba.org>
Date:   Thu Jul 7 15:33:43 2011 +0200

    s3:utils: avoid cli_nt_error()/cli_errstr() if we already have the status
    
    metze

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

Summary of changes:
 lib/util/string_wrappers.h     |   12 ----
 libcli/util/ntstatus.h         |    1 -
 source3/client/client.c        |    4 +-
 source3/include/client.h       |    3 +-
 source3/libsmb/cliconnect.c    |   29 ++++-----
 source3/libsmb/clidfs.c        |   21 ++++---
 source3/libsmb/clientgen.c     |    6 +--
 source3/libsmb/clifile.c       |   42 +++++++++---
 source3/libsmb/clilist.c       |   69 ++++++++++++---------
 source3/libsmb/clistr.c        |   38 ------------
 source3/libsmb/libsmb_server.c |   11 +++-
 source3/libsmb/proto.h         |   16 ++---
 source3/torture/masktest.c     |    3 +-
 source3/torture/scanner.c      |  132 +++++++++++++++++++++++++++++++---------
 source3/torture/torture.c      |  100 ++++++++++++++++++++++--------
 source3/utils/net_rpc.c        |    4 +-
 16 files changed, 292 insertions(+), 199 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/string_wrappers.h b/lib/util/string_wrappers.h
index 6f2d6e9..c39ff1f 100644
--- a/lib/util/string_wrappers.h
+++ b/lib/util/string_wrappers.h
@@ -73,16 +73,6 @@ size_t __unsafe_string_function_usage_here_size_t__(void);
     ? __unsafe_string_function_usage_here_size_t__() \
     : push_string_check_fn(dest, src, dest_len, flags))
 
-#define clistr_push(cli, dest, src, dest_len, flags) \
-    (CHECK_STRING_SIZE(dest, dest_len) \
-    ? __unsafe_string_function_usage_here_size_t__() \
-    : clistr_push_fn(cli, dest, src, dest_len, flags))
-
-#define clistr_pull(inbuf, dest, src, dest_len, srclen, flags) \
-    (CHECK_STRING_SIZE(dest, dest_len) \
-    ? __unsafe_string_function_usage_here_size_t__() \
-    : clistr_pull_fn(inbuf, dest, src, dest_len, srclen, flags))
-
 #define srvstr_push(base_ptr, smb_flags2, dest, src, dest_len, flags) \
     (CHECK_STRING_SIZE(dest, dest_len) \
     ? __unsafe_string_function_usage_here_size_t__() \
@@ -102,8 +92,6 @@ size_t __unsafe_string_function_usage_here_size_t__(void);
 #else
 
 #define push_string_check push_string_check_fn
-#define clistr_push clistr_push_fn
-#define clistr_pull clistr_pull_fn
 #define srvstr_push srvstr_push_fn
 #define checked_strlcpy strlcpy
 
diff --git a/libcli/util/ntstatus.h b/libcli/util/ntstatus.h
index 2018b40..1381bea 100644
--- a/libcli/util/ntstatus.h
+++ b/libcli/util/ntstatus.h
@@ -606,7 +606,6 @@ typedef uint32_t NTSTATUS;
 #define NT_STATUS_DOWNGRADE_DETECTED NT_STATUS(0xC0000000 | 0x0388)
 #define NT_STATUS_NO_S4U_PROT_SUPPORT NT_STATUS(0xC0000000 | 0x040A)
 #define NT_STATUS_CROSSREALM_DELEGATION_FAILURE NT_STATUS(0xC0000000 | 0x040B)
-#define NT_STATUS_NO_SUCH_JOB NT_STATUS(0xC0000000 | 0xEDE) /* scheduler */
 #define NT_STATUS_RPC_PROTSEQ_NOT_SUPPORTED NT_STATUS(0xC0000000 | 0x20004)
 #define NT_STATUS_RPC_UNSUPPORTED_NAME_SYNTAX NT_STATUS(0xC0000000 | 0x20026)
 #define NT_STATUS_RPC_UNKNOWN_IF NT_STATUS(0xC0000000 | 0x20012)
diff --git a/source3/client/client.c b/source3/client/client.c
index aa26d99..82dc8c4 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -917,8 +917,8 @@ NTSTATUS do_list(const char *mask,
                        }
                        TALLOC_FREE(targetpath);
                } else {
-                       d_printf("do_list: [%s] %s\n", mask, cli_errstr(cli));
-                       ret_status = cli_nt_error(cli);
+                       d_printf("do_list: [%s] %s\n", mask, nt_errstr(status));
+                       ret_status = status;
                }
        }
 
diff --git a/source3/include/client.h b/source3/include/client.h
index a853e90..6486c76 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -95,7 +95,6 @@ struct cli_state {
        int timeout; /* in milliseconds. */
        size_t max_xmit;
        size_t max_mux;
-       char *outbuf;
        char *inbuf;
        unsigned int bufsize;
        int initialised;
@@ -152,7 +151,7 @@ struct file_info {
        struct timespec atime_ts;
        struct timespec ctime_ts;
        char *name;
-       char short_name[13*3]; /* the *3 is to cope with multi-byte */
+       char *short_name;
 };
 
 #define CLI_FULL_CONNECTION_DONT_SPNEGO 0x0001
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 62e3a35..8c74d2e 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -2231,7 +2231,7 @@ struct tevent_req *cli_tcon_andx_create(TALLOC_CTX 
*mem_ctx,
                if((cli->sec_mode & (NEGOTIATE_SECURITY_USER_LEVEL
                                     |NEGOTIATE_SECURITY_CHALLENGE_RESPONSE))
                   == 0) {
-                       char *tmp_pass;
+                       uint8_t *tmp_pass;
 
                        if (!lp_client_plaintext_auth() && (*pass)) {
                                DEBUG(1, ("Server requested plaintext "
@@ -2244,21 +2244,20 @@ struct tevent_req *cli_tcon_andx_create(TALLOC_CTX 
*mem_ctx,
                         * Non-encrypted passwords - convert to DOS codepage
                         * before using.
                         */
-                       tmp_pass = talloc_array(talloc_tos(), char, 128);
-                       if (tmp_pass == NULL) {
-                               tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+                       tmp_pass = talloc_array(talloc_tos(), uint8, 0);
+                       if (tevent_req_nomem(tmp_pass, req)) {
                                return tevent_req_post(req, ev);
                        }
-                       passlen = clistr_push(cli,
-                                       tmp_pass,
-                                       pass,
-                                       talloc_get_size(tmp_pass),
-                                       STR_TERMINATE);
-                       if (passlen == -1) {
-                               tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+                       tmp_pass = trans2_bytes_push_str(tmp_pass,
+                                                        false, /* always DOS */
+                                                        pass,
+                                                        passlen,
+                                                        NULL);
+                       if (tevent_req_nomem(tmp_pass, req)) {
                                return tevent_req_post(req, ev);
                        }
-                       pass = tmp_pass;
+                       pass = (const char *)tmp_pass;
+                       passlen = talloc_get_size(tmp_pass);
                }
        }
 
@@ -2701,13 +2700,9 @@ static void cli_negprot_done(struct tevent_req *subreq)
                }
 
                if (cli->capabilities & (CAP_LARGE_READX|CAP_LARGE_WRITEX)) {
-                       SAFE_FREE(cli->outbuf);
                        SAFE_FREE(cli->inbuf);
-                       cli->outbuf = (char 
*)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+LARGE_WRITEX_HDR_SIZE+SAFETY_MARGIN);
                        cli->inbuf = (char 
*)SMB_MALLOC(CLI_SAMBA_MAX_LARGE_READX_SIZE+LARGE_WRITEX_HDR_SIZE+SAFETY_MARGIN);
-                       if (!cli->outbuf || !cli->inbuf) {
-                               tevent_req_nterror(req,
-                                               NT_STATUS_NO_MEMORY);
+                       if (tevent_req_nomem(cli->inbuf, req)) {
                                return;
                        }
                        cli->bufsize = CLI_SAMBA_MAX_LARGE_READX_SIZE + 
LARGE_WRITEX_HDR_SIZE;
diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c
index 2287812..a0d503a 100644
--- a/source3/libsmb/clidfs.c
+++ b/source3/libsmb/clidfs.c
@@ -614,30 +614,35 @@ NTSTATUS cli_dfs_get_referral(TALLOC_CTX *ctx,
        uint8_t *rdata = NULL;
        char *p;
        char *endp;
-       size_t pathlen = 2*(strlen(path)+1);
        smb_ucs2_t *path_ucs;
        char *consumed_path = NULL;
        uint16_t consumed_ucs;
        uint16 num_referrals;
        struct client_dfs_referral *referrals = NULL;
        NTSTATUS status;
+       TALLOC_CTX *frame = talloc_stackframe();
 
        *num_refs = 0;
        *refs = NULL;
 
        SSVAL(setup, 0, TRANSACT2_GET_DFS_REFERRAL);
 
-       param = SMB_MALLOC_ARRAY(uint8_t, 2+pathlen+2);
+       param = talloc_array(talloc_tos(), uint8_t, 2);
        if (!param) {
                status = NT_STATUS_NO_MEMORY;
                goto out;
        }
        SSVAL(param, 0, 0x03);  /* max referral level */
-       p = (char *)(&param[2]);
 
-       path_ucs = (smb_ucs2_t *)p;
-       p += clistr_push(cli, p, path, pathlen, STR_TERMINATE);
-       param_len = PTR_DIFF(p, param);
+       param = trans2_bytes_push_str(param, cli_ucs2(cli),
+                                     path, strlen(path)+1,
+                                     NULL);
+       if (!param) {
+               status = NT_STATUS_NO_MEMORY;
+               goto out;
+       }
+       param_len = talloc_get_size(param);
+       path_ucs = (smb_ucs2_t *)&param[2];
 
        status = cli_trans(talloc_tos(), cli, SMBtrans2,
                           NULL, 0xffff, 0, 0,
@@ -746,9 +751,7 @@ NTSTATUS cli_dfs_get_referral(TALLOC_CTX *ctx,
 
   out:
 
-       TALLOC_FREE(consumed_path);
-       SAFE_FREE(param);
-       TALLOC_FREE(rdata);
+       TALLOC_FREE(frame);
        return status;
 }
 
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index d3b66b6..91e7fd4 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -201,7 +201,6 @@ struct cli_state *cli_initialise_ex(int signing_state)
        cli->timeout = 20000; /* Timeout is in milliseconds. */
        cli->bufsize = CLI_BUFFER_SIZE+4;
        cli->max_xmit = cli->bufsize;
-       cli->outbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);
        cli->inbuf = (char *)SMB_MALLOC(cli->bufsize+SAFETY_MARGIN);
        cli->oplock_handler = cli_oplock_ack;
        cli->case_sensitive = false;
@@ -238,10 +237,9 @@ struct cli_state *cli_initialise_ex(int signing_state)
                mandatory_signing = true;
        }
 
-       if (!cli->outbuf || !cli->inbuf)
+       if (!cli->inbuf)
                 goto error;
 
-       memset(cli->outbuf, 0, cli->bufsize);
        memset(cli->inbuf, 0, cli->bufsize);
 
        /* initialise signing */
@@ -267,7 +265,6 @@ struct cli_state *cli_initialise_ex(int signing_state)
  error:
 
         SAFE_FREE(cli->inbuf);
-        SAFE_FREE(cli->outbuf);
        TALLOC_FREE(cli);
         return NULL;
 }
@@ -315,7 +312,6 @@ static void _cli_shutdown(struct cli_state *cli)
                cli_tdis(cli);
        }
         
-       SAFE_FREE(cli->outbuf);
        SAFE_FREE(cli->inbuf);
 
        data_blob_free(&cli->secblob);
diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c
index eab278f..24a099b 100644
--- a/source3/libsmb/clifile.c
+++ b/source3/libsmb/clifile.c
@@ -128,14 +128,33 @@ uint8_t *smb_bytes_push_bytes(uint8_t *buf, uint8_t 
prefix,
  other modules use async trans calls.
 ***********************************************************/
 
-static uint8_t *trans2_bytes_push_str(uint8_t *buf, bool ucs2,
-                           const char *str, size_t str_len,
-                           size_t *pconverted_size)
+uint8_t *trans2_bytes_push_str(uint8_t *buf, bool ucs2,
+                              const char *str, size_t str_len,
+                              size_t *pconverted_size)
 {
        return internal_bytes_push_str(buf, ucs2, str, str_len,
                        false, pconverted_size);
 }
 
+uint8_t *trans2_bytes_push_bytes(uint8_t *buf,
+                                const uint8_t *bytes, size_t num_bytes)
+{
+       size_t buflen;
+
+       if (buf == NULL) {
+               return NULL;
+       }
+       buflen = talloc_get_size(buf);
+
+       buf = talloc_realloc(NULL, buf, uint8_t,
+                            buflen + num_bytes);
+       if (buf == NULL) {
+               return NULL;
+       }
+       memcpy(&buf[buflen], bytes, num_bytes);
+       return buf;
+}
+
 struct cli_setpathinfo_state {
        uint16_t setup;
        uint8_t *param;
@@ -4082,24 +4101,25 @@ NTSTATUS cli_set_ea_path(struct cli_state *cli, const 
char *path,
 {
        unsigned int param_len = 0;
        uint8_t *param;
-       size_t srclen = 2*(strlen(path)+1);
-       char *p;
        NTSTATUS status;
+       TALLOC_CTX *frame = talloc_stackframe();
 
-       param = SMB_MALLOC_ARRAY(uint8_t, 6+srclen+2);
+       param = talloc_array(talloc_tos(), uint8_t, 6);
        if (!param) {
                return NT_STATUS_NO_MEMORY;
        }
-       memset(param, '\0', 6);
        SSVAL(param,0,SMB_INFO_SET_EA);
-       p = (char *)(&param[6]);
+       SSVAL(param,2,0);
+       SSVAL(param,4,0);
 
-       p += clistr_push(cli, p, path, srclen, STR_TERMINATE);
-       param_len = PTR_DIFF(p, param);
+       param = trans2_bytes_push_str(param, cli_ucs2(cli),
+                                     path, strlen(path)+1,
+                                     NULL);
+       param_len = talloc_get_size(param);
 
        status = cli_set_ea(cli, TRANSACT2_SETPATHINFO, param, param_len,
                            ea_name, ea_val, ea_len);
-       SAFE_FREE(param);
+       SAFE_FREE(frame);
        return status;
 }
 
diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c
index 9eec97f..2c8a328 100644
--- a/source3/libsmb/clilist.c
+++ b/source3/libsmb/clilist.c
@@ -189,13 +189,15 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx,
                                return pdata_end - base;
                        }
                        p += 2;
-                       {
-                               /* stupid NT bugs. grr */
-                               int flags = 0;
-                               if (p[1] == 0 && namelen > 1) flags |= 
STR_UNICODE;
-                               clistr_pull(base_ptr, finfo->short_name, p,
-                                           sizeof(finfo->short_name),
-                                           slen, flags);
+                       ret = clistr_pull_talloc(ctx,
+                                               base_ptr,
+                                               recv_flags2,
+                                               &finfo->short_name,
+                                               p,
+                                               slen,
+                                               STR_UNICODE);
+                       if (ret == (size_t)-1) {
+                               return pdata_end - base;
                        }
                        p += 24; /* short name? */
                        if (p + namelen < p || p + namelen > pdata_end) {
@@ -263,9 +265,10 @@ static bool interpret_short_filename(TALLOC_CTX *ctx,
        }
 
        if (finfo->name) {
-               strlcpy(finfo->short_name,
-                       finfo->name,
-                       sizeof(finfo->short_name));
+               finfo->short_name = talloc_strdup(ctx, finfo->name);
+               if (finfo->short_name == NULL) {
+                       return false;
+               }
        }
        return true;
 }
@@ -549,8 +552,7 @@ static struct tevent_req *cli_list_trans_send(TALLOC_CTX 
*mem_ctx,
 {
        struct tevent_req *req, *subreq;
        struct cli_list_trans_state *state;
-       size_t nlen, param_len;
-       char *p;
+       size_t param_len;
 
        req = tevent_req_create(mem_ctx, &state,
                                struct cli_list_trans_state);
@@ -572,8 +574,7 @@ static struct tevent_req *cli_list_trans_send(TALLOC_CTX 
*mem_ctx,
 
        state->setup[0] = TRANSACT2_FINDFIRST;
 
-       nlen = 2*(strlen(mask)+1);
-       state->param = talloc_array(state, uint8_t, 12+nlen+2);
+       state->param = talloc_array(state, uint8_t, 12);
        if (tevent_req_nomem(state->param, req)) {
                return tevent_req_post(req, ev);
        }
@@ -586,10 +587,13 @@ static struct tevent_req *cli_list_trans_send(TALLOC_CTX 
*mem_ctx,
        SSVAL(state->param, 6, state->info_level);
        SIVAL(state->param, 8, 0);
 
-       p = ((char *)state->param)+12;
-       p += clistr_push(state->cli, p, state->mask, nlen,
-                        STR_TERMINATE);
-       param_len = PTR_DIFF(p, state->param);
+       state->param = trans2_bytes_push_str(state->param, cli_ucs2(cli),
+                                            state->mask, strlen(state->mask)+1,
+                                            NULL);
+       if (tevent_req_nomem(state->param, req)) {
+               return tevent_req_post(req, ev);
+       }
+       param_len = talloc_get_size(state->param);
 
        subreq = cli_trans_send(state, state->ev, state->cli,
                                SMBtrans2, NULL, -1, 0, 0,
@@ -626,7 +630,7 @@ static void cli_list_trans_done(struct tevent_req *subreq)
        int i;
        DATA_BLOB last_name_raw;
        struct file_info *finfo = NULL;
-       size_t nlen, param_len;
+       size_t param_len;
 
        min_param = (state->first ? 6 : 4);
 
@@ -734,10 +738,7 @@ static void cli_list_trans_done(struct tevent_req *subreq)
 
        state->setup[0] = TRANSACT2_FINDNEXT;
 
-       nlen = 2*(strlen(state->mask) + 1);
-
-       param = talloc_realloc(state, state->param, uint8_t,
-                                    12 + nlen + last_name_raw.length + 2);
+       param = talloc_realloc(state, state->param, uint8_t, 12);
        if (tevent_req_nomem(param, req)) {
                return;
        }
@@ -758,17 +759,25 @@ static void cli_list_trans_done(struct tevent_req *subreq)
         */
        SSVAL(param, 10, (FLAG_TRANS2_FIND_REQUIRE_RESUME
                          |FLAG_TRANS2_FIND_CLOSE_IF_END));
-       p = ((char *)param)+12;
        if (last_name_raw.length) {
-               memcpy(p, last_name_raw.data, last_name_raw.length);
-               p += last_name_raw.length;
+               state->param = trans2_bytes_push_bytes(state->param,
+                                                      last_name_raw.data,
+                                                      last_name_raw.length);
+               if (tevent_req_nomem(state->param, req)) {
+                       return;
+               }
                data_blob_free(&last_name_raw);
        } else {
-               p += clistr_push(state->cli, p, state->mask, nlen,
-                                STR_TERMINATE);
+               state->param = trans2_bytes_push_str(state->param,
+                                                    cli_ucs2(state->cli),
+                                                    state->mask,
+                                                    strlen(state->mask)+1,
+                                                    NULL);
+               if (tevent_req_nomem(state->param, req)) {
+                       return;
+               }
        }
-
-       param_len = PTR_DIFF(p, param);
+       param_len = talloc_get_size(state->param);
 
        subreq = cli_trans_send(state, state->ev, state->cli,
                                SMBtrans2, NULL, -1, 0, 0,
diff --git a/source3/libsmb/clistr.c b/source3/libsmb/clistr.c
index ff18ef6..f1264f6 100644
--- a/source3/libsmb/clistr.c
+++ b/source3/libsmb/clistr.c
@@ -21,44 +21,6 @@
 #include "includes.h"
 #include "libsmb/libsmb.h"
 
-size_t clistr_push_fn(struct cli_state *cli,
-                       void *dest,
-                       const char *src,
-                       int dest_len,
-                       int flags)
-{
-       size_t buf_used = PTR_DIFF(dest, cli->outbuf);
-       if (dest_len == -1) {
-               if (((ptrdiff_t)dest < (ptrdiff_t)cli->outbuf) || (buf_used > 
cli->bufsize)) {
-                       DEBUG(0, ("Pushing string of 'unlimited' length into 
non-SMB buffer!\n"));
-                       return push_string_base(cli->outbuf,
-                                               (uint16_t)(cli_ucs2(cli) ? 
FLAGS2_UNICODE_STRINGS : 0),
-                                               dest, src, -1, flags);
-               }
-               return push_string_base(cli->outbuf,
-                                       (uint16_t)(cli_ucs2(cli) ? 
FLAGS2_UNICODE_STRINGS : 0),
-                                       dest, src, cli->bufsize - buf_used,
-                                       flags);
-       }
-
-       /* 'normal' push into size-specified buffer */
-       return push_string_base(cli->outbuf,
-                               (uint16_t)(cli_ucs2(cli) ? 
FLAGS2_UNICODE_STRINGS : 0),
-                               dest, src, dest_len, flags);
-}
-
-size_t clistr_pull_fn(const char *inbuf,
-                       char *dest,
-                       const void *src,
-                       int dest_len,
-                       int src_len,
-                       int flags)
-{
-       return pull_string_fn(inbuf,
-                             SVAL(inbuf, smb_flg2), dest, src, dest_len,
-                             src_len, flags);
-}
-
 size_t clistr_pull_talloc(TALLOC_CTX *ctx,
                          const char *base,
                          uint16_t flags2,
diff --git a/source3/libsmb/libsmb_server.c b/source3/libsmb/libsmb_server.c
index 755ef2d..d83d8ff 100644
--- a/source3/libsmb/libsmb_server.c
+++ b/source3/libsmb/libsmb_server.c
@@ -329,10 +329,15 @@ SMBC_server_internal(TALLOC_CTX *ctx,
                         if (is_ipc) {
                                 DEBUG(4,
                                       ("IPC$ so ignore case sensitivity\n"));


-- 
Samba Shared Repository

Reply via email to