diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 5b119deffb..d95fdd64dc 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -418,17 +418,21 @@ dirserv_router_has_valid_address(routerinfo_t *ri)
}
/** Check whether we, as a directory server, want to accept ri. If so,
- * return 0, and set its is_valid,named,running fields. Otherwise, return -1.
+ * set its is_valid,named,running fields and return 0. Otherwise, return -1.
*
* If the router is rejected, set *msg to an explanation of why.
+ *
+ * If complain then explain at log-level 'notice' why we refused
+ * a descriptor; else explain at log-level 'info'.
*/
int
-authdir_wants_to_reject_router(routerinfo_t *ri,
- const char **msg)
+authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
+ int complain)
{
/* Okay. Now check whether the fingerprint is recognized. */
router_status_t status = dirserv_router_get_status(ri, msg);
time_t now;
+ int severity = complain ? LOG_NOTICE : LOG_INFO;
tor_assert(msg);
if (status == FP_REJECT)
return -1; /* msg is already set. */
@@ -436,8 +440,8 @@ authdir_wants_to_reject_router(routerinfo_t *ri,
/* Is there too much clock skew? */
now = time(NULL);
if (ri->cache_info.published_on > now+ROUTER_ALLOW_SKEW) {
- notice(LD_DIRSERV, "Publication time for nickname '%s' is too far "
- "(%d minutes) in the future; possible clock skew. Not adding "
+ log_fn(severity, LD_DIRSERV, "Publication time for nickname '%s' is too "
+ "far (%d minutes) in the future; possible clock skew. Not adding "
"(ContactInfo '%s', platform '%s').",
ri->nickname, (int)((ri->cache_info.published_on-now)/60),
ri->contact_info ? ri->contact_info : "",
@@ -447,7 +451,7 @@ authdir_wants_to_reject_router(routerinfo_t *ri,
return -1;
}
if (ri->cache_info.published_on < now-ROUTER_MAX_AGE) {
- notice(LD_DIRSERV,
+ log_fn(severity, LD_DIRSERV,
"Publication time for router with nickname '%s' is too far "
"(%d minutes) in the past. Not adding (ContactInfo '%s', "
"platform '%s').",
@@ -459,7 +463,8 @@ authdir_wants_to_reject_router(routerinfo_t *ri,
return -1;
}
if (dirserv_router_has_valid_address(ri) < 0) {
- notice(LD_DIRSERV, "Router with nickname '%s' has invalid address '%s'. "
+ log_fn(severity, LD_DIRSERV,
+ "Router with nickname '%s' has invalid address '%s'. "
"Not adding (ContactInfo '%s', platform '%s').",
ri->nickname, ri->address,
ri->contact_info ? ri->contact_info : "",
diff --git a/src/or/or.h b/src/or/or.h
index 8aa3c6e335..06b515b73d 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1893,8 +1893,8 @@ void dirserv_orconn_tls_done(const char *address,
const char *digest_rcvd,
const char *nickname,
int as_advertised);
-int authdir_wants_to_reject_router(routerinfo_t *ri,
- const char **msg);
+int authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
+ int complain);
int dirserv_would_reject_router(routerstatus_t *rs);
void dirserv_free_all(void);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index daf07a11fe..7d4d563006 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1505,7 +1505,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
routerlist_remove_old_routers();
if (authdir) {
- if (authdir_wants_to_reject_router(router, msg)) {
+ if (authdir_wants_to_reject_router(router, msg, !from_cache)) {
routerinfo_free(router);
return -2;
}