Browse Source

Fix more of bug 997.

Fix refetching of hidden service descriptors when all introduction points
have turned out to not work.
Karsten Loesing 15 years ago
parent
commit
ca8708a9ce
3 changed files with 10 additions and 4 deletions
  1. 2 0
      ChangeLog
  2. 3 4
      src/or/rendclient.c
  3. 5 0
      src/or/rendcommon.c

+ 2 - 0
ChangeLog

@@ -19,6 +19,8 @@ Changes in version 0.2.2.1-alpha - 2009-??-??
       use a cached descriptor no matter how old it is and only fetch a new
       one when all introduction points fail. Fix for bug 997. Patch from
       Marcus Griep.
+    - Fix refetching of hidden service descriptors when all introduction
+      points have turned out to not work. Fixes more of bug 997.
 
   o Deprecated and removed features:
     - The controller no longer accepts the old obsolete "addr-mappings/"

+ 3 - 4
src/or/rendclient.c

@@ -447,10 +447,9 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
   return 1;
 }
 
-/** Start a connection to a hidden service directory to fetch a v2
- * rendezvous service descriptor for the base32-encoded service ID
- * <b>query</b>.
- */
+/** Unless we already have a descriptor for <b>rend_query</b> with at least
+ * one (possibly) working introduction point in it, start a connection to a
+ * hidden service directory to fetch a v2 rendezvous service descriptor. */
 void
 rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
 {

+ 5 - 0
src/or/rendcommon.c

@@ -911,6 +911,11 @@ rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
   }
   if (!*e)
     return 0;
+  tor_assert((*e)->parsed && (*e)->parsed->intro_nodes);
+  /* XXX022 hack for now, to return "not found" if there are no intro
+   * points remaining. See bug 997. */
+  if (smartlist_len((*e)->parsed->intro_nodes) == 0)
+    return 0;
   return 1;
 }