diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-12-10 16:49:31 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-12-10 16:49:31 +0100 |
commit | 4d3f0f66e6f437a8edcee6a9df70bbdf205795b4 (patch) | |
tree | c5c34c36e949becf42d04f68b9163aaa59802bb4 /src/resolve/resolved-mdns.c | |
parent | 553947b77c3232d5795cbb2cd1129e74cb11c86d (diff) | |
parent | fe2dfc8b4947451f87fcae56f839ca84dde26453 (diff) |
Merge pull request #2135 from zonque/resolved-mdns-3
resolved: more mDNS specific bits (3)
Diffstat (limited to 'src/resolve/resolved-mdns.c')
-rw-r--r-- | src/resolve/resolved-mdns.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/resolve/resolved-mdns.c b/src/resolve/resolved-mdns.c index abe63d58c1..d6973a6999 100644 --- a/src/resolve/resolved-mdns.c +++ b/src/resolve/resolved-mdns.c @@ -86,7 +86,7 @@ static int on_mdns_packet(sd_event_source *s, int fd, uint32_t revents, void *us } if (dns_packet_validate_reply(p) > 0) { - unsigned i; + DnsResourceRecord *rr; log_debug("Got mDNS reply packet"); @@ -107,11 +107,15 @@ static int on_mdns_packet(sd_event_source *s, int fd, uint32_t revents, void *us dns_scope_check_conflicts(scope, p); - for (i = 0; i < p->answer->n_rrs; i++) { - DnsResourceRecord *rr; + DNS_ANSWER_FOREACH(rr, p->answer) { + const char *name = DNS_RESOURCE_KEY_NAME(rr->key); DnsTransaction *t; - rr = p->answer->items[i].rr; + /* If the received reply packet contains ANY record that is not .local or .in-addr.arpa, + * we assume someone's playing tricks on us and discard the packet completely. */ + if (!(dns_name_endswith(name, "in-addr.arpa") > 0 || + dns_name_endswith(name, "local") > 0)) + return 0; t = dns_scope_find_transaction(scope, rr->key, false); if (t) |