24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-12 21:52:07 +02:00

Fix delete item from unregistered user (#2067)

This commit is contained in:
Christophe Romain 2017-10-25 11:16:54 +02:00
parent 65c85eab03
commit 17e3ed513b

View File

@ -445,21 +445,30 @@ delete_item(Nidx, Publisher, PublishModel, ItemId) ->
case Affiliation of case Affiliation of
owner -> owner ->
{result, States} = get_states(Nidx), {result, States} = get_states(Nidx),
Records = States ++ mnesia:read({pubsub_orphan, Nidx}),
lists:foldl(fun lists:foldl(fun
(#pubsub_state{items = PI} = S, Res) -> (#pubsub_state{items = RI} = S, Res) ->
case lists:member(ItemId, PI) of case lists:member(ItemId, RI) of
true -> true ->
Nitems = lists:delete(ItemId, PI), NI = lists:delete(ItemId, RI),
del_item(Nidx, ItemId), del_item(Nidx, ItemId),
set_state(S#pubsub_state{items = Nitems}), mnesia:write(S#pubsub_state{items = NI}),
{result, {default, broadcast}}; {result, {default, broadcast}};
false -> false ->
Res Res
end; end;
(_, Res) -> (#pubsub_orphan{items = RI} = S, Res) ->
Res case lists:member(ItemId, RI) of
true ->
NI = lists:delete(ItemId, RI),
del_item(Nidx, ItemId),
mnesia:write(S#pubsub_orphan{items = NI}),
{result, {default, broadcast}};
false ->
Res
end
end, end,
{error, xmpp:err_item_not_found()}, States); {error, xmpp:err_item_not_found()}, Records);
_ -> _ ->
{error, xmpp:err_forbidden()} {error, xmpp:err_forbidden()}
end end