2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 06:55:30 +00:00

If we have no addresses at all, but some have been pruned by the

ADB due to lameness, turn off lameness checking and try again.
This commit is contained in:
Bob Halley
2000-02-03 00:01:08 +00:00
parent 6da50be436
commit 628b315462

View File

@@ -1064,6 +1064,7 @@ fctx_getaddresses(fetchctx_t *fctx) {
unsigned int stdoptions, options; unsigned int stdoptions, options;
isc_sockaddr_t *sa; isc_sockaddr_t *sa;
dns_adbaddrinfo_t *ai; dns_adbaddrinfo_t *ai;
isc_boolean_t pruned;
FCTXTRACE("getaddresses"); FCTXTRACE("getaddresses");
@@ -1077,6 +1078,8 @@ fctx_getaddresses(fetchctx_t *fctx) {
} }
res = fctx->res; res = fctx->res;
pruned = ISC_FALSE;
stdoptions = 0; /* Keep compiler happy. */
/* /*
* Forwarders. * Forwarders.
@@ -1122,6 +1125,7 @@ fctx_getaddresses(fetchctx_t *fctx) {
stdoptions |= DNS_ADBFIND_INET6; stdoptions |= DNS_ADBFIND_INET6;
isc_stdtime_get(&now); isc_stdtime_get(&now);
restart:
INSIST(ISC_LIST_EMPTY(fctx->finds)); INSIST(ISC_LIST_EMPTY(fctx->finds));
result = dns_rdataset_first(&fctx->nameservers); result = dns_rdataset_first(&fctx->nameservers);
@@ -1191,8 +1195,17 @@ fctx_getaddresses(fetchctx_t *fctx) {
} else { } else {
/* /*
* And ADB isn't going to send us any events * And ADB isn't going to send us any events
* either. This query loses. * either. This find loses.
*/ */
if ((find->options & DNS_ADBFIND_LAMEPRUNED)
!= 0) {
/*
* The ADB pruned lame servers for
* this name. Remember that in case
* we get desperate later on.
*/
pruned = ISC_TRUE;
}
dns_adb_destroyfind(&find); dns_adb_destroyfind(&find);
} }
} }
@@ -1212,6 +1225,16 @@ fctx_getaddresses(fetchctx_t *fctx) {
* yet. Tell the caller to wait for an answer. * yet. Tell the caller to wait for an answer.
*/ */
result = DNS_R_WAIT; result = DNS_R_WAIT;
} else if (pruned) {
/*
* Some addresses were removed by lame pruning.
* Turn pruning off and try again.
*/
FCTXTRACE("restarting with returnlame");
INSIST((stdoptions & DNS_ADBFIND_RETURNLAME) == 0);
stdoptions |= DNS_ADBFIND_RETURNLAME;
pruned = ISC_FALSE;
goto restart;
} else { } else {
/* /*
* We've lost completely. We don't know any * We've lost completely. We don't know any