From 3d61b63cc722951e3a5261e6bc3f0488eb35d441 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 26 Jul 1995 10:14:02 +0000 Subject: * asia, backward, europe, leapseconds, southamerica: New data from ADO's 95e. * inet/Makefile (routines): Removed inet_addr. * inet/inet_addr.c: Moved to resolv/ subdirectory. * resolv/Makefile (routines): Added inet_addr. * resolv/inet_addr.c: Incorporated from BIND 4.9.3-BETA24 release. * resolv/gethnamaddr.c: Likewise. * resolv/getnetbyaddr.c: Likewise. * resolv/getnetbyname.c: Likewise. * resolv/getnetent.c: Likewise. * resolv/getnetnamadr.c: Likewise. * resolv/herror.c: Likewise. * resolv/nsap_addr.c: Likewise. * resolv/res_comp.c: Likewise. * resolv/res_debug.c: Likewise. * resolv/res_init.c: Likewise. * resolv/res_mkquery.c: Likewise. * resolv/res_query.c: Likewise. * resolv/res_send.c: Likewise. * resolv/resolv.h: Likewise. * resolv/sethostent.c: Likewise. * resolv/arpa/nameser.h: Likewise. * inet/netdb.h: Incorporated from BIND 4.9.3-BETA24 release. [__GNU_LIBRARY__]: Include instead of repeating its declarations (and doing so only #ifdef sun!). * posix/sys/types.h [__USE_BSD] (__BIT_TYPES_DEFINED__): New macro. [__USE_BSD] [__GNUC__] (int64_t, u_int64_t, register_t): New typedefs. --- resolv/gethnamaddr.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'resolv/gethnamaddr.c') diff --git a/resolv/gethnamaddr.c b/resolv/gethnamaddr.c index 55a3fb09a4..d3b68f7d95 100644 --- a/resolv/gethnamaddr.c +++ b/resolv/gethnamaddr.c @@ -250,10 +250,12 @@ getanswer(answer, anslen, qname, qclass, qtype) continue; } if (type != qtype) { - syslog(LOG_NOTICE|LOG_AUTH, + /* CNAME->PTR should not cause a log message. */ + if (!(qtype == T_PTR && type == T_CNAME)) + syslog(LOG_NOTICE|LOG_AUTH, "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"", - qname, p_class(qclass), p_type(qtype), - p_type(type)); + qname, p_class(qclass), p_type(qtype), + p_type(type)); cp += n; continue; /* XXX - had_error++ ? */ } @@ -380,6 +382,11 @@ gethostbyname(name) int n; extern struct hostent *_gethtbyname(); + if ((_res.options & RES_INIT) == 0 && res_init() == -1) { + h_errno = NETDB_INTERNAL; + return (NULL); + } + /* * if there aren't any dots, it could be a user-level alias. * this is also done in res_query() since we are not the only @@ -406,7 +413,9 @@ gethostbyname(name) h_errno = HOST_NOT_FOUND; return (NULL); } - host.h_name = (char *)name; + strncpy(hostbuf, name, MAXDNAME); + hostbuf[MAXDNAME] = '\0'; + host.h_name = hostbuf; host.h_aliases = host_aliases; host_aliases[0] = NULL; host.h_addrtype = AF_INET; @@ -451,6 +460,10 @@ gethostbyaddr(addr, len, type) #endif /*SUNSECURITY*/ extern struct hostent *_gethtbyaddr(); + if ((_res.options & RES_INIT) == 0 && res_init() == -1) { + h_errno = NETDB_INTERNAL; + return (NULL); + } if (type != AF_INET) { errno = EAFNOSUPPORT; h_errno = NETDB_INTERNAL; @@ -480,7 +493,7 @@ gethostbyaddr(addr, len, type) old_options = _res.options; _res.options &= ~RES_DNSRCH; _res.options |= RES_DEFNAMES; - if (!(rhp = gethostbyname(hp->h_name))) { + if (!(rhp = gethostbyname(hname2))) { syslog(LOG_NOTICE|LOG_AUTH, "gethostbyaddr: No A record for %s (verifying [%s])", hname2, inet_ntoa(*((struct in_addr *)addr))); -- cgit v1.2.3