From: Štěpán Balážik Date: Thu, 4 Feb 2021 16:20:36 +0000 (+0100) Subject: iterate.c: retain process_authority workaround X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b2c609a2bcc00aba19e0b1611a4df0699669c3d;p=thirdparty%2Fknot-resolver.git iterate.c: retain process_authority workaround Note: there are also Deckard tests relying on this. --- diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index f0dbd8764..8ea7b7f4c 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -388,15 +388,12 @@ static int process_authority(knot_pkt_t *pkt, struct kr_request *req) return result; } + /* One could _CONSUME if pkt has AA flag set here, but many authoritative + * servers are broken, so we employ several workarounds. */ + const knot_pktsection_t *ns = knot_pkt_section(pkt, KNOT_AUTHORITY); const knot_pktsection_t *an = knot_pkt_section(pkt, KNOT_ANSWER); -#ifdef STRICT_MODE - /* AA, terminate resolution chain. */ - if (knot_wire_get_aa(pkt->wire)) { - return KR_STATE_CONSUME; - } -#else /* Work around servers sending back CNAME with different delegation and no AA. */ if (an->count > 0 && ns->count > 0) { const knot_rrset_t *rr = knot_pkt_rr(an, 0); @@ -411,7 +408,7 @@ static int process_authority(knot_pkt_t *pkt, struct kr_request *req) return KR_STATE_CONSUME; } } -#endif + /* Remember current bailiwick for NS processing. */ const knot_dname_t *current_zone_cut = qry->zone_cut.name; bool ns_record_exists = false;