From a4512cd3ae7294cf8872fd45e4b4783bddd48ec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Fri, 15 Jan 2021 12:33:18 +0100 Subject: sasl: Use the nick from the presence if the ad-hoc one is not set fix #3450 --- src/irc/irc_client.cpp | 3 ++- tests/end_to_end/scenarios/sasl.py | 31 +++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/irc/irc_client.cpp b/src/irc/irc_client.cpp index 1f2a21b..8a64727 100644 --- a/src/irc/irc_client.cpp +++ b/src/irc/irc_client.cpp @@ -1371,7 +1371,8 @@ void IrcClient::on_authenticate(const IrcMessage &) auto options = Database::get_irc_server_options(this->bridge.get_bare_jid(), this->get_hostname()); - const auto auth_string = '\0' + options.col() + '\0' + options.col(); + const auto& nick = !options.col().empty() ? options.col() : this->get_own_nick(); + const auto auth_string = '\0' + nick + '\0' + options.col(); const auto base64_auth_string = base64::encode(auth_string); this->send_message({"AUTHENTICATE", {base64_auth_string}}); } diff --git a/tests/end_to_end/scenarios/sasl.py b/tests/end_to_end/scenarios/sasl.py index b3cc62d..9f2a27a 100644 --- a/tests/end_to_end/scenarios/sasl.py +++ b/tests/end_to_end/scenarios/sasl.py @@ -40,14 +40,41 @@ scenario = ( send_stanza(""), expect_stanza("/presence[@type='unavailable']"), - # Configure an INCORRECT password + # Leave the same password, but remove the Nick send_stanza(""), expect_stanza("/iq[@type='result']/commands:command[@node='configure'][@sessionid][@status='executing']", "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-private'][@var='sasl_password']", after = save_value("sessionid", extract_attribute("/iq[@type='result']/commands:command[@node='configure']", "sessionid"))), - send_stanza("" + "" + "" + "P4SSW0RD" + "6667" + "" + "66976670" + "9999" + ""), + expect_stanza("/iq[@type='result']/commands:command[@node='configure'][@status='completed']/commands:note[@type='info'][text()='Configuration successfully applied.']"), + + # Joining a channel with the associated nick will work, it will use the one from our + send_stanza(""), + sequences.connection(login="RegisteredUser"), + expect_stanza("/presence"), + expect_stanza("/message/subject"), + + # Leave the channel and disconnect from the server to try again differently + send_stanza(""), + expect_stanza("/presence[@type='unavailable']"), + + # Configure an INCORRECT password + send_stanza(""), + expect_stanza("/iq[@type='result']/commands:command[@node='configure'][@sessionid][@status='executing']", + "/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-private'][@var='sasl_password']", + after = save_value("sessionid", extract_attribute("/iq[@type='result']/commands:command[@node='configure']", "sessionid"))), + + + send_stanza("" "" "" "wrong wrong wrong" -- cgit v1.2.3