From 2f1352416400280550f3b1a2fe41e842536b3580 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 5 Feb 2019 14:13:04 -0800 Subject: [PATCH 1/4] initalize a named_g_defaultbindkeys variable --- bin/named/include/named/globals.h | 3 ++- bin/named/server.c | 3 ++- bin/named/win32/os.c | 1 + lib/isc/win32/include/isc/ntpaths.h | 3 ++- lib/isc/win32/ntpaths.c | 7 +++++++ 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index d8d2f2a78e..c86f7e1eab 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -90,7 +90,8 @@ EXTERN cfg_obj_t * named_g_config INIT(NULL); EXTERN const cfg_obj_t * named_g_defaults INIT(NULL); EXTERN const char * named_g_conffile INIT(NAMED_SYSCONFDIR "/named.conf"); -EXTERN cfg_obj_t * named_g_bindkeys INIT(NULL); +EXTERN cfg_obj_t * named_g_defaultbindkeys INIT(NAMED_SYSCONFDIR + "/bind.keys"); EXTERN const char * named_g_keyfile INIT(NAMED_SYSCONFDIR "/rndc.key"); diff --git a/bin/named/server.c b/bin/named/server.c index 1bd098a228..2f941ce4f8 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -9714,7 +9714,8 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) { CHECKFATAL(server->statsfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, "isc_mem_strdup"); - server->bindkeysfile = isc_mem_strdup(server->mctx, "bind.keys"); + server->bindkeysfile = isc_mem_strdup(server->mctx, + named_g_defaultbindkeys); CHECKFATAL(server->bindkeysfile == NULL ? ISC_R_NOMEMORY : ISC_R_SUCCESS, "isc_mem_strdup"); diff --git a/bin/named/win32/os.c b/bin/named/win32/os.c index 813cc6ce27..99bdaf61c2 100644 --- a/bin/named/win32/os.c +++ b/bin/named/win32/os.c @@ -59,6 +59,7 @@ named_paths_init(void) { named_g_defaultlockfile = isc_ntpaths_get(NAMED_LOCK_PATH); named_g_keyfile = isc_ntpaths_get(RNDC_KEY_PATH); named_g_defaultsessionkeyfile = isc_ntpaths_get(SESSION_KEY_PATH); + named_g_defaultbindkeys = isc_ntpaths_get(BIND_KEYS_PATH); named_g_defaultdnstap = NULL; Initialized = TRUE; diff --git a/lib/isc/win32/include/isc/ntpaths.h b/lib/isc/win32/include/isc/ntpaths.h index d781d990cf..acadc36a72 100644 --- a/lib/isc/win32/include/isc/ntpaths.h +++ b/lib/isc/win32/include/isc/ntpaths.h @@ -33,7 +33,8 @@ enum NtPaths { LOCAL_STATE_DIR, SYS_CONF_DIR, RNDC_KEY_PATH, - SESSION_KEY_PATH + SESSION_KEY_PATH, + BIND_KEYS_PATH }; /* diff --git a/lib/isc/win32/ntpaths.c b/lib/isc/win32/ntpaths.c index 69abaaad5c..6e9b918435 100644 --- a/lib/isc/win32/ntpaths.c +++ b/lib/isc/win32/ntpaths.c @@ -39,6 +39,7 @@ static char sys_conf_dir[MAX_PATH]; static char rndc_keyFile[MAX_PATH]; static char session_keyFile[MAX_PATH]; static char resolv_confFile[MAX_PATH]; +static char bind_keysFile[MAX_PATH]; static DWORD baseLen = MAX_PATH; static BOOL Initialized = FALSE; @@ -98,6 +99,9 @@ isc_ntpaths_init(void) { strlcat(resolv_confFile, "\\etc\\resolv.conf", sizeof(resolv_confFile)); + strlcpy(bind_keysFile, namedBase, sizeof(bind_keysFile)); + strlcat(bind_keysFile, "\\etc\\bind.keys", sizeof(bind_keysFile)); + Initialized = TRUE; } @@ -134,6 +138,9 @@ isc_ntpaths_get(int ind) { case SESSION_KEY_PATH: return (session_keyFile); break; + case BIND_KEYS_PATH: + return (bind_keysFile); + break; default: return (NULL); } From 43ae6c623deff77975b79db26311c0c16cdd862d Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 5 Feb 2019 14:27:03 -0800 Subject: [PATCH 2/4] print default file paths in 'named -V' output --- bin/named/include/named/globals.h | 2 +- bin/named/main.c | 135 +++++++++++++++++------------- 2 files changed, 78 insertions(+), 59 deletions(-) diff --git a/bin/named/include/named/globals.h b/bin/named/include/named/globals.h index c86f7e1eab..b8e356b055 100644 --- a/bin/named/include/named/globals.h +++ b/bin/named/include/named/globals.h @@ -90,7 +90,7 @@ EXTERN cfg_obj_t * named_g_config INIT(NULL); EXTERN const cfg_obj_t * named_g_defaults INIT(NULL); EXTERN const char * named_g_conffile INIT(NAMED_SYSCONFDIR "/named.conf"); -EXTERN cfg_obj_t * named_g_defaultbindkeys INIT(NAMED_SYSCONFDIR +EXTERN const char * named_g_defaultbindkeys INIT(NAMED_SYSCONFDIR "/bind.keys"); EXTERN const char * named_g_keyfile INIT(NAMED_SYSCONFDIR "/rndc.key"); diff --git a/bin/named/main.c b/bin/named/main.c index 7c1d1fa6f1..0c8b82e6a5 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -445,6 +445,81 @@ set_flags(const char *arg, struct flag_def *defs, unsigned int *ret) { *ret = 0; } +static void +printversion(bool verbose) { + printf("%s %s%s%s \n", + named_g_product, named_g_version, + (*named_g_description != '\0') ? " " : "", + named_g_description, named_g_srcid); + + if (!verbose) { + return; + } + + printf("running on %s\n", named_os_uname()); + printf("built by %s with %s\n", + named_g_builder, named_g_configargs); +#ifdef __clang__ + printf("compiled by CLANG %s\n", __VERSION__); +#else +#if defined(__ICC) || defined(__INTEL_COMPILER) + printf("compiled by ICC %s\n", __VERSION__); +#else +#ifdef __GNUC__ + printf("compiled by GCC %s\n", __VERSION__); +#endif +#endif +#endif +#ifdef _MSC_VER + printf("compiled by MSVC %d\n", _MSC_VER); +#endif +#ifdef __SUNPRO_C + printf("compiled by Solaris Studio %x\n", __SUNPRO_C); +#endif + printf("compiled with OpenSSL version: %s\n", + OPENSSL_VERSION_TEXT); +#if !defined(LIBRESSL_VERSION_NUMBER) && \ +OPENSSL_VERSION_NUMBER >= 0x10100000L /* 1.1.0 or higher */ + printf("linked to OpenSSL version: %s\n", + OpenSSL_version(OPENSSL_VERSION)); + +#else + printf("linked to OpenSSL version: %s\n", + SSLeay_version(SSLEAY_VERSION)); +#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */ +#ifdef HAVE_LIBXML2 + printf("compiled with libxml2 version: %s\n", + LIBXML_DOTTED_VERSION); + printf("linked to libxml2 version: %s\n", + xmlParserVersion); +#endif +#if defined(HAVE_JSON) && defined(JSON_C_VERSION) + printf("compiled with libjson-c version: %s\n", + JSON_C_VERSION); + printf("linked to libjson-c version: %s\n", + json_c_version()); +#endif +#if defined(HAVE_ZLIB) && defined(ZLIB_VERSION) + printf("compiled with zlib version: %s\n", + ZLIB_VERSION); + printf("linked to zlib version: %s\n", + zlibVersion()); +#endif + printf("threads support is enabled\n\n"); + + /* + * Print default configuration paths. + */ + printf("default paths:\n"); + printf(" named configuration: %s\n", named_g_conffile); + printf(" rndc configuration: %s/rndc.conf\n", NAMED_SYSCONFDIR); + printf(" DNSSEC root key: %s\n", named_g_defaultbindkeys); + printf(" nsupdate session key: %s\n", named_g_defaultsessionkeyfile); + printf(" named PID file: %s\n", named_g_defaultpidfile); + printf(" named lock file: %s\n", named_g_defaultlockfile); + +} + static void parse_fuzz_arg(void) { if (!strncmp(isc_commandline_argument, "client:", 7)) { @@ -670,66 +745,10 @@ parse_command_line(int argc, char *argv[]) { named_g_username = isc_commandline_argument; break; case 'v': - printf("%s %s%s%s \n", - named_g_product, named_g_version, - (*named_g_description != '\0') ? " " : "", - named_g_description, named_g_srcid); + printversion(false); exit(0); case 'V': - printf("%s %s%s%s \n", - named_g_product, named_g_version, - (*named_g_description != '\0') ? " " : "", - named_g_description, named_g_srcid); - printf("running on %s\n", named_os_uname()); - printf("built by %s with %s\n", - named_g_builder, named_g_configargs); -#ifdef __clang__ - printf("compiled by CLANG %s\n", __VERSION__); -#else -#if defined(__ICC) || defined(__INTEL_COMPILER) - printf("compiled by ICC %s\n", __VERSION__); -#else -#ifdef __GNUC__ - printf("compiled by GCC %s\n", __VERSION__); -#endif -#endif -#endif -#ifdef _MSC_VER - printf("compiled by MSVC %d\n", _MSC_VER); -#endif -#ifdef __SUNPRO_C - printf("compiled by Solaris Studio %x\n", __SUNPRO_C); -#endif - printf("compiled with OpenSSL version: %s\n", - OPENSSL_VERSION_TEXT); -#if !defined(LIBRESSL_VERSION_NUMBER) && \ - OPENSSL_VERSION_NUMBER >= 0x10100000L /* 1.1.0 or higher */ - printf("linked to OpenSSL version: %s\n", - OpenSSL_version(OPENSSL_VERSION)); - -#else - printf("linked to OpenSSL version: %s\n", - SSLeay_version(SSLEAY_VERSION)); -#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */ -#ifdef HAVE_LIBXML2 - printf("compiled with libxml2 version: %s\n", - LIBXML_DOTTED_VERSION); - printf("linked to libxml2 version: %s\n", - xmlParserVersion); -#endif -#if defined(HAVE_JSON) && defined(JSON_C_VERSION) - printf("compiled with libjson-c version: %s\n", - JSON_C_VERSION); - printf("linked to libjson-c version: %s\n", - json_c_version()); -#endif -#if defined(HAVE_ZLIB) && defined(ZLIB_VERSION) - printf("compiled with zlib version: %s\n", - ZLIB_VERSION); - printf("linked to zlib version: %s\n", - zlibVersion()); -#endif - printf("threads support is enabled\n"); + printversion(true); exit(0); case 'x': /* Obsolete. No longer in use. Ignore. */ From 2e7ec85497ff63ad726f81fa901bb0c9013a1936 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 5 Feb 2019 16:08:26 -0800 Subject: [PATCH 3/4] construct the rndc.conf path from rndc.key --- bin/named/main.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/bin/named/main.c b/bin/named/main.c index 0c8b82e6a5..62d9ce3db3 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -447,6 +447,8 @@ set_flags(const char *arg, struct flag_def *defs, unsigned int *ret) { static void printversion(bool verbose) { + char rndcconf[PATH_MAX], *dot = NULL; + printf("%s %s%s%s \n", named_g_product, named_g_version, (*named_g_description != '\0') ? " " : "", @@ -507,12 +509,27 @@ OPENSSL_VERSION_NUMBER >= 0x10100000L /* 1.1.0 or higher */ #endif printf("threads support is enabled\n\n"); + + /* + * The default rndc.conf and rndc.key paths are in the same + * directory, but named only has rndc.key defined internally. + * We construct the rndc.conf path from it. (We could use + * NAMED_SYSCONFDIR here but the result would look wrong on + * Windows.) + */ + strlcpy(rndcconf, named_g_keyfile, sizeof(rndcconf)); + dot = strrchr(rndcconf, '.'); + if (dot != NULL) { + size_t len = dot - rndcconf + 1; + snprintf(dot + 1, PATH_MAX - len, "conf"); + } + /* * Print default configuration paths. */ printf("default paths:\n"); printf(" named configuration: %s\n", named_g_conffile); - printf(" rndc configuration: %s/rndc.conf\n", NAMED_SYSCONFDIR); + printf(" rndc configuration: %s\n", rndcconf); printf(" DNSSEC root key: %s\n", named_g_defaultbindkeys); printf(" nsupdate session key: %s\n", named_g_defaultsessionkeyfile); printf(" named PID file: %s\n", named_g_defaultpidfile); From 25a3bb04095fdf5b8edc406cbc2b0beb7c3c39f7 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 5 Feb 2019 14:29:55 -0800 Subject: [PATCH 4/4] CHANGES --- CHANGES | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES b/CHANGES index b2dbc0cccf..91c9942b29 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ +5155. [func] "named -V" now outputs the default paths to + named.conf, rndc.conf, bind.keys, and other + files used or created by named and other tools, so + that the correct paths to these files can quickly be + determined regardless of the configure settings + used when BIND was built. [GL #859] + 5154. [bug] dig: process_opt could be called twice on the same message leading to a assertion failure. [GL #860]