From 60841bc6f445dc3a324315c42afac7a05242bd79 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Tue, 10 May 2005 08:22:56 +0000 Subject: The default static buffer sizes are too small to handle the 8 entries returned by 'nslookup www.yahoo.com' and 'nslookup mail.hotmail.com', and thus we currently return ERANGE when trying to lookup some of the most popular hosts on the planet. Whether these sites deserve to be popular is a question I'll leave for someone else to worry about. This change makes certain we have enough static buffer space to handle about 21 IPv4 IP address replies per DNS query. Far more than enough to handle common cases such as www.yahoo.com and mail.hotmail.com. --- libc/inet/resolv.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libc') diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 368e52893..27b60efea 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -1064,7 +1064,7 @@ struct hostent *gethostbyname(const char *name) static struct hostent h; static char buf[sizeof(struct in_addr) + sizeof(struct in_addr *)*2 + - sizeof(char *)*(ALIAS_DIM) + 256/*namebuffer*/ + 32/* margin */]; + sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */]; struct hostent *hp; gethostbyname_r(name, &h, buf, sizeof(buf), &hp, &h_errno); @@ -1083,7 +1083,7 @@ struct hostent *gethostbyname2(const char *name, int family) static struct hostent h; static char buf[sizeof(struct in6_addr) + sizeof(struct in6_addr *)*2 + - sizeof(char *)*(ALIAS_DIM) + 256/*namebuffer*/ + 32/* margin */]; + sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */]; struct hostent *hp; gethostbyname2_r(name, family, &h, buf, sizeof(buf), &hp, &h_errno); @@ -1404,7 +1404,7 @@ struct hostent *gethostbyaddr (const void *addr, socklen_t len, int type) #else sizeof(struct in6_addr) + sizeof(struct in6_addr *)*2 + #endif /* __UCLIBC_HAS_IPV6__ */ - sizeof(char *)*(ALIAS_DIM) + 256/*namebuffer*/ + 32/* margin */]; + sizeof(char *)*(ALIAS_DIM) + 384/*namebuffer*/ + 32/* margin */]; struct hostent *hp; gethostbyaddr_r(addr, len, type, &h, buf, sizeof(buf), &hp, &h_errno); @@ -1711,7 +1711,7 @@ int getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host, int serrno = errno; int ok = 0; struct hostent *h = NULL; - char domain[256]; + char domain[256]; if (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV|NI_NOFQDN|NI_NAMEREQD|NI_DGRAM)) return EAI_BADFLAGS; @@ -2003,7 +2003,7 @@ int gethostbyname_r(const char * name, free(a.dotted); free(packet); *h_errnop = NETDB_INTERNAL; - DPRINTF("buffer to small(multiple addresses)\n"); + DPRINTF("buffer too small for all addresses\n"); return ERANGE; } else if(a.add_count > 0) -- cgit v1.2.3