MUC: Fixed: Unavilable presence was not being broadcasted for banned users in some...
[prosody.git] / prosodyctl
index c0cd89a0c985c454332cdb8e77e9020f8d4a6d78..9bb8d4ad7173137887bd36d9e00b8e36d3eaf245 100755 (executable)
@@ -64,6 +64,8 @@ do
                os.exit(1);
        end
 end
+local original_logging_config = config.get("*", "core", "log");
+config.set("*", "core", "log", { { levels = { min="info" }, to = "console" } });
 
 require "core.loggingmanager"
 
@@ -109,6 +111,45 @@ else
        print(tostring(pposix))
 end
 
+local function test_writeable(filename)
+       local f, err = io.open(filename, "a");
+       if not f then
+               return false, err;
+       end
+       f:close();
+       return true;
+end
+
+local unwriteable_files = {};
+if type(original_logging_config) == "string" and original_logging_config:sub(1,1) ~= "*" then
+       local ok, err = test_writeable(original_logging_config);
+       if not ok then
+               table.insert(unwriteable_files, err);
+       end
+elseif type(original_logging_config) == "table" then
+       for _, rule in ipairs(original_logging_config) do
+               if rule.filename then
+                       local ok, err = test_writeable(rule.filename);
+                       if not ok then
+                               table.insert(unwriteable_files, err);
+                       end
+               end
+       end
+end
+
+if #unwriteable_files > 0 then
+       print("One of more of the Prosody log files are not");
+       print("writeable, please correct the errors and try");
+       print("starting prosodyctl again.");
+       print("");
+       for _, err in ipairs(unwriteable_files) do
+               print(err);
+       end
+       print("");
+       os.exit(1);
+end
+
+
 local error_messages = setmetatable({ 
                ["invalid-username"] = "The given username is invalid in a Jabber ID";
                ["invalid-hostname"] = "The given hostname is invalid";
@@ -123,7 +164,7 @@ local error_messages = setmetatable({
 hosts = prosody.hosts;
 
 local function make_host(hostname)
-       return { events = prosody.events, users = require "core.usermanager".new_default_provider(hostname) };
+       return { events = prosody.events, users = require "core.usermanager".new_null_provider(hostname) };
 end
 
 for hostname, config in pairs(config.getconfig()) do
@@ -243,12 +284,6 @@ function commands.adduser(arg)
                show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
                show_warning("The user will not be able to log in until this is changed.");
                hosts[host] = make_host(host);
-       elseif config.get(host, "core", "authentication")
-               and config.get(host, "core", "authentication") ~= "default" then
-               show_warning("The host '%s' is configured to use the '%s' authentication provider", host,
-                       config.get(host, "core", "authentication"));
-               show_warning("prosodyctl currently only supports the default provider, sorry :(");
-               return 1;
        end
        
        if prosodyctl.user_exists{ user = user, host = host } then
@@ -288,12 +323,6 @@ function commands.passwd(arg)
                show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
                show_warning("The user will not be able to log in until this is changed.");
                hosts[host] = make_host(host);
-       elseif config.get(host, "core", "authentication")
-               and config.get(host, "core", "authentication") ~= "default" then
-               show_warning("The host '%s' is configured to use the '%s' authentication provider", host,
-                       config.get(host, "core", "authentication"));
-               show_warning("prosodyctl currently only supports the default provider, sorry :(");
-               return 1;
        end
        
        if not prosodyctl.user_exists { user = user, host = host } then
@@ -333,12 +362,6 @@ function commands.deluser(arg)
                show_warning("The host '%s' is not listed in the configuration file (or is not enabled).", host)
                show_warning("The user will not be able to log in until this is changed.");
                hosts[host] = make_host(host);
-       elseif config.get(host, "core", "authentication")
-               and config.get(host, "core", "authentication") ~= "default" then
-               show_warning("The host '%s' is configured to use the '%s' authentication provider", host,
-                       config.get(host, "core", "authentication"));
-               show_warning("prosodyctl currently only supports the default provider, sorry :(");
-               return 1;
        end
 
        if not prosodyctl.user_exists { user = user, host = host } then
@@ -538,37 +561,6 @@ function commands.unregister(arg)
        return 1;
 end
 
-local http_errors = {
-       [404] = "Plugin not found, did you type the address correctly?"
-       };
-
-function commands.addplugin(arg)
-       if not arg[1] or arg[1] == "--help" then
-               show_usage("addplugin URL", "Download and install a plugin from a URL");
-               return 1;
-       end
-       local url = arg[1];
-       if url:match("^http://") then
-               local http = require "socket.http";
-               show_message("Fetching...");
-               local code, err = http.request(url);
-               if not code or not tostring(err):match("^[23]") then
-                       show_message("Failed: "..(http_errors[err] or ("HTTP error "..err)));
-                       return 1;
-               end
-               if url:match("%.lua$") then
-                       local ok, err = datamanager.store(url:match("/mod_([^/]+)$"), "*", "plugins", {code});
-                       if not ok then
-                               show_message("Failed to save to data store: "..err);
-                               return 1;
-                       end
-               end
-               show_message("Saved. Don't forget to load the module using the config file or admin console!");
-       else
-               show_message("Sorry, I don't understand how to fetch plugins from there.");
-       end
-end
-
 ---------------------
 
 if command and command:match("^mod_") then -- Is a command in a module