patches/glibc/compat-2.1/rh62-12-glibc-compat-2.1.3-maxpacket.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Feb 24 11:00:05 2007 +0000 (2007-02-24)
changeset 1 eeea35fbf182
permissions -rw-r--r--
Add the full crosstool-NG sources to the new repository of its own.
You might just say: 'Yeah! crosstool-NG's got its own repo!".
Unfortunately, that's because the previous repo got damaged beyond repair and I had no backup.
That means I'm putting backups in place in the afternoon.
That also means we've lost history... :-(
     1 #--- libc/resolv/nss_dns/dns-host.c.jj	Tue Sep 14 03:05:08 1999
     2 #+++ libc/resolv/nss_dns/dns-host.c	Thu Oct 10 13:07:33 2002
     3 #@@ -129,9 +129,10 @@ _nss_dns_gethostbyname2_r (const char *n
     4 # 			   char *buffer, size_t buflen, int *errnop,
     5 # 			   int *h_errnop)
     6 # {
     7 #-  querybuf host_buffer;
     8 #+  querybuf *host_buffer;
     9 #   int size, type, n;
    10 #   const char *cp;
    11 #+  enum nss_status status;
    12 # 
    13 #   switch (af) {
    14 #   case AF_INET:
    15 #@@ -159,16 +160,25 @@ _nss_dns_gethostbyname2_r (const char *n
    16 #   if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
    17 #     name = cp;
    18 # 
    19 #-  n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
    20 #+  host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
    21 #+  if (host_buffer == NULL) {
    22 #+    *errnop = ENOMEM;
    23 #+    return NSS_STATUS_UNAVAIL;
    24 #+  }
    25 #+
    26 #+  n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
    27 #   if (n < 0)
    28 #     {
    29 #       *h_errnop = h_errno;
    30 #       *errnop = *h_errnop == TRY_AGAIN ? EAGAIN : ENOENT;
    31 #+      free (host_buffer);
    32 #       return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
    33 #     }
    34 # 
    35 #-  return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
    36 #-		      errnop, h_errnop);
    37 #+  status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
    38 #+			errnop, h_errnop);
    39 #+  free (host_buffer);
    40 #+  return status; 
    41 # }
    42 # 
    43 # 
    44 #@@ -205,7 +215,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
    45 #     char *h_addr_ptrs[MAX_NR_ADDRS + 1];
    46 #     char linebuffer[0];
    47 #   } *host_data = (struct host_data *) buffer;
    48 #-  querybuf host_buffer;
    49 #+  querybuf *host_buffer;
    50 #   char qbuf[MAXDNAME+1], *qp;
    51 #   size_t size;
    52 #   int n, status;
    53 #@@ -257,17 +267,25 @@ _nss_dns_gethostbyaddr_r (const char *ad
    54 #       /* Cannot happen.  */
    55 #     }
    56 # 
    57 #-  n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
    58 #-		 sizeof host_buffer);
    59 #+  host_buffer = (querybuf *) malloc (sizeof (*host_buffer));
    60 #+  if (host_buffer == NULL) {
    61 #+    *errnop = ENOMEM;
    62 #+    return NSS_STATUS_UNAVAIL;
    63 #+  }
    64 #+
    65 #+  n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
    66 #+		 sizeof (host_buffer->buf));
    67 #   if (n < 0)
    68 #     {
    69 #       *h_errnop = h_errno;
    70 #       *errnop = errno;
    71 #+      free (host_buffer);
    72 #       return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
    73 #     }
    74 # 
    75 #-  status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
    76 #+  status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
    77 # 			errnop, h_errnop);
    78 #+  free (host_buffer);
    79 #   if (status != NSS_STATUS_SUCCESS)
    80 #     {
    81 #       *h_errnop = h_errno;
    82 #--- libc/resolv/nss_dns/dns-network.c.jj	Wed Jun 30 12:01:14 1999
    83 #+++ libc/resolv/nss_dns/dns-network.c	Thu Oct 10 13:09:49 2002
    84 #@@ -113,24 +113,36 @@ _nss_dns_getnetbyname_r (const char *nam
    85 # 			 char *buffer, size_t buflen, int *errnop)
    86 # {
    87 #   /* Return entry for network with NAME.  */
    88 #-  querybuf net_buffer;
    89 #+  querybuf *net_buffer;
    90 #   int anslen;
    91 #   char *qbuf;
    92 #+  enum nss_status status;
    93 # 
    94 #   qbuf = strdupa (name);
    95 #-  anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
    96 #-		       sizeof (querybuf));
    97 #+
    98 #+  net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
    99 #+  if (net_buffer == NULL)
   100 #+    {
   101 #+      *errnop = ENOMEM;
   102 #+      return NSS_STATUS_UNAVAIL;
   103 #+    }
   104 #+
   105 #+  anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
   106 #+		       sizeof (net_buffer->buf));
   107 #   if (anslen < 0)
   108 #     {
   109 #       /* Nothing found.  */
   110 #       *errnop = errno;
   111 #+      free (net_buffer);
   112 #       return (errno == ECONNREFUSED
   113 # 	      || errno == EPFNOSUPPORT
   114 # 	      || errno == EAFNOSUPPORT)
   115 # 	? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   116 #     }
   117 # 
   118 #-  return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
   119 #+  status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
   120 #+  free (net_buffer);
   121 #+  return status;
   122 # }
   123 # 
   124 # 
   125 #@@ -140,7 +152,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
   126 # {
   127 #   /* Return entry for network with NAME.  */
   128 #   enum nss_status status;
   129 #-  querybuf net_buffer;
   130 #+  querybuf *net_buffer;
   131 #   unsigned int net_bytes[4];
   132 #   char qbuf[MAXDNAME];
   133 #   int cnt, anslen;
   134 #@@ -176,19 +188,28 @@ _nss_dns_getnetbyaddr_r (long net, int t
   135 #       break;
   136 #     }
   137 # 
   138 #-  anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
   139 #-		      sizeof (querybuf));
   140 #+  net_buffer = (querybuf *) malloc (sizeof (*net_buffer));
   141 #+  if (net_buffer == NULL)
   142 #+    {
   143 #+      *errnop = ENOMEM;
   144 #+      return NSS_STATUS_UNAVAIL;
   145 #+    }
   146 #+
   147 #+  anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
   148 #+		      sizeof (net_buffer->buf));
   149 #   if (anslen < 0)
   150 #     {
   151 #       /* Nothing found.  */
   152 #       *errnop = errno;
   153 #+      free (net_buffer);
   154 #       return (errno == ECONNREFUSED
   155 # 	      || errno == EPFNOSUPPORT
   156 # 	      || errno == EAFNOSUPPORT)
   157 # 	? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   158 #     }
   159 # 
   160 #-  status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
   161 #+  status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
   162 #+  free (net_buffer);
   163 #   if (status == NSS_STATUS_SUCCESS)
   164 #     {
   165 #       /* Strip trailing zeros.  */
   166 #--- libc/resolv/res_query.c.jj	Wed Jun 30 12:01:06 1999
   167 #+++ libc/resolv/res_query.c	Thu Oct 10 13:01:12 2002
   168 #@@ -106,7 +106,7 @@ res_query(name, class, type, answer, ans
   169 # 	u_char *answer;		/* buffer to put answer */
   170 # 	int anslen;		/* size of answer buffer */
   171 # {
   172 #-	u_char buf[MAXPACKET];
   173 #+	u_char *buf;
   174 # 	register HEADER *hp = (HEADER *) answer;
   175 # 	int n;
   176 # 
   177 #@@ -121,17 +121,25 @@ res_query(name, class, type, answer, ans
   178 # 		printf(";; res_query(%s, %d, %d)\n", name, class, type);
   179 # #endif
   180 # 
   181 #+	buf = malloc (MAXPACKET);
   182 #+	if (buf == NULL) {
   183 #+		__set_h_errno (NETDB_INTERNAL);
   184 #+		return -1;
   185 #+	}
   186 #+
   187 # 	n = res_mkquery(QUERY, name, class, type, NULL, 0, NULL,
   188 #-			buf, sizeof(buf));
   189 #+			buf, MAXPACKET);
   190 # 	if (n <= 0) {
   191 # #ifdef DEBUG
   192 # 		if (_res.options & RES_DEBUG)
   193 # 			printf(";; res_query: mkquery failed\n");
   194 # #endif
   195 # 		__set_h_errno (NO_RECOVERY);
   196 #+		free (buf);
   197 # 		return (n);
   198 # 	}
   199 # 	n = res_send(buf, n, answer, anslen);
   200 #+	free (buf);
   201 # 	if (n < 0) {
   202 # #ifdef DEBUG
   203 # 		if (_res.options & RES_DEBUG)
   204 #--- libc/resolv/gethnamaddr.c.jj	Tue Dec  7 11:50:36 1999
   205 #+++ libc/resolv/gethnamaddr.c	Thu Oct 10 15:05:50 2002
   206 #@@ -512,10 +512,11 @@ gethostbyname2(name, af)
   207 # 	const char *name;
   208 # 	int af;
   209 # {
   210 #-	querybuf buf;
   211 #+	querybuf *buf;
   212 # 	register const char *cp;
   213 # 	char *bp;
   214 # 	int n, size, type, len;
   215 #+	struct hostent *ret;
   216 # 	extern struct hostent *_gethtbyname2();
   217 # 
   218 # 	if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
   219 #@@ -617,13 +618,22 @@ gethostbyname2(name, af)
   220 # 				break;
   221 # 		}
   222 # 
   223 #-	if ((n = res_search(name, C_IN, type, buf.buf, sizeof(buf.buf))) < 0) {
   224 #+	buf = (querybuf *) malloc (sizeof (*buf));
   225 #+	if (buf == NULL) {
   226 #+		__set_h_errno (NETDB_INTERNAL);
   227 #+		return NULL;
   228 #+	}
   229 #+
   230 #+	if ((n = res_search(name, C_IN, type, buf->buf, sizeof(buf->buf))) < 0) {
   231 #+		free (buf);
   232 # 		dprintf("res_search failed (%d)\n", n);
   233 # 		if (errno == ECONNREFUSED)
   234 # 			return (_gethtbyname2(name, af));
   235 # 		return (NULL);
   236 # 	}
   237 #-	return (getanswer(&buf, n, name, type));
   238 #+	ret = getanswer(buf, n, name, type);
   239 #+	free (buf);
   240 #+	return ret;
   241 # }
   242 # 
   243 # struct hostent *
   244 #@@ -636,7 +646,7 @@ gethostbyaddr(addr, len, af)
   245 # 	static const u_char mapped[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0xff,0xff };
   246 # 	static const u_char tunnelled[] = { 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 };
   247 # 	int n, size;
   248 #-	querybuf buf;
   249 #+	querybuf *buf;
   250 # 	register struct hostent *hp;
   251 # 	char qbuf[MAXDNAME+1], *qp;
   252 # #ifdef SUNSECURITY
   253 #@@ -697,14 +707,24 @@ gethostbyaddr(addr, len, af)
   254 # 	default:
   255 # 		abort();
   256 # 	}
   257 #-	n = res_query(qbuf, C_IN, T_PTR, (u_char *)buf.buf, sizeof buf.buf);
   258 #+
   259 #+	buf = (querybuf *) malloc (sizeof (*buf));
   260 #+	if (buf == NULL) {
   261 #+		__set_h_errno (NETDB_INTERNAL);
   262 #+		return NULL;
   263 #+	}
   264 #+
   265 #+	n = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof buf->buf);
   266 # 	if (n < 0) {
   267 #+		free (buf);
   268 # 		dprintf("res_query failed (%d)\n", n);
   269 # 		if (errno == ECONNREFUSED)
   270 # 			return (_gethtbyaddr(addr, len, af));
   271 # 		return (NULL);
   272 # 	}
   273 #-	if (!(hp = getanswer(&buf, n, qbuf, T_PTR)))
   274 #+	hp = getanswer(buf, n, qbuf, T_PTR);
   275 #+	free (buf);
   276 #+	if (!hp)
   277 # 		return (NULL);	/* h_errno was set by getanswer() */
   278 # #ifdef SUNSECURITY
   279 # 	if (af == AF_INET) {
   280 #--- libc/resolv/getnetnamadr.c.jj	Wed Jun 30 12:00:50 1999
   281 #+++ libc/resolv/getnetnamadr.c	Thu Oct 10 13:14:01 2002
   282 #@@ -210,7 +210,7 @@ getnetbyaddr(net, net_type)
   283 # {
   284 # 	unsigned int netbr[4];
   285 # 	int nn, anslen;
   286 #-	querybuf buf;
   287 #+	querybuf *buf;
   288 # 	char qbuf[MAXDNAME];
   289 # 	u_int32_t net2;		/* Changed from unsigned long --roland */
   290 # 	struct netent *net_entry;
   291 #@@ -236,8 +236,15 @@ getnetbyaddr(net, net_type)
   292 # 		    netbr[1], netbr[0]);
   293 # 		break;
   294 # 	}
   295 #-	anslen = res_query(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
   296 #+
   297 #+	buf = (querybuf *) malloc (sizeof (*buf));
   298 #+	if (buf == NULL) {
   299 #+		return NULL;
   300 #+	}
   301 #+
   302 #+	anslen = res_query(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
   303 # 	if (anslen < 0) {
   304 #+		free (buf);
   305 # #ifdef DEBUG
   306 # 		if (_res.options & RES_DEBUG)
   307 # 			printf("res_query failed\n");
   308 #@@ -246,7 +253,8 @@ getnetbyaddr(net, net_type)
   309 # 			return (_getnetbyaddr(net, net_type));
   310 # 		return (NULL);
   311 # 	}
   312 #-	net_entry = getnetanswer(&buf, anslen, BYADDR);
   313 #+	net_entry = getnetanswer(buf, anslen, BYADDR);
   314 #+	free (buf);
   315 # 	if (net_entry) {
   316 # 		unsigned u_net = net;	/* maybe net should be unsigned ? */
   317 # 
   318 #@@ -264,7 +272,7 @@ getnetbyname(net)
   319 # 	register const char *net;
   320 # {
   321 # 	int anslen;
   322 #-	querybuf buf;
   323 #+	querybuf *buf;
   324 # 	char qbuf[MAXDNAME];
   325 # 	struct netent *net_entry;
   326 # 
   327 #@@ -273,8 +281,13 @@ getnetbyname(net)
   328 # 		return (NULL);
   329 # 	}
   330 # 	strcpy(&qbuf[0], net);
   331 #-	anslen = res_search(qbuf, C_IN, T_PTR, (u_char *)&buf, sizeof(buf));
   332 #+	buf = (querybuf *) malloc (sizeof (*buf));
   333 #+	if (buf == NULL) {
   334 #+		return NULL;
   335 #+	}
   336 #+	anslen = res_search(qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
   337 # 	if (anslen < 0) {
   338 #+		free (buf);
   339 # #ifdef DEBUG
   340 # 		if (_res.options & RES_DEBUG)
   341 # 			printf("res_query failed\n");
   342 #@@ -283,7 +296,8 @@ getnetbyname(net)
   343 # 			return (_getnetbyname(net));
   344 # 		return (_getnetbyname(net));
   345 # 	}
   346 #-	net_entry = getnetanswer(&buf, anslen, BYNAME);
   347 #+	net_entry = getnetanswer(buf, anslen, BYNAME);
   348 #+	free (buf);
   349 # 	if (net_entry)
   350 # 		return (net_entry);
   351 # 	return (_getnetbyname(net));
   352 --- libc/glibc-compat/nss_dns/dns-host.c.jj	Mon Jan  3 20:07:08 2000
   353 +++ libc/glibc-compat/nss_dns/dns-host.c	Thu Oct 10 12:46:24 2002
   354 @@ -126,9 +126,10 @@ enum nss_status
   355  _nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
   356  			   char *buffer, size_t buflen, int *h_errnop)
   357  {
   358 -  querybuf host_buffer;
   359 +  querybuf *host_buffer;
   360    int size, type, n;
   361    const char *cp;
   362 +  enum nss_status status;
   363  
   364    switch (af) {
   365    case AF_INET:
   366 @@ -156,15 +157,22 @@ _nss_dns_gethostbyname2_r (const char *n
   367    if (strchr (name, '.') == NULL && (cp = __hostalias (name)) != NULL)
   368      name = cp;
   369  
   370 -  n = res_search (name, C_IN, type, host_buffer.buf, sizeof (host_buffer.buf));
   371 +  host_buffer = (querybuf *) malloc (sizeof (querybuf));
   372 +  if (host_buffer == NULL)
   373 +    return NSS_STATUS_UNAVAIL;
   374 +
   375 +  n = res_search (name, C_IN, type, host_buffer->buf, sizeof (host_buffer->buf));
   376    if (n < 0)
   377      {
   378        *h_errnop = h_errno;
   379 +      free (host_buffer);
   380        return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   381      }
   382  
   383 -  return getanswer_r (&host_buffer, n, name, type, result, buffer, buflen,
   384 -		      h_errnop);
   385 +  status = getanswer_r (host_buffer, n, name, type, result, buffer, buflen,
   386 +			h_errnop);
   387 +  free (host_buffer);
   388 +  return status;
   389  }
   390  
   391  
   392 @@ -200,7 +208,7 @@ _nss_dns_gethostbyaddr_r (const char *ad
   393      char *h_addr_ptrs[MAX_NR_ADDRS + 1];
   394      char linebuffer[0];
   395    } *host_data = (struct host_data *) buffer;
   396 -  querybuf host_buffer;
   397 +  querybuf *host_buffer;
   398    char qbuf[MAXDNAME+1], *qp;
   399    int size, n, status;
   400  
   401 @@ -251,16 +259,22 @@ _nss_dns_gethostbyaddr_r (const char *ad
   402        /* Cannot happen.  */
   403      }
   404  
   405 -  n = res_query (qbuf, C_IN, T_PTR, (u_char *)host_buffer.buf,
   406 -		 sizeof host_buffer);
   407 +  host_buffer = (querybuf *) malloc (sizeof (querybuf));
   408 +  if (host_buffer == NULL)
   409 +    return NSS_STATUS_UNAVAIL;
   410 +
   411 +  n = res_query (qbuf, C_IN, T_PTR, host_buffer->buf,
   412 +		 sizeof (host_buffer->buf));
   413    if (n < 0)
   414      {
   415        *h_errnop = h_errno;
   416 +      free (host_buffer);
   417        return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   418      }
   419  
   420 -  status = getanswer_r (&host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
   421 +  status = getanswer_r (host_buffer, n, qbuf, T_PTR, result, buffer, buflen,
   422  			h_errnop);
   423 +  free (host_buffer);
   424    if (status != NSS_STATUS_SUCCESS)
   425      {
   426        *h_errnop = h_errno;
   427 --- libc/glibc-compat/nss_dns/dns-network.c.jj	Mon Jan  3 20:07:08 2000
   428 +++ libc/glibc-compat/nss_dns/dns-network.c	Thu Oct 10 12:46:24 2002
   429 @@ -107,21 +107,32 @@ _nss_dns_getnetbyname_r (const char *nam
   430  			 char *buffer, size_t buflen)
   431  {
   432    /* Return entry for network with NAME.  */
   433 -  querybuf net_buffer;
   434 +  querybuf *net_buffer;
   435    int anslen;
   436    char *qbuf;
   437 +  enum nss_status status;
   438  
   439    qbuf = strdupa (name);
   440 -  anslen = res_search (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
   441 -		       sizeof (querybuf));
   442 +
   443 +  net_buffer = (querybuf *) malloc (sizeof (querybuf));
   444 +  if (net_buffer == NULL)
   445 +    return NSS_STATUS_UNAVAIL;
   446 +
   447 +  anslen = res_search (qbuf, C_IN, T_PTR, net_buffer->buf,
   448 +		       sizeof (net_buffer->buf));
   449    if (anslen < 0)
   450 -    /* Nothing found.  */
   451 -    return (errno == ECONNREFUSED
   452 -	    || errno == EPFNOSUPPORT
   453 -	    || errno == EAFNOSUPPORT)
   454 -      ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   455 +    {
   456 +      free (net_buffer);
   457 +      /* Nothing found.  */
   458 +      return (errno == ECONNREFUSED
   459 +	      || errno == EPFNOSUPPORT
   460 +	      || errno == EAFNOSUPPORT)
   461 +	      ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   462 +    }
   463  
   464 -  return getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYNAME);
   465 +  status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYNAME);
   466 +  free (net_buffer);
   467 +  return status;
   468  }
   469  
   470  
   471 @@ -131,7 +142,7 @@ _nss_dns_getnetbyaddr_r (long net, int t
   472  {
   473    /* Return entry for network with NAME.  */
   474    enum nss_status status;
   475 -  querybuf net_buffer;
   476 +  querybuf *net_buffer;
   477    unsigned int net_bytes[4];
   478    char qbuf[MAXDNAME];
   479    int cnt, anslen;
   480 @@ -167,16 +178,24 @@ _nss_dns_getnetbyaddr_r (long net, int t
   481        break;
   482      }
   483  
   484 -  anslen = res_query (qbuf, C_IN, T_PTR, (u_char *) &net_buffer,
   485 -		      sizeof (querybuf));
   486 +  net_buffer = (querybuf *) malloc (sizeof (querybuf));
   487 +  if (net_buffer == NULL)
   488 +    return NSS_STATUS_UNAVAIL;
   489 +
   490 +  anslen = res_query (qbuf, C_IN, T_PTR, net_buffer->buf,
   491 +		      sizeof (net_buffer->buf));
   492    if (anslen < 0)
   493 -    /* Nothing found.  */
   494 -    return (errno == ECONNREFUSED
   495 -	    || errno == EPFNOSUPPORT
   496 -	    || errno == EAFNOSUPPORT)
   497 -      ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   498 +    {
   499 +      free (net_buffer);
   500 +      /* Nothing found.  */
   501 +      return (errno == ECONNREFUSED
   502 +	      || errno == EPFNOSUPPORT
   503 +	      || errno == EAFNOSUPPORT)
   504 +	      ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
   505 +    }
   506  
   507 -  status = getanswer_r (&net_buffer, anslen, result, buffer, buflen, BYADDR);
   508 +  status = getanswer_r (net_buffer, anslen, result, buffer, buflen, BYADDR);
   509 +  free (net_buffer);
   510    if (status == NSS_STATUS_SUCCESS)
   511      {
   512        /* Strip trailing zeros.  */