aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/or/or.h2
-rw-r--r--src/or/routerlist.c17
-rw-r--r--src/or/routerparse.c1
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) {