summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2021-01-15 12:33:18 +0100
committerlouiz’ <louiz@louiz.org>2021-01-15 12:33:18 +0100
commita4512cd3ae7294cf8872fd45e4b4783bddd48ec4 (patch)
treeab8f1fbecb90c9ffa5deca7fac89ef3e0384f20a
parent1b1b03b21b5e482dda75796b1287aa9bc6cfd847 (diff)
downloadbiboumi-a4512cd3ae7294cf8872fd45e4b4783bddd48ec4.tar.gz
biboumi-a4512cd3ae7294cf8872fd45e4b4783bddd48ec4.tar.bz2
biboumi-a4512cd3ae7294cf8872fd45e4b4783bddd48ec4.tar.xz
biboumi-a4512cd3ae7294cf8872fd45e4b4783bddd48ec4.zip
sasl: Use the nick from the presence if the ad-hoc one is not set
fix #3450
-rw-r--r--src/irc/irc_client.cpp3
-rw-r--r--tests/end_to_end/scenarios/sasl.py31
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<Database::Nick>() + '\0' + options.col<Database::SaslPassword>();
+ const auto& nick = !options.col<Database::Nick>().empty() ? options.col<Database::Nick>() : this->get_own_nick();
+ const auto auth_string = '\0' + nick + '\0' + options.col<Database::SaslPassword>();
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,16 +40,43 @@ scenario = (
send_stanza("<presence from='{jid_one}/{resource_one}' to='#foo%{irc_server_one}/RegisteredUser' type='unavailable' />"),
expect_stanza("/presence[@type='unavailable']"),
- # Configure an INCORRECT password
+ # Leave the same password, but remove the Nick
send_stanza("<iq type='set' id='id3' from='{jid_one}/{resource_one}' to='{irc_server_one}'><command xmlns='http://jabber.org/protocol/commands' node='configure' action='execute' /></iq>"),
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("<iq type='set' id='id4' from='{jid_one}/{resource_one}' to='{irc_server_one}'>"
"<command xmlns='http://jabber.org/protocol/commands' node='configure' sessionid='{sessionid}' action='complete'>"
"<x xmlns='jabber:x:data' type='submit'>"
+ "<field var='sasl_password'><value>P4SSW0RD</value></field>"
+ "<field var='ports'><value>6667</value></field>"
+ "<field var='nick'><value></value></field>"
+ "<field var='tls_ports'><value>6697</value><value>6670</value></field>"
+ "<field var='throttle_limit'><value>9999</value></field>"
+ "</x></command></iq>"),
+ 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 <presence/>
+ send_stanza("<presence from='{jid_one}/{resource_one}' to='#foo%{irc_server_one}/RegisteredUser' ><x xmlns='http://jabber.org/protocol/muc'/></presence>"),
+ 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("<presence from='{jid_one}/{resource_one}' to='#foo%{irc_server_one}/RegisteredUser' type='unavailable' />"),
+ expect_stanza("/presence[@type='unavailable']"),
+
+ # Configure an INCORRECT password
+ send_stanza("<iq type='set' id='id5' from='{jid_one}/{resource_one}' to='{irc_server_one}'><command xmlns='http://jabber.org/protocol/commands' node='configure' action='execute' /></iq>"),
+ 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("<iq type='set' id='id6' from='{jid_one}/{resource_one}' to='{irc_server_one}'>"
+ "<command xmlns='http://jabber.org/protocol/commands' node='configure' sessionid='{sessionid}' action='complete'>"
+ "<x xmlns='jabber:x:data' type='submit'>"
"<field var='sasl_password'><value>wrong wrong wrong</value></field>"
"<field var='ports'><value>6667</value></field>"
"<field var='nick'><value>RegisteredUser</value></field>"