Blob Blame History Raw
--- 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 @@
     }
   }
 }
-