diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 3 | ||||
-rw-r--r-- | source3/include/safe_string.h | 4 | ||||
-rw-r--r-- | source3/libsmb/clidfs.c | 1 | ||||
-rw-r--r-- | source3/libsmb/clifile.c | 7 | ||||
-rw-r--r-- | source3/libsmb/clilist.c | 16 | ||||
-rw-r--r-- | source3/libsmb/clistr.c | 7 |
6 files changed, 26 insertions, 12 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index dbc2d40c70..2ab1cfdf45 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -2646,7 +2646,8 @@ size_t clistr_pull_fn(const char *function, size_t clistr_pull_talloc_fn(const char *function, unsigned int line, TALLOC_CTX *ctx, - const char *inbuf, + const char *base, + uint16_t flags2, char **pp_dest, const void *src, int src_len, diff --git a/source3/include/safe_string.h b/source3/include/safe_string.h index 43e43416d8..4ed7ff2859 100644 --- a/source3/include/safe_string.h +++ b/source3/include/safe_string.h @@ -146,9 +146,9 @@ size_t __unsafe_string_function_usage_here_char__(void); clistr_pull_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \ inbuf, dest, src, dest_len, src_len, flags) -#define clistr_pull_talloc(ctx, inbuf, pp_dest, src, src_len, flags) \ +#define clistr_pull_talloc(ctx, base, flags2, pp_dest, src, src_len, flags) \ clistr_pull_talloc_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \ - ctx, inbuf, pp_dest, src, src_len, flags) + ctx, base, flags2, pp_dest, src, src_len, flags) #define srvstr_push(base_ptr, smb_flags2, dest, src, dest_len, flags) \ srvstr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \ diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c index 345d0f9212..f4b52687f8 100644 --- a/source3/libsmb/clidfs.c +++ b/source3/libsmb/clidfs.c @@ -717,6 +717,7 @@ bool cli_dfs_get_referral(TALLOC_CTX *ctx, goto out; } clistr_pull_talloc(ctx, cli->inbuf, + SVAL(cli->inbuf, smb_flg2), &referrals[i].dfspath, p+node_offset, -1, STR_TERMINATE|STR_UNICODE); diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index 2067b79c52..48af0cc56d 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -5022,8 +5022,9 @@ static void cli_notify_done(struct tevent_req *subreq) NTSTATUS status; uint8_t *params; uint32_t i, ofs, num_params; + uint16_t flags2; - status = cli_trans_recv(subreq, talloc_tos(), NULL, NULL, 0, NULL, + status = cli_trans_recv(subreq, talloc_tos(), &flags2, NULL, 0, NULL, ¶ms, 0, &num_params, NULL, 0, NULL); TALLOC_FREE(subreq); if (!NT_STATUS_IS_OK(status)) { @@ -5068,8 +5069,8 @@ static void cli_notify_done(struct tevent_req *subreq) } state->changes[i].action = IVAL(params, ofs+4); - ret = clistr_pull_talloc(params, (char *)params, &name, - params+ofs+12, len, + ret = clistr_pull_talloc(params, (char *)params, flags2, + &name, params+ofs+12, len, STR_TERMINATE|STR_UNICODE); if (ret == -1) { TALLOC_FREE(params); diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c index 56de119281..d0583f4e10 100644 --- a/source3/libsmb/clilist.c +++ b/source3/libsmb/clilist.c @@ -46,6 +46,8 @@ static size_t calc_next_entry_offset(const char *base, const char *pdata_end) static size_t interpret_long_filename(TALLOC_CTX *ctx, struct cli_state *cli, int level, + const char *base_ptr, + uint16_t recv_flags2, const char *p, const char *pdata_end, struct file_info *finfo, @@ -101,7 +103,8 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx, between win2000 and win9x for this call (tridge) */ ret = clistr_pull_talloc(ctx, - cli->inbuf, + base_ptr, + recv_flags2, &finfo->name, p, len+2, @@ -133,7 +136,8 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx, return pdata_end - base; } ret = clistr_pull_talloc(ctx, - cli->inbuf, + base_ptr, + recv_flags2, &finfo->name, p, len, @@ -194,7 +198,8 @@ static size_t interpret_long_filename(TALLOC_CTX *ctx, return pdata_end - base; } ret = clistr_pull_talloc(ctx, - cli->inbuf, + base_ptr, + recv_flags2, &finfo->name, p, namelen, @@ -408,6 +413,8 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, p2 += interpret_long_filename(frame, cli, info_level, + cli->inbuf, + SVAL(cli->inbuf, smb_flg2), p2, rdata_end, &finfo, @@ -478,6 +485,8 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute, p += interpret_long_filename(frame, cli, info_level, + cli->inbuf, + SVAL(cli->inbuf, smb_flg2), p, rdata_end, &finfo, @@ -523,6 +532,7 @@ static bool interpret_short_filename(TALLOC_CTX *ctx, finfo->size = IVAL(p,26); ret = clistr_pull_talloc(ctx, cli->inbuf, + SVAL(cli->inbuf, smb_flg2), &finfo->name, p+30, 12, diff --git a/source3/libsmb/clistr.c b/source3/libsmb/clistr.c index 4e49091312..00b9bb2483 100644 --- a/source3/libsmb/clistr.c +++ b/source3/libsmb/clistr.c @@ -68,7 +68,8 @@ size_t clistr_pull_fn(const char *function, size_t clistr_pull_talloc_fn(const char *function, unsigned int line, TALLOC_CTX *ctx, - const char *inbuf, + const char *base, + uint16_t flags2, char **pp_dest, const void *src, int src_len, @@ -77,8 +78,8 @@ size_t clistr_pull_talloc_fn(const char *function, return pull_string_talloc_fn(function, line, ctx, - inbuf, - SVAL(inbuf, smb_flg2), + base, + flags2, pp_dest, src, src_len, |