diff options
-rw-r--r-- | plugins/mod_posix.lua | 9 | ||||
-rw-r--r-- | util-src/pposix.c | 4 |
2 files changed, 13 insertions, 0 deletions
diff --git a/plugins/mod_posix.lua b/plugins/mod_posix.lua index db594ccc..e871e5cf 100644 --- a/plugins/mod_posix.lua +++ b/plugins/mod_posix.lua @@ -136,8 +136,17 @@ if daemonize == nil then end end +local function remove_log_sinks() + local lm = require "core.loggingmanager"; + lm.register_sink_type("console", nil); + lm.register_sink_type("stdout", nil); + lm.reload_logging(); +end + if daemonize then local function daemonize_server() + module:log("info", "Prosody is about to detach from the console, disabling further console output"); + remove_log_sinks(); local ok, ret = pposix.daemonize(); if not ok then module:log("error", "Failed to daemonize: %s", ret); diff --git a/util-src/pposix.c b/util-src/pposix.c index 191e276e..05303d99 100644 --- a/util-src/pposix.c +++ b/util-src/pposix.c @@ -89,6 +89,10 @@ static int lc_daemonize(lua_State *L) close(0); close(1); close(2); + /* Make sure accidental use of FDs 0, 1, 2 don't cause weirdness */ + open("/dev/null", O_RDONLY); + open("/dev/null", O_WRONLY); + open("/dev/null", O_WRONLY); /* Final fork, use it wisely */ if(fork()) |