[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r12864: Fix some xxx020 items. (in tor/trunk: . src/or)



Author: nickm
Date: 2007-12-18 18:45:24 -0500 (Tue, 18 Dec 2007)
New Revision: 12864

Modified:
   tor/trunk/
   tor/trunk/ChangeLog
   tor/trunk/src/or/directory.c
   tor/trunk/src/or/dirvote.c
   tor/trunk/src/or/main.c
   tor/trunk/src/or/or.h
   tor/trunk/src/or/router.c
   tor/trunk/src/or/routerlist.c
Log:
 r17246@catbus:  nickm | 2007-12-18 18:45:17 -0500
 Fix some xxx020 items.



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r17246] on 8246c3cf-6607-4228-993b-4d95d33730f1

Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/ChangeLog	2007-12-18 23:45:24 UTC (rev 12864)
@@ -76,6 +76,8 @@
       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

Modified: tor/trunk/src/or/directory.c
===================================================================
--- tor/trunk/src/or/directory.c	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/directory.c	2007-12-18 23:45:24 UTC (rev 12864)
@@ -2703,7 +2703,7 @@
     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) ?

Modified: tor/trunk/src/or/dirvote.c
===================================================================
--- tor/trunk/src/or/dirvote.c	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/dirvote.c	2007-12-18 23:45:24 UTC (rev 12864)
@@ -46,8 +46,10 @@
    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;

Modified: tor/trunk/src/or/main.c
===================================================================
--- tor/trunk/src/or/main.c	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/main.c	2007-12-18 23:45:24 UTC (rev 12864)
@@ -1295,7 +1295,7 @@
     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 */

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/or.h	2007-12-18 23:45:24 UTC (rev 12864)
@@ -3718,7 +3718,7 @@
 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);

Modified: tor/trunk/src/or/router.c
===================================================================
--- tor/trunk/src/or/router.c	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/router.c	2007-12-18 23:45:24 UTC (rev 12864)
@@ -834,13 +834,22 @@
      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)
+authdir_mode_handles_descs(or_options_t *options, int purpose)
 {
-  return authdir_mode_any_nonhidserv(options);
+  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 @@
 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.

Modified: tor/trunk/src/or/routerlist.c
===================================================================
--- tor/trunk/src/or/routerlist.c	2007-12-18 23:45:19 UTC (rev 12863)
+++ tor/trunk/src/or/routerlist.c	2007-12-18 23:45:24 UTC (rev 12864)
@@ -2624,7 +2624,7 @@
                          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 @@
   }
 
   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 @@
       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.",