]> 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/7848 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>
Thu, 30 Oct 2025 06:11:43 +0000 (07:11 +0100)
lib/selection.c

index ed8ac5a219b8981bea5052c9d838789431e02eed..e345aeed3f0e90e32f1d38c04bc557f69f5dcb91 100644 (file)
@@ -657,6 +657,10 @@ 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. */
+               kr_log_notice(DEVEL, "XXX _FORMERR_EDNS: NO_EDNS = %d\n", (int)qry->flags.NO_EDNS);
        case KR_SELECTION_FORMERR:
                if (qry->flags.NO_EDNS) {
                        addr_state->broken = true;
@@ -664,9 +668,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;