From e3e3bafa138a20558a2253470effc01702fc6dfd Mon Sep 17 00:00:00 2001 From: Brian Wellington Date: Thu, 2 Nov 2000 00:55:41 +0000 Subject: [PATCH] Lookups now return sigrdatasets if they exist. --- lib/dns/include/dns/lookup.h | 3 ++- lib/dns/lookup.c | 41 ++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/lib/dns/include/dns/lookup.h b/lib/dns/include/dns/lookup.h index 98c4f8a626..6b3204eb77 100644 --- a/lib/dns/include/dns/lookup.h +++ b/lib/dns/include/dns/lookup.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: lookup.h,v 1.2 2000/10/19 18:09:34 gson Exp $ */ +/* $Id: lookup.h,v 1.3 2000/11/02 00:55:41 bwelling Exp $ */ #ifndef DNS_LOOKUP_H #define DNS_LOOKUP_H 1 @@ -68,6 +68,7 @@ typedef struct dns_lookupevent { isc_result_t result; dns_name_t *name; dns_rdataset_t *rdataset; + dns_rdataset_t *sigrdataset; } dns_lookupevent_t; isc_result_t diff --git a/lib/dns/lookup.c b/lib/dns/lookup.c index d9347dfc94..8cb504b28a 100644 --- a/lib/dns/lookup.c +++ b/lib/dns/lookup.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: lookup.c,v 1.3 2000/10/31 03:21:54 marka Exp $ */ +/* $Id: lookup.c,v 1.4 2000/11/02 00:55:40 bwelling Exp $ */ #include @@ -51,6 +51,7 @@ struct dns_lookup { unsigned int restarts; isc_boolean_t canceled; dns_rdataset_t rdataset; + dns_rdataset_t sigrdataset; }; #define LOOKUP_MAGIC ISC_MAGIC('l', 'o', 'o', 'k') @@ -90,7 +91,8 @@ start_fetch(dns_lookup_t *lookup) { lookup->type, NULL, NULL, NULL, 0, lookup->task, fetch_done, lookup, - &lookup->rdataset, NULL, + &lookup->rdataset, + &lookup->sigrdataset, &lookup->fetch); return (result); @@ -100,6 +102,7 @@ static isc_result_t build_event(dns_lookup_t *lookup) { dns_name_t *name = NULL; dns_rdataset_t *rdataset = NULL; + dns_rdataset_t *sigrdataset = NULL; isc_result_t result; name = isc_mem_get(lookup->mctx, sizeof(dns_name_t)); @@ -121,8 +124,20 @@ build_event(dns_lookup_t *lookup) { dns_rdataset_init(rdataset); dns_rdataset_clone(&lookup->rdataset, rdataset); + if (dns_rdataset_isassociated(&lookup->sigrdataset)) { + sigrdataset = isc_mem_get(lookup->mctx, + sizeof(dns_rdataset_t)); + if (sigrdataset == NULL) { + result = ISC_R_NOMEMORY; + goto fail; + } + dns_rdataset_init(sigrdataset); + dns_rdataset_clone(&lookup->sigrdataset, sigrdataset); + } + lookup->event->name = name; lookup->event->rdataset = rdataset; + lookup->event->sigrdataset = sigrdataset; return (ISC_R_SUCCESS); @@ -137,6 +152,11 @@ build_event(dns_lookup_t *lookup) { dns_rdataset_disassociate(rdataset); isc_mem_put(lookup->mctx, rdataset, sizeof(dns_rdataset_t)); } + if (sigrdataset != NULL) { + if (dns_rdataset_isassociated(sigrdataset)) + dns_rdataset_disassociate(sigrdataset); + isc_mem_put(lookup->mctx, sigrdataset, sizeof(dns_rdataset_t)); + } return (result); } @@ -169,10 +189,13 @@ lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) { dns_fixedname_init(&foundname); fname = dns_fixedname_name(&foundname); INSIST(!dns_rdataset_isassociated(&lookup->rdataset)); + INSIST(!dns_rdataset_isassociated + (&lookup->sigrdataset)); result = dns_view_find(lookup->view, name, lookup->type, 0, 0, ISC_FALSE, fname, - &lookup->rdataset, NULL); + &lookup->rdataset, + &lookup->sigrdataset); if (result == ISC_R_NOTFOUND) { /* * We don't know anything about the name. @@ -188,7 +211,7 @@ lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) { fname = dns_fixedname_name(&event->foundname); dns_resolver_destroyfetch(&lookup->fetch); INSIST(event->rdataset == &lookup->rdataset); - INSIST(event->sigrdataset == NULL); + INSIST(event->sigrdataset == &lookup->sigrdataset); /* * Detach (if necessary) from things we know we * don't care about. @@ -268,6 +291,8 @@ lookup_find(dns_lookup_t *lookup, dns_fetchevent_t *event) { done: if (dns_rdataset_isassociated(&lookup->rdataset)) dns_rdataset_disassociate(&lookup->rdataset); + if (dns_rdataset_isassociated(&lookup->sigrdataset)) + dns_rdataset_disassociate(&lookup->sigrdataset); if (event != NULL) isc_event_free((isc_event_t **)&event); @@ -312,6 +337,10 @@ levent_destroy(isc_event_t *event) { dns_rdataset_disassociate(levent->rdataset); isc_mem_put(mctx, levent->rdataset, sizeof(dns_rdataset_t)); } + if (levent->sigrdataset != NULL) { + dns_rdataset_disassociate(levent->sigrdataset); + isc_mem_put(mctx, levent->sigrdataset, sizeof(dns_rdataset_t)); + } isc_mem_put(mctx, event, event->ev_size); } @@ -343,6 +372,7 @@ dns_lookup_create(isc_mem_t *mctx, dns_name_t *name, dns_rdatatype_t type, lookup->event->result = ISC_R_FAILURE; lookup->event->name = NULL; lookup->event->rdataset = NULL; + lookup->event->sigrdataset = NULL; lookup->task = NULL; isc_task_attach(task, &lookup->task); @@ -365,6 +395,7 @@ dns_lookup_create(isc_mem_t *mctx, dns_name_t *name, dns_rdatatype_t type, lookup->restarts = 0; lookup->canceled = ISC_FALSE; dns_rdataset_init(&lookup->rdataset); + dns_rdataset_init(&lookup->sigrdataset); lookup->magic = LOOKUP_MAGIC; *lookupp = lookup; @@ -418,6 +449,8 @@ dns_lookup_destroy(dns_lookup_t **lookupp) { REQUIRE(lookup->view == NULL); if (dns_rdataset_isassociated(&lookup->rdataset)) dns_rdataset_disassociate(&lookup->rdataset); + if (dns_rdataset_isassociated(&lookup->sigrdataset)) + dns_rdataset_disassociate(&lookup->sigrdataset); DESTROYLOCK(&lookup->lock); lookup->magic = 0;