aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-02-23 12:21:29 +0000
committerStefano Brivio <sbrivio@redhat.com>2023-02-27 18:52:04 +0100
commitddf7097a718095e879428667f2d56ec7d4f027e5 (patch)
treece5b1da65e0c5d13c2c5c79e853afe57542f1264
parent4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5 (diff)
downloadpasst-ddf7097a718095e879428667f2d56ec7d4f027e5.tar
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.tar.gz
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.tar.bz2
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.tar.lz
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.tar.xz
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.tar.zst
passt-ddf7097a718095e879428667f2d56ec7d4f027e5.zip
udp: Actually use host resolver to forward DNS queries
Instead of the address of the first resolver we advertise to the guest or namespace. This was one of the intentions behind commit 3a2afde87dd1 ("conf, udp: Drop mostly duplicated dns_send arrays, rename related fields"), but I forgot to implement this part. In practice, they are usually the same thing, unless /etc/resolv.conf points to a loopback address. Fixes: 3a2afde87dd1 ("conf, udp: Drop mostly duplicated dns_send arrays, rename related fields") Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Tested-by: Andrea Bolognani <abologna@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--udp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/udp.c b/udp.c
index c913d27..1d65559 100644
--- a/udp.c
+++ b/udp.c
@@ -867,7 +867,7 @@ int udp_tap_handler(struct ctx *c, int af, const void *addr,
} else if (IN4_ARE_ADDR_EQUAL(&s_in.sin_addr,
&c->ip4.dns_match) &&
ntohs(s_in.sin_port) == 53) {
- s_in.sin_addr = c->ip4.dns[0];
+ s_in.sin_addr = c->ip4.dns_host;
}
} else {
s_in6 = (struct sockaddr_in6) {
@@ -890,7 +890,7 @@ int udp_tap_handler(struct ctx *c, int af, const void *addr,
s_in6.sin6_addr = c->ip6.addr_seen;
} else if (IN6_ARE_ADDR_EQUAL(addr, &c->ip6.dns_match) &&
ntohs(s_in6.sin6_port) == 53) {
- s_in6.sin6_addr = c->ip6.dns[0];
+ s_in6.sin6_addr = c->ip6.dns_host;
} else if (IN6_IS_ADDR_LINKLOCAL(&s_in6.sin6_addr)) {
bind_addr = &c->ip6.addr_ll;
}