diff options
author | Tom Gundersen <teg@jklm.no> | 2015-07-25 04:38:25 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2015-07-27 19:56:45 +0200 |
commit | 86ad4cd709ced8daf2b75ab564dece1ce82ffed9 (patch) | |
tree | d2c527da44b5f00a1b50bf7bd1e0bc00977f43b3 | |
parent | 0eb99d0a6a7d28a16e739b3a0e4900b9e4dc76f9 (diff) |
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.
-rw-r--r-- | src/resolve/resolved-dns-transaction.c | 16 | ||||
-rw-r--r-- | 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 4644f8a9e1..e8413d4234 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 17de14bae1..9fda64ba39 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; |