From 62b68364c769ea5544807df7ca8e0c98c2cffec7 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Fri, 16 Dec 2022 16:19:51 +0000 Subject: [PATCH] Fix std* files not being redirected when daemonising This could occur when built with assertions removed. Closes #2708. Thanks to ckoehne. --- ChangeLog.txt | 2 ++ src/mosquitto.c | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 041ed9ac..1140dd3b 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -3,6 +3,8 @@ Broker: disappearing. - Fix some retained topic memory not being cleared immediately after used. - Fix error handling related to the `bind_interface` option. +- Fix std* files not being redirected when daemonising, when built with + assertions removed. Closes #2708. 2.0.15 - 2022-08-16 =================== diff --git a/src/mosquitto.c b/src/mosquitto.c index 09632f28..4dfd2bde 100644 --- a/src/mosquitto.c +++ b/src/mosquitto.c @@ -160,9 +160,18 @@ static void mosquitto__daemonise(void) exit(1); } - assert(freopen("/dev/null", "r", stdin)); - assert(freopen("/dev/null", "w", stdout)); - assert(freopen("/dev/null", "w", stderr)); + if(!freopen("/dev/null", "r", stdin)){ + log__printf(NULL, MOSQ_LOG_ERR, "Error whilst daemonising (%s): %s", "stdin", strerror(errno)); + exit(1); + } + if(!freopen("/dev/null", "w", stdout)){ + log__printf(NULL, MOSQ_LOG_ERR, "Error whilst daemonising (%s): %s", "stdout", strerror(errno)); + exit(1); + } + if(!freopen("/dev/null", "w", stderr)){ + log__printf(NULL, MOSQ_LOG_ERR, "Error whilst daemonising (%s): %s", "stderr", strerror(errno)); + exit(1); + } #else log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Can't start in daemon mode in Windows."); #endif