From a55db465eca2c4d9f0cb6f36640ee6a70634052d Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 27 Jun 2016 10:54:26 +0200 Subject: methods/ftp: Cope with weird PASV responses 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 (cherry picked from commit 25a694165ae46c159e0d91bf0b27717f00dbc66e) --- methods/ftp.cc | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'methods') diff --git a/methods/ftp.cc b/methods/ftp.cc index a8bc95938..edb758a81 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -498,12 +498,25 @@ bool FTPConn::GoPasv() // 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; - 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 -- cgit v1.2.3