diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index fc6d7f57df..32cb137f7a 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -7217,6 +7217,8 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) { dns_resolver_t *res = NULL; dns_rdataset_t *nsrdataset = NULL; dns_rdataset_t nameservers; + dns_fixedname_t fixed; + dns_name_t *domain = NULL; unsigned int n; dns_fetch_t *fetch = NULL; @@ -7291,12 +7293,16 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) { goto cleanup; } - /* Get nameservers from fctx->nsfetch before we destroy it. */ + /* Get nameservers from fetch before we destroy it. */ dns_rdataset_init(&nameservers); if (dns_rdataset_isassociated(&fetch->private->nameservers)) { dns_rdataset_clone(&fetch->private->nameservers, &nameservers); nsrdataset = &nameservers; + + /* Get domain from fetch before we destroy it. */ + domain = dns_fixedname_initname(&fixed); + dns_name_copy(fetch->private->domain, domain); } n = dns_name_countlabels(fctx->nsname); @@ -7306,10 +7312,10 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) { fetchctx_ref(fctx); result = dns_resolver_createfetch( - res, fctx->nsname, dns_rdatatype_ns, - fetch->private->domain, nsrdataset, NULL, NULL, 0, - fctx->options, 0, NULL, task, resume_dslookup, fctx, - &fctx->nsrrset, NULL, &fctx->nsfetch); + res, fctx->nsname, dns_rdatatype_ns, domain, nsrdataset, + NULL, NULL, 0, fctx->options, 0, NULL, task, + resume_dslookup, fctx, &fctx->nsrrset, NULL, + &fctx->nsfetch); if (result != ISC_R_SUCCESS) { fetchctx_unref(fctx); if (result == DNS_R_DUPLICATE) {