Index: dnstracer.c --- dnstracer.c.orig 2004-07-08 13:17:59.000000000 +0200 +++ dnstracer.c 2004-10-08 13:46:54.091634581 +0200 @@ -642,7 +642,11 @@ get_resource(rr->type,session,rr->data,0)); } +#ifdef NOIPV6 +void dump_data(struct sockaddr_in *dest4,void *dest6,struct dnssession *session) { +#else void dump_data(struct sockaddr_in *dest4,struct sockaddr_in6 *dest6,struct dnssession *session) { +#endif struct dnsrr *answerrr; struct dnsrr *authorityrr; struct dnsrr *additionalrr; @@ -758,6 +762,7 @@ exit(1); } +#if defined(AI_NUMERICHOST) && defined(EAI_NODATA) if (global_source_address!=NULL) { struct addrinfo hints,*src_res; int error; @@ -784,6 +789,7 @@ exit(1); } } +#endif return s; } @@ -1048,6 +1054,25 @@ /*****************************************************************************/ +static char *my_strcasestr(const char *s, const char *find) +{ + char c, sc; + size_t len; + + if ((c = *find++) != 0) { + c = tolower((unsigned char)c); + len = strlen(find); + do { + do { + if ((sc = *s++) == 0) + return (NULL); + } while ((char)tolower((unsigned char)sc) != c); + } while (strncasecmp(s, find, len) != 0); + s--; + } + return ((char *)s); +} + // // The core of this program // @@ -1123,7 +1148,11 @@ // don't have to worry about packets received from previous sessions. // session=(struct dnssession *)calloc(1,sizeof(struct dnssession)); +#ifdef NOIPV6 + session->socket=create_socket(AF_INET); +#else session->socket=create_socket(ipv6?AF_INET6:AF_INET); +#endif session->ipv6=ipv6; session->server=strdup(server_ip); session->host=strdup(host); @@ -1233,7 +1262,7 @@ } if (server_authfor!=NULL && strcmp(server_authfor,".")!=0 && - (unsigned char *)strcasestr(rrauth->domainname_string,server_authfor)!=rrauth->domainname_string+strlen(rrauth->domainname_string)-strlen(server_authfor)) { + (unsigned char *)my_strcasestr(rrauth->domainname_string,server_authfor)!=rrauth->domainname_string+strlen(rrauth->domainname_string)-strlen(server_authfor)) { if (!refersbackwards++) printf("Refers backwards "); rrauth=rrauth->next; @@ -1300,7 +1329,11 @@ struct hostent *h; char **addr_list=NULL; +#ifndef NOIPV6 h=gethostbyname2(nextserver_name,ip==0?AF_INET:AF_INET6); +#else + h=gethostbyname(nextserver_name); +#endif if (h==NULL) continue; // @@ -1540,8 +1573,12 @@ { struct hostent *h; +#ifndef NOIPV6 if (((h=gethostbyname2(server_name,AF_INET6))==NULL) && ((h=gethostbyname2(server_name,AF_INET))==NULL)) { +#else + if ((h=gethostbyname(server_name))==NULL) { +#endif fprintf(stderr,"Cannot find IP address for %s\n",server_name); return 1; }