summaryrefslogtreecommitdiff
path: root/src/fe-common/irc
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2016-07-12 13:59:46 +0200
committerLemonBoy <thatlemon@gmail.com>2016-12-12 21:41:06 +0100
commit91c9e871c78e203aed834edd1e1f558680a6ccfa (patch)
treed0136017e7f33ae84dd4d2cc5f4f36a3519bd505 /src/fe-common/irc
parent955cf622a558022fbd952e07b7462206743562e8 (diff)
downloadirssi-91c9e871c78e203aed834edd1e1f558680a6ccfa.zip
Add an option to stop the connection when SASL fails.
Diffstat (limited to 'src/fe-common/irc')
-rw-r--r--src/fe-common/irc/fe-sasl.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/fe-common/irc/fe-sasl.c b/src/fe-common/irc/fe-sasl.c
index 331b38b0..dfbfc84a 100644
--- a/src/fe-common/irc/fe-sasl.c
+++ b/src/fe-common/irc/fe-sasl.c
@@ -23,6 +23,9 @@
#include "signals.h"
#include "levels.h"
+#include "irc-servers.h"
+#include "settings.h"
+
#include "printtext.h"
static void sig_sasl_success(IRC_SERVER_REC *server)
@@ -35,14 +38,28 @@ static void sig_sasl_failure(IRC_SERVER_REC *server, const char *reason)
printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_SASL_ERROR, reason);
}
+static void sig_cap_end(IRC_SERVER_REC *server)
+{
+ /* The negotiation has now been terminated, if we didn't manage to
+ * authenticate successfully with the server just disconnect. */
+ if (server->sasl_success == FALSE &&
+ settings_get_bool("sasl_disconnect_on_failure"))
+ server_disconnect(SERVER(server));
+
+}
+
void fe_sasl_init(void)
{
+ settings_add_bool("server", "sasl_disconnect_on_failure", TRUE);
+
signal_add("server sasl success", (SIGNAL_FUNC) sig_sasl_success);
signal_add("server sasl failure", (SIGNAL_FUNC) sig_sasl_failure);
+ signal_add_first("server cap end", (SIGNAL_FUNC) sig_cap_end);
}
void fe_sasl_deinit(void)
{
signal_remove("server sasl success", (SIGNAL_FUNC) sig_sasl_success);
signal_remove("server sasl failure", (SIGNAL_FUNC) sig_sasl_failure);
+ signal_remove("server cap end", (SIGNAL_FUNC) sig_cap_end);
}