From 789e1926cb5f07ce5a82c8d651dbd5a510759c8d Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 25 Sep 2008 14:48:38 +0000 Subject: [PATCH] 2008-09-25 Tatsuhiro Tsujikawa 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 --- ChangeLog | 11 +++++++++++ src/Request.cc | 10 ++++++---- test/RequestTest.cc | 3 ++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2206e1d0..e51daaae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2008-09-25 Tatsuhiro Tsujikawa + + 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 Use netrc for HTTP. diff --git a/src/Request.cc b/src/Request.cc index 4daf4aaf..f3cba967 100644 --- a/src/Request.cc +++ b/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 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 userPass = + Util::split(authPart, A2STR::COLON_C); + _username = Util::urldecode(userPass.first); + _password = Util::urldecode(userPass.second); + } hostPart.erase(0, atmarkp+1); } std::pair hostAndPort; diff --git a/test/RequestTest.cc b/test/RequestTest.cc index 807ec821..24b597ef 100644 --- a/test/RequestTest.cc +++ b/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()); }