From: Jeremy Allison Date: Wed, 23 Feb 2011 00:38:42 +0000 (-0800) Subject: Fix bug found against the new Mac client @ Connectathon. Mac clients X-Git-Tag: tevent-0.9.11~341 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7464793c9d00ac2aee40b1377477eb1e2b7c8251;p=thirdparty%2Fsamba.git Fix bug found against the new Mac client @ Connectathon. Mac clients don't open with FILE_WRITE_ATTRIBUTES when just doing a write, so updating the write time on close fails as smb_set_file_time() now (correctly) checks for FILE_WRITE_ATTRIBUTES in the access_mask before allowing client time update. This is an internal time update being done on a close, not a handle-based client request. --- diff --git a/source3/smbd/close.c b/source3/smbd/close.c index 0efa36f9a98..4234f32b7fd 100644 --- a/source3/smbd/close.c +++ b/source3/smbd/close.c @@ -572,8 +572,16 @@ static NTSTATUS update_write_time_on_close(struct files_struct *fsp) } ft.mtime = fsp->close_write_time; - status = smb_set_file_time(fsp->conn, fsp, fsp->fsp_name, &ft, false); + /* 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 + file attributes from a client call, but indirectly from a write. */ + status = smb_set_file_time(fsp->conn, NULL, 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", + fsp_str_dbg(fsp), + nt_errstr(status))); return status; }