diff options
author | LemonBoy <thatlemon@gmail.com> | 2016-07-12 13:59:46 +0200 |
---|---|---|
committer | LemonBoy <thatlemon@gmail.com> | 2016-12-12 21:41:06 +0100 |
commit | 91c9e871c78e203aed834edd1e1f558680a6ccfa (patch) | |
tree | d0136017e7f33ae84dd4d2cc5f4f36a3519bd505 /src/fe-common/irc | |
parent | 955cf622a558022fbd952e07b7462206743562e8 (diff) | |
download | irssi-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.c | 17 |
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); } |