X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosodyctl;h=8fa12807d1832db705e9decd9e1e16f9d268fa51;hb=a1d7c415c23f8ba63feea6e1ca71fbb5e60290dc;hp=b2cb43f4861d761e10fcd9895e1b144331fcff9c;hpb=8c1e5749ef203b1a4edcc8e7d8cf1a856019cd5b;p=prosody.git diff --git a/prosodyctl b/prosodyctl index b2cb43f4..8fa12807 100755 --- a/prosodyctl +++ b/prosodyctl @@ -64,7 +64,7 @@ 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" @@ -79,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 @@ -90,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 @@ -111,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"; @@ -118,6 +160,7 @@ local error_messages = setmetatable({ ["no-such-user"] = "The given user does not exist on the server"; ["unable-to-save-data"] = "Unable to store, perhaps you don't have permission?"; ["no-pidfile"] = "There is no 'pidfile' option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help"; + ["no-posix"] = "The mod_posix module is not enabled in the Prosody config file, see http://prosody.im/doc/prosodyctl for more info"; ["no-such-method"] = "This module has no commands"; ["not-running"] = "Prosody is not running"; }, { __index = function (t,k) return "Error: "..(tostring(k):gsub("%-", " "):gsub("^.", string.upper)); end }); @@ -125,7 +168,11 @@ local error_messages = setmetatable({ hosts = prosody.hosts; local function make_host(hostname) - return { events = prosody.events, users = require "core.usermanager".new_null_provider(hostname) }; + return { + type = "local", + events = prosody.events, + users = require "core.usermanager".new_null_provider(hostname) + }; end for hostname, config in pairs(config.getconfig()) do