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.
This commit is contained in:
Michael Yakubovich 2011-05-16 16:09:35 -04:00
parent e908e3a332
commit a3707a1052
3 changed files with 20 additions and 6 deletions

5
changes/bug2752 Normal file
View File

@ -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.

View File

@ -3398,8 +3398,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
} }
if (options->HTTPProxyAuthenticator) { if (options->HTTPProxyAuthenticator) {
if (strlen(options->HTTPProxyAuthenticator) >= 48) if (strlen(options->HTTPProxyAuthenticator) >= 512)
REJECT("HTTPProxyAuthenticator is too long (>= 48 chars)."); REJECT("HTTPProxyAuthenticator is too long (>= 512 chars).");
} }
if (options->HTTPSProxy) { /* parse it now */ 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 (options->HTTPSProxyAuthenticator) {
if (strlen(options->HTTPSProxyAuthenticator) >= 48) if (strlen(options->HTTPSProxyAuthenticator) >= 512)
REJECT("HTTPSProxyAuthenticator is too long (>= 48 chars)."); REJECT("HTTPSProxyAuthenticator is too long (>= 512 chars).");
} }
if (options->Socks4Proxy) { /* parse it now */ if (options->Socks4Proxy) { /* parse it now */

View File

@ -3232,8 +3232,17 @@ alloc_http_authenticator(const char *authenticator)
authenticator, authenticator_length) < 0) { authenticator, authenticator_length) < 0) {
tor_free(base64_authenticator); /* free and set to null */ tor_free(base64_authenticator); /* free and set to null */
} else { } else {
/* remove extra \n at end of encoding */ int i = 0, j = 0;
base64_authenticator[strlen(base64_authenticator) - 1] = 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; return base64_authenticator;
} }