diff options
author | wpaul <wpaul@FreeBSD.org> | 1996-03-16 21:25:59 +0000 |
---|---|---|
committer | wpaul <wpaul@FreeBSD.org> | 1996-03-16 21:25:59 +0000 |
commit | d51d5c3ca53d4022fa3bd9f0a938e5cea4169c2a (patch) | |
tree | ead06bf99b092dc1b18f2a136c2e3b468c20cbda /lib/libc/net/gethostbynis.c | |
parent | 47ab1071a249efe8a7f69b6dfd4549af49f527de (diff) | |
download | FreeBSD-src-d51d5c3ca53d4022fa3bd9f0a938e5cea4169c2a.zip FreeBSD-src-d51d5c3ca53d4022fa3bd9f0a938e5cea4169c2a.tar.gz |
gethostbynis.c:
- Fix problem described in PR #1079: _gethostbynisaddr() doesn't
work. Make it accept the same arguments as all the other
gethostby*addr() functions and properly convert the supplied IP
address into a text string so that yp_match() can find it in the
hosts.byaddr map.
- Also fix potential memory leak: copy the results of yp_match() to
a static buffer and free the result (yp_match() returns dynamically
allocated memory).
ether_addr.c:
- Since I was in the neighborhood, fix ether_ntohost() and
ether_hostton() so that they don't bogusly for a free(result)
when yp_match() fails.
Diffstat (limited to 'lib/libc/net/gethostbynis.c')
-rw-r--r-- | lib/libc/net/gethostbynis.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lib/libc/net/gethostbynis.c b/lib/libc/net/gethostbynis.c index 53b426d..f01f105 100644 --- a/lib/libc/net/gethostbynis.c +++ b/lib/libc/net/gethostbynis.c @@ -24,8 +24,8 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)$Id$"; -static char rcsid[] = "$Id$"; +static char sccsid[] = "@(#)$Id: gethostbynis.c,v 1.1 1994/09/25 02:12:14 pst Exp $"; +static char rcsid[] = "$Id: gethostbynis.c,v 1.1 1994/09/25 02:12:14 pst Exp $"; #endif /* LIBC_SCCS and not lint */ #include <sys/param.h> @@ -37,6 +37,11 @@ static char rcsid[] = "$Id$"; #include <ctype.h> #include <errno.h> #include <string.h> +#ifdef YP +#include <rpc/rpc.h> +#include <rpcsvc/yp_prot.h> +#include <rpcsvc/ypclnt.h> +#endif #define MAXALIASES 35 #define MAXADDRS 35 @@ -57,6 +62,7 @@ _gethostbynis(name, map) int resultlen; static struct hostent h; static char *domain = (char *)NULL; + static char ypbuf[YPMAXRECORD]; if (domain == (char *)NULL) if (yp_get_default_domain (&domain)) @@ -65,6 +71,11 @@ _gethostbynis(name, map) if (yp_match(domain, map, name, strlen(name), &result, &resultlen)) return ((struct hostent *)NULL); + /* avoid potential memory leak */ + bcopy((char *)result, (char *)&ypbuf, resultlen); + free(result); + result = (char *)&ypbuf; + if ((cp = index(result, '\n'))) *cp = '\0'; @@ -108,8 +119,10 @@ _gethostbynisname(name) } struct hostent * -_gethostbynisaddr(name) - char *name; +_gethostbynisaddr(addr, len, type) + char *addr; + int len; + int type; { - return _gethostbynis(name, "hosts.byaddr"); + return _gethostbynis(inet_ntoa(*(struct in_addr *)addr),"hosts.byaddr"); } |