]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
add new functions to classify rdata types
authorEvan Hunt <each@isc.org>
Tue, 4 Mar 2025 23:51:49 +0000 (15:51 -0800)
committerEvan Hunt <each@isc.org>
Sat, 15 Mar 2025 00:27:54 +0000 (00:27 +0000)
- dns_rdatatype_ismulti() returns true if a given type can have
  multiple answers: ANY, RRSIG, or SIG.
- dns_rdatatype_issig() returns true for a signature: RRSIG or SIG.
- dns_rdatatype_isaddr() returns true for an address: A or AAAA.
- dns_rdatatype_isalias() returns true for an alias: CNAME or DNAME.

lib/dns/include/dns/rdata.h
lib/dns/rdata.c

index ac255b2028b65af57565af07811d449ed107d94a..5fd4c85ba9119de1f3298c454356ed6047679f5d 100644 (file)
@@ -594,6 +594,31 @@ dns_rdatatype_isknown(dns_rdatatype_t type);
  *
  */
 
+bool
+dns_rdatatype_ismulti(dns_rdatatype_t type);
+/*%<
+ * Return true iff a query for the rdata type can have multiple
+ * unrelated answers in a response: ANY, RRSIG, or SIG.
+ */
+
+bool
+dns_rdatatype_issig(dns_rdatatype_t type);
+/*%<
+ * Return true iff the rdata type is a signature: either RRSIG or SIG.
+ */
+
+bool
+dns_rdatatype_isaddr(dns_rdatatype_t type);
+/*%<
+ * Return true iff the rdata type is an address: either A or AAAA.
+ */
+
+bool
+dns_rdatatype_isalias(dns_rdatatype_t type);
+/*%<
+ * Return true iff the rdata type is an alias: either CNAME or DNAME.
+ */
+
 isc_result_t
 dns_rdata_additionaldata(dns_rdata_t *rdata, const dns_name_t *owner,
                         dns_additionaldatafunc_t add, void *arg);
index d4cfc6c4e7b98c2438fb79c78be5e2283f8077b5..8d33324b3492534ec4125d19cf0ca1f56988928d 100644 (file)
@@ -2461,6 +2461,27 @@ dns_rdatatype_isknown(dns_rdatatype_t type) {
        return false;
 }
 
+bool
+dns_rdatatype_ismulti(dns_rdatatype_t type) {
+       return type == dns_rdatatype_any || type == dns_rdatatype_rrsig ||
+              type == dns_rdatatype_sig;
+}
+
+bool
+dns_rdatatype_issig(dns_rdatatype_t type) {
+       return type == dns_rdatatype_rrsig || type == dns_rdatatype_sig;
+}
+
+bool
+dns_rdatatype_isaddr(dns_rdatatype_t type) {
+       return type == dns_rdatatype_a || type == dns_rdatatype_aaaa;
+}
+
+bool
+dns_rdatatype_isalias(dns_rdatatype_t type) {
+       return type == dns_rdatatype_cname || type == dns_rdatatype_dname;
+}
+
 void
 dns_rdata_exists(dns_rdata_t *rdata, dns_rdatatype_t type) {
        REQUIRE(rdata != NULL);