From: Vladimír Čunát Date: Tue, 17 Feb 2026 09:38:57 +0000 (+0100) Subject: lib/rules: fix KR_RULE_SUB_REDIRECT X-Git-Tag: v6.3.0~5^2 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=19f1b470033393fe01c272bfa69ae6bc2078ea70;p=thirdparty%2Fknot-resolver.git lib/rules: fix KR_RULE_SUB_REDIRECT It's not commonly used, but it caused SERVFAIL. Example name: foo.localhost. Broken since v6.0.13, merge 0f0404f26 in particular. --- diff --git a/NEWS b/NEWS index b0bea8652..5b7727b1c 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Bugfixes -------- - don't loop on reload in case policy-loader can't succeed (#950, !1824) - reduce excessive caching of some uncommon failed answers (!1819) +- /local-data: fix `redirect` rules and *.localhost since v6.0.13 (!1817) Knot Resolver 6.2.0 (2026-02-03) diff --git a/lib/rules/api.c b/lib/rules/api.c index 52e5cb271..d9dbfcf1f 100644 --- a/lib/rules/api.c +++ b/lib/rules/api.c @@ -502,7 +502,7 @@ int rule_local_data_answer(struct kr_query *qry, knot_pkt_t *pkt) } if (ret == kr_error(EAGAIN)) goto shorten; - return ret ? kr_error(ret) : RET_ANSWERED; + return ret; } while (true); } @@ -774,7 +774,7 @@ static int answer_zla_empty(val_zla_type_t type, struct kr_query *qry, knot_pkt_ VERBOSE_MSG(qry, "=> satisfied by local data (%s zone)\n", type == KR_RULE_SUB_EMPTY ? "empty" : "nxdomain"); - return kr_ok(); + return RET_ANSWERED; } static int answer_zla_dname(val_zla_type_t type, struct kr_query *qry, knot_pkt_t *pkt, @@ -847,7 +847,7 @@ static int answer_zla_dname(val_zla_type_t type, struct kr_query *qry, knot_pkt_ qry->flags.NO_MINIMIZE = true; VERBOSE_MSG(qry, "=> satisfied by local data (DNAME-like)\n"); - return kr_ok(); + return RET_ANSWERED; } static int answer_zla_redirect(struct kr_query *qry, knot_pkt_t *pkt, const char *ruleset_name, @@ -912,7 +912,7 @@ nodata: // Want NODATA answer (or NOERROR if it hits apex SOA). qry->flags.NO_MINIMIZE = true; VERBOSE_MSG(qry, "=> satisfied by local data (no data)\n"); - return kr_ok(); + return RET_ANSWERED; } int kr_rule_local_subtree(const knot_dname_t *apex, enum kr_rule_sub_t type,