From 306d4e7fffe3a0b2311cbf5c3cc658af5660cb5f Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Tue, 26 Nov 2024 18:21:32 +0100 Subject: [PATCH] smbd: fix DOS attributes for reparse points in fdos_mode() Reparse have only FILE_ATTRIBUTE_REPARSE_POINT set, but never FILE_ATTRIBUTE_NORMAL or FILE_ATTRIBUTE_DIRECTORY at the same time. Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke --- source3/smbd/dosmode.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 0de348883e4..9a8ecf6e0a7 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -687,7 +687,9 @@ static uint32_t dos_mode_post(uint32_t dosmode, dosmode |= dos_mode_from_name(fsp->conn, smb_fname->base_name, dosmode); if (S_ISDIR(smb_fname->st.st_ex_mode)) { - dosmode |= FILE_ATTRIBUTE_DIRECTORY; + if (!(dosmode & FILE_ATTRIBUTE_REPARSE_POINT)) { + dosmode |= FILE_ATTRIBUTE_DIRECTORY; + } } else if (dosmode == 0) { dosmode = FILE_ATTRIBUTE_NORMAL; } @@ -736,13 +738,12 @@ uint32_t fdos_mode(struct files_struct *fsp) * Everybody else wants to see symlinks as * reparse points */ - result = FILE_ATTRIBUTE_NORMAL | - FILE_ATTRIBUTE_REPARSE_POINT; + result = FILE_ATTRIBUTE_REPARSE_POINT; } break; default: - return FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_REPARSE_POINT; + return FILE_ATTRIBUTE_REPARSE_POINT; break; } -- 2.47.3