]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
create dns_rdatatype_atcname to split records that can appear along side CNAME from...
authorMark Andrews <marka@isc.org>
Sun, 25 Nov 2018 23:57:02 +0000 (10:57 +1100)
committerMark Andrews <marka@isc.org>
Fri, 14 Dec 2018 03:29:46 +0000 (14:29 +1100)
(cherry picked from commit f4ceb12b691682a4bd46345f9a2b90ed4e298808)

bin/named/update.c
lib/dns/include/dns/rdata.h
lib/dns/rdata.c
lib/dns/rdata/generic/ds_43.c
lib/dns/rdata/generic/key_25.c
lib/dns/rdata/generic/nsec_47.c
lib/dns/rdata/generic/rrsig_46.c
lib/dns/win32/libdns.def.in

index 1a2f45cb4f48b4292da629a9170bde0ca99ba9bd..4ed0b6b8719c11456247cdf40efad7d49b94f372 100644 (file)
@@ -796,8 +796,10 @@ static isc_result_t
 cname_compatibility_action(void *data, dns_rdataset_t *rrset) {
        UNUSED(data);
        if (rrset->type != dns_rdatatype_cname &&
-           ! dns_rdatatype_isdnssec(rrset->type))
+           ! dns_rdatatype_atcname(rrset->type))
+       {
                return (ISC_R_EXISTS);
+       }
        return (ISC_R_SUCCESS);
 }
 
@@ -2844,7 +2846,7 @@ update_action(isc_task_t *task, isc_event_t *event) {
                                                   dns_rdatatype_cname, 0,
                                                   &flag));
                                if (flag &&
-                                   ! dns_rdatatype_isdnssec(rdata.type))
+                                   ! dns_rdatatype_atcname(rdata.type))
                                {
                                        update_log(client, zone,
                                                   LOGLEVEL_PROTOCOL,
index 25220cea7013320ae15ff30723c60b3ea7fa72ee..0e2fbf5da54f971ca13d78bb867f242722fc6c92 100644 (file)
@@ -586,7 +586,6 @@ dns_rdatatype_isknown(dns_rdatatype_t type);
  *
  */
 
-
 isc_result_t
 dns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,
                         void *arg);
@@ -679,6 +678,16 @@ dns_rdatatype_atparent(dns_rdatatype_t type);
  *
  */
 
+bool
+dns_rdatatype_atcname(dns_rdatatype_t type);
+/*%<
+ * Return true iff rdata of type 'type' can appear beside a cname.
+ *
+ * Requires:
+ * \li 'type' is a valid rdata type.
+ *
+ */
+
 unsigned int
 dns_rdatatype_attributes(dns_rdatatype_t rdtype);
 /*%<
@@ -707,10 +716,12 @@ dns_rdatatype_attributes(dns_rdatatype_t rdtype);
 #define DNS_RDATATYPEATTR_UNKNOWN              0x00000040U
 /*% Is META, and can only be in a question section */
 #define DNS_RDATATYPEATTR_QUESTIONONLY         0x00000080U
-/*% is META, and can NOT be in a question section */
+/*% Is META, and can NOT be in a question section */
 #define DNS_RDATATYPEATTR_NOTQUESTION          0x00000100U
 /*% Is present at zone cuts in the parent, not the child */
 #define DNS_RDATATYPEATTR_ATPARENT             0x00000200U
+/*% Can exist along side a CNAME */
+#define DNS_RDATATYPEATTR_ATCNAME              0x00000400U
 
 dns_rdatatype_t
 dns_rdata_covers(dns_rdata_t *rdata);
index 2286b1b0103201fdeebca68a821758570630ea77..9d0adfda914affd8c726c352a40e9069bdadf78d 100644 (file)
@@ -2299,6 +2299,14 @@ dns_rdatatype_questiononly(dns_rdatatype_t type) {
        return (false);
 }
 
+bool
+dns_rdatatype_atcname(dns_rdatatype_t type) {
+       if ((dns_rdatatype_attributes(type) & DNS_RDATATYPEATTR_ATCNAME) != 0) {
+               return (true);
+       }
+       return (false);
+}
+
 bool
 dns_rdatatype_atparent(dns_rdatatype_t type) {
        if ((dns_rdatatype_attributes(type) & DNS_RDATATYPEATTR_ATPARENT) != 0)
@@ -2326,10 +2334,11 @@ dns_rdatatype_isdnssec(dns_rdatatype_t type) {
 
 bool
 dns_rdatatype_iszonecutauth(dns_rdatatype_t type) {
-       if ((dns_rdatatype_attributes(type)
-            & (DNS_RDATATYPEATTR_DNSSEC | DNS_RDATATYPEATTR_ZONECUTAUTH))
+       if ((dns_rdatatype_attributes(type) & DNS_RDATATYPEATTR_ZONECUTAUTH)
            != 0)
+       {
                return (true);
+       }
        return (false);
 }
 
index d25c1a65f1ad482cb2fb20102e009f438469bc25..f86bad7bd41ec346ed7878e0cf486398f7646f9d 100644 (file)
@@ -16,7 +16,8 @@
 #define RDATA_GENERIC_DS_43_C
 
 #define RRTYPE_DS_ATTRIBUTES \
-       (DNS_RDATATYPEATTR_DNSSEC|DNS_RDATATYPEATTR_ATPARENT)
+       ( DNS_RDATATYPEATTR_DNSSEC | DNS_RDATATYPEATTR_ZONECUTAUTH | \
+         DNS_RDATATYPEATTR_ATPARENT )
 
 #include <isc/sha1.h>
 #include <isc/sha2.h>
index 6dd2eab0f2303b60a006a8b5ec75bdc8d492c2d3..edb02177b03b8a068113cf9c5cd223a92ea31af0 100644 (file)
@@ -16,7 +16,8 @@
 
 #include <dst/dst.h>
 
-#define RRTYPE_KEY_ATTRIBUTES (0)
+#define RRTYPE_KEY_ATTRIBUTES \
+       ( DNS_RDATATYPEATTR_ATCNAME | DNS_RDATATYPEATTR_ZONECUTAUTH )
 
 static inline isc_result_t
 generic_fromtext_key(ARGS_FROMTEXT) {
index 05e575b62cd6eea842993535c47da3523259709c..0ba688cec01c40ca3a456574d9a6e6bd417f011f 100644 (file)
@@ -18,7 +18,9 @@
  * The attributes do not include DNS_RDATATYPEATTR_SINGLETON
  * because we must be able to handle a parent/child NSEC pair.
  */
-#define RRTYPE_NSEC_ATTRIBUTES (DNS_RDATATYPEATTR_DNSSEC)
+#define RRTYPE_NSEC_ATTRIBUTES \
+       ( DNS_RDATATYPEATTR_DNSSEC | DNS_RDATATYPEATTR_ZONECUTAUTH | \
+         DNS_RDATATYPEATTR_ATCNAME )
 
 static inline isc_result_t
 fromtext_nsec(ARGS_FROMTEXT) {
index fb945ff1eddce3bedf69c9ca3ae1897f73965a37..8bc8d21f3f87000089e8cabc0cf14ac7667bd861 100644 (file)
@@ -14,7 +14,9 @@
 #ifndef RDATA_GENERIC_RRSIG_46_C
 #define RDATA_GENERIC_RRSIG_46_C
 
-#define RRTYPE_RRSIG_ATTRIBUTES (DNS_RDATATYPEATTR_DNSSEC)
+#define RRTYPE_RRSIG_ATTRIBUTES \
+       ( DNS_RDATATYPEATTR_DNSSEC | DNS_RDATATYPEATTR_ZONECUTAUTH | \
+         DNS_RDATATYPEATTR_ATCNAME )
 
 static inline isc_result_t
 fromtext_rrsig(ARGS_FROMTEXT) {
index 62a156ce64c9f543e22d9979008975c64238e300..5c45d5920cd739bed2219b7076f80999ee355a44 100644 (file)
@@ -865,6 +865,7 @@ dns_rdataslab_merge
 dns_rdataslab_size
 dns_rdataslab_subtract
 dns_rdataslab_tordataset
+dns_rdatatype_atcname
 dns_rdatatype_atparent
 dns_rdatatype_attributes
 dns_rdatatype_format