[PATCH] s3/smbd: set FILE_ATTRIBUTE_DIRECTORY as necessary

Ralph Böhme slow at samba.org
Wed Sep 14 13:52:41 UTC 2016


On Wed, Sep 14, 2016 at 03:42:04PM +0200, Ralph Böhme wrote:
> Hi!
> 
> Just stumbled across this one:
> 
> <https://bugzilla.samba.org/show_bug.cgi?id=12261>
> 
> Patch attached, please review & push if ok. Thanks!

sorry, here it is.

Cheerio!
-slow
-------------- next part --------------
From 3246128f972a782543603a9d97516ddaa751d339 Mon Sep 17 00:00:00 2001
From: Ralph Boehme <slow at samba.org>
Date: Wed, 14 Sep 2016 12:52:48 +0200
Subject: [PATCH] s3/smbd: set FILE_ATTRIBUTE_DIRECTORY as necessary

Some VFS modules like GPFS will always return success from
SMB_VFS_GET_DOS_ATTRIBUTES() but only set a subset of the attributes. It
neither sets FILE_ATTRIBUTE_NORMAL nor FILE_ATTRIBUTE_DIRECTORY.

We already handle the case that the VFS stack returns with result==0 and
then add the FILE_ATTRIBUTE_NORMAL, regardless of the type of the
filesystem object. If we want to handle result==0 situation in the
SMB_VFS_GET_DOS_ATTRIBUTES() caller, then do it right by either setting
FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=12261

Signed-off-by: Ralph Boehme <slow at samba.org>
---
 source3/smbd/dosmode.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index 82d495a..cc9cf95 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -632,7 +632,11 @@ uint32_t dos_mode(connection_struct *conn, struct smb_filename *smb_fname)
 	result |= dos_mode_from_name(conn, smb_fname, result);
 
 	if (result == 0) {
-		result = FILE_ATTRIBUTE_NORMAL;
+		if (S_ISDIR(smb_fname->st.st_ex_mode)) {
+			result = FILE_ATTRIBUTE_DIRECTORY;
+		} else {
+			result = FILE_ATTRIBUTE_NORMAL;
+		}
 	}
 
 	result = filter_mode_by_protocol(result);
-- 
2.7.4



More information about the samba-technical mailing list