فهرست منبع

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.

Eric Andersen 19 سال پیش
والد
کامیت
60841bc6f4
1فایلهای تغییر یافته به همراه5 افزوده شده و 5 حذف شده
  1. 5 5
      libc/inet/resolv.c

+ 5 - 5
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)