summaryrefslogtreecommitdiffstats
path: root/lib/libc/net/gethostbynis.c
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2006-03-21 16:11:11 +0000
committerume <ume@FreeBSD.org>2006-03-21 16:11:11 +0000
commitb09a8950a1301d97aef8e2975e34a3ba5bc451c3 (patch)
treee821dd9b60869dd20f6817bbe100b41cd574f673 /lib/libc/net/gethostbynis.c
parenta2c94cecc033518580f28713e669d3f2a7783306 (diff)
downloadFreeBSD-src-b09a8950a1301d97aef8e2975e34a3ba5bc451c3.zip
FreeBSD-src-b09a8950a1301d97aef8e2975e34a3ba5bc451c3.tar.gz
Update the resolver in libc to BIND9's one.
Since, res_sendsigned(3) and the friends use MD5 functions, it is hard to include them without having MD5 functions in libc. So, res_sendsigned(3) is not merged into libc. Since, res_update(3) in BIND9 is not binary compatible with our res_update(3), res_update(3) is leaved as is, except some necessary modifications. The res_update(3) and the friends are not essential part of the resolver. They are not defined in resolv.h but defined in res_update.h separately in BIND9. Further, they are not called from our tree. So, I hide them from our resolv.h, but leave them only for binary backward compatibility (perhaps, no one calls them). Since, struct __res_state_ext is not exposed in BIND9, I hide it from our resolv.h. And, global variable _res_ext is removed. It breaks binary backward compatibility. But, since it is not used from outside of our libc, I think it is safe. Reviewed by: arch@ (no objection)
Diffstat (limited to 'lib/libc/net/gethostbynis.c')
-rw-r--r--lib/libc/net/gethostbynis.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/lib/libc/net/gethostbynis.c b/lib/libc/net/gethostbynis.c
index 1044fd6..1475d84 100644
--- a/lib/libc/net/gethostbynis.c
+++ b/lib/libc/net/gethostbynis.c
@@ -67,19 +67,19 @@ _gethostbynis(const char *name, char *map, int af, struct hostent *he,
break;
default:
errno = EAFNOSUPPORT;
- h_errno = NETDB_INTERNAL;
+ RES_SET_H_ERRNO(hed->res, NETDB_INTERNAL);
return -1;
}
if (hed->yp_domain == (char *)NULL)
if (yp_get_default_domain (&hed->yp_domain)) {
- h_errno = NETDB_INTERNAL;
+ RES_SET_H_ERRNO(hed->res, NETDB_INTERNAL);
return -1;
}
if (yp_match(hed->yp_domain, map, name, strlen(name), &result,
&resultlen)) {
- h_errno = HOST_NOT_FOUND;
+ RES_SET_H_ERRNO(hed->res, HOST_NOT_FOUND);
return -1;
}
@@ -101,7 +101,7 @@ _gethostbynis(const char *name, char *map, int af, struct hostent *he,
addrok = inet_aton(result, (struct in_addr *)hed->host_addr);
if (addrok != 1)
break;
- if (_res.options & RES_USE_INET6) {
+ if (hed->res->options & RES_USE_INET6) {
_map_v4v6_address((char *)hed->host_addr,
(char *)hed->host_addr);
af = AF_INET6;
@@ -113,7 +113,7 @@ _gethostbynis(const char *name, char *map, int af, struct hostent *he,
break;
}
if (addrok != 1) {
- h_errno = HOST_NOT_FOUND;
+ RES_SET_H_ERRNO(hed->res, HOST_NOT_FOUND);
return -1;
}
he->h_addr_list[1] = NULL;
@@ -130,7 +130,7 @@ _gethostbynis(const char *name, char *map, int af, struct hostent *he,
*p++ = '\0';
size = strlen(cp) + 1;
if (ep - bp < size) {
- h_errno = NO_RECOVERY;
+ RES_SET_H_ERRNO(hed->res, NO_RECOVERY);
return -1;
}
strlcpy(bp, cp, ep - bp);
@@ -204,15 +204,18 @@ _gethostbynisname(const char *name, int af)
struct hostdata *hd;
u_long oresopt;
int error;
+ res_state statp;
+ statp = __res_state();
if ((hd = __hostdata_init()) == NULL) {
- h_errno = NETDB_INTERNAL;
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return NULL;
}
- oresopt = _res.options;
- _res.options &= ~RES_USE_INET6;
+ hd->data.res = statp;
+ oresopt = statp->options;
+ statp->options &= ~RES_USE_INET6;
error = _gethostbynisname_r(name, af, &hd->host, &hd->data);
- _res.options = oresopt;
+ statp->options = oresopt;
return (error == 0) ? &hd->host : NULL;
#else
return NULL;
@@ -226,15 +229,18 @@ _gethostbynisaddr(const char *addr, int len, int af)
struct hostdata *hd;
u_long oresopt;
int error;
+ res_state statp;
+ statp = __res_state();
if ((hd = __hostdata_init()) == NULL) {
- h_errno = NETDB_INTERNAL;
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return NULL;
}
- oresopt = _res.options;
- _res.options &= ~RES_USE_INET6;
+ hd->data.res = statp;
+ oresopt = statp->options;
+ statp->options &= ~RES_USE_INET6;
error = _gethostbynisaddr_r(addr, len, af, &hd->host, &hd->data);
- _res.options = oresopt;
+ statp->options = oresopt;
return (error == 0) ? &hd->host : NULL;
#else
return NULL;
OpenPOWER on IntegriCloud