modulemanager initializes hosts[host] if it isn't already initialized when loading...
[prosody.git] / prosody
diff --git a/prosody b/prosody
index 3b95663f59c1b14f9a77a6c0b058b1b129b8c558..f63fc50dd1a875d3368c5d02957a24ecb39e2732 100755 (executable)
--- a/prosody
+++ b/prosody
@@ -1,21 +1,10 @@
 #!/usr/bin/env lua
--- Prosody IM v0.2
--- Copyright (C) 2008 Matthew Wild
--- Copyright (C) 2008 Waqas Hussain
+-- Prosody IM v0.3
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 Waqas Hussain
 -- 
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License
--- as published by the Free Software Foundation; either version 2
--- of the License, or (at your option) any later version.
--- 
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
--- 
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
 --
 
 -- Config here --
@@ -53,25 +42,23 @@ do
        -- Use lfs? Make a new conf/ dir?
        local ok, err = config.load((CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
        if not ok then
-               log("error", "Couldn't load config file: %s", err);
-               log("info", "Falling back to old config file format...")
-               ok, err = pcall(dofile, "lxmppd.cfg");
-               if not ok then
-                       log("error", "Old config format loading failed too: %s", err);
-               else
-                       for _, host in ipairs(_G.config.hosts) do
-                               config.set(host, "core", "defined", true);
-                       end
-                       
-                       config.set("*", "core", "modules_enabled", _G.config.modules);
-                       config.set("*", "core", "ssl", _G.config.ssl_ctx);
-               end
+               print("");
+               print("**************************");
+               print("Prosody was unable to find the configuration file.");
+               print("We looked for: "..(CFG_CONFIGDIR or ".").."/prosody.cfg.lua");
+               print("A sample config file is included in the Prosody download called prosody.cfg.lua.dist");
+               print("Copy or rename it to prosody.cfg.lua and edit as necessary.");
+               print("More help on configuring Prosody can be found at http://prosody.im/doc/configure");
+               print("Good luck!");
+               print("**************************");
+               os.exit(1);
        end
 end
 
+require "util.dependencies"
+
 local server = require "net.server"
 
-require "util.dependencies"
 
 -- Maps connections to sessions --
 sessions = {};
@@ -82,7 +69,6 @@ hosts = {};
 require "util.import"
 require "core.xmlhandlers"
 require "core.rostermanager"
-require "core.offlinemessage"
 require "core.eventmanager"
 require "core.hostmanager"
 require "core.modulemanager"
@@ -108,30 +94,6 @@ require "util.jid"
 local data_path = config.get("*", "core", "data_path") or CFG_DATADIR or "data";
 require "util.datamanager".set_data_path(data_path);
 
-
-local path_separator = "/"; if os.getenv("WINDIR") then path_separator = "\\" end
-local _mkdir = {}
-function mkdir(path)
-       path = path:gsub("/", path_separator);
-       local x = io.popen("mkdir \""..path.."\" 2>&1"):read("*a");
-end
-function encode(s) return s and (s:gsub("%W", function (c) return string.format("%%%x", c:byte()); end)); end
-function mkdirs(host)
-       if not _mkdir[host] then
-               local host_dir = string.format("%s/%s", data_path, encode(host));
-               mkdir(host_dir);
-               mkdir(host_dir.."/accounts");
-               mkdir(host_dir.."/vcard");
-               mkdir(host_dir.."/roster");
-               mkdir(host_dir.."/private");
-               mkdir(host_dir.."/offline");
-               _mkdir[host] = true;
-       end
-end
-mkdir(data_path);
-
-eventmanager.add_event_hook("host-activated", mkdirs);
-
 ----------- End of out-of-place code --------------
 
 eventmanager.fire_event("server-starting");
@@ -147,9 +109,10 @@ if global_ssl_ctx then
 end
 
 -- start listening on sockets
-local function do_ports(option, listener, default, key)
+local function do_ports(option, listener, default, conntype)
        local ports = config.get("*", "core", option) or default;
        --if type(ports) == "number" then ports = {ports} end;
+       
        if type(ports) ~= "table" then
                log("error", "core."..option.." is not a table");
        else
@@ -157,19 +120,19 @@ local function do_ports(option, listener, default, key)
                        if type(port) ~= "number" then
                                log("error", "Non-numeric "..option..": "..tostring(port));
                        else
-                               cl.start(listener, { ssl = global_ssl_ctx, [key] = port });
+                               cl.start(listener, { ssl = conntype ~= "tcp" and global_ssl_ctx, port = port, type = conntype });
                        end
                end
        end
 end
 
-do_ports("c2s_ports", "xmppclient", {5222}, "port");
-do_ports("s2s_ports", "xmppserver", {5269}, "port");
-do_ports("legacy_ssl_ports", "xmppclient", {}, "legacy_ssl_port");
+do_ports("c2s_ports", "xmppclient", {5222}, (global_ssl_ctx and "tls") or "tcp");
+do_ports("s2s_ports", "xmppserver", {5269}, "tcp");
+do_ports("legacy_ssl_ports", "xmppclient", {}, "ssl");
 
 if config.get("*", "core", "console_enabled") then
        if cl.get("console") then
-               cl.start("console")
+               cl.start("console", { interface = config.get("*", "core", "console_interface") or "127.0.0.1" })
        else
                log("error", "Console is enabled, but the console module appears not to be loaded");
        end