*
*/
-
isc_result_t
dns_rdata_additionaldata(dns_rdata_t *rdata, dns_additionaldatafunc_t add,
void *arg);
*
*/
+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);
/*%<
#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);
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)
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);
}
#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>
#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) {
* 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) {
#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) {
dns_rdataslab_merge
dns_rdataslab_size
dns_rdataslab_subtract
+dns_rdatatype_atcname
dns_rdatatype_atparent
dns_rdatatype_attributes
dns_rdatatype_format
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);
}
dns_rdatatype_cname, 0,
&flag));
if (flag &&
- ! dns_rdatatype_isdnssec(rdata.type))
+ ! dns_rdatatype_atcname(rdata.type))
{
update_log(client, zone,
LOGLEVEL_PROTOCOL,