mirror of
https://github.com/samba-team/samba.git
synced 2025-08-08 13:49:29 +03:00
Looking into printer driver issues, I ran across some peculiarities in
copy_file(): - Firstly, if the source file is zero bytes, NT_STATUS_DISK_FULL is returned. - Secondly, the conditional lseek is confusing. It fires when OPENX_FILE_EXISTS_OPEN is set and I can't see why the lseek is necessary in this case. - Finally, the lseek error path also results in NT_STATUS_DISK_FULL. Proposed fix for first and third point below. Autobuild-User: Jeremy Allison <jra@samba.org> Autobuild-Date: Thu Jan 27 00:59:56 CET 2011 on sn-devel-104
This commit is contained in:
committed by
Jeremy Allison
parent
efde1d870b
commit
eb55338ccd
@ -6789,20 +6789,23 @@ NTSTATUS copy_file(TALLOC_CTX *ctx,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ((ofun&3) == 1) {
|
||||
if(SMB_VFS_LSEEK(fsp2,0,SEEK_END) == -1) {
|
||||
DEBUG(0,("copy_file: error - vfs lseek returned error %s\n", strerror(errno) ));
|
||||
/*
|
||||
* Stop the copy from occurring.
|
||||
*/
|
||||
ret = -1;
|
||||
smb_fname_src->st.st_ex_size = 0;
|
||||
if (ofun & OPENX_FILE_EXISTS_OPEN) {
|
||||
ret = SMB_VFS_LSEEK(fsp2, 0, SEEK_END);
|
||||
if (ret == -1) {
|
||||
DEBUG(0, ("error - vfs lseek returned error %s\n",
|
||||
strerror(errno)));
|
||||
status = map_nt_error_from_unix(errno);
|
||||
close_file(NULL, fsp1, ERROR_CLOSE);
|
||||
close_file(NULL, fsp2, ERROR_CLOSE);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do the actual copy. */
|
||||
if (smb_fname_src->st.st_ex_size) {
|
||||
ret = vfs_transfer_file(fsp1, fsp2, smb_fname_src->st.st_ex_size);
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
close_file(NULL, fsp1, NORMAL_CLOSE);
|
||||
|
Reference in New Issue
Block a user