From: Michael Yakubovich Date: Mon, 16 May 2011 20:09:35 +0000 (-0400) Subject: Fix bug2752 : 48-char HTTPProxyAuthenticator limitation X-Git-Tag: tor-0.2.2.27-beta~5^2~1^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3707a10529c3d90a06149cf0e4bcd28b7b1ab5b;p=thirdparty%2Ftor.git Fix bug2752 : 48-char HTTPProxyAuthenticator limitation Bumped the char maximum to 512 for HTTPProxyAuthenticator & HTTPSProxyAuthenticator. Now stripping all '\n' after base64 encoding in alloc_http_authenticator. --- diff --git a/changes/bug2752 b/changes/bug2752 new file mode 100644 index 0000000000..328f11e810 --- /dev/null +++ b/changes/bug2752 @@ -0,0 +1,5 @@ + o Minor bugfixes + - Tor used to limit HttpProxyAuthenticator values to 48 characters. + Changed the limit to 512 characters by removing base64 newlines. + Fixes bug 2917. + diff --git a/src/or/config.c b/src/or/config.c index 614fc48c3e..36a8940cab 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -3398,8 +3398,8 @@ options_validate(or_options_t *old_options, or_options_t *options, } if (options->HTTPProxyAuthenticator) { - if (strlen(options->HTTPProxyAuthenticator) >= 48) - REJECT("HTTPProxyAuthenticator is too long (>= 48 chars)."); + if (strlen(options->HTTPProxyAuthenticator) >= 512) + REJECT("HTTPProxyAuthenticator is too long (>= 512 chars)."); } if (options->HTTPSProxy) { /* parse it now */ @@ -3412,8 +3412,8 @@ options_validate(or_options_t *old_options, or_options_t *options, } if (options->HTTPSProxyAuthenticator) { - if (strlen(options->HTTPSProxyAuthenticator) >= 48) - REJECT("HTTPSProxyAuthenticator is too long (>= 48 chars)."); + if (strlen(options->HTTPSProxyAuthenticator) >= 512) + REJECT("HTTPSProxyAuthenticator is too long (>= 512 chars)."); } if (options->Socks4Proxy) { /* parse it now */ diff --git a/src/or/connection.c b/src/or/connection.c index 5054909df9..bcdde67568 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -3232,8 +3232,17 @@ alloc_http_authenticator(const char *authenticator) authenticator, authenticator_length) < 0) { tor_free(base64_authenticator); /* free and set to null */ } else { - /* remove extra \n at end of encoding */ - base64_authenticator[strlen(base64_authenticator) - 1] = 0; + int i = 0, j = 0; + int len = strlen(base64_authenticator); + + /* remove all newline occurrences within the string */ + for (i=0; i < len; ++i) { + if ('\n' != base64_authenticator[i]) { + base64_authenticator[j] = base64_authenticator[i]; + ++j; + } + } + base64_authenticator[j]='\0'; } return base64_authenticator; }