From d1cbf714097e900ed1703529584d3e1a50e8a4a8 Mon Sep 17 00:00:00 2001 From: Brian Wellington Date: Sat, 7 Oct 2000 00:09:28 +0000 Subject: [PATCH] clean up suspicious looking and incorrect uses of dns_name_fromregion --- bin/named/query.c | 20 +++++++++++------ lib/dns/adb.c | 33 ++++++++++++++++------------ lib/dns/byaddr.c | 50 ++++++++++++++++++++++-------------------- lib/dns/dnssec.c | 13 +++-------- lib/dns/message.c | 16 ++++++++------ lib/dns/nxt.c | 28 ++++++++++++------------ lib/dns/resolver.c | 53 +++++++++++++++++++++++++++------------------ lib/dns/tkey.c | 11 +++------- lib/dns/tsig.c | 21 ++++++++---------- lib/dns/validator.c | 17 ++++++++------- 10 files changed, 138 insertions(+), 124 deletions(-) diff --git a/bin/named/query.c b/bin/named/query.c index 79ccc0e92f..fce56c0e97 100644 --- a/bin/named/query.c +++ b/bin/named/query.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: query.c,v 1.133 2000/09/28 05:48:50 marka Exp $ */ +/* $Id: query.c,v 1.134 2000/10/07 00:09:16 bwelling Exp $ */ #include @@ -2089,6 +2089,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) { dns_fixedname_t fixed; dns_dbversion_t *version; dns_zone_t *zone; + dns_rdata_cname_t cname; + dns_rdata_dname_t dname; CTRACE("query_find"); @@ -2614,10 +2616,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) { if (result != ISC_R_SUCCESS) goto cleanup; dns_rdataset_current(trdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; + result = dns_rdata_tostruct(&rdata, &cname, NULL); + if (result != ISC_R_SUCCESS) + goto cleanup; dns_name_init(tname, NULL); - dns_name_fromregion(tname, &r); + dns_name_clone(&cname.cname, tname); + dns_rdata_freestruct(&cname); query_maybeputqname(client); client->query.qname = tname; want_restart = ISC_TRUE; @@ -2658,10 +2662,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) { if (result != ISC_R_SUCCESS) goto cleanup; dns_rdataset_current(trdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; + result = dns_rdata_tostruct(&rdata, &dname, NULL); + if (result != ISC_R_SUCCESS) + goto cleanup; dns_name_init(tname, NULL); - dns_name_fromregion(tname, &r); + dns_name_clone(&dname.dname, tname); + dns_rdata_freestruct(&dname); /* * Construct the new qname. */ diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 23b180e712..b13ea013ab 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: adb.c,v 1.153 2000/09/29 23:54:31 gson Exp $ */ +/* $Id: adb.c,v 1.154 2000/10/07 00:09:18 bwelling Exp $ */ /* * Implementation notes @@ -52,6 +52,7 @@ #include #include #include +#include #include #include @@ -976,14 +977,14 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, unsigned int nlabels, nbits; int order; dns_rdata_t rdata; - isc_region_t r; - dns_name_t tname; dns_fixedname_t fixed1, fixed2; dns_name_t *prefix, *new_target; REQUIRE(dns_name_countlabels(target) == 0); if (rdataset->type == dns_rdatatype_cname) { + dns_rdata_cname_t cname; + /* * Copy the CNAME's target into the target name. */ @@ -991,14 +992,16 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, if (result != ISC_R_SUCCESS) return (result); dns_rdataset_current(rdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); - result = dns_name_dup(&tname, adb->mctx, target); + result = dns_rdata_tostruct(&rdata, &cname, NULL); + if (result != ISC_R_SUCCESS) + return (result); + result = dns_name_dup(&cname.cname, adb->mctx, target); + dns_rdata_freestruct(&cname); if (result != ISC_R_SUCCESS) return (result); } else { + dns_rdata_dname_t dname; + INSIST(rdataset->type == dns_rdatatype_dname); namereln = dns_name_fullcompare(name, fname, &order, &nlabels, &nbits); @@ -1010,10 +1013,9 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, if (result != ISC_R_SUCCESS) return (result); dns_rdataset_current(rdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); + result = dns_rdata_tostruct(&rdata, &dname, NULL); + if (result != ISC_R_SUCCESS) + return (result); /* * Construct the new target name. */ @@ -1022,10 +1024,13 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname, dns_fixedname_init(&fixed2); new_target = dns_fixedname_name(&fixed2); result = dns_name_split(name, nlabels, nbits, prefix, NULL); - if (result != ISC_R_SUCCESS) + if (result != ISC_R_SUCCESS) { + dns_rdata_freestruct(&dname); return (result); - result = dns_name_concatenate(prefix, &tname, new_target, + } + result = dns_name_concatenate(prefix, &dname.dname, new_target, NULL); + dns_rdata_freestruct(&dname); if (result != ISC_R_SUCCESS) return (result); result = dns_name_dup(new_target, adb->mctx, target); diff --git a/lib/dns/byaddr.c b/lib/dns/byaddr.c index 2860687e87..4a6daf4186 100644 --- a/lib/dns/byaddr.c +++ b/lib/dns/byaddr.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: byaddr.c,v 1.21 2000/08/26 01:36:46 bwelling Exp $ */ +/* $Id: byaddr.c,v 1.22 2000/10/07 00:09:19 bwelling Exp $ */ #include @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -131,9 +132,7 @@ static inline isc_result_t copy_ptr_targets(dns_byaddr_t *byaddr) { isc_result_t result; dns_name_t *name; - dns_name_t target; dns_rdata_t rdata; - isc_region_t r; /* * The caller must be holding the byaddr's lock. @@ -141,16 +140,19 @@ copy_ptr_targets(dns_byaddr_t *byaddr) { result = dns_rdataset_first(&byaddr->rdataset); while (result == ISC_R_SUCCESS) { + dns_rdata_ptr_t ptr; dns_rdataset_current(&byaddr->rdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; - dns_name_init(&target, NULL); - dns_name_fromregion(&target, &r); + result = dns_rdata_tostruct(&rdata, &ptr, NULL); + if (result != ISC_R_SUCCESS) + return (result); name = isc_mem_get(byaddr->mctx, sizeof *name); - if (name == NULL) + if (name == NULL) { + dns_rdata_freestruct(&ptr); return (ISC_R_NOMEMORY); + } dns_name_init(name, NULL); - result = dns_name_dup(&target, byaddr->mctx, name); + result = dns_name_dup(&ptr.ptr, byaddr->mctx, name); + dns_rdata_freestruct(&ptr); if (result != ISC_R_SUCCESS) { isc_mem_put(byaddr->mctx, name, sizeof *name); return (ISC_R_NOMEMORY); @@ -207,13 +209,13 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) { isc_boolean_t send_event = ISC_FALSE; isc_event_t *ievent; dns_name_t *name, *fname, *prefix; - dns_name_t tname; dns_fixedname_t foundname, fixed; dns_rdata_t rdata; - isc_region_t r; unsigned int nlabels, nbits; int order; dns_namereln_t namereln; + dns_rdata_cname_t cname; + dns_rdata_dname_t dname; REQUIRE(VALID_BYADDR(byaddr)); @@ -280,12 +282,12 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) { if (result != ISC_R_SUCCESS) break; dns_rdataset_current(&byaddr->rdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); - result = dns_name_concatenate(&tname, NULL, name, + result = dns_rdata_tostruct(&rdata, &cname, NULL); + if (result != ISC_R_SUCCESS) + break; + result = dns_name_concatenate(&cname.cname, NULL, name, NULL); + dns_rdata_freestruct(&cname); if (result == ISC_R_SUCCESS) want_restart = ISC_TRUE; break; @@ -300,10 +302,9 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) { if (result != ISC_R_SUCCESS) break; dns_rdataset_current(&byaddr->rdataset, &rdata); - r.base = rdata.data; - r.length = rdata.length; - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); + result = dns_rdata_tostruct(&rdata, &dname, NULL); + if (result != ISC_R_SUCCESS) + break; /* * Construct the new query name and start over. */ @@ -311,10 +312,13 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) { prefix = dns_fixedname_name(&fixed); result = dns_name_split(name, nlabels, nbits, prefix, NULL); - if (result != ISC_R_SUCCESS) + if (result != ISC_R_SUCCESS) { + dns_rdata_freestruct(&dname); break; - result = dns_name_concatenate(prefix, &tname, name, - NULL); + } + result = dns_name_concatenate(prefix, &dname.dname, + name, NULL); + dns_rdata_freestruct(&dname); if (result == ISC_R_SUCCESS) want_restart = ISC_TRUE; break; diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c index 7dba4ad6de..2e9108de39 100644 --- a/lib/dns/dnssec.c +++ b/lib/dns/dnssec.c @@ -16,7 +16,7 @@ */ /* - * $Id: dnssec.c,v 1.52 2000/09/25 23:18:54 bwelling Exp $ + * $Id: dnssec.c,v 1.53 2000/10/07 00:09:20 bwelling Exp $ */ @@ -643,8 +643,7 @@ dns_dnssec_verifymessage(isc_buffer_t *source, dns_message_t *msg, dns_rdata_sig_t sig; unsigned char header[DNS_MESSAGE_HEADERLEN]; dns_rdata_t rdata; - dns_name_t tname; - isc_region_t r, r2, source_r, sig_r, header_r; + isc_region_t r, source_r, sig_r, header_r; isc_stdtime_t now; dst_context_t *ctx = NULL; isc_mem_t *mctx; @@ -733,13 +732,7 @@ dns_dnssec_verifymessage(isc_buffer_t *source, dns_message_t *msg, * the name and 10 bytes for class, type, ttl, length to get to * the start of the rdata. */ - r.base = source_r.base + msg->sigstart; - r.length = source_r.length - msg->sigstart; - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); - dns_name_toregion(&tname, &r2); - isc_region_consume(&r, r2.length + 10); - INSIST(r.length >= sig.siglen); + dns_rdata_toregion(&rdata, &r); r.length -= sig.siglen; RETERR(dst_context_adddata(ctx, &r)); diff --git a/lib/dns/message.c b/lib/dns/message.c index ba894ca7f3..3e012013d3 100644 --- a/lib/dns/message.c +++ b/lib/dns/message.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: message.c,v 1.148 2000/10/06 22:02:02 bwelling Exp $ */ +/* $Id: message.c,v 1.149 2000/10/07 00:09:21 bwelling Exp $ */ /*** *** Imports @@ -440,6 +440,8 @@ msgresetsigs(dns_message_t *msg, isc_boolean_t replying) { isc_mempool_put(msg->rdspool, msg->querytsig); } } + if (dns_name_dynamic(msg->tsigname)) + dns_name_free(msg->tsigname, msg->mctx); isc_mempool_put(msg->namepool, msg->tsigname); msg->tsig = NULL; msg->tsigname = NULL; @@ -452,8 +454,11 @@ msgresetsigs(dns_message_t *msg, isc_boolean_t replying) { INSIST(dns_rdataset_isassociated(msg->sig0)); dns_rdataset_disassociate(msg->sig0); isc_mempool_put(msg->rdspool, msg->sig0); - if (msg->sig0name != NULL) + if (msg->sig0name != NULL) { + if (dns_name_dynamic(msg->sig0name)) + dns_name_free(msg->sig0name, msg->mctx); isc_mempool_put(msg->namepool, msg->sig0name); + } msg->sig0 = NULL; msg->sig0name = NULL; } @@ -2544,7 +2549,6 @@ dns_message_takebuffer(dns_message_t *msg, isc_buffer_t **buffer) { isc_result_t dns_message_signer(dns_message_t *msg, dns_name_t *signer) { - isc_region_t r; isc_result_t result = ISC_R_SUCCESS; dns_rdata_t rdata; @@ -2582,8 +2586,7 @@ dns_message_signer(dns_message_t *msg, dns_name_t *signer) { result = ISC_R_SUCCESS; else result = DNS_R_SIGINVALID; - dns_name_toregion(&sig.signer, &r); - dns_name_fromregion(signer, &r); + dns_name_clone(&sig.signer, signer); dns_rdata_freestruct(&sig); } else { @@ -2607,8 +2610,7 @@ dns_message_signer(dns_message_t *msg, dns_name_t *signer) { result = DNS_R_NOIDENTITY; identity = &msg->tsigkey->name; } - dns_name_toregion(identity, &r); - dns_name_fromregion(signer, &r); + dns_name_clone(identity, signer); dns_rdata_freestruct(&tsig); } diff --git a/lib/dns/nxt.c b/lib/dns/nxt.c index f46c5ffc50..c8f6c66ccb 100644 --- a/lib/dns/nxt.c +++ b/lib/dns/nxt.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: nxt.c,v 1.21 2000/09/12 09:55:31 bwelling Exp $ */ +/* $Id: nxt.c,v 1.22 2000/10/07 00:09:23 bwelling Exp $ */ #include @@ -28,6 +28,7 @@ #include #include #include +#include #include #define check_result(op, msg) \ @@ -169,23 +170,22 @@ dns_nxt_build(dns_db_t *db, dns_dbversion_t *version, dns_dbnode_t *node, isc_boolean_t dns_nxt_typepresent(dns_rdata_t *nxt, dns_rdatatype_t type) { - dns_name_t name; - isc_region_t r, r2; - unsigned char *nxt_bits; - int nxt_bits_length; + dns_rdata_nxt_t nxtstruct; + isc_result_t result; + isc_boolean_t present; REQUIRE(nxt != NULL); REQUIRE(nxt->type == dns_rdatatype_nxt); REQUIRE(type < 128); - dns_rdata_toregion(nxt, &r); - dns_name_init(&name, NULL); - dns_name_fromregion(&name, &r); - dns_name_toregion(&name, &r2); - nxt_bits = ((unsigned char *)r.base) + r2.length; - nxt_bits_length = r.length - r2.length; - if (type >= nxt_bits_length * 8) - return (ISC_FALSE); + /* This should never fail */ + result = dns_rdata_tostruct(nxt, &nxtstruct, NULL); + INSIST(result == ISC_R_SUCCESS); + + if (type >= nxtstruct.len * 8) + present = ISC_FALSE; else - return (ISC_TF(bit_isset(nxt_bits, type))); + present = ISC_TF(bit_isset(nxtstruct.typebits, type)); + dns_rdata_freestruct(&nxt); + return (present); } diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index b05bc14c5f..d425e2be7e 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.170 2000/10/06 18:58:18 bwelling Exp $ */ +/* $Id: resolver.c,v 1.171 2000/10/07 00:09:24 bwelling Exp $ */ #include @@ -1300,8 +1300,6 @@ sort_finds(fetchctx_t *fctx) { static isc_result_t fctx_getaddresses(fetchctx_t *fctx) { dns_rdata_t rdata; - isc_region_t r; - dns_name_t name; isc_result_t result; dns_resolver_t *res; isc_stdtime_t now; @@ -1310,6 +1308,7 @@ fctx_getaddresses(fetchctx_t *fctx) { isc_sockaddr_t *sa; dns_adbaddrinfo_t *ai; isc_boolean_t pruned, all_bad; + dns_rdata_ns_t ns; FCTXTRACE("getaddresses"); @@ -1387,9 +1386,11 @@ fctx_getaddresses(fetchctx_t *fctx) { /* * Extract the name from the NS record. */ - dns_rdata_toregion(&rdata, &r); - dns_name_init(&name, NULL); - dns_name_fromregion(&name, &r); + result = dns_rdata_tostruct(&rdata, &ns, NULL); + if (result != ISC_R_SUCCESS) { + dns_rdataset_next(&fctx->nameservers); + continue; + } options = stdoptions; /* * If this name is a subdomain of the query domain, tell @@ -1405,7 +1406,7 @@ fctx_getaddresses(fetchctx_t *fctx) { * We don't expect this situation to happen very frequently, * so we've chosen the simple solution. */ - if (dns_name_issubdomain(&name, &fctx->domain)) + if (dns_name_issubdomain(&ns.name, &fctx->domain)) options |= DNS_ADBFIND_STARTATROOT; options |= DNS_ADBFIND_GLUEOK; options |= DNS_ADBFIND_HINTOK; @@ -1416,7 +1417,7 @@ fctx_getaddresses(fetchctx_t *fctx) { find = NULL; result = dns_adb_createfind(res->view->adb, res->buckets[fctx->bucketnum].task, - fctx_finddone, fctx, &name, + fctx_finddone, fctx, &ns.name, &fctx->domain, options, now, NULL, res->view->dstport, &find); if (result != ISC_R_SUCCESS) { @@ -1462,6 +1463,7 @@ fctx_getaddresses(fetchctx_t *fctx) { dns_adb_destroyfind(&find); } } + dns_rdata_freestruct(&ns); result = dns_rdataset_next(&fctx->nameservers); } if (result != ISC_R_NOMORE) @@ -3092,15 +3094,18 @@ static inline isc_result_t cname_target(dns_rdataset_t *rdataset, dns_name_t *tname) { isc_result_t result; dns_rdata_t rdata; - isc_region_t r; + dns_rdata_cname_t cname; result = dns_rdataset_first(rdataset); if (result != ISC_R_SUCCESS) return (result); dns_rdataset_current(rdataset, &rdata); - dns_rdata_toregion(&rdata, &r); + result = dns_rdata_tostruct(&rdata, &cname, NULL); + if (result != ISC_R_SUCCESS) + return (result); dns_name_init(tname, NULL); - dns_name_fromregion(tname, &r); + dns_name_clone(&cname.cname, tname); + dns_rdata_freestruct(&cname); return (ISC_R_SUCCESS); } @@ -3111,38 +3116,44 @@ dname_target(dns_rdataset_t *rdataset, dns_name_t *qname, dns_name_t *oname, { isc_result_t result; dns_rdata_t rdata; - isc_region_t r; - dns_name_t *dname, tname; + dns_name_t *tname; unsigned int nlabels, nbits; int order; dns_namereln_t namereln; + dns_rdata_dname_t dname; /* * Get the target name of the DNAME. */ dns_fixedname_init(fixeddname); - dname = dns_fixedname_name(fixeddname); + tname = dns_fixedname_name(fixeddname); result = dns_rdataset_first(rdataset); if (result != ISC_R_SUCCESS) return (result); dns_rdataset_current(rdataset, &rdata); - dns_rdata_toregion(&rdata, &r); - dns_name_init(&tname, NULL); - dns_name_fromregion(&tname, &r); + result = dns_rdata_tostruct(&rdata, &dname, NULL); + if (result != ISC_R_SUCCESS) + return (result); /* * Get the prefix of qname. */ namereln = dns_name_fullcompare(qname, oname, &order, &nlabels, &nbits); - if (namereln != dns_namereln_subdomain) + if (namereln != dns_namereln_subdomain) { + dns_rdata_freestruct(&dname); return (DNS_R_FORMERR); - result = dns_name_split(qname, nlabels, nbits, dname, NULL); - if (result != ISC_R_SUCCESS) + } + result = dns_name_split(qname, nlabels, nbits, tname, NULL); + if (result != ISC_R_SUCCESS) { + dns_rdata_freestruct(&dname); return (result); + } - return (dns_name_concatenate(dname, &tname, dname, NULL)); + result = dns_name_concatenate(tname, &dname.dname, tname, NULL); + dns_rdata_freestruct(&dname); + return (result); } static isc_result_t diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c index 8936c72dc8..de9fe1bd5e 100644 --- a/lib/dns/tkey.c +++ b/lib/dns/tkey.c @@ -16,7 +16,7 @@ */ /* - * $Id: tkey.c,v 1.52 2000/10/06 17:08:12 bwelling Exp $ + * $Id: tkey.c,v 1.53 2000/10/07 00:09:25 bwelling Exp $ */ #include @@ -124,7 +124,7 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata, dns_name_t *newname = NULL; dns_rdatalist_t *newlist = NULL; dns_rdataset_t *newset = NULL; - isc_buffer_t *tmprdatabuf = NULL, *tmpnamebuf = NULL; + isc_buffer_t *tmprdatabuf = NULL; RETERR(dns_message_gettemprdata(msg, &newrdata)); @@ -135,14 +135,9 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata, dns_rdata_fromregion(newrdata, rdata->rdclass, rdata->type, &newr); dns_message_takebuffer(msg, &tmprdatabuf); - dns_name_toregion(name, &r); RETERR(dns_message_gettempname(msg, &newname)); dns_name_init(newname, NULL); - RETERR(isc_buffer_allocate(msg->mctx, &tmpnamebuf, r.length)); - isc_buffer_availableregion(tmpnamebuf, &newr); - memcpy(newr.base, r.base, r.length); - dns_name_fromregion(newname, &newr); - dns_message_takebuffer(msg, &tmpnamebuf); + RETERR(dns_name_dup(name, msg->mctx, newname)); RETERR(dns_message_gettemprdatalist(msg, &newlist)); newlist->rdclass = newrdata->rdclass; diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c index b19704895a..9677fdc6f5 100644 --- a/lib/dns/tsig.c +++ b/lib/dns/tsig.c @@ -16,7 +16,7 @@ */ /* - * $Id: tsig.c,v 1.91 2000/09/25 17:46:38 bwelling Exp $ + * $Id: tsig.c,v 1.92 2000/10/07 00:09:27 bwelling Exp $ * Principal Author: Brian Wellington */ @@ -330,7 +330,7 @@ dns_tsig_sign(dns_message_t *msg) { dns_rdata_t *rdata; dns_rdatalist_t *datalist; dns_rdataset_t *dataset; - isc_region_t r, r2; + isc_region_t r; isc_stdtime_t now; isc_mem_t *mctx; dst_context_t *ctx = NULL; @@ -543,16 +543,10 @@ dns_tsig_sign(dns_message_t *msg) { ret = dns_message_gettempname(msg, &owner); if (ret != ISC_R_SUCCESS) goto cleanup_dynbuf; - dns_name_toregion(&key->name, &r); - dynbuf = NULL; - ret = isc_buffer_allocate(mctx, &dynbuf, r.length); - if (ret != ISC_R_SUCCESS) - goto cleanup_dynbuf; - isc_buffer_availableregion(dynbuf, &r2); - memcpy(r2.base, r.base, r.length); dns_name_init(owner, NULL); - dns_name_fromregion(owner, &r2); - dns_message_takebuffer(msg, &dynbuf); + ret = dns_name_dup(&key->name, msg->mctx, owner); + if (ret != ISC_R_SUCCESS) + goto cleanup_owner; datalist = NULL; ret = dns_message_gettemprdatalist(msg, &datalist); @@ -567,7 +561,7 @@ dns_tsig_sign(dns_message_t *msg) { dataset = NULL; ret = dns_message_gettemprdataset(msg, &dataset); if (ret != ISC_R_SUCCESS) - goto cleanup_dynbuf; + goto cleanup_owner; dns_rdataset_init(dataset); dns_rdatalist_tordataset(datalist, dataset); msg->tsig = dataset; @@ -575,6 +569,9 @@ dns_tsig_sign(dns_message_t *msg) { return (ISC_R_SUCCESS); +cleanup_owner: + if (owner != NULL) + dns_message_puttempname(msg, &owner); cleanup_dynbuf: if (dynbuf != NULL) isc_buffer_free(&dynbuf); diff --git a/lib/dns/validator.c b/lib/dns/validator.c index 5ec72e9ae1..3f0709cdff 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: validator.c,v 1.81 2000/09/12 12:01:50 bwelling Exp $ */ +/* $Id: validator.c,v 1.82 2000/10/07 00:09:28 bwelling Exp $ */ #include @@ -361,8 +361,6 @@ nxtprovesnonexistence(dns_validator_t *val, dns_name_t *nxtname, { int order; dns_rdata_t rdata; - isc_region_t r; - dns_name_t nextname; isc_result_t result; result = dns_rdataset_first(nxtset); @@ -389,13 +387,14 @@ nxtprovesnonexistence(dns_validator_t *val, dns_name_t *nxtname, } validator_log(val, ISC_LOG_DEBUG(3), "nxt bitmask ok"); } else if (order > 0) { + dns_rdata_nxt_t nxt; + /* * The NXT owner name is less than the nonexistent name. */ - dns_rdata_toregion(&rdata, &r); - dns_name_init(&nextname, NULL); - dns_name_fromregion(&nextname, &r); - order = dns_name_compare(val->event->name, &nextname); + result = dns_rdata_tostruct(&rdata, &nxt, NULL); + INSIST(result == ISC_R_SUCCESS); + order = dns_name_compare(val->event->name, &nxt.next); if (order >= 0) { /* * The NXT next name is less than the nonexistent @@ -408,14 +407,16 @@ nxtprovesnonexistence(dns_validator_t *val, dns_name_t *nxtname, dns_rdataset_current(signxtset, &rdata); result = dns_rdata_tostruct(&rdata, &siginfo, NULL); INSIST (result == ISC_R_SUCCESS); - if (!dns_name_equal(&siginfo.signer, &nextname)) { + if (!dns_name_equal(&siginfo.signer, &nxt.next)) { validator_log(val, ISC_LOG_DEBUG(3), "next name is not greater"); + dns_rdata_freestruct(&nxt); return (ISC_FALSE); } validator_log(val, ISC_LOG_DEBUG(3), "nxt points to zone apex, ok"); } + dns_rdata_freestruct(&nxt); validator_log(val, ISC_LOG_DEBUG(3), "nxt range ok"); } else {