Explorar el Código

Fix more of bug 997.

Fix refetching of hidden service descriptors when all introduction points
have turned out to not work.
Karsten Loesing hace 15 años
padre
commit
ca8708a9ce
Se han modificado 3 ficheros con 10 adiciones y 4 borrados
  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;
 }