summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--src/or/rendclient.c20
2 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index dc0f3a2e35..55f0f2c95a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,9 @@ Changes in version 0.2.1.17-?? - 2009-??-??
our quotas recently. Fixes bug 1013; bugfix on 0.2.1.8-alpha.
- Do not cap bandwidths reported by directory authorities; they are
already adjusted to reflect reality.
+ - When we can't find an intro key for a v2 hidden service descriptor,
+ fall back to the v0 hidden service descriptor and log a bug message.
+ Workaround for bug1024.
o Major features:
- Clients now use the bandwidth values in the consensus, rather than
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 5b18a519b0..a5d7c1016e 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -94,8 +94,24 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
}
});
if (!intro_key) {
- log_warn(LD_BUG, "Internal error: could not find intro key.");
- goto err;
+ if (rend_cache_lookup_entry(introcirc->rend_data->onion_address,
+ 0, &entry) > 0) {
+ log_warn(LD_BUG, "We have both a v0 and a v2 rend desc for this "
+ "service. The v2 desc doesn't contain the introduction "
+ "point (and key) to send an INTRODUCE1/2 cell to this "
+ "introduction point. Assuming the introduction point "
+ "is for v0 rend clients and using the service key "
+ "from the v0 desc instead. (This is probably a bug, "
+ "because we shouldn't even have both a v0 and a v2 "
+ "descriptor for the same service.)");
+ /* See flyspray task 1024. */
+ intro_key = entry->parsed->pk;
+ } else {
+ log_warn(LD_BUG, "Internal error: could not find intro key; we "
+ "only have a v2 rend desc with %d intro points.",
+ smartlist_len(entry->parsed->intro_nodes));
+ goto err;
+ }
}
}
if (crypto_pk_get_digest(intro_key, payload)<0) {