Merge 0.9->trunk
authorKim Alvefur <zash@zash.se>
Sat, 23 Mar 2013 03:17:39 +0000 (04:17 +0100)
committerKim Alvefur <zash@zash.se>
Sat, 23 Mar 2013 03:17:39 +0000 (04:17 +0100)
29 files changed:
core/certmanager.lua
core/configmanager.lua
core/hostmanager.lua
core/loggingmanager.lua
core/moduleapi.lua
core/modulemanager.lua
core/sessionmanager.lua
core/usermanager.lua
plugins/mod_admin_adhoc.lua
plugins/mod_announce.lua
plugins/mod_auth_anonymous.lua
plugins/mod_c2s.lua
plugins/mod_component.lua
plugins/mod_groups.lua
plugins/mod_http.lua
plugins/mod_http_errors.lua
plugins/mod_iq.lua
plugins/mod_message.lua
plugins/mod_motd.lua
plugins/mod_presence.lua
plugins/mod_privacy.lua
plugins/mod_private.lua
plugins/mod_proxy65.lua
plugins/mod_register.lua
plugins/mod_roster.lua
plugins/mod_tls.lua
plugins/muc/mod_muc.lua
util/openssl.lua
util/prosodyctl.lua

index 8607e618a7f06b42f6f68b8c0860a3c44176630f..b91f7110b57205be6335a2e047200dc4b597b94c 100644 (file)
@@ -27,7 +27,7 @@ end
 module "certmanager"
 
 -- Global SSL options if not overridden per-host
-local default_ssl_config = configmanager.get("*", "core", "ssl");
+local default_ssl_config = configmanager.get("*", "ssl");
 local default_capath = "/etc/ssl/certs";
 local default_verify = (ssl and ssl.x509 and { "peer", "client_once", }) or "none";
 local default_options = { "no_sslv2", luasec_has_noticket and "no_ticket" or nil };
@@ -100,7 +100,7 @@ function create_context(host, mode, user_ssl_config)
 end
 
 function reload_ssl_config()
-       default_ssl_config = configmanager.get("*", "core", "ssl");
+       default_ssl_config = configmanager.get("*", "ssl");
 end
 
 prosody.events.add_handler("config-reloaded", reload_ssl_config);
index a0a1f81708184c62b1b6d5def6d8dd5a9026c301..e31dbd7233e7f1274ea8f842cb2256e55843c2ff 100644 (file)
@@ -25,7 +25,7 @@ local config_mt = { __index = function (t, k) return rawget(t, "*"); end};
 local config = setmetatable({ ["*"] = { } }, config_mt);
 
 -- When host not found, use global
-local host_mt = { };
+local host_mt = { __index = function(_, k) return config["*"][k] end }
 
 function getconfig()
        return config;
index 40401e4871c68ecb2bec6d6f42739743b7c0625e..06ba72a100c5d3ebdf73fa80bf14707a7b065703 100644 (file)
@@ -74,7 +74,7 @@ function activate(host, host_config)
                host = host;
                s2sout = {};
                events = events_new();
-               dialback_secret = configmanager.get(host, "core", "dialback_secret") or uuid_gen();
+               dialback_secret = configmanager.get(host, "dialback_secret") or uuid_gen();
                send = host_send;
                modules = {};
        };
index c3fc83e444998b7feff05fffc5d711949d841597..c69dede85edf747d4c5f935f99fea5b06887d72a 100644 (file)
@@ -146,7 +146,7 @@ function reload_logging()
        
        logger.reset();
 
-       local debug_mode = config.get("*", "core", "debug");
+       local debug_mode = config.get("*", "debug");
 
        default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } };
        default_file_logging = {
@@ -154,7 +154,7 @@ function reload_logging()
        };
        default_timestamp = "%b %d %H:%M:%S";
 
-       logging_config = config.get("*", "core", "log") or default_logging;
+       logging_config = config.get("*", "log") or default_logging;
        
        
        for name, sink_maker in pairs(old_sink_types) do
index 20898fcf1397e6083180e7e047664c8a97e40c80..f970147133ae755a95c3db8e25cde8e792aafca6 100644 (file)
@@ -167,12 +167,9 @@ function api:shared(...)
 end
 
 function api:get_option(name, default_value)
-       local value = config.get(self.host, self.name, name);
+       local value = config.get(self.host, name);
        if value == nil then
-               value = config.get(self.host, "core", name);
-               if value == nil then
-                       value = default_value;
-               end
+               value = default_value;
        end
        return value;
 end
index 4ba2c27e582491b9d4f38bebc5abc979a594e7b5..35b9d0e55775328c57f261a2e4b25470b30b422a 100644 (file)
@@ -44,12 +44,12 @@ local modulemap = { ["*"] = {} };
 
 -- Load modules when a host is activated
 function load_modules_for_host(host)
-       local component = config.get(host, "core", "component_module");
+       local component = config.get(host, "component_module");
        
-       local global_modules_enabled = config.get("*", "core", "modules_enabled");
-       local global_modules_disabled = config.get("*", "core", "modules_disabled");
-       local host_modules_enabled = config.get(host, "core", "modules_enabled");
-       local host_modules_disabled = config.get(host, "core", "modules_disabled");
+       local global_modules_enabled = config.get("*", "modules_enabled");
+       local global_modules_disabled = config.get("*", "modules_disabled");
+       local host_modules_enabled = config.get(host, "modules_enabled");
+       local host_modules_disabled = config.get(host, "modules_disabled");
        
        if host_modules_enabled == global_modules_enabled then host_modules_enabled = nil; end
        if host_modules_disabled == global_modules_disabled then host_modules_disabled = nil; end
@@ -218,7 +218,7 @@ local function do_reload_module(host, name)
                        saved = ret;
                else
                        log("warn", "Error saving module '%s:%s' state: %s", host, name, ret);
-                       if not config.get(host, "core", "force_module_reload") then
+                       if not config.get(host, "force_module_reload") then
                                log("warn", "Aborting reload due to error, set force_module_reload to ignore this");
                                return nil, "save-state-failed";
                        else
index 05b2d64b918b12cd40d53908ff4f198fcc03b785..e721835d9bc88e34920f4c9b3236446918fd1bd7 100644 (file)
@@ -140,7 +140,7 @@ function bind_resource(session, resource)
                local sessions = hosts[session.host].sessions[session.username].sessions;
                if sessions[resource] then
                        -- Resource conflict
-                       local policy = config_get(session.host, "core", "conflict_resolve");
+                       local policy = config_get(session.host, "conflict_resolve");
                        local increment;
                        if policy == "random" then
                                resource = uuid_generate();
index 417d70375bd8d315780db7e32e83496da71267a6..08343bee3c580233e45ab4ccb4eb87fd61f3e577 100644 (file)
@@ -42,8 +42,8 @@ function initialize_host(host)
        
        host_session.events.add_handler("item-added/auth-provider", function (event)
                local provider = event.item;
-               local auth_provider = config.get(host, "core", "authentication") or default_provider;
-               if config.get(host, "core", "anonymous_login") then
+               local auth_provider = config.get(host, "authentication") or default_provider;
+               if config.get(host, "anonymous_login") then
                        log("error", "Deprecated config option 'anonymous_login'. Use authentication = 'anonymous' instead.");
                        auth_provider = "anonymous";
                end -- COMPAT 0.7
@@ -61,8 +61,8 @@ function initialize_host(host)
                end
        end);
        host_session.users = new_null_provider(); -- Start with the default usermanager provider
-       local auth_provider = config.get(host, "core", "authentication") or default_provider;
-       if config.get(host, "core", "anonymous_login") then auth_provider = "anonymous"; end -- COMPAT 0.7
+       local auth_provider = config.get(host, "authentication") or default_provider;
+       if config.get(host, "anonymous_login") then auth_provider = "anonymous"; end -- COMPAT 0.7
        if auth_provider ~= "null" then
                modulemanager.load(host, "auth_"..auth_provider);
        end
@@ -116,8 +116,8 @@ function is_admin(jid, host)
        jid = jid_bare(jid);
        host = host or "*";
        
-       local host_admins = config.get(host, "core", "admins");
-       local global_admins = config.get("*", "core", "admins");
+       local host_admins = config.get(host, "admins");
+       local global_admins = config.get("*", "admins");
        
        if host_admins and host_admins ~= global_admins then
                if type(host_admins) == "table" then
index f136eb460e0a5fe5e6fb0d15e74bdccfab60bf11..ff672fc9f86644f1c572fa32822d92f120c2a302 100644 (file)
@@ -10,8 +10,7 @@ local prosody = _G.prosody;
 local hosts = prosody.hosts;
 local t_concat = table.concat;
 
-local iterators = require "util.iterators";
-local keys, values = iterators.keys, iterators.values;
+local keys = require "util.iterators".keys;
 local usermanager_user_exists = require "core.usermanager".user_exists;
 local usermanager_create_user = require "core.usermanager".create_user;
 local usermanager_delete_user = require "core.usermanager".delete_user;
@@ -19,9 +18,8 @@ local usermanager_get_password = require "core.usermanager".get_password;
 local usermanager_set_password = require "core.usermanager".set_password;
 local hostmanager_activate = require "core.hostmanager".activate;
 local hostmanager_deactivate = require "core.hostmanager".deactivate;
-local is_admin = require "core.usermanager".is_admin;
 local rm_load_roster = require "core.rostermanager".load_roster;
-local st, jid, uuid = require "util.stanza", require "util.jid", require "util.uuid";
+local st, jid = require "util.stanza", require "util.jid";
 local timer_add_task = require "util.timer".add_task;
 local dataforms_new = require "util.dataforms".new;
 local array = require "util.array";
index 0872bd216462e8e799128326ac8c1062e4d74439..96976d6f843df6ae51611fea541c846587ece9b3 100644 (file)
@@ -8,6 +8,7 @@
 
 local st, jid = require "util.stanza", require "util.jid";
 
+local hosts = prosody.hosts;
 local is_admin = require "core.usermanager".is_admin;
 
 function send_to_online(message, host)
index a327f43816d12e356bd8e16df52ad4bde3daa931..c877d532f69e30ee8176c5f5ab17f7e2020aab34 100644 (file)
@@ -8,6 +8,7 @@
 
 local new_sasl = require "util.sasl".new;
 local datamanager = require "util.datamanager";
+local hosts = prosody.hosts;
 
 -- define auth provider
 local provider = {};
index 89d678caedc62ef446ab0163f353a7cd5345c42e..4a3197d9c479d92427deec91a340506b39223be7 100644 (file)
@@ -29,6 +29,7 @@ local opt_keepalives = module:get_option_boolean("tcp_keepalives", false);
 
 local sessions = module:shared("sessions");
 local core_process_stanza = prosody.core_process_stanza;
+local hosts = prosody.hosts;
 
 local stream_callbacks = { default_ns = "jabber:client", handlestanza = core_process_stanza };
 local listener = {};
index 68d8a5de2a65526f1523d47d37c57537f796c555..871a20e4a28f27a1f01507d5829c29c850d7f7ba 100644 (file)
@@ -19,7 +19,7 @@ local new_xmpp_stream = require "util.xmppstream".new;
 local uuid_gen = require "util.uuid".generate;
 
 local core_process_stanza = prosody.core_process_stanza;
-
+local hosts = prosody.hosts;
 
 local log = module._log;
 
index 7a876f1d6845a67f4e69f57d4564cdd73e086176..199925f9c2da711ab7760447e489f3befc8ba362 100644 (file)
@@ -80,7 +80,7 @@ function remove_virtual_contacts(username, host, datastore, data)
 end
 
 function module.load()
-       groups_file = config.get(module:get_host(), "core", "groups_file");
+       groups_file = module:get_option_string("groups_file");
        if not groups_file then return; end
        
        module:hook("roster-load", inject_roster_contacts);
index c53815779afd4037a663bfecc0e6fa0be97483f1..2fa874215003efa217a87f4422b36613344e0519 100644 (file)
@@ -9,6 +9,7 @@
 module:set_global();
 module:depends("http_errors");
 
+local portmanager = require "core.portmanager";
 local moduleapi = require "core.moduleapi";
 local url_parse = require "socket.url".parse;
 local url_build = require "socket.url".build;
index 828216dd20475f3d0f881355f923ba86f001ec8a..2568ea80aa8a73f31d824acfcd9276d206ea1985 100644 (file)
@@ -2,7 +2,6 @@ module:set_global();
 
 local server = require "net.http.server";
 local codes = require "net.http.codes";
-local termcolours = require "util.termcolours";
 
 local show_private = module:get_option_boolean("http_errors_detailed", false);
 local always_serve = module:get_option_boolean("http_errors_always_show", true);
index 8044a533aeadec26d3d23e1d3738b16f413c8dc8..e7901ab451c1014a73dee303d870b4ad4b9318a2 100644 (file)
@@ -9,7 +9,7 @@
 
 local st = require "util.stanza";
 
-local full_sessions = full_sessions;
+local full_sessions = prosody.full_sessions;
 
 if module:get_host_type() == "local" then
        module:hook("iq/full", function(data)
index 0b0ad8e4985a2a5d4d057081a208b8bd98325b60..e85da613198d2a17a52e3b5acc7c8a00e4b8aa4e 100644 (file)
@@ -7,8 +7,8 @@
 --
 
 
-local full_sessions = full_sessions;
-local bare_sessions = bare_sessions;
+local full_sessions = prosody.full_sessions;
+local bare_sessions = prosody.bare_sessions;
 
 local st = require "util.stanza";
 local jid_bare = require "util.jid".bare;
index fea2cb858b4eea62f8c7bf8077c3edecf55d56d4..ed78294b1fd07a78ced7c9fb5cc04c78974241b3 100644 (file)
@@ -13,7 +13,6 @@ local motd_jid = module:get_option_string("motd_jid", host);
 
 if not motd_text then return; end
 
-local jid_join = require "util.jid".join;
 local st = require "util.stanza";
 
 motd_text = motd_text:gsub("^%s*(.-)%s*$", "%1"):gsub("\n%s+", "\n"); -- Strip indentation from the config
index 23012750d46e00837bcbfb39637c450a1ea39d51..b6e3fc18fda2febb1a1824f2c55b41e9d7b23a5d 100644 (file)
@@ -19,7 +19,9 @@ local st = require "util.stanza";
 local jid_split = require "util.jid".split;
 local jid_bare = require "util.jid".bare;
 local datetime = require "util.datetime";
-local hosts = hosts;
+local hosts = prosody.hosts;
+local bare_sessions = prosody.bare_sessions;
+local full_sessions = prosody.full_sessions;
 local NULL = {};
 
 local rostermanager = require "core.rostermanager";
index 2d696154cce03701c584f4692909fe61a2faf51a..7ec94922ad562170f1f118393f3524a5e15f9c66 100644 (file)
@@ -9,10 +9,9 @@
 
 module:add_feature("jabber:iq:privacy");
 
-local prosody = prosody;
 local st = require "util.stanza";
 local datamanager = require "util.datamanager";
-local bare_sessions, full_sessions = bare_sessions, full_sessions;
+local bare_sessions, full_sessions = prosody.bare_sessions, prosody.full_sessions;
 local util_Jid = require "util.jid";
 local jid_bare = util_Jid.bare;
 local jid_split, jid_join = util_Jid.split, util_Jid.join;
index f1ebe786c111f1f39fe44d2d97e32c8e6c8aad31..29d3162c8f9631947e4ad17ac6f747d71a040621 100644 (file)
@@ -9,7 +9,6 @@
 
 local st = require "util.stanza"
 
-local jid_split = require "util.jid".split;
 local datamanager = require "util.datamanager"
 
 module:add_feature("jabber:iq:private");
index 0d05b2ac95236f3b589c934e94899f1bc3860937..1fa42bd86b88e299eddde68c12f4a364a17227a5 100644 (file)
@@ -95,7 +95,7 @@ function module.add_host(module)
        local proxy_port = next(portmanager.get_active_services():search("proxy65", nil)[1] or {});
        local proxy_acl = module:get_option("proxy65_acl");
 
-       -- COMPAT w/pre-0.9 where proxy65_port was specified the components section of the config
+       -- COMPAT w/pre-0.9 where proxy65_port was specified in the components section of the config
        local legacy_config = module:get_option_number("proxy65_port");
        if legacy_config then
                module:log("warn", "proxy65_port is deprecated, please put proxy65_ports = { %d } into the global section instead", legacy_config);
index b3abd394159c1660b5a217c393c663de8ccd4d04..e941a128967a1697c785278bdff66e7298e25a4d 100644 (file)
@@ -7,7 +7,6 @@
 --
 
 
-local hosts = _G.hosts;
 local st = require "util.stanza";
 local datamanager = require "util.datamanager";
 local dataform_new = require "util.dataforms".new;
index 40d95be7018b8131c96dce6d130c6ee52e81db38..d530bb456eeb9e55bce64bd745aa56fb6a8f2ceb 100644 (file)
@@ -69,7 +69,6 @@ module:hook("iq/self/jabber:iq:roster:query", function(event)
                                and query.tags[1].attr.jid ~= "pending" then
                        local item = query.tags[1];
                        local from_node, from_host = jid_split(stanza.attr.from);
-                       local from_bare = from_node and (from_node.."@"..from_host) or from_host; -- bare JID
                        local jid = jid_prep(item.attr.jid);
                        local node, host, resource = jid_split(jid);
                        if not resource and host then
index 707ae8f5aecb530430f0aa9e582b03ddb39323e7..80b56abbb41b8b6482ecf1846ea9cb75d2142a43 100644 (file)
@@ -25,6 +25,7 @@ if secure_s2s_only then s2s_feature:tag("required"):up(); end
 
 local global_ssl_ctx = prosody.global_ssl_ctx;
 
+local hosts = prosody.hosts;
 local host = hosts[module.host];
 
 local function can_do_tls(session)
@@ -91,10 +92,10 @@ module:hook_stanza(xmlns_starttls, "proceed", function (session, stanza)
 end);
 
 function module.load()
-       local ssl_config = config.rawget(module.host, "core", "ssl");
+       local ssl_config = config.rawget(module.host, "ssl");
        if not ssl_config then
                local base_host = module.host:match("%.(.*)");
-               ssl_config = config.get(base_host, "core", "ssl");
+               ssl_config = config.get(base_host, "ssl");
        end
        host.ssl_ctx = create_context(host.host, "client", ssl_config); -- for outgoing connections
        host.ssl_ctx_in = create_context(host.host, "server", ssl_config); -- for incoming connections
index 9f907f172736ac063988951c436588d83a5bc1ee..2c2d02f783170055bf5ef078be4a77993fa8bf0e 100644 (file)
@@ -30,7 +30,7 @@ local st = require "util.stanza";
 local uuid_gen = require "util.uuid".generate;
 local datamanager = require "util.datamanager";
 local um_is_admin = require "core.usermanager".is_admin;
-local hosts = hosts;
+local hosts = prosody.hosts;
 
 rooms = {};
 local rooms = rooms;
index b3dc2943853b3eab1838c2189e8e408331eb21e2..0decb5797a481d8782c1dad37fb95d204110af1e 100644 (file)
@@ -100,13 +100,13 @@ function ssl_config:from_prosody(hosts, config, certhosts)
                        if name == certhost or name:sub(-1-#certhost) == "."..certhost then
                                found_matching_hosts = true;
                                self:add_dNSName(name);
-                               --print(name .. "#component_module: " .. (config.get(name, "core", "component_module") or "nil"));
-                               if config.get(name, "core", "component_module") == nil then
+                               --print(name .. "#component_module: " .. (config.get(name, "component_module") or "nil"));
+                               if config.get(name, "component_module") == nil then
                                        self:add_sRVName(name, "xmpp-client");
                                end
-                               --print(name .. "#anonymous_login: " .. tostring(config.get(name, "core", "anonymous_login")));
-                               if not (config.get(name, "core", "anonymous_login") or
-                                               config.get(name, "core", "authentication") == "anonymous") then
+                               --print(name .. "#anonymous_login: " .. tostring(config.get(name, "anonymous_login")));
+                               if not (config.get(name, "anonymous_login") or
+                                               config.get(name, "authentication") == "anonymous") then
                                        self:add_sRVName(name, "xmpp-server");
                                end
                                self:add_xmppAddr(name);
index e38f85d47a26ea5a6d0e24e5dbea7ebb0cfde0a9..1ab1d0bb9d90c4c3dd84328a9c62095008cbc9db 100644 (file)
@@ -182,12 +182,12 @@ function deluser(params)
 end
 
 function getpid()
-       local pidfile = config.get("*", "core", "pidfile");
+       local pidfile = config.get("*", "pidfile");
        if not pidfile then
                return false, "no-pidfile";
        end
        
-       local modules_enabled = set.new(config.get("*", "core", "modules_enabled"));
+       local modules_enabled = set.new(config.get("*", "modules_enabled"));
        if not modules_enabled:contains("posix") then
                return false, "no-posix";
        end