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: