Gethostbyaddr -> segmentation fault

Fermé
Laurent - 6 mai 2003 à 10:29
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 - 7 mai 2003 à 13:02
Salut !
Je travaille sur une appli qui est en fait une sonde qui capte les paquets et qui les traite selon une politique de securite.
voici une des mes fonctions :
/*------------------------------------------------------------------------------
Name : netLogUdpDatagramme : log des datagrammes UDP
Syntaxe : long netLogUdpDatagramme( struct udphdr *udp_hdr, struct ctx_t *ctx, char *errmsg)
Description :
Input : udp_hdr = pointeur sur la trame udp
ctx = pointeur sur le contexte de communication
Output : errmsg = pointeur sur le message d'erreur
Return : 0 = OK
-1 = PB status inconnu
---------------------------------------------------------------------------------*/
#undef FUNCT
#define FUNCT "netLogUdpDatagramme()"
long
netLogUdpDatagramme (struct msg_syslog msglog, struct udphdr *udp_hdr,
struct ctx_t *ctx, char *errmsg)
{
struct in_addr ip_src, ip_dst;
struct hostent *sd_id = NULL;
char srcipname[255] = "", dstipname[255] = "";
char srcname[255] = "", dstname[255] = "";
char buff[255] = "";

ip_src.s_addr = ctx->ip_src;
printf("ah comprend pas quand meme\n");

/*CA PLANTE ICI*/sd_id = gethostbyaddr ((char *) &ip_src.s_addr, sizeof (ip_src.s_addr),AF_INET);
strncpy (srcipname, inet_ntoa (ip_src), 250);
if (sd_id)
strncpy (srcname, sd_id->h_name, 250);
else
strncpy (srcname, srcipname, 250);

ip_dst.s_addr = ctx->ip_dst;
/*ICI AUSSI*/ sd_id = gethostbyaddr ((char *) &ip_dst.s_addr, sizeof (ip_dst.s_addr),AF_INET);

strncpy (dstipname, inet_ntoa (ip_dst), 250);
if (sd_id)
strncpy (dstname, sd_id->h_name, 250);
else
strncpy (dstname, dstipname, 250);

if (netUdpMessageDecode (ntohs (udp_hdr->source), buff) < 0) {
if (netUdpMessageDecode (ntohs (udp_hdr->dest), buff) < 0)
sprintf (buff, "Unknown UDP service %d %d",
ntohs (udp_hdr->source), ntohs (udp_hdr->dest));
}

if (SyslogMode == 1)
Notify (msglog, ctx);

return (0);
}

J'obtiens un segmentation fault au niveau des appels a gethostbyaddr. la signature de la fonction est bien respectee, les types sont ok. je suis sous redhat 8.0, kernel 2.4.18-14
je ne comprends pas.
si quelqu'un a une idee.

2 réponses

personne n'a d'idée ?
0
batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
7 mai 2003 à 13:02
J'ai entendu parlé d'un pb de stockage de chaine statique pour gethostbyname, qui peut poser des pbs à l'arrivée de signaux (voir Linux magazine, mais je sais plus trop si c'est le dernier puisque je suis en train de les relire) => pb peut-être aussi avec gethostbyaddr ?!?

(Dsl j'essaie hein, j'ai pas fait de prog système depuis un an ! ;-p )

@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0