Przeglądaj źródła

Merge branch 'bug4438-v2'

Nick Mathewson 12 lat temu
rodzic
commit
461771ebbc
2 zmienionych plików z 22 dodań i 4 usunięć
  1. 6 0
      changes/bug4438
  2. 16 4
      src/or/router.c

+ 6 - 0
changes/bug4438

@@ -0,0 +1,6 @@
+  o Minor bugfixes:
+    - Fix a dirauth-only exit on sighup that could happen during some
+      configuration state transitions. We now don't treat it as a fatal
+      error when the new descriptor we just generated in init_keys
+      isn't accepted. Fixes bug 4438; bugfix on 0.2.1.9-alpha.
+

+ 16 - 4
src/or/router.c

@@ -651,15 +651,27 @@ init_keys(void)
       return -1;
     }
     if (mydesc) {
+      was_router_added_t added;
       ri = router_parse_entry_from_string(mydesc, NULL, 1, 0, NULL);
       if (!ri) {
         log_err(LD_GENERAL,"Generated a routerinfo we couldn't parse.");
         return -1;
       }
-      if (!WRA_WAS_ADDED(dirserv_add_descriptor(ri, &m, "self"))) {
-        log_err(LD_GENERAL,"Unable to add own descriptor to directory: %s",
-                m?m:"<unknown error>");
-        return -1;
+      added = dirserv_add_descriptor(ri, &m, "self");
+      if (!WRA_WAS_ADDED(added)) {
+        if (!WRA_WAS_OUTDATED(added)) {
+          log_err(LD_GENERAL, "Unable to add own descriptor to directory: %s",
+                  m?m:"<unknown error>");
+          return -1;
+        } else {
+          /* If the descriptor was outdated, that's ok. This can happen
+           * when some config options are toggled that affect workers, but
+           * we don't really need new keys yet so the descriptor doesn't
+           * change and the old one is still fresh. */
+          log_info(LD_GENERAL, "Couldn't add own descriptor to directory "
+                   "after key init: %s. This is usually not a problem.",
+                   m?m:"<unknown error>");
+        }
       }
     }
   }