aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ejabberd_config.erl14
-rw-r--r--src/gen_mod.erl8
2 files changed, 16 insertions, 6 deletions
diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl
index eaf513e77..ed52c728b 100644
--- a/src/ejabberd_config.erl
+++ b/src/ejabberd_config.erl
@@ -713,10 +713,16 @@ process_term(Term, State) ->
process_host_term(Term, Host, State, Action) ->
case Term of
- {modules, Modules} when Action == set ->
- set_option({modules, Host}, replace_modules(Modules), State);
- {modules, Modules} when Action == append ->
- append_option({modules, Host}, replace_modules(Modules), State);
+ {modules, Modules} ->
+ Modules1 = try (gen_mod:opt_type(modules))(Modules) of
+ _ -> replace_modules(Modules)
+ catch _:_ -> Modules
+ end,
+ if Action == set ->
+ set_option({modules, Host}, Modules1, State);
+ Action == append ->
+ append_option({modules, Host}, Modules1, State)
+ end;
{host, _} ->
State;
{hosts, _} ->
diff --git a/src/gen_mod.erl b/src/gen_mod.erl
index 4d815073c..cec3ddb24 100644
--- a/src/gen_mod.erl
+++ b/src/gen_mod.erl
@@ -937,8 +937,12 @@ opt_type(modules) ->
fun(Mods) ->
lists:map(
fun({M, A}) when is_atom(M) ->
- true = is_opt_list(A),
- {M, A}
+ case is_opt_list(A) of
+ true -> {M, A};
+ false ->
+ ?ERROR_MSG("Malformed configuration format of module ~s", [M]),
+ erlang:error(badarg)
+ end
end, Mods)
end;
opt_type(_) -> [modules].