summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-07-25 04:38:25 +0200
committerTom Gundersen <teg@jklm.no>2015-07-27 19:56:45 +0200
commit86ad4cd709ced8daf2b75ab564dece1ce82ffed9 (patch)
treed2c527da44b5f00a1b50bf7bd1e0bc00977f43b3
parent0eb99d0a6a7d28a16e739b3a0e4900b9e4dc76f9 (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.c16
-rw-r--r--src/resolve/resolved-manager.c10
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;