diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/or/directory.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/or/directory.c b/src/or/directory.c index 818c684e84..6f494ec3cf 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2639,27 +2639,19 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, connection_dir_is_encrypted(conn) && !strcmp(url,"/tor/networkstatus-bridges")) { char *status; - char decoded[64]; - char *secret; - int r; + char *secret = alloc_http_authenticator(options->BridgePassword); header = http_get_header(headers, "Authorization: Basic "); - if (!header) { - write_http_status_line(conn, 404, "Not found"); - goto done; - } - - /* now make sure the password is right */ - r = base64_decode(decoded, sizeof(decoded), header, strlen(header)); - secret = alloc_http_authenticator(options->BridgePassword); - if (r < 0 || (unsigned)r != strlen(secret) || memcmp(decoded, secret, r)) { - /* failed to decode, or didn't match. Refuse. */ + /* now make sure the password is there and right */ + if (!header || strcmp(header, secret)) { write_http_status_line(conn, 404, "Not found"); + tor_free(secret); tor_free(header); goto done; } tor_free(secret); + tor_free(header); /* all happy now. send an answer. */ status = networkstatus_getinfo_by_purpose("bridge", time(NULL)); |