aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2018-12-20 14:45:22 +0100
committerKim Alvefur <zash@zash.se>2018-12-20 14:45:22 +0100
commit63098950d9ca542a610ca1c0a13ef6a31c8366af (patch)
tree5bc623da7ae38b50135ffd7bec377f4997a6a98b
parent69c132f765a650e6fdf985f97c86bef613732d4e (diff)
downloadprosody-63098950d9ca542a610ca1c0a13ef6a31c8366af.tar.gz
prosody-63098950d9ca542a610ca1c0a13ef6a31c8366af.zip
MUC: Allow changing data attached to an only owner (fixes #1273)
This previously prevented a single owner from setting their own nickname via admin query. The form method uses `true` as actor so it bypasses this check.
-rw-r--r--plugins/muc/muc.lib.lua2
-rw-r--r--spec/scansion/muc_register.scs22
2 files changed, 23 insertions, 1 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 96cd0ffa..ef2054b1 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -1254,7 +1254,7 @@ function room_mt:set_affiliation(actor, jid, affiliation, reason, data)
else
local actor_affiliation = self:get_affiliation(actor);
if actor_affiliation == "owner" then
- if jid_bare(actor) == jid then -- self change
+ if jid_bare(actor) == jid and is_downgrade then -- self change
-- need at least one owner
local is_last = true;
for j in self:each_affiliation("owner") do
diff --git a/spec/scansion/muc_register.scs b/spec/scansion/muc_register.scs
index 98af33f1..e1eaf4e0 100644
--- a/spec/scansion/muc_register.scs
+++ b/spec/scansion/muc_register.scs
@@ -504,3 +504,25 @@ Rosaline receives:
<status xmlns='http://jabber.org/protocol/muc#user' code='110'/>
</x>
</presence>
+
+# Romeo sets their their own nickname via admin query (see #1273)
+Romeo sends:
+ <iq to="room@conference.localhost" id="reserve" type="set">
+ <query xmlns="http://jabber.org/protocol/muc#admin">
+ <item nick="Romeo" affiliation="owner" jid="${Romeo's JID}"/>
+ </query>
+ </iq>
+
+Romeo receives:
+ <presence from="room@conference.localhost/Romeo">
+ <x xmlns="http://jabber.org/protocol/muc#user">
+ <item xmlns="http://jabber.org/protocol/muc#user" role="moderator" jid="${Romeo's full JID}" affiliation="owner">
+ <actor xmlns="http://jabber.org/protocol/muc#user" nick="Romeo"/>
+ </item>
+ <status xmlns="http://jabber.org/protocol/muc#user" code="110"/>
+ </x>
+ </presence>
+
+Romeo receives:
+ <iq from="room@conference.localhost" id="reserve" type="result"/>
+