vsftpd/vsftpd-2.0.5-uniq_rename.patch

77 lines
2.2 KiB
Diff
Raw Normal View History

2007-01-19 12:17:08 +00:00
--- vsftpd-2.0.3/postlogin.c.uniq_rename 2005-03-19 12:15:59.000000000 +0100
+++ vsftpd-2.0.3/postlogin.c 2005-07-18 15:52:20.000000000 +0200
@@ -70,7 +70,7 @@
static void check_abor(struct vsf_session* p_sess);
static void handle_sigurg(void* p_private);
static void handle_upload_common(struct vsf_session* p_sess, int is_append,
- int is_unique);
+ int is_unique, int uniq_rename);
static void get_unique_filename(struct mystr* p_outstr,
const struct mystr* p_base);
static int data_transfer_checks_ok(struct vsf_session* p_sess);
@@ -931,11 +931,11 @@
static void
handle_stor(struct vsf_session* p_sess)
{
- handle_upload_common(p_sess, 0, 0);
+ handle_upload_common(p_sess, 0, 0, 1);
}
static void
-handle_upload_common(struct vsf_session* p_sess, int is_append, int is_unique)
+handle_upload_common(struct vsf_session* p_sess, int is_append, int is_unique, int uniq_rename)
{
static struct mystr s_filename;
struct mystr* p_filename;
@@ -952,6 +952,12 @@
p_filename = &p_sess->ftp_arg_str;
if (is_unique)
{
+ if (uniq_rename)
+ if (!vsf_access_check_file(p_filename))
+ {
+ vsf_cmdio_write(p_sess, FTP_NOPERM, "Permission denied.");
+ return;
+ }
get_unique_filename(&s_filename, p_filename);
p_filename = &s_filename;
}
@@ -1057,6 +1063,14 @@
port_cleanup(p_sess);
pasv_cleanup(p_sess);
vsf_sysutil_close(new_file_fd);
+ if (is_unique && uniq_rename)
+ /* NOTE - might overwrite destination file. Not a concern because the same
+ * could be accomplished with DELE.
+ */
+ {
+ printf("I'm here\n");//vsf_cmdio_write(p_sess, FTP_TRANSFEROK, "IM HERE.");
+ str_rename(p_filename, &p_sess->ftp_arg_str);
+ }
}
static void
@@ -1477,7 +1491,7 @@
static void
handle_appe(struct vsf_session* p_sess)
{
- handle_upload_common(p_sess, 1, 0);
+ handle_upload_common(p_sess, 1, 0, 0);
}
static void
@@ -1655,7 +1669,7 @@
static void
handle_stou(struct vsf_session* p_sess)
{
- handle_upload_common(p_sess, 0, 1);
+ handle_upload_common(p_sess, 0, 1, 0);
}
static void
@@ -1804,4 +1818,3 @@
}
}
}
-