aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-06-07 07:45:19 +0400
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-06-07 07:45:36 +0400
commit6f4b4ad0879c6ba295fd1ac62524b184f55724ae (patch)
treed3d91f4b6b7f06b5cb9da32d2e14b7fbd3fdf745 /src
parentFix data convertion (diff)
Ignore malformed parameters for mod_irc module
Diffstat (limited to 'src')
-rw-r--r--src/mod_irc.erl42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/mod_irc.erl b/src/mod_irc.erl
index 5001df076..88f53a1c6 100644
--- a/src/mod_irc.erl
+++ b/src/mod_irc.erl
@@ -601,7 +601,7 @@ get_data(LServer, Host, From, odbc) ->
<<"';">>])
of
{selected, [<<"data">>], [[SData]]} ->
- data_to_binary(ejabberd_odbc:decode_term(SData));
+ data_to_binary(From, ejabberd_odbc:decode_term(SData));
{'EXIT', _} -> error;
{selected, _, _} -> empty
end.
@@ -712,7 +712,7 @@ get_form(_ServerHost, _Host, _, _, _Lang) ->
set_data(ServerHost, Host, From, Data) ->
LServer = jlib:nameprep(ServerHost),
- set_data(LServer, Host, From, data_to_binary(Data),
+ set_data(LServer, Host, From, data_to_binary(From, Data),
gen_mod:db_type(LServer, ?MODULE)).
set_data(_LServer, Host, From, Data, mnesia) ->
@@ -1218,27 +1218,36 @@ get_username_and_connection_params(Data) ->
end,
{Username, ConnParams}.
-data_to_binary(Data) ->
+data_to_binary(JID, Data) ->
lists:map(
fun({username, U}) ->
{username, iolist_to_binary(U)};
({connections_params, Params}) ->
- {connections_params,
- lists:map(
- fun({S}) ->
- {iolist_to_binary(S)};
- ({S, E}) ->
- {iolist_to_binary(S), iolist_to_binary(E)};
- ({S, E, Port}) ->
- {iolist_to_binary(S), iolist_to_binary(E), Port};
- ({S, E, Port, P}) ->
- {iolist_to_binary(S), iolist_to_binary(E),
- Port, iolist_to_binary(P)}
- end, Params)};
+ {connections_params,
+ lists:flatmap(
+ fun(Param) ->
+ try
+ [conn_param_to_binary(Param)]
+ catch _:_ ->
+ ?ERROR_MSG("failed to convert parameter "
+ " ~p for user ~s",
+ [Param, jlib:jid_to_string(JID)]),
+ []
+ end
+ end, Params)};
(Opt) ->
Opt
end, Data).
+conn_param_to_binary({S}) ->
+ {iolist_to_binary(S)};
+conn_param_to_binary({S, E}) ->
+ {iolist_to_binary(S), iolist_to_binary(E)};
+conn_param_to_binary({S, E, Port}) when is_integer(Port) ->
+ {iolist_to_binary(S), iolist_to_binary(E), Port};
+conn_param_to_binary({S, E, Port, P}) when is_integer(Port) ->
+ {iolist_to_binary(S), iolist_to_binary(E), Port, iolist_to_binary(P)}.
+
conn_params_to_list(Params) ->
lists:map(
fun({S}) ->
@@ -1261,10 +1270,11 @@ update_table() ->
fun(#irc_custom{us_host = {_, H}}) -> H end,
fun(#irc_custom{us_host = {{U, S}, H},
data = Data} = R) ->
+ JID = jlib:make_jid(U, S, <<"">>),
R#irc_custom{us_host = {{iolist_to_binary(U),
iolist_to_binary(S)},
iolist_to_binary(H)},
- data = data_to_binary(Data)}
+ data = data_to_binary(JID, Data)}
end);
_ ->
?INFO_MSG("Recreating irc_custom table", []),