diff --git a/src/irc/core/irc-servers-setup.c b/src/irc/core/irc-servers-setup.c index a575ee34..2d94a48b 100644 --- a/src/irc/core/irc-servers-setup.c +++ b/src/irc/core/irc-servers-setup.c @@ -148,8 +148,11 @@ static void sig_server_setup_fill_chatnet(IRC_SERVER_CONNECT_REC *conn, "missing or empty"); } else if (!g_ascii_strcasecmp(ircnet->sasl_mechanism, "external")) { conn->sasl_mechanism = SASL_MECHANISM_EXTERNAL; - } else - g_warning("Unsupported SASL mechanism \"%s\" selected", ircnet->sasl_mechanism); + } else { + g_warning("Unsupported SASL mechanism \"%s\" selected", + ircnet->sasl_mechanism); + conn->sasl_mechanism = SASL_MECHANISM_MAX; + } } } diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 29f63c21..e3fe3143 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -475,6 +475,7 @@ SERVER_REC *irc_server_init_connect(SERVER_CONNECT_REC *conn) server->send_message = send_message; server->query_find_func = (QUERY_REC * (*) (SERVER_REC *, const char *) ) irc_query_find; server->nick_comp_func = irc_nickcmp_rfc1459; + server->sasl_success = FALSE; server_connect_init((SERVER_REC *) server); return (SERVER_REC *) server; diff --git a/src/irc/core/sasl.c b/src/irc/core/sasl.c index 1695fc4c..89ca4a9e 100644 --- a/src/irc/core/sasl.c +++ b/src/irc/core/sasl.c @@ -92,6 +92,12 @@ static void sasl_start(IRC_SERVER_REC *server, const char *data, const char *fro case SASL_MECHANISM_SCRAM_SHA_512: irc_send_cmd_now(server, "AUTHENTICATE SCRAM-SHA-512"); break; + + case SASL_MECHANISM_MAX: + signal_emit("server sasl failure", 2, server, + "Irssi: Unsupported SASL mechanism"); + irc_cap_finish_negotiation(server); + return; } server->sasl_timeout = g_timeout_add(SASL_TIMEOUT, (GSourceFunc) sasl_timeout, server); }