]> granicus.if.org Git - ejabberd/commitdiff
Fix ipv6 configuration processing (#803)
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 30 Oct 2015 14:20:15 +0000 (17:20 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Fri, 30 Oct 2015 14:20:32 +0000 (17:20 +0300)
src/ejabberd_listener.erl

index 0bea9c97b73b8209af6e884bb5412e8dd3c0c6ac..bebb15c484646bbc3ecbb220f3781cce2af11dae 100644 (file)
@@ -225,8 +225,8 @@ listen_tcp(PortIP, Module, SockOpts, Port, IPS) ->
 %% so the option inet/inet6 is only used when no IP is specified at all.
 parse_listener_portip(PortIP, Opts) ->
     {IPOpt, Opts2} = strip_ip_option(Opts),
-    {IPVOpt, OptsClean} = case lists:member(inet6, Opts2) of
-                             true -> {inet6, Opts2 -- [inet6]};
+    {IPVOpt, OptsClean} = case proplists:get_bool(inet6, Opts2) of
+                             true -> {inet6, proplists:delete(inet6, Opts2)};
                              false -> {inet, Opts2}
                          end,
     {Port, IPT, IPS, Proto} =
@@ -569,11 +569,8 @@ transform_option({{Port, IP, Transport}, Mod, Opts}) ->
     Opts1 = lists:map(
               fun({ip, IPT}) when is_tuple(IPT) ->
                       {ip, list_to_binary(inet_parse:ntoa(IP))};
-                 (tls) -> {tls, true};
                  (ssl) -> {tls, true};
-                 (zlib) -> {zlib, true};
-                 (starttls) -> {starttls, true};
-                 (starttls_required) -> {starttls_required, true};
+                (A) when is_atom(A) -> {A, true};
                  (Opt) -> Opt
               end, Opts),
     Opts2 = lists:foldl(
@@ -593,11 +590,11 @@ transform_option({{Port, IP, Transport}, Mod, Opts}) ->
     IPOpt ++ TransportOpt ++ [{port, Port}, {module, Mod} | Opts2];
 transform_option({{Port, Transport}, Mod, Opts})
   when ?IS_TRANSPORT(Transport) ->
-    transform_option({{Port, {0,0,0,0}, Transport}, Mod, Opts});
+    transform_option({{Port, all_zero_ip(Opts), Transport}, Mod, Opts});
 transform_option({{Port, IP}, Mod, Opts}) ->
     transform_option({{Port, IP, tcp}, Mod, Opts});
 transform_option({Port, Mod, Opts}) ->
-    transform_option({{Port, {0,0,0,0}, tcp}, Mod, Opts});
+    transform_option({{Port, all_zero_ip(Opts), tcp}, Mod, Opts});
 transform_option(Opt) ->
     Opt.
 
@@ -633,7 +630,7 @@ validate_cfg(L) ->
                         {Port, prepare_mod(Mod), Opts};
                    (Opt, {Port, Mod, Opts}) ->
                         {Port, Mod, [Opt|Opts]}
-                end, {{5222, {0,0,0,0}, tcp}, ejabberd_c2s, []}, LOpts)
+                end, {{5222, all_zero_ip(LOpts), tcp}, ejabberd_c2s, []}, LOpts)
       end, L).
 
 prepare_ip({A, B, C, D} = IP)
@@ -656,5 +653,11 @@ prepare_mod(sip) ->
 prepare_mod(Mod) when is_atom(Mod) ->
     Mod.
 
+all_zero_ip(Opts) ->
+    case proplists:get_bool(inet6, Opts) of
+       true -> {0,0,0,0,0,0,0,0};
+       false -> {0,0,0,0}
+    end.
+
 opt_type(listen) -> fun validate_cfg/1;
 opt_type(_) -> [listen].