diff options
author | teor (Tim Wilson-Brown) <teor2345@gmail.com> | 2016-05-09 14:29:07 -0400 |
---|---|---|
committer | teor (Tim Wilson-Brown) <teor2345@gmail.com> | 2016-05-09 14:29:07 -0400 |
commit | c2817774c28a40f76890b68775097596d14e035e (patch) | |
tree | 3c91c3c279a20818d48574b5fd940186466926b0 /src/or/router.c | |
parent | 0c41ae18329644828ff247b00a7f4e99e3f38312 (diff) | |
download | tor-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.c | 8 |
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(); } |