1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/patches/glibc/compat-2.1/rh62-12-glibc-compat-2.1.3-maxpacket.patch Sun May 20 09:27:05 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. */