From a06519a579f04c4728af01a169ba79c7149994db Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 15 Dec 2010 16:49:04 -0800 Subject: Fix old bug in openX code, exposed when "strict allocate" is set to true. 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 Autobuild-Date: Thu Dec 16 02:37:58 CET 2010 on sn-devel-104 --- source3/smbd/reply.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'source3/smbd/reply.c') diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 26badc4ebf..e5067cca7e 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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); -- cgit