From 68c29f3629e3c642ba41735f74ec6e05e383987f Mon Sep 17 00:00:00 2001 From: daurnimator Date: Wed, 15 Oct 2014 16:56:42 -0400 Subject: plugins/muc/muc.lib: Kick users from outcast hosts --- plugins/muc/muc.lib.lua | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'plugins/muc') diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua index 19614e82..bdf67df8 100644 --- a/plugins/muc/muc.lib.lua +++ b/plugins/muc/muc.lib.lua @@ -17,6 +17,7 @@ local iterators = require "util.iterators"; local jid_split = require "util.jid".split; local jid_bare = require "util.jid".bare; local jid_prep = require "util.jid".prep; +local jid_join = require "util.jid".join; local st = require "util.stanza"; local log = require "util.logger".init("mod_muc"); local base64 = require "util.encodings".base64; @@ -990,7 +991,10 @@ end function room_mt:set_affiliation(actor, jid, affiliation, reason) if not actor then return nil, "modify", "not-acceptable"; end; - jid = jid_bare(jid); + local node, host, resource = jid_split(jid); + if not host then return nil, "modify", "not-acceptable"; end + jid = jid_join(node, host); -- Bare + local is_host_only = node == nil; if valid_affiliations[affiliation or "none"] == nil then return nil, "modify", "not-acceptable"; @@ -1030,7 +1034,10 @@ function room_mt:set_affiliation(actor, jid, affiliation, reason) local role_rank = valid_roles[role or "none"]; local occupants_updated = {}; -- Filled with old roles for nick, occupant in self:each_occupant() do - if occupant.bare_jid == jid then + if occupant.bare_jid == jid or ( + -- Outcast can be by host. + is_host_only and affiliation == "outcast" and select(2, jid_split(occupant.bare_jid)) == host + ) then -- need to publcize in all cases; as affiliation in has changed. occupants_updated[occupant] = occupant.role; if occupant.role ~= role and ( -- cgit v1.2.3