]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/rules: fix KR_RULE_SUB_REDIRECT docs-subtree-redi-zfe48g/deployments/8910
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 17 Feb 2026 09:38:57 +0000 (10:38 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 22 Apr 2026 07:36:56 +0000 (09:36 +0200)
It's not commonly used, but it caused SERVFAIL.
Example name: foo.localhost.
Broken since v6.0.13, merge 0f0404f26 in particular.

NEWS
lib/rules/api.c

diff --git a/NEWS b/NEWS
index b0bea8652925be12dd745b696a97744c7609b6a5..5b7727b1c9de6873c7ef6c6876ac0fa2a459bc04 100644 (file)
--- 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)
index 52e5cb2716b6adc270dae6d7ce7578b48191cbef..d9dbfcf1f7860a6dfc6abae8f3a3f830bf7969d4 100644 (file)
@@ -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,