diff options
-rw-r--r-- | source3/smbd/open.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 926c0ecaa7..e93485b3d8 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -65,7 +65,7 @@ NTSTATUS smb1_file_se_access_check(const struct security_descriptor *sd, ****************************************************************************/ static NTSTATUS check_open_rights(struct connection_struct *conn, - const char *fname, + const struct smb_filename *smb_fname, uint32_t access_mask, uint32_t *access_granted) { @@ -84,7 +84,7 @@ static NTSTATUS check_open_rights(struct connection_struct *conn, return NT_STATUS_OK; } - status = SMB_VFS_GET_NT_ACL(conn, fname, + status = SMB_VFS_GET_NT_ACL(conn, smb_fname->base_name, (OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION),&sd); @@ -92,7 +92,7 @@ static NTSTATUS check_open_rights(struct connection_struct *conn, if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("check_open_rights: Could not get acl " "on %s: %s\n", - fname, + smb_fname_str_dbg(smb_fname), nt_errstr(status))); return status; } @@ -106,7 +106,7 @@ static NTSTATUS check_open_rights(struct connection_struct *conn, DEBUG(10,("check_open_rights: file %s requesting " "0x%x returning 0x%x (%s)\n", - fname, + smb_fname_str_dbg(smb_fname), (unsigned int)access_mask, (unsigned int)*access_granted, nt_errstr(status) )); @@ -482,7 +482,7 @@ static NTSTATUS open_file(files_struct *fsp, uint32_t access_granted = 0; status = check_open_rights(conn, - path, + smb_fname, access_mask, &access_granted); if (!NT_STATUS_IS_OK(status)) { @@ -1374,7 +1374,7 @@ static void schedule_defer_open(struct share_mode_lock *lck, ****************************************************************************/ static NTSTATUS calculate_access_mask(connection_struct *conn, - const char *fname, + const struct smb_filename *smb_fname, bool file_existed, uint32_t access_mask, uint32_t *access_mask_out) @@ -1394,7 +1394,7 @@ static NTSTATUS calculate_access_mask(connection_struct *conn, struct security_descriptor *sd; uint32_t access_granted = 0; - status = SMB_VFS_GET_NT_ACL(conn, fname, + status = SMB_VFS_GET_NT_ACL(conn, smb_fname->base_name, (OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION),&sd); @@ -1402,7 +1402,7 @@ static NTSTATUS calculate_access_mask(connection_struct *conn, if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("calculate_access_mask: Could not get acl " "on file %s: %s\n", - fname, + smb_fname_str_dbg(smb_fname), nt_errstr(status))); return NT_STATUS_ACCESS_DENIED; } @@ -1417,7 +1417,7 @@ static NTSTATUS calculate_access_mask(connection_struct *conn, if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("calculate_access_mask: Access denied on " "file %s: when calculating maximum access\n", - fname)); + smb_fname_str_dbg(smb_fname))); return NT_STATUS_ACCESS_DENIED; } @@ -1688,7 +1688,7 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, } } - status = calculate_access_mask(conn, fname, file_existed, + status = calculate_access_mask(conn, smb_fname, file_existed, access_mask, &access_mask); if (!NT_STATUS_IS_OK(status)) { @@ -2447,6 +2447,8 @@ static NTSTATUS open_directory(connection_struct *conn, struct timespec mtimespec; int info = 0; + SMB_ASSERT(!is_ntfs_stream_smb_fname(smb_dname)); + DEBUG(5,("open_directory: opening directory %s, access_mask = 0x%x, " "share_access = 0x%x create_options = 0x%x, " "create_disposition = 0x%x, file_attributes = 0x%x\n", @@ -2465,7 +2467,7 @@ static NTSTATUS open_directory(connection_struct *conn, return NT_STATUS_NOT_A_DIRECTORY; } - status = calculate_access_mask(conn, smb_dname->base_name, dir_existed, + status = calculate_access_mask(conn, smb_dname, dir_existed, access_mask, &access_mask); if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("open_directory: calculate_access_mask " @@ -2557,8 +2559,8 @@ static NTSTATUS open_directory(connection_struct *conn, if (info == FILE_WAS_OPENED) { uint32_t access_granted = 0; - status = check_open_rights(conn, smb_dname->base_name, - access_mask, &access_granted); + status = check_open_rights(conn, smb_dname, access_mask, + &access_granted); /* Were we trying to do a directory open * for delete and didn't get DELETE |