* \li 'rdataset1' is a valid rdataset.
* \li 'rdataset2' is a valid rdataset.
*/
+
+/*%
+ * Returns true if the rdataset is of type 'type', or type RRSIG
+ * and covers 'type'.
+ */
+static inline bool
+dns_rdataset_matchestype(const dns_rdataset_t *rdataset,
+ const dns_rdatatype_t type) {
+ REQUIRE(DNS_RDATASET_VALID(rdataset));
+
+ return rdataset->type == type ||
+ (rdataset->type == dns_rdatatype_rrsig &&
+ rdataset->covers == type);
+}
+
+/*%
+ * Returns true if the rdataset is of type 'type', or type RRSIG
+ * and covers 'type'.
+ */
+static inline bool
+dns_rdataset_issigtype(const dns_rdataset_t *rdataset,
+ const dns_rdatatype_t type) {
+ REQUIRE(DNS_RDATASET_VALID(rdataset));
+
+ return rdataset->type == dns_rdatatype_rrsig &&
+ rdataset->covers == type;
+}
}
ISC_LIST_FOREACH (name->list, s, link) {
- if (s->type == dns_rdatatype_rrsig &&
- s->covers == rdataset->type)
+ if (dns_rdataset_issigtype(sigrdataset,
+ rdataset->type))
{
sigrdataset = s;
break;
}
}
+
if (sigrdataset == NULL ||
sigrdataset->trust != dns_trust_secure)
{
* Find the SIG for this rdataset, if we have it.
*/
ISC_LIST_FOREACH (name->list, sig, link) {
- if (sig->type == dns_rdatatype_rrsig && sig->covers == type) {
+ if (dns_rdataset_issigtype(sig, type)) {
sigrdataset = sig;
break;
}
if (noqname != NULL) {
ISC_LIST_FOREACH (noqname->list, sig, link) {
- if (sig->type == dns_rdatatype_rrsig &&
- sig->covers == found)
- {
+ if (dns_rdataset_issigtype(sig, found)) {
*noqnamep = noqname;
break;
}
* Find the RRSIG for this rdataset, if we have it.
*/
ISC_LIST_FOREACH (name->list, sig, link) {
- if (sig->type == dns_rdatatype_rrsig &&
- sig->covers == rdataset->type)
- {
+ if (dns_rdataset_issigtype(sig, rdataset->type)) {
sigrdataset = sig;
break;
}
continue;
}
+ /*
+ * Ignore unrelated non-answer rdatasets that are
+ * missing signatures.
+ */
if (sigrdataset == NULL && need_validation &&
!ANSWER(rdataset))
{
- /*
- * Ignore unrelated non-answer
- * rdatasets that are missing
- * signatures.
- */
continue;
}
}
}
if (rdataset->trust == dns_trust_glue &&
- (rdataset->type == dns_rdatatype_ns ||
- (rdataset->type == dns_rdatatype_rrsig &&
- rdataset->covers == dns_rdatatype_ns)))
+ dns_rdataset_matchestype(rdataset,
+ dns_rdatatype_ns))
{
/*
* If the trust level is
return ISC_R_COMPLETE;
}
- if (sigrdataset->type != dns_rdatatype_rrsig ||
- sigrdataset->covers != rctx->type)
- {
+ if (!dns_rdataset_issigtype(sigrdataset, rctx->type)) {
continue;
}
* nothing else.
*/
ISC_LIST_FOREACH (name->list, rdataset, link) {
- if (rdataset->type == dns_rdatatype_ns ||
- (rdataset->type == dns_rdatatype_rrsig &&
- rdataset->covers == dns_rdatatype_ns))
+ if (dns_rdataset_matchestype(rdataset,
+ dns_rdatatype_ns))
{
name->attributes.cache = true;
rdataset->attributes.cache = true;