From 188be0dc625be340b06650aaa2cf374d4ce5429b Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Tue, 28 Oct 2003 20:26:43 +0000 Subject: [PATCH] * src/ejabberd_listener.erl: Added handling of accept errors, added timeout value to ssl:accept * src/mod_vcard.erl: Added checks for all empty input fields * src/mod_offline.erl: More strong checks for stored packets SVN Revision: 163 --- ChangeLog | 7 +++++++ src/ejabberd_listener.erl | 23 ++++++++++++----------- src/mod_offline.erl | 2 ++ src/mod_vcard.erl | 24 ++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index c4fd84add..fbf66da51 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2003-10-28 Alexey Shchepin + * src/ejabberd_listener.erl: Added handling of accept errors, + added timeout value to ssl:accept + + * src/mod_vcard.erl: Added checks for all empty input fields + + * src/mod_offline.erl: More strong checks for stored packets + * src/ejabberd_sm.erl: Bugfix 2003-10-27 Alexey Shchepin diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index 36dad2e13..ea04765eb 100644 --- a/src/ejabberd_listener.erl +++ b/src/ejabberd_listener.erl @@ -67,16 +67,11 @@ accept(ListenSocket, Module, Opts) -> ok end, {ok, Pid} = Module:start({gen_tcp, Socket}, Opts), - %{ok, Pid} = - % supervisor:start_child( - % ejabberd_tmp_sup, - % {{Module, Socket}, - % {Module, start_link, [{gen_tcp, Socket}, Opts]}, - % transient, - % brutal_kill, - % worker, - % [Module]}), gen_tcp:controlling_process(Socket, Pid), + accept(ListenSocket, Module, Opts); + {error, Reason} -> + ?INFO_MSG("(~w) Failed TCP accept: ~w", + [ListenSocket, Reason]), accept(ListenSocket, Module, Opts) end. @@ -90,7 +85,7 @@ init_ssl(Port, Module, Opts, SSLOpts) -> accept_ssl(ListenSocket, Module, Opts). accept_ssl(ListenSocket, Module, Opts) -> - case ssl:accept(ListenSocket) of + case ssl:accept(ListenSocket, 200) of {ok, Socket} -> case {ssl:sockname(Socket), ssl:peername(Socket)} of {{ok, Addr}, {ok, PAddr}} -> @@ -99,7 +94,13 @@ accept_ssl(ListenSocket, Module, Opts) -> _ -> ok end, - apply(Module, start_link, [{ssl, Socket}, Opts]), + Module:start_link({ssl, Socket}, Opts), + accept_ssl(ListenSocket, Module, Opts); + {error, timeout} -> + accept_ssl(ListenSocket, Module, Opts); + {error, Reason} -> + ?INFO_MSG("(~w) Failed SSL handshake: ~w", + [ListenSocket, Reason]), accept_ssl(ListenSocket, Module, Opts) end. diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 63537600e..fbd8dfbff 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -65,6 +65,8 @@ stop() -> store_packet(From, To, Packet) -> true = is_process_alive(whereis(?PROCNAME)), + Type = xml:get_tag_attr_s("type", Packet), + true = Type /= "error" andalso Type /= "groupchat", case check_event(From, To, Packet) of true -> #jid{luser = LUser} = To, diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 70e54cafb..8cf82184b 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -22,6 +22,8 @@ -include("jlib.hrl"). +%-define(JUD_ALLOW_RETURN_ALL, true) + -record(vcard_search, {user, luser, fn, lfn, family, lfamily, @@ -386,6 +388,7 @@ record_to_item(R) -> ] }. +-ifdef(JUD_ALLOW_RETURN_ALL). search(Data) -> MatchSpec = make_matchspec(Data), @@ -397,6 +400,27 @@ search(Data) -> Rs end. +-else. + +search(Data) -> + MatchSpec = make_matchspec(Data), + if + MatchSpec == #vcard_search{_ = '_'} -> + []; + true -> + case catch mnesia:dirty_select(vcard_search, + [{MatchSpec, [], ['$_']}]) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p", [Reason]), + []; + Rs -> + Rs + end + end. + +-endif. + + % TODO: remove % F = fun() -> % mnesia:select(vcard_search, [{MatchSpec, [], ['$_']}])