]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3-lib: restore truncating behavior of push_ascii_nstring()
authorPhilipp Gesang <philipp.gesang@intra2net.com>
Mon, 17 Oct 2022 11:42:26 +0000 (13:42 +0200)
committerNoel Power <npower@samba.org>
Tue, 25 Oct 2022 16:25:40 +0000 (16:25 +0000)
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 <philipp.gesang@intra2net.com>
Reviewed-by: Noel Power <npower@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Noel Power <npower@samba.org>
Autobuild-Date(master): Tue Oct 25 16:25:40 UTC 2022 on sn-devel-184

source3/lib/fstring.c

index 7ac50ece15b86ed5491dd902cb8e6ce3c441305d..3ed1db1f24c74cfde53b56673d66ba2501cf02e9 100644 (file)
@@ -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);