|
@@ -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) {
|