diff options
author | ume <ume@FreeBSD.org> | 2006-03-21 16:11:11 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2006-03-21 16:11:11 +0000 |
commit | b09a8950a1301d97aef8e2975e34a3ba5bc451c3 (patch) | |
tree | e821dd9b60869dd20f6817bbe100b41cd574f673 /lib/libc/net/gethostbynis.c | |
parent | a2c94cecc033518580f28713e669d3f2a7783306 (diff) | |
download | FreeBSD-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.c | 34 |
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; |