portmanager: use_ipv6 defaults to true if luasocket has ipv6 support
[prosody.git] / core / portmanager.lua
index 8938be655aadd4ab7dfb334fa0e51c6c39c8d189..4c13f1ad6b1c4f07982839d43d5fa678b96ce441 100644 (file)
@@ -1,6 +1,7 @@
 local config = require "core.configmanager";
 local certmanager = require "core.certmanager";
 local server = require "net.server";
+local socket = require "socket";
 
 local log = require "util.logger".init("portmanager");
 local multitable = require "util.multitable";
@@ -19,7 +20,7 @@ module "portmanager";
 
 local default_interfaces = { "*" };
 local default_local_interfaces = { "127.0.0.1" };
-if config.get("*", "use_ipv6") then
+if socket.tcp6 and config.get("*", "use_ipv6") ~= false then
        table.insert(default_interfaces, "::");
        table.insert(default_local_interfaces, "::1");
 end
@@ -89,11 +90,12 @@ function activate(service_name)
                or default_interfaces
        bind_interfaces = set.new(type(bind_interfaces)~="table" and {bind_interfaces} or bind_interfaces);
        
-       local bind_ports = set.new(config.get("*", config_prefix.."ports")
+       local bind_ports = config.get("*", config_prefix.."ports")
                or service_info.default_ports
                or {service_info.default_port
                    or listener.default_port -- COMPAT w/pre-0.9
-                  });
+                  }
+       bind_ports = set.new(type(bind_ports) ~= "table" and { bind_ports } or bind_ports );
 
        local mode, ssl = listener.default_mode or "*a";
        
@@ -190,7 +192,7 @@ function get_service_at(interface, port)
 end
 
 function get_service(service_name)
-       return services[service_name];
+       return (services[service_name] or {})[1];
 end
 
 function get_active_services(...)