summaryrefslogtreecommitdiffstats
path: root/doc/misc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:59:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 15:59:48 +0000
commit3b9b6d0b8e7f798023c9d109c490449d528fde80 (patch)
tree2e1c188dd7b8d7475cd163de9ae02c428343669b /doc/misc
parentInitial commit. (diff)
downloadbind9-3b9b6d0b8e7f798023c9d109c490449d528fde80.tar.xz
bind9-3b9b6d0b8e7f798023c9d109c490449d528fde80.zip
Adding upstream version 1:9.18.19.upstream/1%9.18.19
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--doc/misc/Makefile.am80
-rw-r--r--doc/misc/Makefile.in921
-rw-r--r--doc/misc/cfg_test.c195
-rw-r--r--doc/misc/checkgrammar.py167
-rw-r--r--doc/misc/delegation-only.zoneopt3
-rw-r--r--doc/misc/forward.zoneopt6
-rw-r--r--doc/misc/hint.zoneopt6
-rw-r--r--doc/misc/in-view.zoneopt3
-rw-r--r--doc/misc/mirror.zoneopt43
-rw-r--r--doc/misc/options597
-rw-r--r--doc/misc/parsegrammar.py194
-rw-r--r--doc/misc/primary.zoneopt62
-rw-r--r--doc/misc/redirect.zoneopt13
-rw-r--r--doc/misc/rndc.grammar21
-rw-r--r--doc/misc/secondary.zoneopt65
-rw-r--r--doc/misc/sort-options.pl45
-rw-r--r--doc/misc/static-stub.zoneopt11
-rw-r--r--doc/misc/stub.zoneopt27
18 files changed, 2459 insertions, 0 deletions
diff --git a/doc/misc/Makefile.am b/doc/misc/Makefile.am
new file mode 100644
index 0000000..8d7c80d
--- /dev/null
+++ b/doc/misc/Makefile.am
@@ -0,0 +1,80 @@
+include $(top_srcdir)/Makefile.top
+include $(top_srcdir)/Makefile.docs
+
+OPTIONS_FILES = \
+ rndc.grammar \
+ options \
+ primary.zoneopt \
+ secondary.zoneopt \
+ mirror.zoneopt \
+ forward.zoneopt \
+ hint.zoneopt \
+ stub.zoneopt \
+ static-stub.zoneopt \
+ redirect.zoneopt \
+ delegation-only.zoneopt \
+ in-view.zoneopt
+
+EXTRA_DIST = \
+ $(OPTIONS_FILES) \
+ checkgrammar.py \
+ parsegrammar.py \
+ sort-options.pl
+
+if MAINTAINER_MODE
+
+MAINTAINERCLEANFILES = $(OPTIONS_FILES)
+
+noinst_PROGRAMS = cfg_test
+
+cfg_test_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(LIBISC_CFLAGS) \
+ $(LIBDNS_CFLAGS) \
+ $(LIBISCCFG_CFLAGS)
+
+cfg_test_LDADD = \
+ $(LIBISC_LIBS) \
+ $(LIBDNS_LIBS) \
+ $(LIBISCCFG_LIBS)
+
+BUILT_SOURCES = \
+ $(OPTIONS_FILES)
+
+rndc.grammar: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --rndc --grammar | $(PERL) $(srcdir)/sort-options.pl > $@
+
+options: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --named --grammar | $(PERL) $(srcdir)/sort-options.pl > $@
+
+primary.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar primary > $@
+
+secondary.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar secondary > $@
+
+mirror.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar mirror > $@
+
+forward.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar forward > $@
+
+hint.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar hint > $@
+
+stub.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar stub > $@
+
+static-stub.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar static-stub > $@
+
+redirect.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar redirect > $@
+
+delegation-only.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar delegation-only > $@
+
+in-view.zoneopt: cfg_test
+ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar in-view > $@
+
+endif
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
new file mode 100644
index 0000000..da99f62
--- /dev/null
+++ b/doc/misc/Makefile.in
@@ -0,0 +1,921 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Hey Emacs, this is -*- makefile-automake -*- file!
+# vim: filetype=automake
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@HOST_MACOS_TRUE@am__append_1 = \
+@HOST_MACOS_TRUE@ -Wl,-flat_namespace
+
+@MAINTAINER_MODE_TRUE@noinst_PROGRAMS = cfg_test$(EXEEXT)
+subdir = doc/misc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_check_link_flag.m4 \
+ $(top_srcdir)/m4/ax_check_openssl.m4 \
+ $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4/ax_jemalloc.m4 \
+ $(top_srcdir)/m4/ax_lib_lmdb.m4 \
+ $(top_srcdir)/m4/ax_perl_module.m4 \
+ $(top_srcdir)/m4/ax_posix_shell.m4 \
+ $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
+ $(top_srcdir)/m4/ax_pthread.m4 \
+ $(top_srcdir)/m4/ax_python_module.m4 \
+ $(top_srcdir)/m4/ax_restore_flags.m4 \
+ $(top_srcdir)/m4/ax_save_flags.m4 $(top_srcdir)/m4/ax_tls.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+cfg_test_SOURCES = cfg_test.c
+cfg_test_OBJECTS = cfg_test-cfg_test.$(OBJEXT)
+@MAINTAINER_MODE_TRUE@cfg_test_DEPENDENCIES = $(LIBISC_LIBS) \
+@MAINTAINER_MODE_TRUE@ $(LIBDNS_LIBS) $(LIBISCCFG_LIBS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/cfg_test-cfg_test.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = cfg_test.c
+DIST_SOURCES = cfg_test.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__extra_recursive_targets = test-recursive unit-recursive \
+ doc-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/Makefile.docs \
+ $(top_srcdir)/Makefile.top $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_EXEEXT = @BUILD_EXEEXT@
+BUILD_OBJEXT = @BUILD_OBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
+CMOCKA_LIBS = @CMOCKA_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
+CPP_FOR_BUILD = @CPP_FOR_BUILD@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURL = @CURL@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEVELOPER_MODE = @DEVELOPER_MODE@
+DLLTOOL = @DLLTOOL@
+DNSTAP_CFLAGS = @DNSTAP_CFLAGS@
+DNSTAP_LIBS = @DNSTAP_LIBS@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+FSTRM_CAPTURE = @FSTRM_CAPTURE@
+FUZZ_LDFLAGS = @FUZZ_LDFLAGS@
+FUZZ_LOG_COMPILER = @FUZZ_LOG_COMPILER@
+GREP = @GREP@
+GSSAPI_CFLAGS = @GSSAPI_CFLAGS@
+GSSAPI_LIBS = @GSSAPI_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JEMALLOC_CFLAGS = @JEMALLOC_CFLAGS@
+JEMALLOC_LIBS = @JEMALLOC_LIBS@
+JSON_C_CFLAGS = @JSON_C_CFLAGS@
+JSON_C_LIBS = @JSON_C_LIBS@
+KRB5_CFLAGS = @KRB5_CFLAGS@
+KRB5_CONFIG = @KRB5_CONFIG@
+KRB5_LIBS = @KRB5_LIBS@
+LATEXMK = @LATEXMK@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
+LIBCAP_LIBS = @LIBCAP_LIBS@
+LIBIDN2_CFLAGS = @LIBIDN2_CFLAGS@
+LIBIDN2_LIBS = @LIBIDN2_LIBS@
+LIBNGHTTP2_CFLAGS = @LIBNGHTTP2_CFLAGS@
+LIBNGHTTP2_LIBS = @LIBNGHTTP2_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBUV_CFLAGS = @LIBUV_CFLAGS@
+LIBUV_LIBS = @LIBUV_LIBS@
+LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
+LIBXML2_LIBS = @LIBXML2_LIBS@
+LIPO = @LIPO@
+LMDB_CFLAGS = @LMDB_CFLAGS@
+LMDB_LIBS = @LMDB_LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAXMINDDB_CFLAGS = @MAXMINDDB_CFLAGS@
+MAXMINDDB_LIBS = @MAXMINDDB_LIBS@
+MAXMINDDB_PREFIX = @MAXMINDDB_PREFIX@
+MKDIR_P = @MKDIR_P@
+NC = @NC@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LDFLAGS = @OPENSSL_LDFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROTOC_C = @PROTOC_C@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_CXX = @PTHREAD_CXX@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYTEST = @PYTEST@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+READLINE_CFLAGS = @READLINE_CFLAGS@
+READLINE_LIBS = @READLINE_LIBS@
+RELEASE_DATE = @RELEASE_DATE@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SPHINX_BUILD = @SPHINX_BUILD@
+STD_CFLAGS = @STD_CFLAGS@
+STD_CPPFLAGS = @STD_CPPFLAGS@
+STD_LDFLAGS = @STD_LDFLAGS@
+STRIP = @STRIP@
+TEST_CFLAGS = @TEST_CFLAGS@
+VERSION = @VERSION@
+XELATEX = @XELATEX@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I $(top_srcdir)/m4
+AM_CFLAGS = \
+ $(STD_CFLAGS)
+
+AM_CPPFLAGS = \
+ $(STD_CPPFLAGS) \
+ -include $(top_builddir)/config.h \
+ -I$(srcdir)/include
+
+AM_LDFLAGS = $(STD_LDFLAGS) $(am__append_1)
+LDADD =
+LIBISC_CFLAGS = \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/lib/isc/include \
+ -I$(top_builddir)/lib/isc/include
+
+LIBISC_LIBS = $(top_builddir)/lib/isc/libisc.la
+LIBDNS_CFLAGS = \
+ -I$(top_srcdir)/lib/dns/include \
+ -I$(top_builddir)/lib/dns/include
+
+LIBDNS_LIBS = \
+ $(top_builddir)/lib/dns/libdns.la
+
+LIBNS_CFLAGS = \
+ -I$(top_srcdir)/lib/ns/include
+
+LIBNS_LIBS = \
+ $(top_builddir)/lib/ns/libns.la
+
+LIBIRS_CFLAGS = \
+ -I$(top_srcdir)/lib/irs/include
+
+LIBIRS_LIBS = \
+ $(top_builddir)/lib/irs/libirs.la
+
+LIBISCCFG_CFLAGS = \
+ -I$(top_srcdir)/lib/isccfg/include
+
+LIBISCCFG_LIBS = \
+ $(top_builddir)/lib/isccfg/libisccfg.la
+
+LIBISCCC_CFLAGS = \
+ -I$(top_srcdir)/lib/isccc/include/
+
+LIBISCCC_LIBS = \
+ $(top_builddir)/lib/isccc/libisccc.la
+
+LIBBIND9_CFLAGS = \
+ -I$(top_srcdir)/lib/bind9/include
+
+LIBBIND9_LIBS = \
+ $(top_builddir)/lib/bind9/libbind9.la
+
+SPHINX_V = $(SPHINX_V_@AM_V@)
+SPHINX_V_ = $(SPHINX_V_@AM_DEFAULT_V@)
+SPHINX_V_0 = -q
+SPHINX_V_1 = -n
+SPHINX_W = -W
+AM_V_SPHINX = $(AM_V_SPHINX_@AM_V@)
+AM_V_SPHINX_ = $(AM_V_SPHINX_@AM_DEFAULT_V@)
+AM_V_SPHINX_0 = @echo " SPHINX $@";
+SPHINXBUILDDIR = $(builddir)/_build
+LF = \n
+RNDC_CONF = .. |rndc_conf| replace:: ``$(sysconfdir)/rndc.conf``
+RNDC_KEY = .. |rndc_key| replace:: ``$(sysconfdir)/rndc.key``
+NAMED_CONF = .. |named_conf| replace:: ``$(sysconfdir)/named.conf``
+BIND_KEYS = .. |bind_keys| replace:: ``$(sysconfdir)/bind.keys``
+NAMED_PID = .. |named_pid| replace:: ``$(runstatedir)/named.pid``
+SESSION_KEY = .. |session_key| replace:: ``$(runstatedir)/session.key``
+common_SPHINXOPTS = \
+ $(SPHINX_W) \
+ -c $(srcdir) \
+ -a \
+ $(SPHINX_V)
+
+
+# The "today" variable set below is not directly used in the ARM, but its value
+# is implicitly inserted on the title page of the PDF file produced by Sphinx.
+ALLSPHINXOPTS = \
+ $(common_SPHINXOPTS) \
+ -D today="$(RELEASE_DATE)" \
+ -D rst_epilog="$$(printf "$${RST_EPILOG}")" \
+ $(SPHINXOPTS) \
+ $(srcdir)
+
+_ = @
+man_RNDC_CONF = .. |rndc_conf| replace:: ``$(_)sysconfdir$(_)/rndc.conf``
+man_RNDC_KEY = .. |rndc_key| replace:: ``$(_)sysconfdir$(_)/rndc.key``
+man_NAMED_CONF = .. |named_conf| replace:: ``$(_)sysconfdir$(_)/named.conf``
+man_BIND_KEYS = .. |bind_keys| replace:: ``$(_)sysconfdir$(_)/bind.keys``
+man_NAMED_PID = .. |named_pid| replace:: ``$(_)runstatedir$(_)/named.pid``
+man_SESSION_KEY = .. |session_key| replace:: ``$(_)runstatedir$(_)/session.key``
+man_SPHINXOPTS = \
+ $(common_SPHINXOPTS) \
+ -D version="@""PACKAGE_VERSION@" \
+ -D today="@""RELEASE_DATE@" \
+ -D release="@""PACKAGE_VERSION@" \
+ -D rst_epilog="$$(printf "$${man_RST_EPILOG}")" \
+ $(SPHINXOPTS) \
+ $(srcdir)
+
+AM_V_SED = $(AM_V_SED_@AM_V@)
+AM_V_SED_ = $(AM_V_SED_@AM_DEFAULT_V@)
+AM_V_SED_0 = @echo " SED $@";
+AM_V_CFG_TEST = $(AM_V_CFG_TEST_@AM_V@)
+AM_V_CFG_TEST_ = $(AM_V_CFG_TEST_@AM_DEFAULT_V@)
+AM_V_CFG_TEST_0 = @echo " CFG_GEN $@";
+OPTIONS_FILES = \
+ rndc.grammar \
+ options \
+ primary.zoneopt \
+ secondary.zoneopt \
+ mirror.zoneopt \
+ forward.zoneopt \
+ hint.zoneopt \
+ stub.zoneopt \
+ static-stub.zoneopt \
+ redirect.zoneopt \
+ delegation-only.zoneopt \
+ in-view.zoneopt
+
+EXTRA_DIST = \
+ $(OPTIONS_FILES) \
+ checkgrammar.py \
+ parsegrammar.py \
+ sort-options.pl
+
+@MAINTAINER_MODE_TRUE@MAINTAINERCLEANFILES = $(OPTIONS_FILES)
+@MAINTAINER_MODE_TRUE@cfg_test_CPPFLAGS = \
+@MAINTAINER_MODE_TRUE@ $(AM_CPPFLAGS) \
+@MAINTAINER_MODE_TRUE@ $(LIBISC_CFLAGS) \
+@MAINTAINER_MODE_TRUE@ $(LIBDNS_CFLAGS) \
+@MAINTAINER_MODE_TRUE@ $(LIBISCCFG_CFLAGS)
+
+@MAINTAINER_MODE_TRUE@cfg_test_LDADD = \
+@MAINTAINER_MODE_TRUE@ $(LIBISC_LIBS) \
+@MAINTAINER_MODE_TRUE@ $(LIBDNS_LIBS) \
+@MAINTAINER_MODE_TRUE@ $(LIBISCCFG_LIBS)
+
+@MAINTAINER_MODE_TRUE@BUILT_SOURCES = \
+@MAINTAINER_MODE_TRUE@ $(OPTIONS_FILES)
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.top $(top_srcdir)/Makefile.docs $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/misc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign doc/misc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(top_srcdir)/Makefile.top $(top_srcdir)/Makefile.docs $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+cfg_test$(EXEEXT): $(cfg_test_OBJECTS) $(cfg_test_DEPENDENCIES) $(EXTRA_cfg_test_DEPENDENCIES)
+ @rm -f cfg_test$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(cfg_test_OBJECTS) $(cfg_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfg_test-cfg_test.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+cfg_test-cfg_test.o: cfg_test.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cfg_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cfg_test-cfg_test.o -MD -MP -MF $(DEPDIR)/cfg_test-cfg_test.Tpo -c -o cfg_test-cfg_test.o `test -f 'cfg_test.c' || echo '$(srcdir)/'`cfg_test.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cfg_test-cfg_test.Tpo $(DEPDIR)/cfg_test-cfg_test.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfg_test.c' object='cfg_test-cfg_test.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cfg_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfg_test-cfg_test.o `test -f 'cfg_test.c' || echo '$(srcdir)/'`cfg_test.c
+
+cfg_test-cfg_test.obj: cfg_test.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cfg_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cfg_test-cfg_test.obj -MD -MP -MF $(DEPDIR)/cfg_test-cfg_test.Tpo -c -o cfg_test-cfg_test.obj `if test -f 'cfg_test.c'; then $(CYGPATH_W) 'cfg_test.c'; else $(CYGPATH_W) '$(srcdir)/cfg_test.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cfg_test-cfg_test.Tpo $(DEPDIR)/cfg_test-cfg_test.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfg_test.c' object='cfg_test-cfg_test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(cfg_test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cfg_test-cfg_test.obj `if test -f 'cfg_test.c'; then $(CYGPATH_W) 'cfg_test.c'; else $(CYGPATH_W) '$(srcdir)/cfg_test.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+test-local:
+unit-local:
+doc-local:
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/cfg_test-cfg_test.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+doc: doc-am
+
+doc-am: doc-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/cfg_test-cfg_test.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+test: test-am
+
+test-am: test-local
+
+uninstall-am:
+
+unit: unit-am
+
+unit-am: unit-local
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir doc-am doc-local dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am test-am test-local uninstall uninstall-am unit-am \
+ unit-local
+
+.PRECIOUS: Makefile
+
+
+export RST_EPILOG = $(RNDC_CONF)$(LF)$(RNDC_KEY)$(LF)$(NAMED_CONF)$(LF)$(BIND_KEYS)$(LF)$(NAMED_PID)$(LF)$(SESSION_KEY)
+
+export man_RST_EPILOG = $(man_RNDC_CONF)$(LF)$(man_RNDC_KEY)$(LF)$(man_NAMED_CONF)$(LF)$(man_BIND_KEYS)$(LF)$(man_NAMED_PID)$(LF)$(man_SESSION_KEY)
+
+@MAINTAINER_MODE_TRUE@rndc.grammar: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --rndc --grammar | $(PERL) $(srcdir)/sort-options.pl > $@
+
+@MAINTAINER_MODE_TRUE@options: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --named --grammar | $(PERL) $(srcdir)/sort-options.pl > $@
+
+@MAINTAINER_MODE_TRUE@primary.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar primary > $@
+
+@MAINTAINER_MODE_TRUE@secondary.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar secondary > $@
+
+@MAINTAINER_MODE_TRUE@mirror.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar mirror > $@
+
+@MAINTAINER_MODE_TRUE@forward.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar forward > $@
+
+@MAINTAINER_MODE_TRUE@hint.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar hint > $@
+
+@MAINTAINER_MODE_TRUE@stub.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar stub > $@
+
+@MAINTAINER_MODE_TRUE@static-stub.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar static-stub > $@
+
+@MAINTAINER_MODE_TRUE@redirect.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar redirect > $@
+
+@MAINTAINER_MODE_TRUE@delegation-only.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar delegation-only > $@
+
+@MAINTAINER_MODE_TRUE@in-view.zoneopt: cfg_test
+@MAINTAINER_MODE_TRUE@ $(AM_V_CFG_TEST)$(builddir)/cfg_test --zonegrammar in-view > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/misc/cfg_test.c b/doc/misc/cfg_test.c
new file mode 100644
index 0000000..d5f3654
--- /dev/null
+++ b/doc/misc/cfg_test.c
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+/*! \file */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include <isc/mem.h>
+#include <isc/print.h>
+#include <isc/string.h>
+#include <isc/util.h>
+
+#include <dns/log.h>
+
+#include <isccfg/grammar.h>
+#include <isccfg/namedconf.h>
+
+static void
+check_result(isc_result_t result, const char *format, ...) {
+ va_list args;
+
+ if (result == ISC_R_SUCCESS) {
+ return;
+ }
+
+ va_start(args, format);
+ vfprintf(stderr, format, args);
+ va_end(args);
+ fprintf(stderr, ": %s\n", isc_result_totext(result));
+ exit(1);
+}
+
+static void
+output(void *closure, const char *text, int textlen) {
+ UNUSED(closure);
+ (void)fwrite(text, 1, textlen, stdout);
+}
+
+static void
+usage(void) {
+ fprintf(stderr, "usage: cfg_test --rndc|--named "
+ "[--grammar] [--zonegrammar] [--active] "
+ "[--memstats] conffile\n");
+ exit(1);
+}
+
+int
+main(int argc, char **argv) {
+ isc_result_t result;
+ isc_mem_t *mctx = NULL;
+ isc_log_t *lctx = NULL;
+ isc_logconfig_t *lcfg = NULL;
+ isc_logdestination_t destination;
+ cfg_parser_t *pctx = NULL;
+ cfg_obj_t *cfg = NULL;
+ cfg_type_t *type = NULL;
+ bool grammar = false;
+ bool memstats = false;
+ char *filename = NULL;
+ unsigned int zonetype = 0;
+ unsigned int pflags = 0;
+
+ isc_mem_create(&mctx);
+
+ isc_log_create(mctx, &lctx, &lcfg);
+ isc_log_setcontext(lctx);
+
+ /*
+ * Create and install the default channel.
+ */
+ destination.file.stream = stderr;
+ destination.file.name = NULL;
+ destination.file.versions = ISC_LOG_ROLLNEVER;
+ destination.file.maximum_size = 0;
+ isc_log_createchannel(lcfg, "_default", ISC_LOG_TOFILEDESC,
+ ISC_LOG_DYNAMIC, &destination, ISC_LOG_PRINTTIME);
+
+ result = isc_log_usechannel(lcfg, "_default", NULL, NULL);
+ check_result(result, "isc_log_usechannel()");
+
+ /*
+ * Set the initial debug level.
+ */
+ isc_log_setdebuglevel(lctx, 2);
+
+ if (argc < 3) {
+ usage();
+ }
+
+ while (argc > 1) {
+ if (strcmp(argv[1], "--active") == 0) {
+ pflags |= CFG_PRINTER_ACTIVEONLY;
+ } else if (strcmp(argv[1], "--grammar") == 0) {
+ grammar = true;
+ } else if (strcmp(argv[1], "--zonegrammar") == 0) {
+ argv++, argc--;
+ if (argc <= 1) {
+ usage();
+ }
+ if (strcmp(argv[1], "master") == 0 ||
+ strcmp(argv[1], "primary") == 0)
+ {
+ zonetype = CFG_ZONE_PRIMARY;
+ } else if (strcmp(argv[1], "slave") == 0 ||
+ strcmp(argv[1], "secondary") == 0)
+ {
+ zonetype = CFG_ZONE_SECONDARY;
+ } else if (strcmp(argv[1], "mirror") == 0) {
+ zonetype = CFG_ZONE_MIRROR;
+ } else if (strcmp(argv[1], "stub") == 0) {
+ zonetype = CFG_ZONE_STUB;
+ } else if (strcmp(argv[1], "static-stub") == 0) {
+ zonetype = CFG_ZONE_STATICSTUB;
+ } else if (strcmp(argv[1], "hint") == 0) {
+ zonetype = CFG_ZONE_HINT;
+ } else if (strcmp(argv[1], "forward") == 0) {
+ zonetype = CFG_ZONE_FORWARD;
+ } else if (strcmp(argv[1], "redirect") == 0) {
+ zonetype = CFG_ZONE_REDIRECT;
+ } else if (strcmp(argv[1], "delegation-only") == 0) {
+ zonetype = CFG_ZONE_DELEGATION;
+ } else if (strcmp(argv[1], "in-view") == 0) {
+ zonetype = CFG_ZONE_INVIEW;
+ } else {
+ usage();
+ }
+ } else if (strcmp(argv[1], "--memstats") == 0) {
+ memstats = true;
+ } else if (strcmp(argv[1], "--named") == 0) {
+ type = &cfg_type_namedconf;
+ } else if (strcmp(argv[1], "--rndc") == 0) {
+ type = &cfg_type_rndcconf;
+ } else if (argv[1][0] == '-') {
+ usage();
+ } else {
+ filename = argv[1];
+ }
+ argv++, argc--;
+ }
+
+ if (grammar) {
+ if (type == NULL) {
+ usage();
+ }
+ cfg_print_grammar(type, pflags, output, NULL);
+ } else if (zonetype != 0) {
+ cfg_print_zonegrammar(zonetype, pflags, output, NULL);
+ } else {
+ if (type == NULL || filename == NULL) {
+ usage();
+ }
+ RUNTIME_CHECK(cfg_parser_create(mctx, lctx, &pctx) ==
+ ISC_R_SUCCESS);
+
+ result = cfg_parse_file(pctx, filename, type, &cfg);
+
+ fprintf(stderr, "read config: %s\n", isc_result_totext(result));
+
+ if (result != ISC_R_SUCCESS) {
+ exit(1);
+ }
+
+ cfg_print(cfg, output, NULL);
+
+ cfg_obj_destroy(pctx, &cfg);
+
+ cfg_parser_destroy(&pctx);
+ }
+
+ isc_log_destroy(&lctx);
+ if (memstats) {
+ isc_mem_stats(mctx, stderr);
+ }
+ isc_mem_destroy(&mctx);
+
+ fflush(stdout);
+ if (ferror(stdout)) {
+ fprintf(stderr, "write error\n");
+ return (1);
+ } else {
+ return (0);
+ }
+}
diff --git a/doc/misc/checkgrammar.py b/doc/misc/checkgrammar.py
new file mode 100644
index 0000000..09984ec
--- /dev/null
+++ b/doc/misc/checkgrammar.py
@@ -0,0 +1,167 @@
+############################################################################
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+############################################################################
+
+"""
+Utility to check ISC config grammar consistency. It detects statement names
+which use different grammar depending on position in the configuration file.
+E.g. "max-zone-ttl" in dnssec-policy uses '<duration>'
+vs. '( unlimited | <duration> ) used in options.
+"""
+
+from collections import namedtuple
+from itertools import groupby
+import fileinput
+
+import parsegrammar
+
+
+def statement2block(grammar, path):
+ """Return mapping statement name to "path" where it is allowed.
+ _top is placeholder name for the namesless topmost context.
+
+ E.g. {
+ 'options: [('_top',)],
+ 'server': [('_top', 'view'), ('_top',)],
+ 'rate-limit': [('_top', 'options'), ('_top', 'view')],
+ 'slip': [('_top', 'options', 'rate-limit'), ('_top', 'view', 'rate-limit')]
+ }
+ """
+ key2place = {}
+
+ for key in grammar:
+ assert not key.startswith("_")
+ key2place.setdefault(key, []).append(tuple(path))
+ if "_mapbody" in grammar[key]:
+ nested2block = statement2block(grammar[key]["_mapbody"], path + [key])
+ # merge to uppermost output dictionary
+ for nested_key, nested_path in nested2block.items():
+ key2place.setdefault(nested_key, []).extend(nested_path)
+ return key2place
+
+
+def get_statement_grammar(grammar, path, name):
+ """Descend into grammar dict using provided path
+ and return final dict found there.
+
+ Intermediate steps into "_mapbody" subkeys are done automatically.
+ """
+ assert path[0] == "_top"
+ path = list(path) + [name]
+ for step in path[1:]:
+ if "_mapbody" in grammar:
+ grammar = grammar["_mapbody"]
+ grammar = grammar[step]
+ return grammar
+
+
+Statement = namedtuple("Statement", ["path", "name", "subgrammar"])
+
+
+def groupby_grammar(statements):
+ """
+ Return groups of Statement tuples with identical grammars and flags.
+ See itertools.groupby.
+ """
+
+ def keyfunc(statement):
+ return sorted(statement.subgrammar.items())
+
+ groups = []
+ statements = sorted(statements, key=keyfunc)
+ for _key, group in groupby(statements, keyfunc):
+ groups.append(list(group)) # Store group iterator as a list
+ return groups
+
+
+def diff_statements(whole_grammar, places):
+ """
+ Return map {statement name: [groups of [Statement]s with identical grammar].
+ """
+ out = {}
+ for statement_name, paths in places.items():
+ grammars = []
+ for path in paths:
+ statement_grammar = get_statement_grammar(
+ whole_grammar, path, statement_name
+ )
+ grammars.append(Statement(path, statement_name, statement_grammar))
+ groups = groupby_grammar(grammars)
+ out[statement_name] = groups
+ return out
+
+
+def pformat_grammar(node, level=1):
+ """Pretty print a given grammar node in the same way as cfg_test would"""
+
+ def sortkey(item):
+ """Treat 'type' specially and always put it first, for zone types"""
+ key, _ = item
+ if key == "type":
+ return ""
+ return key
+
+ if "_grammar" in node: # no nesting
+ assert "_id" not in node
+ assert "_mapbody" not in node
+ out = node["_grammar"] + ";"
+ if "_flags" in node:
+ out += " // " + ", ".join(node["_flags"])
+ return out + "\n"
+
+ # a nested map
+ out = ""
+ indent = level * "\t"
+ if not node.get("_ignore_this_level"):
+ if "_id" in node:
+ out += node["_id"] + " "
+ out += "{\n"
+
+ for key, subnode in sorted(node["_mapbody"].items(), key=sortkey):
+ if not subnode.get("_ignore_this_level"):
+ out += f"{indent}{subnode.get('_pprint_name', key)}"
+ inner_grammar = pformat_grammar(node["_mapbody"][key], level=level + 1)
+ else: # act as if we were not in a map
+ inner_grammar = pformat_grammar(node["_mapbody"][key], level=level)
+ if inner_grammar[0] != ";": # we _did_ find some arguments
+ out += " "
+ out += inner_grammar
+
+ if not node.get("_ignore_this_level"):
+ out += indent[:-1] + "};" # unindent the closing bracket
+ if "_flags" in node:
+ out += " // " + ", ".join(node["_flags"])
+ return out + "\n"
+
+
+def main():
+ """
+ Ingest output from cfg_test --grammar and print out statements which use
+ different grammar in different contexts.
+ """
+ with fileinput.input() as filein:
+ grammar = parsegrammar.parse_mapbody(filein)
+ places = statement2block(grammar, ["_top"])
+
+ for statementname, groups in diff_statements(grammar, places).items():
+ if len(groups) > 1:
+ print(f'statement "{statementname}" is inconsistent across blocks')
+ for group in groups:
+ print(
+ "- path:", ", ".join(" -> ".join(variant.path) for variant in group)
+ )
+ print(" ", pformat_grammar(group[0].subgrammar, level=1))
+ print()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/doc/misc/delegation-only.zoneopt b/doc/misc/delegation-only.zoneopt
new file mode 100644
index 0000000..ab86327
--- /dev/null
+++ b/doc/misc/delegation-only.zoneopt
@@ -0,0 +1,3 @@
+zone <string> [ <class> ] {
+ type delegation-only;
+};
diff --git a/doc/misc/forward.zoneopt b/doc/misc/forward.zoneopt
new file mode 100644
index 0000000..069f2ce
--- /dev/null
+++ b/doc/misc/forward.zoneopt
@@ -0,0 +1,6 @@
+zone <string> [ <class> ] {
+ type forward;
+ delegation-only <boolean>; // deprecated
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+};
diff --git a/doc/misc/hint.zoneopt b/doc/misc/hint.zoneopt
new file mode 100644
index 0000000..d14c3ef
--- /dev/null
+++ b/doc/misc/hint.zoneopt
@@ -0,0 +1,6 @@
+zone <string> [ <class> ] {
+ type hint;
+ check-names ( fail | warn | ignore );
+ delegation-only <boolean>; // deprecated
+ file <quoted_string>;
+};
diff --git a/doc/misc/in-view.zoneopt b/doc/misc/in-view.zoneopt
new file mode 100644
index 0000000..c63c427
--- /dev/null
+++ b/doc/misc/in-view.zoneopt
@@ -0,0 +1,3 @@
+zone <string> [ <class> ] {
+ in-view <string>;
+};
diff --git a/doc/misc/mirror.zoneopt b/doc/misc/mirror.zoneopt
new file mode 100644
index 0000000..ac371cd
--- /dev/null
+++ b/doc/misc/mirror.zoneopt
@@ -0,0 +1,43 @@
+zone <string> [ <class> ] {
+ type mirror;
+ allow-notify { <address_match_element>; ... };
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ allow-transfer [ port <integer> ] [ transport <string> ] { <address_match_element>; ... };
+ allow-update-forwarding { <address_match_element>; ... };
+ also-notify [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ alt-transfer-source ( <ipv4_address> | * ) ; // deprecated
+ alt-transfer-source-v6 ( <ipv6_address> | * ) ; // deprecated
+ check-names ( fail | warn | ignore );
+ database <string>;
+ file <quoted_string>;
+ ixfr-from-differences <boolean>;
+ journal <quoted_string>;
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ max-ixfr-ratio ( unlimited | <percentage> );
+ max-journal-size ( default | unlimited | <sizeval> );
+ max-records <integer>;
+ max-refresh-time <integer>;
+ max-retry-time <integer>;
+ max-transfer-idle-in <integer>;
+ max-transfer-idle-out <integer>;
+ max-transfer-time-in <integer>;
+ max-transfer-time-out <integer>;
+ min-refresh-time <integer>;
+ min-retry-time <integer>;
+ multi-master <boolean>;
+ notify ( explicit | master-only | primary-only | <boolean> );
+ notify-delay <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ try-tcp-refresh <boolean>;
+ use-alt-transfer-source <boolean>; // deprecated
+ zero-no-soa-ttl <boolean>;
+ zone-statistics ( full | terse | none | <boolean> );
+};
diff --git a/doc/misc/options b/doc/misc/options
new file mode 100644
index 0000000..e19261f
--- /dev/null
+++ b/doc/misc/options
@@ -0,0 +1,597 @@
+acl <string> { <address_match_element>; ... }; // may occur multiple times
+
+controls {
+ inet ( <ipv4_address> | <ipv6_address> | * ) [ port ( <integer> | * ) ] allow { <address_match_element>; ... } [ keys { <string>; ... } ] [ read-only <boolean> ]; // may occur multiple times
+ unix <quoted_string> perm <integer> owner <integer> group <integer> [ keys { <string>; ... } ] [ read-only <boolean> ]; // may occur multiple times
+}; // may occur multiple times
+
+dlz <string> {
+ database <string>;
+ search <boolean>;
+}; // may occur multiple times
+
+dnssec-policy <string> {
+ dnskey-ttl <duration>;
+ keys { ( csk | ksk | zsk ) [ ( key-directory ) ] lifetime <duration_or_unlimited> algorithm <string> [ <integer> ]; ... };
+ max-zone-ttl <duration>;
+ nsec3param [ iterations <integer> ] [ optout <boolean> ] [ salt-length <integer> ];
+ parent-ds-ttl <duration>;
+ parent-propagation-delay <duration>;
+ parent-registration-delay <duration>; // obsolete
+ publish-safety <duration>;
+ purge-keys <duration>;
+ retire-safety <duration>;
+ signatures-refresh <duration>;
+ signatures-validity <duration>;
+ signatures-validity-dnskey <duration>;
+ zone-propagation-delay <duration>;
+}; // may occur multiple times
+
+dyndb <string> <quoted_string> { <unspecified-text> }; // may occur multiple times
+
+http <string> {
+ endpoints { <quoted_string>; ... };
+ listener-clients <integer>;
+ streams-per-connection <integer>;
+}; // may occur multiple times
+
+key <string> {
+ algorithm <string>;
+ secret <string>;
+}; // may occur multiple times
+
+logging {
+ category <string> { <string>; ... }; // may occur multiple times
+ channel <string> {
+ buffered <boolean>;
+ file <quoted_string> [ versions ( unlimited | <integer> ) ] [ size <size> ] [ suffix ( increment | timestamp ) ];
+ null;
+ print-category <boolean>;
+ print-severity <boolean>;
+ print-time ( iso8601 | iso8601-utc | local | <boolean> );
+ severity <log_severity>;
+ stderr;
+ syslog [ <syslog_facility> ];
+ }; // may occur multiple times
+};
+
+managed-keys { <string> ( static-key | initial-key | static-ds | initial-ds ) <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times, deprecated
+
+options {
+ allow-new-zones <boolean>;
+ allow-notify { <address_match_element>; ... };
+ allow-query { <address_match_element>; ... };
+ allow-query-cache { <address_match_element>; ... };
+ allow-query-cache-on { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ allow-recursion { <address_match_element>; ... };
+ allow-recursion-on { <address_match_element>; ... };
+ allow-transfer [ port <integer> ] [ transport <string> ] { <address_match_element>; ... };
+ allow-update { <address_match_element>; ... };
+ allow-update-forwarding { <address_match_element>; ... };
+ also-notify [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ alt-transfer-source ( <ipv4_address> | * ) ; // deprecated
+ alt-transfer-source-v6 ( <ipv6_address> | * ) ; // deprecated
+ answer-cookie <boolean>;
+ attach-cache <string>;
+ auth-nxdomain <boolean>;
+ auto-dnssec ( allow | maintain | off ); // deprecated
+ automatic-interface-scan <boolean>;
+ avoid-v4-udp-ports { <portrange>; ... }; // deprecated
+ avoid-v6-udp-ports { <portrange>; ... }; // deprecated
+ bindkeys-file <quoted_string>;
+ blackhole { <address_match_element>; ... };
+ catalog-zones { zone <string> [ default-primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... } ] [ zone-directory <quoted_string> ] [ in-memory <boolean> ] [ min-update-interval <duration> ]; ... };
+ check-dup-records ( fail | warn | ignore );
+ check-integrity <boolean>;
+ check-mx ( fail | warn | ignore );
+ check-mx-cname ( fail | warn | ignore );
+ check-names ( primary | master | secondary | slave | response ) ( fail | warn | ignore ); // may occur multiple times
+ check-sibling <boolean>;
+ check-spf ( warn | ignore );
+ check-srv-cname ( fail | warn | ignore );
+ check-wildcard <boolean>;
+ clients-per-query <integer>;
+ cookie-algorithm ( aes | siphash24 );
+ cookie-secret <string>; // may occur multiple times
+ coresize ( default | unlimited | <sizeval> ); // deprecated
+ datasize ( default | unlimited | <sizeval> ); // deprecated
+ deny-answer-addresses { <address_match_element>; ... } [ except-from { <string>; ... } ];
+ deny-answer-aliases { <string>; ... } [ except-from { <string>; ... } ];
+ dialup ( notify | notify-passive | passive | refresh | <boolean> ); // deprecated
+ directory <quoted_string>;
+ disable-algorithms <string> { <string>; ... }; // may occur multiple times
+ disable-ds-digests <string> { <string>; ... }; // may occur multiple times
+ disable-empty-zone <string>; // may occur multiple times
+ dns64 <netprefix> {
+ break-dnssec <boolean>;
+ clients { <address_match_element>; ... };
+ exclude { <address_match_element>; ... };
+ mapped { <address_match_element>; ... };
+ recursive-only <boolean>;
+ suffix <ipv6_address>;
+ }; // may occur multiple times
+ dns64-contact <string>;
+ dns64-server <string>;
+ dnskey-sig-validity <integer>;
+ dnsrps-enable <boolean>; // not configured
+ dnsrps-options { <unspecified-text> }; // not configured
+ dnssec-accept-expired <boolean>;
+ dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
+ dnssec-must-be-secure <string> <boolean>; // may occur multiple times, deprecated
+ dnssec-policy <string>;
+ dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
+ dnssec-validation ( yes | no | auto );
+ dnstap { ( all | auth | client | forwarder | resolver | update ) [ ( query | response ) ]; ... }; // not configured
+ dnstap-identity ( <quoted_string> | none | hostname ); // not configured
+ dnstap-output ( file | unix ) <quoted_string> [ size ( unlimited | <size> ) ] [ versions ( unlimited | <integer> ) ] [ suffix ( increment | timestamp ) ]; // not configured
+ dnstap-version ( <quoted_string> | none ); // not configured
+ dscp <integer>; // obsolete
+ dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port <integer> ] | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ); ... };
+ dump-file <quoted_string>;
+ edns-udp-size <integer>;
+ empty-contact <string>;
+ empty-server <string>;
+ empty-zones-enable <boolean>;
+ fetch-quota-params <integer> <fixedpoint> <fixedpoint> <fixedpoint>;
+ fetches-per-server <integer> [ ( drop | fail ) ];
+ fetches-per-zone <integer> [ ( drop | fail ) ];
+ files ( default | unlimited | <sizeval> ); // deprecated
+ flush-zones-on-shutdown <boolean>;
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ fstrm-set-buffer-hint <integer>; // not configured
+ fstrm-set-flush-timeout <integer>; // not configured
+ fstrm-set-input-queue-size <integer>; // not configured
+ fstrm-set-output-notify-threshold <integer>; // not configured
+ fstrm-set-output-queue-model ( mpsc | spsc ); // not configured
+ fstrm-set-output-queue-size <integer>; // not configured
+ fstrm-set-reopen-interval <duration>; // not configured
+ geoip-directory ( <quoted_string> | none );
+ glue-cache <boolean>; // deprecated
+ heartbeat-interval <integer>; // deprecated
+ hostname ( <quoted_string> | none );
+ http-listener-clients <integer>;
+ http-port <integer>;
+ http-streams-per-connection <integer>;
+ https-port <integer>;
+ interface-interval <duration>;
+ ipv4only-contact <string>;
+ ipv4only-enable <boolean>;
+ ipv4only-server <string>;
+ ixfr-from-differences ( primary | master | secondary | slave | <boolean> );
+ keep-response-order { <address_match_element>; ... };
+ key-directory <quoted_string>;
+ lame-ttl <duration>;
+ listen-on [ port <integer> ] [ tls <string> ] [ http <string> ] { <address_match_element>; ... }; // may occur multiple times
+ listen-on-v6 [ port <integer> ] [ tls <string> ] [ http <string> ] { <address_match_element>; ... }; // may occur multiple times
+ lmdb-mapsize <sizeval>;
+ lock-file ( <quoted_string> | none );
+ managed-keys-directory <quoted_string>;
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ match-mapped-addresses <boolean>;
+ max-cache-size ( default | unlimited | <sizeval> | <percentage> );
+ max-cache-ttl <duration>;
+ max-clients-per-query <integer>;
+ max-ixfr-ratio ( unlimited | <percentage> );
+ max-journal-size ( default | unlimited | <sizeval> );
+ max-ncache-ttl <duration>;
+ max-records <integer>;
+ max-recursion-depth <integer>;
+ max-recursion-queries <integer>;
+ max-refresh-time <integer>;
+ max-retry-time <integer>;
+ max-rsa-exponent-size <integer>;
+ max-stale-ttl <duration>;
+ max-transfer-idle-in <integer>;
+ max-transfer-idle-out <integer>;
+ max-transfer-time-in <integer>;
+ max-transfer-time-out <integer>;
+ max-udp-size <integer>;
+ max-zone-ttl ( unlimited | <duration> );
+ memstatistics <boolean>;
+ memstatistics-file <quoted_string>;
+ message-compression <boolean>;
+ min-cache-ttl <duration>;
+ min-ncache-ttl <duration>;
+ min-refresh-time <integer>;
+ min-retry-time <integer>;
+ minimal-any <boolean>;
+ minimal-responses ( no-auth | no-auth-recursive | <boolean> );
+ multi-master <boolean>;
+ new-zones-directory <quoted_string>;
+ no-case-compress { <address_match_element>; ... };
+ nocookie-udp-size <integer>;
+ notify ( explicit | master-only | primary-only | <boolean> );
+ notify-delay <integer>;
+ notify-rate <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ notify-to-soa <boolean>;
+ nsec3-test-zone <boolean>; // test only
+ nta-lifetime <duration>;
+ nta-recheck <duration>;
+ nxdomain-redirect <string>;
+ parental-source ( <ipv4_address> | * ) ;
+ parental-source-v6 ( <ipv6_address> | * ) ;
+ pid-file ( <quoted_string> | none );
+ port <integer>;
+ preferred-glue <string>;
+ prefetch <integer> [ <integer> ];
+ provide-ixfr <boolean>;
+ qname-minimization ( strict | relaxed | disabled | off );
+ query-source [ address ] ( <ipv4_address> | * );
+ query-source-v6 [ address ] ( <ipv6_address> | * );
+ querylog <boolean>;
+ random-device ( <quoted_string> | none ); // obsolete
+ rate-limit {
+ all-per-second <integer>;
+ errors-per-second <integer>;
+ exempt-clients { <address_match_element>; ... };
+ ipv4-prefix-length <integer>;
+ ipv6-prefix-length <integer>;
+ log-only <boolean>;
+ max-table-size <integer>;
+ min-table-size <integer>;
+ nodata-per-second <integer>;
+ nxdomains-per-second <integer>;
+ qps-scale <integer>;
+ referrals-per-second <integer>;
+ responses-per-second <integer>;
+ slip <integer>;
+ window <integer>;
+ };
+ recursing-file <quoted_string>;
+ recursion <boolean>;
+ recursive-clients <integer>;
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ request-nsid <boolean>;
+ require-server-cookie <boolean>;
+ reserved-sockets <integer>; // deprecated
+ resolver-nonbackoff-tries <integer>;
+ resolver-query-timeout <integer>;
+ resolver-retry-interval <integer>;
+ response-padding { <address_match_element>; ... } block-size <integer>;
+ response-policy { zone <string> [ add-soa <boolean> ] [ log <boolean> ] [ max-policy-ttl <duration> ] [ min-update-interval <duration> ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only <quoted_string> ) ] [ recursive-only <boolean> ] [ nsip-enable <boolean> ] [ nsdname-enable <boolean> ]; ... } [ add-soa <boolean> ] [ break-dnssec <boolean> ] [ max-policy-ttl <duration> ] [ min-update-interval <duration> ] [ min-ns-dots <integer> ] [ nsip-wait-recurse <boolean> ] [ nsdname-wait-recurse <boolean> ] [ qname-wait-recurse <boolean> ] [ recursive-only <boolean> ] [ nsip-enable <boolean> ] [ nsdname-enable <boolean> ] [ dnsrps-enable <boolean> ] [ dnsrps-options { <unspecified-text> } ];
+ reuseport <boolean>;
+ root-delegation-only [ exclude { <string>; ... } ]; // deprecated
+ root-key-sentinel <boolean>;
+ rrset-order { [ class <string> ] [ type <string> ] [ name <quoted_string> ] <string> <string>; ... };
+ secroots-file <quoted_string>;
+ send-cookie <boolean>;
+ serial-query-rate <integer>;
+ serial-update-method ( date | increment | unixtime );
+ server-id ( <quoted_string> | none | hostname );
+ servfail-ttl <duration>;
+ session-keyalg <string>;
+ session-keyfile ( <quoted_string> | none );
+ session-keyname <string>;
+ sig-signing-nodes <integer>;
+ sig-signing-signatures <integer>;
+ sig-signing-type <integer>;
+ sig-validity-interval <integer> [ <integer> ];
+ sortlist { <address_match_element>; ... };
+ stacksize ( default | unlimited | <sizeval> ); // deprecated
+ stale-answer-client-timeout ( disabled | off | <integer> );
+ stale-answer-enable <boolean>;
+ stale-answer-ttl <duration>;
+ stale-cache-enable <boolean>;
+ stale-refresh-time <duration>;
+ startup-notify-rate <integer>;
+ statistics-file <quoted_string>;
+ suppress-initial-notify <boolean>; // obsolete
+ synth-from-dnssec <boolean>;
+ tcp-advertised-timeout <integer>;
+ tcp-clients <integer>;
+ tcp-idle-timeout <integer>;
+ tcp-initial-timeout <integer>;
+ tcp-keepalive-timeout <integer>;
+ tcp-listen-queue <integer>;
+ tcp-receive-buffer <integer>;
+ tcp-send-buffer <integer>;
+ tkey-dhkey <quoted_string> <integer>; // deprecated
+ tkey-domain <quoted_string>;
+ tkey-gssapi-credential <quoted_string>;
+ tkey-gssapi-keytab <quoted_string>;
+ tls-port <integer>;
+ transfer-format ( many-answers | one-answer );
+ transfer-message-size <integer>;
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ transfers-in <integer>;
+ transfers-out <integer>;
+ transfers-per-ns <integer>;
+ trust-anchor-telemetry <boolean>; // experimental
+ try-tcp-refresh <boolean>;
+ udp-receive-buffer <integer>;
+ udp-send-buffer <integer>;
+ update-check-ksk <boolean>;
+ update-quota <integer>;
+ use-alt-transfer-source <boolean>; // deprecated
+ use-v4-udp-ports { <portrange>; ... }; // deprecated
+ use-v6-udp-ports { <portrange>; ... }; // deprecated
+ v6-bias <integer>;
+ validate-except { <string>; ... };
+ version ( <quoted_string> | none );
+ zero-no-soa-ttl <boolean>;
+ zero-no-soa-ttl-cache <boolean>;
+ zone-statistics ( full | terse | none | <boolean> );
+};
+
+parental-agents <string> [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... }; // may occur multiple times
+
+plugin ( query ) <string> [ { <unspecified-text> } ]; // may occur multiple times
+
+primaries <string> [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... }; // may occur multiple times
+
+server <netprefix> {
+ bogus <boolean>;
+ edns <boolean>;
+ edns-udp-size <integer>;
+ edns-version <integer>;
+ keys <server_key>;
+ max-udp-size <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ padding <integer>;
+ provide-ixfr <boolean>;
+ query-source [ address ] ( <ipv4_address> | * );
+ query-source-v6 [ address ] ( <ipv6_address> | * );
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ request-nsid <boolean>;
+ send-cookie <boolean>;
+ tcp-keepalive <boolean>;
+ tcp-only <boolean>;
+ transfer-format ( many-answers | one-answer );
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ transfers <integer>;
+}; // may occur multiple times
+
+statistics-channels {
+ inet ( <ipv4_address> | <ipv6_address> | * ) [ port ( <integer> | * ) ] [ allow { <address_match_element>; ... } ]; // may occur multiple times
+}; // may occur multiple times
+
+tls <string> {
+ ca-file <quoted_string>;
+ cert-file <quoted_string>;
+ ciphers <string>;
+ dhparam-file <quoted_string>;
+ key-file <quoted_string>;
+ prefer-server-ciphers <boolean>;
+ protocols { <string>; ... };
+ remote-hostname <quoted_string>;
+ session-tickets <boolean>;
+}; // may occur multiple times
+
+trust-anchors { <string> ( static-key | initial-key | static-ds | initial-ds ) <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times
+
+trusted-keys { <string> <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times, deprecated
+
+view <string> [ <class> ] {
+ allow-new-zones <boolean>;
+ allow-notify { <address_match_element>; ... };
+ allow-query { <address_match_element>; ... };
+ allow-query-cache { <address_match_element>; ... };
+ allow-query-cache-on { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ allow-recursion { <address_match_element>; ... };
+ allow-recursion-on { <address_match_element>; ... };
+ allow-transfer [ port <integer> ] [ transport <string> ] { <address_match_element>; ... };
+ allow-update { <address_match_element>; ... };
+ allow-update-forwarding { <address_match_element>; ... };
+ also-notify [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ alt-transfer-source ( <ipv4_address> | * ) ; // deprecated
+ alt-transfer-source-v6 ( <ipv6_address> | * ) ; // deprecated
+ attach-cache <string>;
+ auth-nxdomain <boolean>;
+ auto-dnssec ( allow | maintain | off ); // deprecated
+ catalog-zones { zone <string> [ default-primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... } ] [ zone-directory <quoted_string> ] [ in-memory <boolean> ] [ min-update-interval <duration> ]; ... };
+ check-dup-records ( fail | warn | ignore );
+ check-integrity <boolean>;
+ check-mx ( fail | warn | ignore );
+ check-mx-cname ( fail | warn | ignore );
+ check-names ( primary | master | secondary | slave | response ) ( fail | warn | ignore ); // may occur multiple times
+ check-sibling <boolean>;
+ check-spf ( warn | ignore );
+ check-srv-cname ( fail | warn | ignore );
+ check-wildcard <boolean>;
+ clients-per-query <integer>;
+ deny-answer-addresses { <address_match_element>; ... } [ except-from { <string>; ... } ];
+ deny-answer-aliases { <string>; ... } [ except-from { <string>; ... } ];
+ dialup ( notify | notify-passive | passive | refresh | <boolean> ); // deprecated
+ disable-algorithms <string> { <string>; ... }; // may occur multiple times
+ disable-ds-digests <string> { <string>; ... }; // may occur multiple times
+ disable-empty-zone <string>; // may occur multiple times
+ dlz <string> {
+ database <string>;
+ search <boolean>;
+ }; // may occur multiple times
+ dns64 <netprefix> {
+ break-dnssec <boolean>;
+ clients { <address_match_element>; ... };
+ exclude { <address_match_element>; ... };
+ mapped { <address_match_element>; ... };
+ recursive-only <boolean>;
+ suffix <ipv6_address>;
+ }; // may occur multiple times
+ dns64-contact <string>;
+ dns64-server <string>;
+ dnskey-sig-validity <integer>;
+ dnsrps-enable <boolean>; // not configured
+ dnsrps-options { <unspecified-text> }; // not configured
+ dnssec-accept-expired <boolean>;
+ dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
+ dnssec-must-be-secure <string> <boolean>; // may occur multiple times, deprecated
+ dnssec-policy <string>;
+ dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
+ dnssec-validation ( yes | no | auto );
+ dnstap { ( all | auth | client | forwarder | resolver | update ) [ ( query | response ) ]; ... }; // not configured
+ dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port <integer> ] | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ); ... };
+ dyndb <string> <quoted_string> { <unspecified-text> }; // may occur multiple times
+ edns-udp-size <integer>;
+ empty-contact <string>;
+ empty-server <string>;
+ empty-zones-enable <boolean>;
+ fetch-quota-params <integer> <fixedpoint> <fixedpoint> <fixedpoint>;
+ fetches-per-server <integer> [ ( drop | fail ) ];
+ fetches-per-zone <integer> [ ( drop | fail ) ];
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ glue-cache <boolean>; // deprecated
+ ipv4only-contact <string>;
+ ipv4only-enable <boolean>;
+ ipv4only-server <string>;
+ ixfr-from-differences ( primary | master | secondary | slave | <boolean> );
+ key <string> {
+ algorithm <string>;
+ secret <string>;
+ }; // may occur multiple times
+ key-directory <quoted_string>;
+ lame-ttl <duration>;
+ lmdb-mapsize <sizeval>;
+ managed-keys { <string> ( static-key | initial-key | static-ds | initial-ds ) <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times, deprecated
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ match-clients { <address_match_element>; ... };
+ match-destinations { <address_match_element>; ... };
+ match-recursive-only <boolean>;
+ max-cache-size ( default | unlimited | <sizeval> | <percentage> );
+ max-cache-ttl <duration>;
+ max-clients-per-query <integer>;
+ max-ixfr-ratio ( unlimited | <percentage> );
+ max-journal-size ( default | unlimited | <sizeval> );
+ max-ncache-ttl <duration>;
+ max-records <integer>;
+ max-recursion-depth <integer>;
+ max-recursion-queries <integer>;
+ max-refresh-time <integer>;
+ max-retry-time <integer>;
+ max-stale-ttl <duration>;
+ max-transfer-idle-in <integer>;
+ max-transfer-idle-out <integer>;
+ max-transfer-time-in <integer>;
+ max-transfer-time-out <integer>;
+ max-udp-size <integer>;
+ max-zone-ttl ( unlimited | <duration> );
+ message-compression <boolean>;
+ min-cache-ttl <duration>;
+ min-ncache-ttl <duration>;
+ min-refresh-time <integer>;
+ min-retry-time <integer>;
+ minimal-any <boolean>;
+ minimal-responses ( no-auth | no-auth-recursive | <boolean> );
+ multi-master <boolean>;
+ new-zones-directory <quoted_string>;
+ no-case-compress { <address_match_element>; ... };
+ nocookie-udp-size <integer>;
+ notify ( explicit | master-only | primary-only | <boolean> );
+ notify-delay <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ notify-to-soa <boolean>;
+ nsec3-test-zone <boolean>; // test only
+ nta-lifetime <duration>;
+ nta-recheck <duration>;
+ nxdomain-redirect <string>;
+ parental-source ( <ipv4_address> | * ) ;
+ parental-source-v6 ( <ipv6_address> | * ) ;
+ plugin ( query ) <string> [ { <unspecified-text> } ]; // may occur multiple times
+ preferred-glue <string>;
+ prefetch <integer> [ <integer> ];
+ provide-ixfr <boolean>;
+ qname-minimization ( strict | relaxed | disabled | off );
+ query-source [ address ] ( <ipv4_address> | * );
+ query-source-v6 [ address ] ( <ipv6_address> | * );
+ rate-limit {
+ all-per-second <integer>;
+ errors-per-second <integer>;
+ exempt-clients { <address_match_element>; ... };
+ ipv4-prefix-length <integer>;
+ ipv6-prefix-length <integer>;
+ log-only <boolean>;
+ max-table-size <integer>;
+ min-table-size <integer>;
+ nodata-per-second <integer>;
+ nxdomains-per-second <integer>;
+ qps-scale <integer>;
+ referrals-per-second <integer>;
+ responses-per-second <integer>;
+ slip <integer>;
+ window <integer>;
+ };
+ recursion <boolean>;
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ request-nsid <boolean>;
+ require-server-cookie <boolean>;
+ resolver-nonbackoff-tries <integer>;
+ resolver-query-timeout <integer>;
+ resolver-retry-interval <integer>;
+ response-padding { <address_match_element>; ... } block-size <integer>;
+ response-policy { zone <string> [ add-soa <boolean> ] [ log <boolean> ] [ max-policy-ttl <duration> ] [ min-update-interval <duration> ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only <quoted_string> ) ] [ recursive-only <boolean> ] [ nsip-enable <boolean> ] [ nsdname-enable <boolean> ]; ... } [ add-soa <boolean> ] [ break-dnssec <boolean> ] [ max-policy-ttl <duration> ] [ min-update-interval <duration> ] [ min-ns-dots <integer> ] [ nsip-wait-recurse <boolean> ] [ nsdname-wait-recurse <boolean> ] [ qname-wait-recurse <boolean> ] [ recursive-only <boolean> ] [ nsip-enable <boolean> ] [ nsdname-enable <boolean> ] [ dnsrps-enable <boolean> ] [ dnsrps-options { <unspecified-text> } ];
+ root-delegation-only [ exclude { <string>; ... } ]; // deprecated
+ root-key-sentinel <boolean>;
+ rrset-order { [ class <string> ] [ type <string> ] [ name <quoted_string> ] <string> <string>; ... };
+ send-cookie <boolean>;
+ serial-update-method ( date | increment | unixtime );
+ server <netprefix> {
+ bogus <boolean>;
+ edns <boolean>;
+ edns-udp-size <integer>;
+ edns-version <integer>;
+ keys <server_key>;
+ max-udp-size <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ padding <integer>;
+ provide-ixfr <boolean>;
+ query-source [ address ] ( <ipv4_address> | * );
+ query-source-v6 [ address ] ( <ipv6_address> | * );
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ request-nsid <boolean>;
+ send-cookie <boolean>;
+ tcp-keepalive <boolean>;
+ tcp-only <boolean>;
+ transfer-format ( many-answers | one-answer );
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ transfers <integer>;
+ }; // may occur multiple times
+ servfail-ttl <duration>;
+ sig-signing-nodes <integer>;
+ sig-signing-signatures <integer>;
+ sig-signing-type <integer>;
+ sig-validity-interval <integer> [ <integer> ];
+ sortlist { <address_match_element>; ... };
+ stale-answer-client-timeout ( disabled | off | <integer> );
+ stale-answer-enable <boolean>;
+ stale-answer-ttl <duration>;
+ stale-cache-enable <boolean>;
+ stale-refresh-time <duration>;
+ suppress-initial-notify <boolean>; // obsolete
+ synth-from-dnssec <boolean>;
+ transfer-format ( many-answers | one-answer );
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ trust-anchor-telemetry <boolean>; // experimental
+ trust-anchors { <string> ( static-key | initial-key | static-ds | initial-ds ) <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times
+ trusted-keys { <string> <integer> <integer> <integer> <quoted_string>; ... }; // may occur multiple times, deprecated
+ try-tcp-refresh <boolean>;
+ update-check-ksk <boolean>;
+ use-alt-transfer-source <boolean>; // deprecated
+ v6-bias <integer>;
+ validate-except { <string>; ... };
+ zero-no-soa-ttl <boolean>;
+ zero-no-soa-ttl-cache <boolean>;
+ zone-statistics ( full | terse | none | <boolean> );
+}; // may occur multiple times
+
diff --git a/doc/misc/parsegrammar.py b/doc/misc/parsegrammar.py
new file mode 100644
index 0000000..b3fede0
--- /dev/null
+++ b/doc/misc/parsegrammar.py
@@ -0,0 +1,194 @@
+############################################################################
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+############################################################################
+
+"""
+Read ISC config grammar description produced by "cfg_test --grammar",
+transform it into JSON, and print it to stdout.
+
+Beware: This parser is pretty dumb and heavily depends on cfg_test output
+format. See parse_mapbody() for more details.
+
+Maps are recursively parsed into sub-dicts, all other elements (lists etc.)
+are left intact and returned as one string.
+
+Output example from named.conf grammar showing three variants follow.
+Keys "_flags" and "_id" are present only if non-empty. Key "_grammar" denotes
+end node, key "_mapbody" denotes a nested map.
+
+{
+ "acl": {
+ "_flags": [
+ "may occur multiple times"
+ ],
+ "_grammar": "<string> { <address_match_element>; ... }"
+ },
+ "http": {
+ "_flags": [
+ "may occur multiple times"
+ ],
+ "_id": "<string>",
+ "_mapbody": {
+ "endpoints": {
+ "_grammar": "{ <quoted_string>; ... }"
+ },
+ "streams-per-connection": {
+ "_grammar": "<integer>"
+ }
+ }
+ },
+ "options": {
+ "_mapbody": {
+ "rate-limit": {
+ "_mapbody": {
+ "all-per-second": {
+ "_grammar": "<integer>"
+ }
+ }
+ }
+ }
+ }
+}
+"""
+import fileinput
+import json
+import re
+
+FLAGS = [
+ "may occur multiple times",
+ "obsolete",
+ "deprecated",
+ "experimental",
+ "test only",
+]
+
+KEY_REGEX = re.compile("[a-zA-Z0-9-]+")
+
+
+def split_comments(line):
+ """Split line on comment boundary and strip right-side whitespace.
+ Supports only #, //, and /* comments which end at the end of line.
+ It does NOT handle:
+ - quoted strings
+ - /* comments which do not end at line boundary
+ - multiple /* comments on a single line
+ """
+ assert '"' not in line, 'lines with " are not supported'
+ data_end_idx = len(line)
+ for delimiter in ["#", "//", "/*"]:
+ try:
+ data_end_idx = min(line.index(delimiter), data_end_idx)
+ except ValueError:
+ continue
+ if delimiter == "/*":
+ # sanity checks
+ if not line.rstrip().endswith("*/"):
+ raise NotImplementedError(
+ "unsupported /* comment, does not end at the end of line", line
+ )
+ if "/*" in line[data_end_idx + 1 :]:
+ raise NotImplementedError(
+ "unsupported line with multiple /* comments", line
+ )
+
+ noncomment = line[:data_end_idx]
+ comment = line[data_end_idx:]
+ return noncomment, comment
+
+
+def parse_line(filein):
+ """Consume single line from input, return non-comment and comment."""
+ for line in filein:
+ line, comment = split_comments(line)
+ line = line.strip()
+ comment = comment.strip()
+ if not line:
+ continue
+ yield line, comment
+
+
+def parse_flags(comments):
+ """Extract known flags from comments. Must match exact strings used by cfg_test."""
+ out = []
+ for flag in FLAGS:
+ if flag in comments:
+ out.append(flag)
+ return out
+
+
+def parse_mapbody(filein):
+ """Parse body of a "map" in ISC config format.
+
+ Input lines can be only:
+ - whitespace & comments only -> ignore
+ - <keyword> <anything>; -> store <anything> as "_grammar" for this keyword
+ - <keyword> <anything> { -> parse sub-map and store (optional) <anything> as "_id",
+ producing nested dict under "_mapbody"
+ Also store known strings found at the end of line in "_flags".
+
+ Returns:
+ - tuple (map dict, map comment) when }; line is reached
+ - map dict when we run out of lines without the closing };
+ """
+ thismap = {}
+ for line, comment in parse_line(filein):
+ flags = parse_flags(comment)
+ if line == "};": # end of a nested map
+ return thismap, flags
+
+ # first word - a map key name
+ # beware: some statements do not have parameters, e.g. "null;"
+ key = line.split()[0].rstrip(";")
+ # map key sanity check
+ if not KEY_REGEX.fullmatch(key):
+ raise NotImplementedError("suspicious keyword detected", line)
+
+ # omit keyword from the grammar
+ grammar = line[len(key) :].strip()
+ # also skip final ; or {
+ grammar = grammar[:-1].strip()
+
+ thismap[key] = {}
+ if line.endswith("{"):
+ # nested map, recurse, but keep "extra identifiers" if any
+ try:
+ subkeys, flags = parse_mapbody(filein)
+ except ValueError:
+ raise ValueError("unfinished nested map, missing }; detected") from None
+ if flags:
+ thismap[key]["_flags"] = flags
+ if grammar:
+ # for lines which look like "view <name> {" store "<name>"
+ thismap[key]["_id"] = grammar
+ thismap[key]["_mapbody"] = subkeys
+ else:
+ assert line.endswith(";")
+ if flags:
+ thismap[key]["_flags"] = flags
+ thismap[key]["_grammar"] = grammar
+
+ # Ran out of lines: can happen only on the end of the top-level map-body!
+ # Intentionally do not return second parameter to cause ValueError
+ # if we reach this spot with a missing }; in a nested map.
+ assert len(thismap)
+ return thismap
+
+
+def main():
+ """Read stdin or filename provided on command line"""
+ with fileinput.input() as filein:
+ grammar = parse_mapbody(filein)
+ print(json.dumps(grammar, indent=4))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/doc/misc/primary.zoneopt b/doc/misc/primary.zoneopt
new file mode 100644
index 0000000..8f646e3
--- /dev/null
+++ b/doc/misc/primary.zoneopt
@@ -0,0 +1,62 @@
+zone <string> [ <class> ] {
+ type primary;
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ allow-transfer [ port <integer> ] [ transport <string> ] { <address_match_element>; ... };
+ allow-update { <address_match_element>; ... };
+ also-notify [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ alt-transfer-source ( <ipv4_address> | * ) ; // deprecated
+ alt-transfer-source-v6 ( <ipv6_address> | * ) ; // deprecated
+ auto-dnssec ( allow | maintain | off ); // deprecated
+ check-dup-records ( fail | warn | ignore );
+ check-integrity <boolean>;
+ check-mx ( fail | warn | ignore );
+ check-mx-cname ( fail | warn | ignore );
+ check-names ( fail | warn | ignore );
+ check-sibling <boolean>;
+ check-spf ( warn | ignore );
+ check-srv-cname ( fail | warn | ignore );
+ check-wildcard <boolean>;
+ database <string>;
+ dialup ( notify | notify-passive | passive | refresh | <boolean> ); // deprecated
+ dlz <string>;
+ dnskey-sig-validity <integer>;
+ dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
+ dnssec-policy <string>;
+ dnssec-secure-to-insecure <boolean>;
+ dnssec-update-mode ( maintain | no-resign );
+ file <quoted_string>;
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ inline-signing <boolean>;
+ ixfr-from-differences <boolean>;
+ journal <quoted_string>;
+ key-directory <quoted_string>;
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ max-ixfr-ratio ( unlimited | <percentage> );
+ max-journal-size ( default | unlimited | <sizeval> );
+ max-records <integer>;
+ max-transfer-idle-out <integer>;
+ max-transfer-time-out <integer>;
+ max-zone-ttl ( unlimited | <duration> );
+ notify ( explicit | master-only | primary-only | <boolean> );
+ notify-delay <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ notify-to-soa <boolean>;
+ nsec3-test-zone <boolean>; // test only
+ parental-agents [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ parental-source ( <ipv4_address> | * ) ;
+ parental-source-v6 ( <ipv6_address> | * ) ;
+ serial-update-method ( date | increment | unixtime );
+ sig-signing-nodes <integer>;
+ sig-signing-signatures <integer>;
+ sig-signing-type <integer>;
+ sig-validity-interval <integer> [ <integer> ];
+ update-check-ksk <boolean>;
+ update-policy ( local | { ( deny | grant ) <string> ( 6to4-self | external | krb5-self | krb5-selfsub | krb5-subdomain | krb5-subdomain-self-rhs | ms-self | ms-selfsub | ms-subdomain | ms-subdomain-self-rhs | name | self | selfsub | selfwild | subdomain | tcp-self | wildcard | zonesub ) [ <string> ] <rrtypelist>; ... } );
+ zero-no-soa-ttl <boolean>;
+ zone-statistics ( full | terse | none | <boolean> );
+};
diff --git a/doc/misc/redirect.zoneopt b/doc/misc/redirect.zoneopt
new file mode 100644
index 0000000..bcd9a57
--- /dev/null
+++ b/doc/misc/redirect.zoneopt
@@ -0,0 +1,13 @@
+zone <string> [ <class> ] {
+ type redirect;
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ dlz <string>;
+ file <quoted_string>;
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ max-records <integer>;
+ max-zone-ttl ( unlimited | <duration> );
+ primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ zone-statistics ( full | terse | none | <boolean> );
+};
diff --git a/doc/misc/rndc.grammar b/doc/misc/rndc.grammar
new file mode 100644
index 0000000..9d5604f
--- /dev/null
+++ b/doc/misc/rndc.grammar
@@ -0,0 +1,21 @@
+key <string> {
+ algorithm <string>;
+ secret <string>;
+}; // may occur multiple times
+
+options {
+ default-key <string>;
+ default-port <integer>;
+ default-server <string>;
+ default-source-address ( <ipv4_address> | * );
+ default-source-address-v6 ( <ipv6_address> | * );
+};
+
+server <string> {
+ addresses { ( <quoted_string> [ port <integer> ] | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ); ... };
+ key <string>;
+ port <integer>;
+ source-address ( <ipv4_address> | * );
+ source-address-v6 ( <ipv6_address> | * );
+}; // may occur multiple times
+
diff --git a/doc/misc/secondary.zoneopt b/doc/misc/secondary.zoneopt
new file mode 100644
index 0000000..3237aab
--- /dev/null
+++ b/doc/misc/secondary.zoneopt
@@ -0,0 +1,65 @@
+zone <string> [ <class> ] {
+ type secondary;
+ allow-notify { <address_match_element>; ... };
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ allow-transfer [ port <integer> ] [ transport <string> ] { <address_match_element>; ... };
+ allow-update-forwarding { <address_match_element>; ... };
+ also-notify [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ alt-transfer-source ( <ipv4_address> | * ) ; // deprecated
+ alt-transfer-source-v6 ( <ipv6_address> | * ) ; // deprecated
+ auto-dnssec ( allow | maintain | off ); // deprecated
+ check-names ( fail | warn | ignore );
+ database <string>;
+ dialup ( notify | notify-passive | passive | refresh | <boolean> ); // deprecated
+ dlz <string>;
+ dnskey-sig-validity <integer>;
+ dnssec-dnskey-kskonly <boolean>;
+ dnssec-loadkeys-interval <integer>;
+ dnssec-policy <string>;
+ dnssec-update-mode ( maintain | no-resign );
+ file <quoted_string>;
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ inline-signing <boolean>;
+ ixfr-from-differences <boolean>;
+ journal <quoted_string>;
+ key-directory <quoted_string>;
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ max-ixfr-ratio ( unlimited | <percentage> );
+ max-journal-size ( default | unlimited | <sizeval> );
+ max-records <integer>;
+ max-refresh-time <integer>;
+ max-retry-time <integer>;
+ max-transfer-idle-in <integer>;
+ max-transfer-idle-out <integer>;
+ max-transfer-time-in <integer>;
+ max-transfer-time-out <integer>;
+ min-refresh-time <integer>;
+ min-retry-time <integer>;
+ multi-master <boolean>;
+ notify ( explicit | master-only | primary-only | <boolean> );
+ notify-delay <integer>;
+ notify-source ( <ipv4_address> | * ) ;
+ notify-source-v6 ( <ipv6_address> | * ) ;
+ notify-to-soa <boolean>;
+ nsec3-test-zone <boolean>; // test only
+ parental-agents [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ parental-source ( <ipv4_address> | * ) ;
+ parental-source-v6 ( <ipv6_address> | * ) ;
+ primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ request-expire <boolean>;
+ request-ixfr <boolean>;
+ sig-signing-nodes <integer>;
+ sig-signing-signatures <integer>;
+ sig-signing-type <integer>;
+ sig-validity-interval <integer> [ <integer> ];
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ try-tcp-refresh <boolean>;
+ update-check-ksk <boolean>;
+ use-alt-transfer-source <boolean>; // deprecated
+ zero-no-soa-ttl <boolean>;
+ zone-statistics ( full | terse | none | <boolean> );
+};
diff --git a/doc/misc/sort-options.pl b/doc/misc/sort-options.pl
new file mode 100644
index 0000000..f60b0b7
--- /dev/null
+++ b/doc/misc/sort-options.pl
@@ -0,0 +1,45 @@
+#!/bin/perl
+
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+sub sortlevel() {
+ my @options = ();
+ my $fin = "";
+ my $i = 0;
+ while (<>) {
+ if (/^\s*};$/ || /^\s*}; \/\/.*$/) {
+ $fin = $_;
+ # print 2, $_;
+ last;
+ }
+ next if (/^$/);
+ if (/{$/) {
+ # print 3, $_;
+ my $sec = $_;
+ push(@options, $sec . sortlevel());
+ } else {
+ push(@options, $_);
+ # print 1, $_;
+ }
+ $i++;
+ }
+ my $result = "";
+ foreach my $i (sort @options) {
+ $result = ${result}.${i};
+ $result = $result."\n" if ($i =~ /^[a-z]/i);
+ # print 5, ${i};
+ }
+ $result = ${result}.${fin};
+ return ($result);
+}
+
+print sortlevel();
diff --git a/doc/misc/static-stub.zoneopt b/doc/misc/static-stub.zoneopt
new file mode 100644
index 0000000..5357528
--- /dev/null
+++ b/doc/misc/static-stub.zoneopt
@@ -0,0 +1,11 @@
+zone <string> [ <class> ] {
+ type static-stub;
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ max-records <integer>;
+ server-addresses { ( <ipv4_address> | <ipv6_address> ); ... };
+ server-names { <string>; ... };
+ zone-statistics ( full | terse | none | <boolean> );
+};
diff --git a/doc/misc/stub.zoneopt b/doc/misc/stub.zoneopt
new file mode 100644
index 0000000..29c1d56
--- /dev/null
+++ b/doc/misc/stub.zoneopt
@@ -0,0 +1,27 @@
+zone <string> [ <class> ] {
+ type stub;
+ allow-query { <address_match_element>; ... };
+ allow-query-on { <address_match_element>; ... };
+ check-names ( fail | warn | ignore );
+ database <string>;
+ delegation-only <boolean>; // deprecated
+ dialup ( notify | notify-passive | passive | refresh | <boolean> ); // deprecated
+ file <quoted_string>;
+ forward ( first | only );
+ forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ]; ... };
+ masterfile-format ( raw | text );
+ masterfile-style ( full | relative );
+ max-records <integer>;
+ max-refresh-time <integer>;
+ max-retry-time <integer>;
+ max-transfer-idle-in <integer>;
+ max-transfer-time-in <integer>;
+ min-refresh-time <integer>;
+ min-retry-time <integer>;
+ multi-master <boolean>;
+ primaries [ port <integer> ] { ( <remote-servers> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ] [ tls <string> ]; ... };
+ transfer-source ( <ipv4_address> | * ) ;
+ transfer-source-v6 ( <ipv6_address> | * ) ;
+ use-alt-transfer-source <boolean>; // deprecated
+ zone-statistics ( full | terse | none | <boolean> );
+};