ftpserver.pl: Added the ability to remember what messages are deleted
authorSteve Holme <steve_holme@hotmail.com>
Wed, 11 Sep 2013 17:00:01 +0000 (18:00 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Wed, 11 Sep 2013 17:10:28 +0000 (18:10 +0100)
...as this will be required for IMAP CLOSE and EXPUNGE commands as well
as the POP3 RSET command.

tests/ftpserver.pl

index dc1c081..1c63a30 100755 (executable)
@@ -759,6 +759,9 @@ sub RCPT_smtp {
     $smtp_rcpt = $args;
 }
 
+# What was deleted by IMAP STORE / POP3 DELE commands
+my @deleted;
+
 ################
 ################ IMAP commands
 ################
@@ -965,7 +968,7 @@ sub APPEND_imap {
 
 sub STORE_imap {
     my ($args) = @_;
-    my ($uid, $what) = split(/ /, $args, 2);
+    my ($uid, $what, $value) = split(/ /, $args, 3);
     fix_imap_params($uid);
 
     logmsg "STORE_imap got $args\n";
@@ -973,11 +976,15 @@ sub STORE_imap {
     if ($selected eq "") {
         sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
     }
-    elsif (($uid eq "") || ($what eq "")) {
+    elsif (($uid eq "") || ($what ne "+Flags") || ($value eq "")) {
         sendcontrol "$cmdid BAD Command Argument\r\n";
     }
     else {
-        sendcontrol "* $uid FETCH (FLAGS (\\Seen \\Deleted))\r\n";
+        if($value eq "\\Deleted") {
+            push(@deleted, $uid);
+        }
+
+        sendcontrol "* $uid FETCH (FLAGS (\\Seen $value))\r\n";
         sendcontrol "$cmdid OK STORE completed\r\n";
     }
 
@@ -1345,6 +1352,8 @@ sub DELE_pop3 {
         sendcontrol "-ERR Protocol error\r\n";
     }
     else {
+        push (@deleted, $msg);
+
         sendcontrol "+OK\r\n";
     }
 
@@ -1448,6 +1457,12 @@ sub TOP_pop3 {
 }
 
 sub QUIT_pop3 {
+    if(@deleted) {
+        logmsg "deleting @deleted message(s)\n";
+
+        @deleted = ();
+    }
+
     sendcontrol "+OK byebye\r\n";
 
     return 0;