diff options
author | Nick Mathewson <nickm@torproject.org> | 2015-06-18 11:33:24 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-06-18 11:33:24 -0400 |
commit | 583a387c1ea855c0b063f14c382b2cedcdc3dc08 (patch) | |
tree | 484d0035e7cf5f7e8e1796fab53228a4cadb2962 | |
parent | c2c23d1443ba69d356a11303071e4ea5723ba1b6 (diff) | |
parent | f18ee7fc7287e9d5f55c7c6c2007a8a1c2466a3e (diff) | |
download | tor-583a387c1ea855c0b063f14c382b2cedcdc3dc08.tar.gz tor-583a387c1ea855c0b063f14c382b2cedcdc3dc08.zip |
Merge remote-tracking branch 'origin/maint-0.2.6'
-rw-r--r-- | changes/bug16381 | 13 | ||||
-rw-r--r-- | src/or/rendcommon.c | 10 |
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 0acca58713..13d21802b5 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -1289,12 +1289,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); |