Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2006-03-31 03:30:05 +0400
committerAlexey Shchepin <alexey@process-one.net>2006-03-31 03:30:05 +0400
commitf3085d09e4193c29fc888e9798e742dba33a1b86 (patch)
treebac219b0beee276f785c0ac48df77c04936c8ee6 /src
parent832279f1f25c13e9c993d5be75e30f67249866d9 (diff)
* src/ejabberd_c2s.erl: Bugfix
SVN Revision: 523
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 305b33981..97ad79620 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1533,6 +1533,7 @@ roster_change(IJID, ISubscription, StateData) ->
LIJID = jlib:jid_tolower(IJID),
IsFrom = (ISubscription == both) or (ISubscription == from),
IsTo = (ISubscription == both) or (ISubscription == to),
+ OldIsFrom = ?SETS:is_element(LIJID, StateData#state.pres_f),
FSet = if
IsFrom ->
?SETS:add_element(LIJID, StateData#state.pres_f);
@@ -1551,14 +1552,26 @@ roster_change(IJID, ISubscription, StateData) ->
P ->
?DEBUG("roster changed for ~p~n", [StateData#state.user]),
From = StateData#state.jid,
- Cond1 = (not StateData#state.pres_invis) and IsFrom,
- Cond2 = (not IsFrom)
+ To = jlib:make_jid(IJID),
+ Cond1 = (not StateData#state.pres_invis) and IsFrom
+ and (not OldIsFrom),
+ Cond2 = (not IsFrom) and OldIsFrom
and (?SETS:is_element(LIJID, StateData#state.pres_a) or
?SETS:is_element(LIJID, StateData#state.pres_i)),
if
Cond1 ->
?DEBUG("C1: ~p~n", [LIJID]),
- ejabberd_router:route(From, jlib:make_jid(IJID), P),
+ case catch mod_privacy:check_packet(
+ StateData#state.user,
+ StateData#state.server,
+ StateData#state.privacy_list,
+ {From, To, P},
+ out) of
+ deny ->
+ ok;
+ _ ->
+ ejabberd_router:route(From, To, P)
+ end,
A = ?SETS:add_element(LIJID,
StateData#state.pres_a),
StateData#state{pres_a = A,
@@ -1566,9 +1579,19 @@ roster_change(IJID, ISubscription, StateData) ->
pres_t = TSet};
Cond2 ->
?DEBUG("C2: ~p~n", [LIJID]),
- ejabberd_router:route(From, jlib:make_jid(IJID),
- {xmlelement, "presence",
- [{"type", "unavailable"}], []}),
+ PU = {xmlelement, "presence",
+ [{"type", "unavailable"}], []},
+ case catch mod_privacy:check_packet(
+ StateData#state.user,
+ StateData#state.server,
+ StateData#state.privacy_list,
+ {From, To, PU},
+ out) of
+ deny ->
+ ok;
+ _ ->
+ ejabberd_router:route(From, To, PU)
+ end,
I = remove_element(LIJID,
StateData#state.pres_i),
A = remove_element(LIJID,