} else {
kr_rank_set(&entry->rank, KR_RANK_BOGUS);
vctx->err_cnt += 1;
- req->extended_error.info_code = KNOT_EDNS_EDE_BOGUS;
- req->extended_error.extra_text = "bogus signatures";
+ if (vctx->rrs_counters.expired > 0)
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_SIG_EXPIRED, NULL);
+ else if (vctx->rrs_counters.notyet > 0)
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_SIG_NOTYET, NULL);
+ else
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_BOGUS, NULL);
log_bogus_rrsig(vctx, rr, "bogus signatures");
}
}
}
}
if (sig_index < 0) {
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_RRSIG_MISS, NULL);
return kr_error(ENOENT);
}
const knot_rdataset_t *sig_rds = &req->answ_selected.at[sig_index]->rr->rrs;
log_bogus_rrsig(&vctx, qry->zone_cut.key, "bogus key");
knot_rrset_free(qry->zone_cut.key, qry->zone_cut.pool);
qry->zone_cut.key = NULL;
+ if (vctx.rrs_counters.expired > 0)
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_SIG_EXPIRED, NULL);
+ else if (vctx.rrs_counters.notyet > 0)
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_SIG_NOTYET, NULL);
+ else
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_BOGUS, NULL);
return ret;
}
return KR_STATE_YIELD;
} else if (ret != 0) {
VERBOSE_MSG(qry, "<= bad keys, broken trust chain\n");
- req->extended_error.info_code = KNOT_EDNS_EDE_BOGUS;
- req->extended_error.extra_text = "bad keys, broken trust chain";
+ /* EDE code already set in validate_keyset() */
qry->flags.DNSSEC_BOGUS = true;
return KR_STATE_FAIL;
}
switch (req->extended_error.info_code) {
case KNOT_EDNS_EDE_BOGUS:
case KNOT_EDNS_EDE_NSEC_MISS:
- kr_request_set_extended_error(req, KNOT_EDNS_EDE_NONE, NULL);
- break;
+ case KNOT_EDNS_EDE_RRSIG_MISS:
case KNOT_EDNS_EDE_SIG_EXPIRED:
case KNOT_EDNS_EDE_SIG_NOTYET:
+ kr_request_set_extended_error(req, KNOT_EDNS_EDE_NONE, NULL);
+ break;
case KNOT_EDNS_EDE_DNSKEY_MISS:
- case KNOT_EDNS_EDE_RRSIG_MISS:
case KNOT_EDNS_EDE_DNSKEY_BIT:
kr_assert(false); /* These EDE codes aren't used. */
break;
- default: break;
+ default: break; /* Remaining codes don't indicate hard DNSSEC failure. */
}
}
return ret;