Fix old bug in openX code, exposed when "strict allocate" is set to true.
authorJeremy Allison <jra@samba.org>
Thu, 16 Dec 2010 00:49:04 +0000 (16:49 -0800)
committerJeremy Allison <jra@samba.org>
Thu, 16 Dec 2010 01:37:57 +0000 (02:37 +0100)
We need to return the file size here, not the allocation size, but
we were not updating the stat struct after the vfs_set_filesize()
call. Ensure we always use fresh data in openX replies.

Jeremy.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Thu Dec 16 02:37:58 CET 2010 on sn-devel-104

source3/smbd/reply.c

index 26badc4ebf5d284e7da614022e6d4e4379e18ac1..e5067cca7e9d93484f0e4c220de2d65f631ac99d 100644 (file)
@@ -1985,12 +1985,16 @@ void reply_open_and_X(struct smb_request *req)
                        reply_nterror(req, NT_STATUS_DISK_FULL);
                        goto out;
                }
-               smb_fname->st.st_ex_size =
-                   SMB_VFS_GET_ALLOC_SIZE(conn, fsp, &smb_fname->st);
+               status = vfs_stat_fsp(fsp);
+               if (!NT_STATUS_IS_OK(status)) {
+                       close_file(req, fsp, ERROR_CLOSE);
+                       reply_nterror(req, status);
+                       goto out;
+               }
        }
 
-       fattr = dos_mode(conn, smb_fname);
-       mtime = convert_timespec_to_time_t(smb_fname->st.st_ex_mtime);
+       fattr = dos_mode(conn, fsp->fsp_name);
+       mtime = convert_timespec_to_time_t(fsp->fsp_name->st.st_ex_mtime);
        if (fattr & aDIR) {
                close_file(req, fsp, ERROR_CLOSE);
                reply_nterror(req, NT_STATUS_ACCESS_DENIED);
@@ -2038,7 +2042,7 @@ void reply_open_and_X(struct smb_request *req)
        } else {
                srv_put_dos_date3((char *)req->outbuf,smb_vwv4,mtime);
        }
-       SIVAL(req->outbuf,smb_vwv6,(uint32)smb_fname->st.st_ex_size);
+       SIVAL(req->outbuf,smb_vwv6,(uint32)fsp->fsp_name->st.st_ex_size);
        SSVAL(req->outbuf,smb_vwv8,GET_OPENX_MODE(deny_mode));
        SSVAL(req->outbuf,smb_vwv11,smb_action);