From 509331a563e98c37c055b786ba95ce65c52b1d6d Mon Sep 17 00:00:00 2001 From: Emmet McPoland Date: Wed, 7 Jul 2021 16:44:58 +0100 Subject: [PATCH] Correctly strip only other bcc addresses i.e. bcc receiver should still be able to see their bcc address element and no other bcc address element --- src/mod_multicast.erl | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/mod_multicast.erl b/src/mod_multicast.erl index 530bfecea..161d3a4c4 100644 --- a/src/mod_multicast.erl +++ b/src/mod_multicast.erl @@ -392,8 +392,9 @@ perform(From, Packet, _, {route_single, Group}) -> lists:foreach( fun(ToUser) -> + Group_others = strip_other_bcc(ToUser, Group#group.others), route_packet(From, ToUser, Packet, - Group#group.others, Group#group.addresses) + Group_others, Group#group.addresses) end, Group#group.dests); perform(From, Packet, _, {{route_multicast, JID, RLimits}, Group}) -> @@ -424,6 +425,21 @@ strip_addresses_element(Packet) -> throw(eadsele) end. +%%%------------------------- +%%% Strip third-party bcc 'addresses' +%%%------------------------- + +strip_other_bcc(#dest{jid_jid = ToUserJid}, Group_others) -> + lists:filter( + fun(#address{jid = JID, type = Type}) -> + case {JID, Type} of + {ToUserJid, bcc} -> true; + {_, bcc} -> false; + _ -> true + end + end, + Group_others). + %%%------------------------- %%% Split Addresses %%%------------------------- @@ -545,7 +561,6 @@ build_other_xml(Dests) -> case Dest#dest.type of to -> [add_delivered(XML) | R]; cc -> [add_delivered(XML) | R]; - bcc -> R; _ -> [XML | R] end end,