From: Colin Vidal Date: Tue, 21 Oct 2025 09:53:33 +0000 (+0200) Subject: named-checkconf -e prints effective config X-Git-Tag: v9.21.15~21^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e690bfaa6ba8f2456562ae8f55b19adc747ae8ea;p=thirdparty%2Fbind9.git named-checkconf -e prints effective config New command line switch `-e` introduced to `named-checkconf`. It acts like `-p` but instead it print the effective configuration rather than the user configuration. --- diff --git a/bin/check/named-checkconf.c b/bin/check/named-checkconf.c index 169fd66ef75..0949b7c0f39 100644 --- a/bin/check/named-checkconf.c +++ b/bin/check/named-checkconf.c @@ -13,6 +13,7 @@ /*! \file */ +#include #include #include #include @@ -57,7 +58,7 @@ usage(void); static void usage(void) { fprintf(stderr, - "usage: %s [-achijklvz] [-p [-x]] [-t directory] " + "usage: %s [-achijklvz] [-pe [-x]] [-t directory] " "[named.conf]\n", isc_commandline_progname); exit(EXIT_SUCCESS); @@ -554,6 +555,7 @@ main(int argc, char **argv) { bool load_zones = false; bool list_zones = false; bool print = false; + bool effective = false; unsigned int flags = 0; unsigned int parserflags = 0; unsigned int checkflags = BIND_CHECK_PLUGINS | BIND_CHECK_ALGORITHMS; @@ -565,7 +567,7 @@ main(int argc, char **argv) { /* * Process memory debugging argument first. */ -#define CMDLINE_FLAGS "acdhijklm:nt:pvxz" +#define CMDLINE_FLAGS "acdehijklm:nt:pvxz" while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) { switch (c) { case 'm': @@ -638,6 +640,11 @@ main(int argc, char **argv) { print = true; break; + case 'e': + print = true; + effective = true; + break; + case 'v': printf("%s\n", PACKAGE_VERSION); result = ISC_R_SUCCESS; @@ -701,6 +708,27 @@ main(int argc, char **argv) { CHECK(load_zones_fromconfig(config, list_zones)); } + if (effective) { + cfg_obj_t *effectiveconf = NULL; + cfg_obj_t *defaultconfig = NULL; + isc_buffer_t b; + + isc_buffer_constinit(&b, common_named_defaultconf, + sizeof(common_named_defaultconf) - 1); + isc_buffer_add(&b, sizeof(common_named_defaultconf) - 1); + + CHECK(cfg_parse_buffer( + isc_g_mctx, &b, __FILE__, 0, &cfg_type_namedconf, + CFG_PCTX_NODEPRECATED | CFG_PCTX_NOOBSOLETE | + CFG_PCTX_NOEXPERIMENTAL | CFG_PCTX_BUILTIN, + &defaultconfig)); + effectiveconf = cfg_effective_config(config, defaultconfig); + + cfg_obj_detach(&defaultconfig); + cfg_obj_detach(&config); + config = effectiveconf; + } + if (print) { cfg_printx(config, flags, output, &result); } diff --git a/bin/check/named-checkconf.rst b/bin/check/named-checkconf.rst index 516756e9a6d..bfe2385fe71 100644 --- a/bin/check/named-checkconf.rst +++ b/bin/check/named-checkconf.rst @@ -21,7 +21,7 @@ named-checkconf - named configuration file syntax checking tool Synopsis ~~~~~~~~ -:program:`named-checkconf` [**-achjklnvz**] [**-p** [**-x** ]] [**-t** directory] {filename} +:program:`named-checkconf` [**-achjklnvz**] [**-pe** [**-x** ]] [**-t** directory] {filename} Description ~~~~~~~~~~~ @@ -48,6 +48,19 @@ Options a `named.conf` intended to be run on another machine with possibly a different set of supported DNSSEC key algorithms. +.. option:: -e + + This option prints the effective server configuration that would + result from :iscman:`named.conf` and its included files, if no errors + were detected, in canonical form. + + The effective configuration is the result of loading a configuration + file and applying it on top of the default settings for :iscman:`named`. + All configurable settings are included. + + See also the :option:`-x` and :option:`-p` options. + + .. option:: -h This option prints the usage summary and exits. @@ -85,8 +98,9 @@ Options .. option:: -p - This option prints out the :iscman:`named.conf` and included files in canonical form if - no errors were detected. See also the :option:`-x` option. + This option prints the contents of :iscman:`named.conf` and all + included files in canonical form, if no errors were detected. See also + the :option:`-x` and :option:`-e` options. .. option:: -t directory