create dns_rdatatype_atcname to split records that can appear along side CNAME from DNSSEC; dns_rdatatype_iszonecutauth allowed too many types

This commit is contained in:
Mark Andrews 2018-11-26 10:57:02 +11:00
parent d78d405d1a
commit f4ceb12b69
8 changed files with 39 additions and 10 deletions

View 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);

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

View 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>

View 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) {

View 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) {

View 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) {

View 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

View 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,