net.http: Removed old HTTP parser, and updated to use util.httpstream.
[prosody.git] / prosodyctl
index 4aaf90c5a1a8f3ff2ff8665bc4c0ce295e190cc9..74dade5f53858bbc2b62fa421bee18c7fc916b90 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"
 
@@ -77,7 +79,7 @@ require "util.datamanager".set_data_path(data_path);
 -- Switch away from root and into the prosody user --
 local switched_user, current_uid;
 
-local want_pposix_version = "0.3.3";
+local want_pposix_version = "0.3.5";
 local ok, pposix = pcall(require, "util.pposix");
 
 if ok and pposix then
@@ -88,6 +90,9 @@ if ok and pposix then
                local desired_user = config.get("*", "core", "prosody_user") or "prosody";
                local desired_group = config.get("*", "core", "prosody_group") or desired_user;
                local ok, err = pposix.setgid(desired_group);
+               if ok then
+                       ok, err = pposix.initgroups(desired_user);
+               end
                if ok then
                        ok, err = pposix.setuid(desired_user);
                        if ok then
@@ -109,6 +114,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";
@@ -243,12 +287,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 +326,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 +365,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