]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
cache: set EDE when synthesizing answer from aggressive cache
authormenakite <29005531+menakite@users.noreply.github.com>
Thu, 15 Aug 2024 20:01:23 +0000 (22:01 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 6 Sep 2024 10:26:40 +0000 (12:26 +0200)
lib/cache/peek.c

index d12031fc43b0f7a1be9be22640162688d803a4e9..46a4868ce03f99db92962e33ca77937200b62fb8 100644 (file)
@@ -214,6 +214,7 @@ int peek_nosync(kr_layer_t *ctx, knot_pkt_t *pkt)
 
        /* Try the NSEC* parameters in order, until success.
         * Let's not mix different parameters for NSEC* RRs in a single proof. */
+       bool is_synthesized = false;
        for (int i = 0; ;) {
                int32_t log_new_ttl = -123456789; /* visually recognizable value */
                ret = nsec_p_ttl(el[i], qry->timestamp.tv_sec, &log_new_ttl);
@@ -234,6 +235,7 @@ int peek_nosync(kr_layer_t *ctx, knot_pkt_t *pkt)
                /**** 2. and 3. inside */
                ret = peek_encloser(k, &ans, sname_labels,
                                        lowest_rank, qry, cache);
+               is_synthesized = (ret == 0);
                nsec_p_cleanup(&ans.nsec_p);
                if (!ret) break;
                if (ret < 0) return ctx->state;
@@ -316,6 +318,10 @@ int peek_nosync(kr_layer_t *ctx, knot_pkt_t *pkt)
        qf->CACHED = true;
        qf->NO_MINIMIZE = true;
 
+       if (is_synthesized && qry == req->rplan.initial) {
+               kr_request_set_extended_error(req, KNOT_EDNS_EDE_SYNTHESIZED,
+                               "2NEP: synthesized from aggressive cache");
+       }
        return KR_STATE_DONE;
 }