diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-10-07 19:56:15 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-10-07 19:56:15 +0000 |
commit | 2dbf4b83bbc8fb38f3261b8a8c428028b3b11aa3 (patch) | |
tree | a586710b55cca79cf531839830c75e66f84b61bb | |
parent | 23db43abdb5740287bbb7cbf5cc99eb22e121298 (diff) | |
parent | cec8d31d7a48c216e83e3505c41d9ac1aa493159 (diff) | |
download | slirp-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.c | 18 |
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)"; } |