From: Lennart Poettering Date: Mon, 21 Dec 2015 15:24:58 +0000 (+0100) Subject: resolved: when caching NXDOMAIN for an RR, make sure we flush out old ANY entries X-Git-Tag: v231~830^2~38 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a5444ca9fd88bf23cc95ac8d96803590698512ea;p=platform%2Fupstream%2Fsystemd.git resolved: when caching NXDOMAIN for an RR, make sure we flush out old ANY entries We use ANY RR keys to store NXDOMAIN information, but we previously didn't flush out old ANY RR items in the cache when adding new entries. Fix that. --- diff --git a/src/resolve/resolved-dns-cache.c b/src/resolve/resolved-dns-cache.c index 31154fb..e8541d5 100644 --- a/src/resolve/resolved-dns-cache.c +++ b/src/resolve/resolved-dns-cache.c @@ -470,6 +470,14 @@ static int dns_cache_put_negative( i->key = dns_resource_key_new(key->class, DNS_TYPE_ANY, DNS_RESOURCE_KEY_NAME(key)); if (!i->key) return -ENOMEM; + + /* Make sure to remove any previous entry for this + * specific ANY key. (For non-ANY keys the cache data + * is already cleared by the caller.) Note that we + * don't bother removing positive or NODATA cache + * items in this case, because it would either be slow + * or require explicit indexing by name */ + dns_cache_remove_by_key(c, key); } else i->key = dns_resource_key_ref(key); @@ -607,7 +615,6 @@ int dns_cache_put( /* See https://tools.ietf.org/html/rfc2308, which say that a * matching SOA record in the packet is used to to enable * negative caching. */ - r = dns_answer_find_soa(answer, key, &soa, &flags); if (r < 0) goto fail;