mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Merge branch 'bug5527'
This commit is contained in:
commit
1da5223e89
@ -1453,7 +1453,6 @@ int
|
||||
connection_or_client_learned_peer_id(or_connection_t *conn,
|
||||
const uint8_t *peer_id)
|
||||
{
|
||||
int as_expected = 1;
|
||||
const or_options_t *options = get_options();
|
||||
int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN;
|
||||
|
||||
@ -1492,14 +1491,12 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
|
||||
control_event_bootstrap_problem(
|
||||
"Unexpected identity in router certificate",
|
||||
END_OR_CONN_REASON_OR_IDENTITY);
|
||||
as_expected = 0;
|
||||
return -1;
|
||||
}
|
||||
if (authdir_mode_tests_reachability(options)) {
|
||||
dirserv_orconn_tls_done(conn->_base.address, conn->_base.port,
|
||||
(const char*)peer_id, as_expected);
|
||||
(const char*)peer_id);
|
||||
}
|
||||
if (!as_expected)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -3264,30 +3264,29 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
|
||||
* router listening at <b>address</b>:<b>or_port</b>, and has yielded
|
||||
* a certificate with digest <b>digest_rcvd</b>.
|
||||
*
|
||||
* Also, if as_advertised is 1, then inform the reachability checker
|
||||
* that we could get to this guy.
|
||||
* Inform the reachability checker that we could get to this guy.
|
||||
*/
|
||||
void
|
||||
dirserv_orconn_tls_done(const char *address,
|
||||
uint16_t or_port,
|
||||
const char *digest_rcvd,
|
||||
int as_advertised)
|
||||
const char *digest_rcvd)
|
||||
{
|
||||
routerlist_t *rl = router_get_routerlist();
|
||||
routerinfo_t *ri;
|
||||
time_t now = time(NULL);
|
||||
int bridge_auth = authdir_mode_bridge(get_options());
|
||||
tor_assert(address);
|
||||
tor_assert(digest_rcvd);
|
||||
|
||||
/* XXX023 Doing a loop like this is stupid. We should just look up the
|
||||
* router by digest_rcvd, and see if address, orport, and as_advertised
|
||||
* match up. -NM */
|
||||
SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, ri) {
|
||||
if (!strcasecmp(address, ri->address) && or_port == ri->or_port &&
|
||||
as_advertised &&
|
||||
fast_memeq(ri->cache_info.identity_digest, digest_rcvd, DIGEST_LEN)) {
|
||||
/* correct digest. mark this router reachable! */
|
||||
if (!bridge_auth || ri->purpose == ROUTER_PURPOSE_BRIDGE) {
|
||||
ri = router_get_mutable_by_digest(digest_rcvd);
|
||||
|
||||
if (ri == NULL)
|
||||
return;
|
||||
|
||||
if (!strcasecmp(address, ri->address) && or_port == ri->or_port) {
|
||||
/* Found the right router. */
|
||||
if (!authdir_mode_bridge(get_options()) ||
|
||||
ri->purpose == ROUTER_PURPOSE_BRIDGE) {
|
||||
/* This is a bridge or we're not a bridge authorititative --
|
||||
mark it as reachable. */
|
||||
tor_addr_t addr, *addrp=NULL;
|
||||
log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.",
|
||||
router_describe(ri),
|
||||
@ -3300,10 +3299,6 @@ dirserv_orconn_tls_done(const char *address,
|
||||
ri->last_reachable = now;
|
||||
}
|
||||
}
|
||||
} SMARTLIST_FOREACH_END(ri);
|
||||
/* FFFF Maybe we should reinstate the code that dumps routers with the same
|
||||
* addr/port but with nonmatching keys, but instead of dumping, we should
|
||||
* skip testing. */
|
||||
}
|
||||
|
||||
/** Called when we, as an authority, receive a new router descriptor either as
|
||||
|
@ -108,8 +108,7 @@ int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
|
||||
const char **msg);
|
||||
void dirserv_orconn_tls_done(const char *address,
|
||||
uint16_t or_port,
|
||||
const char *digest_rcvd,
|
||||
int as_advertised);
|
||||
const char *digest_rcvd);
|
||||
int dirserv_should_launch_reachability_test(const routerinfo_t *ri,
|
||||
const routerinfo_t *ri_old);
|
||||
void dirserv_single_reachability_test(time_t now, routerinfo_t *router);
|
||||
|
Loading…
Reference in New Issue
Block a user