* src/stringprep/stringprep_drv.c: Removed needless iconv.h
include * src/ejabberd_c2s.erl: Added filtering of presence packets with privacy rules * src/mod_roster.erl (get_jid_info): Bugfix * src/ejabberd_app.erl: Removed periodical dumping of opened ports SVN Revision: 147
This commit is contained in:
parent
7df146166a
commit
4b48617a2d
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
2003-10-10 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/stringprep/stringprep_drv.c: Removed needless iconv.h
|
||||||
|
include
|
||||||
|
|
||||||
|
* src/ejabberd_c2s.erl: Added filtering of presence packets with
|
||||||
|
privacy rules
|
||||||
|
|
||||||
|
* src/mod_roster.erl (get_jid_info): Bugfix
|
||||||
|
|
||||||
|
* src/ejabberd_app.erl: Removed periodical dumping of opened ports
|
||||||
|
|
||||||
2003-10-09 Alexey Shchepin <alexey@sevcom.net>
|
2003-10-09 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/ejabberd_c2s.erl: Added authentification logging
|
* src/ejabberd_c2s.erl: Added authentification logging
|
||||||
|
|
|
@ -50,7 +50,7 @@ init() ->
|
||||||
register(ejabberd, self()),
|
register(ejabberd, self()),
|
||||||
%erlang:system_flag(fullsweep_after, 0),
|
%erlang:system_flag(fullsweep_after, 0),
|
||||||
error_logger:logfile({open, ?LOG_PATH}),
|
error_logger:logfile({open, ?LOG_PATH}),
|
||||||
timer:apply_interval(3600000, ?MODULE, dump_ports, []),
|
%timer:apply_interval(3600000, ?MODULE, dump_ports, []),
|
||||||
ok = erl_ddll:load_driver(".", expat_erl),
|
ok = erl_ddll:load_driver(".", expat_erl),
|
||||||
Port = open_port({spawn, expat_erl}, [binary]),
|
Port = open_port({spawn, expat_erl}, [binary]),
|
||||||
loop(Port).
|
loop(Port).
|
||||||
|
|
|
@ -499,9 +499,14 @@ session_established({xmlstreamelement, El}, StateData) ->
|
||||||
NewState =
|
NewState =
|
||||||
case ToJID of
|
case ToJID of
|
||||||
error ->
|
error ->
|
||||||
Err = jlib:make_error_reply(El, ?ERR_JID_MALFORMED),
|
case xml:get_attr_s("type", Attrs) of
|
||||||
send_element(StateData, Err),
|
"error" -> StateData;
|
||||||
StateData;
|
"result" -> StateData;
|
||||||
|
_ ->
|
||||||
|
Err = jlib:make_error_reply(El, ?ERR_JID_MALFORMED),
|
||||||
|
send_element(StateData, Err),
|
||||||
|
StateData
|
||||||
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
case Name of
|
case Name of
|
||||||
"presence" ->
|
"presence" ->
|
||||||
|
@ -627,7 +632,22 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
|
||||||
"unsubscribed" ->
|
"unsubscribed" ->
|
||||||
{true, Attrs, StateData};
|
{true, Attrs, StateData};
|
||||||
_ ->
|
_ ->
|
||||||
{true, Attrs, StateData}
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
case catch mod_privacy:check_packet(
|
||||||
|
StateData#state.user,
|
||||||
|
StateData#state.privacy_list,
|
||||||
|
{From, To, Packet},
|
||||||
|
in) of
|
||||||
|
{'EXIT', _Reason} ->
|
||||||
|
{true, Attrs, StateData};
|
||||||
|
allow ->
|
||||||
|
{true, Attrs, StateData};
|
||||||
|
deny ->
|
||||||
|
{false, Attrs, StateData}
|
||||||
|
end
|
||||||
|
%-elseif.
|
||||||
|
% {true, Attrs, StateData}
|
||||||
|
%-endif.
|
||||||
end;
|
end;
|
||||||
"broadcast" ->
|
"broadcast" ->
|
||||||
?DEBUG("broadcast~n~p~n", [Els]),
|
?DEBUG("broadcast~n~p~n", [Els]),
|
||||||
|
@ -732,8 +752,8 @@ terminate(Reason, StateName, StateData) ->
|
||||||
Packet = {xmlelement, "presence", [{"type", "unavailable"}], []},
|
Packet = {xmlelement, "presence", [{"type", "unavailable"}], []},
|
||||||
ejabberd_sm:unset_presence(StateData#state.user,
|
ejabberd_sm:unset_presence(StateData#state.user,
|
||||||
StateData#state.resource),
|
StateData#state.resource),
|
||||||
presence_broadcast(From, StateData#state.pres_a, Packet),
|
presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
|
||||||
presence_broadcast(From, StateData#state.pres_i, Packet)
|
presence_broadcast(StateData, From, StateData#state.pres_i, Packet)
|
||||||
end,
|
end,
|
||||||
(StateData#state.sockmod):close(StateData#state.socket),
|
(StateData#state.sockmod):close(StateData#state.socket),
|
||||||
ok.
|
ok.
|
||||||
|
@ -842,8 +862,21 @@ process_presence_probe(From, To, StateData) ->
|
||||||
and ?SETS:is_element(LFrom, StateData#state.pres_a),
|
and ?SETS:is_element(LFrom, StateData#state.pres_a),
|
||||||
if
|
if
|
||||||
Cond1 ->
|
Cond1 ->
|
||||||
ejabberd_router:route(To, From,
|
Packet = StateData#state.pres_last,
|
||||||
StateData#state.pres_last);
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
case catch mod_privacy:check_packet(
|
||||||
|
StateData#state.user,
|
||||||
|
StateData#state.privacy_list,
|
||||||
|
{To, From, Packet},
|
||||||
|
out) of
|
||||||
|
deny ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
%-endif.
|
||||||
|
ejabberd_router:route(To, From, Packet)
|
||||||
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
end;
|
||||||
|
%-endif.
|
||||||
Cond2 ->
|
Cond2 ->
|
||||||
ejabberd_router:route(To, From,
|
ejabberd_router:route(To, From,
|
||||||
{xmlelement, "presence",
|
{xmlelement, "presence",
|
||||||
|
@ -860,8 +893,8 @@ presence_update(From, Packet, StateData) ->
|
||||||
"unavailable" ->
|
"unavailable" ->
|
||||||
ejabberd_sm:unset_presence(StateData#state.user,
|
ejabberd_sm:unset_presence(StateData#state.user,
|
||||||
StateData#state.resource),
|
StateData#state.resource),
|
||||||
presence_broadcast(From, StateData#state.pres_a, Packet),
|
presence_broadcast(StateData, From, StateData#state.pres_a, Packet),
|
||||||
presence_broadcast(From, StateData#state.pres_i, Packet),
|
presence_broadcast(StateData, From, StateData#state.pres_i, Packet),
|
||||||
StateData#state{pres_last = undefined,
|
StateData#state{pres_last = undefined,
|
||||||
pres_a = ?SETS:new(),
|
pres_a = ?SETS:new(),
|
||||||
pres_i = ?SETS:new(),
|
pres_i = ?SETS:new(),
|
||||||
|
@ -870,9 +903,11 @@ presence_update(From, Packet, StateData) ->
|
||||||
NewState =
|
NewState =
|
||||||
if
|
if
|
||||||
not StateData#state.pres_invis ->
|
not StateData#state.pres_invis ->
|
||||||
presence_broadcast(From, StateData#state.pres_a,
|
presence_broadcast(StateData, From,
|
||||||
|
StateData#state.pres_a,
|
||||||
Packet),
|
Packet),
|
||||||
presence_broadcast(From, StateData#state.pres_i,
|
presence_broadcast(StateData, From,
|
||||||
|
StateData#state.pres_i,
|
||||||
Packet),
|
Packet),
|
||||||
S1 = StateData#state{pres_last = undefined,
|
S1 = StateData#state{pres_last = undefined,
|
||||||
pres_a = ?SETS:new(),
|
pres_a = ?SETS:new(),
|
||||||
|
@ -910,7 +945,8 @@ presence_update(From, Packet, StateData) ->
|
||||||
pres_invis = false
|
pres_invis = false
|
||||||
}, Packet);
|
}, Packet);
|
||||||
true ->
|
true ->
|
||||||
presence_broadcast_to_trusted(From,
|
presence_broadcast_to_trusted(StateData,
|
||||||
|
From,
|
||||||
StateData#state.pres_f,
|
StateData#state.pres_f,
|
||||||
StateData#state.pres_a,
|
StateData#state.pres_a,
|
||||||
Packet),
|
Packet),
|
||||||
|
@ -958,29 +994,69 @@ presence_track(From, To, Packet, StateData) ->
|
||||||
ejabberd_router:route(From, To, Packet),
|
ejabberd_router:route(From, To, Packet),
|
||||||
StateData;
|
StateData;
|
||||||
_ ->
|
_ ->
|
||||||
ejabberd_router:route(From, To, Packet),
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
case catch mod_privacy:check_packet(
|
||||||
|
StateData#state.user,
|
||||||
|
StateData#state.privacy_list,
|
||||||
|
{From, To, Packet},
|
||||||
|
out) of
|
||||||
|
deny ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
%-endif.
|
||||||
|
ejabberd_router:route(From, To, Packet)
|
||||||
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
end,
|
||||||
|
%-endif.
|
||||||
I = remove_element(LTo, StateData#state.pres_i),
|
I = remove_element(LTo, StateData#state.pres_i),
|
||||||
A = ?SETS:add_element(LTo, StateData#state.pres_a),
|
A = ?SETS:add_element(LTo, StateData#state.pres_a),
|
||||||
StateData#state{pres_i = I,
|
StateData#state{pres_i = I,
|
||||||
pres_a = A}
|
pres_a = A}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
presence_broadcast(From, JIDSet, Packet) ->
|
presence_broadcast(StateData, From, JIDSet, Packet) ->
|
||||||
lists:foreach(fun(JID) ->
|
lists:foreach(fun(JID) ->
|
||||||
ejabberd_router:route(
|
FJID = jlib:make_jid(JID),
|
||||||
From, jlib:make_jid(JID), Packet)
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
case catch mod_privacy:check_packet(
|
||||||
|
StateData#state.user,
|
||||||
|
StateData#state.privacy_list,
|
||||||
|
{From, FJID, Packet},
|
||||||
|
out) of
|
||||||
|
deny ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
%-endif.
|
||||||
|
ejabberd_router:route(From, FJID, Packet)
|
||||||
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
end
|
||||||
|
%-endif.
|
||||||
end, ?SETS:to_list(JIDSet)).
|
end, ?SETS:to_list(JIDSet)).
|
||||||
|
|
||||||
presence_broadcast_to_trusted(From, T, A, Packet) ->
|
presence_broadcast_to_trusted(StateData, From, T, A, Packet) ->
|
||||||
lists:foreach(fun(JID) ->
|
lists:foreach(
|
||||||
case ?SETS:is_element(JID, T) of
|
fun(JID) ->
|
||||||
true ->
|
case ?SETS:is_element(JID, T) of
|
||||||
ejabberd_router:route(
|
true ->
|
||||||
From, jlib:make_jid(JID), Packet);
|
FJID = jlib:make_jid(JID),
|
||||||
_ ->
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
ok
|
case catch mod_privacy:check_packet(
|
||||||
end
|
StateData#state.user,
|
||||||
end, ?SETS:to_list(A)).
|
StateData#state.privacy_list,
|
||||||
|
{From, FJID, Packet},
|
||||||
|
out) of
|
||||||
|
deny ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
%-endif.
|
||||||
|
ejabberd_router:route(From, FJID, Packet)
|
||||||
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
|
end;
|
||||||
|
%-endif.
|
||||||
|
_ ->
|
||||||
|
ok
|
||||||
|
end
|
||||||
|
end, ?SETS:to_list(A)).
|
||||||
|
|
||||||
|
|
||||||
presence_broadcast_first(From, StateData, Packet) ->
|
presence_broadcast_first(From, StateData, Packet) ->
|
||||||
|
@ -999,14 +1075,27 @@ presence_broadcast_first(From, StateData, Packet) ->
|
||||||
StateData#state.pres_invis ->
|
StateData#state.pres_invis ->
|
||||||
StateData;
|
StateData;
|
||||||
true ->
|
true ->
|
||||||
As = ?SETS:fold(fun(JID, A) ->
|
As = ?SETS:fold(
|
||||||
ejabberd_router:route(From,
|
fun(JID, A) ->
|
||||||
jlib:make_jid(JID),
|
FJID = jlib:make_jid(JID),
|
||||||
Packet),
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
?SETS:add_element(JID, A)
|
case catch mod_privacy:check_packet(
|
||||||
|
StateData#state.user,
|
||||||
|
StateData#state.privacy_list,
|
||||||
|
{From, FJID, Packet},
|
||||||
|
out) of
|
||||||
|
deny ->
|
||||||
|
ok;
|
||||||
|
_ ->
|
||||||
|
%-endif.
|
||||||
|
ejabberd_router:route(From, FJID, Packet)
|
||||||
|
%-ifdef(PRIVACY_SUPPORT).
|
||||||
end,
|
end,
|
||||||
StateData#state.pres_a,
|
%-endif.
|
||||||
StateData#state.pres_f),
|
?SETS:add_element(JID, A)
|
||||||
|
end,
|
||||||
|
StateData#state.pres_a,
|
||||||
|
StateData#state.pres_f),
|
||||||
StateData#state{pres_a = As}
|
StateData#state{pres_a = As}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
|
@ -445,8 +445,9 @@ parse_items([{xmlelement, "item", Attrs, SubEls} | Els], Res) ->
|
||||||
error ->
|
error ->
|
||||||
false;
|
false;
|
||||||
JID ->
|
JID ->
|
||||||
I1#listitem{type = jid,
|
I1#listitem{
|
||||||
value = JID}
|
type = jid,
|
||||||
|
value = jlib:jid_tolower(JID)}
|
||||||
end;
|
end;
|
||||||
"group" ->
|
"group" ->
|
||||||
I1#listitem{type = group,
|
I1#listitem{type = group,
|
||||||
|
|
|
@ -568,7 +568,19 @@ get_jid_info(User, JID) ->
|
||||||
[#roster{subscription = Subscription, groups = Groups}] ->
|
[#roster{subscription = Subscription, groups = Groups}] ->
|
||||||
{Subscription, Groups};
|
{Subscription, Groups};
|
||||||
_ ->
|
_ ->
|
||||||
{none, []}
|
LRJID = jlib:jid_tolower(jlib:jid_remove_resource(JID)),
|
||||||
|
if
|
||||||
|
LRJID == LJID ->
|
||||||
|
{none, []};
|
||||||
|
true ->
|
||||||
|
case catch mnesia:dirty_read(roster, {LUser, LRJID}) of
|
||||||
|
[#roster{subscription = Subscription,
|
||||||
|
groups = Groups}] ->
|
||||||
|
{Subscription, Groups};
|
||||||
|
_ ->
|
||||||
|
{none, []}
|
||||||
|
end
|
||||||
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <erl_driver.h>
|
#include <erl_driver.h>
|
||||||
#include <ei.h>
|
#include <ei.h>
|
||||||
#include <iconv.h>
|
|
||||||
|
|
||||||
#include "uni_data.c"
|
#include "uni_data.c"
|
||||||
#include "uni_norm.c"
|
#include "uni_norm.c"
|
||||||
|
|
Loading…
Reference in New Issue