2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-02 15:45:25 +00:00

clean up suspicious looking and incorrect uses of dns_name_fromregion

This commit is contained in:
Brian Wellington
2000-10-07 00:09:28 +00:00
parent 3ee226769d
commit d1cbf71409
10 changed files with 138 additions and 124 deletions

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 <config.h> #include <config.h>
@@ -2089,6 +2089,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
dns_fixedname_t fixed; dns_fixedname_t fixed;
dns_dbversion_t *version; dns_dbversion_t *version;
dns_zone_t *zone; dns_zone_t *zone;
dns_rdata_cname_t cname;
dns_rdata_dname_t dname;
CTRACE("query_find"); CTRACE("query_find");
@@ -2614,10 +2616,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
goto cleanup; goto cleanup;
dns_rdataset_current(trdataset, &rdata); dns_rdataset_current(trdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &cname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
goto cleanup;
dns_name_init(tname, NULL); dns_name_init(tname, NULL);
dns_name_fromregion(tname, &r); dns_name_clone(&cname.cname, tname);
dns_rdata_freestruct(&cname);
query_maybeputqname(client); query_maybeputqname(client);
client->query.qname = tname; client->query.qname = tname;
want_restart = ISC_TRUE; want_restart = ISC_TRUE;
@@ -2658,10 +2662,12 @@ query_find(ns_client_t *client, dns_fetchevent_t *event) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
goto cleanup; goto cleanup;
dns_rdataset_current(trdataset, &rdata); dns_rdataset_current(trdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &dname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
goto cleanup;
dns_name_init(tname, NULL); dns_name_init(tname, NULL);
dns_name_fromregion(tname, &r); dns_name_clone(&dname.dname, tname);
dns_rdata_freestruct(&dname);
/* /*
* Construct the new qname. * Construct the new qname.
*/ */

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 * Implementation notes
@@ -52,6 +52,7 @@
#include <dns/log.h> #include <dns/log.h>
#include <dns/rdata.h> #include <dns/rdata.h>
#include <dns/rdataset.h> #include <dns/rdataset.h>
#include <dns/rdatastruct.h>
#include <dns/resolver.h> #include <dns/resolver.h>
#include <dns/result.h> #include <dns/result.h>
@@ -976,14 +977,14 @@ set_target(dns_adb_t *adb, dns_name_t *name, dns_name_t *fname,
unsigned int nlabels, nbits; unsigned int nlabels, nbits;
int order; int order;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r;
dns_name_t tname;
dns_fixedname_t fixed1, fixed2; dns_fixedname_t fixed1, fixed2;
dns_name_t *prefix, *new_target; dns_name_t *prefix, *new_target;
REQUIRE(dns_name_countlabels(target) == 0); REQUIRE(dns_name_countlabels(target) == 0);
if (rdataset->type == dns_rdatatype_cname) { if (rdataset->type == dns_rdatatype_cname) {
dns_rdata_cname_t cname;
/* /*
* Copy the CNAME's target into the target name. * 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) if (result != ISC_R_SUCCESS)
return (result); return (result);
dns_rdataset_current(rdataset, &rdata); dns_rdataset_current(rdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &cname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
dns_name_init(&tname, NULL); return (result);
dns_name_fromregion(&tname, &r); result = dns_name_dup(&cname.cname, adb->mctx, target);
result = dns_name_dup(&tname, adb->mctx, target); dns_rdata_freestruct(&cname);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} else { } else {
dns_rdata_dname_t dname;
INSIST(rdataset->type == dns_rdatatype_dname); INSIST(rdataset->type == dns_rdatatype_dname);
namereln = dns_name_fullcompare(name, fname, &order, namereln = dns_name_fullcompare(name, fname, &order,
&nlabels, &nbits); &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) if (result != ISC_R_SUCCESS)
return (result); return (result);
dns_rdataset_current(rdataset, &rdata); dns_rdataset_current(rdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &dname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
dns_name_init(&tname, NULL); return (result);
dns_name_fromregion(&tname, &r);
/* /*
* Construct the new target name. * 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); dns_fixedname_init(&fixed2);
new_target = dns_fixedname_name(&fixed2); new_target = dns_fixedname_name(&fixed2);
result = dns_name_split(name, nlabels, nbits, prefix, NULL); 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); return (result);
result = dns_name_concatenate(prefix, &tname, new_target, }
result = dns_name_concatenate(prefix, &dname.dname, new_target,
NULL); NULL);
dns_rdata_freestruct(&dname);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
result = dns_name_dup(new_target, adb->mctx, target); result = dns_name_dup(new_target, adb->mctx, target);

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 <config.h> #include <config.h>
@@ -30,6 +30,7 @@
#include <dns/events.h> #include <dns/events.h>
#include <dns/rdata.h> #include <dns/rdata.h>
#include <dns/rdataset.h> #include <dns/rdataset.h>
#include <dns/rdatastruct.h>
#include <dns/resolver.h> #include <dns/resolver.h>
#include <dns/result.h> #include <dns/result.h>
#include <dns/view.h> #include <dns/view.h>
@@ -131,9 +132,7 @@ static inline isc_result_t
copy_ptr_targets(dns_byaddr_t *byaddr) { copy_ptr_targets(dns_byaddr_t *byaddr) {
isc_result_t result; isc_result_t result;
dns_name_t *name; dns_name_t *name;
dns_name_t target;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r;
/* /*
* The caller must be holding the byaddr's lock. * 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); result = dns_rdataset_first(&byaddr->rdataset);
while (result == ISC_R_SUCCESS) { while (result == ISC_R_SUCCESS) {
dns_rdata_ptr_t ptr;
dns_rdataset_current(&byaddr->rdataset, &rdata); dns_rdataset_current(&byaddr->rdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &ptr, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
dns_name_init(&target, NULL); return (result);
dns_name_fromregion(&target, &r);
name = isc_mem_get(byaddr->mctx, sizeof *name); name = isc_mem_get(byaddr->mctx, sizeof *name);
if (name == NULL) if (name == NULL) {
dns_rdata_freestruct(&ptr);
return (ISC_R_NOMEMORY); return (ISC_R_NOMEMORY);
}
dns_name_init(name, NULL); 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) { if (result != ISC_R_SUCCESS) {
isc_mem_put(byaddr->mctx, name, sizeof *name); isc_mem_put(byaddr->mctx, name, sizeof *name);
return (ISC_R_NOMEMORY); 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_boolean_t send_event = ISC_FALSE;
isc_event_t *ievent; isc_event_t *ievent;
dns_name_t *name, *fname, *prefix; dns_name_t *name, *fname, *prefix;
dns_name_t tname;
dns_fixedname_t foundname, fixed; dns_fixedname_t foundname, fixed;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r;
unsigned int nlabels, nbits; unsigned int nlabels, nbits;
int order; int order;
dns_namereln_t namereln; dns_namereln_t namereln;
dns_rdata_cname_t cname;
dns_rdata_dname_t dname;
REQUIRE(VALID_BYADDR(byaddr)); REQUIRE(VALID_BYADDR(byaddr));
@@ -280,12 +282,12 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
break; break;
dns_rdataset_current(&byaddr->rdataset, &rdata); dns_rdataset_current(&byaddr->rdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &cname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
dns_name_init(&tname, NULL); break;
dns_name_fromregion(&tname, &r); result = dns_name_concatenate(&cname.cname, NULL, name,
result = dns_name_concatenate(&tname, NULL, name,
NULL); NULL);
dns_rdata_freestruct(&cname);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
want_restart = ISC_TRUE; want_restart = ISC_TRUE;
break; break;
@@ -300,10 +302,9 @@ byaddr_find(dns_byaddr_t *byaddr, dns_fetchevent_t *event) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
break; break;
dns_rdataset_current(&byaddr->rdataset, &rdata); dns_rdataset_current(&byaddr->rdataset, &rdata);
r.base = rdata.data; result = dns_rdata_tostruct(&rdata, &dname, NULL);
r.length = rdata.length; if (result != ISC_R_SUCCESS)
dns_name_init(&tname, NULL); break;
dns_name_fromregion(&tname, &r);
/* /*
* Construct the new query name and start over. * 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); prefix = dns_fixedname_name(&fixed);
result = dns_name_split(name, nlabels, nbits, prefix, result = dns_name_split(name, nlabels, nbits, prefix,
NULL); NULL);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS) {
dns_rdata_freestruct(&dname);
break; 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) if (result == ISC_R_SUCCESS)
want_restart = ISC_TRUE; want_restart = ISC_TRUE;
break; break;

View File

@@ -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; dns_rdata_sig_t sig;
unsigned char header[DNS_MESSAGE_HEADERLEN]; unsigned char header[DNS_MESSAGE_HEADERLEN];
dns_rdata_t rdata; dns_rdata_t rdata;
dns_name_t tname; isc_region_t r, source_r, sig_r, header_r;
isc_region_t r, r2, source_r, sig_r, header_r;
isc_stdtime_t now; isc_stdtime_t now;
dst_context_t *ctx = NULL; dst_context_t *ctx = NULL;
isc_mem_t *mctx; 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 name and 10 bytes for class, type, ttl, length to get to
* the start of the rdata. * the start of the rdata.
*/ */
r.base = source_r.base + msg->sigstart; dns_rdata_toregion(&rdata, &r);
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);
r.length -= sig.siglen; r.length -= sig.siglen;
RETERR(dst_context_adddata(ctx, &r)); RETERR(dst_context_adddata(ctx, &r));

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 *** Imports
@@ -440,6 +440,8 @@ msgresetsigs(dns_message_t *msg, isc_boolean_t replying) {
isc_mempool_put(msg->rdspool, msg->querytsig); 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); isc_mempool_put(msg->namepool, msg->tsigname);
msg->tsig = NULL; msg->tsig = NULL;
msg->tsigname = NULL; msg->tsigname = NULL;
@@ -452,8 +454,11 @@ msgresetsigs(dns_message_t *msg, isc_boolean_t replying) {
INSIST(dns_rdataset_isassociated(msg->sig0)); INSIST(dns_rdataset_isassociated(msg->sig0));
dns_rdataset_disassociate(msg->sig0); dns_rdataset_disassociate(msg->sig0);
isc_mempool_put(msg->rdspool, 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); isc_mempool_put(msg->namepool, msg->sig0name);
}
msg->sig0 = NULL; msg->sig0 = NULL;
msg->sig0name = NULL; msg->sig0name = NULL;
} }
@@ -2544,7 +2549,6 @@ dns_message_takebuffer(dns_message_t *msg, isc_buffer_t **buffer) {
isc_result_t isc_result_t
dns_message_signer(dns_message_t *msg, dns_name_t *signer) { dns_message_signer(dns_message_t *msg, dns_name_t *signer) {
isc_region_t r;
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
dns_rdata_t rdata; dns_rdata_t rdata;
@@ -2582,8 +2586,7 @@ dns_message_signer(dns_message_t *msg, dns_name_t *signer) {
result = ISC_R_SUCCESS; result = ISC_R_SUCCESS;
else else
result = DNS_R_SIGINVALID; result = DNS_R_SIGINVALID;
dns_name_toregion(&sig.signer, &r); dns_name_clone(&sig.signer, signer);
dns_name_fromregion(signer, &r);
dns_rdata_freestruct(&sig); dns_rdata_freestruct(&sig);
} }
else { else {
@@ -2607,8 +2610,7 @@ dns_message_signer(dns_message_t *msg, dns_name_t *signer) {
result = DNS_R_NOIDENTITY; result = DNS_R_NOIDENTITY;
identity = &msg->tsigkey->name; identity = &msg->tsigkey->name;
} }
dns_name_toregion(identity, &r); dns_name_clone(identity, signer);
dns_name_fromregion(signer, &r);
dns_rdata_freestruct(&tsig); dns_rdata_freestruct(&tsig);
} }

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 <config.h> #include <config.h>
@@ -28,6 +28,7 @@
#include <dns/rdatalist.h> #include <dns/rdatalist.h>
#include <dns/rdataset.h> #include <dns/rdataset.h>
#include <dns/rdatasetiter.h> #include <dns/rdatasetiter.h>
#include <dns/rdatastruct.h>
#include <dns/result.h> #include <dns/result.h>
#define check_result(op, msg) \ #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 isc_boolean_t
dns_nxt_typepresent(dns_rdata_t *nxt, dns_rdatatype_t type) { dns_nxt_typepresent(dns_rdata_t *nxt, dns_rdatatype_t type) {
dns_name_t name; dns_rdata_nxt_t nxtstruct;
isc_region_t r, r2; isc_result_t result;
unsigned char *nxt_bits; isc_boolean_t present;
int nxt_bits_length;
REQUIRE(nxt != NULL); REQUIRE(nxt != NULL);
REQUIRE(nxt->type == dns_rdatatype_nxt); REQUIRE(nxt->type == dns_rdatatype_nxt);
REQUIRE(type < 128); REQUIRE(type < 128);
dns_rdata_toregion(nxt, &r); /* This should never fail */
dns_name_init(&name, NULL); result = dns_rdata_tostruct(nxt, &nxtstruct, NULL);
dns_name_fromregion(&name, &r); INSIST(result == ISC_R_SUCCESS);
dns_name_toregion(&name, &r2);
nxt_bits = ((unsigned char *)r.base) + r2.length; if (type >= nxtstruct.len * 8)
nxt_bits_length = r.length - r2.length; present = ISC_FALSE;
if (type >= nxt_bits_length * 8)
return (ISC_FALSE);
else else
return (ISC_TF(bit_isset(nxt_bits, type))); present = ISC_TF(bit_isset(nxtstruct.typebits, type));
dns_rdata_freestruct(&nxt);
return (present);
} }

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 <config.h> #include <config.h>
@@ -1300,8 +1300,6 @@ sort_finds(fetchctx_t *fctx) {
static isc_result_t static isc_result_t
fctx_getaddresses(fetchctx_t *fctx) { fctx_getaddresses(fetchctx_t *fctx) {
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r;
dns_name_t name;
isc_result_t result; isc_result_t result;
dns_resolver_t *res; dns_resolver_t *res;
isc_stdtime_t now; isc_stdtime_t now;
@@ -1310,6 +1308,7 @@ fctx_getaddresses(fetchctx_t *fctx) {
isc_sockaddr_t *sa; isc_sockaddr_t *sa;
dns_adbaddrinfo_t *ai; dns_adbaddrinfo_t *ai;
isc_boolean_t pruned, all_bad; isc_boolean_t pruned, all_bad;
dns_rdata_ns_t ns;
FCTXTRACE("getaddresses"); FCTXTRACE("getaddresses");
@@ -1387,9 +1386,11 @@ fctx_getaddresses(fetchctx_t *fctx) {
/* /*
* Extract the name from the NS record. * Extract the name from the NS record.
*/ */
dns_rdata_toregion(&rdata, &r); result = dns_rdata_tostruct(&rdata, &ns, NULL);
dns_name_init(&name, NULL); if (result != ISC_R_SUCCESS) {
dns_name_fromregion(&name, &r); dns_rdataset_next(&fctx->nameservers);
continue;
}
options = stdoptions; options = stdoptions;
/* /*
* If this name is a subdomain of the query domain, tell * 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, * We don't expect this situation to happen very frequently,
* so we've chosen the simple solution. * 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_STARTATROOT;
options |= DNS_ADBFIND_GLUEOK; options |= DNS_ADBFIND_GLUEOK;
options |= DNS_ADBFIND_HINTOK; options |= DNS_ADBFIND_HINTOK;
@@ -1416,7 +1417,7 @@ fctx_getaddresses(fetchctx_t *fctx) {
find = NULL; find = NULL;
result = dns_adb_createfind(res->view->adb, result = dns_adb_createfind(res->view->adb,
res->buckets[fctx->bucketnum].task, res->buckets[fctx->bucketnum].task,
fctx_finddone, fctx, &name, fctx_finddone, fctx, &ns.name,
&fctx->domain, options, now, NULL, &fctx->domain, options, now, NULL,
res->view->dstport, &find); res->view->dstport, &find);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
@@ -1462,6 +1463,7 @@ fctx_getaddresses(fetchctx_t *fctx) {
dns_adb_destroyfind(&find); dns_adb_destroyfind(&find);
} }
} }
dns_rdata_freestruct(&ns);
result = dns_rdataset_next(&fctx->nameservers); result = dns_rdataset_next(&fctx->nameservers);
} }
if (result != ISC_R_NOMORE) if (result != ISC_R_NOMORE)
@@ -3092,15 +3094,18 @@ static inline isc_result_t
cname_target(dns_rdataset_t *rdataset, dns_name_t *tname) { cname_target(dns_rdataset_t *rdataset, dns_name_t *tname) {
isc_result_t result; isc_result_t result;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r; dns_rdata_cname_t cname;
result = dns_rdataset_first(rdataset); result = dns_rdataset_first(rdataset);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
dns_rdataset_current(rdataset, &rdata); 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_init(tname, NULL);
dns_name_fromregion(tname, &r); dns_name_clone(&cname.cname, tname);
dns_rdata_freestruct(&cname);
return (ISC_R_SUCCESS); 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; isc_result_t result;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r; dns_name_t *tname;
dns_name_t *dname, tname;
unsigned int nlabels, nbits; unsigned int nlabels, nbits;
int order; int order;
dns_namereln_t namereln; dns_namereln_t namereln;
dns_rdata_dname_t dname;
/* /*
* Get the target name of the DNAME. * Get the target name of the DNAME.
*/ */
dns_fixedname_init(fixeddname); dns_fixedname_init(fixeddname);
dname = dns_fixedname_name(fixeddname); tname = dns_fixedname_name(fixeddname);
result = dns_rdataset_first(rdataset); result = dns_rdataset_first(rdataset);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
dns_rdataset_current(rdataset, &rdata); dns_rdataset_current(rdataset, &rdata);
dns_rdata_toregion(&rdata, &r); result = dns_rdata_tostruct(&rdata, &dname, NULL);
dns_name_init(&tname, NULL); if (result != ISC_R_SUCCESS)
dns_name_fromregion(&tname, &r); return (result);
/* /*
* Get the prefix of qname. * Get the prefix of qname.
*/ */
namereln = dns_name_fullcompare(qname, oname, &order, &nlabels, namereln = dns_name_fullcompare(qname, oname, &order, &nlabels,
&nbits); &nbits);
if (namereln != dns_namereln_subdomain) if (namereln != dns_namereln_subdomain) {
dns_rdata_freestruct(&dname);
return (DNS_R_FORMERR); 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 (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 static isc_result_t

View File

@@ -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 <config.h> #include <config.h>
@@ -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_name_t *newname = NULL;
dns_rdatalist_t *newlist = NULL; dns_rdatalist_t *newlist = NULL;
dns_rdataset_t *newset = NULL; dns_rdataset_t *newset = NULL;
isc_buffer_t *tmprdatabuf = NULL, *tmpnamebuf = NULL; isc_buffer_t *tmprdatabuf = NULL;
RETERR(dns_message_gettemprdata(msg, &newrdata)); 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_rdata_fromregion(newrdata, rdata->rdclass, rdata->type, &newr);
dns_message_takebuffer(msg, &tmprdatabuf); dns_message_takebuffer(msg, &tmprdatabuf);
dns_name_toregion(name, &r);
RETERR(dns_message_gettempname(msg, &newname)); RETERR(dns_message_gettempname(msg, &newname));
dns_name_init(newname, NULL); dns_name_init(newname, NULL);
RETERR(isc_buffer_allocate(msg->mctx, &tmpnamebuf, r.length)); RETERR(dns_name_dup(name, msg->mctx, newname));
isc_buffer_availableregion(tmpnamebuf, &newr);
memcpy(newr.base, r.base, r.length);
dns_name_fromregion(newname, &newr);
dns_message_takebuffer(msg, &tmpnamebuf);
RETERR(dns_message_gettemprdatalist(msg, &newlist)); RETERR(dns_message_gettemprdatalist(msg, &newlist));
newlist->rdclass = newrdata->rdclass; newlist->rdclass = newrdata->rdclass;

View File

@@ -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 * Principal Author: Brian Wellington
*/ */
@@ -330,7 +330,7 @@ dns_tsig_sign(dns_message_t *msg) {
dns_rdata_t *rdata; dns_rdata_t *rdata;
dns_rdatalist_t *datalist; dns_rdatalist_t *datalist;
dns_rdataset_t *dataset; dns_rdataset_t *dataset;
isc_region_t r, r2; isc_region_t r;
isc_stdtime_t now; isc_stdtime_t now;
isc_mem_t *mctx; isc_mem_t *mctx;
dst_context_t *ctx = NULL; dst_context_t *ctx = NULL;
@@ -543,16 +543,10 @@ dns_tsig_sign(dns_message_t *msg) {
ret = dns_message_gettempname(msg, &owner); ret = dns_message_gettempname(msg, &owner);
if (ret != ISC_R_SUCCESS) if (ret != ISC_R_SUCCESS)
goto cleanup_dynbuf; 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_init(owner, NULL);
dns_name_fromregion(owner, &r2); ret = dns_name_dup(&key->name, msg->mctx, owner);
dns_message_takebuffer(msg, &dynbuf); if (ret != ISC_R_SUCCESS)
goto cleanup_owner;
datalist = NULL; datalist = NULL;
ret = dns_message_gettemprdatalist(msg, &datalist); ret = dns_message_gettemprdatalist(msg, &datalist);
@@ -567,7 +561,7 @@ dns_tsig_sign(dns_message_t *msg) {
dataset = NULL; dataset = NULL;
ret = dns_message_gettemprdataset(msg, &dataset); ret = dns_message_gettemprdataset(msg, &dataset);
if (ret != ISC_R_SUCCESS) if (ret != ISC_R_SUCCESS)
goto cleanup_dynbuf; goto cleanup_owner;
dns_rdataset_init(dataset); dns_rdataset_init(dataset);
dns_rdatalist_tordataset(datalist, dataset); dns_rdatalist_tordataset(datalist, dataset);
msg->tsig = dataset; msg->tsig = dataset;
@@ -575,6 +569,9 @@ dns_tsig_sign(dns_message_t *msg) {
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
cleanup_owner:
if (owner != NULL)
dns_message_puttempname(msg, &owner);
cleanup_dynbuf: cleanup_dynbuf:
if (dynbuf != NULL) if (dynbuf != NULL)
isc_buffer_free(&dynbuf); isc_buffer_free(&dynbuf);

View File

@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * 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 <config.h> #include <config.h>
@@ -361,8 +361,6 @@ nxtprovesnonexistence(dns_validator_t *val, dns_name_t *nxtname,
{ {
int order; int order;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_region_t r;
dns_name_t nextname;
isc_result_t result; isc_result_t result;
result = dns_rdataset_first(nxtset); 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"); validator_log(val, ISC_LOG_DEBUG(3), "nxt bitmask ok");
} else if (order > 0) { } else if (order > 0) {
dns_rdata_nxt_t nxt;
/* /*
* The NXT owner name is less than the nonexistent name. * The NXT owner name is less than the nonexistent name.
*/ */
dns_rdata_toregion(&rdata, &r); result = dns_rdata_tostruct(&rdata, &nxt, NULL);
dns_name_init(&nextname, NULL); INSIST(result == ISC_R_SUCCESS);
dns_name_fromregion(&nextname, &r); order = dns_name_compare(val->event->name, &nxt.next);
order = dns_name_compare(val->event->name, &nextname);
if (order >= 0) { if (order >= 0) {
/* /*
* The NXT next name is less than the nonexistent * 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); dns_rdataset_current(signxtset, &rdata);
result = dns_rdata_tostruct(&rdata, &siginfo, NULL); result = dns_rdata_tostruct(&rdata, &siginfo, NULL);
INSIST (result == ISC_R_SUCCESS); 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), validator_log(val, ISC_LOG_DEBUG(3),
"next name is not greater"); "next name is not greater");
dns_rdata_freestruct(&nxt);
return (ISC_FALSE); return (ISC_FALSE);
} }
validator_log(val, ISC_LOG_DEBUG(3), validator_log(val, ISC_LOG_DEBUG(3),
"nxt points to zone apex, ok"); "nxt points to zone apex, ok");
} }
dns_rdata_freestruct(&nxt);
validator_log(val, ISC_LOG_DEBUG(3), validator_log(val, ISC_LOG_DEBUG(3),
"nxt range ok"); "nxt range ok");
} else { } else {