summaryrefslogtreecommitdiff
path: root/src/or/router.c
diff options
context:
space:
mode:
authorteor (Tim Wilson-Brown) <teor2345@gmail.com>2016-05-09 14:29:07 -0400
committerteor (Tim Wilson-Brown) <teor2345@gmail.com>2016-05-09 14:29:07 -0400
commitc2817774c28a40f76890b68775097596d14e035e (patch)
tree3c91c3c279a20818d48574b5fd940186466926b0 /src/or/router.c
parent0c41ae18329644828ff247b00a7f4e99e3f38312 (diff)
downloadtor-c2817774c28a40f76890b68775097596d14e035e.tar.gz
tor-c2817774c28a40f76890b68775097596d14e035e.zip
Allow directories in small networks to bootstrap
Skip DirPort checks when the consensus has no exits. Resolves #19003, bugfix on #18050 in 0.2.8.1-alpha.
Diffstat (limited to 'src/or/router.c')
-rw-r--r--src/or/router.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/or/router.c b/src/or/router.c
index 68bcf1326e..dd8421094d 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1551,6 +1551,8 @@ proxy_mode(const or_options_t *options)
* and
* - We believe both our ORPort and DirPort (if present) are reachable from
* the outside; or
+ * - We believe both our ORPort is reachable from the outside, and we can't
+ * check our DirPort because the consensus has no exits; or
* - We are an authoritative directory server.
*/
static int
@@ -1568,7 +1570,13 @@ decide_if_publishable_server(void)
return 1;
if (!router_get_advertised_or_port(options))
return 0;
+ /* If there are no exits in the consensus, but have enough descriptors to
+ * build internal paths, we can't possibly verify our DirPort.
+ * This only happens in small networks without exits. */
+ if (router_have_consensus_path() == CONSENSUS_PATH_INTERNAL)
+ return check_whether_orport_reachable();
+ /* If there are exits in the consensus, use an exit to check our DirPort. */
return check_whether_orport_reachable() && check_whether_dirport_reachable();
}