componentmanager: Don't error on stanzas to bare component JID
[prosody.git] / plugins / mod_posix.lua
index f8fda7cd7ac571572e7256de330e302fc1c16b4f..f8a168f0ad0cf9594ee43c349ed49be038ddbd23 100644 (file)
@@ -6,7 +6,7 @@ if pposix._VERSION ~= want_pposix_version then module:log("warn", "Unknown versi
 
 local signal = select(2, pcall(require, "util.signal"));
 if type(signal) == "string" then
-       log("warn", "Couldn't load signal library, won't respond to SIGTERM");
+       module:log("warn", "Couldn't load signal library, won't respond to SIGTERM");
 end
 
 local config_get = require "core.configmanager".get;
@@ -14,11 +14,20 @@ local logger_set = require "util.logger".setwriter;
 
 module.host = "*"; -- we're a global module
 
+-- Don't even think about it!
+module:add_event_hook("server-starting", function ()
+               if pposix.getuid() == 0 and not config_get("*", "core", "run_as_root") then
+                       module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!");
+                       module:log("error", "For more information on running Prosody as root, see http://prosody.im/doc/root");
+                       _G.prosody_shutdown("Refusing to run as root");
+               end
+       end);
+
 local pidfile_written;
 
 local function remove_pidfile()
        if pidfile_written then
-               os.remove(pidfile);
+               os.remove(pidfile_written);
                pidfile_written = nil;
        end
 end
@@ -27,11 +36,11 @@ local function write_pidfile()
        if pidfile_written then
                remove_pidfile();
        end
-       local pidfile = config.get("*", "core", "pidfile");
+       local pidfile = config_get("*", "core", "pidfile");
        if pidfile then
                local pf, err = io.open(pidfile, "w+");
                if not pf then
-                       log("error", "Couldn't write pidfile; %s", err);
+                       module:log("error", "Couldn't write pidfile; %s", err);
                else
                        pf:write(tostring(pposix.getpid()));
                        pf:close();
@@ -43,7 +52,6 @@ end
 local syslog_opened 
 function syslog_sink_maker(config)
        if not syslog_opened then
-               print("OPENING SYSLOOOOOOOOOG");
                pposix.syslog_open("prosody");
                syslog_opened = true;
        end
@@ -62,11 +70,11 @@ if not config_get("*", "core", "no_daemonize") then
        local function daemonize_server()
                local ok, ret = pposix.daemonize();
                if not ok then
-                       log("error", "Failed to daemonize: %s", ret);
+                       module:log("error", "Failed to daemonize: %s", ret);
                elseif ret and ret > 0 then
                        os.exit(0);
                else
-                       log("info", "Successfully daemonized to PID %d", pposix.getpid());
+                       module:log("info", "Successfully daemonized to PID %d", pposix.getpid());
                        write_pidfile();
                end
        end
@@ -78,16 +86,18 @@ end
 
 module:add_event_hook("server-stopped", remove_pidfile);
 
--- Set signal handler
+-- Set signal handlers
 if signal.signal then
        signal.signal("SIGTERM", function ()
-               log("warn", "Received SIGTERM...");
-               unlock_globals();
-               if prosody_shutdown then
-                       prosody_shutdown("Received SIGTERM");
-               else
-                       log("warn", "...no prosody_shutdown(), ignoring.");
-               end
-               lock_globals();
+               module:log("warn", "Received SIGTERM");
+               _G.unlock_globals();
+               _G.prosody_shutdown("Received SIGTERM");
+               _G.lock_globals();
+       end);
+
+       signal.signal("SIGHUP", function ()
+               module:log("info", "Received SIGHUP");
+               _G.prosody_reload_config();
+               _G.prosody_reopen_logfiles();
        end);
 end