From 60a68720211304bb62936be68e8ad40f58ca8a85 Mon Sep 17 00:00:00 2001 From: w00t Date: Sat, 1 Aug 2009 21:05:06 +0000 Subject: Reconnect to LDAP server if connection goes away, fixes bug #818. NOTE: I don't have an LDAP setup, so I'm totally in the blind on these commits. Sorry, but it seems nobody else can be arsed to do it, so I will. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11448 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/extra/m_ldapoper.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/modules/extra/m_ldapoper.cpp') diff --git a/src/modules/extra/m_ldapoper.cpp b/src/modules/extra/m_ldapoper.cpp index 43525aa4d..c46bdcf0d 100644 --- a/src/modules/extra/m_ldapoper.cpp +++ b/src/modules/extra/m_ldapoper.cpp @@ -127,10 +127,22 @@ public: if ((res = ldap_sasl_bind_s(conn, username.c_str(), LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL)) != LDAP_SUCCESS) { - free(authpass); - ldap_unbind_ext(conn, NULL, NULL); - conn = NULL; - return false; + if (res == LDAP_SERVER_DOWN) + { + // Attempt to reconnect if the connection dropped + if (verbose) + ServerInstance->SNO->WriteToSnomask('a', "LDAP server has gone away - reconnecting..."); + Connect(); + res = ldap_sasl_bind_s(conn, username.c_str(), LDAP_SASL_SIMPLE, &cred, NULL, NULL, NULL); + } + + if (res != LDAP_SUCCESS) + { + free(authpass); + ldap_unbind_ext(conn, NULL, NULL); + conn = NULL; + return false; + } } free(authpass); -- cgit v1.3.1-10-gc9f91