summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor Yu <catalyst@torproject.org>2017-09-28 17:15:47 -0500
committerTaylor Yu <catalyst@torproject.org>2017-10-24 17:35:17 -0500
commit9b60acd4d4ee451fd961b1f03ae46eee960c72ee (patch)
treeb9b5433e81b83734e78a118a3ac4217dc32f201d
parent990322fca450d2230067a3035468c5ac7168e760 (diff)
downloadtor-9b60acd4d4ee451fd961b1f03ae46eee960c72ee.tar.gz
tor-9b60acd4d4ee451fd961b1f03ae46eee960c72ee.zip
Rewrite bridge addresses earlier
Call rewrite_node_address_for_bridge() in launch_direct_bridge_descriptor_fetch() in case there's an existing node_t for it.
-rw-r--r--changes/bug205324
-rw-r--r--src/or/bridges.c8
2 files changed, 12 insertions, 0 deletions
diff --git a/changes/bug20532 b/changes/bug20532
new file mode 100644
index 0000000000..7c190ea032
--- /dev/null
+++ b/changes/bug20532
@@ -0,0 +1,4 @@
+ o Minor bugfixes (bridges):
+ - Overwrite the bridge address earlier in the process of directly
+ retrieving its descriptor, to make sure we reach it on the configured
+ address. Fixes bug 20532; bugfix on 0.2.0.10-alpha.
diff --git a/src/or/bridges.c b/src/or/bridges.c
index 0818fb0812..0bcc3eeb45 100644
--- a/src/or/bridges.c
+++ b/src/or/bridges.c
@@ -54,6 +54,8 @@ struct bridge_info_t {
};
static void bridge_free(bridge_info_t *bridge);
+static void rewrite_node_address_for_bridge(const bridge_info_t *bridge,
+ node_t *node);
/** A list of configured bridges. Whenever we actually get a descriptor
* for one, we add it as an entry guard. Note that the order of bridges
@@ -571,6 +573,12 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
return;
}
+ /* If we already have a node_t for this bridge, rewrite its address now. */
+ node_t *node = node_get_mutable_by_id(bridge->identity);
+ if (node) {
+ rewrite_node_address_for_bridge(bridge, node);
+ }
+
tor_addr_port_t bridge_addrport;
memcpy(&bridge_addrport.addr, &bridge->addr, sizeof(tor_addr_t));
bridge_addrport.port = bridge->port;