]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
ede: handle stale answers
authorTomas Krizek <tomas.krizek@nic.cz>
Mon, 15 Nov 2021 16:35:28 +0000 (17:35 +0100)
committerTomas Krizek <tomas.krizek@nic.cz>
Tue, 21 Dec 2021 14:02:08 +0000 (15:02 +0100)
lib/cache/api.c
lib/resolve.c

index 0cc61582b74ede5f0b30d25045b4cc831dad74bb..6421c66eb2074df3117e3cd24ef075262391e389 100644 (file)
@@ -237,8 +237,13 @@ int32_t get_new_ttl(const struct entry_h *entry, const struct kr_query *qry,
        if (res < 0 && owner && qry && qry->stale_cb) {
                /* Stale-serving decision, delegated to a callback. */
                int res_stale = qry->stale_cb(res, owner, type, qry);
-               if (res_stale >= 0)
+               if (res_stale >= 0) {
+                       VERBOSE_MSG(qry, "responding with stale answer\n");
+                       /* LATER: Perhaps we could use a more specific Stale
+                        * NXDOMAIN Answer code for applicable responses. */
+                       kr_request_set_extended_error(qry->request, KNOT_EDNS_EDE_STALE, NULL);
                        return res_stale;
+               }
        }
        return res;
 }
index 187d7a22aade347678e09568b09d4ac275e36d8e..0e06fb7201c1c4e447d3469e400b19cd883ebe46 100644 (file)
@@ -1629,10 +1629,11 @@ static int ede_priority(int info_code)
        case KNOT_EDNS_EDE_DS_DIGEST:
                return 500;  /* Non-critical DNSSEC issues */
        case KNOT_EDNS_EDE_STALE:
+       case KNOT_EDNS_EDE_STALE_NXD:
+               return 300;  /* Serve-stale answers. */
        case KNOT_EDNS_EDE_INDETERMINATE:
        case KNOT_EDNS_EDE_CACHED_ERR:
        case KNOT_EDNS_EDE_NOT_READY:
-       case KNOT_EDNS_EDE_STALE_NXD:
        case KNOT_EDNS_EDE_NOTAUTH:
        case KNOT_EDNS_EDE_NOTSUP:
        case KNOT_EDNS_EDE_NREACH_AUTH: