imap-tests: Accept quoted parameters in ftpserver.pl
authorJiri Hruska <jirka@fud.cz>
Sun, 10 Mar 2013 19:29:31 +0000 (20:29 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 10 Mar 2013 19:34:30 +0000 (19:34 +0000)
Any IMAP parameter can come in escaped and in double quotes. Added a
simple function to unquote the command parameters and applied it to
the IMAP command handlers.

tests/ftpserver.pl

index b696ab7..7900dcd 100755 (executable)
@@ -762,6 +762,14 @@ my $cmdid;
 # what was picked by SELECT
 my $selected;
 
+# Any IMAP parameter can come in escaped and in double quotes.
+# This function is dumb (so far) and just removes the quotes if present.
+sub fix_imap_params {
+    foreach (@_) {
+        $_ = $1 if /^"(.*)"$/;
+    }
+}
+
 sub CAPABILITY_imap {
     my ($testno) = @_;
     my $data;
@@ -785,6 +793,7 @@ sub CAPABILITY_imap {
 
 sub SELECT_imap {
     my ($testno) = @_;
+    fix_imap_params($testno);
 
     logmsg "SELECT_imap got test $testno\n";
 
@@ -808,10 +817,11 @@ sub FETCH_imap {
     my ($uid, $how) = split(/ /, $args, 2);
     my @data;
     my $size;
+    fix_imap_params($uid, $how);
 
     logmsg "FETCH_imap got $args\n";
 
-    if($selected =~ /^verifiedserver$/) {
+    if($selected eq "verifiedserver") {
         # this is the secret command that verifies that this actually is
         # the curl test server
         my $response = "WE ROOLZ: $$\r\n";
@@ -861,6 +871,7 @@ sub APPEND_imap {
 
     $args =~ /^([^ ]+) [^{]*\{(\d+)\}$/;
     my ($folder, $size) = ($1, $2);
+    fix_imap_params($folder);
 
     sendcontrol "+ Ready for literal data\r\n";
 
@@ -928,6 +939,7 @@ sub APPEND_imap {
 sub STORE_imap {
     my ($args) = @_;
     my ($uid, $what) = split(/ /, $args, 2);
+    fix_imap_params($uid);
 
     logmsg "STORE_imap got $args\n";
 
@@ -941,10 +953,11 @@ sub LIST_imap {
     my ($args) = @_;
     my ($reference, $mailbox) = split(/ /, $args, 2);
     my @data;
+    fix_imap_params($reference, $mailbox);
 
     logmsg "LIST_imap got $args\n";
 
-    if ($reference eq '"verifiedserver"') {
+    if ($reference eq "verifiedserver") {
          # this is the secret command that verifies that this actually is
          # the curl test server
          @data = ("* LIST () \"/\" \"WE ROOLZ: $$\"\r\n");