From d51d5c3ca53d4022fa3bd9f0a938e5cea4169c2a Mon Sep 17 00:00:00 2001 From: wpaul Date: Sat, 16 Mar 1996 21:25:59 +0000 Subject: 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. --- lib/libc/net/ether_addr.c | 4 +--- lib/libc/net/gethostbynis.c | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'lib/libc') diff --git a/lib/libc/net/ether_addr.c b/lib/libc/net/ether_addr.c index 711bb7d..934a76b 100644 --- a/lib/libc/net/ether_addr.c +++ b/lib/libc/net/ether_addr.c @@ -35,7 +35,7 @@ * Center for Telecommunications Research * Columbia University, New York City * - * $Id: ether_addr.c,v 1.1 1995/04/02 01:31:17 wpaul Exp $ + * $Id: ether_addr.c,v 1.2 1995/08/07 03:42:14 wpaul Exp $ */ @@ -147,7 +147,6 @@ int ether_ntohost(hostname, e) ether_a = ether_ntoa(e); if (yp_match(yp_domain, "ethers.byaddr", ether_a, strlen(ether_a), &result, &resultlen)) { - free(result); continue; } strncpy((char *)&buf, result, resultlen); @@ -197,7 +196,6 @@ int ether_hostton(hostname, e) continue; if (yp_match(yp_domain, "ethers.byname", hostname, strlen(hostname), &result, &resultlen)) { - free(result); continue; } strncpy((char *)&buf, result, resultlen); 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 @@ -37,6 +37,11 @@ static char rcsid[] = "$Id$"; #include #include #include +#ifdef YP +#include +#include +#include +#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"); } -- cgit v1.1