MUC: Allow changing data attached to an only owner (fixes #1273) 0.11
authorKim Alvefur <zash@zash.se>
Thu, 20 Dec 2018 14:45:22 +0100
branch0.11
changeset 9722 81ef96368bff
parent 9720 5281a795d6df
child 9723 941497cdefc3
child 9732 d41ce505cdf9
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.
plugins/muc/muc.lib.lua
spec/scansion/muc_register.scs
--- a/plugins/muc/muc.lib.lua	Wed Dec 19 23:14:13 2018 +0000
+++ b/plugins/muc/muc.lib.lua	Thu Dec 20 14:45:22 2018 +0100
@@ -1254,7 +1254,7 @@
 	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
--- a/spec/scansion/muc_register.scs	Wed Dec 19 23:14:13 2018 +0000
+++ b/spec/scansion/muc_register.scs	Thu Dec 20 14:45:22 2018 +0100
@@ -504,3 +504,25 @@
 			<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"/>
+