From: Mark Andrews Date: Sun, 4 Dec 2016 23:38:16 +0000 (+1100) Subject: added -T keepstderr to keep stderr open when daemonizing [RT #43736] X-Git-Tag: v9.12.0a1~627 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=c9ee977f31b8108938e1e6ab4918272a877db484;p=thirdparty%2Fbind9.git added -T keepstderr to keep stderr open when daemonizing [RT #43736] --- diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index c95350ce55b..dcc713f8104 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -171,6 +171,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 a9fe459496f..00002a9eead 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -643,6 +643,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 e24be1b8147..27705c1cf4f 100644 --- a/bin/named/unix/os.c +++ b/bin/named/unix/os.c @@ -39,6 +39,7 @@ #include #include +#include #include #include #ifdef HAVE_LIBSCF @@ -453,7 +454,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); }