From 32863554ab50dfee32a25e641399c31b7fe7357d Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Fri, 6 Jul 2012 13:33:54 +0000 Subject: [PATCH] dns: allow disable dns during compile time --- configure.in | 14 +++++++++---- dns.c | 65 ++++++++++++++++++++++++++++++++++++------------------------ mtr.c | 10 +++++++++- 3 files changed, 58 insertions(+), 31 deletions(-) diff --git a/configure.in b/configure.in index 8474543..1f53f74 100644 --- a/configure.in +++ b/configure.in @@ -72,10 +72,16 @@ AC_CHECK_FUNC(gethostbyname, , AC_CHECK_FUNCS(seteuid) # AC_CHECK_FUNC(setuid, , AC_MSG_ERROR (I Need either seteuid or setuid)) -AC_CHECK_FUNC(res_mkquery, , - AC_CHECK_LIB(bind, res_mkquery, , - AC_CHECK_LIB(resolv, res_mkquery, , - AC_CHECK_LIB(resolv, __res_mkquery, , AC_MSG_ERROR(No resolver library found))))) +AC_ARG_ENABLE([dns], AS_HELP_STRING([--disable-dns],[Disable use of DNS])) + +AS_IF([test "x$enable_dns" != "xno"], + AC_CHECK_FUNC(res_mkquery, , + AC_CHECK_LIB(bind, res_mkquery, , + AC_CHECK_LIB(resolv, res_mkquery, , + AC_CHECK_LIB(resolv, __res_mkquery, , AC_MSG_ERROR(No resolver library found))))), + [AC_DEFINE([NO_DNS], [1], [Disable use of DNS])] +) + # This next line would override the just detected-or-not -lresolv. # This apparently hurts BSD. And it's bad practise. So it should go. # However, it probably didn't get added for nothing..... Holler if diff --git a/dns.c b/dns.c index 512da97..e85fcb3 100644 --- a/dns.c +++ b/dns.c @@ -48,6 +48,7 @@ #include "mtr.h" #include "dns.h" #include "net.h" +#include "config.h" /* OSX Needs this. I don't know how to enable this for them automatically. * Should be easy with autoconf. Please submit a patch if you know @@ -58,6 +59,11 @@ #endif +extern int af; +int use_dns = 1; + +#ifndef NO_DNS + #ifdef NO_STRERROR extern int sys_nerr; extern char *sys_errlist[]; @@ -69,7 +75,6 @@ extern char *sys_errlist[]; extern int errno; #endif -extern int af; /* Defines */ @@ -307,8 +312,6 @@ char stackstring[1024+1]; char nullstring[] = ""; -int use_dns = 1; - #ifdef res_ninit #define MY_RES_INIT() res_ninit(&myres); #define RES_MKQUERY(a, b, c, d, e, f, g, h, i) \ @@ -451,18 +454,6 @@ void clearset(fd_set *set) } -char *strlongip(ip_t * ip) -{ -#ifdef ENABLE_IPV6 - static char buf[INET6_ADDRSTRLEN]; - - return (char *) inet_ntop( af, ip, buf, sizeof buf ); -#else - return inet_ntoa( *ip ); -#endif -} - - int longipstr( char *s, ip_t *dst, int af ) { #ifdef ENABLE_IPV6 @@ -473,17 +464,6 @@ int longipstr( char *s, ip_t *dst, int af ) } -struct hostent * dns_forward(const char *name) -{ - struct hostent *host; - - if ((host = gethostbyname(name))) - return host; - else - return NULL; -} - - int dns_waitfd(void) { return resfd; @@ -1397,6 +1377,39 @@ void addr2ip6arpa( ip_t * ip, char * buf ) { } #endif +#else /* NO_DNS */ +void dns_ack(void) {} +void dns_events(double *sinterval) {} +int dns_waitfd(void) { return 0; } +void dns_open(void) { use_dns = dns = 0; } +char *dns_lookup2(ip_t * ip) { return NULL; } +char *dns_lookup(ip_t * ip) { return strlongip (ip); } + +#endif /* NO_DNS */ + +struct hostent * dns_forward(const char *name) +{ + struct hostent *host; + + if ((host = gethostbyname(name))) + return host; + else + return NULL; +} + + +char *strlongip(ip_t * ip) +{ +#ifdef ENABLE_IPV6 + static char buf[INET6_ADDRSTRLEN]; + + return (char *) inet_ntop( af, ip, buf, sizeof buf ); +#else + return inet_ntoa( *ip ); +#endif +} + + /* Resolve an IP address to a hostname. */ struct hostent *addr2host( const char *addr, int af ) { int len = 0; diff --git a/mtr.c b/mtr.c index 5f1b651..1fc3873 100644 --- a/mtr.c +++ b/mtr.c @@ -143,7 +143,9 @@ void parse_arg (int argc, char **argv) { "bitpattern", 1, 0, 'b' },/* overload b>255, ->rand(0,255) */ { "tos", 1, 0, 'Q' }, /* typeof service (0,255) */ { "mpls", 0, 0, 'e' }, +#ifndef NO_DNS { "no-dns", 0, 0, 'n' }, +#endif { "address", 1, 0, 'a' }, { "first-ttl", 1, 0, 'f' }, /* -f & -m are borrowed from traceroute */ { "max-ttl", 1, 0, 'm' }, @@ -204,9 +206,11 @@ void parse_arg (int argc, char **argv) case 'e': enablempls = 1; break; +#ifndef NO_DNS case 'n': dns = 0; break; +#endif case 'i': WaitTime = atof (optarg); if (WaitTime <= 0.0) { @@ -382,7 +386,11 @@ int main(int argc, char **argv) if (PrintHelp) { printf("usage: %s [-hvrwctglspniu46] [--help] [--version] [--report]\n" "\t\t[--report-wide] [--report-cycles=COUNT] [--curses] [--gtk]\n" - "\t\t[--raw] [--split] [--mpls] [--no-dns] [--address interface]\n" /* BL */ + "\t\t[--raw] [--split] [--mpls] " +#ifndef NO_DNS + "[--no-dns] " +#endif + "[--address interface]\n" /* BL */ "\t\t[--psize=bytes/-s bytes]\n" /* ok */ "\t\t[--report-wide|-w] [-u]\n" /* rew */ "\t\t[--interval=SECONDS] HOSTNAME [PACKETSIZE]\n", argv[0]); -- 1.7.11.1