summaryrefslogtreecommitdiffstats
path: root/lib/libc/net/res_init.c
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2000-06-14 20:51:55 +0000
committerume <ume@FreeBSD.org>2000-06-14 20:51:55 +0000
commit8b2d24b89aac6f857af2fb0e459c43f7e62ba537 (patch)
treebd8b02cf87093ff38faf5925c9e5a042577177d5 /lib/libc/net/res_init.c
parent8386562abd89f4771e894733229a3d196e86ec6d (diff)
downloadFreeBSD-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.c61
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;
OpenPOWER on IntegriCloud