aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--src/ejabberd_listener.erl23
-rw-r--r--src/mod_offline.erl2
-rw-r--r--src/mod_vcard.erl24
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 <alexey@sevcom.net>
+ * 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 <alexey@sevcom.net>
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, [], ['$_']}])