diff options
author | ume <ume@FreeBSD.org> | 2000-06-14 20:51:55 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2000-06-14 20:51:55 +0000 |
commit | 8b2d24b89aac6f857af2fb0e459c43f7e62ba537 (patch) | |
tree | bd8b02cf87093ff38faf5925c9e5a042577177d5 /lib/libc/net/res_init.c | |
parent | 8386562abd89f4771e894733229a3d196e86ec6d (diff) | |
download | FreeBSD-src-8b2d24b89aac6f857af2fb0e459c43f7e62ba537.zip FreeBSD-src-8b2d24b89aac6f857af2fb0e459c43f7e62ba537.tar.gz |
Backout my previous commit.
Cannot resolve any host on IPv4 only kernel.
Reported by: ache
Diffstat (limited to 'lib/libc/net/res_init.c')
-rw-r--r-- | lib/libc/net/res_init.c | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/lib/libc/net/res_init.c b/lib/libc/net/res_init.c index 8adcd27..d1e6249 100644 --- a/lib/libc/net/res_init.c +++ b/lib/libc/net/res_init.c @@ -87,7 +87,6 @@ static char rcsid[] = "$FreeBSD$"; #include <stdlib.h> #include <string.h> #include <unistd.h> -#include <netdb.h> #include "res_config.h" @@ -113,7 +112,9 @@ struct __res_state _res # endif ; +#ifdef INET6 struct __res_state_ext _res_ext; +#endif /* INET6 */ /* * Set up default settings. If the configuration file exist, the values @@ -153,7 +154,6 @@ res_init() #ifndef RFC1535 int dots; #endif - struct sockaddr_in6 *sin6; /* * These three fields used to be statically initialized. This made @@ -188,15 +188,13 @@ res_init() if (!_res.id) _res.id = res_randomid(); - sin6 = (struct sockaddr_in6 *)&_res_ext.nsaddr; #ifdef USELOOPBACK - sin6->sin6_addr = in6addr_loopback; + _res.nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1); #else - sin6->sin6_addr = in6addr_any; + _res.nsaddr.sin_addr.s_addr = INADDR_ANY; #endif - sin6->sin6_family = AF_INET6; - sin6->sin6_port = htons(NAMESERVER_PORT); - sin6->sin6_len = sizeof(*sin6); + _res.nsaddr.sin_family = AF_INET; + _res.nsaddr.sin_port = htons(NAMESERVER_PORT); _res.nscount = 1; _res.ndots = 1; _res.pfcode = 0; @@ -302,41 +300,16 @@ res_init() } /* read nameservers to query */ if (MATCH(buf, "nameserver") && nserv < MAXNS) { - char *q; - struct addrinfo hints, *res; - char pbuf[NI_MAXSERV]; + struct in_addr a; cp = buf + sizeof("nameserver") - 1; while (*cp == ' ' || *cp == '\t') cp++; - if ((*cp == '\0') || (*cp == '\n')) - continue; - for (q = cp; *q; q++) { - if (isspace(*q)) { - *q = '\0'; - break; - } - } - memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_NUMERICHOST; - hints.ai_socktype = SOCK_DGRAM; - snprintf(pbuf, sizeof(pbuf), "%d", NAMESERVER_PORT); - if (getaddrinfo(cp, pbuf, &hints, &res) == 0 && - res->ai_next == NULL) { - if (res->ai_addrlen <= sizeof(_res_ext.nsaddr_list[nserv])) { - memcpy(&_res_ext.nsaddr_list[nserv], res->ai_addr, - res->ai_addrlen); - } else { - memset(&_res_ext.nsaddr_list[nserv], 0, - sizeof(_res_ext.nsaddr_list[nserv])); - } - if (res->ai_addrlen <= sizeof(_res.nsaddr_list[nserv])) { - memcpy(&_res.nsaddr_list[nserv], res->ai_addr, - res->ai_addrlen); - } else { - memset(&_res.nsaddr_list[nserv], 0, - sizeof(_res.nsaddr_list[nserv])); - } + if ((*cp != '\0') && (*cp != '\n') && inet_aton(cp, &a)) { + _res.nsaddr_list[nserv].sin_addr = a; + _res.nsaddr_list[nserv].sin_family = AF_INET; + _res.nsaddr_list[nserv].sin_port = + htons(NAMESERVER_PORT); nserv++; } continue; @@ -344,9 +317,9 @@ res_init() #ifdef RESOLVSORT if (MATCH(buf, "sortlist")) { struct in_addr a; +#ifdef INET6 struct in6_addr a6; - int m, i; - u_char *u; +#endif /* INET6 */ cp = buf + sizeof("sortlist") - 1; while (nsort < MAXRESOLVSORT) { @@ -380,14 +353,19 @@ res_init() _res.sort_list[nsort].mask = net_mask(_res.sort_list[nsort].addr); } +#ifdef INET6 _res_ext.sort_list[nsort].af = AF_INET; _res_ext.sort_list[nsort].addr.ina = _res.sort_list[nsort].addr; _res_ext.sort_list[nsort].mask.ina.s_addr = _res.sort_list[nsort].mask; +#endif /* INET6 */ nsort++; } +#ifdef INET6 else if (inet_pton(AF_INET6, net, &a6) == 1) { + int m, i; + u_char *u; _res_ext.sort_list[nsort].af = AF_INET6; _res_ext.sort_list[nsort].addr.in6a = a6; @@ -429,6 +407,7 @@ res_init() } nsort++; } +#endif /* INET6 */ *cp = n; } continue; |