26
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-26 17:38:45 +01:00

Validate additional listen opts

The options "inet", "inet6" and "backlog" are valid listen options, but are
currently logged as errors (even though they do work):

2018-02-28 16:08:44.141 [error] <0.338.0>@ejabberd_listener:validate_module_option:630 unknown listen option 'backlog' for 'ejabberd_c2s' will be likely ignored, available options are: access, shaper, certfile, ciphers, dhfile, cafile, client_cafile, protocol_options, tls, tls_compression, starttls, starttls_required, tls_verify, zlib, max_fsm_queue

This adds the necessary validators so they are correctly recognized.
This commit is contained in:
Stu Tomlinson 2018-02-28 16:14:35 +00:00
parent 5054a9933f
commit da81590fef
6 changed files with 37 additions and 5 deletions

View File

@ -999,6 +999,9 @@ opt_type(_) ->
(max_stanza_size) -> fun((timeout()) -> timeout()); (max_stanza_size) -> fun((timeout()) -> timeout());
(max_fsm_queue) -> fun((timeout()) -> timeout()); (max_fsm_queue) -> fun((timeout()) -> timeout());
(stream_management) -> fun((boolean()) -> boolean()); (stream_management) -> fun((boolean()) -> boolean());
(inet) -> fun((boolean()) -> boolean());
(inet6) -> fun((boolean()) -> boolean());
(backlog) -> fun((timeout()) -> timeout());
(atom()) -> [atom()]. (atom()) -> [atom()].
listen_opt_type(access) -> fun acl:access_rules_validator/1; listen_opt_type(access) -> fun acl:access_rules_validator/1;
listen_opt_type(shaper) -> fun acl:shaper_rules_validator/1; listen_opt_type(shaper) -> fun acl:shaper_rules_validator/1;
@ -1031,13 +1034,18 @@ listen_opt_type(stream_management) ->
?ERROR_MSG("listening option 'stream_management' is ignored: " ?ERROR_MSG("listening option 'stream_management' is ignored: "
"use mod_stream_mgmt module", []), "use mod_stream_mgmt module", []),
fun(B) when is_boolean(B) -> B end; fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(O) -> listen_opt_type(O) ->
StreamOpts = mod_stream_mgmt:mod_options(?MYNAME), StreamOpts = mod_stream_mgmt:mod_options(?MYNAME),
case lists:keyfind(O, 1, StreamOpts) of case lists:keyfind(O, 1, StreamOpts) of
false -> false ->
[access, shaper, certfile, ciphers, dhfile, cafile, [access, shaper, certfile, ciphers, dhfile, cafile,
protocol_options, tls, tls_compression, starttls, protocol_options, tls, tls_compression, starttls,
starttls_required, tls_verify, zlib, max_fsm_queue]; starttls_required, tls_verify, zlib, max_fsm_queue,
backlog, inet, inet6];
_ -> _ ->
?ERROR_MSG("Listening option '~s' is ignored: use '~s' " ?ERROR_MSG("Listening option '~s' is ignored: use '~s' "
"option from mod_stream_mgmt module", [O, O]), "option from mod_stream_mgmt module", [O, O]),

View File

@ -994,6 +994,10 @@ listen_opt_type(default_host) ->
fun(A) -> A end; fun(A) -> A end;
listen_opt_type(custom_headers) -> listen_opt_type(custom_headers) ->
fun expand_custom_headers/1; fun expand_custom_headers/1;
listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(_) -> listen_opt_type(_) ->
%% TODO %% TODO
fun(A) -> A end. fun(A) -> A end.

View File

@ -358,6 +358,9 @@ change_shaper(#{shaper := ShaperName, server_host := ServerHost} = State,
(supervisor) -> fun((boolean()) -> boolean()); (supervisor) -> fun((boolean()) -> boolean());
(max_stanza_type) -> fun((timeout()) -> timeout()); (max_stanza_type) -> fun((timeout()) -> timeout());
(max_fsm_queue) -> fun((pos_integer()) -> pos_integer()); (max_fsm_queue) -> fun((pos_integer()) -> pos_integer());
(inet) -> fun((boolean()) -> boolean());
(inet6) -> fun((boolean()) -> boolean());
(backlog) -> fun((timeout()) -> timeout());
(atom()) -> [atom()]. (atom()) -> [atom()].
listen_opt_type(shaper) -> fun acl:shaper_rules_validator/1; listen_opt_type(shaper) -> fun acl:shaper_rules_validator/1;
listen_opt_type(certfile = Opt) -> listen_opt_type(certfile = Opt) ->
@ -381,6 +384,10 @@ listen_opt_type(max_stanza_size) ->
end; end;
listen_opt_type(max_fsm_queue) -> listen_opt_type(max_fsm_queue) ->
fun(I) when is_integer(I), I>0 -> I end; fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(_) -> listen_opt_type(_) ->
[shaper, certfile, ciphers, dhfile, cafile, protocol_options, [shaper, certfile, ciphers, dhfile, cafile, protocol_options,
tls_compression, tls, max_fsm_queue]. tls_compression, tls, max_fsm_queue, backlog, inet, inet6].

View File

@ -291,6 +291,9 @@ transform_listen_option(Opt, Opts) ->
[{binary(), binary() | undefined}]); [{binary(), binary() | undefined}]);
(max_stanza_type) -> fun((timeout()) -> timeout()); (max_stanza_type) -> fun((timeout()) -> timeout());
(max_fsm_queue) -> fun((pos_integer()) -> pos_integer()); (max_fsm_queue) -> fun((pos_integer()) -> pos_integer());
(inet) -> fun((boolean()) -> boolean());
(inet6) -> fun((boolean()) -> boolean());
(backlog) -> fun((timeout()) -> timeout());
(atom()) -> [atom()]. (atom()) -> [atom()].
listen_opt_type(access) -> fun acl:access_rules_validator/1; listen_opt_type(access) -> fun acl:access_rules_validator/1;
listen_opt_type(shaper_rule) -> fun acl:shaper_rules_validator/1; listen_opt_type(shaper_rule) -> fun acl:shaper_rules_validator/1;
@ -328,7 +331,11 @@ listen_opt_type(max_stanza_size) ->
end; end;
listen_opt_type(max_fsm_queue) -> listen_opt_type(max_fsm_queue) ->
fun(I) when is_integer(I), I>0 -> I end; fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(_) -> listen_opt_type(_) ->
[access, shaper_rule, certfile, ciphers, dhfile, cafile, tls, [access, shaper_rule, certfile, ciphers, dhfile, cafile, tls,
protocol_options, tls_compression, password, hosts, check_from, protocol_options, tls_compression, password, hosts, check_from,
max_fsm_queue, global_routes]. max_fsm_queue, global_routes, backlog, inet, inet6].

View File

@ -172,8 +172,10 @@ listen_opt_type(turn_max_permissions) ->
end; end;
listen_opt_type(server_name) -> listen_opt_type(server_name) ->
fun iolist_to_binary/1; fun iolist_to_binary/1;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(_) -> listen_opt_type(_) ->
[shaper, auth_type, auth_realm, tls, certfile, turn_min_port, [shaper, auth_type, auth_realm, tls, certfile, turn_min_port,
turn_max_port, turn_max_allocations, turn_max_permissions, turn_max_port, turn_max_allocations, turn_max_permissions,
server_name]. server_name, backlog].
-endif. -endif.

View File

@ -581,5 +581,9 @@ listen_opt_type(maxsessions) ->
fun(I) when is_integer(I), I>0 -> I end; fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(timeout) -> listen_opt_type(timeout) ->
fun(I) when is_integer(I), I>0 -> I end; fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(inet) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(inet6) -> fun(B) when is_boolean(B) -> B end;
listen_opt_type(backlog) ->
fun(I) when is_integer(I), I>0 -> I end;
listen_opt_type(_) -> listen_opt_type(_) ->
[access_commands, maxsessions, timeout]. [access_commands, maxsessions, timeout, backlog, inet, inet6].