From: Vladimír Čunát Date: Fri, 29 Aug 2025 06:27:51 +0000 (+0200) Subject: on FORMERR, retry without EDNS even if EDNS was in that reply X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fformerr-retry;p=thirdparty%2Fknot-resolver.git on FORMERR, retry without EDNS even if EDNS was in that reply --- diff --git a/lib/selection.c b/lib/selection.c index 6ba549cd3..3770c0e54 100644 --- a/lib/selection.c +++ b/lib/selection.c @@ -657,6 +657,9 @@ void error(struct kr_query *qry, struct address_state *addr_state, qry->server_selection.local_state->timeouts++; server_timeout(qry, transport, addr_state, &qry->request->ctx->cache); break; + case KR_SELECTION_FORMERR_EDNS: + /* It's quite possible that the server does not support EDNS, + * but violated this MUST. It won't hurt to try. */ case KR_SELECTION_FORMERR: if (qry->flags.NO_EDNS) { addr_state->broken = true; @@ -664,9 +667,6 @@ void error(struct kr_query *qry, struct address_state *addr_state, qry->flags.NO_EDNS = true; } break; - case KR_SELECTION_FORMERR_EDNS: - addr_state->broken = true; - break; case KR_SELECTION_MISMATCHED: if (qry->flags.NO_0X20 && qry->flags.TCP) { addr_state->broken = true;