Pārlūkot izejas kodu

Don't build descriptors if ORPort auto is set and we have no OR listener

This situation can happen easily if you set 'ORPort auto' and
'AccountingMax'.  Doing so means that when you have no ORPort, you
won't be able to set an ORPort in a descriptor, so instead you would
just generate lots of invalid descriptors, freaking out all the time.

Possible fix for 3216; fix on 0.2.2.26-beta.
Nick Mathewson 14 gadi atpakaļ
vecāks
revīzija
95ac3ea594
2 mainītis faili ar 8 papildinājumiem un 0 dzēšanām
  1. 4 0
      changes/bug3216
  2. 4 0
      src/or/router.c

+ 4 - 0
changes/bug3216

@@ -0,0 +1,4 @@
+  o Major bugfixes:
+    - Don't try to build descriptors if "ORPort auto" is set and we
+      don't know our actual ORPort yet.  Fix for bug 3216; bugfix on
+      0.2.2.26-beta.

+ 4 - 0
src/or/router.c

@@ -802,6 +802,8 @@ decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port)
     return 0;
     return 0;
   if (!check_whether_dirport_reachable())
   if (!check_whether_dirport_reachable())
     return 0;
     return 0;
+  if (!router_get_advertised_dir_port(options))
+    return 0;
 
 
   /* Section two: reasons to publish or not publish that the user
   /* Section two: reasons to publish or not publish that the user
    * might find surprising. These are generally config options that
    * might find surprising. These are generally config options that
@@ -1136,6 +1138,8 @@ decide_if_publishable_server(void)
     return 0;
     return 0;
   if (authdir_mode(options))
   if (authdir_mode(options))
     return 1;
     return 1;
+  if (!router_get_advertised_or_port(options))
+    return 0;
 
 
   return check_whether_orport_reachable();
   return check_whether_orport_reachable();
 }
 }