From: Philipp Gesang Date: Mon, 17 Oct 2022 11:42:26 +0000 (+0200) Subject: s3-lib: restore truncating behavior of push_ascii_nstring() X-Git-Tag: talloc-2.4.0~647 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a66c739532cbe9bad38deb78f76f48a676f7ffa;p=thirdparty%2Fsamba.git s3-lib: restore truncating behavior of push_ascii_nstring() Some users of push_ascii_nstring() (notably name_to_unstring()) expect the output to be truncated if it would exceed the size of an nstring after conversion. However this broke in 2011 due to commit d546adeab5 ("Change convert_string_internal() and convert_string_error() to bool return"). This patch restores the old behavior. The issue can be observed in syslog after setting the ``workgroup`` to a 16+ characters long string which triggers a DEBUG() message: Oct 17 11:28:45 dev nmbd[11716]: name_to_nstring: workgroup name 0123456789ABCDEF0123456789ABCDEF is too long. Truncating to Signed-off-by: Philipp Gesang Reviewed-by: Noel Power Reviewed-by: Jeremy Allison Autobuild-User(master): Noel Power Autobuild-Date(master): Tue Oct 25 16:25:40 UTC 2022 on sn-devel-184 --- diff --git a/source3/lib/fstring.c b/source3/lib/fstring.c index 7ac50ece15b..3ed1db1f24c 100644 --- a/source3/lib/fstring.c +++ b/source3/lib/fstring.c @@ -41,8 +41,11 @@ size_t push_ascii_fstring(void *dest, const char *src) size_t push_ascii_nstring(void *dest, const char *src) { size_t converted_size = 0; - bool ret = convert_string_error(CH_UNIX, CH_DOS, src, -1, dest, sizeof(nstring), &converted_size); - if (ret) { + bool ret; + + errno = 0; + ret = convert_string_error(CH_UNIX, CH_DOS, src, -1, dest, sizeof(nstring), &converted_size); + if (ret || errno == E2BIG) { SCVAL(dest, sizeof(nstring)-1, 0); } else { SCVAL(dest, 0, 0);