Commit d2f0dec608 for bind
commit d2f0dec6087e1688344a11b58e8fe855916abee8
Author: Alessio Podda <alessio@isc.org>
Date: Wed Jul 8 14:53:05 2026 +0200
Use _Generic rdata and rdataset name arguments
Accept generic owner name arguments in the rdata check helpers and
rdataset owner processing helpers. This lets linked-name callers avoid
explicit unwrapping while keeping the implementations typed as
dns_name_t.
diff --git a/lib/dns/include/dns/rdata.h b/lib/dns/include/dns/rdata.h
index b351a5c4b8..4faf27e337 100644
--- a/lib/dns/include/dns/rdata.h
+++ b/lib/dns/include/dns/rdata.h
@@ -832,9 +832,11 @@ dns_rdata_covers(dns_rdata_t *rdata);
*\li The type covered.
*/
+#define dns_rdata_checkowner(name, rdclass, type, wildcard) \
+ dns__rdata_checkowner(DNS_NAME__RO_ARG(name), rdclass, type, wildcard)
bool
-dns_rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
- dns_rdatatype_t type, bool wildcard);
+dns__rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
+ dns_rdatatype_t type, bool wildcard);
/*
* Returns whether this is a valid ownername for this <type,class>.
* If wildcard is true allow the first label to be a wildcard if
@@ -844,9 +846,11 @@ dns_rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
* 'name' is a valid name.
*/
+#define dns_rdata_checknames(rdata, owner, bad) \
+ dns__rdata_checknames(rdata, DNS_NAME__RO_ARG(owner), bad)
bool
-dns_rdata_checknames(dns_rdata_t *rdata, const dns_name_t *owner,
- dns_name_t *bad);
+dns__rdata_checknames(dns_rdata_t *rdata, const dns_name_t *owner,
+ dns_name_t *bad);
/*
* Returns whether 'rdata' contains valid domain names. The checks are
* sensitive to the owner name.
diff --git a/lib/dns/include/dns/rdataset.h b/lib/dns/include/dns/rdataset.h
index d9b0643658..2cd68d06c8 100644
--- a/lib/dns/include/dns/rdataset.h
+++ b/lib/dns/include/dns/rdataset.h
@@ -50,6 +50,7 @@
#include <isc/magic.h>
#include <isc/stdtime.h>
+#include <dns/name.h>
#include <dns/rdataslab.h>
#include <dns/rdatastruct.h>
#include <dns/rdatavec.h>
@@ -492,11 +493,14 @@ dns_rdataset_towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
* dns_name_towire().
*/
+#define dns_rdataset_additionaldata(rdataset, owner_name, add, arg, limit) \
+ dns__rdataset_additionaldata(rdataset, DNS_NAME__RO_ARG(owner_name), \
+ add, arg, limit)
isc_result_t
-dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
- const dns_name_t *owner_name,
- dns_additionaldatafunc_t add, void *arg,
- size_t limit);
+dns__rdataset_additionaldata(dns_rdataset_t *rdataset,
+ const dns_name_t *owner_name,
+ dns_additionaldatafunc_t add, void *arg,
+ size_t limit);
/*%<
* For each rdata in rdataset, call 'add' for each name and type in the
* rdata which is subject to additional section processing.
@@ -591,8 +595,10 @@ dns_rdataset_clearprefetch(dns_rdataset_t *rdataset);
* It has no function in other databases.
*/
+#define dns_rdataset_setownercase(rdataset, name) \
+ dns__rdataset_setownercase(rdataset, DNS_NAME__RO_ARG(name))
void
-dns_rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name);
+dns__rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name);
/*%<
* Store the casing of 'name', the owner name of 'rdataset', into
* a bitfield so that the name can be capitalized the same when when
diff --git a/lib/dns/message.c b/lib/dns/message.c
index 1fae66c878..50cabf3b59 100644
--- a/lib/dns/message.c
+++ b/lib/dns/message.c
@@ -1272,8 +1272,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
* Check the ownername of NSEC3 records
*/
if (rdtype == dns_rdatatype_nsec3 &&
- !dns_rdata_checkowner(dns_linkedname_name(name),
- msg->rdclass, rdtype, false))
+ !dns_rdata_checkowner(name, msg->rdclass, rdtype, false))
{
CLEANUP(DNS_R_BADOWNERNAME);
}
@@ -1333,7 +1332,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
dns_message_gettemprdataset(msg, &rdataset);
dns_rdatalist_tordataset(rdatalist, rdataset);
- dns_rdataset_setownercase(rdataset, dns_linkedname_name(name));
+ dns_rdataset_setownercase(rdataset, name);
rdatalist = NULL;
/*
diff --git a/lib/dns/rdata.c b/lib/dns/rdata.c
index cf8beb075f..3d7ede50c7 100644
--- a/lib/dns/rdata.c
+++ b/lib/dns/rdata.c
@@ -1442,8 +1442,8 @@ dns_rdata_digest(dns_rdata_t *rdata, dns_digestfunc_t digest, void *arg) {
}
bool
-dns_rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
- dns_rdatatype_t type, bool wildcard) {
+dns__rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
+ dns_rdatatype_t type, bool wildcard) {
bool result;
CHECKOWNERSWITCH
@@ -1451,8 +1451,8 @@ dns_rdata_checkowner(const dns_name_t *name, dns_rdataclass_t rdclass,
}
bool
-dns_rdata_checknames(dns_rdata_t *rdata, const dns_name_t *owner,
- dns_name_t *bad) {
+dns__rdata_checknames(dns_rdata_t *rdata, const dns_name_t *owner,
+ dns_name_t *bad) {
bool result;
CHECKNAMESSWITCH
diff --git a/lib/dns/rdataset.c b/lib/dns/rdataset.c
index 94680f1e48..49296060f6 100644
--- a/lib/dns/rdataset.c
+++ b/lib/dns/rdataset.c
@@ -432,10 +432,10 @@ rollback:
}
isc_result_t
-dns_rdataset_additionaldata(dns_rdataset_t *rdataset,
- const dns_name_t *owner_name,
- dns_additionaldatafunc_t add, void *arg,
- size_t limit) {
+dns__rdataset_additionaldata(dns_rdataset_t *rdataset,
+ const dns_name_t *owner_name,
+ dns_additionaldatafunc_t add, void *arg,
+ size_t limit) {
/*
* For each rdata in rdataset, call 'add' for each name and type in the
* rdata which is subject to additional section processing.
@@ -515,7 +515,7 @@ dns_rdataset_clearprefetch(dns_rdataset_t *rdataset) {
}
void
-dns_rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
+dns__rdataset_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
REQUIRE(DNS_RDATASET_VALID(rdataset));
REQUIRE(rdataset->methods != NULL);
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
index 6618b1815c..d75de9645a 100644
--- a/lib/dns/resolver.c
+++ b/lib/dns/resolver.c
@@ -7403,12 +7403,9 @@ checknamessection(dns_message_t *message, dns_section_t section) {
DNS_RDATASET_FOREACH(rdataset) {
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdataset_current(rdataset, &rdata);
- if (!dns_rdata_checkowner(
- dns_linkedname_name(name),
- rdata.rdclass, rdata.type, false) ||
- !dns_rdata_checknames(
- &rdata, dns_linkedname_name(name),
- NULL))
+ if (!dns_rdata_checkowner(name, rdata.rdclass,
+ rdata.type, false) ||
+ !dns_rdata_checknames(&rdata, name, NULL))
{
rdataset->attributes.checknames = true;
}
@@ -8928,9 +8925,9 @@ rctx_answer_match(respctx_t *rctx) {
rctx->ardataset->attributes.answer = true;
rctx->ardataset->attributes.cache = true;
rctx->ardataset->trust = rctx->trust;
- (void)dns_rdataset_additionaldata(
- rctx->ardataset, dns_linkedname_name(rctx->aname),
- check_related, rctx, DNS_RDATASET_MAXADDITIONAL);
+ (void)dns_rdataset_additionaldata(rctx->ardataset, rctx->aname,
+ check_related, rctx,
+ DNS_RDATASET_MAXADDITIONAL);
ISC_LIST_FOREACH(rctx->aname->list, sigrdataset, link) {
if (!validinanswer(sigrdataset, fctx)) {
@@ -9109,9 +9106,8 @@ rctx_authority_positive(respctx_t *rctx) {
* related to this rdataset.
*/
(void)dns_rdataset_additionaldata(
- rdataset,
- dns_linkedname_name(name),
- check_related, rctx,
+ rdataset, name, check_related,
+ rctx,
DNS_RDATASET_MAXADDITIONAL);
return;
}
@@ -9644,8 +9640,7 @@ again:
if (CHASE(rdataset)) {
rdataset->attributes.chase = false;
(void)dns_rdataset_additionaldata(
- rdataset, dns_linkedname_name(name),
- check_related, rctx,
+ rdataset, name, check_related, rctx,
DNS_RDATASET_MAXADDITIONAL);
rescan = true;
}