From b09a8950a1301d97aef8e2975e34a3ba5bc451c3 Mon Sep 17 00:00:00 2001 From: ume Date: Tue, 21 Mar 2006 16:11:11 +0000 Subject: 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) --- lib/libc/net/gethostbynis.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'lib/libc/net/gethostbynis.c') 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; -- cgit v1.1