summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-06-18 11:30:01 -0400
committerNick Mathewson <nickm@torproject.org>2015-06-18 11:30:01 -0400
commitf18ee7fc7287e9d5f55c7c6c2007a8a1c2466a3e (patch)
treec946de86995f219151437d39703de4e0b67bc3d4
parentc8cb55659acca96530a1d7f54bb96cac84626e17 (diff)
parent8acf5255c20c667f32313ee672c85f6ae00a4f87 (diff)
downloadtor-f18ee7fc7287e9d5f55c7c6c2007a8a1c2466a3e.tar.gz
tor-f18ee7fc7287e9d5f55c7c6c2007a8a1c2466a3e.zip
Merge remote-tracking branch 'dgoulet/bug16381_026_01-revert' into maint-0.2.6
-rw-r--r--changes/bug1638113
-rw-r--r--src/or/rendcommon.c10
2 files changed, 21 insertions, 2 deletions
diff --git a/changes/bug16381 b/changes/bug16381
new file mode 100644
index 0000000000..51a9b53007
--- /dev/null
+++ b/changes/bug16381
@@ -0,0 +1,13 @@
+ o Major bugfix (Hidden service client)
+ - Revert commit 9407040c592184e05e45a3c1a00739c2dd302288 of bug #14219
+ that indeed fixed an issue but introduced a major hidden service
+ reachability regression detailed in bug #16381. This is a temporary
+ fix since we can live with the minor issue in #14219 but the
+ regression introduced is too much of a set back.
+
+ To be clear, #14219 bug just results in some load on the network, and
+ some delay for the client when visiting a hidden service that will
+ ultimately fail.
+
+ This is only a bandaid for #16381 thus it does _not_ fixes it. bugfix
+ on tor-0.2.6.3-alpha~138.
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 5fdd13efce..6698f2feaf 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -1249,12 +1249,18 @@ rend_cache_store_v2_desc_as_client(const char *desc,
/* Do we already have a newer descriptor? */
tor_snprintf(key, sizeof(key), "2%s", service_id);
e = (rend_cache_entry_t*) strmap_get_lc(rend_cache, key);
- if (e && e->parsed->timestamp >= parsed->timestamp) {
- log_info(LD_REND, "We already have a new enough service descriptor for "
+ if (e && e->parsed->timestamp > parsed->timestamp) {
+ log_info(LD_REND, "We already have a newer service descriptor for "
"service ID %s with the same desc ID and version.",
safe_str_client(service_id));
goto okay;
}
+ /* Do we already have this descriptor? */
+ if (e && !strcmp(desc, e->desc)) {
+ log_info(LD_REND,"We already have this service descriptor %s.",
+ safe_str_client(service_id));
+ goto okay;
+ }
if (!e) {
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
strmap_set_lc(rend_cache, key, e);