From: Ralph Boehme Date: Tue, 26 Nov 2024 17:21:32 +0000 (+0100) Subject: smbd: fix DOS attributes for reparse points in fdos_mode() X-Git-Tag: tdb-1.4.13~459 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=306d4e7fffe3a0b2311cbf5c3cc658af5660cb5f;p=thirdparty%2Fsamba.git 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 --- 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; }