[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Thu Jul 7 12:30:03 MDT 2011
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 <bb at 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 <metze at samba.org>
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Thu Jul 7 20:29:13 CEST 2011 on sn-devel-104
commit 80c65416c17169e487ce17314bdc9975679ec331
Author: Björn Baumbach <bb at sernet.de>
Date: Thu Jul 7 17:36:22 2011 +0200
s3-client: Remove use of cli_errstr()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 11426758d71e59ffe9804d2ebb2f145b4ed398e1
Author: Björn Baumbach <bb at sernet.de>
Date: Thu Jul 7 17:18:40 2011 +0200
s3-libsmb: Remove use of cli_errstr()
Signed-off-by: Stefan Metzmacher <metze at samba.org>
commit 98e0f9d1edb77f07f2f733478e91d0410c020b2e
Author: Björn Baumbach <bb at 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 <metze at samba.org>
commit 684095b0a2e24869b684cc12b92ed7847caf0021
Author: Björn Baumbach <bb at 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 <metze at samba.org>
commit 840a1c7445377c24bfff04ffa619ea6b4aa83029
Author: Stefan Metzmacher <metze at 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 <metze at samba.org>
commit 60873a9e48115e5bfb3c58cccd078c49d43c56bc
Author: Björn Baumbach <bb at 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 <metze at samba.org>
commit 3cdf962d1ea2823e2a5200533685b3a627a00237
Author: Stefan Metzmacher <metze at 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 <metze at samba.org>
Date: Thu Jul 7 17:24:32 2011 +0200
s3:libsmb: remove unused clistr_push_fn()
metze
commit 30574a73d8073e1bb0a552fdf8444f17eeebec74
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Jul 6 17:57:45 2011 +0200
s3:libsmb: remove unused clistr_pull_fn()
metze
commit fc992e7029a8cec00b91b50e79f90dea09efcab2
Author: Stefan Metzmacher <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at 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 <metze at samba.org>
Date: Thu Jul 7 10:02:36 2011 +0200
s3:libsmb: add trans2_bytes_push_bytes()
metze
commit ed99caded241925dbd8beee5bb57ba2d4a3b1c5e
Author: Stefan Metzmacher <metze at 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 <metze at 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 *)(¶m[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 *)¶m[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 *)(¶m[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
More information about the samba-cvs
mailing list