]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
on FORMERR, retry without EDNS even if EDNS was in that reply docs-formerr-retr-qk0zn7/deployments/7520 formerr-retry 1737/head
authorVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 29 Aug 2025 06:27:51 +0000 (08:27 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 2 Sep 2025 08:01:35 +0000 (10:01 +0200)
lib/selection.c

index 6ba549cd3772fc703e37ffcd938d03284317d9aa..3770c0e54433eea4b289a3674f2bc9a77cfb8867 100644 (file)
@@ -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;