From: Marek VavruĊĦa Date: Sat, 27 Jun 2015 15:33:40 +0000 (+0200) Subject: layer/rrcache: small ttl check before merging X-Git-Tag: v1.0.0-beta1~105 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1059c6ce33160f84f123c72f6f83836a652d89ac;p=thirdparty%2Fknot-resolver.git layer/rrcache: small ttl check before merging --- diff --git a/lib/layer/rrcache.c b/lib/layer/rrcache.c index f5684be71..1a6336506 100644 --- a/lib/layer/rrcache.c +++ b/lib/layer/rrcache.c @@ -119,6 +119,9 @@ static int commit_rr(const char *key, void *val, void *data) { knot_rrset_t *rr = val; struct stash_baton *baton = data; + if (knot_rrset_ttl(rr) < KR_TTL_GRACE) { + return kr_ok(); /* Ignore cache busters */ + } /* Check if already cached */ /** @todo This should check if less trusted data is in the cache, for that the cache would need to trace data trust level. @@ -141,15 +144,6 @@ static int stash_commit(map_t *stash, unsigned timestamp, struct kr_cache_txn *t return map_walk(stash, &commit_rr, &baton); } -static int merge_rr(knot_rrset_t *cache_rr, const knot_rrset_t *rr, mm_ctx_t *pool) -{ - if (knot_rrset_ttl(rr) < KR_TTL_GRACE) { - return KNOT_EINVAL; /* Cache busters */ - } - - return knot_rdataset_merge(&cache_rr->rrs, &rr->rrs, pool); -} - static int stash_add(map_t *stash, const knot_rrset_t *rr, mm_ctx_t *pool) { /* Stash key = {[1-255] owner, [1-5] type, [1] \x00 } */ @@ -174,7 +168,7 @@ static int stash_add(map_t *stash, const knot_rrset_t *rr, mm_ctx_t *pool) return map_set(stash, key, stashed); } /* Merge rdataset */ - return merge_rr(stashed, rr, pool); + return knot_rdataset_merge(&stashed->rrs, &rr->rrs, pool); } static void stash_glue(map_t *stash, knot_pkt_t *pkt, const knot_dname_t *ns_name, mm_ctx_t *pool)