diff options
author | Eric Andersen <andersen@codepoet.org> | 2005-05-10 08:22:56 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2005-05-10 08:22:56 +0000 |
commit | 60841bc6f445dc3a324315c42afac7a05242bd79 (patch) | |
tree | 2d1f166db1a2d6de898538a510bd57d7ad09735f | |
parent | 9d4c823b841300f20928582393f78898be86e136 (diff) |
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.
-rw-r--r-- | libc/inet/resolv.c | 10 |
1 files changed, 5 insertions, 5 deletions
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) |