return KR_STATE_CONSUME;
}
#else
+
/* Work around servers sending back CNAME with different delegation and no AA. */
const knot_pktsection_t *an = knot_pkt_section(pkt, KNOT_ANSWER);
- if (an->count > 0 && ns->count > 0) {
+ if (!knot_wire_get_aa(pkt->wire) && an->count > 0 && ns->count > 0) {
const knot_rrset_t *rr = knot_pkt_rr(an, 0);
if (rr->type == KNOT_RRTYPE_CNAME) {
return KR_STATE_CONSUME;
ranked_rr_array_entry_t *invalid_entry = NULL;
for (size_t i = 0; i < arr->len; ++i) {
ranked_rr_array_entry_t *entry = arr->at[i];
- if (entry->yielded) {
+ if (entry->yielded || entry->qry_uid != qry->uid) {
continue;
}
if (entry->rank == KR_VLDRANK_MISMATCH) {