resolved: add cache flush flag to DnsResourceKey
MDNS has a 'key cache flush' flag for records which must be masked out for the parsers to do our right thing. We will also use that flag later (in a different patch) in order to alter the cache behavior.
This commit is contained in:
@@ -1421,6 +1421,7 @@ fail:
|
||||
|
||||
int dns_packet_read_key(DnsPacket *p, DnsResourceKey **ret, size_t *start) {
|
||||
_cleanup_free_ char *name = NULL;
|
||||
bool cache_flush = false;
|
||||
uint16_t class, type;
|
||||
DnsResourceKey *key;
|
||||
size_t saved_rindex;
|
||||
@@ -1443,12 +1444,23 @@ int dns_packet_read_key(DnsPacket *p, DnsResourceKey **ret, size_t *start) {
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
if (p->protocol == DNS_PROTOCOL_MDNS) {
|
||||
/* See RFC6762, Section 10.2 */
|
||||
|
||||
if (class & MDNS_RR_CACHE_FLUSH) {
|
||||
class &= ~MDNS_RR_CACHE_FLUSH;
|
||||
cache_flush = true;
|
||||
}
|
||||
}
|
||||
|
||||
key = dns_resource_key_new_consume(class, type, name);
|
||||
if (!key) {
|
||||
r = -ENOMEM;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
key->cache_flush = cache_flush;
|
||||
|
||||
name = NULL;
|
||||
*ret = key;
|
||||
|
||||
|
||||
@@ -45,6 +45,9 @@ enum {
|
||||
#define DNSKEY_FLAG_ZONE_KEY (UINT16_C(1) << 8)
|
||||
#define DNSKEY_FLAG_SEP (UINT16_C(1) << 0)
|
||||
|
||||
/* mDNS RR flags */
|
||||
#define MDNS_RR_CACHE_FLUSH (UINT16_C(1) << 15)
|
||||
|
||||
/* DNSSEC algorithm identifiers, see
|
||||
* http://tools.ietf.org/html/rfc4034#appendix-A.1 and
|
||||
* https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml */
|
||||
@@ -76,6 +79,7 @@ struct DnsResourceKey {
|
||||
unsigned n_ref;
|
||||
uint16_t class, type;
|
||||
char *_name; /* don't access directy, use DNS_RESOURCE_KEY_NAME()! */
|
||||
bool cache_flush:1;
|
||||
};
|
||||
|
||||
/* Creates a temporary resource key. This is only useful to quickly
|
||||
|
||||
Reference in New Issue
Block a user