[tor-commits] [tor/master] Do not replace a HS descriptor with a different replica of itself
nickm at torproject.org
nickm at torproject.org
Sun Jan 18 20:49:47 UTC 2015
commit 9407040c592184e05e45a3c1a00739c2dd302288
Author: Roger Dingledine <arma at torproject.org>
Date: Sun Jan 18 15:39:12 2015 -0500
Do not replace a HS descriptor with a different replica of itself
This fixes a bug where we'd fetch different replicas of the same
descriptor for a down hidden service over and over, until we got lucky
and fetched the same replica twice in a row.
Fixes bug 14219; bugfix on 0.2.0.10-alpha.
(Patch from Roger; commit message and changes file by Nick.)
---
changes/bug14219 | 6 ++++++
src/or/rendcommon.c | 11 ++---------
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/changes/bug14219 b/changes/bug14219
new file mode 100644
index 0000000..9d845db
--- /dev/null
+++ b/changes/bug14219
@@ -0,0 +1,6 @@
+ o Minor bugfixes (hidden services):
+
+ - When fetching a hidden service descriptor for a down service that we
+ recently up, do not keep refetching until we try the same replica twice
+ in a row. Fixes bug 14219; bugfix on 0.2.0.10-alpha.
+
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index a664b5d..3d2b706 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -1146,19 +1146,12 @@ 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 newer service descriptor for "
+ if (e && e->parsed->timestamp >= parsed->timestamp) {
+ log_info(LD_REND, "We already have a new enough 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));
- e->received = time(NULL);
- goto okay;
- }
if (!e) {
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
strmap_set_lc(rend_cache, key, e);
More information about the tor-commits
mailing list