From 598c04eea2e44ead83ea157aafc217c1dcb5580e Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 5 Apr 2011 18:14:05 +0200 Subject: [PATCH] Add configure option to force retry on DNS failure This is apparently needed on system which keep nameservers specified in /etc/resolv.conf even when there is no network connection. Should be used with care as invalid names will be retried forever. --- configure | 10 ++++++++++ nameserv.c | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/configure b/configure index 8fe84b3..f3a9373 100755 --- a/configure +++ b/configure @@ -102,6 +102,7 @@ For better control, use the options below. --disable-pps Disable PPS API support --disable-rtc Don't include RTC even on Linux --disable-linuxcaps Disable Linux capabilities support + --enable-forcednsretry Force retry on DNS failure Fine tuning of the installation directories: --sysconfdir=DIR chrony.conf location [/etc] @@ -162,6 +163,7 @@ feat_ipv6=1 feat_pps=1 try_setsched=0 try_lockmem=0 +feat_forcednsretry=0 for option do @@ -226,6 +228,9 @@ do --disable-linuxcaps) feat_linuxcaps=0 ;; + --enable-forcednsretry) + feat_forcednsretry=1 + ;; --host-system=* ) OPERATINGSYSTEM=`echo $option | sed -e 's/^.*=//;'` ;; @@ -399,6 +404,11 @@ then SYSDEFS="${SYSDEFS} -DHAVE_MLOCKALL" fi +if [ $feat_forcednsretry = "1" ] +then + EXTRA_DEFS="$EXTRA_DEFS -DFORCE_DNSRETRY=1" +fi + READLINE_COMPILE="" READLINE_LINK="" if [ $feat_readline = "1" ]; then diff --git a/nameserv.c b/nameserv.c index 0e2d690..268ee2e 100644 --- a/nameserv.c +++ b/nameserv.c @@ -56,7 +56,11 @@ DNS_Name2IPAddress(const char *name, IPAddr *addr) result = getaddrinfo(name, NULL, &hints, &res); if (result) { +#ifdef FORCE_DNSRETRY + return DNS_TryAgain; +#else return result == EAI_AGAIN ? DNS_TryAgain : DNS_Failure; +#endif } for (ai = res; !result && ai != NULL; ai = ai->ai_next) { @@ -94,8 +98,13 @@ DNS_Name2IPAddress(const char *name, IPAddr *addr) return DNS_Success; } +#ifdef FORCE_DNSRETRY + return DNS_TryAgain; +#else return DNS_Failure; #endif + +#endif } /* ================================================== */