]> git.saurik.com Git - apt.git/commitdiff
methods/ftp: Cope with weird PASV responses
authorJulian Andres Klode <jak@debian.org>
Mon, 27 Jun 2016 08:54:26 +0000 (10:54 +0200)
committerJulian Andres Klode <jak@debian.org>
Mon, 27 Jun 2016 08:58:29 +0000 (10:58 +0200)
wu-ftpd sends the response without parens, whereas we expect
them.

I did not test the patch, but it should work. I added another
return true if Pos is still npos after the second find to make
sure we don't add npos to the string.

Thanks: Lukasz Stelmach for the initial patch
Closes: #420940
methods/ftp.cc

index 6a886dd19e0229f54bcf03675e6b9c869f22e79c..dbc5f25d190da2e87194877b1a316b36451de2ae 100644 (file)
@@ -497,12 +497,25 @@ bool FTPConn::GoPasv()
    
    // Unsupported function
    string::size_type Pos = Msg.find('(');
    
    // Unsupported function
    string::size_type Pos = Msg.find('(');
-   if (Tag >= 400 || Pos == string::npos)
+   if (Tag >= 400)
+      return true;
+
+   //wu-2.6.2(1) ftp server, returns
+   //227 Entering Passive Mode 193,219,28,140,150,111
+   //without parentheses, let's try to cope with it.
+   //wget(1) and ftp(1) can.
+   if (Pos == string::npos)
+      Pos = Msg.rfind(' ');
+   else
+      ++Pos;
+
+   // Still unsupported function
+   if (Pos == string::npos)
       return true;
 
    // Scan it
    unsigned a0,a1,a2,a3,p0,p1;
       return true;
 
    // Scan it
    unsigned a0,a1,a2,a3,p0,p1;
-   if (sscanf(Msg.c_str() + Pos,"(%u,%u,%u,%u,%u,%u)",&a0,&a1,&a2,&a3,&p0,&p1) != 6)
+   if (sscanf(Msg.c_str() + Pos,"%u,%u,%u,%u,%u,%u",&a0,&a1,&a2,&a3,&p0,&p1) != 6)
       return true;
    
    /* Some evil servers return 0 to mean their addr. We can actually speak
       return true;
    
    /* Some evil servers return 0 to mean their addr. We can actually speak