[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: glibc, bug 438179 et avenir de/dans etch



Selon Pierre Habouzit <madcoder@debian.org>:

> On Wed, Sep 26, 2007 at 03:55:56PM +0000, j.combes.ml@free.fr wrote:
>>   La migration de Sarge à Etch casse donc ce fonctionnement, ce qui
>
>   Non etch n'a pas ça. Seul lenny est concernée.

Peut-être ai-je mal cerné mon problème, mais :
$ cat /etc/debian_version
4.0

$ dpkg -l "libc6*" |grep ^i
ii  libc6           2.3.6.ds1-13etch2 GNU C Library: Shared libraries

Avec le petit programme en pièce jointe :

$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine getaddrinfo
getaddrinfo :   ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166

$  ./reso-dns ldaprs.mon.domaine gethostbyname
gethostbyname : ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine gethostbyname
gethostbyname : ldaprs.mon.domaine   10.xxx.yyy.166  10.xxx.yyy.165
$  ./reso-dns ldaprs.mon.domaine gethostbyname
gethostbyname : ldaprs.mon.domaine   10.xxx.yyy.165  10.xxx.yyy.166
$  ./reso-dns ldaprs.mon.domaine gethostbyname
gethostbyname : ldaprs.mon.domaine   10.xxx.yyy.166  10.xxx.yyy.165

Note : xxx.yyy sont identique dans toutes les ip.

Cela semble correspondre à un problème de tri dans getaddrinfo... par contre
peut-être ai-je mal compris et qu'il ne rentre pas dans le cas du bug 438179.

> PS: ton mailer fait des lignes de 109213098 caractères et c'est un peu
> pénible.

Ha... J'essaye avec un autre webmail alors (je ne peux pas utiliser un client
"lourd" depuis mon boulot sur mes adresses free).

Julien
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>


int resolution_gethostbyname (char *s_srvname)
{
  int RC=0;
  int i;
  struct hostent *p_host;

  printf ("gethostbyname :\t%s\t", s_srvname);

  p_host = gethostbyname (s_srvname);

  for (i=0; (p_host!=NULL && p_host->h_addr_list[i]!=NULL); i++)
  {
    printf ("%s\t", inet_ntoa (*(struct in_addr*)p_host->h_addr_list[i]));
  }
  printf ("\n");

  return (RC);
}

int resolution_getaddrinfo (char *s_srvname)
{
  int RC=0;
  struct addrinfo *p_addrinfo,*p_next, hints;

  hints.ai_flags = 0;
  hints.ai_family = PF_UNSPEC;
  hints.ai_socktype = SOCK_DGRAM;
  hints.ai_protocol = 0;
  hints.ai_addrlen = 0;
  hints.ai_addr = NULL;
  hints.ai_canonname = NULL;
  hints.ai_next = NULL;

  printf ("getaddrinfo :\t%s\t", s_srvname);

  getaddrinfo (s_srvname, NULL, &hints, &p_addrinfo);

  p_next=p_addrinfo;
  while (p_next != NULL)
  {
    printf ("%s\t", inet_ntoa (((struct sockaddr_in*)p_next->ai_addr)->sin_addr));
    p_next=p_next->ai_next;
  }
  printf ("\n");

  return (RC);
}

int main (int argc, char **argv)
{
  int RC=0;
  char *s_srvname;

  if (argc <= 2 )
  {  
     printf ("Erreur arguments\n");
     RC=1;
  }
  else
  {
    s_srvname=(char*) malloc (strlen (argv[1])+1);
    strncpy (s_srvname, argv[1], strlen (argv[1]));

    if (strcmp ("getaddrinfo",argv[2]) == 0)
    { resolution_getaddrinfo (s_srvname); }
    else if (strcmp ("gethostbyname", argv[2]) == 0)
    { resolution_gethostbyname (s_srvname); }
    else
    { printf ("Erreur argument 1\n"); }
  }

  return (RC);
}

Reply to: