summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGert Doering <gert@greenie.muc.de>2015-05-31 15:59:09 +0200
committerGert Doering <gert@greenie.muc.de>2015-06-02 09:39:05 +0200
commit4e7eb95e43f0daed79e25e0ad6a9a20705b57376 (patch)
treed43a5e3a3602bfb1587dca22da5dd8952906376d /src
parent5502af840205a8a9342600385fcd4ef2919073ba (diff)
downloadopenvpn-4e7eb95e43f0daed79e25e0ad6a9a20705b57376.tar.gz
openvpn-4e7eb95e43f0daed79e25e0ad6a9a20705b57376.tar.xz
openvpn-4e7eb95e43f0daed79e25e0ad6a9a20705b57376.zip
Move res_init() call to inner openvpn_getaddrinfo() loop
A non-working nameserver in /etc/resolv.conf could lead to endless loops inside openvpn_getaddrinfo(), because many systems will only pick up changes to resolv.conf if res_init() is called again. To reproduce, run openvpn with --resolv-retry infinite (2.3) or --resolv-retry "a high number" (master) on a BSD system. Linux glibc seems to stat() resolv.conf on calls to getaddrinfo() and pick up changes automatically. Trac #523 Signed-off-by: Gert Doering <gert@greenie.muc.de> Acked-by: Arne Schwabe <arne@rfc2549.org> Message-Id: <1433080749-6892-1-git-send-email-gert@greenie.muc.de> URL: http://article.gmane.org/gmane.network.openvpn.devel/9763 (cherry picked from commit 288a819af7d3a6fab9e0b69ae8dbaac74b36307b)
Diffstat (limited to 'src')
-rw-r--r--src/openvpn/socket.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c
index a604e31..0424c0b 100644
--- a/src/openvpn/socket.c
+++ b/src/openvpn/socket.c
@@ -137,10 +137,6 @@ openvpn_getaddrinfo (unsigned int flags,
ASSERT(res);
-#ifndef WIN32
- res_init ();
-#endif
-
if (!hostname)
hostname = "::";
@@ -197,6 +193,9 @@ openvpn_getaddrinfo (unsigned int flags,
*/
while (true)
{
+#ifndef WIN32
+ res_init ();
+#endif
/* try hostname lookup */
hints.ai_flags = 0;
dmsg (D_SOCKET_DEBUG, "GETADDRINFO flags=0x%04x ai_family=%d ai_socktype=%d",