From: Holger Weiss Date: Tue, 23 Dec 2014 23:35:22 +0000 (+0100) Subject: Fix ejabberd_captcha's listener parsing X-Git-Tag: 15.02~37^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9dc9d75502da19a4282fa32fbc7850b2ea061780;p=ejabberd Fix ejabberd_captcha's listener parsing If the "captcha_host" is specified without "http://" or "https://" prefix, ejabberd_captcha tries to figure out the protocol automatically. Fix the code that parses the listener configuration in order to do that. --- diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl index ab91ccb04..d433cc24b 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -549,10 +549,11 @@ get_transfer_protocol(PortString) -> get_port_listeners(PortNumber) -> AllListeners = ejabberd_config:get_option(listen, fun(V) -> V end), - lists:filter(fun ({{Port, _Ip, _Netp}, _Module1, - _Opts1}) - when Port == PortNumber -> - true; + lists:filter(fun (Listener) when is_list(Listener) -> + case proplists:get_value(port, Listener) of + PortNumber -> true; + _ -> false + end; (_) -> false end, AllListeners). @@ -562,12 +563,11 @@ get_captcha_transfer_protocol([]) -> "is not a ejabberd_http listener with " "'captcha' option. Change the port number " "or specify http:// in that option.">>); -get_captcha_transfer_protocol([{{_Port, _Ip, tcp}, - ejabberd_http, Opts} - | Listeners]) -> - case lists:member(captcha, Opts) of +get_captcha_transfer_protocol([Listener | Listeners]) when is_list(Listener) -> + case proplists:get_value(module, Listener) == ejabberd_http andalso + proplists:get_bool(captcha, Listener) of true -> - case lists:member(tls, Opts) of + case proplists:get_bool(tls, Listener) of true -> https; false -> http end;