diff options
author | ume <ume@FreeBSD.org> | 2005-04-30 20:07:01 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2005-04-30 20:07:01 +0000 |
commit | eff8f31f8b0bffb36780a423c2307f514ac22269 (patch) | |
tree | 0fe67750816f865bc9fcf51ab90e59cc37f4abdf /lib/libc/net/gethostnamadr.c | |
parent | c8fa8099674d921d50dae72e3a58ef66ac9c7fbc (diff) | |
download | FreeBSD-src-eff8f31f8b0bffb36780a423c2307f514ac22269.zip FreeBSD-src-eff8f31f8b0bffb36780a423c2307f514ac22269.tar.gz |
oops, gethostbyaddr(3) must return h_addr as an IPv4-mapped
IPv6 address when RES_USE_INET6 was set, according to RFC 2133
section 6.2.
Diffstat (limited to 'lib/libc/net/gethostnamadr.c')
-rw-r--r-- | lib/libc/net/gethostnamadr.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/libc/net/gethostnamadr.c b/lib/libc/net/gethostnamadr.c index 8aae192..0646b0c 100644 --- a/lib/libc/net/gethostnamadr.c +++ b/lib/libc/net/gethostnamadr.c @@ -264,6 +264,11 @@ gethostbyaddr_r(const char *addr, int len, int af, struct hostent *he, { 0 } }; + if ((_res.options & RES_INIT) == 0 && res_init() == -1) { + h_errno = NETDB_INTERNAL; + return -1; + } + if (af == AF_INET6 && len == IN6ADDRSZ) { addr6 = (const struct in6_addr *)(const void *)uaddr; if (IN6_IS_ADDR_LINKLOCAL(addr6)) { |