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;
 			}