summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--src/Request.cc10
-rw-r--r--test/RequestTest.cc3
3 files changed, 19 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 2206e1d0..e51daaae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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.
Now FTP user/password is sent in Authorization header when
--ftp-via-http-proxy=get is given.
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<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;
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());
}