Commit 590cd621 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Clean up last patch; implement (mostly) proper handling for verified/unverified name collisions.


svn:r2248
parent 85a910e0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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? */
+17 −0
Original line number Diff line number Diff line
@@ -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
+0 −1
Original line number Diff line number Diff line
@@ -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) {