Fix bug found against the new Mac client @ Connectathon. Mac clients
authorJeremy Allison <jra@samba.org>
Wed, 23 Feb 2011 00:38:42 +0000 (16:38 -0800)
committerJeremy Allison <jra@samba.org>
Wed, 23 Feb 2011 01:17:21 +0000 (02:17 +0100)
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.

source3/smbd/close.c

index 0efa36f9a98b7b963103fc1f2b8a0f8664d3348c..4234f32b7fd18f54d6264a357ff41b12dfd709c1 100644 (file)
@@ -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;
        }