1
0
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:
David Disseldorp
2011-01-26 14:32:01 -08:00
committed by Jeremy Allison
parent efde1d870b
commit eb55338ccd

View File

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