From b62bd05b93e2317f78a4aea089295cf1162d23e2 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 2 Aug 2007 18:06:45 +0000 Subject: [PATCH] r24133: Explicitly pass flags2 down to push_string_fn This needs a bit closer review, it also touches the client libs (This used to be commit 824eb26738d64af1798d319d339582cf047521f0) --- source3/include/safe_string.h | 2 +- source3/lib/charcnv.c | 7 +++++-- source3/libsmb/clistr.c | 14 +++++++++++--- source3/smbd/srvstr.c | 10 +++++++--- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/source3/include/safe_string.h b/source3/include/safe_string.h index c0b9c411ec5e..69a5a5eb9321 100644 --- a/source3/include/safe_string.h +++ b/source3/include/safe_string.h @@ -191,7 +191,7 @@ size_t __unsafe_string_function_usage_here_char__(void); #define push_string_fn2(fn_name, fn_line, base_ptr, dest, src, dest_len, flags) \ (CHECK_STRING_SIZE(dest, dest_len) \ ? __unsafe_string_function_usage_here_size_t__() \ - : push_string_fn(fn_name, fn_line, base_ptr, dest, src, dest_len, flags)) + : push_string_fn(fn_name, fn_line, base_ptr, 0, dest, src, dest_len, flags)) #define pull_string_fn2(fn_name, fn_line, base_ptr, smb_flags2, dest, src, dest_len, src_len, flags) \ (CHECK_STRING_SIZE(dest, dest_len) \ diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c index 30941dd7e8e5..349fbff8506d 100644 --- a/source3/lib/charcnv.c +++ b/source3/lib/charcnv.c @@ -1504,7 +1504,10 @@ size_t pull_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src) is -1 then no maxiumum is used. **/ -size_t push_string_fn(const char *function, unsigned int line, const void *base_ptr, void *dest, const char *src, size_t dest_len, int flags) +size_t push_string_fn(const char *function, unsigned int line, + const void *base_ptr, uint16 flags2, + void *dest, const char *src, + size_t dest_len, int flags) { #ifdef DEVELOPER /* We really need to zero fill here, not clobber @@ -1524,7 +1527,7 @@ size_t push_string_fn(const char *function, unsigned int line, const void *base_ if (!(flags & STR_ASCII) && \ ((flags & STR_UNICODE || \ - (SVAL(base_ptr, smb_flg2) & FLAGS2_UNICODE_STRINGS)))) { + (flags2 & FLAGS2_UNICODE_STRINGS)))) { return push_ucs2(base_ptr, dest, src, dest_len, flags); } return push_ascii(dest, src, dest_len, flags); diff --git a/source3/libsmb/clistr.c b/source3/libsmb/clistr.c index 7e6ad790fca7..39315729c4ec 100644 --- a/source3/libsmb/clistr.c +++ b/source3/libsmb/clistr.c @@ -28,13 +28,21 @@ size_t clistr_push_fn(const char *function, unsigned int line, 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_fn(function, line, cli->outbuf, dest, src, -1, flags); + return push_string_fn(function, line, + cli->outbuf, + SVAL(cli->outbuf, smb_flg2), + dest, src, -1, flags); } - return push_string_fn(function, line, cli->outbuf, dest, src, cli->bufsize - buf_used, flags); + return push_string_fn(function, line, cli->outbuf, + SVAL(cli->outbuf, smb_flg2), + dest, src, cli->bufsize - buf_used, + flags); } /* 'normal' push into size-specified buffer */ - return push_string_fn(function, line, cli->outbuf, dest, src, dest_len, flags); + return push_string_fn(function, line, cli->outbuf, + SVAL(cli->outbuf, smb_flg2), + dest, src, dest_len, flags); } size_t clistr_pull_fn(const char *function, unsigned int line, diff --git a/source3/smbd/srvstr.c b/source3/smbd/srvstr.c index df993537ba9a..fbcf249ffb18 100644 --- a/source3/smbd/srvstr.c +++ b/source3/smbd/srvstr.c @@ -33,13 +33,17 @@ size_t srvstr_push_fn(const char *function, unsigned int line, #if 0 DEBUG(0, ("Pushing string of 'unlimited' length into non-SMB buffer!\n")); #endif - return push_string_fn(function, line, base_ptr, dest, src, -1, flags); + return push_string_fn(function, line, base_ptr, + smb_flags2, dest, src, -1, + flags); } - return push_string_fn(function, line, base_ptr, dest, src, max_send - buf_used, flags); + return push_string_fn(function, line, base_ptr, smb_flags2, + dest, src, max_send - buf_used, flags); } /* 'normal' push into size-specified buffer */ - return push_string_fn(function, line, base_ptr, dest, src, dest_len, flags); + return push_string_fn(function, line, base_ptr, smb_flags2, dest, src, + dest_len, flags); } /******************************************************************* -- 2.34.1