From: Marek VavruĊĦa Date: Thu, 12 Apr 2018 08:32:34 +0000 (-0700) Subject: iterate: do not treat REFUSED as soft fail with retries X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1430099f6d005f741914eb32adba60ec4850834e;p=thirdparty%2Fknot-resolver.git iterate: do not treat REFUSED as soft fail with retries REFUSED means the NS isn't authoritative for given zone, so it shouldn't be treated like SERVFAIL. This fixes when a server is not authoritative for given zone (failed transfer, bad delegation), and the resolver enters into a retry loop and eventually runs out of time, instead of trying different servers. --- diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index e094dbb61..32aa0e172 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -1056,7 +1056,6 @@ static int resolve(kr_layer_t *ctx, knot_pkt_t *pkt) case KNOT_RCODE_NOERROR: case KNOT_RCODE_NXDOMAIN: break; /* OK */ - case KNOT_RCODE_REFUSED: case KNOT_RCODE_SERVFAIL: { if (query->flags.STUB) { /* Pass through in stub mode */ @@ -1074,6 +1073,7 @@ static int resolve(kr_layer_t *ctx, knot_pkt_t *pkt) return KR_STATE_CONSUME; } } + case KNOT_RCODE_REFUSED: case KNOT_RCODE_FORMERR: VERBOSE_MSG("<= rcode: %s\n", rcode ? rcode->name : "??"); return resolve_badmsg(pkt, req, query);