smbd: We don't reopen anything but dirs and files
authorVolker Lendecke <vl@samba.org>
Sun, 15 Oct 2023 15:56:46 +0000 (17:56 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 7 Nov 2023 12:46:37 +0000 (12:46 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/open.c

index 4b1d5a4de65fbeb747ed7458863665e9675b81e5..8c34269c86cd25cee0b04cdbaa274737e0291b10 100644 (file)
@@ -1229,10 +1229,18 @@ static NTSTATUS reopen_from_fsp(struct files_struct *dirfsp,
                struct smb_filename proc_fname = (struct smb_filename){
                        .base_name = sys_proc_fd_path(old_fd, &buf),
                };
+               mode_t mode = fsp->fsp_name->st.st_ex_mode;
                int new_fd;
 
                SMB_ASSERT(fsp->fsp_flags.is_pathref);
 
+               if (S_ISLNK(mode)) {
+                       return NT_STATUS_STOPPED_ON_SYMLINK;
+               }
+               if (!(S_ISREG(mode) || S_ISDIR(mode))) {
+                       return NT_STATUS_IO_REPARSE_TAG_NOT_HANDLED;
+               }
+
                fsp->fsp_flags.is_pathref = false;
 
                new_fd = SMB_VFS_OPENAT(fsp->conn,