]> granicus.if.org Git - ejabberd/commitdiff
Fix ejabberd_captcha's listener parsing
authorHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 23 Dec 2014 23:35:22 +0000 (00:35 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 23 Dec 2014 23:35:22 +0000 (00:35 +0100)
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.

src/ejabberd_captcha.erl

index ab91ccb04e3f3f6c8153a505762035a98e4bd9fe..d433cc24b16360e927c702203ae81d147ac4b365 100644 (file)
@@ -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;