From: Yu Watanabe Date: Fri, 4 Sep 2020 14:08:48 +0000 (+0900) Subject: resolve: use correct fd for UDP stub listner X-Git-Tag: v247-rc1~292^2 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=commitdiff_plain;h=89f7435d0cca90517103f99c95e5d15ef6253258 resolve: use correct fd for UDP stub listner --- diff --git a/src/resolve/resolved-dns-packet.h b/src/resolve/resolved-dns-packet.h index 56614c4a071..359cdcfd04a 100644 --- a/src/resolve/resolved-dns-packet.h +++ b/src/resolve/resolved-dns-packet.h @@ -66,6 +66,7 @@ struct DnsPacket { DnsResourceRecord *opt; /* Packet reception metadata */ + int fd; /* Used by UDP extra DNS stub listners */ int ifindex; int family, ipproto; union in_addr_union sender, destination; diff --git a/src/resolve/resolved-dns-stub.c b/src/resolve/resolved-dns-stub.c index 72e470533c1..132bac81536 100644 --- a/src/resolve/resolved-dns-stub.c +++ b/src/resolve/resolved-dns-stub.c @@ -14,9 +14,6 @@ * IP and UDP header sizes */ #define ADVERTISE_DATAGRAM_SIZE_MAX (65536U-14U-20U-8U) -static int manager_dns_stub_udp_fd(Manager *m); -static int manager_dns_stub_tcp_fd(Manager *m); - int dns_stub_listener_extra_new(DNSStubListenerExtra **ret) { DNSStubListenerExtra *l; @@ -164,17 +161,11 @@ static int dns_stub_send(Manager *m, DnsStream *s, DnsPacket *p, DnsPacket *repl if (s) r = dns_stream_write_packet(s, reply); else { - int fd; - - fd = manager_dns_stub_udp_fd(m); - if (fd < 0) - return log_debug_errno(fd, "Failed to get reply socket: %m"); - /* Note that it is essential here that we explicitly choose the source IP address for this packet. This * is because otherwise the kernel will choose it automatically based on the routing table and will * thus pick 127.0.0.1 rather than 127.0.0.53. */ - r = manager_send(m, fd, LOOPBACK_IFINDEX, p->family, &p->sender, p->sender_port, &p->destination, reply); + r = manager_send(m, p->fd, p->ifindex, p->family, &p->sender, p->sender_port, &p->destination, reply); } if (r < 0) return log_debug_errno(r, "Failed to send reply packet: %m"); diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index faf1a82155c..ddd336b4897 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -790,6 +790,7 @@ int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret) { p->size = (size_t) l; + p->fd = fd; p->family = sa.sa.sa_family; p->ipproto = IPPROTO_UDP; if (p->family == AF_INET) {