]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/smbd: fix the last resort check that sets the file type attribute
authorJeremy Allison <jra@samba.org>
Fri, 18 Nov 2016 18:20:41 +0000 (10:20 -0800)
committerKarolin Seeger <kseeger@samba.org>
Thu, 1 Dec 2016 13:51:30 +0000 (14:51 +0100)
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 <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
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 <kseeger@samba.org>
Autobuild-Date(v4-4-test): Thu Dec  1 14:51:30 CET 2016 on sn-devel-144

source3/smbd/dosmode.c

index 84178feff70a3c3b7b7a59ebeaf57ded169c9e52..6377bd98b0aae52a0cbaa5b03cc54940caf164ae 100644 (file)
@@ -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);