From 86ad4cd709ced8daf2b75ab564dece1ce82ffed9 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 25 Jul 2015 04:38:25 +0200 Subject: [PATCH] resolved: transaction - don't request PKTINFO for unicast DNS This was only ever used by LLMNR, so don't request this for unicast DNS packets. --- src/resolve/resolved-dns-transaction.c | 16 ---------------- src/resolve/resolved-manager.c | 10 ++++++---- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c index 4644f8a..e8413d4 100644 --- a/src/resolve/resolved-dns-transaction.c +++ b/src/resolve/resolved-dns-transaction.c @@ -654,7 +654,6 @@ static int on_dns_packet(sd_event_source *s, int fd, uint32_t revents, void *use } int transaction_dns_fd(DnsTransaction *t) { - const int one = 1; int r; assert(t); @@ -668,21 +667,6 @@ int transaction_dns_fd(DnsTransaction *t) { if (t->dns_fd < 0) return -errno; - switch (t->scope->family) { - case AF_INET: - r = setsockopt(t->dns_fd, IPPROTO_IP, IP_PKTINFO, &one, sizeof(one)); - break; - case AF_INET6: - r = setsockopt(t->dns_fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &one, sizeof(one)); - break; - default: - return -EAFNOSUPPORT; - } - if (r < 0) { - r = -errno; - goto fail; - } - r = sd_event_add_io(t->scope->manager->event, &t->dns_event_source, t->dns_fd, EPOLLIN, on_dns_packet, t); if (r < 0) goto fail; diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 17de14b..9fda64b 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -912,10 +912,12 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) { if (p->ifindex == LOOPBACK_IFINDEX) p->ifindex = 0; - /* If we don't know the interface index still, we look for the - * first local interface with a matching address. Yuck! */ - if (p->ifindex <= 0) - p->ifindex = manager_find_ifindex(m, p->family, &p->destination); + if (protocol != DNS_PROTOCOL_DNS) { + /* If we don't know the interface index still, we look for the + * first local interface with a matching address. Yuck! */ + if (p->ifindex <= 0) + p->ifindex = manager_find_ifindex(m, p->family, &p->destination); + } *ret = p; p = NULL; -- 2.7.4