summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2016-11-18 10:20:41 -0800
committerKarolin Seeger <kseeger@samba.org>2016-12-01 15:16:56 +0100
commit8377d8afbc072a4edbbc97263c94effb05b69137 (patch)
tree45db6f0ccfabef2c1cbc67aa4b7d08b129200a88
parentcbf54e0290992aeb36a2971741373cf2ee629af7 (diff)
downloadsamba-8377d8afbc072a4edbbc97263c94effb05b69137.tar.gz
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 <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-5-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-5-test): Thu Dec 1 15:16:56 CET 2016 on sn-devel-144
-rw-r--r--source3/smbd/dosmode.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index a376cbc0f38..c80d2405ed6 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -636,12 +636,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);