mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 14:51:11 +01:00
when a verified routerinfo arrives with a new key than the previous
verified routerinfo with that name, close connections to the obsolete key to make way for connections to the new key. svn:r2257
This commit is contained in:
parent
4e026f5b1d
commit
aa1e518446
1 changed files with 11 additions and 3 deletions
|
@ -566,16 +566,24 @@ int router_add_to_routerlist(routerinfo_t *router) {
|
||||||
routerinfo_free(router);
|
routerinfo_free(router);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(router->nickname, r->nickname)) {
|
} else if (!strcasecmp(router->nickname, r->nickname)) {
|
||||||
/* nicknames match, keys don't. */
|
/* nicknames match, keys don't. */
|
||||||
if (router->is_verified) {
|
if (router->is_verified) {
|
||||||
/* The new verified router replaces the old one; remove the
|
/* The new verified router replaces the old one; remove the
|
||||||
* old one. and carry on to the end of the list, in case
|
* old one. And carry on to the end of the list, in case
|
||||||
* there are more old unverifed routers with this nickname
|
* there are more old unverifed routers with this nickname
|
||||||
*/
|
*/
|
||||||
|
/* mark-for-close connections using the old key, so we can
|
||||||
|
* make new ones with the new key.
|
||||||
|
*/
|
||||||
|
connection_t *conn;
|
||||||
|
while((conn = connection_get_by_identity_digest(r->identity_digest,
|
||||||
|
CONN_TYPE_OR))) {
|
||||||
|
log_fn(LOG_INFO,"Closing conn to obsolete router '%s'", r->nickname);
|
||||||
|
connection_mark_for_close(conn);
|
||||||
|
}
|
||||||
routerinfo_free(r);
|
routerinfo_free(r);
|
||||||
smartlist_del_keeporder(routerlist->routers, i--);
|
smartlist_del_keeporder(routerlist->routers, i--);
|
||||||
/* XXXX What do we do about any connections using the old key? */
|
|
||||||
} else if (r->is_verified) {
|
} else if (r->is_verified) {
|
||||||
/* Can't replace a verified router with an unverified one. */
|
/* Can't replace a verified router with an unverified one. */
|
||||||
log_fn(LOG_DEBUG, "Skipping unverified entry for verified router '%s'",
|
log_fn(LOG_DEBUG, "Skipping unverified entry for verified router '%s'",
|
||||||
|
|
Loading…
Add table
Reference in a new issue