summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/net/gethostnamadr.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/lib/libc/net/gethostnamadr.c b/lib/libc/net/gethostnamadr.c
index 44506521678..c984fac7b1c 100644
--- a/lib/libc/net/gethostnamadr.c
+++ b/lib/libc/net/gethostnamadr.c
@@ -48,7 +48,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.66 2005/07/27 13:40:28 jaredy Exp $";
+static const char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.67 2005/07/27 14:16:43 millert Exp $";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
@@ -786,7 +786,7 @@ _endhtent(void)
}
}
-struct hostent *
+static struct hostent *
_gethtent(void)
{
struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);
@@ -832,9 +832,9 @@ _gethtent(void)
goto again;
}
/* if this is not something we're looking for, skip it. */
- if (host.h_addrtype != af)
+ if (host.h_addrtype != AF_UNSPEC && host.h_addrtype != af)
goto again;
- if (host.h_length != len)
+ if (host.h_length != 0 && host.h_length != len)
goto again;
h_addr_ptrs[0] = (char *)host_addr;
h_addr_ptrs[1] = NULL;
@@ -869,21 +869,6 @@ _gethtent(void)
}
struct hostent *
-_gethtbyname(const char *name)
-{
- struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res);
- struct hostent *hp;
- extern struct hostent *_gethtbyname2(const char *, int);
-
- if (_resp->options & RES_USE_INET6) {
- hp = _gethtbyname2(name, AF_INET6);
- if (hp)
- return (hp);
- }
- return (_gethtbyname2(name, AF_INET));
-}
-
-struct hostent *
_gethtbyname2(const char *name, int af)
{
struct hostent *p;
@@ -914,7 +899,8 @@ _gethtbyaddr(const void *addr, socklen_t len, int af)
_sethtent(0);
while ((p = _gethtent()))
- if (p->h_addrtype == af && !bcmp(p->h_addr, addr, len))
+ if (p->h_addrtype == af && p->h_length == len &&
+ !bcmp(p->h_addr, addr, len))
break;
_endhtent();
return (p);
@@ -1093,6 +1079,8 @@ map_v4v6_hostent(struct hostent *hp, char **bpp, char *ep)
struct hostent *
gethostent(void)
{
+ host.h_addrtype = AF_UNSPEC;
+ host.h_length = 0;
return (_gethtent());
}