smbd: use openat_pathref_fsp() in get_file_handle_for_metadata()
authorRalph Boehme <slow@samba.org>
Thu, 12 Nov 2020 11:51:04 +0000 (12:51 +0100)
committerRalph Boehme <slow@samba.org>
Wed, 16 Dec 2020 09:08:31 +0000 (09:08 +0000)
Ensures we have a pathref handle in the smb_fname we pass to
SMB_VFS_CREATE_FILE().

As the create_disposition is FILE_OPEN we just return the error if
openat_pathref_fsp() fails

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/dosmode.c

index b2cb83d9a94a486de5557a34fd8ec760f1ac629c..9fc5f6ece6c9245d136ca8ce958cd2f8bc364f6d 100644 (file)
@@ -1392,6 +1392,15 @@ static NTSTATUS get_file_handle_for_metadata(connection_struct *conn,
                return NT_STATUS_NO_MEMORY;
        }
 
+       status = openat_pathref_fsp(conn->cwd_fsp, smb_fname_cp);
+       if (NT_STATUS_EQUAL(status, NT_STATUS_STOPPED_ON_SYMLINK)) {
+               status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
+       }
+       if (!NT_STATUS_IS_OK(status)) {
+               TALLOC_FREE(smb_fname_cp);
+               return status;
+       }
+
        /* Opens an INTERNAL_OPEN_ONLY write handle. */
        status = SMB_VFS_CREATE_FILE(
                conn,                                   /* conn */