mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
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:
parent
d78d405d1a
commit
f4ceb12b69
8 changed files with 39 additions and 10 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue