Some libunbound configuration changes can change the quality of a
resolver so we have to schedule a re-check.
OK?
diff --git resolver.c resolver.c
index feeb6c2f27a..006632e0303 100644
--- resolver.c
+++ resolver.c
@@ -175,7 +175,7 @@ void replace_forwarders(struct
uw_forwarder_head *,
void resolver_ref(struct uw_resolver *);
void resolver_unref(struct uw_resolver *);
int resolver_cmp(const void *, const void *);
-void restart_ub_resolvers(void);
+void restart_ub_resolvers(int);
void show_status(pid_t);
void show_autoconf(pid_t);
void show_mem(pid_t);
@@ -501,7 +501,7 @@ resolver_dispatch_frontend(int fd, short event, void *bula)
memcpy(&verbose, imsg.data, sizeof(verbose));
if (log_getdebug() && (log_getverbose() & OPT_VERBOSE3)
!= (verbose & OPT_VERBOSE3))
- restart_ub_resolvers();
+ restart_ub_resolvers(0);
log_setverbose(verbose);
break;
case IMSG_QUERY:
@@ -545,7 +545,7 @@ resolver_dispatch_frontend(int fd, short event, void *bula)
break;
case IMSG_NEW_TAS_DONE:
if (merge_tas(&new_trust_anchors, &trust_anchors))
- restart_ub_resolvers();
+ restart_ub_resolvers(1);
break;
case IMSG_NETWORK_CHANGED:
clock_gettime(CLOCK_MONOTONIC, &last_network_change);
@@ -577,7 +577,7 @@ resolver_dispatch_frontend(int fd, short event, void *bula)
sizeof(new_available_afs));
if (new_available_afs != available_afs) {
available_afs = new_available_afs;
- restart_ub_resolvers();
+ restart_ub_resolvers(1);
}
break;
default:
@@ -1754,14 +1754,20 @@ resolver_cmp(const void *_a, const void *_b)
}
void
-restart_ub_resolvers(void)
+restart_ub_resolvers(int recheck)
{
- int i;
+ int i;
+ enum uw_resolver_state state;
- for (i = 0; i < UW_RES_NONE; i++)
- if (i != UW_RES_ASR)
- new_resolver(i, resolvers[i] != NULL ?
- resolvers[i]->state : UNKNOWN);
+ for (i = 0; i < UW_RES_NONE; i++) {
+ if (i == UW_RES_ASR)
+ continue;
+ if (recheck || resolvers[i] == NULL)
+ state = UNKNOWN;
+ else
+ state = resolvers[i]->state;
+ new_resolver(i, state);
+ }
}
void
--
I'm not entirely sure you are real.