diff options
author | millert <> | 2005-07-24 18:47:59 +0000 |
---|---|---|
committer | millert <> | 2005-07-24 18:47:59 +0000 |
commit | 784cdc2a0a4ce17f4ae227250d54312c4574847e (patch) | |
tree | eb0cf00f08dc3ed1f673a01564de41c73162d6c4 | |
parent | 16995c81478ea86d9b0d1ed0b4ca140b296d023f (diff) | |
download | openbsd-784cdc2a0a4ce17f4ae227250d54312c4574847e.tar.gz openbsd-784cdc2a0a4ce17f4ae227250d54312c4574847e.tar.bz2 openbsd-784cdc2a0a4ce17f4ae227250d54312c4574847e.zip |
In _gethtent() ignore host.h_length if it is set to 0. Previously
we only ignored it if host.h_addrtype was AF_UNSPEC. Set host.h_length
to 0 in _gethtbyname2() since that function does not take a length
argument. Problem found by jaredy@
-rw-r--r-- | src/lib/libc/net/gethostnamadr.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/lib/libc/net/gethostnamadr.c b/src/lib/libc/net/gethostnamadr.c index 626f9a6e65..70bff68fd6 100644 --- a/src/lib/libc/net/gethostnamadr.c +++ b/src/lib/libc/net/gethostnamadr.c | |||
@@ -48,7 +48,7 @@ | |||
48 | */ | 48 | */ |
49 | 49 | ||
50 | #if defined(LIBC_SCCS) && !defined(lint) | 50 | #if defined(LIBC_SCCS) && !defined(lint) |
51 | static const char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.64 2005/07/23 04:15:49 jaredy Exp $"; | 51 | static const char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.65 2005/07/24 18:47:59 millert Exp $"; |
52 | #endif /* LIBC_SCCS and not lint */ | 52 | #endif /* LIBC_SCCS and not lint */ |
53 | 53 | ||
54 | #include <sys/param.h> | 54 | #include <sys/param.h> |
@@ -832,12 +832,10 @@ _gethtent(void) | |||
832 | goto again; | 832 | goto again; |
833 | } | 833 | } |
834 | /* if this is not something we're looking for, skip it. */ | 834 | /* if this is not something we're looking for, skip it. */ |
835 | if (host.h_addrtype != AF_UNSPEC) { | 835 | if (host.h_addrtype != AF_UNSPEC && host.h_addrtype != af) |
836 | if (host.h_addrtype != af) | 836 | goto again; |
837 | goto again; | 837 | if (host.h_length != 0 && host.h_length != len) |
838 | if (host.h_length != len) | 838 | goto again; |
839 | goto again; | ||
840 | } | ||
841 | h_addr_ptrs[0] = (char *)host_addr; | 839 | h_addr_ptrs[0] = (char *)host_addr; |
842 | h_addr_ptrs[1] = NULL; | 840 | h_addr_ptrs[1] = NULL; |
843 | host.h_addr_list = h_addr_ptrs; | 841 | host.h_addr_list = h_addr_ptrs; |
@@ -877,11 +875,9 @@ _gethtbyname2(const char *name, int af) | |||
877 | char **cp; | 875 | char **cp; |
878 | 876 | ||
879 | host.h_addrtype = af; | 877 | host.h_addrtype = af; |
880 | 878 | host.h_length = 0; | |
881 | _sethtent(0); | 879 | _sethtent(0); |
882 | while ((p = _gethtent())) { | 880 | while ((p = _gethtent())) { |
883 | if (p->h_addrtype != af) | ||
884 | continue; | ||
885 | if (strcasecmp(p->h_name, name) == 0) | 881 | if (strcasecmp(p->h_name, name) == 0) |
886 | break; | 882 | break; |
887 | for (cp = p->h_aliases; *cp != 0; cp++) | 883 | for (cp = p->h_aliases; *cp != 0; cp++) |
@@ -1084,6 +1080,7 @@ struct hostent * | |||
1084 | gethostent(void) | 1080 | gethostent(void) |
1085 | { | 1081 | { |
1086 | host.h_addrtype = AF_UNSPEC; | 1082 | host.h_addrtype = AF_UNSPEC; |
1083 | host.h_length = 0; | ||
1087 | return (_gethtent()); | 1084 | return (_gethtent()); |
1088 | } | 1085 | } |
1089 | 1086 | ||