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); }