aboutsummaryrefslogtreecommitdiff
path: root/src/or/control.c
diff options
context:
space:
mode:
authorteor (Tim Wilson-Brown) <teor2345@gmail.com>2016-01-29 07:37:06 +1100
committerteor (Tim Wilson-Brown) <teor2345@gmail.com>2016-01-29 07:37:06 +1100
commitc4cb4706c9bb1087584c9813b0ca97c261e6fd77 (patch)
treea49ffc5b86a9412f2992c5966c550e5bedfc60f6 /src/or/control.c
parent42dea56363c24960e85344749644f6502f625463 (diff)
parent73fc67bc8906819a42ed44abe33179512f90a883 (diff)
downloadtor-c4cb4706c9bb1087584c9813b0ca97c261e6fd77.tar.gz
tor-c4cb4706c9bb1087584c9813b0ca97c261e6fd77.zip
Merge branch 'feature17840-v11-squashed' into feature17840-v11-merged
Conflicts: src/or/directory.c src/test/test_routerlist.c Fix minor conflicts.
Diffstat (limited to 'src/or/control.c')
-rw-r--r--src/or/control.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/or/control.c b/src/or/control.c
index 66182fe2a4..2c0209ed85 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -2864,12 +2864,26 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
}
/* now circ refers to something that is ready to be extended */
+ int first_node = zero_circ;
SMARTLIST_FOREACH(nodes, const node_t *, node,
{
- extend_info_t *info = extend_info_from_node(node, 0);
- tor_assert(info); /* True, since node_has_descriptor(node) == true */
+ extend_info_t *info = extend_info_from_node(node, first_node);
+ if (first_node && !info) {
+ log_warn(LD_CONTROL,
+ "controller tried to connect to a node that doesn't have any "
+ "addresses that are allowed by the firewall configuration; "
+ "circuit marked for closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), -END_CIRC_REASON_CONNECTFAILED);
+ connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn);
+ goto done;
+ } else {
+ /* True, since node_has_descriptor(node) == true and we are extending
+ * to the node's primary address */
+ tor_assert(info);
+ }
circuit_append_new_exit(circ, info);
extend_info_free(info);
+ first_node = 0;
});
/* now that we've populated the cpath, start extending */