diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/or/rendclient.c | 20 |
2 files changed, 21 insertions, 2 deletions
@@ -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) { |