Commit 2d9f516d authored by louiz’'s avatar louiz’

Don’t answer to some requests towards MUC participants

These requests are only meant to be received by the room itself. The
participant must answer with not-implemented instead.

fix #3323
parent e4122880
...@@ -444,8 +444,13 @@ void BiboumiComponent::handle_iq(const Stanza& stanza) ...@@ -444,8 +444,13 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
{ {
if (iid.type == Iid::Type::Server) if (iid.type == Iid::Type::Server)
adhoc_handler = &this->irc_server_adhoc_commands_handler; adhoc_handler = &this->irc_server_adhoc_commands_handler;
else else if (iid.type == Iid::Type::Channel && to.resource.empty())
adhoc_handler = &this->irc_channel_adhoc_commands_handler; adhoc_handler = &this->irc_channel_adhoc_commands_handler;
else
{
error_name = "feature-not-implemented";
return;
}
} }
// Execute the command, if any, and get a result XmlNode that we // Execute the command, if any, and get a result XmlNode that we
// insert in our response // insert in our response
...@@ -495,7 +500,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza) ...@@ -495,7 +500,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
stanza_error.disable(); stanza_error.disable();
} }
} }
else if (iid.type == Iid::Type::Channel) else if (iid.type == Iid::Type::Channel && to.resource.empty())
{ {
if (node.empty()) if (node.empty())
{ {
...@@ -554,7 +559,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza) ...@@ -554,7 +559,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
this->irc_server_adhoc_commands_handler); this->irc_server_adhoc_commands_handler);
stanza_error.disable(); stanza_error.disable();
} }
else if (iid.type == Iid::Type::Channel) else if (iid.type == Iid::Type::Channel && to.resource.empty())
{ // Get the channel's adhoc commands { // Get the channel's adhoc commands
this->send_adhoc_commands_list(id, from, to_str, this->send_adhoc_commands_list(id, from, to_str,
(Config::get("admin", "") == (Config::get("admin", "") ==
...@@ -562,6 +567,8 @@ void BiboumiComponent::handle_iq(const Stanza& stanza) ...@@ -562,6 +567,8 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
this->irc_channel_adhoc_commands_handler); this->irc_channel_adhoc_commands_handler);
stanza_error.disable(); stanza_error.disable();
} }
else // “to” is a MUC user, not the room itself
error_name = "feature-not-implemented";
} }
else if (node.empty() && iid.type == Iid::Type::Server) else if (node.empty() && iid.type == Iid::Type::Server)
{ // Disco on an IRC server: get the list of channels { // Disco on an IRC server: get the list of channels
...@@ -784,7 +791,7 @@ bool BiboumiComponent::handle_room_configuration_form_request(const std::string& ...@@ -784,7 +791,7 @@ bool BiboumiComponent::handle_room_configuration_form_request(const std::string&
{ {
Iid iid(to.local, {'#', '&'}); Iid iid(to.local, {'#', '&'});
if (iid.type != Iid::Type::Channel) if (iid.type != Iid::Type::Channel || !to.resource.empty())
return false; return false;
Stanza iq("iq"); Stanza iq("iq");
...@@ -806,7 +813,7 @@ bool BiboumiComponent::handle_room_configuration_form(const XmlNode& query, cons ...@@ -806,7 +813,7 @@ bool BiboumiComponent::handle_room_configuration_form(const XmlNode& query, cons
{ {
Iid iid(to.local, {'#', '&'}); Iid iid(to.local, {'#', '&'});
if (iid.type != Iid::Type::Channel) if (iid.type != Iid::Type::Channel || !to.resource.empty())
return false; return false;
Jid requester(from); Jid requester(from);
......
...@@ -909,7 +909,13 @@ if __name__ == '__main__': ...@@ -909,7 +909,13 @@ if __name__ == '__main__':
partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']", partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
"/iq/disco_items:query/disco_items:item[6]")), "/iq/disco_items:query/disco_items:item[6]")),
], conf='fixed_server'), ], conf='fixed_server'),
Scenario("list_muc_user_adhoc",
[
handshake_sequence(),
partial(send_stanza, "<iq type='get' id='idwhatever' from='{jid_admin}/{resource_one}' to='#foo%{irc_server_one}/{nick_one}'><query xmlns='http://jabber.org/protocol/disco#items' node='http://jabber.org/protocol/commands' /></iq>"),
partial(expect_stanza, "/iq[@type='error']/error[@type='cancel']/stanza:feature-not-implemented"),
]
),
Scenario("execute_hello_adhoc_command", Scenario("execute_hello_adhoc_command",
[ [
handshake_sequence(), handshake_sequence(),
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment