patches/glibc/2.1.3/rh62-12-glibc-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.  */