summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorRaghavendra Prabhu <me@rdprabhu.com>2016-08-06 01:52:06 +0100
committerRaghavendra D Prabhu <rprabhu@yelp.com>2016-08-07 13:20:54 +0100
commit761c5e2d112acc01bb8a779ca2678baf37ecfdf8 (patch)
treecd5a72dd16a44c24db92d1806a90dd583f347e60 /src/plugins
parenteff8d3f3fb1b77dcaaa2d8799cbb6c528ed33eb8 (diff)
downloadweechat-761c5e2d112acc01bb8a779ca2678baf37ecfdf8.zip
core/plugins: Use res_init before getaddrinfo.
With weechat, if the network changes in anyway that causes resolv.conf to be updated, that is not picked up, resulting in irc: connecting to server XXXX.com/1026 (SSL)... irc: address "XXX.com" not found irc: error: Name or service not known irc: reconnecting to server in 30 seconds This happens, especially when one connects to an irc server behind a VPN. This can also happen when there is no network connectivity weechat was started but later network is connected to. The fix is simple, it relies on calling res_init (3) before getaddrinfo in network_connect_child and other places. res_init reloads the resolv.conf and getaddrinfo does not fail with address resolution error.
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/irc/irc-server.c4
-rw-r--r--src/plugins/xfer/xfer.c3
2 files changed, 6 insertions, 1 deletions
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index 0f35155ba..a2ec91220 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -38,6 +38,7 @@
#endif /* _WIN32 */
#include <sys/types.h>
#include <netdb.h>
+#include <resolv.h>
#include <arpa/inet.h>
#include <netinet/in.h>
@@ -5132,7 +5133,8 @@ irc_server_xfer_send_ready_cb (const void *pointer, void *data,
"local_address");
if (local_address)
{
- rc = getaddrinfo (local_address, NULL, NULL, &ainfo);
+ if ((rc = res_init()) == 0)
+ rc = getaddrinfo (local_address, NULL, NULL, &ainfo);
if ((rc == 0) && ainfo && ainfo->ai_addr)
{
if (ainfo->ai_family == AF_INET)
diff --git a/src/plugins/xfer/xfer.c b/src/plugins/xfer/xfer.c
index 25b855124..d01b457b9 100644
--- a/src/plugins/xfer/xfer.c
+++ b/src/plugins/xfer/xfer.c
@@ -30,6 +30,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
+#include <resolv.h>
#include <gcrypt.h>
#include <arpa/inet.h>
@@ -966,6 +967,8 @@ xfer_resolve_addr (const char *str_address, const char *str_port,
hints.ai_addr = NULL;
hints.ai_next = NULL;
+ if (res_init() != 0)
+ return 0;
rc = getaddrinfo (str_address, str_port, &hints, &ainfo);
if ((rc == 0) && ainfo && ainfo->ai_addr)
{