]> 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 01:48:55 +0000 (12:48 +1100)
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
lib/ns/update.c

index a42e5bf26360745222b3aa180a3f5137dc010d85..81ecce2bfc65cef2238ecbc888e6664eb602dd63 100644 (file)
@@ -590,7 +590,6 @@ dns_rdatatype_isknown(dns_rdatatype_t type);
  *
  */
 
-
 isc_result_t
 dns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,
                         void *arg);
@@ -683,6 +682,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);
 /*%<
@@ -711,10 +720,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 ea5000fab299add5bb55eef55a66d2184fd308f1..ebd608ae9b5665d1a808b434dbed9d24e66145c7 100644 (file)
@@ -2283,6 +2283,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)
@@ -2310,10 +2318,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 1927ee46b8cdd947b96e10872a0d5124b7115b10..7be66d1f008e7600e252aaa6302d7f11f2433430 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/md.h>
 
index 34c0cea0177983f0a9c77427b7645a82990565ef..44cbdf3a5e40c693fa6418b43f100325f300042f 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 9642fa48cc84f21e938f10f7c80a680bfd26c9e2..72a93d225fc754fd9709da5135efb028430fced8 100644 (file)
@@ -826,6 +826,7 @@ dns_rdataslab_fromrdataset
 dns_rdataslab_merge
 dns_rdataslab_size
 dns_rdataslab_subtract
+dns_rdatatype_atcname
 dns_rdatatype_atparent
 dns_rdatatype_attributes
 dns_rdatatype_format
index a387dfd11d82f257f05f169e9b78341564c5b522..2a3c7d244fa9f439929ccace3806e981aee242a1 100644 (file)
@@ -798,8 +798,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);
 }
 
@@ -2852,7 +2854,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,