From 88ec925cfc77ba6e3d5074a919dc1b3bd1d49fe9 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Mon, 5 Dec 2016 10:38:16 +1100 Subject: [PATCH] added -T keepstderr to keep stderr open when daemonizing [RT #43736] (cherry picked from commit c9ee977f31b8108938e1e6ab4918272a877db484) --- bin/named/include/named/globals.h | 1 + bin/named/main.c | 3 +++ bin/named/unix/os.c | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index c0599fbd11..bfe00eb908 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -164,6 +164,7 @@ EXTERN isc_boolean_t ns_g_dropedns INIT(ISC_FALSE); EXTERN isc_boolean_t ns_g_noedns INIT(ISC_FALSE); EXTERN isc_boolean_t ns_g_nosoa INIT(ISC_FALSE); EXTERN isc_boolean_t ns_g_noaa INIT(ISC_FALSE); +EXTERN isc_boolean_t ns_g_keepstderr INIT(ISC_FALSE); EXTERN unsigned int ns_g_delay INIT(0); EXTERN isc_boolean_t ns_g_nonearest INIT(ISC_FALSE); EXTERN isc_boolean_t ns_g_notcp INIT(ISC_FALSE); diff --git a/bin/named/main.c b/bin/named/main.c index d66a1411d8..82ae2315fc 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -616,6 +616,9 @@ parse_command_line(int argc, char *argv[]) { else if (!strncmp(isc_commandline_argument, "tat=", 4)) ns_g_tat_interval = atoi(isc_commandline_argument + 4); + else if (!strcmp(isc_commandline_argument, + "keepstderr")) + ns_g_keepstderr = ISC_TRUE; else fprintf(stderr, "unknown -T flag '%s\n", isc_commandline_argument); diff --git a/bin/named/unix/os.c b/bin/named/unix/os.c index 953bbdd163..0bf585634c 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -48,6 +48,7 @@ #include #include +#include #include #include #ifdef HAVE_LIBSCF @@ -460,7 +461,7 @@ ns_os_daemonize(void) { (void)close(STDOUT_FILENO); (void)dup2(devnullfd, STDOUT_FILENO); } - if (devnullfd != STDERR_FILENO) { + if (devnullfd != STDERR_FILENO && !ns_g_keepstderr) { (void)close(STDERR_FILENO); (void)dup2(devnullfd, STDERR_FILENO); }