dnstracer.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. Index: dnstracer.c
  2. --- dnstracer.c.orig 2004-07-08 13:17:59.000000000 +0200
  3. +++ dnstracer.c 2004-10-08 13:46:54.091634581 +0200
  4. @@ -642,7 +642,11 @@
  5. get_resource(rr->type,session,rr->data,0));
  6. }
  7. +#ifdef NOIPV6
  8. +void dump_data(struct sockaddr_in *dest4,void *dest6,struct dnssession *session) {
  9. +#else
  10. void dump_data(struct sockaddr_in *dest4,struct sockaddr_in6 *dest6,struct dnssession *session) {
  11. +#endif
  12. struct dnsrr *answerrr;
  13. struct dnsrr *authorityrr;
  14. struct dnsrr *additionalrr;
  15. @@ -758,6 +762,7 @@
  16. exit(1);
  17. }
  18. +#if defined(AI_NUMERICHOST) && defined(EAI_NODATA)
  19. if (global_source_address!=NULL) {
  20. struct addrinfo hints,*src_res;
  21. int error;
  22. @@ -784,6 +789,7 @@
  23. exit(1);
  24. }
  25. }
  26. +#endif
  27. return s;
  28. }
  29. @@ -1048,6 +1054,25 @@
  30. /*****************************************************************************/
  31. +static char *my_strcasestr(const char *s, const char *find)
  32. +{
  33. + char c, sc;
  34. + size_t len;
  35. +
  36. + if ((c = *find++) != 0) {
  37. + c = tolower((unsigned char)c);
  38. + len = strlen(find);
  39. + do {
  40. + do {
  41. + if ((sc = *s++) == 0)
  42. + return (NULL);
  43. + } while ((char)tolower((unsigned char)sc) != c);
  44. + } while (strncasecmp(s, find, len) != 0);
  45. + s--;
  46. + }
  47. + return ((char *)s);
  48. +}
  49. +
  50. //
  51. // The core of this program
  52. //
  53. @@ -1123,7 +1148,11 @@
  54. // don't have to worry about packets received from previous sessions.
  55. //
  56. session=(struct dnssession *)calloc(1,sizeof(struct dnssession));
  57. +#ifdef NOIPV6
  58. + session->socket=create_socket(AF_INET);
  59. +#else
  60. session->socket=create_socket(ipv6?AF_INET6:AF_INET);
  61. +#endif
  62. session->ipv6=ipv6;
  63. session->server=strdup(server_ip);
  64. session->host=strdup(host);
  65. @@ -1233,7 +1262,7 @@
  66. }
  67. if (server_authfor!=NULL && strcmp(server_authfor,".")!=0 &&
  68. - (unsigned char *)strcasestr(rrauth->domainname_string,server_authfor)!=rrauth->domainname_string+strlen(rrauth->domainname_string)-strlen(server_authfor)) {
  69. + (unsigned char *)my_strcasestr(rrauth->domainname_string,server_authfor)!=rrauth->domainname_string+strlen(rrauth->domainname_string)-strlen(server_authfor)) {
  70. if (!refersbackwards++)
  71. printf("Refers backwards ");
  72. rrauth=rrauth->next;
  73. @@ -1300,7 +1329,11 @@
  74. struct hostent *h;
  75. char **addr_list=NULL;
  76. +#ifndef NOIPV6
  77. h=gethostbyname2(nextserver_name,ip==0?AF_INET:AF_INET6);
  78. +#else
  79. + h=gethostbyname(nextserver_name);
  80. +#endif
  81. if (h==NULL) continue;
  82. //
  83. @@ -1540,8 +1573,12 @@
  84. {
  85. struct hostent *h;
  86. +#ifndef NOIPV6
  87. if (((h=gethostbyname2(server_name,AF_INET6))==NULL) &&
  88. ((h=gethostbyname2(server_name,AF_INET))==NULL)) {
  89. +#else
  90. + if ((h=gethostbyname(server_name))==NULL) {
  91. +#endif
  92. fprintf(stderr,"Cannot find IP address for %s\n",server_name);
  93. return 1;
  94. }