]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
r17246@catbus: nickm | 2007-12-18 18:45:17 -0500
authorNick Mathewson <nickm@torproject.org>
Tue, 18 Dec 2007 23:45:24 +0000 (23:45 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 18 Dec 2007 23:45:24 +0000 (23:45 +0000)
 Fix some xxx020 items.

svn:r12864

ChangeLog
src/or/directory.c
src/or/dirvote.c
src/or/main.c
src/or/or.h
src/or/router.c
src/or/routerlist.c

index b34ef3086da3f8fd5288a3d720efb27424336253..361c0aaecd78f9e195095f4b4803989c8d62b41c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -76,6 +76,8 @@ Changes in version 0.2.0.13-alpha - 2007-12-??
       in really weird results on platforms whose sys/types.h files define
       nonstandard integer types.
     - Fix compilation with --disable-threads set.
+    - Authorities decide whether they're authoritative for a given router
+      based on the router's purpose.
 
   o Minor features:
     - On USR1, when dmalloc is in use, log the top 10 memory
index b211414137140ec95d6ef1afc2917a6ac9a12395..02c411d499f67a0430f7a4a745d03724915b785b 100644 (file)
@@ -2703,7 +2703,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
     return 0;
   }
 
-  if (authdir_mode_handles_descs(options) &&
+  if (authdir_mode_handles_descs(options, -1) &&
       !strcmp(url,"/tor/")) { /* server descriptor post */
     const char *msg = NULL;
     uint8_t purpose = authdir_mode_bridge(options) ?
index 9734880f6301b55748800a8a327c99b81acd3ae0..7201af804addad6122c2458e08ec699533f0fd15 100644 (file)
@@ -46,8 +46,10 @@ format_networkstatus_vote(crypto_pk_env_t *private_signing_key,
    MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \
    5*2 /* ports */ + 10 /* punctuation */ +                             \
    /* second line */                                                    \
-   (LONGEST_STATUS_FLAG_NAME_LEN+1)*N_STATUS_FLAGS + 2)
-/* XXX020 RS_ENTRY_LEN should probably include space for v lines */
+   (LONGEST_STATUS_FLAG_NAME_LEN+1)*N_STATUS_FLAGS + 2 +                \
+   /* v line.  XXXX020 not accurate! */                                 \
+   80                                                                   \
+   )
 
   size_t len;
   char *status = NULL;
index 6aaa4c45e04f9223a04a615e19b738fb62fc17ef..620edad426c531ac82edb6d0b2a4617eeea25566 100644 (file)
@@ -1295,7 +1295,7 @@ do_hup(void)
     return -1;
   }
   options = get_options(); /* they have changed now */
-  if (authdir_mode_handles_descs(options)) {
+  if (authdir_mode_handles_descs(options, -1)) {
     /* reload the approved-routers file */
     if (dirserv_load_fingerprint_file() < 0) {
       /* warnings are logged from dirserv_load_fingerprint_file() directly */
index a59e7459b27dc20ea7df8d6700ab9eaba2aef051..682d83d019660e2464be9e397d95bdfd7464e5d0 100644 (file)
@@ -3718,7 +3718,7 @@ int authdir_mode(or_options_t *options);
 int authdir_mode_v1(or_options_t *options);
 int authdir_mode_v2(or_options_t *options);
 int authdir_mode_v3(or_options_t *options);
-int authdir_mode_handles_descs(or_options_t *options);
+int authdir_mode_handles_descs(or_options_t *options, int purpose);
 int authdir_mode_publishes_statuses(or_options_t *options);
 int authdir_mode_tests_reachability(or_options_t *options);
 int authdir_mode_bridge(or_options_t *options);
index 779e54e357b0d3cf836badd3fbe2bc4216c84409..2cacb5f031c085b844f77b2772f76a8ca0b0bdd8 100644 (file)
@@ -834,13 +834,22 @@ authdir_mode_any_nonhidserv(or_options_t *options)
      options->V2AuthoritativeDir ||
      options->V3AuthoritativeDir);
 }
-/** Return true iff we are an authoritative directory server that
- * is willing to receive or serve descriptors on its dirport.
- */
+/** Return true iff we are an authoritative directory server that is
+ * authoritative about receiving and serving descriptors of type
+ * <b>purpose</b> its dirport.  Use -1 for "any purpose". */
 int
-authdir_mode_handles_descs(or_options_t *options)
-{
-  return authdir_mode_any_nonhidserv(options);
+authdir_mode_handles_descs(or_options_t *options, int purpose)
+{
+  if (purpose < 0)
+    return authdir_mode_any_nonhidserv(options);
+  else if (purpose == ROUTER_PURPOSE_GENERAL)
+    return (options->V1AuthoritativeDir ||
+            options->V2AuthoritativeDir ||
+            options->V3AuthoritativeDir);
+  else if (purpose == ROUTER_PURPOSE_BRIDGE)
+    return (options->BridgeAuthoritativeDir);
+  else
+    return 0;
 }
 /** Return true iff we are an authoritative directory server that
  * publishes its own network statuses.
@@ -858,7 +867,7 @@ authdir_mode_publishes_statuses(or_options_t *options)
 int
 authdir_mode_tests_reachability(or_options_t *options)
 {
-  return authdir_mode_handles_descs(options);
+  return authdir_mode_handles_descs(options, -1);
 }
 /** Return true iff we believe ourselves to be a bridge authoritative
  * directory server.
index e96aa2afeffc509d5a1227e571b9e92e7ff33488..a9a43c9ba3f9b52e3365b837053d788001fdfb6b 100644 (file)
@@ -2624,7 +2624,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
                          int from_cache, int from_fetch)
 {
   const char *id_digest;
-  int authdir = authdir_mode(get_options());
+  int authdir = authdir_mode_handles_descs(get_options(), router->purpose);
   int authdir_believes_valid = 0;
   routerinfo_t *old_router;
   networkstatus_vote_t *consensus = networkstatus_get_latest_consensus();
@@ -2706,7 +2706,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
   }
 
   if (router->purpose == ROUTER_PURPOSE_GENERAL &&
-      consensus && !in_consensus && !authdir_mode(get_options())) {
+      consensus && !in_consensus && !authdir) {
     /* If it's a general router not listed in the consensus, then don't
      * consider replacing the latest router with it. */
     if (!from_cache && should_cache_old_descriptors())
@@ -3830,9 +3830,8 @@ update_consensus_router_descriptor_downloads(time_t now)
       smartlist_add(downloadable, rs->descriptor_digest);
     });
 
-  if (!authdir_mode_handles_descs(options) && smartlist_len(no_longer_old)) {
-    /* XXX020 Nick: where do authorities decide never to put stuff in old?
-     * We should make sure bridge descriptors do that too. */
+  if (!authdir_mode_handles_descs(options, ROUTER_PURPOSE_GENERAL)
+      && smartlist_len(no_longer_old)) {
     routerlist_t *rl = router_get_routerlist();
     log_info(LD_DIR, "%d router descriptors listed in consensus are "
              "currently in old_routers; making them current.",