]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
rip out hid_serv_responsible_for_desc_id()
authorRoger Dingledine <arma@torproject.org>
Fri, 11 Mar 2016 15:40:31 +0000 (10:40 -0500)
committerRoger Dingledine <arma@torproject.org>
Fri, 11 Mar 2016 15:40:31 +0000 (10:40 -0500)
This simplifies relay behavior, because the relay offers the hsdir
functionality independent of whether the directory authorities have
decided this relay is suitable for clients to use yet.

Implements ticket 18332.

changes/ticket18332 [new file with mode: 0644]
src/or/rendcache.c
src/or/rendcommon.c
src/or/rendcommon.h
src/test/test_dir_handle_get.c
src/test/test_rendcache.c

diff --git a/changes/ticket18332 b/changes/ticket18332
new file mode 100644 (file)
index 0000000..6fb8118
--- /dev/null
@@ -0,0 +1,7 @@
+  o Removed features:
+    - Streamline relay-side hsdir handling: when relays consider whether
+      to accept an uploaded hidden service descriptor, they no longer
+      check whether directory authorities think they deserve the HSDir
+      flag, or whether they are one of the relays in the network that is
+      "supposed" to handle that descriptor. Implements ticket 18332.
+
index cb8c14b756df1d4ace07c170eb4cf53ebe90b5e5..6c22503e5387119a75b4f3b16791e9cc67b4c8bd 100644 (file)
@@ -483,8 +483,7 @@ rend_cache_clean_v2_descs_as_dir(time_t now, size_t force_remove)
       digestmap_iter_get(iter, &key, &val);
       ent = val;
       if (ent->parsed->timestamp < cutoff ||
-          ent->last_served < last_served_cutoff ||
-          !hid_serv_responsible_for_desc_id(key)) {
+          ent->last_served < last_served_cutoff) {
         char key_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
         base32_encode(key_base32, sizeof(key_base32), key, DIGEST_LEN);
         log_info(LD_REND, "Removing descriptor with ID '%s' from cache",
@@ -657,14 +656,6 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
     /* For pretty log statements. */
     base32_encode(desc_id_base32, sizeof(desc_id_base32),
                   desc_id, DIGEST_LEN);
-    /* Is desc ID in the range that we are (directly or indirectly) responsible
-     * for? */
-    if (!hid_serv_responsible_for_desc_id(desc_id)) {
-      log_info(LD_REND, "Service descriptor with desc ID %s is not in "
-               "interval that we are responsible for.",
-               safe_str_client(desc_id_base32));
-      goto skip;
-    }
     /* Is descriptor too old? */
     if (parsed->timestamp < now - REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
       log_info(LD_REND, "Service descriptor with desc ID %s is too old.",
index 79509cbe2f317d275169feea0b94b4e6c5908d3f..f1fb0d934c1d36cdff3811f5c672d214eb5fa45a 100644 (file)
@@ -983,29 +983,3 @@ hid_serv_acting_as_directory(void)
   return 1;
 }
 
-/** Return true if this node is responsible for storing the descriptor ID
- * in <b>query</b> and false otherwise. */
-MOCK_IMPL(int, hid_serv_responsible_for_desc_id,
-          (const char *query))
-{
-  const routerinfo_t *me;
-  routerstatus_t *last_rs;
-  const char *my_id, *last_id;
-  int result;
-  smartlist_t *responsible;
-  if (!hid_serv_acting_as_directory())
-    return 0;
-  if (!(me = router_get_my_routerinfo()))
-    return 0; /* This is redundant, but let's be paranoid. */
-  my_id = me->cache_info.identity_digest;
-  responsible = smartlist_new();
-  if (hid_serv_get_responsible_directories(responsible, query) < 0) {
-    smartlist_free(responsible);
-    return 0;
-  }
-  last_rs = smartlist_get(responsible, smartlist_len(responsible)-1);
-  last_id = last_rs->identity_digest;
-  result = rend_id_is_in_interval(my_id, query, last_id);
-  smartlist_free(responsible);
-  return result;
-}
index fe452995989aa8746fe88d2ecd8f449217cab68b..b3ae79051891a6249e3df4108a7c7d364193f554 100644 (file)
@@ -60,7 +60,6 @@ void rend_get_descriptor_id_bytes(char *descriptor_id_out,
 int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
                                                                         const char *id);
 int hid_serv_acting_as_directory(void);
-MOCK_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
 
 rend_data_t *rend_data_dup(const rend_data_t *data);
 rend_data_t *rend_data_client_create(const char *onion_address,
index 954830dcafc7e741933258b7f934d9f489fc514e..67bd840baf8ee3530f947596eccd03cbeef6b4da 100644 (file)
@@ -389,10 +389,8 @@ test_dir_handle_get_rendezvous2_not_found(void *data)
 }
 
 NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
-NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
 
 static routerinfo_t *mock_routerinfo;
-static int hid_serv_responsible_for_desc_id_response;
 
 static const routerinfo_t *
 NS(router_get_my_routerinfo)(void)
@@ -404,13 +402,6 @@ NS(router_get_my_routerinfo)(void)
   return mock_routerinfo;
 }
 
-static int
-NS(hid_serv_responsible_for_desc_id)(const char *id)
-{
-  (void)id;
-  return hid_serv_responsible_for_desc_id_response;
-}
-
 static void
 test_dir_handle_get_rendezvous2_on_encrypted_conn_success(void *data)
 {
@@ -428,10 +419,8 @@ test_dir_handle_get_rendezvous2_on_encrypted_conn_success(void *data)
 
   MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock);
   NS_MOCK(router_get_my_routerinfo);
-  NS_MOCK(hid_serv_responsible_for_desc_id);
 
   rend_cache_init();
-  hid_serv_responsible_for_desc_id_response = 1;
 
   /* create a valid rend service descriptor */
   #define RECENT_TIME -10
@@ -473,7 +462,6 @@ test_dir_handle_get_rendezvous2_on_encrypted_conn_success(void *data)
   done:
     UNMOCK(connection_write_to_buf_impl_);
     NS_UNMOCK(router_get_my_routerinfo);
-    NS_UNMOCK(hid_serv_responsible_for_desc_id);
     tor_free(mock_routerinfo->cache_info.signed_descriptor_body);
     tor_free(mock_routerinfo);
 
index eaa8671af02fe4b5dc4f5fbf4a4d2e77f006b5f7..9898e87098f17cdbdd14bc696985e1ce662b6f66 100644 (file)
@@ -377,10 +377,8 @@ test_rend_cache_store_v2_desc_as_client_with_different_time(void *data)
 
 #define NS_SUBMODULE lookup_v2_desc_as_dir
 NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
-NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
 
 static routerinfo_t *mock_routerinfo;
-static int hid_serv_responsible_for_desc_id_response;
 
 static const routerinfo_t *
 NS(router_get_my_routerinfo)(void)
@@ -392,13 +390,6 @@ NS(router_get_my_routerinfo)(void)
   return mock_routerinfo;
 }
 
-static int
-NS(hid_serv_responsible_for_desc_id)(const char *id)
-{
-  (void)id;
-  return hid_serv_responsible_for_desc_id_response;
-}
-
 static void
 test_rend_cache_lookup_v2_desc_as_dir(void *data)
 {
@@ -411,7 +402,6 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
   (void)data;
 
   NS_MOCK(router_get_my_routerinfo);
-  NS_MOCK(hid_serv_responsible_for_desc_id);
 
   rend_cache_init();
 
@@ -425,7 +415,6 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
   tt_int_op(ret, OP_EQ, 0);
 
   // Test existing descriptor
-  hid_serv_responsible_for_desc_id_response = 1;
   generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
   rend_cache_store_v2_desc_as_dir(desc_holder->desc_str);
   base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id,
@@ -436,7 +425,6 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
 
  done:
   NS_UNMOCK(router_get_my_routerinfo);
-  NS_UNMOCK(hid_serv_responsible_for_desc_id);
   tor_free(mock_routerinfo);
   rend_cache_free_all();
   rend_encoded_v2_service_descriptor_free(desc_holder);
@@ -447,7 +435,6 @@ test_rend_cache_lookup_v2_desc_as_dir(void *data)
 
 #define NS_SUBMODULE store_v2_desc_as_dir
 NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
-NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
 
 static const routerinfo_t *
 NS(router_get_my_routerinfo)(void)
@@ -455,13 +442,6 @@ NS(router_get_my_routerinfo)(void)
   return mock_routerinfo;
 }
 
-static int
-NS(hid_serv_responsible_for_desc_id)(const char *id)
-{
-  (void)id;
-  return hid_serv_responsible_for_desc_id_response;
-}
-
 static void
 test_rend_cache_store_v2_desc_as_dir(void *data)
 {
@@ -471,7 +451,6 @@ test_rend_cache_store_v2_desc_as_dir(void *data)
   char *service_id = NULL;
 
   NS_MOCK(router_get_my_routerinfo);
-  NS_MOCK(hid_serv_responsible_for_desc_id);
 
   rend_cache_init();
 
@@ -482,21 +461,10 @@ test_rend_cache_store_v2_desc_as_dir(void *data)
 
   // Test when we can't parse the descriptor
   mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
-  hid_serv_responsible_for_desc_id_response = 1;
   ret = rend_cache_store_v2_desc_as_dir("unparseable");
   tt_int_op(ret, OP_EQ, RCS_BADDESC);
 
-  // Test when we are not responsible for an HS
-  hid_serv_responsible_for_desc_id_response = 0;
-  generate_desc(RECENT_TIME, &desc_holder, &service_id, 3);
-  ret = rend_cache_store_v2_desc_as_dir(desc_holder->desc_str);
-  tt_int_op(ret, OP_EQ, RCS_OKAY);
-
-  rend_encoded_v2_service_descriptor_free(desc_holder);
-  tor_free(service_id);
-
   // Test when we have an old descriptor
-  hid_serv_responsible_for_desc_id_response = 1;
   generate_desc(TIME_IN_THE_PAST, &desc_holder, &service_id, 3);
   ret = rend_cache_store_v2_desc_as_dir(desc_holder->desc_str);
   tt_int_op(ret, OP_EQ, RCS_OKAY);
@@ -529,7 +497,6 @@ test_rend_cache_store_v2_desc_as_dir(void *data)
 
  done:
   NS_UNMOCK(router_get_my_routerinfo);
-  NS_UNMOCK(hid_serv_responsible_for_desc_id);
   rend_encoded_v2_service_descriptor_free(desc_holder);
   tor_free(service_id);
   rend_cache_free_all();
@@ -550,7 +517,6 @@ test_rend_cache_store_v2_desc_as_dir_with_different_time(void *data)
   rend_encoded_v2_service_descriptor_t *desc_holder_older;
 
   NS_MOCK(router_get_my_routerinfo);
-  NS_MOCK(hid_serv_responsible_for_desc_id);
 
   rend_cache_init();
 
@@ -577,7 +543,6 @@ test_rend_cache_store_v2_desc_as_dir_with_different_time(void *data)
 
   // Test when we have a newer descriptor stored
   mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
-  hid_serv_responsible_for_desc_id_response = 1;
   rend_cache_store_v2_desc_as_dir(desc_holder_newer->desc_str);
   ret = rend_cache_store_v2_desc_as_dir(desc_holder_older->desc_str);
   tt_int_op(ret, OP_EQ, RCS_OKAY);
@@ -590,7 +555,6 @@ test_rend_cache_store_v2_desc_as_dir_with_different_time(void *data)
 
  done:
   NS_UNMOCK(router_get_my_routerinfo);
-  NS_UNMOCK(hid_serv_responsible_for_desc_id);
   rend_cache_free_all();
   rend_service_descriptor_free(generated);
   tor_free(service_id);
@@ -616,7 +580,6 @@ test_rend_cache_store_v2_desc_as_dir_with_different_content(void *data)
   rend_encoded_v2_service_descriptor_t *desc_holder_two = NULL;
 
   NS_MOCK(router_get_my_routerinfo);
-  NS_MOCK(hid_serv_responsible_for_desc_id);
 
   rend_cache_init();
 
@@ -645,14 +608,12 @@ test_rend_cache_store_v2_desc_as_dir_with_different_content(void *data)
 
   // Test when we have another descriptor stored, with a different descriptor
   mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
-  hid_serv_responsible_for_desc_id_response = 1;
   rend_cache_store_v2_desc_as_dir(desc_holder_one->desc_str);
   ret = rend_cache_store_v2_desc_as_dir(desc_holder_two->desc_str);
   tt_int_op(ret, OP_EQ, RCS_OKAY);
 
  done:
   NS_UNMOCK(router_get_my_routerinfo);
-  NS_UNMOCK(hid_serv_responsible_for_desc_id);
   rend_cache_free_all();
   rend_service_descriptor_free(generated);
   tor_free(service_id);
@@ -1113,14 +1074,6 @@ test_rend_cache_intro_failure_note(void *data)
 }
 
 #define NS_SUBMODULE clean_v2_descs_as_dir
-NS_DECL(int, hid_serv_responsible_for_desc_id, (const char *id));
-
-static int
-NS(hid_serv_responsible_for_desc_id)(const char *id)
-{
-  (void)id;
-  return hid_serv_responsible_for_desc_id_response;
-}
 
 static void
 test_rend_cache_clean_v2_descs_as_dir(void *data)
@@ -1133,7 +1086,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
 
   (void)data;
 
-  NS_MOCK(hid_serv_responsible_for_desc_id);
   rend_cache_init();
 
   // Test running with an empty cache
@@ -1149,7 +1101,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
   e->parsed = desc;
   digestmap_set(rend_cache_v2_dir, key, e);
 
-  hid_serv_responsible_for_desc_id_response = 1;
   rend_cache_clean_v2_descs_as_dir(now, 0);
   tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1);
 
@@ -1158,20 +1109,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
   rend_cache_clean_v2_descs_as_dir(now, 0);
   tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
 
-  // Test with one entry that is not under the responsibility of this
-  // hidden service
-  e = tor_malloc_zero(sizeof(rend_cache_entry_t));
-  e->last_served = now;
-  desc = tor_malloc_zero(sizeof(rend_service_descriptor_t));
-  desc->timestamp = now;
-  desc->pk = pk_generate(0);
-  e->parsed = desc;
-  digestmap_set(rend_cache_v2_dir, key, e);
-
-  hid_serv_responsible_for_desc_id_response = 0;
-  rend_cache_clean_v2_descs_as_dir(now, 0);
-  tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
-
   // Test with one entry that has an old last served
   e = tor_malloc_zero(sizeof(rend_cache_entry_t));
   e->last_served = now - (REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW + 1000);
@@ -1181,7 +1118,6 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
   e->parsed = desc;
   digestmap_set(rend_cache_v2_dir, key, e);
 
-  hid_serv_responsible_for_desc_id_response = 1;
   rend_cache_clean_v2_descs_as_dir(now, 0);
   tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0);
 
@@ -1194,12 +1130,10 @@ test_rend_cache_clean_v2_descs_as_dir(void *data)
   e->parsed = desc;
   digestmap_set(rend_cache_v2_dir, key, e);
 
-  hid_serv_responsible_for_desc_id_response = 1;
   rend_cache_clean_v2_descs_as_dir(now, 20000);
   tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1);
 
  done:
-  NS_UNMOCK(hid_serv_responsible_for_desc_id);
   rend_cache_free_all();
 }