patches/glibc/2.1.3/rh62-12-glibc-2.1.3-maxpacket.patch
changeset 330 447b203edc2e
parent 329 419d959441ed
child 331 0c05f9ea3254
     1.1 --- a/patches/glibc/2.1.3/rh62-12-glibc-2.1.3-maxpacket.patch	Tue Aug 14 19:32:22 2007 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,512 +0,0 @@
     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.  */