patches/glibc/compat-2.1/rh62-12-glibc-compat-2.1.3-maxpacket.patch
changeset 1 eeea35fbf182
     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	Sat Feb 24 11:00: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.  */