summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-05-12 11:09:33 -0400
committerNick Mathewson <nickm@torproject.org>2016-05-12 11:09:33 -0400
commitce6f2d1c4da5125cdd4a69fcc4cd45f7c3d6ca8d (patch)
treebedfabdf643926c0810a19b3bdb4cbb354a399f8
parentd00d3f1c2858f71adfa315ee67d0c2191a793d2a (diff)
parentb8b5bccfd9f350cd796a8bcd6b79b9d303a79e11 (diff)
downloadtor-ce6f2d1c4da5125cdd4a69fcc4cd45f7c3d6ca8d.tar.gz
tor-ce6f2d1c4da5125cdd4a69fcc4cd45f7c3d6ca8d.zip
Merge remote-tracking branch 'arma/bug19003-try2' into maint-0.2.8
-rw-r--r--changes/bug190035
-rw-r--r--src/or/circuituse.c6
-rw-r--r--src/or/router.c15
3 files changed, 22 insertions, 4 deletions
diff --git a/changes/bug19003 b/changes/bug19003
new file mode 100644
index 0000000000..d9ef23d24c
--- /dev/null
+++ b/changes/bug19003
@@ -0,0 +1,5 @@
+ o Minor bugfixes (small networks):
+ - Allow directories in small networks to bootstrap by
+ skipping DirPort checks when the consensus has no exits.
+ Resolves #19003, bugfix on #18050 in 0.2.8.1-alpha.
+ Patch by teor.
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 31003ea095..a4b580104f 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1674,7 +1674,11 @@ circuit_launch(uint8_t purpose, int flags)
return circuit_launch_by_extend_info(purpose, NULL, flags);
}
-/* DOCDOC */
+/* Do we have enough descriptors to build paths?
+ * If need_exit is true, return 1 if we can build exit paths.
+ * (We need at least one Exit in the consensus to build exit paths.)
+ * If need_exit is false, return 1 if we can build internal paths.
+ */
static int
have_enough_path_info(int need_exit)
{
diff --git a/src/or/router.c b/src/or/router.c
index 68bcf1326e..3f94703a26 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1549,8 +1549,10 @@ proxy_mode(const or_options_t *options)
* and
* - We have ORPort set
* and
- * - We believe both our ORPort and DirPort (if present) are reachable from
+ * - We believe our ORPort and DirPort (if present) are reachable from
* the outside; or
+ * - We believe 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,8 +1570,15 @@ decide_if_publishable_server(void)
return 1;
if (!router_get_advertised_or_port(options))
return 0;
-
- return check_whether_orport_reachable() && check_whether_dirport_reachable();
+ if (!check_whether_orport_reachable())
+ return 0;
+ if (router_have_consensus_path() == CONSENSUS_PATH_INTERNAL) {
+ /* All set: there are no exits in the consensus (maybe this is a tiny
+ * test network), so we can't check our DirPort reachability. */
+ return 1;
+ } else {
+ return check_whether_dirport_reachable();
+ }
}
/** Initiate server descriptor upload as reasonable (if server is publishable,