summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/directory.c18
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));