mirror of
https://github.com/InfrastructureServices/vsftpd.git
synced 2025-04-19 01:24:02 +03:00
Delete files when upload fails.
Previously the uploaded file wasn't removed when the network was disconnected. Now it is successfully deleted.
This commit is contained in:
parent
1e65a0a15f
commit
6224ecc5ac
@ -15,7 +15,8 @@
|
||||
#define FTP_PBSZOK 200
|
||||
#define FTP_PROTOK 200
|
||||
#define FTP_OPTSOK 200
|
||||
#define FTP_ALLOOK 202
|
||||
#define FTP_ALLOOK 200
|
||||
#define FTP_ALLOIGN 202
|
||||
#define FTP_FEAT 211
|
||||
#define FTP_STATOK 211
|
||||
#define FTP_SIZEOK 213
|
||||
|
@ -242,6 +242,10 @@ init_data_sock_params(struct vsf_session* p_sess, int sock_fd)
|
||||
/* Start the timeout monitor */
|
||||
vsf_sysutil_install_io_handler(handle_io, p_sess);
|
||||
start_data_alarm(p_sess);
|
||||
if(tunable_delete_failed_uploads)
|
||||
{
|
||||
vsf_sysutil_rcvtimeo(sock_fd);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@ -615,6 +619,10 @@ do_file_recv(struct vsf_session* p_sess, int file_fd, int is_ascii)
|
||||
else if (retval == 0 && !prev_cr)
|
||||
{
|
||||
/* Transfer done, nifty */
|
||||
if (tunable_delete_failed_uploads &&
|
||||
!is_ascii && p_sess->upload_size > 0 &&
|
||||
p_sess->upload_size != ret_struct.transferred)
|
||||
ret_struct.retval = -2;
|
||||
return ret_struct;
|
||||
}
|
||||
num_to_write = (unsigned int) retval;
|
||||
|
2
main.c
2
main.c
@ -44,7 +44,7 @@ main(int argc, const char* argv[])
|
||||
/* Login */
|
||||
1, 0, INIT_MYSTR, INIT_MYSTR,
|
||||
/* Protocol state */
|
||||
0, 1, INIT_MYSTR, 0, 0,
|
||||
0, 0, 1, INIT_MYSTR, 0, 0,
|
||||
/* HTTP hacks */
|
||||
0, INIT_MYSTR,
|
||||
/* Session state */
|
||||
|
@ -356,7 +356,14 @@ process_post_login(struct vsf_session* p_sess)
|
||||
}
|
||||
else if (str_equal_text(&p_sess->ftp_cmd_str, "ALLO"))
|
||||
{
|
||||
vsf_cmdio_write(p_sess, FTP_ALLOOK, "ALLO command ignored.");
|
||||
if (tunable_delete_failed_uploads && !p_sess->is_ascii)
|
||||
{
|
||||
p_sess->upload_size = (filesize_t)vsf_sysutil_atoi(str_getbuf(&p_sess->ftp_cmd_str)+5);
|
||||
vsf_cmdio_write(p_sess, FTP_ALLOOK, "The filesize has been allocated.");
|
||||
}
|
||||
else {
|
||||
vsf_cmdio_write(p_sess, FTP_ALLOIGN, "ALLO command ignored.");
|
||||
}
|
||||
}
|
||||
else if (str_equal_text(&p_sess->ftp_cmd_str, "REIN"))
|
||||
{
|
||||
|
@ -41,6 +41,7 @@ struct vsf_session
|
||||
struct mystr anon_pass_str;
|
||||
|
||||
/* Details of the FTP protocol state */
|
||||
filesize_t upload_size;
|
||||
filesize_t restart_pos;
|
||||
int is_ascii;
|
||||
struct mystr rnfr_filename_str;
|
||||
|
10
sysutil.c
10
sysutil.c
@ -680,6 +680,16 @@ vsf_sysutil_activate_keepalive(int fd)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
vsf_sysutil_rcvtimeo(int fd)
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
tv.tv_sec = tunable_data_connection_timeout;
|
||||
tv.tv_usec = 0;
|
||||
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval));
|
||||
}
|
||||
|
||||
void
|
||||
vsf_sysutil_activate_reuseaddr(int fd)
|
||||
{
|
||||
|
@ -266,6 +266,7 @@ void vsf_sysutil_dns_resolve(struct vsf_sysutil_sockaddr** p_sockptr,
|
||||
const char* p_name);
|
||||
/* Option setting on sockets */
|
||||
void vsf_sysutil_activate_keepalive(int fd);
|
||||
void vsf_sysutil_rcvtimeo(int fd);
|
||||
void vsf_sysutil_set_iptos_throughput(int fd);
|
||||
void vsf_sysutil_activate_reuseaddr(int fd);
|
||||
void vsf_sysutil_set_nodelay(int fd);
|
||||
|
Loading…
x
Reference in New Issue
Block a user