break;
if (t <= 0)
- t = now(CLOCK_MONOTONIC);
+ t = now(CLOCK_BOOTTIME);
if (i->until > t)
break;
return 0;
}
+ if (rr->key->class == DNS_CLASS_ANY)
+ return 0;
+ if (rr->key->type == DNS_TYPE_ANY)
+ return 0;
+
/* Entry exists already? Update TTL and timestamp */
existing = dns_cache_get(c, rr);
if (existing) {
dns_cache_remove(c, key);
+ if (key->class == DNS_CLASS_ANY)
+ return 0;
+ if (key->type == DNS_TYPE_ANY)
+ return 0;
+ if (soa_ttl <= 0)
+ return 0;
+
if (!IN_SET(rcode, DNS_RCODE_SUCCESS, DNS_RCODE_NXDOMAIN))
return 0;
int r;
assert(c);
- assert(answer);
+ assert(q);
/* First, delete all matching old RRs, so that we only keep
* complete by_key in place. */
for (i = 0; i < q->n_keys; i++)
dns_cache_remove(c, q->keys[i]);
+
+ if (!answer)
+ return 0;
+
for (i = 0; i < answer->n_rrs; i++)
dns_cache_remove(c, answer->rrs[i]->key);
dns_cache_make_space(c, answer->n_rrs + q->n_keys);
if (timestamp <= 0)
- timestamp = now(CLOCK_MONOTONIC);
+ timestamp = now(CLOCK_BOOTTIME);
/* Second, add in positive entries for all contained RRs */
for (i = 0; i < MIN(max_rrs, answer->n_rrs); i++) {
for (i = 0; i < q->n_keys; i++) {
DnsCacheItem *j;
+ if (q->keys[i]->type == DNS_TYPE_ANY ||
+ q->keys[i]->class == DNS_CLASS_ANY) {
+ /* If we have ANY lookups we simply refresh */
+ *ret = NULL;
+ *rcode = 0;
+ return 0;
+ }
+
j = hashmap_get(c->by_key, q->keys[i]);
if (!j) {
/* If one question cannot be answered we need to refresh */