diff options
author | Roger Dingledine <arma@torproject.org> | 2009-04-11 18:09:15 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2009-04-11 18:09:15 +0000 |
commit | 8d82583d9709938165172bedf5d6ac3cd7cd8942 (patch) | |
tree | d9d22f27d49e0b38af73e5e83012ed4368a38520 | |
parent | 235a1196b34a5680529299c4b5fa4e8583998a6f (diff) | |
download | tor-8d82583d9709938165172bedf5d6ac3cd7cd8942.tar tor-8d82583d9709938165172bedf5d6ac3cd7cd8942.tar.gz |
Finally fix the bug where dynamic-IP relays disappear when their
IP address changes: directory mirrors were mistakenly telling them
their old address if they asked via begin_dir, so they never got
an accurate answer about their new address, so they just vanished
after a day. Should fix bugs 827, 883, and 900 -- but alas, only
after every directory mirror has upgraded.
svn:r19291
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | src/or/connection_edge.c | 8 |
2 files changed, 15 insertions, 7 deletions
@@ -1,21 +1,25 @@ Changes in version 0.2.1.14-rc - 2009-04-11 - o Security fixes: - - Avoid crashing in the presence of certain malformed descriptors. - Found by lark, and by automated fuzzing. - o Major features: - Clients replace entry guards that were chosen more than a few months ago. This change should significantly improve client performance, especially once more people upgrade, since relays that have been a guard for a long time are currently overloaded. - o Major bugfixes: + o Major bugfixes (on 0.2.0): + - Finally fix the bug where dynamic-IP relays disappear when their + IP address changes: directory mirrors were mistakenly telling them + their old address if they asked via begin_dir, so they never got + an accurate answer about their new address, so they just vanished + after a day. Should fix bugs 827, 883, and 900 -- but alas, only + after every directory mirror has upgraded. - Relays were falling out of the networkstatus consensus for part of a day if they changed their local config but the authorities discarded their new descriptor as "not sufficiently different". Now directory authorities accept a descriptor as changed if bandwidthrate or bandwidthburst changed. Partial fix for bug 962; patch by Sebastian. + - Avoid crashing in the presence of certain malformed descriptors. + Found by lark, and by automated fuzzing. o Minor features: - When generating circuit events with verbose nicknames for diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index b02282d8d..5ac37c1f4 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -2547,8 +2547,12 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) END_STREAM_REASON_NOTDIRECTORY, NULL); return 0; } - if (or_circ && or_circ->p_conn && or_circ->p_conn->_base.address) - address = tor_strdup(or_circ->p_conn->_base.address); + /* Make sure to get the 'real' address of the previous hop: the + * caller might want to know whether his IP address has changed, and + * we might already have corrected _base.addr[ess] for the relay's + * canonical IP address. */ + if (or_circ && or_circ->p_conn) + address = tor_dup_addr(&or_circ->p_conn->real_addr); else address = tor_strdup("127.0.0.1"); port = 1; /* XXXX This value is never actually used anywhere, and there |