]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
validate: avoid keeping KR_RANK_MISSING
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 22 May 2017 13:13:19 +0000 (15:13 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 22 May 2017 13:32:39 +0000 (15:32 +0200)
If a sub-query transitions the state to QUERY_DNSSEC_INSECURE,
we didn't set correct rank.  This lead to caching with _MISSING rank
which is too low to be utilized on re-queries.  Example: nix.mx query.

NEWS
lib/layer/validate.c

diff --git a/NEWS b/NEWS
index faa9a05acd862e7399ad7c0b75d56a513d351969..75c0ca512e2cf0478646c01684d88bbfe833e0de 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,9 @@ Improvements
 - command line: specify ports via @ but still support # for compatibility
 - policy: recognize 100.64.0.0/10 as local addresses
 
+Bugfixes
+--------
+- validate: fix insufficient caching for some cases (relatively rare)
 
 Knot Resolver 1.2.6 (2017-04-24)
 ================================
index 9b9b43d24d71976a69e1f8fa27828294784f30c4..040e91b7a2bd8cc811fcd846136359839a3910cb 100644 (file)
@@ -585,7 +585,8 @@ static int check_signer(kr_layer_t *ctx, knot_pkt_t *pkt)
        return KR_STATE_DONE;
 }
 
-static void rank_records(kr_layer_t *ctx, uint8_t rank_to_set)
+/** Change ranks of RRs from this single iteration: _INITIAL or _MISSING -> rank_to_set. */
+static void rank_records(kr_layer_t *ctx, enum kr_rank rank_to_set)
 {
        struct kr_request *req     = ctx->req;
        struct kr_query *qry       = req->current_query;
@@ -597,7 +598,8 @@ static void rank_records(kr_layer_t *ctx, uint8_t rank_to_set)
                        if (entry->qry_uid != qry->uid) {
                                continue;
                        }
-                       if (kr_rank_test(entry->rank, KR_RANK_INITIAL)) {
+                       if (kr_rank_test(entry->rank, KR_RANK_INITIAL)
+                           || kr_rank_test(entry->rank, KR_RANK_MISSING)) {
                                kr_rank_set(&entry->rank, rank_to_set);
                        }
                }