mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
Remove the check for FILE_WRITE_ATTRIBUTES from smb_set_file_time(). It
is called from places like fileio.c that need to update the write time on a file handle only open for write, without neccessarily having FILE_WRITE_ATTRIBUTES permission. Move all checks to before the smb_set_file_time() callers.
This commit is contained in:
parent
86c1609219
commit
865bc0c0ac
@ -581,11 +581,9 @@ static NTSTATUS update_write_time_on_close(struct files_struct *fsp)
|
||||
}
|
||||
|
||||
ft.mtime = fsp->close_write_time;
|
||||
/* We must use NULL for the fsp handle here, as smb_set_file_time()
|
||||
checks the fsp access_mask, which may not include FILE_WRITE_ATTRIBUTES.
|
||||
As this is a close based update, we are not directly changing the
|
||||
/* As this is a close based update, we are not directly changing the
|
||||
file attributes from a client call, but indirectly from a write. */
|
||||
status = smb_set_file_time(fsp->conn, NULL, fsp->fsp_name, &ft, false);
|
||||
status = smb_set_file_time(fsp->conn, fsp, fsp->fsp_name, &ft, false);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(10,("update_write_time_on_close: smb_set_file_time "
|
||||
"on file %s returned %s\n",
|
||||
|
@ -7952,6 +7952,11 @@ void reply_setattrE(struct smb_request *req)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!(fsp->access_mask & FILE_WRITE_ATTRIBUTES)) {
|
||||
reply_nterror(req, NT_STATUS_ACCESS_DENIED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
status = smb_set_file_time(conn, fsp, fsp->fsp_name, &ft, true);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
reply_nterror(req, status);
|
||||
|
@ -5440,6 +5440,8 @@ NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
|
||||
|
||||
/****************************************************************************
|
||||
Deal with setting the time from any of the setfilepathinfo functions.
|
||||
NOTE !!!! The check for FILE_WRITE_ATTRIBUTES access must be done *before*
|
||||
calling this function.
|
||||
****************************************************************************/
|
||||
|
||||
NTSTATUS smb_set_file_time(connection_struct *conn,
|
||||
@ -5458,10 +5460,6 @@ NTSTATUS smb_set_file_time(connection_struct *conn,
|
||||
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
|
||||
}
|
||||
|
||||
if (fsp && !(fsp->access_mask & FILE_WRITE_ATTRIBUTES)) {
|
||||
return NT_STATUS_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
/* get some defaults (no modifications) if any info is zero or -1. */
|
||||
if (null_timespec(ft->create_time)) {
|
||||
action &= ~FILE_NOTIFY_CHANGE_CREATION;
|
||||
@ -6574,6 +6572,10 @@ static NTSTATUS smb_set_info_standard(connection_struct *conn,
|
||||
DEBUG(10,("smb_set_info_standard: file %s\n",
|
||||
smb_fname_str_dbg(smb_fname)));
|
||||
|
||||
if (fsp && !(fsp->access_mask & FILE_WRITE_ATTRIBUTES)) {
|
||||
return NT_STATUS_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
return smb_set_file_time(conn,
|
||||
fsp,
|
||||
smb_fname,
|
||||
@ -6944,6 +6946,10 @@ static NTSTATUS smb_set_file_unix_basic(connection_struct *conn,
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fsp && !(fsp->access_mask & FILE_WRITE_ATTRIBUTES)) {
|
||||
return NT_STATUS_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Deal with the UNIX specific mode set.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user