aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2021-10-07 19:56:15 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2021-10-07 19:56:15 +0000
commit2dbf4b83bbc8fb38f3261b8a8c428028b3b11aa3 (patch)
treea586710b55cca79cf531839830c75e66f84b61bb
parent23db43abdb5740287bbb7cbf5cc99eb22e121298 (diff)
parentcec8d31d7a48c216e83e3505c41d9ac1aa493159 (diff)
downloadslirp-2dbf4b83bbc8fb38f3261b8a8c428028b3b11aa3.zip
slirp-2dbf4b83bbc8fb38f3261b8a8c428028b3b11aa3.tar.gz
slirp-2dbf4b83bbc8fb38f3261b8a8c428028b3b11aa3.tar.bz2
Merge branch 'master' into 'master'
resolv: fix IPv6 resolution on Darwin See merge request slirp/libslirp!104
-rw-r--r--src/slirp.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/slirp.c b/src/slirp.c
index a669b45..0583e5b 100644
--- a/src/slirp.c
+++ b/src/slirp.c
@@ -143,6 +143,10 @@ static int get_dns_addr_libresolv(int af, void *pdns_addr, void *cached_addr,
union res_sockaddr_union servers[NI_MAXSERV];
int count;
int found;
+ void *addr;
+
+ // we only support IPv4 and IPv4, we assume it's one or the other
+ assert(af == AF_INET || af == AF_INET6);
if (res_ninit(&state) != 0) {
return -1;
@@ -155,11 +159,16 @@ static int get_dns_addr_libresolv(int af, void *pdns_addr, void *cached_addr,
if (af == servers[i].sin.sin_family) {
found++;
}
+ if (af == AF_INET) {
+ addr = &servers[i].sin.sin_addr;
+ } else { // af == AF_INET6
+ addr = &servers[i].sin6.sin6_addr;
+ }
// we use the first found entry
if (found == 1) {
- memcpy(pdns_addr, &servers[i].sin.sin_addr, addrlen);
- memcpy(cached_addr, &servers[i].sin.sin_addr, addrlen);
+ memcpy(pdns_addr, addr, addrlen);
+ memcpy(cached_addr, addr, addrlen);
if (scope_id) {
*scope_id = 0;
}
@@ -171,10 +180,7 @@ static int get_dns_addr_libresolv(int af, void *pdns_addr, void *cached_addr,
break;
} else if (slirp_debug & DBG_MISC) {
char s[INET6_ADDRSTRLEN];
- const char *res = inet_ntop(servers[i].sin.sin_family,
- &servers[i].sin.sin_addr,
- s,
- sizeof(s));
+ const char *res = inet_ntop(af, addr, s, sizeof(s));
if (!res) {
res = " (string conversion error)";
}