From: Jeremy Allison Date: Fri, 18 Nov 2016 18:20:41 +0000 (-0800) Subject: s3/smbd: fix the last resort check that sets the file type attribute X-Git-Tag: samba-4.4.9~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56bec8696868f3c784f790f3a373546509007f83;p=thirdparty%2Fsamba.git s3/smbd: fix the last resort check that sets the file type attribute The rule is, a directory (with any other attributes) should always also set FILE_ATTRIBUTE_DIRECTORY, a file should only set FILE_ATTRIBUTE_NORMAL if no other attributes is set. Iow, if a file contains any existing attributes (e.g. FILE_ATTRIBUTE_HIDDEN), don't add in the FILE_ATTRIBUTE_NORMAL attribute. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12436 Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme Autobuild-User(master): Ralph Böhme Autobuild-Date(master): Sat Nov 19 11:55:35 CET 2016 on sn-devel-144 (cherry picked from commit a0783e8dd966a0b2d24d2ca5baa6bed3fe5a7d5a) Autobuild-User(v4-4-test): Karolin Seeger Autobuild-Date(v4-4-test): Thu Dec 1 14:51:30 CET 2016 on sn-devel-144 --- diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 84178feff70..6377bd98b0a 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -624,12 +624,10 @@ uint32_t dos_mode(connection_struct *conn, struct smb_filename *smb_fname) result |= dos_mode_from_name(conn, smb_fname, result); - if (result == 0) { - if (S_ISDIR(smb_fname->st.st_ex_mode)) { - result = FILE_ATTRIBUTE_DIRECTORY; - } else { - result = FILE_ATTRIBUTE_NORMAL; - } + if (S_ISDIR(smb_fname->st.st_ex_mode)) { + result |= FILE_ATTRIBUTE_DIRECTORY; + } else if (result == 0) { + result = FILE_ATTRIBUTE_NORMAL; } result = filter_mode_by_protocol(result);