diff --git a/CHANGES b/CHANGES index faa9394d06b87f6b54df5bc3ff76b20a62ad8917..3f45d9255808511378b7508a17344a6be09c4fca 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5167. [bug] nxdomain-redirect could sometimes lookup the wrong + redirect name. [GL #892] + 5166. [placeholder] 5165. [contrib] Removed SDB drivers from contrib; they're obsolete. diff --git a/lib/ns/query.c b/lib/ns/query.c index b6c20fb18533bf2f8b141579e40ce9c0b3285bd1..f1c640b43f12631deb094f2c7663b2123b94e37d 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -4672,6 +4672,7 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, dns_dbversion_t *version = NULL; dns_zone_t *zone = NULL; bool is_zone; + unsigned int labels; unsigned int options; CTRACE(ISC_LOG_DEBUG(3), "redirect2"); @@ -4714,12 +4715,13 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, } redirectname = dns_fixedname_initname(&fixedredirect); - if (dns_name_countlabels(name) > 1U) { + labels = dns_name_countlabels(client->query.qname); + if (labels > 1U) { dns_name_t prefix; - unsigned int labels = dns_name_countlabels(name) - 1; dns_name_init(&prefix, NULL); - dns_name_getlabelsequence(name, 0, labels, &prefix); + dns_name_getlabelsequence(client->query.qname, 0, labels - 1, + &prefix); result = dns_name_concatenate(&prefix, client->view->redirectzone, redirectname, NULL);