#endif
/* Remember current bailiwick for NS processing. */
const knot_dname_t *current_zone_cut = qry->zone_cut.name;
+ bool authority_record_exist = false;
/* Update zone cut information. */
for (unsigned i = 0; i < ns->count; ++i) {
const knot_rrset_t *rr = knot_pkt_rr(ns, i);
if (rr->type == KNOT_RRTYPE_NS) {
+ authority_record_exist = true;
int state = update_cut(pkt, rr, req, current_zone_cut);
switch(state) {
case KR_STATE_DONE: result = state; break;
}
if ((qry->flags & QUERY_DNSSEC_WANT) && (result == KR_STATE_CONSUME)) {
- if (knot_wire_get_aa(pkt->wire) == 0 && knot_wire_get_ancount(pkt->wire) == 0) {
- /* Prevent from validating as an autoritative answer */
+ if (knot_wire_get_aa(pkt->wire) == 0 &&
+ knot_wire_get_ancount(pkt->wire) == 0 &&
+ authority_record_exist) {
+ /* Unhelpful referral
+ Prevent from validating as an authoritative answer */
result = KR_STATE_DONE;
}
}