#include "alloc-util.h"
#include "dns-domain.h"
+#include "resolved-dns-answer.h"
#include "resolved-dns-cache.h"
#include "resolved-dns-packet.h"
#include "string-util.h"
int owner_family,
const union in_addr_union *owner_address) {
- DnsResourceRecord *soa = NULL;
+ DnsResourceRecord *soa = NULL, *rr;
unsigned cache_keys, i;
int r;
return 0;
}
- for (i = 0; i < answer->n_rrs; i++)
- dns_cache_remove(c, answer->items[i].rr->key);
+ DNS_ANSWER_FOREACH(rr, answer)
+ if (rr->key->cache_flush)
+ dns_cache_remove(c, rr->key);
/* We only care for positive replies and NXDOMAINs, on all
* other replies we will simply flush the respective entries,
/* Second, add in positive entries for all contained RRs */
for (i = 0; i < MIN(max_rrs, answer->n_rrs); i++) {
- DnsResourceRecord *rr = answer->items[i].rr;
-
- if (rr->key->cache_flush)
- dns_cache_remove(c, rr->key);
+ rr = answer->items[i].rr;
r = dns_cache_put_positive(c, rr, authenticated, timestamp, owner_family, owner_address);
if (r < 0)
int dns_packet_read_key(DnsPacket *p, DnsResourceKey **ret, size_t *start) {
_cleanup_free_ char *name = NULL;
- bool cache_flush = false;
+ bool cache_flush = true;
uint16_t class, type;
DnsResourceKey *key;
size_t saved_rindex;
if (p->protocol == DNS_PROTOCOL_MDNS) {
/* See RFC6762, Section 10.2 */
- if (class & MDNS_RR_CACHE_FLUSH) {
+ if (class & MDNS_RR_CACHE_FLUSH)
class &= ~MDNS_RR_CACHE_FLUSH;
- cache_flush = true;
- }
+ else
+ cache_flush = false;
}
key = dns_resource_key_new_consume(class, type, name);