aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-02-15 16:29:43 -0500
committerNick Mathewson <nickm@torproject.org>2013-02-15 16:29:43 -0500
commit73182e322022611f8593af7b7ea141b96e8692ea (patch)
tree7c3b6f0077bb36cafa0633b80c1317fe4c6197cb
parentd6634001c9063323643e3ddfe8905c250a6d60d7 (diff)
parentf12fafac5a6ab02fa2544eafef8dead847f7353e (diff)
downloadtor-73182e322022611f8593af7b7ea141b96e8692ea.tar.gz
tor-73182e322022611f8593af7b7ea141b96e8692ea.zip
Merge remote-tracking branch 'public/bug8207'
-rw-r--r--changes/bug82077
-rw-r--r--src/or/rendservice.c12
2 files changed, 10 insertions, 9 deletions
diff --git a/changes/bug8207 b/changes/bug8207
new file mode 100644
index 0000000000..0028d3380f
--- /dev/null
+++ b/changes/bug8207
@@ -0,0 +1,7 @@
+ o Major bugfixes (hidden services):
+ - Allow hidden service authentication to succeed again. When we
+ refactored the hidden service introduction code back in 0.2.4.1-alpha,
+ we didn't update the code that checks whether authentication
+ information is present, causing all authentication checks to
+ return "false". Fix for bug 8207; bugfix on 0.2.4.1-alpha. Found by
+ Coverity; this is CID 718615.
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 10d232c039..a066e02024 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -1119,11 +1119,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
crypt_path_t *cpath = NULL;
char hexcookie[9];
int circ_needs_uptime;
- char intro_key_digest[DIGEST_LEN];
- size_t auth_len = 0;
- char auth_data[REND_DESC_COOKIE_LEN];
time_t now = time(NULL);
- char diffie_hellman_hash[DIGEST_LEN];
time_t elapsed;
int replay;
@@ -1296,8 +1292,9 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
/* If the service performs client authorization, check included auth data. */
if (service->clients) {
- if (auth_len > 0) {
- if (rend_check_authorization(service, auth_data)) {
+ if (parsed_req->version == 3 && parsed_req->u.v3.auth_len > 0) {
+ if (rend_check_authorization(service,
+ (const char*)parsed_req->u.v3.auth_data)) {
log_info(LD_REND, "Authorization data in INTRODUCE2 cell are valid.");
} else {
log_info(LD_REND, "The authorization data that are contained in "
@@ -1410,9 +1407,6 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
memwipe(buf, 0, sizeof(buf));
memwipe(serviceid, 0, sizeof(serviceid));
memwipe(hexcookie, 0, sizeof(hexcookie));
- memwipe(intro_key_digest, 0, sizeof(intro_key_digest));
- memwipe(auth_data, 0, sizeof(auth_data));
- memwipe(diffie_hellman_hash, 0, sizeof(diffie_hellman_hash));
/* Free the parsed cell */
if (parsed_req) {