From: Volker Lendecke Date: Tue, 19 Nov 2024 14:35:58 +0000 (+0100) Subject: smbd: Prepare fdos_mode() for handling symlinks in smb2 X-Git-Tag: tdb-1.4.13~487 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c87269f528ae7758ed8b5a793d724596ab35a697;p=thirdparty%2Fsamba.git smbd: Prepare fdos_mode() for handling symlinks in smb2 We should show all special files as NORMAL|REPARSE_POINT, except symlinks for SMB1 Posix Extensions. IFREG and IFDIR are handled via our xattr mechanisms. Signed-off-by: Volker Lendecke Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index f39f8a7d15b..0de348883e4 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -721,16 +721,28 @@ uint32_t fdos_mode(struct files_struct *fsp) } switch (fsp->fsp_name->st.st_ex_mode & S_IFMT) { - case S_IFLNK: - return FILE_ATTRIBUTE_NORMAL; + case S_IFREG: + case S_IFDIR: break; - case S_IFIFO: - case S_IFSOCK: - case S_IFBLK: - case S_IFCHR: - return FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_REPARSE_POINT; + case S_IFLNK: + if (fsp->fsp_flags.posix_open && + !conn_using_smb2(fsp->conn->sconn)) { + /* + * SMB1 posix doesn't like the reparse point flag + */ + result = FILE_ATTRIBUTE_NORMAL; + } else { + /* + * Everybody else wants to see symlinks as + * reparse points + */ + result = FILE_ATTRIBUTE_NORMAL | + FILE_ATTRIBUTE_REPARSE_POINT; + } + break; default: + return FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_REPARSE_POINT; break; }