From d0a5c4f9848f44c46f001428bd3078673033ef19 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 24 May 2007 17:12:54 +0000 Subject: [PATCH] r12915@catbus: nickm | 2007-05-24 12:12:34 -0400 Do not send a warning when somebody uploads an extrainfo that we will reject, if it happens to be newer than our current routerdesc. svn:r10303 --- src/or/dirserv.c | 14 ++++++-------- src/or/routerlist.c | 11 +++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 52fde805b7..050570b54d 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -34,11 +34,9 @@ static int the_v2_networkstatus_is_dirty = 1; static void directory_remove_invalid(void); static cached_dir_t *dirserv_regenerate_directory(void); static char *format_versions_list(config_line_t *ln); -/* Should be static; exposed for testing */ -/* XXXX020 not actually tested. */ struct authdir_config_t; -int add_fingerprint_to_dir(const char *nickname, const char *fp, - struct authdir_config_t *list); +static int add_fingerprint_to_dir(const char *nickname, const char *fp, + struct authdir_config_t *list); static uint32_t dirserv_router_get_status(const routerinfo_t *router, const char **msg); static uint32_t @@ -75,8 +73,7 @@ typedef struct authdir_config_t { } authdir_config_t; /** Should be static; exposed for testing. */ -/* XXXX020 not actually tested. */ -authdir_config_t *fingerprint_list = NULL; +static authdir_config_t *fingerprint_list = NULL; /** Allocate and return a new, empty, authdir_config_t. */ static authdir_config_t * @@ -621,6 +618,7 @@ static int dirserv_add_extrainfo(extrainfo_t *ei, const char **msg) { routerinfo_t *ri; + int r; tor_assert(msg); *msg = NULL; @@ -630,9 +628,9 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg) extrainfo_free(ei); return -1; } - if (routerinfo_incompatible_with_extrainfo(ri, ei, msg)) { + if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, msg))) { extrainfo_free(ei); - return -1; + return r < 0 ? 0 : -1; } router_add_extrainfo_to_routerlist(ei, msg, 0, 0); return 2; diff --git a/src/or/routerlist.c b/src/or/routerlist.c index bb06970ff8..c7ecd6a6bb 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -4964,7 +4964,8 @@ router_differences_are_cosmetic(routerinfo_t *r1, routerinfo_t *r2) return 1; } -/** DOCDOC */ +/** DOCDOC Returns 1 for "reject with message"; -1 for "reject silently", + * 0 for "accept". */ int routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, const char **msg) @@ -4972,8 +4973,10 @@ routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, tor_assert(ri); tor_assert(ei); - if (ei->bad_sig) + if (ei->bad_sig) { + if (msg) *msg = "Extrainfo signature was bad, or signed with wrong key."; return 1; + } /* The nickname must match exactly to have been generated at the same time * by the same rotuer. */ @@ -4999,10 +5002,10 @@ routerinfo_incompatible_with_extrainfo(routerinfo_t *ri, extrainfo_t *ei, tor_free(ei->pending_sig); } - if (ei->cache_info.published_on < ei->cache_info.published_on) { + if (ei->cache_info.published_on < ri->cache_info.published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return 1; - } else if (ei->cache_info.published_on > ei->cache_info.published_on) { + } else if (ei->cache_info.published_on > ri->cache_info.published_on) { if (msg) *msg = "Extrainfo published time did not match routerdesc"; return -1; }