diff options
author | Kim Alvefur <zash@zash.se> | 2018-12-20 14:45:22 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-12-20 14:45:22 +0100 |
commit | 63098950d9ca542a610ca1c0a13ef6a31c8366af (patch) | |
tree | 5bc623da7ae38b50135ffd7bec377f4997a6a98b | |
parent | 69c132f765a650e6fdf985f97c86bef613732d4e (diff) | |
download | prosody-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.lua | 2 | ||||
-rw-r--r-- | spec/scansion/muc_register.scs | 22 |
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"/> + |