Explorar o código

2008-09-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>

	Now colon is required for username and password in FTP URL, 
like:
	ftp://username:password@host.
	If colon is not there, aria2 don't parse it as a username. For 
example,
	aria2 don't retrieve username from ftp://username@host.
	This fix was made in order to login FTP server via 
non-transparent ftp
	proxy.
	* src/Request.cc
	* test/RequestTest.cc
Tatsuhiro Tsujikawa %!s(int64=17) %!d(string=hai) anos
pai
achega
789e1926cb
Modificáronse 3 ficheiros con 19 adicións e 5 borrados
  1. 11 0
      ChangeLog
  2. 6 4
      src/Request.cc
  3. 2 1
      test/RequestTest.cc

+ 11 - 0
ChangeLog

@@ -1,3 +1,14 @@
+2008-09-25  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
+
+	Now colon is required for username and password in FTP URL, like:
+	ftp://username:password@host.
+	If colon is not there, aria2 don't parse it as a username. For example,
+	aria2 don't retrieve username from ftp://username@host.
+	This fix was made in order to login FTP server via non-transparent ftp
+	proxy.
+	* src/Request.cc
+	* test/RequestTest.cc
+
 2008-09-25  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 
 	Use netrc for HTTP.

+ 6 - 4
src/Request.cc

@@ -136,10 +136,12 @@ bool Request::parseUrl(const std::string& url) {
   std::string::size_type atmarkp =  hostPart.find_last_of("@");
   if(atmarkp != std::string::npos) {
     std::string authPart = hostPart.substr(0, atmarkp);
-    std::pair<std::string, std::string> userPass =
-      Util::split(authPart, A2STR::COLON_C);
-    _username = Util::urldecode(userPass.first);
-    _password = Util::urldecode(userPass.second);
+    if(authPart.find(":") != std::string::npos) {
+      std::pair<std::string, std::string> userPass =
+	Util::split(authPart, A2STR::COLON_C);
+      _username = Util::urldecode(userPass.first);
+      _password = Util::urldecode(userPass.second);
+    }
     hostPart.erase(0, atmarkp+1);
   }
   std::pair<std::string, std::string> hostAndPort;

+ 2 - 1
test/RequestTest.cc

@@ -402,7 +402,8 @@ void RequestTest::testSetUrl_username()
   CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req.getHost());
   CPPUNIT_ASSERT_EQUAL(std::string("/download"), req.getDir());
   CPPUNIT_ASSERT_EQUAL(std::string("aria2-1.0.0.tar.bz2"), req.getFile());
-  CPPUNIT_ASSERT_EQUAL(std::string("aria2user"), req.getUsername());
+  // No ":" is foundin 'aria2user', so username and password is left blank.
+  CPPUNIT_ASSERT_EQUAL(std::string(""), req.getUsername());
   CPPUNIT_ASSERT_EQUAL(std::string(""), req.getPassword());
 }