From 1d7a9ebedac6939937ca5baa477ad88392ef7a99 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 21 Feb 2025 00:33:35 -0800 Subject: [PATCH 1/6] remove the namebuf and onamebuf buffers in dig lookup->namebuf and lookup->onamebuf were not necessary and have been removed. --- bin/dig/dighost.c | 12 +++--------- bin/dig/dighost.h | 2 -- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index cca1df70d2..91aaa0f42e 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -2206,11 +2206,6 @@ setup_lookup(dig_lookup_t *lookup) { } dns_message_gettempname(lookup->sendmsg, &lookup->name); - isc_buffer_init(&lookup->namebuf, lookup->name_space, - sizeof(lookup->name_space)); - isc_buffer_init(&lookup->onamebuf, lookup->oname_space, - sizeof(lookup->oname_space)); - /* * We cannot convert `textname' and `origin' separately. * `textname' doesn't contain TLD, but local mapping needs @@ -2259,7 +2254,7 @@ setup_lookup(dig_lookup_t *lookup) { isc_buffer_init(&b, origin, len); isc_buffer_add(&b, len); result = dns_name_fromtext(lookup->oname, &b, dns_rootname, 0, - &lookup->onamebuf); + NULL); if (result != ISC_R_SUCCESS) { dns_message_puttempname(lookup->sendmsg, &lookup->name); dns_message_puttempname(lookup->sendmsg, @@ -2282,7 +2277,7 @@ setup_lookup(dig_lookup_t *lookup) { if (!dns_name_isabsolute(name)) { result = dns_name_concatenate( name, lookup->oname, - lookup->name, &lookup->namebuf); + lookup->name, NULL); } else { dns_name_copy(name, lookup->name); } @@ -2310,8 +2305,7 @@ setup_lookup(dig_lookup_t *lookup) { isc_buffer_init(&b, textname, len); isc_buffer_add(&b, len); result = dns_name_fromtext(lookup->name, &b, - dns_rootname, 0, - &lookup->namebuf); + dns_rootname, 0, NULL); if (result != ISC_R_SUCCESS) { dns_message_puttempname(lookup->sendmsg, &lookup->name); diff --git a/bin/dig/dighost.h b/bin/dig/dighost.h index 1c5c7ddf94..8c404d115d 100644 --- a/bin/dig/dighost.h +++ b/bin/dig/dighost.h @@ -131,8 +131,6 @@ struct dig_lookup { bool rdclassset; char name_space[BUFSIZE]; char oname_space[BUFSIZE]; - isc_buffer_t namebuf; - isc_buffer_t onamebuf; isc_buffer_t renderbuf; char *sendspace; dns_name_t *name; From 2edefbad4a99a2e2a234c2c692a6204547154e7c Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 21 Feb 2025 18:14:55 -0800 Subject: [PATCH 2/6] remove the 'name_coff' parameter in dns_name_towire() this parameter was added as a (minor) optimization for cases where dns_name_towire() is run repeatedly with the same compression context, as when rendering all of the rdatas in an rdataset. it is currently only used in one place. we now simplify the interface by removing the extra parameter. the compression offset value is now part of the compression context, and can be activated when needed by calling dns_compress_setmultiuse(). multiuse mode is automatically deactivated by any subsequent call to dns_compress_permitted(). --- lib/dns/compress.c | 19 +++++++++++++++++++ lib/dns/include/dns/compress.h | 29 ++++++++++++++++++++++++++++- lib/dns/include/dns/name.h | 2 +- lib/dns/name.c | 17 +++++++++-------- lib/dns/ncache.c | 2 +- lib/dns/rdata/any_255/tsig_250.c | 2 +- lib/dns/rdata/ch_3/a_1.c | 2 +- lib/dns/rdata/generic/afsdb_18.c | 2 +- lib/dns/rdata/generic/cname_5.c | 2 +- lib/dns/rdata/generic/dname_39.c | 2 +- lib/dns/rdata/generic/mb_7.c | 2 +- lib/dns/rdata/generic/md_3.c | 2 +- lib/dns/rdata/generic/mf_4.c | 2 +- lib/dns/rdata/generic/mg_8.c | 2 +- lib/dns/rdata/generic/minfo_14.c | 4 ++-- lib/dns/rdata/generic/mr_9.c | 2 +- lib/dns/rdata/generic/mx_15.c | 2 +- lib/dns/rdata/generic/naptr_35.c | 2 +- lib/dns/rdata/generic/ns_2.c | 2 +- lib/dns/rdata/generic/nsec_47.c | 2 +- lib/dns/rdata/generic/nxt_30.c | 2 +- lib/dns/rdata/generic/ptr_12.c | 2 +- lib/dns/rdata/generic/rp_17.c | 4 ++-- lib/dns/rdata/generic/rrsig_46.c | 2 +- lib/dns/rdata/generic/rt_21.c | 2 +- lib/dns/rdata/generic/sig_24.c | 2 +- lib/dns/rdata/generic/soa_6.c | 4 ++-- lib/dns/rdata/generic/talink_58.c | 4 ++-- lib/dns/rdata/generic/tkey_249.c | 2 +- lib/dns/rdata/in_1/a6_38.c | 2 +- lib/dns/rdata/in_1/kx_36.c | 2 +- lib/dns/rdata/in_1/nsap-ptr_23.c | 2 +- lib/dns/rdata/in_1/px_26.c | 4 ++-- lib/dns/rdata/in_1/srv_33.c | 2 +- lib/dns/rdata/in_1/svcb_64.c | 2 +- lib/dns/rdataset.c | 8 +++----- lib/dns/resolver.c | 4 ++-- lib/ns/client.c | 2 +- tests/bench/compress.c | 2 +- tests/dns/dnstap_test.c | 2 +- tests/dns/name_test.c | 25 +++++++++++++------------ 41 files changed, 114 insertions(+), 68 deletions(-) diff --git a/lib/dns/compress.c b/lib/dns/compress.c index 9490d2a7f7..9fc067a469 100644 --- a/lib/dns/compress.c +++ b/lib/dns/compress.c @@ -57,6 +57,7 @@ dns_compress_init(dns_compress_t *cctx, isc_mem_t *mctx, .mctx = mctx, .mask = mask, .set = set, + .coff = 0xffff, }; } @@ -69,6 +70,23 @@ dns_compress_invalidate(dns_compress_t *cctx) { *cctx = (dns_compress_t){ 0 }; } +void +dns_compress_setmultiuse(dns_compress_t *cctx, bool multi) { + REQUIRE(CCTX_VALID(cctx)); + if (multi) { + cctx->flags |= DNS_COMPRESS_MULTIUSE; + } else { + cctx->flags &= ~DNS_COMPRESS_MULTIUSE; + } + cctx->coff = 0xffff; +} + +bool +dns_compress_getmultiuse(dns_compress_t *cctx) { + REQUIRE(CCTX_VALID(cctx)); + return (cctx->flags & DNS_COMPRESS_MULTIUSE) != 0; +} + void dns_compress_setpermitted(dns_compress_t *cctx, bool permitted) { REQUIRE(CCTX_VALID(cctx)); @@ -77,6 +95,7 @@ dns_compress_setpermitted(dns_compress_t *cctx, bool permitted) { } else { cctx->flags &= ~DNS_COMPRESS_PERMITTED; } + dns_compress_setmultiuse(cctx, false); } bool diff --git a/lib/dns/include/dns/compress.h b/lib/dns/include/dns/compress.h index 1e3fb84527..9ca1b98327 100644 --- a/lib/dns/include/dns/compress.h +++ b/lib/dns/include/dns/compress.h @@ -75,6 +75,7 @@ enum dns_compress_flags { DNS_COMPRESS_LARGE = 0x00000004U, /* can toggle while rendering a message */ DNS_COMPRESS_PERMITTED = 0x00000008U, + DNS_COMPRESS_MULTIUSE = 0x00000010U, }; /* @@ -91,6 +92,7 @@ struct dns_compress { dns_compress_flags_t flags; uint16_t mask; uint16_t count; + uint16_t coff; isc_mem_t *mctx; dns_compress_slot_t *set; dns_compress_slot_t smallset[1 << DNS_COMPRESS_SMALLBITS]; @@ -140,11 +142,36 @@ dns_compress_invalidate(dns_compress_t *cctx); */ void +dns_compress_setmultiuse(dns_compress_t *cctx, bool multi); +/*%< + * Indicates this compression context is to be used for + * multiple calls to dns_name_towire(), for example when + * rendering the rdata in an rdataset. This causes the + * compression offset to be reusable across calls. + * + * Requires: + *\li 'cctx' is not NULL. + */ + +bool +dns_compress_getmultiuse(dns_compress_t *cctx); + +/*%< + * Find out whether multiuse is enabled. + * + * Requires: + *\li 'cctx' to be initialized. + * + * Returns: + *\li allowed compression bitmap. + */ +void dns_compress_setpermitted(dns_compress_t *cctx, bool permitted); /*%< * Sets whether compression is allowed, according to RFC 3597. - * This can vary depending on the rdata type. + * This can vary depending on the rdata type. This will also + * reset multiuse to false. * * Requires: *\li 'cctx' to be initialized. diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 24340b2e4b..2760e5bf89 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -768,7 +768,7 @@ dns_name_fromwire(dns_name_t *name, isc_buffer_t *source, dns_decompress_t dctx, isc_result_t dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, - isc_buffer_t *target, uint16_t *comp_offsetp); + isc_buffer_t *target); /*%< * Convert 'name' into wire format, compressing it as specified by the * compression context 'cctx', and storing the result in 'target'. diff --git a/lib/dns/name.c b/lib/dns/name.c index 12201c05d8..138848937d 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -1436,8 +1436,8 @@ root_label:; isc_result_t dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, - isc_buffer_t *target, uint16_t *name_coff) { - bool compress; + isc_buffer_t *target) { + bool compress, multi; unsigned int here; unsigned int prefix_length; unsigned int suffix_coff; @@ -1453,16 +1453,17 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, compress = !name->attributes.nocompress && dns_compress_getpermitted(cctx); + multi = compress && dns_compress_getmultiuse(cctx); /* * Write a compression pointer directly if the caller passed us * a pointer to this name's offset that we saved previously. */ - if (compress && name_coff != NULL && *name_coff < 0x4000) { + if (multi && cctx->coff < 0x4000) { if (isc_buffer_availablelength(target) < 2) { return ISC_R_NOSPACE; } - isc_buffer_putuint16(target, *name_coff | 0xc000); + isc_buffer_putuint16(target, cctx->coff | 0xc000); return ISC_R_SUCCESS; } @@ -1483,8 +1484,8 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, * it isn't too short for compression to help (i.e. it's the root) */ here = isc_buffer_usedlength(target); - if (name_coff != NULL && here < 0x4000 && prefix_length > 1) { - *name_coff = (uint16_t)here; + if (multi && here < 0x4000 && prefix_length > 1) { + cctx->coff = (uint16_t)here; } if (prefix_length > 0) { @@ -1496,8 +1497,8 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, } if (suffix_coff > 0) { - if (name_coff != NULL && prefix_length == 0) { - *name_coff = suffix_coff; + if (multi && prefix_length == 0) { + cctx->coff = suffix_coff; } if (isc_buffer_availablelength(target) < 2) { return ISC_R_NOSPACE; diff --git a/lib/dns/ncache.c b/lib/dns/ncache.c index edf8bbe816..bd9c43288b 100644 --- a/lib/dns/ncache.c +++ b/lib/dns/ncache.c @@ -360,7 +360,7 @@ dns_ncache_towire(dns_rdataset_t *rdataset, dns_compress_t *cctx, * Write the name. */ dns_compress_setpermitted(cctx, true); - result = dns_name_towire(&name, cctx, target, NULL); + result = dns_name_towire(&name, cctx, target); if (result != ISC_R_SUCCESS) { goto rollback; } diff --git a/lib/dns/rdata/any_255/tsig_250.c b/lib/dns/rdata/any_255/tsig_250.c index f568665981..e356840d93 100644 --- a/lib/dns/rdata/any_255/tsig_250.c +++ b/lib/dns/rdata/any_255/tsig_250.c @@ -335,7 +335,7 @@ towire_any_tsig(ARGS_TOWIRE) { dns_rdata_toregion(rdata, &sr); dns_name_init(&name); dns_name_fromregion(&name, &sr); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); isc_region_consume(&sr, name_length(&name)); return mem_tobuffer(target, sr.base, sr.length); } diff --git a/lib/dns/rdata/ch_3/a_1.c b/lib/dns/rdata/ch_3/a_1.c index af7ee1e8e1..99c9334c40 100644 --- a/lib/dns/rdata/ch_3/a_1.c +++ b/lib/dns/rdata/ch_3/a_1.c @@ -146,7 +146,7 @@ towire_ch_a(ARGS_TOWIRE) { dns_name_fromregion(&name, &sregion); isc_region_consume(&sregion, name_length(&name)); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); isc_buffer_availableregion(target, &tregion); if (tregion.length < 2) { diff --git a/lib/dns/rdata/generic/afsdb_18.c b/lib/dns/rdata/generic/afsdb_18.c index 9a8ed8ff44..25bd2e0b69 100644 --- a/lib/dns/rdata/generic/afsdb_18.c +++ b/lib/dns/rdata/generic/afsdb_18.c @@ -141,7 +141,7 @@ towire_afsdb(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, &sr); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/cname_5.c b/lib/dns/rdata/generic/cname_5.c index a66c719b33..a946097be6 100644 --- a/lib/dns/rdata/generic/cname_5.c +++ b/lib/dns/rdata/generic/cname_5.c @@ -91,7 +91,7 @@ towire_cname(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/dname_39.c b/lib/dns/rdata/generic/dname_39.c index 7fa31a471d..ce87676a1e 100644 --- a/lib/dns/rdata/generic/dname_39.c +++ b/lib/dns/rdata/generic/dname_39.c @@ -91,7 +91,7 @@ towire_dname(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/mb_7.c b/lib/dns/rdata/generic/mb_7.c index 767d5b5c51..ab6ab42b0c 100644 --- a/lib/dns/rdata/generic/mb_7.c +++ b/lib/dns/rdata/generic/mb_7.c @@ -90,7 +90,7 @@ towire_mb(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/md_3.c b/lib/dns/rdata/generic/md_3.c index 70d6006e65..702b60c185 100644 --- a/lib/dns/rdata/generic/md_3.c +++ b/lib/dns/rdata/generic/md_3.c @@ -90,7 +90,7 @@ towire_md(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/mf_4.c b/lib/dns/rdata/generic/mf_4.c index ad14f8fa40..0142c12478 100644 --- a/lib/dns/rdata/generic/mf_4.c +++ b/lib/dns/rdata/generic/mf_4.c @@ -90,7 +90,7 @@ towire_mf(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/mg_8.c b/lib/dns/rdata/generic/mg_8.c index f426c299a5..0c8fae21c9 100644 --- a/lib/dns/rdata/generic/mg_8.c +++ b/lib/dns/rdata/generic/mg_8.c @@ -90,7 +90,7 @@ towire_mg(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/minfo_14.c b/lib/dns/rdata/generic/minfo_14.c index aef31a4dc3..7ea92d7c99 100644 --- a/lib/dns/rdata/generic/minfo_14.c +++ b/lib/dns/rdata/generic/minfo_14.c @@ -129,12 +129,12 @@ towire_minfo(ARGS_TOWIRE) { dns_name_fromregion(&rmail, ®ion); isc_region_consume(®ion, name_length(&rmail)); - RETERR(dns_name_towire(&rmail, cctx, target, NULL)); + RETERR(dns_name_towire(&rmail, cctx, target)); dns_name_fromregion(&rmail, ®ion); isc_region_consume(®ion, rmail.length); - return dns_name_towire(&rmail, cctx, target, NULL); + return dns_name_towire(&rmail, cctx, target); } static int diff --git a/lib/dns/rdata/generic/mr_9.c b/lib/dns/rdata/generic/mr_9.c index a63b37a947..4e62678852 100644 --- a/lib/dns/rdata/generic/mr_9.c +++ b/lib/dns/rdata/generic/mr_9.c @@ -90,7 +90,7 @@ towire_mr(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/mx_15.c b/lib/dns/rdata/generic/mx_15.c index 50464d71b6..20510dda98 100644 --- a/lib/dns/rdata/generic/mx_15.c +++ b/lib/dns/rdata/generic/mx_15.c @@ -165,7 +165,7 @@ towire_mx(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/naptr_35.c b/lib/dns/rdata/generic/naptr_35.c index d66b6934a7..3715bbcbe3 100644 --- a/lib/dns/rdata/generic/naptr_35.c +++ b/lib/dns/rdata/generic/naptr_35.c @@ -388,7 +388,7 @@ towire_naptr(ARGS_TOWIRE) { */ dns_name_init(&name); dns_name_fromregion(&name, &sr); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/ns_2.c b/lib/dns/rdata/generic/ns_2.c index 73e9b7c6e6..b6b38f4388 100644 --- a/lib/dns/rdata/generic/ns_2.c +++ b/lib/dns/rdata/generic/ns_2.c @@ -101,7 +101,7 @@ towire_ns(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/nsec_47.c b/lib/dns/rdata/generic/nsec_47.c index 59db69d256..28fea07c82 100644 --- a/lib/dns/rdata/generic/nsec_47.c +++ b/lib/dns/rdata/generic/nsec_47.c @@ -110,7 +110,7 @@ towire_nsec(ARGS_TOWIRE) { dns_rdata_toregion(rdata, &sr); dns_name_fromregion(&name, &sr); isc_region_consume(&sr, name_length(&name)); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); return mem_tobuffer(target, sr.base, sr.length); } diff --git a/lib/dns/rdata/generic/nxt_30.c b/lib/dns/rdata/generic/nxt_30.c index 1a828933b2..a552276292 100644 --- a/lib/dns/rdata/generic/nxt_30.c +++ b/lib/dns/rdata/generic/nxt_30.c @@ -173,7 +173,7 @@ towire_nxt(ARGS_TOWIRE) { dns_rdata_toregion(rdata, &sr); dns_name_fromregion(&name, &sr); isc_region_consume(&sr, name_length(&name)); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); return mem_tobuffer(target, sr.base, sr.length); } diff --git a/lib/dns/rdata/generic/ptr_12.c b/lib/dns/rdata/generic/ptr_12.c index b24178c967..24d975a0b9 100644 --- a/lib/dns/rdata/generic/ptr_12.c +++ b/lib/dns/rdata/generic/ptr_12.c @@ -103,7 +103,7 @@ towire_ptr(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/rp_17.c b/lib/dns/rdata/generic/rp_17.c index f652aa2c2c..33c8192fac 100644 --- a/lib/dns/rdata/generic/rp_17.c +++ b/lib/dns/rdata/generic/rp_17.c @@ -130,12 +130,12 @@ towire_rp(ARGS_TOWIRE) { dns_name_fromregion(&rmail, ®ion); isc_region_consume(®ion, rmail.length); - RETERR(dns_name_towire(&rmail, cctx, target, NULL)); + RETERR(dns_name_towire(&rmail, cctx, target)); dns_name_fromregion(&rmail, ®ion); isc_region_consume(®ion, rmail.length); - return dns_name_towire(&rmail, cctx, target, NULL); + return dns_name_towire(&rmail, cctx, target); } static int diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c index 7cad4b65ae..bcfac4a666 100644 --- a/lib/dns/rdata/generic/rrsig_46.c +++ b/lib/dns/rdata/generic/rrsig_46.c @@ -377,7 +377,7 @@ towire_rrsig(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, &sr); isc_region_consume(&sr, name_length(&name)); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); /* * Signature. diff --git a/lib/dns/rdata/generic/rt_21.c b/lib/dns/rdata/generic/rt_21.c index 7402a14acd..41c0df41f3 100644 --- a/lib/dns/rdata/generic/rt_21.c +++ b/lib/dns/rdata/generic/rt_21.c @@ -138,7 +138,7 @@ towire_rt(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/generic/sig_24.c b/lib/dns/rdata/generic/sig_24.c index beeb366571..c5d3ed3ef7 100644 --- a/lib/dns/rdata/generic/sig_24.c +++ b/lib/dns/rdata/generic/sig_24.c @@ -341,7 +341,7 @@ towire_sig(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, &sr); isc_region_consume(&sr, name_length(&name)); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); /* * Signature. diff --git a/lib/dns/rdata/generic/soa_6.c b/lib/dns/rdata/generic/soa_6.c index 14575c3002..782da3c1a8 100644 --- a/lib/dns/rdata/generic/soa_6.c +++ b/lib/dns/rdata/generic/soa_6.c @@ -213,11 +213,11 @@ towire_soa(ARGS_TOWIRE) { dns_name_fromregion(&mname, &sregion); isc_region_consume(&sregion, name_length(&mname)); - RETERR(dns_name_towire(&mname, cctx, target, NULL)); + RETERR(dns_name_towire(&mname, cctx, target)); dns_name_fromregion(&rname, &sregion); isc_region_consume(&sregion, name_length(&rname)); - RETERR(dns_name_towire(&rname, cctx, target, NULL)); + RETERR(dns_name_towire(&rname, cctx, target)); isc_buffer_availableregion(target, &tregion); if (tregion.length < 20) { diff --git a/lib/dns/rdata/generic/talink_58.c b/lib/dns/rdata/generic/talink_58.c index 68328dc65a..148a11569c 100644 --- a/lib/dns/rdata/generic/talink_58.c +++ b/lib/dns/rdata/generic/talink_58.c @@ -117,11 +117,11 @@ towire_talink(ARGS_TOWIRE) { dns_name_fromregion(&prev, &sregion); isc_region_consume(&sregion, name_length(&prev)); - RETERR(dns_name_towire(&prev, cctx, target, NULL)); + RETERR(dns_name_towire(&prev, cctx, target)); dns_name_fromregion(&next, &sregion); isc_region_consume(&sregion, name_length(&next)); - return dns_name_towire(&next, cctx, target, NULL); + return dns_name_towire(&next, cctx, target); } static int diff --git a/lib/dns/rdata/generic/tkey_249.c b/lib/dns/rdata/generic/tkey_249.c index e700ab4987..dbea25a1da 100644 --- a/lib/dns/rdata/generic/tkey_249.c +++ b/lib/dns/rdata/generic/tkey_249.c @@ -320,7 +320,7 @@ towire_tkey(ARGS_TOWIRE) { dns_rdata_toregion(rdata, &sr); dns_name_init(&name); dns_name_fromregion(&name, &sr); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); isc_region_consume(&sr, name_length(&name)); return mem_tobuffer(target, sr.base, sr.length); diff --git a/lib/dns/rdata/in_1/a6_38.c b/lib/dns/rdata/in_1/a6_38.c index da76a50f5d..b70a65343f 100644 --- a/lib/dns/rdata/in_1/a6_38.c +++ b/lib/dns/rdata/in_1/a6_38.c @@ -226,7 +226,7 @@ towire_in_a6(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, &sr); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/in_1/kx_36.c b/lib/dns/rdata/in_1/kx_36.c index 8bc548913f..aebc7292a5 100644 --- a/lib/dns/rdata/in_1/kx_36.c +++ b/lib/dns/rdata/in_1/kx_36.c @@ -120,7 +120,7 @@ towire_in_kx(ARGS_TOWIRE) { dns_name_init(&name); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/in_1/nsap-ptr_23.c b/lib/dns/rdata/in_1/nsap-ptr_23.c index 1afb6a5ef0..55167cebee 100644 --- a/lib/dns/rdata/in_1/nsap-ptr_23.c +++ b/lib/dns/rdata/in_1/nsap-ptr_23.c @@ -95,7 +95,7 @@ towire_in_nsap_ptr(ARGS_TOWIRE) { dns_rdata_toregion(rdata, ®ion); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/in_1/px_26.c b/lib/dns/rdata/in_1/px_26.c index 07b555750d..1301767596 100644 --- a/lib/dns/rdata/in_1/px_26.c +++ b/lib/dns/rdata/in_1/px_26.c @@ -168,7 +168,7 @@ towire_in_px(ARGS_TOWIRE) { */ dns_name_init(&name); dns_name_fromregion(&name, ®ion); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); isc_region_consume(®ion, name_length(&name)); /* @@ -176,7 +176,7 @@ towire_in_px(ARGS_TOWIRE) { */ dns_name_init(&name); dns_name_fromregion(&name, ®ion); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/in_1/srv_33.c b/lib/dns/rdata/in_1/srv_33.c index d8693a5113..d488b94193 100644 --- a/lib/dns/rdata/in_1/srv_33.c +++ b/lib/dns/rdata/in_1/srv_33.c @@ -191,7 +191,7 @@ towire_in_srv(ARGS_TOWIRE) { */ dns_name_init(&name); dns_name_fromregion(&name, &sr); - return dns_name_towire(&name, cctx, target, NULL); + return dns_name_towire(&name, cctx, target); } static int diff --git a/lib/dns/rdata/in_1/svcb_64.c b/lib/dns/rdata/in_1/svcb_64.c index ce7a297ec0..b2f239ef99 100644 --- a/lib/dns/rdata/in_1/svcb_64.c +++ b/lib/dns/rdata/in_1/svcb_64.c @@ -940,7 +940,7 @@ generic_towire_in_svcb(ARGS_TOWIRE) { */ dns_name_init(&name); dns_name_fromregion(&name, ®ion); - RETERR(dns_name_towire(&name, cctx, target, NULL)); + RETERR(dns_name_towire(&name, cctx, target)); isc_region_consume(®ion, name_length(&name)); /* diff --git a/lib/dns/rdataset.c b/lib/dns/rdataset.c index d0962fe95e..28659b4867 100644 --- a/lib/dns/rdataset.c +++ b/lib/dns/rdataset.c @@ -247,7 +247,6 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name, struct towire_sort *out = out_fixed; dns_fixedname_t fixed; dns_name_t *name = NULL; - uint16_t offset; /* * Convert 'rdataset' to wire format, compressing names as specified @@ -357,7 +356,7 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name, name = dns_fixedname_initname(&fixed); dns_name_copy(owner_name, name); dns_rdataset_getownercase(rdataset, name); - offset = 0xffff; + dns_compress_setmultiuse(cctx, true); name->attributes.nocompress |= owner_name->attributes.nocompress; @@ -368,15 +367,14 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name, rrbuffer = *target; dns_compress_setpermitted(cctx, true); - result = dns_name_towire(name, cctx, target, &offset); + result = dns_name_towire(name, cctx, target); if (result != ISC_R_SUCCESS) { goto rollback; } headlen = sizeof(dns_rdataclass_t) + sizeof(dns_rdatatype_t); if (!question) { headlen += sizeof(dns_ttl_t) + 2; - } /* XXX 2 for rdata len - */ + } /* XXX 2 for rdata len */ isc_buffer_availableregion(target, &r); if (r.length < headlen) { result = ISC_R_NOSPACE; diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 962b79109b..e2601548fe 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -2703,7 +2703,7 @@ resquery_send(resquery_t *query) { memset(&zr, 0, sizeof(zr)); isc_buffer_init(&zb, zone, sizeof(zone)); dns_compress_setpermitted(&cctx, false); - result = dns_name_towire(fctx->domain, &cctx, &zb, NULL); + result = dns_name_towire(fctx->domain, &cctx, &zb); if (result == ISC_R_SUCCESS) { isc_buffer_usedregion(&zb, &zr); } @@ -9730,7 +9730,7 @@ rctx_logpacket(respctx_t *rctx) { dns_compress_init(&cctx, fctx->mctx, 0); dns_compress_setpermitted(&cctx, false); isc_buffer_init(&zb, zone, sizeof(zone)); - result = dns_name_towire(fctx->domain, &cctx, &zb, NULL); + result = dns_name_towire(fctx->domain, &cctx, &zb); if (result == ISC_R_SUCCESS) { isc_buffer_usedregion(&zb, &zr); } diff --git a/lib/ns/client.c b/lib/ns/client.c index 6a3d40f446..222a4f4f50 100644 --- a/lib/ns/client.c +++ b/lib/ns/client.c @@ -699,7 +699,7 @@ renderend: isc_buffer_init(&b, zone, sizeof(zone)); dns_compress_setpermitted(&cctx, false); - eresult = dns_name_towire(zo, &cctx, &b, NULL); + eresult = dns_name_towire(zo, &cctx, &b); if (eresult == ISC_R_SUCCESS) { isc_buffer_usedregion(&b, &zr); } diff --git a/tests/bench/compress.c b/tests/bench/compress.c index 0660785ddc..31e73f5be1 100644 --- a/tests/bench/compress.c +++ b/tests/bench/compress.c @@ -80,7 +80,7 @@ main(void) { for (unsigned int i = 0; i < count; i++) { dns_name_t *name = dns_fixedname_name(&fixedname[i]); - result = dns_name_towire(name, &cctx, &buf, NULL); + result = dns_name_towire(name, &cctx, &buf); if (result == ISC_R_NOSPACE) { dns_compress_invalidate(&cctx); dns_compress_init(&cctx, mctx, 0); diff --git a/tests/dns/dnstap_test.c b/tests/dns/dnstap_test.c index a7156b7ba9..a7b1aaf5b0 100644 --- a/tests/dns/dnstap_test.c +++ b/tests/dns/dnstap_test.c @@ -187,7 +187,7 @@ ISC_LOOP_TEST_IMPL(dns_dt_send) { isc_buffer_init(&zb, zone, sizeof(zone)); dns_compress_init(&cctx, mctx, 0); dns_compress_setpermitted(&cctx, false); - result = dns_name_towire(zname, &cctx, &zb, NULL); + result = dns_name_towire(zname, &cctx, &zb); assert_int_equal(result, ISC_R_SUCCESS); dns_compress_invalidate(&cctx); isc_buffer_usedregion(&zb, &zr); diff --git a/tests/dns/name_test.c b/tests/dns/name_test.c index 47369761a4..a786299a02 100644 --- a/tests/dns/name_test.c +++ b/tests/dns/name_test.c @@ -148,28 +148,28 @@ compress_test(const dns_name_t *name1, const dns_name_t *name2, if (rdata) { /* RDATA compression */ - assert_int_equal(dns_name_towire(name1, cctx, &source, NULL), + assert_int_equal(dns_name_towire(name1, cctx, &source), ISC_R_SUCCESS); - assert_int_equal(dns_name_towire(name2, cctx, &source, NULL), + assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); - assert_int_equal(dns_name_towire(name2, cctx, &source, NULL), + assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); - assert_int_equal(dns_name_towire(name3, cctx, &source, NULL), + assert_int_equal(dns_name_towire(name3, cctx, &source), ISC_R_SUCCESS); } else { /* Owner name compression */ - uint16_t offset = 0xffff; - assert_int_equal(dns_name_towire(name1, cctx, &source, &offset), + dns_compress_setmultiuse(cctx, true); + assert_int_equal(dns_name_towire(name1, cctx, &source), ISC_R_SUCCESS); - offset = 0xffff; - assert_int_equal(dns_name_towire(name2, cctx, &source, &offset), + dns_compress_setmultiuse(cctx, true); + assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); - assert_int_equal(dns_name_towire(name2, cctx, &source, &offset), + assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); - offset = 0xffff; - assert_int_equal(dns_name_towire(name3, cctx, &source, &offset), + dns_compress_setmultiuse(cctx, true); + assert_int_equal(dns_name_towire(name3, cctx, &source), ISC_R_SUCCESS); } assert_int_equal(source.used, compressed_length); @@ -433,7 +433,8 @@ ISC_RUN_TEST_IMPL(collision) { } dns_compress_rollback(&cctx, coff); - result = dns_name_towire(&name, &cctx, &message, NULL); + dns_compress_setmultiuse(&cctx, true); + result = dns_name_towire(&name, &cctx, &message); assert_int_equal(result, ISC_R_SUCCESS); /* we must be able to find the name we just added */ From a6986f6837e8d50b433185bec1c0dc8c4db621c6 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 21 Feb 2025 00:56:47 -0800 Subject: [PATCH 3/6] remove 'target' parameter from dns_name_concatenate() the target buffer passed to dns_name_concatenate() was never used (except for one place in dig, where it wasn't actually needed, and has already been removed in a prior commit). we can safely remove the parameter. --- bin/dig/dighost.c | 2 +- bin/dnssec/dnssec-signzone.c | 2 +- lib/dns/adb.c | 3 +-- lib/dns/client.c | 2 +- lib/dns/dnssec.c | 2 +- lib/dns/include/dns/name.h | 25 +++++++++---------------- lib/dns/name.c | 23 +++++++++-------------- lib/dns/nsec.c | 3 +-- lib/dns/qpzone.c | 2 +- lib/dns/rdata/generic/mx_15.c | 2 +- lib/dns/rdata/in_1/srv_33.c | 2 +- lib/dns/resolver.c | 3 +-- lib/dns/rpz.c | 2 +- lib/dns/rrl.c | 2 +- lib/dns/sdlz.c | 4 ++-- lib/dns/ssu.c | 2 +- lib/dns/tkey.c | 3 +-- lib/dns/validator.c | 3 +-- lib/dns/zone.c | 2 +- lib/ns/query.c | 22 ++++++++++------------ 20 files changed, 46 insertions(+), 65 deletions(-) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 91aaa0f42e..4dbae24a6b 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -2277,7 +2277,7 @@ setup_lookup(dig_lookup_t *lookup) { if (!dns_name_isabsolute(name)) { result = dns_name_concatenate( name, lookup->oname, - lookup->name, NULL); + lookup->name); } else { dns_name_copy(name, lookup->name); } diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index cfb8f5141e..7ef9236dff 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -959,7 +959,7 @@ addnowildcardhash(hashlist_t *l, wild = dns_fixedname_initname(&fixed); - result = dns_name_concatenate(dns_wildcardname, name, wild, NULL); + result = dns_name_concatenate(dns_wildcardname, name, wild); if (result == ISC_R_NOSPACE) { return; } diff --git a/lib/dns/adb.c b/lib/dns/adb.c index 88313cbce6..5682090d30 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -875,8 +875,7 @@ set_target(dns_adb_t *adb, const dns_name_t *name, const dns_name_t *fname, prefix = dns_fixedname_initname(&fixed1); new_target = dns_fixedname_initname(&fixed2); dns_name_split(name, nlabels, prefix, NULL); - result = dns_name_concatenate(prefix, &dname.dname, new_target, - NULL); + result = dns_name_concatenate(prefix, &dname.dname, new_target); dns_rdata_freestruct(&dname); if (result != ISC_R_SUCCESS) { return result; diff --git a/lib/dns/client.c b/lib/dns/client.c index 350a8a06ad..0fb9d9012e 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -652,7 +652,7 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) { prefix = dns_fixedname_initname(&fixed); dns_name_split(name, nlabels, prefix, NULL); tresult = dns_name_concatenate(prefix, &dname.dname, - name, NULL); + name); dns_rdata_freestruct(&dname); if (tresult == ISC_R_SUCCESS) { want_restart = true; diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c index cda1115ded..2220dbb233 100644 --- a/lib/dns/dnssec.c +++ b/lib/dns/dnssec.c @@ -592,7 +592,7 @@ cleanup_struct: RUNTIME_CHECK(dns_name_concatenate( dns_wildcardname, dns_fixedname_name(&fnewname), - wild, NULL) == ISC_R_SUCCESS); + wild) == ISC_R_SUCCESS); } inc_stat(dns_dnssecstats_wildcard); ret = DNS_R_FROMWILDCARD; diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 2760e5bf89..320e36b2ea 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -302,9 +302,10 @@ dns_name_setbuffer(dns_name_t *name, isc_buffer_t *buffer) { * Dedicate a buffer for use with 'name'. * * Notes: - * \li Specification of a target buffer in dns_name_fromwire(), - * dns_name_fromtext(), and dns_name_concatenate() is optional if - * 'name' has a dedicated buffer. + * \li Specification of a target buffer in dns_name_fromwire() and + * dns_name_fromtext() is optional if 'name' has a dedicated buffer. + * The target name in dns_name_concatenate() must have a dedicated + * buffer. * * \li The caller must not write to buffer until the name has been * invalidated or is otherwise known not to be in use. @@ -959,9 +960,11 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name); isc_result_t dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, - dns_name_t *name, isc_buffer_t *target); + dns_name_t *name); /*%< - * Concatenate 'prefix' and 'suffix'. + * Concatenate 'prefix' and 'suffix' and place the result in 'name'. + * (Note that 'name' may be the same as 'prefix', in which case + * 'suffix' will be appended to it.) * * Requires: * @@ -969,20 +972,10 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, * *\li 'suffix' is a valid name or NULL. * - *\li 'name' is a valid name or NULL. - * - *\li 'target' is a valid buffer or 'target' is NULL and 'name' has - * a dedicated buffer. + *\li 'name' is a valid name with a dedicated buffer. * *\li If 'prefix' is absolute, 'suffix' must be NULL or the empty name. * - * Ensures: - * - *\li On success, - * If 'target' is not NULL and 'name' is not NULL, then 'name' - * is attached to it. - * The used space in target is updated. - * * Returns: *\li #ISC_R_SUCCESS *\li #ISC_R_NOSPACE diff --git a/lib/dns/name.c b/lib/dns/name.c index 138848937d..193c25e310 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -1511,13 +1511,14 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, isc_result_t dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, - dns_name_t *name, isc_buffer_t *target) { - unsigned char *ndata; + dns_name_t *name) { + unsigned char *ndata = NULL; unsigned int nrem, prefix_length, length; bool copy_prefix = true; bool copy_suffix = true; bool absolute = false; dns_name_t tmp_name; + isc_buffer_t *target = NULL; /* * Concatenate 'prefix' and 'suffix'. @@ -1525,10 +1526,9 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, REQUIRE(prefix == NULL || DNS_NAME_VALID(prefix)); REQUIRE(suffix == NULL || DNS_NAME_VALID(suffix)); - REQUIRE(name == NULL || DNS_NAME_VALID(name)); - REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || - (target == NULL && name != NULL && - ISC_BUFFER_VALID(name->buffer))); + REQUIRE(DNS_NAME_VALID(name) && ISC_BUFFER_VALID(name->buffer)); + REQUIRE(DNS_NAME_BINDABLE(name)); + if (prefix == NULL || prefix->length == 0) { copy_prefix = false; } @@ -1543,13 +1543,9 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, dns_name_init(&tmp_name); name = &tmp_name; } - if (target == NULL) { - INSIST(name->buffer != NULL); - target = name->buffer; - isc_buffer_clear(name->buffer); - } - REQUIRE(DNS_NAME_BINDABLE(name)); + target = name->buffer; + isc_buffer_clear(target); /* * Set up. @@ -1583,8 +1579,7 @@ dns_name_concatenate(const dns_name_t *prefix, const dns_name_t *suffix, } /* - * If 'prefix' and 'name' are the same object, and the object has - * a dedicated buffer, and we're using it, then we don't have to + * If 'prefix' and 'name' are the same object, we don't have to * copy anything. */ if (copy_prefix && (prefix != name || prefix->buffer != target)) { diff --git a/lib/dns/nsec.c b/lib/dns/nsec.c index 23ed781164..7fa26758d8 100644 --- a/lib/dns/nsec.c +++ b/lib/dns/nsec.c @@ -483,8 +483,7 @@ dns_nsec_noexistnodata(dns_rdatatype_t type, const dns_name_t *name, dns_name_getlabelsequence(&nsec.next, labels - nlabels, nlabels, &common); } - result = dns_name_concatenate(dns_wildcardname, &common, wild, - NULL); + result = dns_name_concatenate(dns_wildcardname, &common, wild); if (result != ISC_R_SUCCESS) { dns_rdata_freestruct(&nsec); (*logit)(arg, ISC_LOG_DEBUG(3), diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 8851542592..766d25fe8a 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -2960,7 +2960,7 @@ find_wildcard(qpz_search_t *search, qpznode_t **nodep, * Construct the wildcard name for this level. */ result = dns_name_concatenate(dns_wildcardname, - &node->name, wname, NULL); + &node->name, wname); if (result != ISC_R_SUCCESS) { break; } diff --git a/lib/dns/rdata/generic/mx_15.c b/lib/dns/rdata/generic/mx_15.c index 20510dda98..afa40e6309 100644 --- a/lib/dns/rdata/generic/mx_15.c +++ b/lib/dns/rdata/generic/mx_15.c @@ -290,7 +290,7 @@ additionaldata_mx(ARGS_ADDLDATA) { dns_fixedname_init(&fixed); result = dns_name_concatenate(&port25, &name, - dns_fixedname_name(&fixed), NULL); + dns_fixedname_name(&fixed)); if (result != ISC_R_SUCCESS) { return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/srv_33.c b/lib/dns/rdata/in_1/srv_33.c index d488b94193..0b8f34b53b 100644 --- a/lib/dns/rdata/in_1/srv_33.c +++ b/lib/dns/rdata/in_1/srv_33.c @@ -341,7 +341,7 @@ additionaldata_in_srv(ARGS_ADDLDATA) { } result = dns_name_concatenate(dns_fixedname_name(&fixed), &name, - dns_fixedname_name(&fixed), NULL); + dns_fixedname_name(&fixed)); if (result != ISC_R_SUCCESS) { return ISC_R_SUCCESS; } diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index e2601548fe..73d4815163 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -6929,8 +6929,7 @@ is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname, dns_name_t *rname, tname = dns_fixedname_initname(&fixed); nlabels = dns_name_countlabels(rname); dns_name_split(qname, nlabels, &prefix, NULL); - result = dns_name_concatenate(&prefix, &dname.dname, tname, - NULL); + result = dns_name_concatenate(&prefix, &dname.dname, tname); if (result == DNS_R_NAMETOOLONG) { SET_IF_NOT_NULL(chainingp, true); return true; diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index 130d833f3f..24a95af3d5 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -1071,7 +1071,7 @@ name2data(dns_rpz_zone_t *rpz, dns_rpz_type_t rpz_type, n -= dns_name_countlabels(&rpz->nsdname); } dns_name_getlabelsequence(src_name, prefix_len, n, &tmp_name); - (void)dns_name_concatenate(&tmp_name, dns_rootname, trig_name, NULL); + (void)dns_name_concatenate(&tmp_name, dns_rootname, trig_name); } #ifndef HAVE_BUILTIN_CLZ diff --git a/lib/dns/rrl.c b/lib/dns/rrl.c index e9fa6171a3..ede8966cc8 100644 --- a/lib/dns/rrl.c +++ b/lib/dns/rrl.c @@ -432,7 +432,7 @@ make_key(const dns_rrl_t *rrl, dns_rrl_key_t *key, */ wild = dns_fixedname_initname(&fixed); result = dns_name_concatenate(dns_wildcardname, origin, - wild, NULL); + wild); if (result != ISC_R_SUCCESS) { /* * Fallback to use the zone's origin name diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 29cf564c6a..c65da7cd5e 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -549,8 +549,8 @@ getnodedata(dns_db_t *db, const dns_name_t *name, bool create, fname = dns_fixedname_name(&fixed); dns_name_getlabelsequence( name, i + 1, dlabels - i - 1, fname); - result = dns_name_concatenate( - dns_wildcardname, fname, fname, NULL); + result = dns_name_concatenate(dns_wildcardname, + fname, fname); if (result != ISC_R_SUCCESS) { MAYBE_UNLOCK(sdlz->dlzimp); return result; diff --git a/lib/dns/ssu.c b/lib/dns/ssu.c index f289204100..0649307400 100644 --- a/lib/dns/ssu.c +++ b/lib/dns/ssu.c @@ -631,7 +631,7 @@ dns_ssutable_checkrules(dns_ssutable_t *table, const dns_name_t *signer, case dns_ssumatchtype_selfwild: wildcard = dns_fixedname_initname(&fixed); result = dns_name_concatenate(dns_wildcardname, signer, - wildcard, NULL); + wildcard); if (result != ISC_R_SUCCESS) { if (logit) { isc_log_write( diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c index c34d8f8f3f..377cdb9047 100644 --- a/lib/dns/tkey.c +++ b/lib/dns/tkey.c @@ -475,8 +475,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx, RETERR(isc_hex_totext(&r, 2, "", &b)); RETERR(dns_name_fromtext(keyname, &b, NULL, 0, NULL)); } - RETERR(dns_name_concatenate(keyname, dns_rootname, keyname, - NULL)); + RETERR(dns_name_concatenate(keyname, dns_rootname, keyname)); result = dns_tsigkey_find(&tsigkey, keyname, NULL, ring); if (result == ISC_R_SUCCESS) { diff --git a/lib/dns/validator.c b/lib/dns/validator.c index fd73251976..806d20da8e 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -2610,8 +2610,7 @@ findnsec3proofs(dns_validator_t *val) { { val->attributes |= VALATTR_FOUNDCLOSEST; result = dns_name_concatenate(dns_wildcardname, closest, - dns_fixedname_name(&val->wild), - NULL); + dns_fixedname_name(&val->wild)); RUNTIME_CHECK(result == ISC_R_SUCCESS); } else { val->attributes &= ~VALATTR_FOUNDNOQNAME; diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 98690078b2..bc02181527 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -4881,7 +4881,7 @@ check_reportchannel(dns_zone_t *zone, dns_db_t *db) { * Otherwise, we need a '*._er' wildcard with a TXT rdataset. */ name = dns_fixedname_initname(&fixed); - CHECK(dns_name_concatenate(&er, &zone->origin, name, NULL)); + CHECK(dns_name_concatenate(&er, &zone->origin, name)); CHECK(dns_db_findnode(db, name, false, &node)); dns_db_currentversion(db, &version); diff --git a/lib/ns/query.c b/lib/ns/query.c index b9d33f1142..8382b8ede3 100644 --- a/lib/ns/query.c +++ b/lib/ns/query.c @@ -3181,7 +3181,7 @@ rpz_get_p_name(ns_client_t *client, dns_name_t *p_name, dns_rpz_zone_t *rpz, for (;;) { dns_name_getlabelsequence(trig_name, first, labels - first - 1, &prefix); - result = dns_name_concatenate(&prefix, suffix, p_name, NULL); + result = dns_name_concatenate(&prefix, suffix, p_name); if (result == ISC_R_SUCCESS) { break; } @@ -4900,9 +4900,8 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, dns_name_init(&prefix); dns_name_getlabelsequence(client->query.qname, 0, labels - 1, &prefix); - result = dns_name_concatenate(&prefix, - client->view->redirectzone, - redirectname, NULL); + result = dns_name_concatenate( + &prefix, client->view->redirectzone, redirectname); if (result != ISC_R_SUCCESS) { return ISC_R_NOTFOUND; } @@ -4980,7 +4979,7 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset, /* * Make the name absolute. */ - result = dns_name_concatenate(found, dns_rootname, found, NULL); + result = dns_name_concatenate(found, dns_rootname, found); RUNTIME_CHECK(result == ISC_R_SUCCESS); dns_name_copy(found, name); @@ -7269,7 +7268,7 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) { dns_fixedname_name(&suffix)); result = dns_name_concatenate(dns_fixedname_name(&prefix), dns_fixedname_name(&suffix), - qctx->fname, NULL); + qctx->fname); if (result == DNS_R_NAMETOOLONG) { client->message->rcode = dns_rcode_yxdomain; } else if (result != ISC_R_SUCCESS) { @@ -9271,8 +9270,8 @@ query_addnxrrsetnsec(query_ctx_t *qctx) { dns_name_split(qctx->fname, sig.labels + 1, NULL, fname); /* This will succeed, since we've stripped labels. */ - RUNTIME_CHECK(dns_name_concatenate(dns_wildcardname, fname, fname, - NULL) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_concatenate(dns_wildcardname, fname, fname) == + ISC_R_SUCCESS); query_addrrset(qctx, &fname, &qctx->rdataset, &qctx->sigrdataset, dbuf, DNS_SECTION_AUTHORITY); } @@ -10385,7 +10384,7 @@ query_dname(query_ctx_t *qctx) { INSIST(qctx->fname == NULL); qctx->dbuf = ns_client_getnamebuf(qctx->client); qctx->fname = ns_client_newname(qctx->client, qctx->dbuf, &b); - result = dns_name_concatenate(prefix, tname, qctx->fname, NULL); + result = dns_name_concatenate(prefix, tname, qctx->fname); dns_message_puttempname(qctx->client->message, &tname); /* @@ -11190,8 +11189,7 @@ again: /* * Add the no wildcard proof. */ - result = dns_name_concatenate(dns_wildcardname, cname, wname, - NULL); + result = dns_name_concatenate(dns_wildcardname, cname, wname); if (result != ISC_R_SUCCESS) { goto cleanup; } @@ -11232,7 +11230,7 @@ again: dns_name_split(name, nlabels, NULL, wname); } result = dns_name_concatenate(dns_wildcardname, wname, - wname, NULL); + wname); if (result == ISC_R_SUCCESS) { have_wname = true; } From cf098cf10db653acb2ac78b20d5524c104881fac Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 21 Feb 2025 13:36:57 -0800 Subject: [PATCH 4/6] avoid the 'target' buffer in dns_name_fromtext() dns_name_fromtext() stores the converted name in the 'name' passed to it, and optionally also copies it in wire format to a buffer 'target'. this makes the interface unnecessarily complex, and could be simplified by having a different function for each purpose. as a first step, remove uses of the target buffer in calls to dns_name_fromtext() where it wasn't actually needed. --- bin/dig/dighost.c | 9 ++++---- bin/named/transportconf.c | 44 +++++++++++++++++++-------------------- bin/named/tsigconf.c | 14 ++++++------- bin/nsupdate/nsupdate.c | 22 ++++++++------------ tests/dns/dispatch_test.c | 14 ++++++------- tests/dns/master_test.c | 38 ++++++++++----------------------- 6 files changed, 57 insertions(+), 84 deletions(-) diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 4dbae24a6b..2f43fb6998 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -858,14 +858,14 @@ requeue_lookup(dig_lookup_t *lookold, bool servers) { void setup_text_key(void) { isc_result_t result; - dns_name_t keyname; + dns_fixedname_t fkey; + dns_name_t *keyname = dns_fixedname_initname(&fkey); isc_buffer_t secretbuf; unsigned int secretsize; unsigned char *secretstore; debug("setup_text_key()"); isc_buffer_allocate(mctx, &namebuf, MXNAME); - dns_name_init(&keyname); isc_buffer_putstr(namebuf, keynametext); secretsize = (unsigned int)strlen(keysecret) * 3 / 4; secretstore = isc_mem_allocate(mctx, secretsize); @@ -882,12 +882,12 @@ setup_text_key(void) { goto failure; } - result = dns_name_fromtext(&keyname, namebuf, dns_rootname, 0, namebuf); + result = dns_name_fromtext(keyname, namebuf, dns_rootname, 0, NULL); if (result != ISC_R_SUCCESS) { goto failure; } - result = dns_tsigkey_create(&keyname, hmac_alg, secretstore, + result = dns_tsigkey_create(keyname, hmac_alg, secretstore, (int)secretsize, mctx, &tsigkey); failure: if (result != ISC_R_SUCCESS) { @@ -898,7 +898,6 @@ failure: } isc_mem_free(mctx, secretstore); - dns_name_invalidate(&keyname); isc_buffer_free(&namebuf); } diff --git a/bin/named/transportconf.c b/bin/named/transportconf.c index 3382bf9b98..cfef81068a 100644 --- a/bin/named/transportconf.c +++ b/bin/named/transportconf.c @@ -27,17 +27,16 @@ #include #include -#define create_name(id, name) \ - isc_buffer_t namesrc, namebuf; \ - char namedata[DNS_NAME_FORMATSIZE + 1]; \ - dns_name_init(name); \ - isc_buffer_constinit(&namesrc, id, strlen(id)); \ - isc_buffer_add(&namesrc, strlen(id)); \ - isc_buffer_init(&namebuf, namedata, sizeof(namedata)); \ - result = (dns_name_fromtext(name, &namesrc, dns_rootname, \ - DNS_NAME_DOWNCASE, &namebuf)); \ - if (result != ISC_R_SUCCESS) { \ - goto failure; \ +#define create_name(id, name) \ + isc_buffer_t namesrc; \ + dns_fixedname_t _fn; \ + name = dns_fixedname_initname(&_fn); \ + isc_buffer_constinit(&namesrc, id, strlen(id)); \ + isc_buffer_add(&namesrc, strlen(id)); \ + result = (dns_name_fromtext(name, &namesrc, dns_rootname, \ + DNS_NAME_DOWNCASE, NULL)); \ + if (result != ISC_R_SUCCESS) { \ + goto failure; \ } #define parse_transport_option(map, transport, name, setter) \ @@ -100,15 +99,15 @@ add_doh_transports(const cfg_obj_t *transportlist, dns_transport_list_t *list) { for (const cfg_listelt_t *element = cfg_list_first(transportlist); element != NULL; element = cfg_list_next(element)) { - dns_name_t dohname; - dns_transport_t *transport; + dns_name_t *dohname = NULL; + dns_transport_t *transport = NULL; doh = cfg_listelt_value(element); dohid = cfg_obj_asstring(cfg_map_getname(doh)); - create_name(dohid, &dohname); + create_name(dohid, dohname); - transport = dns_transport_new(&dohname, DNS_TRANSPORT_HTTP, + transport = dns_transport_new(dohname, DNS_TRANSPORT_HTTP, list); dns_transport_set_tlsname(transport, dohid); @@ -148,8 +147,8 @@ add_tls_transports(const cfg_obj_t *transportlist, dns_transport_list_t *list) { for (const cfg_listelt_t *element = cfg_list_first(transportlist); element != NULL; element = cfg_list_next(element)) { - dns_name_t tlsname; - dns_transport_t *transport; + dns_name_t *tlsname = NULL; + dns_transport_t *transport = NULL; tls = cfg_listelt_value(element); tlsid = cfg_obj_asstring(cfg_map_getname(tls)); @@ -159,10 +158,9 @@ add_tls_transports(const cfg_obj_t *transportlist, dns_transport_list_t *list) { goto failure; } - create_name(tlsid, &tlsname); + create_name(tlsid, tlsname); - transport = dns_transport_new(&tlsname, DNS_TRANSPORT_TLS, - list); + transport = dns_transport_new(tlsname, DNS_TRANSPORT_TLS, list); dns_transport_set_tlsname(transport, tlsid); parse_transport_option(tls, transport, "key-file", @@ -222,12 +220,12 @@ transport_list_fromconfig(const cfg_obj_t *config, dns_transport_list_t *list) { static void transport_list_add_ephemeral(dns_transport_list_t *list) { isc_result_t result; - dns_name_t tlsname; + dns_name_t *tlsname = NULL; dns_transport_t *transport; - create_name("ephemeral", &tlsname); + create_name("ephemeral", tlsname); - transport = dns_transport_new(&tlsname, DNS_TRANSPORT_TLS, list); + transport = dns_transport_new(tlsname, DNS_TRANSPORT_TLS, list); dns_transport_set_tlsname(transport, "ephemeral"); return; diff --git a/bin/named/tsigconf.c b/bin/named/tsigconf.c index 1f371e1b9b..a51cdb87d3 100644 --- a/bin/named/tsigconf.c +++ b/bin/named/tsigconf.c @@ -46,11 +46,11 @@ add_initial_keys(const cfg_obj_t *list, dns_tsigkeyring_t *ring, { const cfg_obj_t *algobj = NULL; const cfg_obj_t *secretobj = NULL; - dns_name_t keyname; + dns_fixedname_t fkey; + dns_name_t *keyname = dns_fixedname_initname(&fkey); dst_algorithm_t alg = DST_ALG_UNKNOWN; const char *algstr = NULL; - char keynamedata[1024]; - isc_buffer_t keynamesrc, keynamebuf; + isc_buffer_t keynamesrc; const char *secretstr = NULL; isc_buffer_t secretbuf; int secretlen = 0; @@ -68,12 +68,10 @@ add_initial_keys(const cfg_obj_t *list, dns_tsigkeyring_t *ring, /* * Create the key name. */ - dns_name_init(&keyname); isc_buffer_constinit(&keynamesrc, keyid, strlen(keyid)); isc_buffer_add(&keynamesrc, strlen(keyid)); - isc_buffer_init(&keynamebuf, keynamedata, sizeof(keynamedata)); - ret = dns_name_fromtext(&keyname, &keynamesrc, dns_rootname, - DNS_NAME_DOWNCASE, &keynamebuf); + ret = dns_name_fromtext(keyname, &keynamesrc, dns_rootname, + DNS_NAME_DOWNCASE, NULL); if (ret != ISC_R_SUCCESS) { goto failure; } @@ -103,7 +101,7 @@ add_initial_keys(const cfg_obj_t *list, dns_tsigkeyring_t *ring, } secretlen = isc_buffer_usedlength(&secretbuf); - ret = dns_tsigkey_create(&keyname, alg, secret, secretlen, mctx, + ret = dns_tsigkey_create(keyname, alg, secret, secretlen, mctx, &tsigkey); isc_mem_put(mctx, secret, secretalloc); secret = NULL; diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c index 831eeba7ae..8d86955828 100644 --- a/bin/nsupdate/nsupdate.c +++ b/bin/nsupdate/nsupdate.c @@ -786,16 +786,14 @@ set_source_ports(dns_dispatchmgr_t *manager) { } static isc_result_t -create_name(const char *str, char *namedata, size_t len, dns_name_t *name) { - isc_buffer_t namesrc, namebuf; +create_name(const char *str, dns_name_t *name) { + isc_buffer_t namesrc; - dns_name_init(name); isc_buffer_constinit(&namesrc, str, strlen(str)); isc_buffer_add(&namesrc, strlen(str)); - isc_buffer_init(&namebuf, namedata, len); return dns_name_fromtext(name, &namesrc, dns_rootname, - DNS_NAME_DOWNCASE, &namebuf); + DNS_NAME_DOWNCASE, NULL); } static void @@ -805,8 +803,8 @@ setup_system(void *arg ISC_ATTR_UNUSED) { isc_sockaddrlist_t *nslist; isc_logconfig_t *logconfig = NULL; irs_resconf_t *resconf = NULL; - dns_name_t tlsname; - char namedata[DNS_NAME_FORMATSIZE + 1]; + dns_fixedname_t ftls; + dns_name_t *tlsname = dns_fixedname_initname(&ftls); ddebug("setup_system()"); @@ -940,17 +938,15 @@ setup_system(void *arg ISC_ATTR_UNUSED) { isc_tlsctx_cache_create(gmctx, &tls_ctx_cache); if (tls_client_key_file == NULL) { - result = create_name("tls-non-auth-client", namedata, - sizeof(namedata), &tlsname); + result = create_name("tls-non-auth-client", tlsname); check_result(result, "create_name (tls-non-auth-client)"); - transport = dns_transport_new(&tlsname, DNS_TRANSPORT_TLS, + transport = dns_transport_new(tlsname, DNS_TRANSPORT_TLS, transport_list); dns_transport_set_tlsname(transport, "tls-non-auth-client"); } else { - result = create_name("tls-auth-client", namedata, - sizeof(namedata), &tlsname); + result = create_name("tls-auth-client", tlsname); check_result(result, "create_name (tls-auth-client)"); - transport = dns_transport_new(&tlsname, DNS_TRANSPORT_TLS, + transport = dns_transport_new(tlsname, DNS_TRANSPORT_TLS, transport_list); dns_transport_set_tlsname(transport, "tls-auth-client"); dns_transport_set_keyfile(transport, tls_client_key_file); diff --git a/tests/dns/dispatch_test.c b/tests/dns/dispatch_test.c index 034421641e..c6c743f12f 100644 --- a/tests/dns/dispatch_test.c +++ b/tests/dns/dispatch_test.c @@ -65,7 +65,6 @@ static isc_sockaddr_t tls_connect_addr; static isc_tlsctx_cache_t *tls_tlsctx_client_cache = NULL; static isc_tlsctx_t *tls_listen_tlsctx = NULL; -static dns_name_t tls_name; static const char *tls_name_str = "ephemeral"; static dns_transport_t *tls_transport = NULL; static dns_transport_list_t *transport_list = NULL; @@ -150,8 +149,9 @@ setup_ephemeral_port(isc_sockaddr_t *addr, sa_family_t family) { static int setup_test(void **state) { - isc_buffer_t namesrc, namebuf; - char namedata[DNS_NAME_FORMATSIZE + 1]; + isc_buffer_t namesrc; + dns_fixedname_t ft; + dns_name_t *tls_name = dns_fixedname_initname(&ft); uv_os_sock_t socket = -1; @@ -216,17 +216,15 @@ setup_test(void **state) { return -1; } - dns_name_init(&tls_name); isc_buffer_constinit(&namesrc, tls_name_str, strlen(tls_name_str)); isc_buffer_add(&namesrc, strlen(tls_name_str)); - isc_buffer_init(&namebuf, namedata, sizeof(namedata)); - if (dns_name_fromtext(&tls_name, &namesrc, dns_rootname, - DNS_NAME_DOWNCASE, &namebuf) != ISC_R_SUCCESS) + if (dns_name_fromtext(tls_name, &namesrc, dns_rootname, + DNS_NAME_DOWNCASE, NULL) != ISC_R_SUCCESS) { return -1; } transport_list = dns_transport_list_new(mctx); - tls_transport = dns_transport_new(&tls_name, DNS_TRANSPORT_TLS, + tls_transport = dns_transport_new(tls_name, DNS_TRANSPORT_TLS, transport_list); dns_transport_set_tlsname(tls_transport, tls_name_str); diff --git a/tests/dns/master_test.c b/tests/dns/master_test.c index e21ce8d1f6..6a2297876a 100644 --- a/tests/dns/master_test.c +++ b/tests/dns/master_test.c @@ -55,9 +55,9 @@ nullmsg(dns_rdatacallbacks_t *cb, const char *fmt, ...) { static dns_masterrawheader_t header; static bool headerset; -dns_name_t dns_origin; +dns_fixedname_t dns_fixed; +dns_name_t *dns_origin = NULL; char origin[sizeof(TEST_ORIGIN)]; -unsigned char name_buf[BUFLEN]; dns_rdatacallbacks_t callbacks; char *include_file = NULL; @@ -91,19 +91,16 @@ setup_master(void (*warn)(struct dns_rdatacallbacks *, const char *, ...), isc_result_t result; int len; isc_buffer_t source; - isc_buffer_t target; + dns_origin = dns_fixedname_initname(&dns_fixed); strlcpy(origin, TEST_ORIGIN, sizeof(origin)); len = strlen(origin); isc_buffer_init(&source, origin, len); isc_buffer_add(&source, len); isc_buffer_setactive(&source, len); - isc_buffer_init(&target, name_buf, BUFLEN); - dns_name_init(&dns_origin); dns_master_initrawheader(&header); - result = dns_name_fromtext(&dns_origin, &source, dns_rootname, 0, - &target); + result = dns_name_fromtext(dns_origin, &source, dns_rootname, 0, NULL); if (result != ISC_R_SUCCESS) { return result; } @@ -152,7 +149,7 @@ test_master(const char *workdir, const char *testfile, } } - result = dns_master_loadfile(testfile, &dns_origin, &dns_origin, + result = dns_master_loadfile(testfile, dns_origin, dns_origin, dns_rdataclass_in, true, 0, &callbacks, NULL, NULL, mctx, format, 0); @@ -327,10 +324,10 @@ ISC_RUN_TEST_IMPL(master_includelist) { result = isc_dir_chdir(SRCDIR); assert_int_equal(result, ISC_R_SUCCESS); - result = dns_master_loadfile( - TESTS_DIR "/testdata/master/master8.data", &dns_origin, - &dns_origin, dns_rdataclass_in, 0, true, &callbacks, - include_callback, &filename, mctx, dns_masterformat_text, 0); + result = dns_master_loadfile(TESTS_DIR "/testdata/master/master8.data", + dns_origin, dns_origin, dns_rdataclass_in, + 0, true, &callbacks, include_callback, + &filename, mctx, dns_masterformat_text, 0); assert_int_equal(result, DNS_R_SEENINCLUDE); assert_non_null(filename); if (filename != NULL) { @@ -455,26 +452,13 @@ ISC_RUN_TEST_IMPL(dumpraw) { isc_result_t result; dns_db_t *db = NULL; dns_dbversion_t *version = NULL; - char myorigin[sizeof(TEST_ORIGIN)]; - dns_name_t dnsorigin; - isc_buffer_t source, target; - unsigned char namebuf[BUFLEN]; - int len; UNUSED(state); - strlcpy(myorigin, TEST_ORIGIN, sizeof(myorigin)); - len = strlen(myorigin); - isc_buffer_init(&source, myorigin, len); - isc_buffer_add(&source, len); - isc_buffer_setactive(&source, len); - isc_buffer_init(&target, namebuf, BUFLEN); - dns_name_init(&dnsorigin); - result = dns_name_fromtext(&dnsorigin, &source, dns_rootname, 0, - &target); + result = setup_master(nullmsg, nullmsg); assert_int_equal(result, ISC_R_SUCCESS); - result = dns_db_create(mctx, ZONEDB_DEFAULT, &dnsorigin, + result = dns_db_create(mctx, ZONEDB_DEFAULT, dns_origin, dns_dbtype_zone, dns_rdataclass_in, 0, NULL, &db); assert_int_equal(result, ISC_R_SUCCESS); From afb424c9b65b0532e80f91b0ea3362a32d1ef6e9 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Sat, 22 Feb 2025 00:11:38 -0800 Subject: [PATCH 5/6] simplify dns_name_fromtext() interface previously, dns_name_fromtext() took both a target name and an optional target buffer parameter, which could override the name's dedicated buffer. this interface is unnecessarily complex. we now have two functions, dns_name_fromtext() to convert text into a dns_name that has a dedicated buffer, and dns_name_wirefromtext() to convert text into uncompressed DNS wire format and append it to a target buffer. in cases where it really is necessary to have both, we can use dns_name_fromtext() to load the dns_name, then dns_name_towire() to append the wire format to the target buffer. --- bin/check/check-tool.c | 2 +- bin/delv/delv.c | 2 +- bin/dig/dighost.c | 9 ++--- bin/dnssec/dnssec-cds.c | 2 +- bin/dnssec/dnssec-dsfromkey.c | 2 +- bin/dnssec/dnssec-importkey.c | 2 +- bin/dnssec/dnssec-keyfromlabel.c | 2 +- bin/dnssec/dnssec-keygen.c | 2 +- bin/dnssec/dnssec-ksr.c | 4 +- bin/dnssec/dnssec-signzone.c | 2 +- bin/dnssec/dnssec-verify.c | 2 +- bin/named/config.c | 2 +- bin/named/server.c | 35 ++++++++-------- bin/named/tkeyconf.c | 4 +- bin/named/transportconf.c | 2 +- bin/named/tsigconf.c | 2 +- bin/named/zoneconf.c | 6 +-- bin/nsupdate/nsupdate.c | 17 ++++---- bin/tests/system/pipelined/pipequeries.c | 2 +- bin/tools/mdig.c | 2 +- bin/tools/nsec3hash.c | 2 +- fuzz/dns_name_fromtext_target.c | 2 +- lib/dns/byaddr.c | 2 +- lib/dns/dlz.c | 2 +- lib/dns/dst_api.c | 3 +- lib/dns/gssapictx.c | 3 +- lib/dns/include/dns/name.h | 51 +++++++++++++++++++----- lib/dns/master.c | 5 +-- lib/dns/name.c | 47 +++++++++++++--------- lib/dns/nsec3.c | 2 +- lib/dns/peer.c | 2 +- lib/dns/rdata/any_255/tsig_250.c | 4 +- lib/dns/rdata/ch_3/a_1.c | 11 ++--- lib/dns/rdata/generic/afsdb_18.c | 11 ++--- lib/dns/rdata/generic/amtrelay_260.c | 5 +-- lib/dns/rdata/generic/cname_5.c | 4 +- lib/dns/rdata/generic/dname_39.c | 4 +- lib/dns/rdata/generic/hip_55.c | 5 +-- lib/dns/rdata/generic/ipseckey_45.c | 5 +-- lib/dns/rdata/generic/lp_107.c | 4 +- lib/dns/rdata/generic/mb_7.c | 4 +- lib/dns/rdata/generic/md_3.c | 4 +- lib/dns/rdata/generic/mf_4.c | 4 +- lib/dns/rdata/generic/mg_8.c | 4 +- lib/dns/rdata/generic/minfo_14.c | 12 +++--- lib/dns/rdata/generic/mr_9.c | 4 +- lib/dns/rdata/generic/mx_15.c | 11 ++--- lib/dns/rdata/generic/naptr_35.c | 4 +- lib/dns/rdata/generic/ns_2.c | 11 ++--- lib/dns/rdata/generic/nsec_47.c | 4 +- lib/dns/rdata/generic/nxt_30.c | 4 +- lib/dns/rdata/generic/ptr_12.c | 13 +++--- lib/dns/rdata/generic/rp_17.c | 15 ++++--- lib/dns/rdata/generic/rrsig_46.c | 4 +- lib/dns/rdata/generic/rt_21.c | 13 +++--- lib/dns/rdata/generic/sig_24.c | 4 +- lib/dns/rdata/generic/soa_6.c | 15 +++---- lib/dns/rdata/generic/talink_58.c | 5 +-- lib/dns/rdata/generic/tkey_249.c | 4 +- lib/dns/rdata/in_1/a6_38.c | 13 +++--- lib/dns/rdata/in_1/kx_36.c | 4 +- lib/dns/rdata/in_1/nsap-ptr_23.c | 4 +- lib/dns/rdata/in_1/px_26.c | 7 +--- lib/dns/rdata/in_1/srv_33.c | 13 +++--- lib/dns/rdata/in_1/svcb_64.c | 13 +++--- lib/dns/rpz.c | 2 +- lib/dns/sdlz.c | 2 +- lib/dns/skr.c | 2 +- lib/dns/ssu.c | 4 +- lib/dns/tkey.c | 2 +- lib/dns/tsig.c | 6 +-- lib/dns/view.c | 3 +- lib/isccfg/aclconf.c | 2 +- lib/isccfg/check.c | 21 +++++----- tests/bench/compress.c | 2 +- tests/bench/load-names.c | 3 +- tests/bench/qp-dump.c | 3 +- tests/bench/qplookups.c | 3 +- tests/dns/dbiterator_test.c | 2 +- tests/dns/dispatch_test.c | 2 +- tests/dns/dnstap_test.c | 2 +- tests/dns/dst_test.c | 8 ++-- tests/dns/keytable_test.c | 5 +-- tests/dns/master_test.c | 2 +- tests/dns/name_test.c | 2 +- tests/dns/qpzone_test.c | 8 ++-- tests/dns/rsa_test.c | 2 +- tests/dns/skr_test.c | 2 +- tests/libtest/dns.c | 2 +- 89 files changed, 283 insertions(+), 279 deletions(-) diff --git a/bin/check/check-tool.c b/bin/check/check-tool.c index 794160e04b..bd2733b69a 100644 --- a/bin/check/check-tool.c +++ b/bin/check/check-tool.c @@ -655,7 +655,7 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename, isc_buffer_constinit(&buffer, zonename, strlen(zonename)); isc_buffer_add(&buffer, strlen(zonename)); origin = dns_fixedname_initname(&fixorigin); - CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0)); dns_zone_setorigin(zone, origin); dns_zone_setdbtype(zone, 1, (const char *const *)dbtype); if (strcmp(filename, "-") == 0) { diff --git a/bin/delv/delv.c b/bin/delv/delv.c index 2088088d46..1d63d143fd 100644 --- a/bin/delv/delv.c +++ b/bin/delv/delv.c @@ -597,7 +597,7 @@ convert_name(dns_fixedname_t *fn, dns_name_t **name, const char *text) { isc_buffer_add(&b, len); n = dns_fixedname_initname(fn); - result = dns_name_fromtext(n, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(n, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { delv_log(ISC_LOG_ERROR, "failed to convert name %s: %s", text, isc_result_totext(result)); diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c index 2f43fb6998..69a310d2f3 100644 --- a/bin/dig/dighost.c +++ b/bin/dig/dighost.c @@ -882,7 +882,7 @@ setup_text_key(void) { goto failure; } - result = dns_name_fromtext(keyname, namebuf, dns_rootname, 0, NULL); + result = dns_name_fromtext(keyname, namebuf, dns_rootname, 0); if (result != ISC_R_SUCCESS) { goto failure; } @@ -2252,8 +2252,7 @@ setup_lookup(dig_lookup_t *lookup) { len = (unsigned int)strlen(origin); isc_buffer_init(&b, origin, len); isc_buffer_add(&b, len); - result = dns_name_fromtext(lookup->oname, &b, dns_rootname, 0, - NULL); + result = dns_name_fromtext(lookup->oname, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { dns_message_puttempname(lookup->sendmsg, &lookup->name); dns_message_puttempname(lookup->sendmsg, @@ -2271,7 +2270,7 @@ setup_lookup(dig_lookup_t *lookup) { len = (unsigned int)strlen(textname); isc_buffer_init(&b, textname, len); isc_buffer_add(&b, len); - result = dns_name_fromtext(name, &b, NULL, 0, NULL); + result = dns_name_fromtext(name, &b, NULL, 0); if (result == ISC_R_SUCCESS) { if (!dns_name_isabsolute(name)) { result = dns_name_concatenate( @@ -2304,7 +2303,7 @@ setup_lookup(dig_lookup_t *lookup) { isc_buffer_init(&b, textname, len); isc_buffer_add(&b, len); result = dns_name_fromtext(lookup->name, &b, - dns_rootname, 0, NULL); + dns_rootname, 0); if (result != ISC_R_SUCCESS) { dns_message_puttempname(lookup->sendmsg, &lookup->name); diff --git a/bin/dnssec/dnssec-cds.c b/bin/dnssec/dnssec-cds.c index fbf319c356..13368126ef 100644 --- a/bin/dnssec/dnssec-cds.c +++ b/bin/dnssec/dnssec-cds.c @@ -178,7 +178,7 @@ initname(char *setname) { isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_add(&buf, strlen(setname)); - result = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &buf, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fatal("could not initialize name %s", setname); } diff --git a/bin/dnssec/dnssec-dsfromkey.c b/bin/dnssec/dnssec-dsfromkey.c index 00c1bab86e..9647638eac 100644 --- a/bin/dnssec/dnssec-dsfromkey.c +++ b/bin/dnssec/dnssec-dsfromkey.c @@ -67,7 +67,7 @@ initname(char *setname) { isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_add(&buf, strlen(setname)); - result = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &buf, dns_rootname, 0); return result; } diff --git a/bin/dnssec/dnssec-importkey.c b/bin/dnssec/dnssec-importkey.c index 95ac0256ba..3d5ca6724e 100644 --- a/bin/dnssec/dnssec-importkey.c +++ b/bin/dnssec/dnssec-importkey.c @@ -69,7 +69,7 @@ initname(char *setname) { isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_add(&buf, strlen(setname)); - result = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &buf, dns_rootname, 0); return result; } diff --git a/bin/dnssec/dnssec-keyfromlabel.c b/bin/dnssec/dnssec-keyfromlabel.c index 3b8899960b..dadf6e0c9b 100644 --- a/bin/dnssec/dnssec-keyfromlabel.c +++ b/bin/dnssec/dnssec-keyfromlabel.c @@ -367,7 +367,7 @@ main(int argc, char **argv) { isc_buffer_init(&buf, argv[isc_commandline_index], strlen(argv[isc_commandline_index])); isc_buffer_add(&buf, strlen(argv[isc_commandline_index])); - ret = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + ret = dns_name_fromtext(name, &buf, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { fatal("invalid key name %s: %s", argv[isc_commandline_index], diff --git a/bin/dnssec/dnssec-keygen.c b/bin/dnssec/dnssec-keygen.c index 36ed720ec8..e04f73bd11 100644 --- a/bin/dnssec/dnssec-keygen.c +++ b/bin/dnssec/dnssec-keygen.c @@ -277,7 +277,7 @@ keygen(keygen_ctx_t *ctx, isc_mem_t *mctx, int argc, char **argv) { isc_buffer_init(&buf, argv[isc_commandline_index], strlen(argv[isc_commandline_index])); isc_buffer_add(&buf, strlen(argv[isc_commandline_index])); - ret = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + ret = dns_name_fromtext(name, &buf, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { fatal("invalid key name %s: %s", argv[isc_commandline_index], diff --git a/bin/dnssec/dnssec-ksr.c b/bin/dnssec/dnssec-ksr.c index 95b1e4b7e5..3260e3ff64 100644 --- a/bin/dnssec/dnssec-ksr.c +++ b/bin/dnssec/dnssec-ksr.c @@ -1008,7 +1008,7 @@ parse_dnskey(isc_lex_t *lex, char *owner, isc_buffer_t *buf, dns_ttl_t *ttl) { dname = dns_fixedname_initname(&dfname); isc_buffer_init(&b, owner, strlen(owner)); isc_buffer_add(&b, strlen(owner)); - ret = dns_name_fromtext(dname, &b, dns_rootname, 0, NULL); + ret = dns_name_fromtext(dname, &b, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { return ret; } @@ -1455,7 +1455,7 @@ main(int argc, char *argv[]) { name = dns_fixedname_initname(&fname); isc_buffer_init(&buf, argv[1], strlen(argv[1])); isc_buffer_add(&buf, strlen(argv[1])); - ret = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + ret = dns_name_fromtext(name, &buf, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { fatal("invalid zone name %s: %s", argv[1], isc_result_totext(ret)); diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index 7ef9236dff..9101098470 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -2579,7 +2579,7 @@ loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) { isc_buffer_add(&b, len); name = dns_fixedname_initname(&fname); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fatal("failed converting name '%s' to dns format: %s", origin, isc_result_totext(result)); diff --git a/bin/dnssec/dnssec-verify.c b/bin/dnssec/dnssec-verify.c index 14a19277b0..1b00812c64 100644 --- a/bin/dnssec/dnssec-verify.c +++ b/bin/dnssec/dnssec-verify.c @@ -105,7 +105,7 @@ loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) { isc_buffer_add(&b, len); name = dns_fixedname_initname(&fname); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fatal("failed converting name '%s' to dns format: %s", origin, isc_result_totext(result)); diff --git a/bin/named/config.c b/bin/named/config.c index 5da15a526c..3ac41a80b2 100644 --- a/bin/named/config.c +++ b/bin/named/config.c @@ -558,7 +558,7 @@ named_config_getname(isc_mem_t *mctx, const cfg_obj_t *obj, isc_buffer_add(&b, strlen(objstr)); dns_fixedname_init(&fname); result = dns_name_fromtext(dns_fixedname_name(&fname), &b, dns_rootname, - 0, NULL); + 0); if (result != ISC_R_SUCCESS) { isc_mem_put(mctx, *namep, sizeof(**namep)); *namep = NULL; diff --git a/bin/named/server.c b/bin/named/server.c index 9f6d021bbf..236eadf612 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -664,7 +664,7 @@ configure_view_nametable(const cfg_obj_t *vconfig, const cfg_obj_t *config, str = cfg_obj_asstring(nameobj); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(name, &b, dns_rootname, 0)); result = dns_nametree_add(*ntp, name, true); if (result != ISC_R_SUCCESS) { cfg_obj_log(nameobj, ISC_LOG_ERROR, @@ -724,7 +724,7 @@ ta_fromconfig(const cfg_obj_t *key, bool *initialp, const char **namestrp, name = dns_fixedname_initname(&fname); isc_buffer_constinit(&namebuf, namestr, strlen(namestr)); isc_buffer_add(&namebuf, strlen(namestr)); - CHECK(dns_name_fromtext(name, &namebuf, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(name, &namebuf, dns_rootname, 0)); if (*initialp) { atstr = cfg_obj_asstring(cfg_tuple_get(key, "anchortype")); @@ -913,7 +913,7 @@ process_key(const cfg_obj_t *key, dns_keytable_t *secroots, isc_buffer_constinit(&b, namestr, strlen(namestr)); isc_buffer_add(&b, strlen(namestr)); keyname = dns_fixedname_initname(&fkeyname); - result = dns_name_fromtext(keyname, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(keyname, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } @@ -1306,7 +1306,7 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) { isc_buffer_add(&b, strlen(str)); dns_fixedname_init(&fixed); result = dns_name_fromtext(dns_fixedname_name(&fixed), &b, dns_rootname, - 0, NULL); + 0); if (result != ISC_R_SUCCESS) { return result; } @@ -1591,7 +1591,7 @@ disable_algorithms(const cfg_obj_t *disabled, dns_resolver_t *resolver) { str = cfg_obj_asstring(cfg_tuple_get(disabled, "name")); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(name, &b, dns_rootname, 0)); algorithms = cfg_tuple_get(disabled, "algorithms"); for (element = cfg_list_first(algorithms); element != NULL; @@ -1634,7 +1634,7 @@ disable_ds_digests(const cfg_obj_t *disabled, dns_resolver_t *resolver) { str = cfg_obj_asstring(cfg_tuple_get(disabled, "name")); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(name, &b, dns_rootname, 0)); digests = cfg_tuple_get(disabled, "digests"); for (element = cfg_list_first(digests); element != NULL; @@ -1678,7 +1678,7 @@ on_disable_list(const cfg_obj_t *disablelist, dns_name_t *zonename) { str = cfg_obj_asstring(value); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); RUNTIME_CHECK(result == ISC_R_SUCCESS); if (dns_name_equal(name, zonename)) { return true; @@ -1861,7 +1861,7 @@ dns64_reverse(dns_view_t *view, isc_mem_t *mctx, isc_netaddr_t *na, name = dns_fixedname_initname(&fixed); isc_buffer_constinit(&b, reverse, strlen(reverse)); isc_buffer_add(&b, strlen(reverse)); - CHECK(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(name, &b, dns_rootname, 0)); dns_zone_create(&zone, mctx, 0); dns_zone_setorigin(zone, name); dns_zone_setview(zone, view); @@ -5876,8 +5876,8 @@ configure_alternates(const cfg_obj_t *config, dns_view_t *view, isc_buffer_constinit(&buffer, str, strlen(str)); isc_buffer_add(&buffer, strlen(str)); name = dns_fixedname_initname(&fixed); - CHECK(dns_name_fromtext(name, &buffer, dns_rootname, 0, - NULL)); + CHECK(dns_name_fromtext(name, &buffer, dns_rootname, + 0)); portobj = cfg_tuple_get(alternate, "port"); if (cfg_obj_isuint32(portobj)) { @@ -6232,7 +6232,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig, isc_buffer_add(&buffer, strlen(zname)); dns_fixedname_init(&fixorigin); CHECK(dns_name_fromtext(dns_fixedname_name(&fixorigin), &buffer, - dns_rootname, 0, NULL)); + dns_rootname, 0)); origin = dns_fixedname_name(&fixorigin); CHECK(named_config_getclass(cfg_tuple_get(zconfig, "class"), @@ -7243,7 +7243,7 @@ configure_session_key(const cfg_obj_t **maps, named_server_t *server, isc_buffer_constinit(&buffer, keynamestr, strlen(keynamestr)); isc_buffer_add(&buffer, strlen(keynamestr)); keyname = dns_fixedname_initname(&fname); - result = dns_name_fromtext(keyname, &buffer, dns_rootname, 0, NULL); + result = dns_name_fromtext(keyname, &buffer, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } @@ -7801,8 +7801,7 @@ get_newzone_config(dns_view_t *view, const char *zonename, isc_buffer_constinit(&b, zonename, strlen(zonename)); isc_buffer_add(&b, strlen(zonename)); name = dns_fixedname_initname(&fname); - CHECK(dns_name_fromtext(name, &b, dns_rootname, DNS_NAME_DOWNCASE, - NULL)); + CHECK(dns_name_fromtext(name, &b, dns_rootname, DNS_NAME_DOWNCASE)); dns_name_format(name, zname, sizeof(zname)); key.mv_data = zname; @@ -11833,7 +11832,7 @@ named_server_flushnode(named_server_t *server, isc_lex_t *lex, bool tree) { isc_buffer_constinit(&b, target, strlen(target)); isc_buffer_add(&b, strlen(target)); name = dns_fixedname_initname(&fixed); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } @@ -12943,7 +12942,7 @@ load_nzf(dns_view_t *view, ns_cfgctx_t *nzcfg) { isc_buffer_add(&b, strlen(origin)); name = dns_fixedname_initname(&fname); CHECK(dns_name_fromtext(name, &b, dns_rootname, - DNS_NAME_DOWNCASE, NULL)); + DNS_NAME_DOWNCASE)); dns_name_format(name, zname, sizeof(zname)); key.mv_data = zname; @@ -13652,7 +13651,7 @@ named_server_changezone(named_server_t *server, char *command, isc_buffer_add(&buf, strlen(zonename)); dnsname = dns_fixedname_initname(&fname); - CHECK(dns_name_fromtext(dnsname, &buf, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(dnsname, &buf, dns_rootname, 0)); if (redirect) { if (!dns_name_equal(dnsname, dns_rootname)) { @@ -15218,7 +15217,7 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, bool readonly, isc_buffer_t b; isc_buffer_init(&b, namebuf, strlen(namebuf)); isc_buffer_add(&b, strlen(namebuf)); - CHECK(dns_name_fromtext(fname, &b, dns_rootname, 0, NULL)); + CHECK(dns_name_fromtext(fname, &b, dns_rootname, 0)); ntaname = fname; } diff --git a/bin/named/tkeyconf.c b/bin/named/tkeyconf.c index 28beca3085..569a7873e9 100644 --- a/bin/named/tkeyconf.c +++ b/bin/named/tkeyconf.c @@ -62,7 +62,7 @@ named_tkeyctx_fromconfig(const cfg_obj_t *options, isc_mem_t *mctx, isc_buffer_constinit(&b, s, strlen(s)); isc_buffer_add(&b, strlen(s)); name = dns_fixedname_initname(&fname); - RETERR(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + RETERR(dns_name_fromtext(name, &b, dns_rootname, 0)); tctx->domain = isc_mem_get(mctx, sizeof(dns_name_t)); dns_name_init(tctx->domain); dns_name_dup(name, mctx, tctx->domain); @@ -76,7 +76,7 @@ named_tkeyctx_fromconfig(const cfg_obj_t *options, isc_mem_t *mctx, isc_buffer_constinit(&b, s, strlen(s)); isc_buffer_add(&b, strlen(s)); name = dns_fixedname_initname(&fname); - RETERR(dns_name_fromtext(name, &b, dns_rootname, 0, NULL)); + RETERR(dns_name_fromtext(name, &b, dns_rootname, 0)); RETERR(dst_gssapi_acquirecred(name, false, &tctx->gsscred)); } diff --git a/bin/named/transportconf.c b/bin/named/transportconf.c index cfef81068a..5b904761ec 100644 --- a/bin/named/transportconf.c +++ b/bin/named/transportconf.c @@ -34,7 +34,7 @@ isc_buffer_constinit(&namesrc, id, strlen(id)); \ isc_buffer_add(&namesrc, strlen(id)); \ result = (dns_name_fromtext(name, &namesrc, dns_rootname, \ - DNS_NAME_DOWNCASE, NULL)); \ + DNS_NAME_DOWNCASE)); \ if (result != ISC_R_SUCCESS) { \ goto failure; \ } diff --git a/bin/named/tsigconf.c b/bin/named/tsigconf.c index a51cdb87d3..aa8be9dbae 100644 --- a/bin/named/tsigconf.c +++ b/bin/named/tsigconf.c @@ -71,7 +71,7 @@ add_initial_keys(const cfg_obj_t *list, dns_tsigkeyring_t *ring, isc_buffer_constinit(&keynamesrc, keyid, strlen(keyid)); isc_buffer_add(&keynamesrc, strlen(keyid)); ret = dns_name_fromtext(keyname, &keynamesrc, dns_rootname, - DNS_NAME_DOWNCASE, NULL); + DNS_NAME_DOWNCASE); if (ret != ISC_R_SUCCESS) { goto failure; } diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c index 1b1e8a818a..9b2dd18a76 100644 --- a/bin/named/zoneconf.c +++ b/bin/named/zoneconf.c @@ -253,7 +253,7 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone, isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); result = dns_name_fromtext(dns_fixedname_name(&fident), &b, - dns_rootname, 0, NULL); + dns_rootname, 0); if (result != ISC_R_SUCCESS) { cfg_obj_log(identity, ISC_LOG_ERROR, "'%s' is not a valid name", str); @@ -283,7 +283,7 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone, isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); result = dns_name_fromtext(dns_fixedname_name(&fname), - &b, dns_rootname, 0, NULL); + &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { cfg_obj_log(identity, ISC_LOG_ERROR, "'%s' is not a valid name", str); @@ -518,7 +518,7 @@ configure_staticstub_servernames(const cfg_obj_t *zconfig, dns_zone_t *zone, isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - result = dns_name_fromtext(nsname, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(nsname, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { cfg_obj_log(zconfig, ISC_LOG_ERROR, "server-name '%s' is not a valid " diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c index 8d86955828..f09c74db0b 100644 --- a/bin/nsupdate/nsupdate.c +++ b/bin/nsupdate/nsupdate.c @@ -523,8 +523,7 @@ setup_keystr(void) { isc_buffer_add(&keynamesrc, (unsigned int)(n - name)); debug("namefromtext"); - result = dns_name_fromtext(mykeyname, &keynamesrc, dns_rootname, 0, - NULL); + result = dns_name_fromtext(mykeyname, &keynamesrc, dns_rootname, 0); check_result(result, "dns_name_fromtext"); secretlen = strlen(secretstr) * 3 / 4; @@ -793,7 +792,7 @@ create_name(const char *str, dns_name_t *name) { isc_buffer_add(&namesrc, strlen(str)); return dns_name_fromtext(name, &namesrc, dns_rootname, - DNS_NAME_DOWNCASE, NULL); + DNS_NAME_DOWNCASE); } static void @@ -1305,7 +1304,7 @@ parse_name(char **cmdlinep, dns_message_t *msg, dns_name_t **namep) { dns_message_gettempname(msg, namep); isc_buffer_init(&source, word, strlen(word)); isc_buffer_add(&source, strlen(word)); - result = dns_name_fromtext(*namep, &source, dns_rootname, 0, NULL); + result = dns_name_fromtext(*namep, &source, dns_rootname, 0); if (result != ISC_R_SUCCESS) { error("invalid owner name: %s", isc_result_totext(result)); isc_buffer_invalidate(&source); @@ -1731,7 +1730,7 @@ evaluate_key(char *cmdline) { isc_buffer_init(&b, namestr, strlen(namestr)); isc_buffer_add(&b, strlen(namestr)); - result = dns_name_fromtext(mykeyname, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(mykeyname, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fprintf(stderr, "could not parse key name\n"); return STATUS_SYNTAX; @@ -1785,7 +1784,7 @@ evaluate_zone(char *cmdline) { userzone = dns_fixedname_initname(&fuserzone); isc_buffer_init(&b, word, strlen(word)); isc_buffer_add(&b, strlen(word)); - result = dns_name_fromtext(userzone, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(userzone, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { userzone = NULL; /* Lest it point to an invalid name */ fprintf(stderr, "could not parse zone name\n"); @@ -3119,7 +3118,7 @@ start_gssrequest(dns_name_t *primary) { RUNTIME_CHECK(result < sizeof(servicename)); isc_buffer_init(&buf, servicename, strlen(servicename)); isc_buffer_add(&buf, strlen(servicename)); - result = dns_name_fromtext(servname, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(servname, &buf, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fatal("dns_name_fromtext(servname) failed: %s", isc_result_totext(result)); @@ -3136,7 +3135,7 @@ start_gssrequest(dns_name_t *primary) { isc_buffer_init(&buf, mykeystr, strlen(mykeystr)); isc_buffer_add(&buf, strlen(mykeystr)); - result = dns_name_fromtext(keyname, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(keyname, &buf, dns_rootname, 0); if (result != ISC_R_SUCCESS) { fatal("dns_name_fromtext(keyname) failed: %s", isc_result_totext(result)); @@ -3295,7 +3294,7 @@ recvgss(void *arg) { servname = dns_fixedname_initname(&fname); isc_buffer_init(&buf, servicename, strlen(servicename)); isc_buffer_add(&buf, strlen(servicename)); - result = dns_name_fromtext(servname, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(servname, &buf, dns_rootname, 0); check_result(result, "dns_name_fromtext"); result = dns_tkey_gssnegotiate(tsigquery, rcvmsg, servname, &context, diff --git a/bin/tests/system/pipelined/pipequeries.c b/bin/tests/system/pipelined/pipequeries.c index fcfb50ccd0..fd1f03a31d 100644 --- a/bin/tests/system/pipelined/pipequeries.c +++ b/bin/tests/system/pipelined/pipequeries.c @@ -141,7 +141,7 @@ sendquery(void) { isc_buffer_init(&buf, host, strlen(host)); isc_buffer_add(&buf, strlen(host)); result = dns_name_fromtext(dns_fixedname_name(&queryname), &buf, - dns_rootname, 0, NULL); + dns_rootname, 0); CHECK("dns_name_fromtext", result); dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER, diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c index 3ae513b668..cafaf482c9 100644 --- a/bin/tools/mdig.c +++ b/bin/tools/mdig.c @@ -592,7 +592,7 @@ sendquery(struct query *query) { isc_buffer_init(&buf, query->textname, strlen(query->textname)); isc_buffer_add(&buf, strlen(query->textname)); result = dns_name_fromtext(dns_fixedname_name(&queryname), &buf, - dns_rootname, 0, NULL); + dns_rootname, 0); CHECK("dns_name_fromtext", result); dns_message_create(mctx, NULL, NULL, DNS_MESSAGE_INTENTRENDER, diff --git a/bin/tools/nsec3hash.c b/bin/tools/nsec3hash.c index c0f62375d8..e55800821e 100644 --- a/bin/tools/nsec3hash.c +++ b/bin/tools/nsec3hash.c @@ -122,7 +122,7 @@ nsec3hash(nsec3printer *nsec3print, const char *algostr, const char *flagstr, name = dns_fixedname_initname(&fixed); isc_buffer_constinit(&buffer, domain, strlen(domain)); isc_buffer_add(&buffer, strlen(domain)); - result = dns_name_fromtext(name, &buffer, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &buffer, dns_rootname, 0); check_result(result, "dns_name_fromtext() failed"); dns_name_downcase(name, name); diff --git a/fuzz/dns_name_fromtext_target.c b/fuzz/dns_name_fromtext_target.c index 7886b04371..cdf6e47993 100644 --- a/fuzz/dns_name_fromtext_target.c +++ b/fuzz/dns_name_fromtext_target.c @@ -42,7 +42,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { isc_buffer_setactive(&buf, size); result = dns_name_fromtext(dns_fixedname_name(&origin), &buf, - dns_rootname, 0, NULL); + dns_rootname, 0); if (debug) { fprintf(stderr, "dns_name_fromtext: %s\n", isc_result_totext(result)); diff --git a/lib/dns/byaddr.c b/lib/dns/byaddr.c index a0a83c9ec4..fff186746e 100644 --- a/lib/dns/byaddr.c +++ b/lib/dns/byaddr.c @@ -80,5 +80,5 @@ dns_byaddr_createptrname(const isc_netaddr_t *address, dns_name_t *name) { len = (unsigned int)strlen(textname); isc_buffer_init(&buffer, textname, len); isc_buffer_add(&buffer, len); - return dns_name_fromtext(name, &buffer, dns_rootname, 0, NULL); + return dns_name_fromtext(name, &buffer, dns_rootname, 0); } diff --git a/lib/dns/dlz.c b/lib/dns/dlz.c index b6d41678ed..599520092e 100644 --- a/lib/dns/dlz.c +++ b/lib/dns/dlz.c @@ -410,7 +410,7 @@ dns_dlz_writeablezone(dns_view_t *view, dns_dlzdb_t *dlzdb, isc_buffer_add(&buffer, strlen(zone_name)); dns_fixedname_init(&fixorigin); result = dns_name_fromtext(dns_fixedname_name(&fixorigin), &buffer, - dns_rootname, 0, NULL); + dns_rootname, 0); if (result != ISC_R_SUCCESS) { goto cleanup; } diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c index 7e8f4d2cb9..444eb8fbfd 100644 --- a/lib/dns/dst_api.c +++ b/lib/dns/dst_api.c @@ -1618,8 +1618,7 @@ dst_key_read_public(const char *filename, int type, isc_mem_t *mctx, dns_fixedname_init(&name); isc_buffer_init(&b, DST_AS_STR(token), strlen(DST_AS_STR(token))); isc_buffer_add(&b, strlen(DST_AS_STR(token))); - ret = dns_name_fromtext(dns_fixedname_name(&name), &b, dns_rootname, 0, - NULL); + ret = dns_name_fromtext(dns_fixedname_name(&name), &b, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { goto cleanup; } diff --git a/lib/dns/gssapictx.c b/lib/dns/gssapictx.c index 273d94a2cd..8e9025d357 100644 --- a/lib/dns/gssapictx.c +++ b/lib/dns/gssapictx.c @@ -783,8 +783,7 @@ dst_gssapi_acceptctx(dns_gss_cred_id_t cred, const char *gssapi_keytab, isc_buffer_init(&namebuf, r.base, r.length); isc_buffer_add(&namebuf, r.length); - RETERR(dns_name_fromtext(principal, &namebuf, dns_rootname, 0, - NULL)); + RETERR(dns_name_fromtext(principal, &namebuf, dns_rootname, 0)); if (gnamebuf.length != 0U) { gret = gss_release_buffer(&minor, &gnamebuf); diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 320e36b2ea..cf452104e0 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -799,10 +799,48 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, isc_result_t dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, - const dns_name_t *origin, unsigned int options, - isc_buffer_t *target); + const dns_name_t *origin, unsigned int options); /*%< - * Convert the textual representation of a DNS name at source + * Convert the textual representation of a DNS name in 'source' + * and store it in 'name'. + * + * Notes: + * \li Relative domain names will have 'origin' appended to them + * unless 'origin' is NULL, in which case relative domain names + * will remain relative. + * + * \li If DNS_NAME_DOWNCASE is set in 'options', any uppercase letters + * in 'source' will be downcased when they are copied into 'target'. + * + * Requires: + * + * \li 'name' is a valid name with a dedicated buffer. + * + * \li 'source' is a valid buffer. + * + * Ensures: + * + * If result is success: + * \li Uppercase letters are downcased in the copy iff + * DNS_NAME_DOWNCASE is set in 'options'. + * + * \li The current location in source is advanced. + * + * Result: + *\li #ISC_R_SUCCESS + *\li #DNS_R_EMPTYLABEL + *\li #DNS_R_LABELTOOLONG + *\li #DNS_R_BADESCAPE + *\li #DNS_R_BADDOTTEDQUAD + *\li #ISC_R_NOSPACE + *\li #ISC_R_UNEXPECTEDEND + */ + +isc_result_t +dns_name_wirefromtext(isc_buffer_t *source, const dns_name_t *origin, + unsigned int options, isc_buffer_t *target); +/*%< + * Convert the textual representation of a DNS name in 'source' * into uncompressed wire form stored in target. * * Notes: @@ -815,18 +853,13 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, * * Requires: * - * \li 'name' is a valid name. - * * \li 'source' is a valid buffer. * - * \li 'target' is a valid buffer or 'target' is NULL and 'name' has - * a dedicated buffer. + * \li 'target' is a valid buffer. * * Ensures: * * If result is success: - * \li If 'target' is not NULL, 'name' is attached to it. - * * \li Uppercase letters are downcased in the copy iff * DNS_NAME_DOWNCASE is set in 'options'. * diff --git a/lib/dns/master.c b/lib/dns/master.c index 08b3a49046..071c1c3475 100644 --- a/lib/dns/master.c +++ b/lib/dns/master.c @@ -835,8 +835,7 @@ generate(dns_loadctx_t *lctx, char *range, char *lhs, char *gtype, char *rhs, isc_buffer_init(&buffer, lhsbuf, strlen(lhsbuf)); isc_buffer_add(&buffer, strlen(lhsbuf)); isc_buffer_setactive(&buffer, strlen(lhsbuf)); - result = dns_name_fromtext(owner, &buffer, ictx->origin, 0, - NULL); + result = dns_name_fromtext(owner, &buffer, ictx->origin, 0); if (result != ISC_R_SUCCESS) { goto error_cleanup; } @@ -1388,7 +1387,7 @@ load_text(dns_loadctx_t *lctx) { isc_buffer_setactive(&buffer, token.value.as_region.length); result = dns_name_fromtext(new_name, &buffer, - ictx->origin, 0, NULL); + ictx->origin, 0); if (MANYERRS(lctx, result)) { SETRESULT(lctx, result); LOGIT(result); diff --git a/lib/dns/name.c b/lib/dns/name.c index 193c25e310..2641b536ac 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -706,12 +706,11 @@ dns_name_fromregion(dns_name_t *name, const isc_region_t *r) { } } -isc_result_t -dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, - const dns_name_t *origin, unsigned int options, - isc_buffer_t *target) { - unsigned char *ndata, *label = NULL; - char *tdata; +static isc_result_t +convert_text(isc_buffer_t *source, const dns_name_t *origin, + unsigned int options, dns_name_t *name, isc_buffer_t *target) { + unsigned char *ndata = NULL, *label = NULL; + char *tdata = NULL; char c; ft_state state; unsigned int value = 0, count = 0; @@ -720,20 +719,9 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, bool done; bool downcase; - /* - * Convert the textual representation of a DNS name at source - * into uncompressed wire form stored in target. - * - * Notes: - * Relative domain names will have 'origin' appended to them - * unless 'origin' is NULL, in which case relative domain names - * will remain relative. - */ - REQUIRE(DNS_NAME_VALID(name)); REQUIRE(ISC_BUFFER_VALID(source)); - REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || - (target == NULL && ISC_BUFFER_VALID(name->buffer))); + REQUIRE(ISC_BUFFER_VALID(target)); downcase = ((options & DNS_NAME_DOWNCASE) != 0); @@ -951,6 +939,27 @@ dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, return ISC_R_SUCCESS; } +isc_result_t +dns_name_wirefromtext(isc_buffer_t *source, const dns_name_t *origin, + unsigned int options, isc_buffer_t *target) { + dns_name_t name; + + REQUIRE(ISC_BUFFER_VALID(target)); + + dns_name_init(&name); + return convert_text(source, origin, options, &name, target); +} + +isc_result_t +dns_name_fromtext(dns_name_t *name, isc_buffer_t *source, + const dns_name_t *origin, unsigned int options) { + REQUIRE(DNS_NAME_VALID(name)); + REQUIRE(ISC_BUFFER_VALID(name->buffer)); + + isc_buffer_clear(name->buffer); + return convert_text(source, origin, options, name, name->buffer); +} + isc_result_t dns_name_totext(const dns_name_t *name, unsigned int options, isc_buffer_t *target) { @@ -1787,7 +1796,7 @@ dns_name_fromstring(dns_name_t *target, const char *src, name = dns_fixedname_initname(&fn); } - result = dns_name_fromtext(name, &buf, origin, options, NULL); + result = dns_name_fromtext(name, &buf, origin, options); if (result != ISC_R_SUCCESS) { return result; } diff --git a/lib/dns/nsec3.c b/lib/dns/nsec3.c index d0d3eadda7..8791c41605 100644 --- a/lib/dns/nsec3.c +++ b/lib/dns/nsec3.c @@ -282,7 +282,7 @@ dns_nsec3_hashname(dns_fixedname_t *result, /* convert the hex to a domain name */ dns_fixedname_init(result); return dns_name_fromtext(dns_fixedname_name(result), &namebuffer, - origin, 0, NULL); + origin, 0); } unsigned int diff --git a/lib/dns/peer.c b/lib/dns/peer.c index 6d733d9636..f633ab285f 100644 --- a/lib/dns/peer.c +++ b/lib/dns/peer.c @@ -506,7 +506,7 @@ dns_peer_setkeybycharp(dns_peer_t *peer, const char *keyval) { isc_buffer_constinit(&b, keyval, strlen(keyval)); isc_buffer_add(&b, strlen(keyval)); result = dns_name_fromtext(dns_fixedname_name(&fname), &b, dns_rootname, - 0, NULL); + 0); if (result != ISC_R_SUCCESS) { return result; } diff --git a/lib/dns/rdata/any_255/tsig_250.c b/lib/dns/rdata/any_255/tsig_250.c index e356840d93..ef776e5562 100644 --- a/lib/dns/rdata/any_255/tsig_250.c +++ b/lib/dns/rdata/any_255/tsig_250.c @@ -20,7 +20,6 @@ static isc_result_t fromtext_any_tsig(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; uint64_t sigtime; isc_buffer_t buffer; dns_rcode_t rcode; @@ -39,12 +38,11 @@ fromtext_any_tsig(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); /* * Time Signed: 48 bits. diff --git a/lib/dns/rdata/ch_3/a_1.c b/lib/dns/rdata/ch_3/a_1.c index 99c9334c40..95a02fe957 100644 --- a/lib/dns/rdata/ch_3/a_1.c +++ b/lib/dns/rdata/ch_3/a_1.c @@ -24,7 +24,8 @@ static isc_result_t fromtext_ch_a(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_a); @@ -37,22 +38,22 @@ fromtext_ch_a(ARGS_FROMTEXT) { false)); /* get domain name */ - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); if ((options & DNS_RDATA_CHECKNAMES) != 0 && (options & DNS_RDATA_CHECKREVERSE) != 0) { bool ok; - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } } diff --git a/lib/dns/rdata/generic/afsdb_18.c b/lib/dns/rdata/generic/afsdb_18.c index 25bd2e0b69..0721610807 100644 --- a/lib/dns/rdata/generic/afsdb_18.c +++ b/lib/dns/rdata/generic/afsdb_18.c @@ -22,7 +22,8 @@ static isc_result_t fromtext_afsdb(ARGS_FROMTEXT) { isc_token_t token; isc_buffer_t buffer; - dns_name_t name; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); bool ok; REQUIRE(type == dns_rdatatype_afsdb); @@ -46,21 +47,21 @@ fromtext_afsdb(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/amtrelay_260.c b/lib/dns/rdata/generic/amtrelay_260.c index 1bd7378745..00c66c7bf6 100644 --- a/lib/dns/rdata/generic/amtrelay_260.c +++ b/lib/dns/rdata/generic/amtrelay_260.c @@ -23,7 +23,6 @@ static isc_result_t fromtext_amtrelay(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; unsigned int discovery; unsigned int gateway; @@ -108,13 +107,11 @@ fromtext_amtrelay(ARGS_FROMTEXT) { return ISC_R_SUCCESS; case 3: - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - return dns_name_fromtext(&name, &buffer, origin, options, - target); + return dns_name_wirefromtext(&buffer, origin, options, target); default: UNREACHABLE(); } diff --git a/lib/dns/rdata/generic/cname_5.c b/lib/dns/rdata/generic/cname_5.c index a946097be6..dbf333effb 100644 --- a/lib/dns/rdata/generic/cname_5.c +++ b/lib/dns/rdata/generic/cname_5.c @@ -20,7 +20,6 @@ static isc_result_t fromtext_cname(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_cname); @@ -32,12 +31,11 @@ fromtext_cname(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/dname_39.c b/lib/dns/rdata/generic/dname_39.c index ce87676a1e..6e1d6e14d2 100644 --- a/lib/dns/rdata/generic/dname_39.c +++ b/lib/dns/rdata/generic/dname_39.c @@ -21,7 +21,6 @@ static isc_result_t fromtext_dname(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_dname); @@ -33,12 +32,11 @@ fromtext_dname(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/hip_55.c b/lib/dns/rdata/generic/hip_55.c index 228922ba92..b084a899eb 100644 --- a/lib/dns/rdata/generic/hip_55.c +++ b/lib/dns/rdata/generic/hip_55.c @@ -20,7 +20,6 @@ static isc_result_t fromtext_hip(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; isc_buffer_t hit_len; isc_buffer_t key_len; @@ -96,7 +95,6 @@ fromtext_hip(ARGS_FROMTEXT) { /* * Rendezvous Servers. */ - dns_name_init(&name); do { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, true)); @@ -104,8 +102,7 @@ fromtext_hip(ARGS_FROMTEXT) { break; } buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); } while (1); /* diff --git a/lib/dns/rdata/generic/ipseckey_45.c b/lib/dns/rdata/generic/ipseckey_45.c index d479e7d2d9..4c4996c4bb 100644 --- a/lib/dns/rdata/generic/ipseckey_45.c +++ b/lib/dns/rdata/generic/ipseckey_45.c @@ -23,7 +23,6 @@ static isc_result_t fromtext_ipseckey(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; unsigned int gateway; struct in_addr addr; @@ -105,13 +104,11 @@ fromtext_ipseckey(ARGS_FROMTEXT) { break; case 3: - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); break; } diff --git a/lib/dns/rdata/generic/lp_107.c b/lib/dns/rdata/generic/lp_107.c index 6bc41e298d..00aa6abc90 100644 --- a/lib/dns/rdata/generic/lp_107.c +++ b/lib/dns/rdata/generic/lp_107.c @@ -23,7 +23,6 @@ static isc_result_t fromtext_lp(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_lp); @@ -42,12 +41,11 @@ fromtext_lp(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - return dns_name_fromtext(&name, &buffer, origin, options, target); + return dns_name_wirefromtext(&buffer, origin, options, target); } static isc_result_t diff --git a/lib/dns/rdata/generic/mb_7.c b/lib/dns/rdata/generic/mb_7.c index ab6ab42b0c..555d92a514 100644 --- a/lib/dns/rdata/generic/mb_7.c +++ b/lib/dns/rdata/generic/mb_7.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_mb(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_mb); @@ -31,12 +30,11 @@ fromtext_mb(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/md_3.c b/lib/dns/rdata/generic/md_3.c index 702b60c185..217fd3b0bf 100644 --- a/lib/dns/rdata/generic/md_3.c +++ b/lib/dns/rdata/generic/md_3.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_md(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_md); @@ -31,12 +30,11 @@ fromtext_md(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/mf_4.c b/lib/dns/rdata/generic/mf_4.c index 0142c12478..8f353bf717 100644 --- a/lib/dns/rdata/generic/mf_4.c +++ b/lib/dns/rdata/generic/mf_4.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_mf(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_mf); @@ -31,12 +30,11 @@ fromtext_mf(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/mg_8.c b/lib/dns/rdata/generic/mg_8.c index 0c8fae21c9..15dba05c01 100644 --- a/lib/dns/rdata/generic/mg_8.c +++ b/lib/dns/rdata/generic/mg_8.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_mg(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_mg); @@ -31,12 +30,11 @@ fromtext_mg(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/minfo_14.c b/lib/dns/rdata/generic/minfo_14.c index 7ea92d7c99..460d37c573 100644 --- a/lib/dns/rdata/generic/minfo_14.c +++ b/lib/dns/rdata/generic/minfo_14.c @@ -19,7 +19,8 @@ static isc_result_t fromtext_minfo(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); isc_buffer_t buffer; int i; bool ok; @@ -37,19 +38,18 @@ fromtext_minfo(ARGS_FROMTEXT) { for (i = 0; i < 2; i++) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ismailbox(&name); + ok = dns_name_ismailbox(name); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } } return ISC_R_SUCCESS; diff --git a/lib/dns/rdata/generic/mr_9.c b/lib/dns/rdata/generic/mr_9.c index 4e62678852..df023d731a 100644 --- a/lib/dns/rdata/generic/mr_9.c +++ b/lib/dns/rdata/generic/mr_9.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_mr(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_mr); @@ -31,12 +30,11 @@ fromtext_mr(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/mx_15.c b/lib/dns/rdata/generic/mx_15.c index afa40e6309..84ffd0e4a5 100644 --- a/lib/dns/rdata/generic/mx_15.c +++ b/lib/dns/rdata/generic/mx_15.c @@ -47,7 +47,8 @@ check_mx(isc_token_t *token) { static isc_result_t fromtext_mx(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); isc_buffer_t buffer; bool ok; @@ -77,21 +78,21 @@ fromtext_mx(ARGS_FROMTEXT) { warn_badmx(&token, lexer, callbacks); } - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/naptr_35.c b/lib/dns/rdata/generic/naptr_35.c index 3715bbcbe3..7589106c6a 100644 --- a/lib/dns/rdata/generic/naptr_35.c +++ b/lib/dns/rdata/generic/naptr_35.c @@ -172,7 +172,6 @@ txt_valid_regex(const unsigned char *txt) { static isc_result_t fromtext_naptr(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; unsigned char *regex; @@ -230,12 +229,11 @@ fromtext_naptr(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/ns_2.c b/lib/dns/rdata/generic/ns_2.c index b6b38f4388..89362b6c83 100644 --- a/lib/dns/rdata/generic/ns_2.c +++ b/lib/dns/rdata/generic/ns_2.c @@ -19,7 +19,8 @@ static isc_result_t fromtext_ns(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); isc_buffer_t buffer; bool ok; @@ -32,21 +33,21 @@ fromtext_ns(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/nsec_47.c b/lib/dns/rdata/generic/nsec_47.c index 28fea07c82..e8858bb6d8 100644 --- a/lib/dns/rdata/generic/nsec_47.c +++ b/lib/dns/rdata/generic/nsec_47.c @@ -27,7 +27,6 @@ static isc_result_t fromtext_nsec(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_nsec); @@ -41,12 +40,11 @@ fromtext_nsec(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return typemap_fromtext(lexer, target, false); } diff --git a/lib/dns/rdata/generic/nxt_30.c b/lib/dns/rdata/generic/nxt_30.c index a552276292..077bd73f5a 100644 --- a/lib/dns/rdata/generic/nxt_30.c +++ b/lib/dns/rdata/generic/nxt_30.c @@ -25,7 +25,6 @@ static isc_result_t fromtext_nxt(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; char *e; unsigned char bm[8 * 1024]; /* 64k bits */ @@ -45,12 +44,11 @@ fromtext_nxt(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); memset(bm, 0, sizeof(bm)); do { diff --git a/lib/dns/rdata/generic/ptr_12.c b/lib/dns/rdata/generic/ptr_12.c index 24d975a0b9..e0b5ea6309 100644 --- a/lib/dns/rdata/generic/ptr_12.c +++ b/lib/dns/rdata/generic/ptr_12.c @@ -19,8 +19,9 @@ static isc_result_t fromtext_ptr(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); REQUIRE(type == dns_rdatatype_ptr); @@ -31,23 +32,25 @@ fromtext_ptr(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); + if (rdclass == dns_rdataclass_in && (options & DNS_RDATA_CHECKNAMES) != 0 && (options & DNS_RDATA_CHECKREVERSE) != 0) { bool ok; - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } } return ISC_R_SUCCESS; diff --git a/lib/dns/rdata/generic/rp_17.c b/lib/dns/rdata/generic/rp_17.c index 33c8192fac..bc1861e988 100644 --- a/lib/dns/rdata/generic/rp_17.c +++ b/lib/dns/rdata/generic/rp_17.c @@ -21,7 +21,6 @@ static isc_result_t fromtext_rp(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; int i; bool ok; @@ -37,21 +36,25 @@ fromtext_rp(ARGS_FROMTEXT) { } for (i = 0; i < 2; i++) { + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); + RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); + ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0 && i == 0) { - ok = dns_name_ismailbox(&name); + ok = dns_name_ismailbox(name); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } } return ISC_R_SUCCESS; diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c index bcfac4a666..91202513af 100644 --- a/lib/dns/rdata/generic/rrsig_46.c +++ b/lib/dns/rdata/generic/rrsig_46.c @@ -28,7 +28,6 @@ fromtext_rrsig(ARGS_FROMTEXT) { dns_rdatatype_t covered; char *e; isc_result_t result; - dns_name_t name; isc_buffer_t buffer; uint32_t time_signed, time_expire; unsigned int used; @@ -145,12 +144,11 @@ fromtext_rrsig(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); /* * Sig. diff --git a/lib/dns/rdata/generic/rt_21.c b/lib/dns/rdata/generic/rt_21.c index 41c0df41f3..798693f92b 100644 --- a/lib/dns/rdata/generic/rt_21.c +++ b/lib/dns/rdata/generic/rt_21.c @@ -21,8 +21,9 @@ static isc_result_t fromtext_rt(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); bool ok; REQUIRE(type == dns_rdatatype_rt); @@ -41,21 +42,23 @@ fromtext_rt(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); + ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/generic/sig_24.c b/lib/dns/rdata/generic/sig_24.c index c5d3ed3ef7..04b37fcd39 100644 --- a/lib/dns/rdata/generic/sig_24.c +++ b/lib/dns/rdata/generic/sig_24.c @@ -26,7 +26,6 @@ fromtext_sig(ARGS_FROMTEXT) { dns_rdatatype_t covered; char *e; isc_result_t result; - dns_name_t name; isc_buffer_t buffer; uint32_t time_signed, time_expire; unsigned int used; @@ -109,12 +108,11 @@ fromtext_sig(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); /* * Sig. diff --git a/lib/dns/rdata/generic/soa_6.c b/lib/dns/rdata/generic/soa_6.c index 782da3c1a8..427433ee28 100644 --- a/lib/dns/rdata/generic/soa_6.c +++ b/lib/dns/rdata/generic/soa_6.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_soa(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; int i; uint32_t n; @@ -36,21 +35,23 @@ fromtext_soa(ARGS_FROMTEXT) { } for (i = 0; i < 2; i++) { + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); + RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { switch (i) { case 0: - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); break; case 1: - ok = dns_name_ismailbox(&name); + ok = dns_name_ismailbox(name); break; } } @@ -58,7 +59,7 @@ fromtext_soa(ARGS_FROMTEXT) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } } diff --git a/lib/dns/rdata/generic/talink_58.c b/lib/dns/rdata/generic/talink_58.c index 148a11569c..fef1195b32 100644 --- a/lib/dns/rdata/generic/talink_58.c +++ b/lib/dns/rdata/generic/talink_58.c @@ -19,7 +19,6 @@ static isc_result_t fromtext_talink(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; int i; @@ -37,10 +36,8 @@ fromtext_talink(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, - target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); } return ISC_R_SUCCESS; diff --git a/lib/dns/rdata/generic/tkey_249.c b/lib/dns/rdata/generic/tkey_249.c index dbea25a1da..b16757b3ad 100644 --- a/lib/dns/rdata/generic/tkey_249.c +++ b/lib/dns/rdata/generic/tkey_249.c @@ -22,7 +22,6 @@ static isc_result_t fromtext_tkey(ARGS_FROMTEXT) { isc_token_t token; dns_rcode_t rcode; - dns_name_t name; isc_buffer_t buffer; long i; char *e; @@ -38,12 +37,11 @@ fromtext_tkey(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); /* * Inception. diff --git a/lib/dns/rdata/in_1/a6_38.c b/lib/dns/rdata/in_1/a6_38.c index b70a65343f..822f9b225b 100644 --- a/lib/dns/rdata/in_1/a6_38.c +++ b/lib/dns/rdata/in_1/a6_38.c @@ -27,8 +27,9 @@ fromtext_in_a6(ARGS_FROMTEXT) { unsigned char prefixlen; unsigned char octets; unsigned char mask; - dns_name_t name; isc_buffer_t buffer; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); bool ok; REQUIRE(type == dns_rdatatype_a6); @@ -77,21 +78,23 @@ fromtext_in_a6(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); + ok = true; if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/kx_36.c b/lib/dns/rdata/in_1/kx_36.c index aebc7292a5..3498b72d26 100644 --- a/lib/dns/rdata/in_1/kx_36.c +++ b/lib/dns/rdata/in_1/kx_36.c @@ -21,7 +21,6 @@ static isc_result_t fromtext_in_kx(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_kx); @@ -40,12 +39,11 @@ fromtext_in_kx(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/nsap-ptr_23.c b/lib/dns/rdata/in_1/nsap-ptr_23.c index 55167cebee..929d326422 100644 --- a/lib/dns/rdata/in_1/nsap-ptr_23.c +++ b/lib/dns/rdata/in_1/nsap-ptr_23.c @@ -21,7 +21,6 @@ static isc_result_t fromtext_in_nsap_ptr(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_nsap_ptr); @@ -34,12 +33,11 @@ fromtext_in_nsap_ptr(ARGS_FROMTEXT) { RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/px_26.c b/lib/dns/rdata/in_1/px_26.c index 1301767596..89603478ed 100644 --- a/lib/dns/rdata/in_1/px_26.c +++ b/lib/dns/rdata/in_1/px_26.c @@ -21,7 +21,6 @@ static isc_result_t fromtext_in_px(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; REQUIRE(type == dns_rdatatype_px); @@ -50,18 +49,16 @@ fromtext_in_px(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); /* * MAPX400. */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_wirefromtext(&buffer, origin, options, target)); return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/srv_33.c b/lib/dns/rdata/in_1/srv_33.c index 0b8f34b53b..5c0cb1ed72 100644 --- a/lib/dns/rdata/in_1/srv_33.c +++ b/lib/dns/rdata/in_1/srv_33.c @@ -21,8 +21,9 @@ static isc_result_t fromtext_in_srv(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); bool ok; REQUIRE(type == dns_rdatatype_srv); @@ -67,22 +68,24 @@ fromtext_in_srv(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); ok = true; + if ((options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } + return ISC_R_SUCCESS; } diff --git a/lib/dns/rdata/in_1/svcb_64.c b/lib/dns/rdata/in_1/svcb_64.c index b2f239ef99..0f458c9c04 100644 --- a/lib/dns/rdata/in_1/svcb_64.c +++ b/lib/dns/rdata/in_1/svcb_64.c @@ -552,11 +552,12 @@ svcsortkeys(isc_buffer_t *target, unsigned int used) { static isc_result_t generic_fromtext_in_svcb(ARGS_FROMTEXT) { isc_token_t token; - dns_name_t name; isc_buffer_t buffer; bool alias; bool ok = true; unsigned int used; + dns_fixedname_t fn; + dns_name_t *name = dns_fixedname_initname(&fn); UNUSED(type); UNUSED(rdclass); @@ -579,20 +580,22 @@ generic_fromtext_in_svcb(ARGS_FROMTEXT) { */ RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring, false)); - dns_name_init(&name); buffer_fromregion(&buffer, &token.value.as_region); if (origin == NULL) { origin = dns_rootname; } - RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target)); + + RETTOK(dns_name_fromtext(name, &buffer, origin, options)); + RETTOK(dns_name_towire(name, NULL, target)); + if (!alias && (options & DNS_RDATA_CHECKNAMES) != 0) { - ok = dns_name_ishostname(&name, false); + ok = dns_name_ishostname(name, false); } if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0) { RETTOK(DNS_R_BADNAME); } if (!ok && callbacks != NULL) { - warn_badname(&name, lexer, callbacks); + warn_badname(name, lexer, callbacks); } /* diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index 24a95af3d5..42c7b286ba 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -818,7 +818,7 @@ ip2name(const dns_rpz_cidr_key_t *tgt_ip, dns_rpz_prefix_t tgt_prefix, isc_buffer_init(&buffer, str, sizeof(str)); isc_buffer_add(&buffer, len); - result = dns_name_fromtext(ip_name, &buffer, base_name, 0, NULL); + result = dns_name_fromtext(ip_name, &buffer, base_name, 0); return result; } diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index c65da7cd5e..e99f34da13 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1798,7 +1798,7 @@ dns_sdlz_putnamedrr(dns_sdlzallnodes_t *allnodes, const char *name, isc_buffer_constinit(&b, name, strlen(name)); isc_buffer_add(&b, strlen(name)); - result = dns_name_fromtext(newname, &b, origin, 0, NULL); + result = dns_name_fromtext(newname, &b, origin, 0); if (result != ISC_R_SUCCESS) { return result; } diff --git a/lib/dns/skr.c b/lib/dns/skr.c index e2dada1f79..ee64025b34 100644 --- a/lib/dns/skr.c +++ b/lib/dns/skr.c @@ -72,7 +72,7 @@ parse_rr(isc_lex_t *lex, isc_mem_t *mctx, char *owner, dns_name_t *origin, dname = dns_fixedname_initname(&dfname); isc_buffer_init(&b, owner, strlen(owner)); isc_buffer_add(&b, strlen(owner)); - ret = dns_name_fromtext(dname, &b, dns_rootname, 0, NULL); + ret = dns_name_fromtext(dname, &b, dns_rootname, 0); if (ret != ISC_R_SUCCESS) { return ret; } diff --git a/lib/dns/ssu.c b/lib/dns/ssu.c index 0649307400..29ca14ee68 100644 --- a/lib/dns/ssu.c +++ b/lib/dns/ssu.c @@ -278,7 +278,7 @@ reverse_from_address(dns_name_t *tcpself, const isc_netaddr_t *tcpaddr) { } isc_buffer_init(&b, buf, strlen(buf)); isc_buffer_add(&b, strlen(buf)); - result = dns_name_fromtext(tcpself, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(tcpself, &b, dns_rootname, 0); RUNTIME_CHECK(result == ISC_R_SUCCESS); } @@ -318,7 +318,7 @@ stf_from_address(dns_name_t *stfself, const isc_netaddr_t *tcpaddr) { } isc_buffer_init(&b, buf, strlen(buf)); isc_buffer_add(&b, strlen(buf)); - result = dns_name_fromtext(stfself, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(stfself, &b, dns_rootname, 0); RUNTIME_CHECK(result == ISC_R_SUCCESS); } diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c index 377cdb9047..ecfb21731d 100644 --- a/lib/dns/tkey.c +++ b/lib/dns/tkey.c @@ -473,7 +473,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx, isc_nonce_buf(randomdata, sizeof(randomdata)); isc_buffer_init(&b, randomtext, sizeof(randomtext)); RETERR(isc_hex_totext(&r, 2, "", &b)); - RETERR(dns_name_fromtext(keyname, &b, NULL, 0, NULL)); + RETERR(dns_name_fromtext(keyname, &b, NULL, 0)); } RETERR(dns_name_concatenate(keyname, dns_rootname, keyname)); diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c index 828a4addf1..57da184658 100644 --- a/lib/dns/tsig.c +++ b/lib/dns/tsig.c @@ -372,7 +372,7 @@ restore_key(dns_tsigkeyring_t *ring, isc_stdtime_t now, FILE *fp) { name = dns_fixedname_initname(&fname); isc_buffer_init(&b, namestr, strlen(namestr)); isc_buffer_add(&b, strlen(namestr)); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } @@ -380,7 +380,7 @@ restore_key(dns_tsigkeyring_t *ring, isc_stdtime_t now, FILE *fp) { creator = dns_fixedname_initname(&fcreator); isc_buffer_init(&b, creatorstr, strlen(creatorstr)); isc_buffer_add(&b, strlen(creatorstr)); - result = dns_name_fromtext(creator, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(creator, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } @@ -388,7 +388,7 @@ restore_key(dns_tsigkeyring_t *ring, isc_stdtime_t now, FILE *fp) { algorithm = dns_fixedname_initname(&falgorithm); isc_buffer_init(&b, algorithmstr, strlen(algorithmstr)); isc_buffer_add(&b, strlen(algorithmstr)); - result = dns_name_fromtext(algorithm, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(algorithm, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } diff --git a/lib/dns/view.c b/lib/dns/view.c index be7db571c8..963d862723 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -2071,8 +2071,7 @@ dns_view_loadnta(dns_view_t *view) { isc_buffer_init(&b, name, (unsigned int)len); isc_buffer_add(&b, (unsigned int)len); - CHECK(dns_name_fromtext(fname, &b, dns_rootname, 0, - NULL)); + CHECK(dns_name_fromtext(fname, &b, dns_rootname, 0)); ntaname = fname; } diff --git a/lib/isccfg/aclconf.c b/lib/isccfg/aclconf.c index 10973151cc..133322a0df 100644 --- a/lib/isccfg/aclconf.c +++ b/lib/isccfg/aclconf.c @@ -181,7 +181,7 @@ convert_keyname(const cfg_obj_t *keyobj, isc_mem_t *mctx, dns_name_t *dnsname) { isc_buffer_add(&buf, keylen); dns_fixedname_init(&fixname); result = dns_name_fromtext(dns_fixedname_name(&fixname), &buf, - dns_rootname, 0, NULL); + dns_rootname, 0); if (result != ISC_R_SUCCESS) { cfg_obj_log(keyobj, ISC_LOG_WARNING, "key name '%s' is not a valid domain name", diff --git a/lib/isccfg/check.c b/lib/isccfg/check.c index c60eec4b67..2e8a4b2297 100644 --- a/lib/isccfg/check.c +++ b/lib/isccfg/check.c @@ -136,7 +136,7 @@ check_orderent(const cfg_obj_t *ent) { isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); tresult = dns_name_fromtext(dns_fixedname_name(&fixed), &b, - dns_rootname, 0, NULL); + dns_rootname, 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(obj, ISC_LOG_ERROR, "rrset-order: invalid name '%s'", str); @@ -243,8 +243,7 @@ check_dual_stack(const cfg_obj_t *options) { isc_buffer_constinit(&buffer, str, strlen(str)); isc_buffer_add(&buffer, strlen(str)); name = dns_fixedname_initname(&fixed); - tresult = dns_name_fromtext(name, &buffer, dns_rootname, 0, - NULL); + tresult = dns_name_fromtext(name, &buffer, dns_rootname, 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(obj, ISC_LOG_ERROR, "bad name '%s'", str); if (result == ISC_R_SUCCESS) { @@ -365,7 +364,7 @@ disabled_algorithms(const cfg_obj_t *disabled) { str = cfg_obj_asstring(obj); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - tresult = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + tresult = dns_name_fromtext(name, &b, dns_rootname, 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(obj, ISC_LOG_ERROR, "bad domain name '%s'", str); result = tresult; @@ -408,7 +407,7 @@ disabled_ds_digests(const cfg_obj_t *disabled) { str = cfg_obj_asstring(obj); isc_buffer_constinit(&b, str, strlen(str)); isc_buffer_add(&b, strlen(str)); - tresult = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + tresult = dns_name_fromtext(name, &b, dns_rootname, 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(obj, ISC_LOG_ERROR, "bad domain name '%s'", str); result = tresult; @@ -3130,7 +3129,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, isc_buffer_constinit(&b, znamestr, strlen(znamestr)); isc_buffer_add(&b, strlen(znamestr)); tresult = dns_name_fromtext(dns_fixedname_name(&fixedname), &b, - dns_rootname, DNS_NAME_DOWNCASE, NULL); + dns_rootname, DNS_NAME_DOWNCASE); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(zconfig, ISC_LOG_ERROR, "zone '%s': is not a valid name", znamestr); @@ -3718,8 +3717,8 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions, isc_buffer_constinit(&b2, snamestr, strlen(snamestr)); isc_buffer_add(&b2, strlen(snamestr)); sname = dns_fixedname_initname(&fixed_sname); - tresult = dns_name_fromtext(sname, &b2, dns_rootname, 0, - NULL); + tresult = dns_name_fromtext(sname, &b2, dns_rootname, + 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(zconfig, ISC_LOG_ERROR, "server-name '%s' is not a valid " @@ -4153,7 +4152,7 @@ check_keylist(const cfg_obj_t *keys, isc_symtab_t *symtab, isc_mem_t *mctx) { isc_buffer_constinit(&b, keyid, strlen(keyid)); isc_buffer_add(&b, strlen(keyid)); - tresult = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + tresult = dns_name_fromtext(name, &b, dns_rootname, 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(key, ISC_LOG_ERROR, "key '%s': bad key name", keyid); @@ -4393,7 +4392,7 @@ check_servers(const cfg_obj_t *config, const cfg_obj_t *voptions, isc_buffer_add(&b, strlen(keyval)); keyname = dns_fixedname_initname(&fname); tresult = dns_name_fromtext(keyname, &b, dns_rootname, - 0, NULL); + 0); if (tresult != ISC_R_SUCCESS) { cfg_obj_log(keys, ISC_LOG_ERROR, "bad key name '%s'", keyval); @@ -4558,7 +4557,7 @@ check_trust_anchor(const cfg_obj_t *key, unsigned int *flagsp) { keyname = dns_fixedname_initname(&fkeyname); isc_buffer_constinit(&b, namestr, strlen(namestr)); isc_buffer_add(&b, strlen(namestr)); - result = dns_name_fromtext(keyname, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(keyname, &b, dns_rootname, 0); if (result != ISC_R_SUCCESS) { cfg_obj_log(key, ISC_LOG_WARNING, "bad key name: %s\n", isc_result_totext(result)); diff --git a/tests/bench/compress.c b/tests/bench/compress.c index 31e73f5be1..912e8847e2 100644 --- a/tests/bench/compress.c +++ b/tests/bench/compress.c @@ -62,7 +62,7 @@ main(void) { errx(1, "too many names"); } dns_name_t *name = dns_fixedname_initname(&fixedname[count++]); - result = dns_name_fromtext(name, &buf, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &buf, dns_rootname, 0); CHECKRESULT(result, line); } diff --git a/tests/bench/load-names.c b/tests/bench/load-names.c index ca9aa0ac3a..9957bbc543 100644 --- a/tests/bench/load-names.c +++ b/tests/bench/load-names.c @@ -471,8 +471,7 @@ main(int argc, char *argv[]) { isc_buffer_t buffer; isc_buffer_init(&buffer, domain, len); isc_buffer_add(&buffer, len); - result = dns_name_fromtext(name, &buffer, dns_rootname, 0, - NULL); + result = dns_name_fromtext(name, &buffer, dns_rootname, 0); FILE_CHECK(result == ISC_R_SUCCESS, isc_result_totext(result)); wirebytes += name->length; diff --git a/tests/bench/qp-dump.c b/tests/bench/qp-dump.c index 612a5b0446..476cab2bfc 100644 --- a/tests/bench/qp-dump.c +++ b/tests/bench/qp-dump.c @@ -203,8 +203,7 @@ main(int argc, char *argv[]) { isc_buffer_init(&buffer, domain, len); isc_buffer_add(&buffer, len); - result = dns_name_fromtext(name, &buffer, dns_rootname, 0, - NULL); + result = dns_name_fromtext(name, &buffer, dns_rootname, 0); if (result == ISC_R_SUCCESS) { smallname_from_name(name, &pval, &ival); result = dns_qp_insert(qp, pval, ival); diff --git a/tests/bench/qplookups.c b/tests/bench/qplookups.c index 23130caedd..ed31ecf318 100644 --- a/tests/bench/qplookups.c +++ b/tests/bench/qplookups.c @@ -162,8 +162,7 @@ load_qp(dns_qp_t *qp, const char *filename) { isc_buffer_init(&buffer, domain, len); isc_buffer_add(&buffer, len); - result = dns_name_fromtext(name, &buffer, dns_rootname, 0, - NULL); + result = dns_name_fromtext(name, &buffer, dns_rootname, 0); if (result == ISC_R_SUCCESS) { smallname_from_name(name, &pval, &ival); result = dns_qp_insert(qp, pval, ival); diff --git a/tests/dns/dbiterator_test.c b/tests/dns/dbiterator_test.c index 67e19c71e5..a84e4d806c 100644 --- a/tests/dns/dbiterator_test.c +++ b/tests/dns/dbiterator_test.c @@ -42,7 +42,7 @@ make_name(const char *src, dns_name_t *name) { isc_buffer_t b; isc_buffer_constinit(&b, src, strlen(src)); isc_buffer_add(&b, strlen(src)); - return dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + return dns_name_fromtext(name, &b, dns_rootname, 0); } /* create: make sure we can create a dbiterator */ diff --git a/tests/dns/dispatch_test.c b/tests/dns/dispatch_test.c index c6c743f12f..ae3bed56db 100644 --- a/tests/dns/dispatch_test.c +++ b/tests/dns/dispatch_test.c @@ -219,7 +219,7 @@ setup_test(void **state) { isc_buffer_constinit(&namesrc, tls_name_str, strlen(tls_name_str)); isc_buffer_add(&namesrc, strlen(tls_name_str)); if (dns_name_fromtext(tls_name, &namesrc, dns_rootname, - DNS_NAME_DOWNCASE, NULL) != ISC_R_SUCCESS) + DNS_NAME_DOWNCASE) != ISC_R_SUCCESS) { return -1; } diff --git a/tests/dns/dnstap_test.c b/tests/dns/dnstap_test.c index a7b1aaf5b0..de88bd1655 100644 --- a/tests/dns/dnstap_test.c +++ b/tests/dns/dnstap_test.c @@ -180,7 +180,7 @@ ISC_LOOP_TEST_IMPL(dns_dt_send) { zname = dns_fixedname_initname(&zfname); isc_buffer_constinit(&zb, "example.com.", 12); isc_buffer_add(&zb, 12); - result = dns_name_fromtext(zname, &zb, NULL, 0, NULL); + result = dns_name_fromtext(zname, &zb, NULL, 0); assert_int_equal(result, ISC_R_SUCCESS); memset(&zr, 0, sizeof(zr)); diff --git a/tests/dns/dst_test.c b/tests/dns/dst_test.c index 871a4931ce..10bb24bc9b 100644 --- a/tests/dns/dst_test.c +++ b/tests/dns/dst_test.c @@ -163,7 +163,7 @@ check_sig(const char *datapath, const char *sigpath, const char *keyname, name = dns_fixedname_initname(&fname); isc_buffer_constinit(&b, keyname, strlen(keyname)); isc_buffer_add(&b, strlen(keyname)); - result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); result = dst_key_fromfile(name, id, alg, type, TESTS_DIR "/testdata/dst", mctx, &key); @@ -298,7 +298,7 @@ check_cmp(const char *key1_name, dns_keytag_t key1_id, const char *key2_name, name1 = dns_fixedname_initname(&fname1); isc_buffer_constinit(&b1, key1_name, strlen(key1_name)); isc_buffer_add(&b1, strlen(key1_name)); - result = dns_name_fromtext(name1, &b1, dns_rootname, 0, NULL); + result = dns_name_fromtext(name1, &b1, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); result = dst_key_fromfile(name1, key1_id, alg, type, TESTS_DIR "/comparekeys", mctx, &key1); @@ -310,7 +310,7 @@ check_cmp(const char *key1_name, dns_keytag_t key1_id, const char *key2_name, name2 = dns_fixedname_initname(&fname2); isc_buffer_constinit(&b2, key2_name, strlen(key2_name)); isc_buffer_add(&b2, strlen(key2_name)); - result = dns_name_fromtext(name2, &b2, dns_rootname, 0, NULL); + result = dns_name_fromtext(name2, &b2, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); result = dst_key_fromfile(name2, key2_id, alg, type, TESTS_DIR "/comparekeys", mctx, &key2); @@ -445,7 +445,7 @@ ISC_RUN_TEST_IMPL(ecdsa_determinism_test) { name = dns_fixedname_initname(&fname); isc_buffer_constinit(&keybuf, "example.", strlen("example.")); isc_buffer_add(&keybuf, strlen("example.")); - result = dns_name_fromtext(name, &keybuf, dns_rootname, 0, NULL); + result = dns_name_fromtext(name, &keybuf, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); result = dst_key_fromfile(name, 19786, DST_ALG_ECDSA256, DST_TYPE_PUBLIC | DST_TYPE_PRIVATE, diff --git a/tests/dns/keytable_test.c b/tests/dns/keytable_test.c index 5b0ba19a3a..538a98bfeb 100644 --- a/tests/dns/keytable_test.c +++ b/tests/dns/keytable_test.c @@ -97,9 +97,8 @@ str2name(const char *namestr) { name = dns_fixedname_initname(&fname); isc_buffer_init(&namebuf, UNCONST(namestr), strlen(namestr)); isc_buffer_add(&namebuf, strlen(namestr)); - assert_int_equal( - dns_name_fromtext(name, &namebuf, dns_rootname, 0, NULL), - ISC_R_SUCCESS); + assert_int_equal(dns_name_fromtext(name, &namebuf, dns_rootname, 0), + ISC_R_SUCCESS); return name; } diff --git a/tests/dns/master_test.c b/tests/dns/master_test.c index 6a2297876a..930e339475 100644 --- a/tests/dns/master_test.c +++ b/tests/dns/master_test.c @@ -100,7 +100,7 @@ setup_master(void (*warn)(struct dns_rdatacallbacks *, const char *, ...), isc_buffer_setactive(&source, len); dns_master_initrawheader(&header); - result = dns_name_fromtext(dns_origin, &source, dns_rootname, 0, NULL); + result = dns_name_fromtext(dns_origin, &source, dns_rootname, 0); if (result != ISC_R_SUCCESS) { return result; } diff --git a/tests/dns/name_test.c b/tests/dns/name_test.c index a786299a02..0b39ba2fe5 100644 --- a/tests/dns/name_test.c +++ b/tests/dns/name_test.c @@ -640,7 +640,7 @@ ISC_RUN_TEST_IMPL(isabsolute) { dns_name_init(&name); isc_buffer_init(&nb, data, BUFSIZ); dns_name_setbuffer(&name, &nb); - result = dns_name_fromtext(&name, &b, NULL, 0, NULL); + result = dns_name_fromtext(&name, &b, NULL, 0); assert_int_equal(result, ISC_R_SUCCESS); assert_int_equal(dns_name_isabsolute(&name), diff --git a/tests/dns/qpzone_test.c b/tests/dns/qpzone_test.c index e3c693d4a9..7e716bf024 100644 --- a/tests/dns/qpzone_test.c +++ b/tests/dns/qpzone_test.c @@ -134,12 +134,12 @@ ownercase_test_one(const char *str1, const char *str2) { isc_buffer_constinit(&b, str1, strlen(str1)); isc_buffer_add(&b, strlen(str1)); - result = dns_name_fromtext(name1, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name1, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); isc_buffer_constinit(&b, str2, strlen(str2)); isc_buffer_add(&b, strlen(str2)); - result = dns_name_fromtext(name2, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name2, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); /* Store the case from name1 */ @@ -206,12 +206,12 @@ ISC_RUN_TEST_IMPL(setownercase) { isc_buffer_constinit(&b, str1, strlen(str1)); isc_buffer_add(&b, strlen(str1)); - result = dns_name_fromtext(name1, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name1, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); isc_buffer_constinit(&b, str1, strlen(str1)); isc_buffer_add(&b, strlen(str1)); - result = dns_name_fromtext(name2, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(name2, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); assert_false(CASESET(&header)); diff --git a/tests/dns/rsa_test.c b/tests/dns/rsa_test.c index c1d44fa3f5..89a347e2e3 100644 --- a/tests/dns/rsa_test.c +++ b/tests/dns/rsa_test.c @@ -133,7 +133,7 @@ ISC_RUN_TEST_IMPL(isc_rsa_verify) { name = dns_fixedname_initname(&fname); isc_buffer_constinit(&buf, "rsa.", 4); isc_buffer_add(&buf, 4); - ret = dns_name_fromtext(name, &buf, NULL, 0, NULL); + ret = dns_name_fromtext(name, &buf, NULL, 0); assert_int_equal(ret, ISC_R_SUCCESS); ret = dst_key_fromfile(name, 29238, DST_ALG_RSASHA256, DST_TYPE_PUBLIC, diff --git a/tests/dns/skr_test.c b/tests/dns/skr_test.c index a0038c6ddc..dbeb4a7cc8 100644 --- a/tests/dns/skr_test.c +++ b/tests/dns/skr_test.c @@ -448,7 +448,7 @@ ISC_RUN_TEST_IMPL(skr_read) { dname = dns_fixedname_initname(&dfname); isc_buffer_init(&b, name, strlen(name)); isc_buffer_add(&b, strlen(name)); - result = dns_name_fromtext(dname, &b, dns_rootname, 0, NULL); + result = dns_name_fromtext(dname, &b, dns_rootname, 0); assert_int_equal(result, ISC_R_SUCCESS); /* Get the KSK */ diff --git a/tests/libtest/dns.c b/tests/libtest/dns.c index 2ded8b3e3b..7c88b6f285 100644 --- a/tests/libtest/dns.c +++ b/tests/libtest/dns.c @@ -419,7 +419,7 @@ dns_test_namefromstring(const char *namestr, dns_fixedname_t *fname) { isc_buffer_allocate(mctx, &b, length); isc_buffer_putmem(b, (const unsigned char *)namestr, length); - result = dns_name_fromtext(name, b, NULL, 0, NULL); + result = dns_name_fromtext(name, b, NULL, 0); INSIST(result == ISC_R_SUCCESS); isc_buffer_free(&b); From 2f7e6eb019cf85e5a5866f82341433212f2e12c8 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 21 Feb 2025 23:37:49 -0800 Subject: [PATCH 6/6] allow NULL compression context in dns_name_towire() passing NULL as the compression context to dns_name_towire() copies the uncompressed name data directly into the target buffer. --- lib/dns/include/dns/name.h | 3 ++- lib/dns/name.c | 13 +++++++++++-- tests/dns/name_test.c | 18 +++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index cf452104e0..07265f5ae5 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -772,7 +772,8 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, isc_buffer_t *target); /*%< * Convert 'name' into wire format, compressing it as specified by the - * compression context 'cctx', and storing the result in 'target'. + * compression context 'cctx' (or leaving it uncompressed if 'cctx' is + * NULL), and storing the result in 'target'. * * Notes: * \li If compression is permitted, then the cctx table may be updated. diff --git a/lib/dns/name.c b/lib/dns/name.c index 2641b536ac..ba6e5693e6 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -1453,13 +1453,22 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx, /* * Convert 'name' into wire format, compressing it as specified by the - * compression context 'cctx', and storing the result in 'target'. + * compression context 'cctx' (or without compressing if 'cctx' + * is NULL), and storing the result in 'target'. */ REQUIRE(DNS_NAME_VALID(name)); - REQUIRE(cctx != NULL); REQUIRE(ISC_BUFFER_VALID(target)); + if (cctx == NULL) { + if (isc_buffer_availablelength(target) < name->length) { + return ISC_R_NOSPACE; + } + memmove(isc_buffer_used(target), name->ndata, name->length); + isc_buffer_add(target, name->length); + return ISC_R_SUCCESS; + } + compress = !name->attributes.nocompress && dns_compress_getpermitted(cctx); multi = compress && dns_compress_getmultiuse(cctx); diff --git a/tests/dns/name_test.c b/tests/dns/name_test.c index 0b39ba2fe5..d598447ad3 100644 --- a/tests/dns/name_test.c +++ b/tests/dns/name_test.c @@ -158,17 +158,23 @@ compress_test(const dns_name_t *name1, const dns_name_t *name2, ISC_R_SUCCESS); } else { /* Owner name compression */ - dns_compress_setmultiuse(cctx, true); + if (cctx != NULL) { + dns_compress_setmultiuse(cctx, true); + } assert_int_equal(dns_name_towire(name1, cctx, &source), ISC_R_SUCCESS); - dns_compress_setmultiuse(cctx, true); + if (cctx != NULL) { + dns_compress_setmultiuse(cctx, true); + } assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); assert_int_equal(dns_name_towire(name2, cctx, &source), ISC_R_SUCCESS); - dns_compress_setmultiuse(cctx, true); + if (cctx != NULL) { + dns_compress_setmultiuse(cctx, true); + } assert_int_equal(dns_name_towire(name3, cctx, &source), ISC_R_SUCCESS); } @@ -254,6 +260,12 @@ ISC_RUN_TEST_IMPL(compression) { r.length = sizeof(plain3); dns_name_fromregion(&name4, &r); + /* Test 0: no compression context */ + compress_test(&name1, &name2, &name3, plain, sizeof(plain), plain, + sizeof(plain), NULL, DNS_DECOMPRESS_NEVER, true); + compress_test(&name1, &name2, &name3, plain, sizeof(plain), plain, + sizeof(plain), NULL, DNS_DECOMPRESS_NEVER, false); + /* Test 1: off, rdata */ permitted = false; dns_compress_init(&cctx, mctx, 0);