diff -urN vsftpd-2.3.4/ftpdataio.c vsftpd-2.3.4_nitr0us/ftpdataio.c --- vsftpd-2.3.4/ftpdataio.c 2011-02-15 01:20:46.000000000 -0600 +++ vsftpd-2.3.4_nitr0us/ftpdataio.c 2011-09-29 11:07:46.031901539 -0500 @@ -186,8 +186,16 @@ handle_sigalrm(void* p_private) { struct vsf_session* p_sess = (struct vsf_session*) p_private; + struct mystr* p; + if (!p_sess->data_progress) { + if (tunable_delete_failed_uploads) + { + p = &p_sess->ftp_arg_str; + str_unlink(p); + } + vsf_cmdio_write_exit(p_sess, FTP_DATA_TIMEOUT, "Data timeout. Reconnect. Sorry."); } diff -urN vsftpd-2.3.4/postlogin.c vsftpd-2.3.4_nitr0us/postlogin.c --- vsftpd-2.3.4/postlogin.c 2010-08-18 18:51:41.000000000 -0500 +++ vsftpd-2.3.4_nitr0us/postlogin.c 2011-09-29 11:10:11.062334162 -0500 @@ -1123,14 +1123,17 @@ if (trans_ret.retval == -1) { vsf_cmdio_write(p_sess, FTP_BADSENDFILE, "Failure writing to local file."); + success = 0; } else if (trans_ret.retval == -2 || p_sess->abor_received) { vsf_cmdio_write(p_sess, FTP_BADSENDNET, "Failure reading network stream."); + success = 0; } else { vsf_cmdio_write(p_sess, FTP_TRANSFEROK, "Transfer complete."); + success = 1; } check_abor(p_sess); port_pasv_cleanup_out: @@ -1138,6 +1141,7 @@ pasv_cleanup(p_sess); if (tunable_delete_failed_uploads && created && !success) { + p_filename = &p_sess->ftp_arg_str; str_unlink(p_filename); } vsf_sysutil_close(new_file_fd);