diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c index 8461134e67..cfb8f5141e 100644 --- a/bin/dnssec/dnssec-signzone.c +++ b/bin/dnssec/dnssec-signzone.c @@ -2034,7 +2034,7 @@ addnsec3(dns_name_t *name, dns_dbnode_t *node, const unsigned char *salt, dns_fixedname_init(&hashname); dns_rdataset_init(&rdataset); - dns_name_downcase(name, name, NULL); + dns_name_downcase(name, name); result = dns_nsec3_hashname(&hashname, hash, &hash_len, name, gorigin, dns_hash_sha1, iterations, salt, salt_len); check_result(result, "addnsec3: dns_nsec3_hashname()"); @@ -2402,7 +2402,7 @@ nsec3ify(unsigned int hashalg, dns_iterations_t iterations, fatal("iterating through the database failed: %s", isc_result_totext(result)); } - dns_name_downcase(name, name, NULL); + dns_name_downcase(name, name); hashlist_add_dns_name(hashlist, name, hashalg, iterations, salt, salt_len, false); dns_db_detachnode(gdb, &node); @@ -2412,7 +2412,7 @@ nsec3ify(unsigned int hashalg, dns_iterations_t iterations, * node for another span so we don't add * it here. Empty labels on nextname are within the span. */ - dns_name_downcase(nextname, nextname, NULL); + dns_name_downcase(nextname, nextname); dns_name_fullcompare(name, nextname, &order, &nlabels); addnowildcardhash(hashlist, name, hashalg, iterations, salt, salt_len); diff --git a/bin/named/server.c b/bin/named/server.c index cb9e390cc6..9f6d021bbf 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -12541,7 +12541,7 @@ nzd_setkey(MDB_val *key, dns_name_t *name, char *namebuf, size_t buflen) { dns_fixedname_t fixed; dns_fixedname_init(&fixed); - dns_name_downcase(name, dns_fixedname_name(&fixed), NULL); + dns_name_downcase(name, dns_fixedname_name(&fixed)); dns_name_format(dns_fixedname_name(&fixed), namebuf, buflen); key->mv_data = namebuf; diff --git a/bin/tools/nsec3hash.c b/bin/tools/nsec3hash.c index 0ddc6fa067..c0f62375d8 100644 --- a/bin/tools/nsec3hash.c +++ b/bin/tools/nsec3hash.c @@ -125,7 +125,7 @@ nsec3hash(nsec3printer *nsec3print, const char *algostr, const char *flagstr, result = dns_name_fromtext(name, &buffer, dns_rootname, 0, NULL); check_result(result, "dns_name_fromtext() failed"); - dns_name_downcase(name, name, NULL); + dns_name_downcase(name, name); length = isc_iterated_hash(hash, hash_alg, iterations, salt, salt_length, name->ndata, name->length); if (length == 0) { diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c index 8746df9843..cda1115ded 100644 --- a/lib/dns/dnssec.c +++ b/lib/dns/dnssec.c @@ -167,8 +167,8 @@ digest_sig(dst_context_t *ctx, bool downcase, dns_rdata_t *sigrdata, dns_fixedname_init(&fname); RUNTIME_CHECK(dns_name_downcase(&rrsig->signer, - dns_fixedname_name(&fname), - NULL) == ISC_R_SUCCESS); + dns_fixedname_name(&fname)) == + ISC_R_SUCCESS); dns_name_toregion(dns_fixedname_name(&fname), &r); } else { dns_name_toregion(&rrsig->signer, &r); @@ -231,8 +231,8 @@ dns_dnssec_sign(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key, dns_name_init(&sig.signer); dns_fixedname_init(&fsigner); RUNTIME_CHECK(dns_name_downcase(dst_key_name(key), - dns_fixedname_name(&fsigner), - NULL) == ISC_R_SUCCESS); + dns_fixedname_name(&fsigner)) == + ISC_R_SUCCESS); dns_name_clone(dns_fixedname_name(&fsigner), &sig.signer); sig.covered = set->type; @@ -280,8 +280,8 @@ dns_dnssec_sign(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key, } dns_fixedname_init(&fnewname); - RUNTIME_CHECK(dns_name_downcase(name, dns_fixedname_name(&fnewname), - NULL) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_downcase(name, dns_fixedname_name(&fnewname)) == + ISC_R_SUCCESS); dns_name_toregion(dns_fixedname_name(&fnewname), &r); /* @@ -479,8 +479,8 @@ again: */ dns_fixedname_init(&fnewname); labels = dns_name_countlabels(name) - 1; - RUNTIME_CHECK(dns_name_downcase(name, dns_fixedname_name(&fnewname), - NULL) == ISC_R_SUCCESS); + RUNTIME_CHECK(dns_name_downcase(name, dns_fixedname_name(&fnewname)) == + ISC_R_SUCCESS); if (labels - sig.labels > 0) { dns_name_split(dns_fixedname_name(&fnewname), sig.labels + 1, NULL, dns_fixedname_name(&fnewname)); diff --git a/lib/dns/ds.c b/lib/dns/ds.c index 07879018b7..c56691bf19 100644 --- a/lib/dns/ds.c +++ b/lib/dns/ds.c @@ -67,7 +67,7 @@ dns_ds_fromkeyrdata(const dns_name_t *owner, dns_rdata_t *key, } name = dns_fixedname_initname(&fname); - (void)dns_name_downcase(owner, name, NULL); + (void)dns_name_downcase(owner, name); md = isc_md_new(); diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h index 4876ea6c1d..24340b2e4b 100644 --- a/lib/dns/include/dns/name.h +++ b/lib/dns/include/dns/name.h @@ -937,8 +937,7 @@ dns_name_tofilenametext(const dns_name_t *name, bool omit_final_dot, */ isc_result_t -dns_name_downcase(const dns_name_t *source, dns_name_t *name, - isc_buffer_t *target); +dns_name_downcase(const dns_name_t *source, dns_name_t *name); /*%< * Downcase 'source'. * @@ -949,9 +948,7 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name, *\li If source == name, then * 'source' must not be read-only * - *\li Otherwise, - * 'target' is a valid buffer or 'target' is NULL and - * 'name' has a dedicated buffer. + *\li 'name' has a dedicated buffer. * * Returns: *\li #ISC_R_SUCCESS diff --git a/lib/dns/name.c b/lib/dns/name.c index f05f8a97de..64ba287804 100644 --- a/lib/dns/name.c +++ b/lib/dns/name.c @@ -1229,11 +1229,7 @@ dns_name_tofilenametext(const dns_name_t *name, bool omit_final_dot, } isc_result_t -dns_name_downcase(const dns_name_t *source, dns_name_t *name, - isc_buffer_t *target) { - unsigned char *ndata; - isc_buffer_t buffer; - +dns_name_downcase(const dns_name_t *source, dns_name_t *name) { /* * Downcase 'source'. */ @@ -1243,37 +1239,24 @@ dns_name_downcase(const dns_name_t *source, dns_name_t *name, if (source == name) { REQUIRE(!name->attributes.readonly); - isc_buffer_init(&buffer, source->ndata, source->length); - target = &buffer; - ndata = source->ndata; - } else { - REQUIRE(DNS_NAME_BINDABLE(name)); - REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) || - (target == NULL && ISC_BUFFER_VALID(name->buffer))); - if (target == NULL) { - if (source->length > name->buffer->length) { - return ISC_R_NOSPACE; - } - target = name->buffer; - isc_buffer_clear(name->buffer); - } else if (source->length > target->length - target->used) { - return ISC_R_NOSPACE; - } - ndata = (unsigned char *)target->base + target->used; - name->ndata = ndata; + isc_ascii_lowercopy(name->ndata, source->ndata, source->length); + return ISC_R_SUCCESS; } + REQUIRE(DNS_NAME_BINDABLE(name)); + REQUIRE(ISC_BUFFER_VALID(name->buffer)); + + isc_buffer_clear(name->buffer); + name->ndata = (uint8_t *)name->buffer->base + name->buffer->used; + /* label lengths are < 64 so tolower() does not affect them */ - isc_ascii_lowercopy(ndata, source->ndata, source->length); + isc_ascii_lowercopy(name->ndata, source->ndata, source->length); - if (source != name) { - name->length = source->length; - name->attributes = (struct dns_name_attrs){ - .absolute = source->attributes.absolute - }; - } - - isc_buffer_add(target, name->length); + name->length = source->length; + name->attributes = (struct dns_name_attrs){ + .absolute = source->attributes.absolute + }; + isc_buffer_add(name->buffer, name->length); return ISC_R_SUCCESS; } @@ -1696,12 +1679,6 @@ dns_name_size(const dns_name_t *name) { isc_result_t dns_name_digest(const dns_name_t *name, dns_digestfunc_t digest, void *arg) { - dns_name_t downname; - unsigned char data[256]; - isc_buffer_t buffer; - isc_result_t result; - isc_region_t r; - /* * Send 'name' in DNSSEC canonical form to 'digest'. */ @@ -1709,17 +1686,13 @@ dns_name_digest(const dns_name_t *name, dns_digestfunc_t digest, void *arg) { REQUIRE(DNS_NAME_VALID(name)); REQUIRE(digest != NULL); - dns_name_init(&downname); - - isc_buffer_init(&buffer, data, sizeof(data)); - - result = dns_name_downcase(name, &downname, &buffer); - if (result != ISC_R_SUCCESS) { - return result; - } - - isc_buffer_usedregion(&buffer, &r); + unsigned char ndata[DNS_NAME_MAXWIRE]; + isc_ascii_lowercopy(ndata, name->ndata, name->length); + isc_region_t r = { + .base = ndata, + .length = name->length, + }; return (digest)(arg, &r); } diff --git a/lib/dns/nsec3.c b/lib/dns/nsec3.c index 3c02f0d664..d0d3eadda7 100644 --- a/lib/dns/nsec3.c +++ b/lib/dns/nsec3.c @@ -261,7 +261,7 @@ dns_nsec3_hashname(dns_fixedname_t *result, memset(rethash, 0, NSEC3_MAX_HASH_LENGTH); downcased = dns_fixedname_initname(&fixed); - dns_name_downcase(name, downcased, NULL); + dns_name_downcase(name, downcased); /* hash the node name */ len = isc_iterated_hash(rethash, hashalg, iterations, salt, @@ -2022,7 +2022,7 @@ dns_nsec3_noexistnodata(dns_rdatatype_t type, const dns_name_t *name, * Prepare to compute all the hashes. */ qname = dns_fixedname_initname(&qfixed); - dns_name_downcase(name, qname, NULL); + dns_name_downcase(name, qname); qlabels = dns_name_countlabels(qname); first = true; diff --git a/lib/dns/rpz.c b/lib/dns/rpz.c index 331fe83840..130d833f3f 100644 --- a/lib/dns/rpz.c +++ b/lib/dns/rpz.c @@ -1797,7 +1797,7 @@ update_nodes(dns_rpz_zone_t *rpz, isc_ht_t *newnodes) { goto next; } - dns_name_downcase(name, name, NULL); + dns_name_downcase(name, name); /* Add entry to the new nodes table */ result = isc_ht_add(newnodes, name->ndata, name->length, rpz); diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c index f365ae93ee..828a4addf1 100644 --- a/lib/dns/tsig.c +++ b/lib/dns/tsig.c @@ -235,7 +235,7 @@ dns_tsigkey_createfromkey(const dns_name_t *name, dst_algorithm_t algorithm, tkey->name = dns_fixedname_initname(&tkey->fn); dns_name_copy(name, tkey->name); - (void)dns_name_downcase(tkey->name, tkey->name, NULL); + (void)dns_name_downcase(tkey->name, tkey->name); if (algorithm != DST_ALG_UNKNOWN) { if (dstkey != NULL && dst_key_alg(dstkey) != algorithm) { diff --git a/lib/dns/validator.c b/lib/dns/validator.c index b39fa34c18..fd73251976 100644 --- a/lib/dns/validator.c +++ b/lib/dns/validator.c @@ -300,7 +300,7 @@ trynsec3: found = false; dns_name_init(&nsec3name); dns_fixedname_init(&fixed); - dns_name_downcase(name, dns_fixedname_name(&fixed), NULL); + dns_name_downcase(name, dns_fixedname_name(&fixed)); name = dns_fixedname_name(&fixed); for (result = dns_rdataset_first(rdataset); result == ISC_R_SUCCESS; result = dns_rdataset_next(rdataset)) diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 119de7ed68..98690078b2 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -19093,7 +19093,7 @@ zonemgr_keymgmt_add(dns_zonemgr_t *zmgr, dns_zone_t *zone, REQUIRE(added != NULL && *added == NULL); name = dns_fixedname_initname(&fname); - dns_name_downcase(&zone->origin, name, NULL); + dns_name_downcase(&zone->origin, name); RWLOCK(&mgmt->lock, isc_rwlocktype_write);