X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=prosodyctl;h=358ec9eaacda242120512d5ad3471fefa5e76c8c;hb=71acb4cd83e7c13a6654557f104efb67a448bddd;hp=2557d8652b1b8986db2ea09081a12281427e3e77;hpb=194dc4fbd6b51571b3dff9317bf9e100b1c54270;p=prosody.git diff --git a/prosodyctl b/prosodyctl index 2557d865..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 @@ -125,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) @@ -154,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