mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Move entry-guard-is-up notification later into dirguard path.
Previously we were marking directory guards up in ..._process_inbuf(), but that's wrong: we call that function on close as well as on success. Instead, we're marking the dirguard up only after we parse the HTTP headers. Closes 20974.
This commit is contained in:
parent
ded98be45c
commit
9d37449fb0
5
changes/bug20974
Normal file
5
changes/bug20974
Normal file
@ -0,0 +1,5 @@
|
||||
o Minor bugfixes (guards, bootstrapping):
|
||||
- When connecting to a directory guard during bootstrap, do not
|
||||
mark the guard as successful until we receive a good-looking
|
||||
directory response from it. Fixes bug 20974; bugfix on 0.3.0.1-alpha.
|
||||
|
@ -1967,6 +1967,21 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
||||
escaped(reason),
|
||||
conn->base_.purpose);
|
||||
|
||||
if (conn->guard_state) {
|
||||
/* we count the connection as successful once we can read from it. We do
|
||||
* not, however, delay use of the circuit here, since it's just for a
|
||||
* one-hop directory request. */
|
||||
/* XXXXprop271 note that this will not do the right thing for other
|
||||
* waiting circuits that would be triggered by this circuit becoming
|
||||
* complete/usable. But that's ok, I think.
|
||||
*/
|
||||
/* XXXXprop271 should we count this as only a partial success somehow?
|
||||
*/
|
||||
entry_guard_succeeded(&conn->guard_state);
|
||||
circuit_guard_state_free(conn->guard_state);
|
||||
conn->guard_state = NULL;
|
||||
}
|
||||
|
||||
/* now check if it's got any hints for us about our IP address. */
|
||||
if (conn->dirconn_direct) {
|
||||
char *guess = http_get_header(headers, X_ADDRESS_HEADER);
|
||||
@ -2578,21 +2593,6 @@ connection_dir_process_inbuf(dir_connection_t *conn)
|
||||
tor_assert(conn);
|
||||
tor_assert(conn->base_.type == CONN_TYPE_DIR);
|
||||
|
||||
if (conn->guard_state) {
|
||||
/* we count the connection as successful once we can read from it. We do
|
||||
* not, however, delay use of the circuit here, since it's just for a
|
||||
* one-hop directory request. */
|
||||
/* XXXXprop271 note that this will not do the right thing for other
|
||||
* waiting circuits that would be triggered by this circuit becoming
|
||||
* complete/usable. But that's ok, I think.
|
||||
*/
|
||||
/* XXXXprop271 should we count this as only a partial success somehow?
|
||||
*/
|
||||
entry_guard_succeeded(&conn->guard_state);
|
||||
circuit_guard_state_free(conn->guard_state);
|
||||
conn->guard_state = NULL;
|
||||
}
|
||||
|
||||
/* Directory clients write, then read data until they receive EOF;
|
||||
* directory servers read data until they get an HTTP command, then
|
||||
* write their response (when it's finished flushing, they mark for
|
||||
|
Loading…
Reference in New Issue
Block a user