Don't do qname minimization when forwarding; Avoid some intermittent errors in qmin tests caused by timing
This commit is contained in:
@@ -14,5 +14,5 @@ rm -f */named.memstats
|
||||
rm -f */named.run
|
||||
rm -f dig.out.*
|
||||
rm -f ns*/named.lock
|
||||
rm -f ans*/query.log
|
||||
rm -f ans*/query.log*
|
||||
rm -f query*.log
|
||||
|
||||
@@ -117,14 +117,16 @@ $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS good.
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR ns2.good.
|
||||
ADDR ns3.good.
|
||||
ADDR ns3.good.
|
||||
NS boing.good.
|
||||
NS good.
|
||||
NS zoop.boing.good.
|
||||
ADDR ns3.good.
|
||||
ADDR ns3.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
__EOF
|
||||
cat << __EOF | diff ans3/query.log - > /dev/null || ret=1
|
||||
NS zoop.boing.good.
|
||||
@@ -151,6 +153,7 @@ sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS bad.
|
||||
NS boing.bad.
|
||||
ADDR ns2.bad.
|
||||
__EOF
|
||||
for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
@@ -165,14 +168,16 @@ $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.bad. @10.53.0.7 > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "icky.icky.icky.ptang.zoop.boing.bad. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR a.bit.longer.ns.name.bad.
|
||||
ADDR a.bit.longer.ns.name.bad.
|
||||
ADDR icky.icky.icky.ptang.zoop.boing.bad.
|
||||
ADDR ns2.bad.
|
||||
ADDR ns3.bad.
|
||||
ADDR ns3.bad.
|
||||
NS bad.
|
||||
NS boing.bad.
|
||||
ADDR icky.icky.icky.ptang.zoop.boing.bad.
|
||||
ADDR ns3.bad.
|
||||
ADDR ns3.bad.
|
||||
ADDR a.bit.longer.ns.name.bad.
|
||||
ADDR a.bit.longer.ns.name.bad.
|
||||
__EOF
|
||||
echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans3/query.log - > /dev/null || ret=1
|
||||
echo "ADDR icky.icky.icky.ptang.zoop.boing.bad." | diff ans4/query.log - > /dev/null || ret=1
|
||||
@@ -188,10 +193,12 @@ $RNDCCMD 10.53.0.6 flush
|
||||
$DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.6 > dig.out.test$n
|
||||
grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR ns2.ugly.
|
||||
NS boing.ugly.
|
||||
NS boing.ugly.
|
||||
NS ugly.
|
||||
NS boing.ugly.
|
||||
NS boing.ugly.
|
||||
__EOF
|
||||
for ans in ans2 ans3 ans4; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
@@ -207,15 +214,17 @@ $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.ugly. @10.53.0.7 > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "icky.icky.icky.ptang.zoop.boing.ugly. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS ugly.
|
||||
NS boing.ugly.
|
||||
NS boing.ugly.
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR a.bit.longer.ns.name.ugly.
|
||||
ADDR a.bit.longer.ns.name.ugly.
|
||||
ADDR icky.icky.icky.ptang.zoop.boing.ugly.
|
||||
ADDR ns2.ugly.
|
||||
ADDR ns3.ugly.
|
||||
ADDR ns3.ugly.
|
||||
ADDR a.bit.longer.ns.name.ugly.
|
||||
ADDR a.bit.longer.ns.name.ugly.
|
||||
NS boing.ugly.
|
||||
NS boing.ugly.
|
||||
NS ugly.
|
||||
__EOF
|
||||
echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans3/query.log - > /dev/null || ret=1
|
||||
echo "ADDR icky.icky.icky.ptang.zoop.boing.ugly." | diff ans4/query.log - > /dev/null || ret=1
|
||||
@@ -233,14 +242,16 @@ $DIG $DIGOPTS icky.icky.icky.ptang.zoop.boing.slow. @10.53.0.6 > dig.out.test$n
|
||||
sleep 5
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "icky.icky.icky.ptang.zoop.boing.slow. 1 IN A 192.0.2.1" dig.out.test$n > /dev/null || ret=1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS slow.
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR a.bit.longer.ns.name.slow.
|
||||
ADDR a.bit.longer.ns.name.slow.
|
||||
ADDR ns2.slow.
|
||||
ADDR ns3.slow.
|
||||
ADDR ns3.slow.
|
||||
NS boing.slow.
|
||||
NS slow.
|
||||
NS zoop.boing.slow.
|
||||
ADDR ns3.slow.
|
||||
ADDR ns3.slow.
|
||||
ADDR a.bit.longer.ns.name.slow.
|
||||
ADDR a.bit.longer.ns.name.slow.
|
||||
__EOF
|
||||
cat << __EOF | diff ans3/query.log - > /dev/null || ret=1
|
||||
NS zoop.boing.slow.
|
||||
@@ -265,7 +276,8 @@ $DIG $DIGOPTS -x 2001:4f8::1 @10.53.0.6 > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa. 1 IN PTR nee.com." dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
grep -v ADDR ans2/query.log > ans2/query.log.trimmed
|
||||
cat << __EOF | diff ans2/query.log.trimmed - > /dev/null || ret=1
|
||||
NS 1.0.0.2.ip6.arpa.
|
||||
NS 8.f.4.0.1.0.0.2.ip6.arpa.
|
||||
NS 0.0.0.0.8.f.4.0.1.0.0.2.ip6.arpa.
|
||||
@@ -286,14 +298,16 @@ $DIG $DIGOPTS more.icky.icky.icky.ptang.zoop.boing.good. @10.53.0.6 > dig.out.te
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "more.icky.icky.icky.ptang.zoop.boing.good. 1 IN A 192.0.2.2" dig.out.test$n > /dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS good.
|
||||
sort ans2/query.log > ans2/query.log.sorted
|
||||
cat << __EOF | diff ans2/query.log.sorted - > /dev/null || ret=1
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR ns2.good.
|
||||
ADDR ns3.good.
|
||||
ADDR ns3.good.
|
||||
NS boing.good.
|
||||
NS good.
|
||||
NS zoop.boing.good.
|
||||
ADDR ns3.good.
|
||||
ADDR ns3.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
__EOF
|
||||
cat << __EOF | diff ans3/query.log - > /dev/null || ret=1
|
||||
NS zoop.boing.good.
|
||||
@@ -320,8 +334,7 @@ grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "a.bit.longer.ns.name.fwd. 1 IN A 10.53.0.4" dig.out.test$n >/dev/null || ret=1
|
||||
sleep 1
|
||||
cat << __EOF | diff ans2/query.log - > /dev/null || ret=1
|
||||
NS fwd.
|
||||
ADDR a.bit.longer.ns.name.good.
|
||||
ADDR a.bit.longer.ns.name.fwd.
|
||||
__EOF
|
||||
for ans in ans2; do mv -f $ans/query.log query-$ans-$n.log 2>/dev/null || true; done
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
|
||||
@@ -311,6 +311,7 @@ struct fetchctx {
|
||||
bool minimized;
|
||||
unsigned int qmin_labels;
|
||||
bool ip6arpaskip;
|
||||
bool forwarding;
|
||||
dns_name_t qminname;
|
||||
dns_rdatatype_t qmintype;
|
||||
dns_fetch_t * qminfetch;
|
||||
@@ -3799,6 +3800,7 @@ fctx_nextaddress(fetchctx_t *fctx) {
|
||||
if (UNMARKED(addrinfo)) {
|
||||
addrinfo->flags |= FCTX_ADDRINFO_MARK;
|
||||
fctx->find = NULL;
|
||||
fctx->forwarding = true;
|
||||
return (addrinfo);
|
||||
}
|
||||
}
|
||||
@@ -3806,7 +3808,7 @@ fctx_nextaddress(fetchctx_t *fctx) {
|
||||
/*
|
||||
* No forwarders. Move to the next find.
|
||||
*/
|
||||
|
||||
fctx->forwarding = false;
|
||||
fctx->attributes |= FCTX_ATTR_TRIEDFIND;
|
||||
|
||||
find = fctx->find;
|
||||
@@ -3947,31 +3949,6 @@ fctx_try(fetchctx_t *fctx, bool retrying, bool badcache) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* We're minimizing and we're not yet at the final NS -
|
||||
* we need to launch a query for NS for 'upper' domain
|
||||
*/
|
||||
if (fctx->minimized) {
|
||||
unsigned int options = fctx->options;
|
||||
options &= ~DNS_FETCHOPT_QMINIMIZE;
|
||||
fctx_increference(fctx);
|
||||
task = res->buckets[bucketnum].task;
|
||||
result = dns_resolver_createfetch(fctx->res, &fctx->qminname,
|
||||
fctx->qmintype, &fctx->domain,
|
||||
&fctx->nameservers, NULL, NULL, 0,
|
||||
options, 0, fctx->qc, task,
|
||||
resume_qmin, fctx,
|
||||
&fctx->qminrrset, NULL,
|
||||
&fctx->qminfetch);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
LOCK(&fctx->res->buckets[fctx->bucketnum].lock);
|
||||
RUNTIME_CHECK(!fctx_decreference(fctx));
|
||||
UNLOCK(&fctx->res->buckets[fctx->bucketnum].lock);
|
||||
fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
addrinfo = fctx_nextaddress(fctx);
|
||||
|
||||
/* Try to find an address that isn't over quota */
|
||||
@@ -4013,6 +3990,30 @@ fctx_try(fetchctx_t *fctx, bool retrying, bool badcache) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* We're minimizing and we're not yet at the final NS -
|
||||
* we need to launch a query for NS for 'upper' domain
|
||||
*/
|
||||
if (fctx->minimized && !fctx->forwarding) {
|
||||
unsigned int options = fctx->options;
|
||||
options &= ~DNS_FETCHOPT_QMINIMIZE;
|
||||
fctx_increference(fctx);
|
||||
task = res->buckets[bucketnum].task;
|
||||
result = dns_resolver_createfetch(fctx->res, &fctx->qminname,
|
||||
fctx->qmintype, &fctx->domain,
|
||||
&fctx->nameservers, NULL, NULL, 0,
|
||||
options, 0, fctx->qc, task,
|
||||
resume_qmin, fctx,
|
||||
&fctx->qminrrset, NULL,
|
||||
&fctx->qminfetch);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
LOCK(&fctx->res->buckets[fctx->bucketnum].lock);
|
||||
RUNTIME_CHECK(!fctx_decreference(fctx));
|
||||
UNLOCK(&fctx->res->buckets[fctx->bucketnum].lock);
|
||||
fctx_done(fctx, DNS_R_SERVFAIL, __LINE__);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (dns_name_countlabels(&fctx->domain) > 2) {
|
||||
result = isc_counter_increment(fctx->qc);
|
||||
@@ -4659,6 +4660,7 @@ fctx_create(dns_resolver_t *res, const dns_name_t *name, dns_rdatatype_t type,
|
||||
fctx->depth = depth;
|
||||
fctx->minimized = false;
|
||||
fctx->ip6arpaskip = false;
|
||||
fctx->forwarding = false;
|
||||
fctx->qmin_labels = 1;
|
||||
fctx->qminfetch = NULL;
|
||||
dns_rdataset_init(&fctx->qminrrset);
|
||||
|
||||
Reference in New Issue
Block a user