77 lines
2.2 KiB
Diff
77 lines
2.2 KiB
Diff
--- 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 @@
|
|
}
|
|
}
|
|
}
|
|
-
|