1
0
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:
Jeremy Allison 2011-11-15 17:41:48 -08:00
parent 86c1609219
commit 865bc0c0ac
3 changed files with 17 additions and 8 deletions

View File

@ -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",

View File

@ -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);

View File

@ -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.
*/