]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: fix DOS attributes for reparse points in fdos_mode()
authorRalph Boehme <slow@samba.org>
Tue, 26 Nov 2024 17:21:32 +0000 (18:21 +0100)
committerRalph Boehme <slow@samba.org>
Wed, 27 Nov 2024 18:22:29 +0000 (18:22 +0000)
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 <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/smbd/dosmode.c

index 0de348883e493c689af43b7ca280590881f58ec6..9a8ecf6e0a7c4a4fbad35c30154052560c4897cb 100644 (file)
@@ -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;
        }