1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/glibc/2.1.3/rh62-12-glibc-2.1.3-maxpacket.patch Wed May 23 20:49:02 2007 +0000
1.3 @@ -0,0 +1,512 @@
1.4 +--- libc/resolv/nss_dns/dns-host.c.jj Tue Sep 14 03:05:08 1999
1.5 ++++ libc/resolv/nss_dns/dns-host.c Thu Oct 10 13:07:33 2002
1.6 +@@ -129,9 +129,10 @@ _nss_dns_gethostbyname2_r (const char *n
1.7 + char *buffer, size_t buflen, int *errnop,
1.8 + int *h_errnop)
1.9 + {
1.10 +- querybuf host_buffer;
1.11 ++ querybuf *host_buffer;
1.12 + int size, type, n;
1.13 + const char *cp;
1.14 ++ enum nss_status status;
1.15 +
1.16 + switch (af) {
1.17 + case AF_INET:
1.18 +@@ -159,16 +160,25 @@ _nss_dns_gethostbyname2_r (const char *n
1.19 + if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
1.20 + name = cp;
1.21 +
1.22 +- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
1.23 ++ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
1.24 ++ if (host_buffer == NULL) {
1.25 ++ *errnop = ENOMEM;
1.26 ++ return NSS_STATUS_UNAVAIL;
1.27 ++ }
1.28 ++
1.29 ++ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
1.30 + if (n < 0)
1.31 + {
1.32 + *h_errnop = h_errno;
1.33 + *errnop = *h_errnop == TRY_AGAIN ? EAGAIN : ENOENT;
1.34 ++ free (host_buffer);
1.35 + return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.36 + }
1.37 +
1.38 +- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
1.39 +- errnop, h_errnop);
1.40 ++ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
1.41 ++ errnop, h_errnop);
1.42 ++ free (host_buffer);
1.43 ++ return status;
1.44 + }
1.45 +
1.46 +
1.47 +@@ -205,7 +215,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
1.48 + char *h_addr_ptrs[MAX_NR_ADDRS + 1];
1.49 + char linebuffer[0];
1.50 + } *host_data = (struct host_data *) buffer;
1.51 +- querybuf host_buffer;
1.52 ++ querybuf *host_buffer;
1.53 + char qbuf[MAXDNAME+1], *qp;
1.54 + size_t size;
1.55 + int n, status;
1.56 +@@ -257,17 +267,25 @@ _nss_dns_gethostbyaddr_r (const char *ad
1.57 + /* Cannot happen. */
1.58 + }
1.59 +
1.60 +- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
1.61 +- sizeof host_buffer);
1.62 ++ host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
1.63 ++ if (host_buffer == NULL) {
1.64 ++ *errnop = ENOMEM;
1.65 ++ return NSS_STATUS_UNAVAIL;
1.66 ++ }
1.67 ++
1.68 ++ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
1.69 ++ sizeof (host_buffer->buf));
1.70 + if (n < 0)
1.71 + {
1.72 + *h_errnop = h_errno;
1.73 + *errnop = errno;
1.74 ++ free (host_buffer);
1.75 + return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.76 + }
1.77 +
1.78 +- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
1.79 ++ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
1.80 + errnop, h_errnop);
1.81 ++ free (host_buffer);
1.82 + if (status != NSS_STATUS_SUCCESS)
1.83 + {
1.84 + *h_errnop = h_errno;
1.85 +--- libc/resolv/nss_dns/dns-network.c.jj Wed Jun 30 12:01:14 1999
1.86 ++++ libc/resolv/nss_dns/dns-network.c Thu Oct 10 13:09:49 2002
1.87 +@@ -113,24 +113,36 @@ _nss_dns_getnetbyname_r (const char *nam
1.88 + char *buffer, size_t buflen, int *errnop)
1.89 + {
1.90 + /* Return entry for network with NAME. */
1.91 +- querybuf net_buffer;
1.92 ++ querybuf *net_buffer;
1.93 + int anslen;
1.94 + char *qbuf;
1.95 ++ enum nss_status status;
1.96 +
1.97 + qbuf = strdupa (name);
1.98 +- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
1.99 +- sizeof (querybuf));
1.100 ++
1.101 ++ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
1.102 ++ if (net_buffer == NULL)
1.103 ++ {
1.104 ++ *errnop = ENOMEM;
1.105 ++ return NSS_STATUS_UNAVAIL;
1.106 ++ }
1.107 ++
1.108 ++ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
1.109 ++ sizeof (net_buffer->buf));
1.110 + if (anslen < 0)
1.111 + {
1.112 + /* Nothing found. */
1.113 + *errnop = errno;
1.114 ++ free (net_buffer);
1.115 + return (errno == ECONNREFUSED
1.116 + || errno == EPFNOSUPPORT
1.117 + || errno == EAFNOSUPPORT)
1.118 + ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.119 + }
1.120 +
1.121 +- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
1.122 ++ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
1.123 ++ free (net_buffer);
1.124 ++ return status;
1.125 + }
1.126 +
1.127 +
1.128 +@@ -140,7 +152,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
1.129 + {
1.130 + /* Return entry for network with NAME. */
1.131 + enum nss_status status;
1.132 +- querybuf net_buffer;
1.133 ++ querybuf *net_buffer;
1.134 + unsigned int net_bytes[4];
1.135 + char qbuf[MAXDNAME];
1.136 + int cnt, anslen;
1.137 +@@ -176,19 +188,28 @@ _nss_dns_getnetbyaddr_r (long net, int t
1.138 + break;
1.139 + }
1.140 +
1.141 +- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
1.142 +- sizeof (querybuf));
1.143 ++ net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
1.144 ++ if (net_buffer == NULL)
1.145 ++ {
1.146 ++ *errnop = ENOMEM;
1.147 ++ return NSS_STATUS_UNAVAIL;
1.148 ++ }
1.149 ++
1.150 ++ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
1.151 ++ sizeof (net_buffer->buf));
1.152 + if (anslen < 0)
1.153 + {
1.154 + /* Nothing found. */
1.155 + *errnop = errno;
1.156 ++ free (net_buffer);
1.157 + return (errno == ECONNREFUSED
1.158 + || errno == EPFNOSUPPORT
1.159 + || errno == EAFNOSUPPORT)
1.160 + ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.161 + }
1.162 +
1.163 +- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
1.164 ++ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
1.165 ++ free (net_buffer);
1.166 + if (status == NSS_STATUS_SUCCESS)
1.167 + {
1.168 + /* Strip trailing zeros. */
1.169 +--- libc/resolv/res_query.c.jj Wed Jun 30 12:01:06 1999
1.170 ++++ libc/resolv/res_query.c Thu Oct 10 13:01:12 2002
1.171 +@@ -106,7 +106,7 @@ res_query(name, class, type, answer, ans
1.172 + u_char *answer; /* buffer to put answer */
1.173 + int anslen; /* size of answer buffer */
1.174 + {
1.175 +- u_char buf[MAXPACKET];
1.176 ++ u_char *buf;
1.177 + register HEADER *hp = (HEADER *) answer;
1.178 + int n;
1.179 +
1.180 +@@ -121,17 +121,25 @@ res_query(name, class, type, answer, ans
1.181 + printf(";; res_query(%s, %d, %d)\n", name, class, type);
1.182 + #endif
1.183 +
1.184 ++ buf = malloc (MAXPACKET);
1.185 ++ if (buf == NULL) {
1.186 ++ __set_h_errno (NETDB_INTERNAL);
1.187 ++ return -1;
1.188 ++ }
1.189 ++
1.190 + n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
1.191 +- buf, sizeof(buf));
1.192 ++ buf, MAXPACKET);
1.193 + if (n <= 0) {
1.194 + #ifdef DEBUG
1.195 + if (_res.options & RES_DEBUG)
1.196 + printf(";; res_query: mkquery failed\n");
1.197 + #endif
1.198 + __set_h_errno (NO_RECOVERY);
1.199 ++ free (buf);
1.200 + return (n);
1.201 + }
1.202 + n = res_send(buf, n, answer, anslen);
1.203 ++ free (buf);
1.204 + if (n < 0) {
1.205 + #ifdef DEBUG
1.206 + if (_res.options & RES_DEBUG)
1.207 +--- libc/resolv/gethnamaddr.c.jj Tue Dec 7 11:50:36 1999
1.208 ++++ libc/resolv/gethnamaddr.c Thu Oct 10 15:05:50 2002
1.209 +@@ -512,10 +512,11 @@ gethostbyname2(name, af)
1.210 + const char *name;
1.211 + int af;
1.212 + {
1.213 +- querybuf buf;
1.214 ++ querybuf *buf;
1.215 + register const char *cp;
1.216 + char *bp;
1.217 + int n, size, type, len;
1.218 ++ struct hostent *ret;
1.219 + extern struct hostent *_gethtbyname2();
1.220 +
1.221 + if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
1.222 +@@ -617,13 +618,22 @@ gethostbyname2(name, af)
1.223 + break;
1.224 + }
1.225 +
1.226 +- if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
1.227 ++ buf = (querybuf *) malloc (sizeof (*buf));
1.228 ++ if (buf == NULL) {
1.229 ++ __set_h_errno (NETDB_INTERNAL);
1.230 ++ return NULL;
1.231 ++ }
1.232 ++
1.233 ++ if ((n = res_search(name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
1.234 ++ free (buf);
1.235 + dprintf("res_search failed (%d)\n", n);
1.236 + if (errno == ECONNREFUSED)
1.237 + return (_gethtbyname2(name, af));
1.238 + return (NULL);
1.239 + }
1.240 +- return (getanswer(&buf, n, name, type));
1.241 ++ ret = getanswer(buf, n, name, type);
1.242 ++ free (buf);
1.243 ++ return ret;
1.244 + }
1.245 +
1.246 + struct hostent *
1.247 +@@ -636,7 +646,7 @@ gethostbyaddr(addr, len, af)
1.248 + static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
1.249 + static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
1.250 + int n, size;
1.251 +- querybuf buf;
1.252 ++ querybuf *buf;
1.253 + register struct hostent *hp;
1.254 + char qbuf[MAXDNAME+1], *qp;
1.255 + #ifdef SUNSECURITY
1.256 +@@ -697,14 +707,24 @@ gethostbyaddr(addr, len, af)
1.257 + default:
1.258 + abort();
1.259 + }
1.260 +- n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
1.261 ++
1.262 ++ buf = (querybuf *) malloc (sizeof (*buf));
1.263 ++ if (buf == NULL) {
1.264 ++ __set_h_errno (NETDB_INTERNAL);
1.265 ++ return NULL;
1.266 ++ }
1.267 ++
1.268 ++ n = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
1.269 + if (n < 0) {
1.270 ++ free (buf);
1.271 + dprintf("res_query failed (%d)\n", n);
1.272 + if (errno == ECONNREFUSED)
1.273 + return (_gethtbyaddr(addr, len, af));
1.274 + return (NULL);
1.275 + }
1.276 +- if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
1.277 ++ hp = getanswer(buf, n, qbuf, T_PTR);
1.278 ++ free (buf);
1.279 ++ if (!hp)
1.280 + return (NULL); /* h_errno was set by getanswer() */
1.281 + #ifdef SUNSECURITY
1.282 + if (af == AF_INET) {
1.283 +--- libc/resolv/getnetnamadr.c.jj Wed Jun 30 12:00:50 1999
1.284 ++++ libc/resolv/getnetnamadr.c Thu Oct 10 13:14:01 2002
1.285 +@@ -210,7 +210,7 @@ getnetbyaddr(net, net_type)
1.286 + {
1.287 + unsigned int netbr[4];
1.288 + int nn, anslen;
1.289 +- querybuf buf;
1.290 ++ querybuf *buf;
1.291 + char qbuf[MAXDNAME];
1.292 + u_int32_t net2; /* Changed from unsigned long --roland */
1.293 + struct netent *net_entry;
1.294 +@@ -236,8 +236,15 @@ getnetbyaddr(net, net_type)
1.295 + netbr[1], netbr[0]);
1.296 + break;
1.297 + }
1.298 +- anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
1.299 ++
1.300 ++ buf = (querybuf *) malloc (sizeof (*buf));
1.301 ++ if (buf == NULL) {
1.302 ++ return NULL;
1.303 ++ }
1.304 ++
1.305 ++ anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
1.306 + if (anslen < 0) {
1.307 ++ free (buf);
1.308 + #ifdef DEBUG
1.309 + if (_res.options & RES_DEBUG)
1.310 + printf("res_query failed\n");
1.311 +@@ -246,7 +253,8 @@ getnetbyaddr(net, net_type)
1.312 + return (_getnetbyaddr(net, net_type));
1.313 + return (NULL);
1.314 + }
1.315 +- net_entry = getnetanswer(&buf, anslen, BYADDR);
1.316 ++ net_entry = getnetanswer(buf, anslen, BYADDR);
1.317 ++ free (buf);
1.318 + if (net_entry) {
1.319 + unsigned u_net = net; /* maybe net should be unsigned ? */
1.320 +
1.321 +@@ -264,7 +272,7 @@ getnetbyname(net)
1.322 + register const char *net;
1.323 + {
1.324 + int anslen;
1.325 +- querybuf buf;
1.326 ++ querybuf *buf;
1.327 + char qbuf[MAXDNAME];
1.328 + struct netent *net_entry;
1.329 +
1.330 +@@ -273,8 +281,13 @@ getnetbyname(net)
1.331 + return (NULL);
1.332 + }
1.333 + strcpy(&qbuf[0], net);
1.334 +- anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
1.335 ++ buf = (querybuf *) malloc (sizeof (*buf));
1.336 ++ if (buf == NULL) {
1.337 ++ return NULL;
1.338 ++ }
1.339 ++ anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
1.340 + if (anslen < 0) {
1.341 ++ free (buf);
1.342 + #ifdef DEBUG
1.343 + if (_res.options & RES_DEBUG)
1.344 + printf("res_query failed\n");
1.345 +@@ -283,7 +296,8 @@ getnetbyname(net)
1.346 + return (_getnetbyname(net));
1.347 + return (_getnetbyname(net));
1.348 + }
1.349 +- net_entry = getnetanswer(&buf, anslen, BYNAME);
1.350 ++ net_entry = getnetanswer(buf, anslen, BYNAME);
1.351 ++ free (buf);
1.352 + if (net_entry)
1.353 + return (net_entry);
1.354 + return (_getnetbyname(net));
1.355 +--- libc/glibc-compat/nss_dns/dns-host.c.jj Mon Jan 3 20:07:08 2000
1.356 ++++ libc/glibc-compat/nss_dns/dns-host.c Thu Oct 10 12:46:24 2002
1.357 +@@ -126,9 +126,10 @@ enum nss_status
1.358 + _nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
1.359 + char *buffer, size_t buflen, int *h_errnop)
1.360 + {
1.361 +- querybuf host_buffer;
1.362 ++ querybuf *host_buffer;
1.363 + int size, type, n;
1.364 + const char *cp;
1.365 ++ enum nss_status status;
1.366 +
1.367 + switch (af) {
1.368 + case AF_INET:
1.369 +@@ -156,15 +157,22 @@ _nss_dns_gethostbyname2_r (const char *n
1.370 + if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
1.371 + name = cp;
1.372 +
1.373 +- n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
1.374 ++ host_buffer = (querybuf *) malloc (sizeof (querybuf));
1.375 ++ if (host_buffer == NULL)
1.376 ++ return NSS_STATUS_UNAVAIL;
1.377 ++
1.378 ++ n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
1.379 + if (n < 0)
1.380 + {
1.381 + *h_errnop = h_errno;
1.382 ++ free (host_buffer);
1.383 + return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.384 + }
1.385 +
1.386 +- return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
1.387 +- h_errnop);
1.388 ++ status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
1.389 ++ h_errnop);
1.390 ++ free (host_buffer);
1.391 ++ return status;
1.392 + }
1.393 +
1.394 +
1.395 +@@ -200,7 +208,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
1.396 + char *h_addr_ptrs[MAX_NR_ADDRS + 1];
1.397 + char linebuffer[0];
1.398 + } *host_data = (struct host_data *) buffer;
1.399 +- querybuf host_buffer;
1.400 ++ querybuf *host_buffer;
1.401 + char qbuf[MAXDNAME+1], *qp;
1.402 + int size, n, status;
1.403 +
1.404 +@@ -251,16 +259,22 @@ _nss_dns_gethostbyaddr_r (const char *ad
1.405 + /* Cannot happen. */
1.406 + }
1.407 +
1.408 +- n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
1.409 +- sizeof host_buffer);
1.410 ++ host_buffer = (querybuf *) malloc (sizeof (querybuf));
1.411 ++ if (host_buffer == NULL)
1.412 ++ return NSS_STATUS_UNAVAIL;
1.413 ++
1.414 ++ n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
1.415 ++ sizeof (host_buffer->buf));
1.416 + if (n < 0)
1.417 + {
1.418 + *h_errnop = h_errno;
1.419 ++ free (host_buffer);
1.420 + return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.421 + }
1.422 +
1.423 +- status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
1.424 ++ status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
1.425 + h_errnop);
1.426 ++ free (host_buffer);
1.427 + if (status != NSS_STATUS_SUCCESS)
1.428 + {
1.429 + *h_errnop = h_errno;
1.430 +--- libc/glibc-compat/nss_dns/dns-network.c.jj Mon Jan 3 20:07:08 2000
1.431 ++++ libc/glibc-compat/nss_dns/dns-network.c Thu Oct 10 12:46:24 2002
1.432 +@@ -107,21 +107,32 @@ _nss_dns_getnetbyname_r (const char *nam
1.433 + char *buffer, size_t buflen)
1.434 + {
1.435 + /* Return entry for network with NAME. */
1.436 +- querybuf net_buffer;
1.437 ++ querybuf *net_buffer;
1.438 + int anslen;
1.439 + char *qbuf;
1.440 ++ enum nss_status status;
1.441 +
1.442 + qbuf = strdupa (name);
1.443 +- anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
1.444 +- sizeof (querybuf));
1.445 ++
1.446 ++ net_buffer = (querybuf *) malloc (sizeof (querybuf));
1.447 ++ if (net_buffer == NULL)
1.448 ++ return NSS_STATUS_UNAVAIL;
1.449 ++
1.450 ++ anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
1.451 ++ sizeof (net_buffer->buf));
1.452 + if (anslen < 0)
1.453 +- /* Nothing found. */
1.454 +- return (errno == ECONNREFUSED
1.455 +- || errno == EPFNOSUPPORT
1.456 +- || errno == EAFNOSUPPORT)
1.457 +- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.458 ++ {
1.459 ++ free (net_buffer);
1.460 ++ /* Nothing found. */
1.461 ++ return (errno == ECONNREFUSED
1.462 ++ || errno == EPFNOSUPPORT
1.463 ++ || errno == EAFNOSUPPORT)
1.464 ++ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.465 ++ }
1.466 +
1.467 +- return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
1.468 ++ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
1.469 ++ free (net_buffer);
1.470 ++ return status;
1.471 + }
1.472 +
1.473 +
1.474 +@@ -131,7 +142,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
1.475 + {
1.476 + /* Return entry for network with NAME. */
1.477 + enum nss_status status;
1.478 +- querybuf net_buffer;
1.479 ++ querybuf *net_buffer;
1.480 + unsigned int net_bytes[4];
1.481 + char qbuf[MAXDNAME];
1.482 + int cnt, anslen;
1.483 +@@ -167,16 +178,24 @@ _nss_dns_getnetbyaddr_r (long net, int t
1.484 + break;
1.485 + }
1.486 +
1.487 +- anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
1.488 +- sizeof (querybuf));
1.489 ++ net_buffer = (querybuf *) malloc (sizeof (querybuf));
1.490 ++ if (net_buffer == NULL)
1.491 ++ return NSS_STATUS_UNAVAIL;
1.492 ++
1.493 ++ anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
1.494 ++ sizeof (net_buffer->buf));
1.495 + if (anslen < 0)
1.496 +- /* Nothing found. */
1.497 +- return (errno == ECONNREFUSED
1.498 +- || errno == EPFNOSUPPORT
1.499 +- || errno == EAFNOSUPPORT)
1.500 +- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.501 ++ {
1.502 ++ free (net_buffer);
1.503 ++ /* Nothing found. */
1.504 ++ return (errno == ECONNREFUSED
1.505 ++ || errno == EPFNOSUPPORT
1.506 ++ || errno == EAFNOSUPPORT)
1.507 ++ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
1.508 ++ }
1.509 +
1.510 +- status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
1.511 ++ status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
1.512 ++ free (net_buffer);
1.513 + if (status == NSS_STATUS_SUCCESS)
1.514 + {
1.515 + /* Strip trailing zeros. */