From: Roger Dingledine Date: Tue, 17 Aug 2004 08:00:23 +0000 (+0000) Subject: when a verified routerinfo arrives with a new key than the previous X-Git-Tag: tor-0.0.8rc1~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa1e5184460071b6930ebcddbced49425a045b41;p=thirdparty%2Ftor.git 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 --- diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 149897ff9f..a8817e8767 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -566,16 +566,24 @@ int router_add_to_routerlist(routerinfo_t *router) { routerinfo_free(router); return -1; } - } else if (!strcmp(router->nickname, r->nickname)) { + } else if (!strcasecmp(router->nickname, r->nickname)) { /* nicknames match, keys don't. */ if (router->is_verified) { /* 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 */ + /* 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); smartlist_del_keeporder(routerlist->routers, i--); - /* XXXX What do we do about any connections using the old key? */ } else if (r->is_verified) { /* Can't replace a verified router with an unverified one. */ log_fn(LOG_DEBUG, "Skipping unverified entry for verified router '%s'",