diff options
Diffstat (limited to 'src/network.c')
-rw-r--r-- | src/network.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/network.c b/src/network.c index b188f50..9c46b8a 100644 --- a/src/network.c +++ b/src/network.c @@ -1298,7 +1298,13 @@ void mark_servers(int flag) /* mark everything with argument flag */ for (serv = daemon->servers; serv; serv = serv->next) if (serv->flags & flag) - serv->flags |= SERV_MARK; + { + serv->flags |= SERV_MARK; +#ifdef HAVE_LOOP + /* Give looped servers another chance */ + serv->flags &= ~SERV_LOOP; +#endif + } } void cleanup_servers(void) @@ -1320,6 +1326,11 @@ void cleanup_servers(void) else up = &serv->next; } + +#ifdef HAVE_LOOP + /* Now we have a new set of servers, test for loops. */ + loop_send_probes(); +#endif } void add_update_server(int flags, @@ -1385,7 +1396,10 @@ void add_update_server(int flags, serv->domain = domain_str; serv->next = next; serv->queries = serv->failed_queries = 0; - +#ifdef HAVE_LOOP + serv->uid = rand32(); +#endif + if (domain) serv->flags |= SERV_HAS_DOMAIN; @@ -1464,6 +1478,10 @@ void check_servers(void) else if (!(serv->flags & SERV_LITERAL_ADDRESS)) my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2); } +#ifdef HAVE_LOOP + else if (serv->flags & SERV_LOOP) + my_syslog(LOG_INFO, _("NOT using nameserver %s#%d - query loop detected"), daemon->namebuff, port); +#endif else if (serv->interface[0] != 0) my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, serv->interface); else |