From 230d79c1911c2520be24e08eb1b40366a2f6e05a Mon Sep 17 00:00:00 2001 From: Diego Fronza Date: Wed, 26 Aug 2020 14:36:14 -0300 Subject: [PATCH] Fix resolution of unusual ip6.arpa names Before this commit, BIND was unable to resolve ip6.arpa names like the one reported in issue #1847 when using query minimization. As reported in the issue, an attempt to resolve a name like 'rec-test-dom-158937817846788.test123.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.3.4.3.5.4.0.8.2.6.0.1.0.0.2.ip6.arpa' using default settings would fail. The reason was that query minimization algorithm in 'fctx_minimize_qname' would divide any ip6.arpa names in increasing number of labels, 7,11, ... up to 35, thus limiting the destination name (minimized) to a number of 35 labels. In case the last query minimization attempt (with 35 labels) would fail with NXDOMAIN, BIND would attempt the query mininimization again with the exact same QNAME, limited on the 35 labels, and that in turn would fail again. This fix avoids this fail loop by considering the extra labels that may appear in the leftmost part of an ip6.arpa name, those after the IPv6 part. --- lib/dns/resolver.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index df43b0a09a..612dab1501 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -10646,8 +10646,10 @@ fctx_minimize_qname(fetchctx_t *fctx) { fctx->qmin_labels = 17; } else if (fctx->qmin_labels < 19) { fctx->qmin_labels = 19; - } else if (fctx->qmin_labels > 19) { + } else if (fctx->qmin_labels < 35) { fctx->qmin_labels = 35; + } else { + fctx->qmin_labels = nlabels; } } else if (fctx->qmin_labels > DNS_QMIN_MAXLABELS) { fctx->qmin_labels = DNS_MAX_LABELS + 1;