This forces resolv.conf to be re-read every time a connection is made instead of only if NetworkManager establishes a new connection. This prevents some error cases for roving clients, especially if they do not use NetworkManager. diff -urN pidgin-2.5.3.orig/libpurple/connection.c pidgin-2.5.3/libpurple/connection.c --- pidgin-2.5.3.orig/libpurple/connection.c 2008-12-20 19:38:16.000000000 -0500 +++ pidgin-2.5.3/libpurple/connection.c 2008-12-26 16:55:32.000000000 -0500 @@ -42,6 +42,10 @@ #define KEEPALIVE_INTERVAL 30 +#include +#include +#include + static GList *connections = NULL; static GList *connections_connecting = NULL; static PurpleConnectionUiOps *connection_ui_ops = NULL; @@ -161,6 +165,9 @@ purple_signal_emit(purple_connections_get_handle(), "signing-on", gc); + /* Re-read resolv.conf and friends in case DNS servers have changed */ + res_init(); + if (regist) { purple_debug_info("connection", "Registering. gc = %p\n", gc); diff -urN pidgin-2.5.3.orig/libpurple/network.c pidgin-2.5.3/libpurple/network.c --- pidgin-2.5.3.orig/libpurple/network.c 2008-12-20 19:38:16.000000000 -0500 +++ pidgin-2.5.3/libpurple/network.c 2008-12-26 16:55:32.000000000 -0500 @@ -633,8 +633,6 @@ switch(state) { case NM_STATE_CONNECTED: - /* Call res_init in case DNS servers have changed */ - res_init(); if (ui_ops != NULL && ui_ops->network_connected != NULL) ui_ops->network_connected(); break;