From 590cd621f86ba5d454ed35ff411fab4ab48a6c61 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 17 Aug 2004 06:06:05 +0000 Subject: [PATCH] Clean up last patch; implement (mostly) proper handling for verified/unverified name collisions. svn:r2248 --- src/or/or.h | 2 +- src/or/routerlist.c | 17 +++++++++++++++++ src/or/routerparse.c | 1 - 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/or/or.h b/src/or/or.h index 19cb7ea149..a0c1a7c113 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -588,7 +588,7 @@ typedef struct { uint32_t bandwidthcapacity; struct exit_policy_t *exit_policy; /**< What streams will this OR permit * to exit? */ - int uptime; /**< How many seconds the router claims to have been up */ + long uptime; /**< How many seconds the router claims to have been up */ /* local info */ int is_running; /**< As far as we know, is this OR currently running? */ time_t status_set_at; /**< When did we last update is_running? */ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 02e4b1836b..dc8b0c1054 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -565,6 +565,23 @@ int router_add_to_routerlist(routerinfo_t *router) { routerinfo_free(router); return -1; } + } else if (!strcmp(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 + * there are more old unverifed routers with this nickname + */ + 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'", + router->nickname); + routerinfo_free(router); + return -1; + } } } /* We haven't seen a router with this name before. Add it to the end of diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 7ee2512d6d..f3e6a53f80 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -644,7 +644,6 @@ routerinfo_t *router_parse_entry_from_string(const char *s, smartlist_t *tokens = NULL, *exit_policy_tokens = NULL; directory_token_t *tok; int t; - long lng; int ports_set, bw_set; if (!end) { -- 2.47.3