X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosodyctl;h=358ec9eaacda242120512d5ad3471fefa5e76c8c;hb=dcb8c8c12d026062ac3f049cf586523e243b3540;hp=980aa329d8a00ccd324e8967af8311ba5cadcc36;hpb=dfba9a4240436bbb80ff14074eb16b7a3f275de7;p=prosody.git diff --git a/prosodyctl b/prosodyctl index 980aa329..358ec9ea 100755 --- a/prosodyctl +++ b/prosodyctl @@ -1,5 +1,5 @@ #!/usr/bin/env lua --- Prosody IM v0.4 +-- Prosody IM -- Copyright (C) 2008-2009 Matthew Wild -- Copyright (C) 2008-2009 Waqas Hussain -- @@ -66,19 +66,28 @@ 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.1"; local ok, pposix = pcall(require, "util.pposix"); + if ok and pposix then + if pposix._VERSION ~= want_pposix_version then print(string.format("Unknown version (%s) of binary pposix module, expected %s", tostring(pposix._VERSION), want_pposix_version)); return; end current_uid = pposix.getuid(); if current_uid == 0 then -- We haz root! local desired_user = config.get("*", "core", "prosody_user") or "prosody"; - local ok, err = pposix.setuid(desired_user); + local desired_group = config.get("*", "core", "prosody_group") or desired_user; + local ok, err = pposix.setgid(desired_group); if ok then - -- Yay! - switched_user = true; - else + ok, err = pposix.setuid(desired_user); + if ok then + -- Yay! + switched_user = true; + end + end + if not switched_user then -- Boo! - print("Warning: Couldn't switch to Prosody user '"..tostring(desired_user).."': "..tostring(err)); + print("Warning: Couldn't switch to Prosody user/group '"..tostring(desired_user).."'/'"..tostring(desired_group).."': "..tostring(err)); end end else @@ -95,6 +104,7 @@ local error_messages = setmetatable({ ["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-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 }); hosts = {}; @@ -124,17 +134,21 @@ end local function getchar(n) os.execute("stty raw -echo"); - local char = io.read(n or 1); + local ok, char = pcall(io.read, n or 1); os.execute("stty sane"); - return char; + if ok then + return char; + end end local function getpass() os.execute("stty -echo"); - local pass = io.read("*l"); + local ok, pass = pcall(io.read, "*l"); os.execute("stty sane"); io.write("\n"); - return pass; + if ok then + return pass; + end end function show_yesno(prompt) @@ -153,6 +167,10 @@ local function read_password() while true do io.write("Enter new password: "); password = getpass(); + if not password then + show_message("No password - cancelled"); + return; + end io.write("Retype new password: "); if getpass() ~= password then if not show_yesno [=[Passwords did not match, try again? [Y/n]]=] then @@ -443,7 +461,7 @@ end --------------------- -if command:match("^mod_") then -- Is a command in a module +if command and command:match("^mod_") then -- Is a command in a module local module_name = command:match("^mod_(.+)"); local ret, err = modulemanager.load("*", module_name); if not ret then