diff options
-rw-r--r-- | src/or/or.h | 2 | ||||
-rw-r--r-- | src/or/routerlist.c | 17 | ||||
-rw-r--r-- | 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 19cb7ea14..a0c1a7c11 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 02e4b1836..dc8b0c105 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 7ee2512d6..f3e6a53f8 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) { |