1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-08 13:49:29 +03:00

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 <jra@samba.org>
Autobuild-Date: Thu Dec 16 02:37:58 CET 2010 on sn-devel-104
This commit is contained in:
Jeremy Allison
2010-12-15 16:49:04 -08:00
parent ecf48af135
commit a06519a579

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