From b84c790f0ba57f11bbe6bf01bbbc45337c7b9943 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 5 May 2009 13:23:46 +0100 Subject: prosodyctl: Switch to Prosody user before attempting to do anything --- prosodyctl | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'prosodyctl') diff --git a/prosodyctl b/prosodyctl index 7998d033..b7fe1d02 100755 --- a/prosodyctl +++ b/prosodyctl @@ -61,6 +61,29 @@ do end end +-- Switch away from root and into the prosody user -- +local switched_user, current_uid; +local ok, pposix = pcall(require, "util.pposix"); +if ok and pposix then + 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); + if ok then + -- Yay! + switched_user = true; + else + -- Boo! + print("Warning: Couldn't switch to Prosody user '"..tostring(desired_user).."': "..tostring(err)); + end + end +else + print("Error: Unable to load pposix module. Check that Prosody is installed correctly.") + print("For more help send the below error to us through http://prosody.im/discuss"); + print(tostring(pposix)) +end + local error_messages = setmetatable({ ["invalid-username"] = "The given username is invalid in a Jabber ID"; ["invalid-hostname"] = "The given hostname is invalid"; -- cgit v1.2.3 From 264c83dbd9a515de6fde79de746a7a4fe3f6fd55 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 5 May 2009 13:24:17 +0100 Subject: prosodyctl: status: Show warning if we can't find a running Prosody, and we didn't switch user --- prosodyctl | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'prosodyctl') diff --git a/prosodyctl b/prosodyctl index b7fe1d02..f451b7ee 100755 --- a/prosodyctl +++ b/prosodyctl @@ -314,6 +314,11 @@ function commands.status(arg) return 0; else show_message("Prosody is not running"); + if not switched_user and current_uid ~= 0 then + print("\nNote: You will also see this if prosodyctl is not running under the same"); + print(" user account as Prosody. Try running as root (e.g. with 'sudo' in front) to"); + print(" gain access to Prosody's real status."); + end return 2 end return 1; -- cgit v1.2.3