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)
{
if (iid.type == Iid::Type::Server)
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;
else
{
error_name = "feature-not-implemented";
return;
}
}
// Execute the command, if any, and get a result XmlNode that we
// insert in our response
......@@ -495,7 +500,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
stanza_error.disable();
}
}
else if (iid.type == Iid::Type::Channel)
else if (iid.type == Iid::Type::Channel && to.resource.empty())
{
if (node.empty())
{
......@@ -554,7 +559,7 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
this->irc_server_adhoc_commands_handler);
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
this->send_adhoc_commands_list(id, from, to_str,
(Config::get("admin", "") ==
......@@ -562,6 +567,8 @@ void BiboumiComponent::handle_iq(const Stanza& stanza)
this->irc_channel_adhoc_commands_handler);
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)
{ // Disco on an IRC server: get the list of channels
......@@ -784,7 +791,7 @@ bool BiboumiComponent::handle_room_configuration_form_request(const std::string&
{
Iid iid(to.local, {'#', '&'});
if (iid.type != Iid::Type::Channel)
if (iid.type != Iid::Type::Channel || !to.resource.empty())
return false;
Stanza iq("iq");
......@@ -806,7 +813,7 @@ bool BiboumiComponent::handle_room_configuration_form(const XmlNode& query, cons
{
Iid iid(to.local, {'#', '&'});
if (iid.type != Iid::Type::Channel)
if (iid.type != Iid::Type::Channel || !to.resource.empty())
return false;
Jid requester(from);
......
......@@ -909,7 +909,13 @@ if __name__ == '__main__':
partial(expect_stanza, ("/iq[@type='result']/disco_items:query[@node='http://jabber.org/protocol/commands']",
"/iq/disco_items:query/disco_items:item[6]")),
], 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",
[
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