diff --git a/CHANGES b/CHANGES
index 707b22d188..2dd61440d7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,11 @@
+4873. [doc] Grammars for named.conf included in the ARM are now
+ automatically generated by the configuration parser
+ itself. As a side effect of the work needed to
+ separate zone type grammars from each other, this
+ also makes checking of zone statements in
+ named-checkconf more correct and consistent.
+ [RT #36957]
+
4872. [bug] Don't permit loading meta RR types such as TKEY
from master files. [RT #47009]
diff --git a/bin/named/named.conf.5 b/bin/named/named.conf.5
index b91a77a493..3e9c63bd4d 100644
--- a/bin/named/named.conf.5
+++ b/bin/named/named.conf.5
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2004-2017 Internet Systems Consortium, Inc. ("ISC")
+.\" Copyright (C) 2004-2018 Internet Systems Consortium, Inc. ("ISC")
.\"
.\" 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
@@ -10,12 +10,12 @@
.\" Title: named.conf
.\" Author:
.\" Generator: DocBook XSL Stylesheets v1.78.1
-.\" Date: 2017-04-25
+.\" Date: 2018-01-08
.\" Manual: BIND9
.\" Source: ISC
.\" Language: English
.\"
-.TH "NAMED\&.CONF" "5" "2017\-04\-25" "ISC" "BIND9"
+.TH "NAMED\&.CONF" "5" "2018\-01\-08" "ISC" "BIND9"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -181,10 +181,6 @@ masters \fIstring\fR [ port \fIinteger\fR ] [ dscp
.\}
.nf
options {
- acache\-cleaning\-interval \fIinteger\fR;
- acache\-enable \fIboolean\fR;
- additional\-from\-auth \fIboolean\fR;
- additional\-from\-cache \fIboolean\fR;
allow\-new\-zones \fIboolean\fR;
allow\-notify { \fIaddress_match_element\fR; \&.\&.\&. };
allow\-query { \fIaddress_match_element\fR; \&.\&.\&. };
@@ -221,8 +217,9 @@ options {
check\-integrity \fIboolean\fR;
check\-mx ( fail | warn | ignore );
check\-mx\-cname ( fail | warn | ignore );
- check\-names ( master | slave | response
- ) ( fail | warn | ignore );
+ check\-names ( primary | master |
+ secondary | slave | response ) (
+ fail | warn | ignore );
check\-sibling \fIboolean\fR;
check\-spf ( warn | ignore );
check\-srv\-cname ( fail | warn | ignore );
@@ -254,6 +251,8 @@ options {
};
dns64\-contact \fIstring\fR;
dns64\-server \fIstring\fR;
+ dnsrps\-enable \fIboolean\fR;
+ dnsrps\-options { \fIunspecified\-text\fR };
dnssec\-accept\-expired \fIboolean\fR;
dnssec\-dnskey\-kskonly \fIboolean\fR;
dnssec\-enable \fIboolean\fR;
@@ -302,12 +301,14 @@ options {
fstrm\-set\-output\-queue\-size \fIinteger\fR;
fstrm\-set\-reopen\-interval \fIinteger\fR;
geoip\-directory ( \fIquoted_string\fR | none );
- geoip\-use\-ecs ( \fIquoted_string\fR | none );
+ geoip\-use\-ecs \fIboolean\fR;
+ glue\-cache \fIboolean\fR;
heartbeat\-interval \fIinteger\fR;
hostname ( \fIquoted_string\fR | none );
inline\-signing \fIboolean\fR;
interface\-interval \fIinteger\fR;
- ixfr\-from\-differences ( master | slave | \fIboolean\fR );
+ ixfr\-from\-differences ( primary | master | secondary | slave |
+ \fIboolean\fR );
keep\-response\-order { \fIaddress_match_element\fR; \&.\&.\&. };
key\-directory \fIquoted_string\fR;
lame\-ttl \fIttlval\fR;
@@ -323,11 +324,10 @@ options {
masterfile\-format ( map | raw | text );
masterfile\-style ( full | relative );
match\-mapped\-addresses \fIboolean\fR;
- max\-acache\-size ( unlimited | \fIsizeval\fR );
max\-cache\-size ( default | unlimited | \fIsizeval\fR | \fIpercentage\fR );
max\-cache\-ttl \fIinteger\fR;
max\-clients\-per\-query \fIinteger\fR;
- max\-journal\-size ( unlimited | \fIsizeval\fR );
+ max\-journal\-size ( default | unlimited | \fIsizeval\fR );
max\-ncache\-ttl \fIinteger\fR;
max\-records \fIinteger\fR;
max\-recursion\-depth \fIinteger\fR;
@@ -335,6 +335,7 @@ options {
max\-refresh\-time \fIinteger\fR;
max\-retry\-time \fIinteger\fR;
max\-rsa\-exponent\-size \fIinteger\fR;
+ max\-stale\-ttl \fIttlval\fR;
max\-transfer\-idle\-in \fIinteger\fR;
max\-transfer\-idle\-out \fIinteger\fR;
max\-transfer\-time\-in \fIinteger\fR;
@@ -349,6 +350,7 @@ options {
minimal\-any \fIboolean\fR;
minimal\-responses ( no\-auth | no\-auth\-recursive | \fIboolean\fR );
multi\-master \fIboolean\fR;
+ new\-zones\-directory \fIquoted_string\fR;
no\-case\-compress { \fIaddress_match_element\fR; \&.\&.\&. };
nocookie\-udp\-size \fIinteger\fR;
notify ( explicit | master\-only | \fIboolean\fR );
@@ -359,7 +361,6 @@ options {
notify\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR | * ) ]
[ dscp \fIinteger\fR ];
notify\-to\-soa \fIboolean\fR;
- nsec3\-test\-zone \fIboolean\fR; // test only
nta\-lifetime \fIttlval\fR;
nta\-recheck \fIttlval\fR;
nxdomain\-redirect \fIstring\fR;
@@ -375,7 +376,7 @@ options {
\fIinteger\fR | * ) ] ) | ( [ [ address ] ( \fIipv6_address\fR | * ) ]
port ( \fIinteger\fR | * ) ) ) [ dscp \fIinteger\fR ];
querylog \fIboolean\fR;
- random\-device \fIquoted_string\fR;
+ random\-device ( \fIquoted_string\fR | none );
rate\-limit {
all\-per\-second \fIinteger\fR;
errors\-per\-second \fIinteger\fR;
@@ -401,17 +402,23 @@ options {
request\-nsid \fIboolean\fR;
require\-server\-cookie \fIboolean\fR;
reserved\-sockets \fIinteger\fR;
+ resolver\-nonbackoff\-tries \fIinteger\fR;
resolver\-query\-timeout \fIinteger\fR;
+ resolver\-retry\-interval \fIinteger\fR;
response\-padding { \fIaddress_match_element\fR; \&.\&.\&. } block\-size
\fIinteger\fR;
response\-policy { zone \fIquoted_string\fR [ log \fIboolean\fR ] [
max\-policy\-ttl \fIinteger\fR ] [ min\-update\-interval \fIinteger\fR ] [
policy ( cname | disabled | drop | given | no\-op | nodata |
nxdomain | passthru | tcp\-only \fIquoted_string\fR ) ] [
- recursive\-only \fIboolean\fR ]; \&.\&.\&. } [ break\-dnssec \fIboolean\fR ] [
+ recursive\-only \fIboolean\fR ] [ nsip\-enable \fIboolean\fR ] [
+ nsdname\-enable \fIboolean\fR ]; \&.\&.\&. } [ break\-dnssec \fIboolean\fR ] [
max\-policy\-ttl \fIinteger\fR ] [ min\-update\-interval \fIinteger\fR ] [
min\-ns\-dots \fIinteger\fR ] [ nsip\-wait\-recurse \fIboolean\fR ] [
- qname\-wait\-recurse \fIboolean\fR ] [ recursive\-only \fIboolean\fR ];
+ qname\-wait\-recurse \fIboolean\fR ] [ recursive\-only \fIboolean\fR ] [
+ nsip\-enable \fIboolean\fR ] [ nsdname\-enable \fIboolean\fR ] [
+ dnsrps\-enable \fIboolean\fR ] [ dnsrps\-options { \fIunspecified\-text\fR
+ } ];
root\-delegation\-only [ exclude { \fIquoted_string\fR; \&.\&.\&. } ];
rrset\-order { [ class \fIstring\fR ] [ type \fIstring\fR ] [ name
\fIquoted_string\fR ] \fIstring\fR \fIstring\fR; \&.\&.\&. };
@@ -430,6 +437,8 @@ options {
sig\-validity\-interval \fIinteger\fR [ \fIinteger\fR ];
sortlist { \fIaddress_match_element\fR; \&.\&.\&. };
stacksize ( default | unlimited | \fIsizeval\fR );
+ stale\-answer\-enable \fIboolean\fR;
+ stale\-answer\-ttl \fIttlval\fR;
startup\-notify\-rate \fIinteger\fR;
statistics\-file \fIquoted_string\fR;
synth\-from\-dnssec \fIboolean\fR;
@@ -545,10 +554,6 @@ trusted\-keys { \fIstring\fR \fIinteger\fR \fIinteger\fR
.\}
.nf
view \fIstring\fR [ \fIclass\fR ] {
- acache\-cleaning\-interval \fIinteger\fR;
- acache\-enable \fIboolean\fR;
- additional\-from\-auth \fIboolean\fR;
- additional\-from\-cache \fIboolean\fR;
allow\-new\-zones \fIboolean\fR;
allow\-notify { \fIaddress_match_element\fR; \&.\&.\&. };
allow\-query { \fIaddress_match_element\fR; \&.\&.\&. };
@@ -580,8 +585,9 @@ view \fIstring\fR [ \fIclass\fR ] {
check\-integrity \fIboolean\fR;
check\-mx ( fail | warn | ignore );
check\-mx\-cname ( fail | warn | ignore );
- check\-names ( master | slave | response
- ) ( fail | warn | ignore );
+ check\-names ( primary | master |
+ secondary | slave | response ) (
+ fail | warn | ignore );
check\-sibling \fIboolean\fR;
check\-spf ( warn | ignore );
check\-srv\-cname ( fail | warn | ignore );
@@ -612,6 +618,8 @@ view \fIstring\fR [ \fIclass\fR ] {
};
dns64\-contact \fIstring\fR;
dns64\-server \fIstring\fR;
+ dnsrps\-enable \fIboolean\fR;
+ dnsrps\-options { \fIunspecified\-text\fR };
dnssec\-accept\-expired \fIboolean\fR;
dnssec\-dnskey\-kskonly \fIboolean\fR;
dnssec\-enable \fIboolean\fR;
@@ -643,8 +651,10 @@ view \fIstring\fR [ \fIclass\fR ] {
forward ( first | only );
forwarders [ port \fIinteger\fR ] [ dscp \fIinteger\fR ] { ( \fIipv4_address\fR
| \fIipv6_address\fR ) [ port \fIinteger\fR ] [ dscp \fIinteger\fR ]; \&.\&.\&. };
+ glue\-cache \fIboolean\fR;
inline\-signing \fIboolean\fR;
- ixfr\-from\-differences ( master | slave | \fIboolean\fR );
+ ixfr\-from\-differences ( primary | master | secondary | slave |
+ \fIboolean\fR );
key \fIstring\fR {
algorithm \fIstring\fR;
secret \fIstring\fR;
@@ -660,17 +670,17 @@ view \fIstring\fR [ \fIclass\fR ] {
match\-clients { \fIaddress_match_element\fR; \&.\&.\&. };
match\-destinations { \fIaddress_match_element\fR; \&.\&.\&. };
match\-recursive\-only \fIboolean\fR;
- max\-acache\-size ( unlimited | \fIsizeval\fR );
max\-cache\-size ( default | unlimited | \fIsizeval\fR | \fIpercentage\fR );
max\-cache\-ttl \fIinteger\fR;
max\-clients\-per\-query \fIinteger\fR;
- max\-journal\-size ( unlimited | \fIsizeval\fR );
+ max\-journal\-size ( default | unlimited | \fIsizeval\fR );
max\-ncache\-ttl \fIinteger\fR;
max\-records \fIinteger\fR;
max\-recursion\-depth \fIinteger\fR;
max\-recursion\-queries \fIinteger\fR;
max\-refresh\-time \fIinteger\fR;
max\-retry\-time \fIinteger\fR;
+ max\-stale\-ttl \fIttlval\fR;
max\-transfer\-idle\-in \fIinteger\fR;
max\-transfer\-idle\-out \fIinteger\fR;
max\-transfer\-time\-in \fIinteger\fR;
@@ -683,6 +693,7 @@ view \fIstring\fR [ \fIclass\fR ] {
minimal\-any \fIboolean\fR;
minimal\-responses ( no\-auth | no\-auth\-recursive | \fIboolean\fR );
multi\-master \fIboolean\fR;
+ new\-zones\-directory \fIquoted_string\fR;
no\-case\-compress { \fIaddress_match_element\fR; \&.\&.\&. };
nocookie\-udp\-size \fIinteger\fR;
notify ( explicit | master\-only | \fIboolean\fR );
@@ -692,7 +703,6 @@ view \fIstring\fR [ \fIclass\fR ] {
notify\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR | * ) ]
[ dscp \fIinteger\fR ];
notify\-to\-soa \fIboolean\fR;
- nsec3\-test\-zone \fIboolean\fR; // test only
nta\-lifetime \fIttlval\fR;
nta\-recheck \fIttlval\fR;
nxdomain\-redirect \fIstring\fR;
@@ -727,17 +737,23 @@ view \fIstring\fR [ \fIclass\fR ] {
request\-ixfr \fIboolean\fR;
request\-nsid \fIboolean\fR;
require\-server\-cookie \fIboolean\fR;
+ resolver\-nonbackoff\-tries \fIinteger\fR;
resolver\-query\-timeout \fIinteger\fR;
+ resolver\-retry\-interval \fIinteger\fR;
response\-padding { \fIaddress_match_element\fR; \&.\&.\&. } block\-size
\fIinteger\fR;
response\-policy { zone \fIquoted_string\fR [ log \fIboolean\fR ] [
max\-policy\-ttl \fIinteger\fR ] [ min\-update\-interval \fIinteger\fR ] [
policy ( cname | disabled | drop | given | no\-op | nodata |
nxdomain | passthru | tcp\-only \fIquoted_string\fR ) ] [
- recursive\-only \fIboolean\fR ]; \&.\&.\&. } [ break\-dnssec \fIboolean\fR ] [
+ recursive\-only \fIboolean\fR ] [ nsip\-enable \fIboolean\fR ] [
+ nsdname\-enable \fIboolean\fR ]; \&.\&.\&. } [ break\-dnssec \fIboolean\fR ] [
max\-policy\-ttl \fIinteger\fR ] [ min\-update\-interval \fIinteger\fR ] [
min\-ns\-dots \fIinteger\fR ] [ nsip\-wait\-recurse \fIboolean\fR ] [
- qname\-wait\-recurse \fIboolean\fR ] [ recursive\-only \fIboolean\fR ];
+ qname\-wait\-recurse \fIboolean\fR ] [ recursive\-only \fIboolean\fR ] [
+ nsip\-enable \fIboolean\fR ] [ nsdname\-enable \fIboolean\fR ] [
+ dnsrps\-enable \fIboolean\fR ] [ dnsrps\-options { \fIunspecified\-text\fR
+ } ];
root\-delegation\-only [ exclude { \fIquoted_string\fR; \&.\&.\&. } ];
rrset\-order { [ class \fIstring\fR ] [ type \fIstring\fR ] [ name
\fIquoted_string\fR ] \fIstring\fR \fIstring\fR; \&.\&.\&. };
@@ -783,6 +799,8 @@ view \fIstring\fR [ \fIclass\fR ] {
sig\-signing\-type \fIinteger\fR;
sig\-validity\-interval \fIinteger\fR [ \fIinteger\fR ];
sortlist { \fIaddress_match_element\fR; \&.\&.\&. };
+ stale\-answer\-enable \fIboolean\fR;
+ stale\-answer\-ttl \fIttlval\fR;
synth\-from\-dnssec \fIboolean\fR;
transfer\-format ( many\-answers | one\-answer );
transfer\-source ( \fIipv4_address\fR | * ) [ port ( \fIinteger\fR | * ) ] [
@@ -849,7 +867,7 @@ view \fIstring\fR [ \fIclass\fR ] {
| \fIipv4_address\fR [ port \fIinteger\fR ] | \fIipv6_address\fR [
port \fIinteger\fR ] ) [ key \fIstring\fR ]; \&.\&.\&. };
max\-ixfr\-log\-size ( default | unlimited |
- max\-journal\-size ( unlimited | \fIsizeval\fR );
+ max\-journal\-size ( default | unlimited | \fIsizeval\fR );
max\-records \fIinteger\fR;
max\-refresh\-time \fIinteger\fR;
max\-retry\-time \fIinteger\fR;
@@ -868,7 +886,6 @@ view \fIstring\fR [ \fIclass\fR ] {
notify\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR
| * ) ] [ dscp \fIinteger\fR ];
notify\-to\-soa \fIboolean\fR;
- nsec3\-test\-zone \fIboolean\fR; // test only
pubkey \fIinteger\fR
\fIinteger\fR
\fIinteger\fR
@@ -887,8 +904,9 @@ view \fIstring\fR [ \fIclass\fR ] {
transfer\-source\-v6 ( \fIipv6_address\fR | * ) [ port (
\fIinteger\fR | * ) ] [ dscp \fIinteger\fR ];
try\-tcp\-refresh \fIboolean\fR;
- type ( delegation\-only | forward | hint | master | redirect
- | slave | static\-stub | stub );
+ type ( primary | master | secondary | slave |
+ delegation\-only | forward | hint | redirect |
+ static\-stub | stub );
update\-check\-ksk \fIboolean\fR;
update\-policy ( local | { ( deny | grant ) \fIstring\fR (
6to4\-self | external | krb5\-self | krb5\-subdomain |
@@ -957,7 +975,7 @@ zone \fIstring\fR [ \fIclass\fR ] {
masters [ port \fIinteger\fR ] [ dscp \fIinteger\fR ] { ( \fImasters\fR |
\fIipv4_address\fR [ port \fIinteger\fR ] | \fIipv6_address\fR [ port
\fIinteger\fR ] ) [ key \fIstring\fR ]; \&.\&.\&. };
- max\-journal\-size ( unlimited | \fIsizeval\fR );
+ max\-journal\-size ( default | unlimited | \fIsizeval\fR );
max\-records \fIinteger\fR;
max\-refresh\-time \fIinteger\fR;
max\-retry\-time \fIinteger\fR;
@@ -976,7 +994,6 @@ zone \fIstring\fR [ \fIclass\fR ] {
notify\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR | * ) ]
[ dscp \fIinteger\fR ];
notify\-to\-soa \fIboolean\fR;
- nsec3\-test\-zone \fIboolean\fR; // test only
pubkey \fIinteger\fR \fIinteger\fR
request\-expire \fIboolean\fR;
request\-ixfr \fIboolean\fR;
@@ -993,8 +1010,8 @@ zone \fIstring\fR [ \fIclass\fR ] {
transfer\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR | * )
] [ dscp \fIinteger\fR ];
try\-tcp\-refresh \fIboolean\fR;
- type ( delegation\-only | forward | hint | master | redirect | slave
- | static\-stub | stub );
+ type ( primary | master | secondary | slave | delegation\-only |
+ forward | hint | redirect | static\-stub | stub );
update\-check\-ksk \fIboolean\fR;
update\-policy ( local | { ( deny | grant ) \fIstring\fR ( 6to4\-self |
external | krb5\-self | krb5\-subdomain | ms\-self | ms\-subdomain
@@ -1024,5 +1041,5 @@ BIND 9 Administrator Reference Manual\&.
\fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT"
.br
-Copyright \(co 2004-2017 Internet Systems Consortium, Inc. ("ISC")
+Copyright \(co 2004-2018 Internet Systems Consortium, Inc. ("ISC")
.br
diff --git a/bin/named/named.conf.docbook b/bin/named/named.conf.docbook
index 9ffae9fa3d..adc1e7e9df 100644
--- a/bin/named/named.conf.docbook
+++ b/bin/named/named.conf.docbook
@@ -1,5 +1,5 @@
+
+
+
+
+acl string { address_match_element; ... };
+
diff --git a/doc/arm/controls.grammar.xml b/doc/arm/controls.grammar.xml
new file mode 100644
index 0000000000..51864c963f
--- /dev/null
+++ b/doc/arm/controls.grammar.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+controls {
+ inet ( ipv4_address | ipv6_address |
+ * ) [ port ( integer | * ) ] allow
+ { address_match_element; ... } [
+ keys { string; ... } ] [ read-only
+ boolean ];
+ unix quoted_string perm integer
+ owner integer group integer [
+ keys { string; ... } ] [ read-only
+ boolean ];
+};
+
diff --git a/doc/arm/delegation-only.zoneopt.xml b/doc/arm/delegation-only.zoneopt.xml
new file mode 100644
index 0000000000..b367fb0313
--- /dev/null
+++ b/doc/arm/delegation-only.zoneopt.xml
@@ -0,0 +1,14 @@
+
+
+
+
+zone string [ class ] {
+ type delegation-only;
+};
+
diff --git a/doc/arm/forward.zoneopt.xml b/doc/arm/forward.zoneopt.xml
new file mode 100644
index 0000000000..4d8e9c1246
--- /dev/null
+++ b/doc/arm/forward.zoneopt.xml
@@ -0,0 +1,17 @@
+
+
+
+
+zone string [ class ] {
+ type forward;
+ delegation-only boolean;
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+};
+
diff --git a/doc/arm/hint.zoneopt.xml b/doc/arm/hint.zoneopt.xml
new file mode 100644
index 0000000000..d2716aa4a0
--- /dev/null
+++ b/doc/arm/hint.zoneopt.xml
@@ -0,0 +1,17 @@
+
+
+
+
+zone string [ class ] {
+ type hint;
+ check-names ( fail | warn | ignore );
+ delegation-only boolean;
+ file quoted_string;
+};
+
diff --git a/doc/arm/in-view.zoneopt.xml b/doc/arm/in-view.zoneopt.xml
new file mode 100644
index 0000000000..729a66219c
--- /dev/null
+++ b/doc/arm/in-view.zoneopt.xml
@@ -0,0 +1,14 @@
+
+
+
+
+zone string [ class ] {
+ in-view string;
+};
+
diff --git a/doc/arm/key.grammar.xml b/doc/arm/key.grammar.xml
new file mode 100644
index 0000000000..2fceb9cd69
--- /dev/null
+++ b/doc/arm/key.grammar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+key string {
+ algorithm string;
+ secret string;
+};
+
diff --git a/doc/arm/logging.grammar.xml b/doc/arm/logging.grammar.xml
new file mode 100644
index 0000000000..f9b3130125
--- /dev/null
+++ b/doc/arm/logging.grammar.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+logging {
+ category string { string; ... };
+ 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 ];
+ };
+};
+
diff --git a/doc/arm/man.named.conf.html b/doc/arm/man.named.conf.html
index b59af7caa1..040a195639 100644
--- a/doc/arm/man.named.conf.html
+++ b/doc/arm/man.named.conf.html
@@ -89,14 +89,14 @@ acl
controls {
inet ( ipv4_address | ipv6_address |
- * ) [ port ( integer | * ) ] allow
- { address_match_element; ... } [
- keys { string; ... } ] [ read-only
- boolean ];
+ * ) [ port ( integer | * ) ] allow
+ { address_match_element; ... } [
+ keys { string; ... } ] [ read-only
+ boolean ];
unix quoted_string perm integer
- owner integer group integer [
- keys { string; ... } ] [ read-only
- boolean ];
+ owner integer group integer [
+ keys { string; ... } ] [ read-only
+ boolean ];
};
@@ -140,20 +140,21 @@ logging
category string { string; ... };
channel string {
buffered boolean;
- file quoted_string [ versions ( unlimited | integer ) ]
- [ size size ] [ suffix ( increment | timestamp ) ];
+ 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 ];
+ syslog [ syslog_facility ];
};
};
+
MANAGED-KEYS
@@ -167,10 +168,10 @@ managed-keys
MASTERS
-masters string [ port integer ] [ dscp
- integer ] { ( masters | ipv4_address [
- port integer ] | ipv6_address [ port
- integer ] ) [ key string ]; ... };
+masters string [ port integer ] [ dscp
+ integer ] { ( masters | ipv4_address [
+ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
@@ -179,10 +180,6 @@ masters
options {
- acache-cleaning-interval integer;
- acache-enable boolean;
- additional-from-auth boolean;
- additional-from-cache boolean;
allow-new-zones boolean;
allow-notify { address_match_element; ... };
allow-query { address_match_element; ... };
@@ -194,13 +191,13 @@ options
allow-transfer { address_match_element; ... };
allow-update { address_match_element; ... };
allow-update-forwarding { address_match_element; ... };
- also-notify [ port integer ] [ dscp integer ] { ( masters |
- ipv4_address [ port integer ] | ipv6_address [ port
- integer ] ) [ key string ]; ... };
- alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
- alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
- * ) ] [ dscp integer ];
+ also-notify [ port integer ] [ dscp integer ] { ( masters |
+ ipv4_address [ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
attach-cache string;
auth-nxdomain boolean; // default changed
auto-dnssec ( allow | maintain | off );
@@ -210,17 +207,18 @@ options
bindkeys-file quoted_string;
blackhole { address_match_element; ... };
cache-file quoted_string;
- catalog-zones { zone quoted_string [ default-masters [ port
- integer ] [ dscp integer ] { ( masters | ipv4_address [
- port integer ] | ipv6_address [ port integer ] ) [ key
- string ]; ... } ] [ zone-directory quoted_string ] [
- in-memory boolean ] [ min-update-interval integer ]; ... };
+ catalog-zones { zone quoted_string [ default-masters [ port
+ integer ] [ dscp integer ] { ( masters | ipv4_address [
+ port integer ] | ipv6_address [ port integer ] ) [ key
+ string ]; ... } ] [ zone-directory quoted_string ] [
+ in-memory boolean ] [ min-update-interval integer ]; ... };
check-dup-records ( fail | warn | ignore );
check-integrity boolean;
check-mx ( fail | warn | ignore );
check-mx-cname ( fail | warn | ignore );
- check-names ( master | slave | response
- ) ( fail | warn | ignore );
+ check-names ( primary | master |
+ secondary | slave | response ) (
+ fail | warn | ignore );
check-sibling boolean;
check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
@@ -231,10 +229,10 @@ options
cookie-secret string;
coresize ( default | unlimited | sizeval );
datasize ( default | unlimited | sizeval );
- deny-answer-addresses { address_match_element; ... } [
- except-from { quoted_string; ... } ];
- deny-answer-aliases { quoted_string; ... } [ except-from {
- quoted_string; ... } ];
+ deny-answer-addresses { address_match_element; ... } [
+ except-from { quoted_string; ... } ];
+ deny-answer-aliases { quoted_string; ... } [ except-from {
+ quoted_string; ... } ];
dialup ( notify | notify-passive | passive | refresh | boolean );
directory quoted_string;
disable-algorithms string { string;
@@ -252,6 +250,8 @@ options
};
dns64-contact string;
dns64-server string;
+ dnsrps-enable boolean;
+ dnsrps-options { unspecified-text };
dnssec-accept-expired boolean;
dnssec-dnskey-kskonly boolean;
dnssec-enable boolean;
@@ -263,35 +263,35 @@ options
dnssec-update-mode ( maintain | no-resign );
dnssec-validation ( yes | no | auto );
dnstap { ( all | auth | client | forwarder |
- resolver ) [ ( query | response ) ]; ... };
+ resolver ) [ ( query | response ) ]; ... };
dnstap-identity ( quoted_string | none |
hostname );
- dnstap-output ( file | unix ) quoted_string [
- size ( unlimited | size ) ] [ versions (
- unlimited | integer ) ] [ suffix ( increment
- | timestamp ) ];
+ dnstap-output ( file | unix ) quoted_string [
+ size ( unlimited | size ) ] [ versions (
+ unlimited | integer ) ] [ suffix ( increment
+ | timestamp ) ];
dnstap-version ( quoted_string | none );
dscp integer;
- dual-stack-servers [ port integer ] { ( quoted_string [ port
- integer ] [ dscp integer ] | ipv4_address [ port
- integer ] [ dscp integer ] | ipv6_address [ port
- integer ] [ dscp integer ] ); ... };
+ dual-stack-servers [ port integer ] { ( quoted_string [ port
+ integer ] [ dscp integer ] | ipv4_address [ port
+ integer ] [ dscp integer ] | ipv6_address [ port
+ integer ] [ dscp 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 ) ];
+ fetches-per-server integer [ ( drop | fail ) ];
+ fetches-per-zone integer [ ( drop | fail ) ];
files ( default | unlimited | sizeval );
filter-aaaa { address_match_element; ... };
filter-aaaa-on-v4 ( break-dnssec | boolean );
filter-aaaa-on-v6 ( break-dnssec | boolean );
flush-zones-on-shutdown boolean;
forward ( first | only );
- forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
- | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
+ | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
fstrm-set-buffer-hint integer;
fstrm-set-flush-timeout integer;
fstrm-set-input-queue-size integer;
@@ -300,20 +300,22 @@ options
fstrm-set-output-queue-size integer;
fstrm-set-reopen-interval integer;
geoip-directory ( quoted_string | none );
- geoip-use-ecs ( quoted_string | none );
+ geoip-use-ecs boolean;
+ glue-cache boolean;
heartbeat-interval integer;
hostname ( quoted_string | none );
inline-signing boolean;
interface-interval integer;
- ixfr-from-differences ( master | slave | boolean );
+ ixfr-from-differences ( primary | master | secondary | slave |
+ boolean );
keep-response-order { address_match_element; ... };
key-directory quoted_string;
lame-ttl ttlval;
- listen-on [ port integer ] [ dscp
- integer ] {
+ listen-on [ port integer ] [ dscp
+ integer ] {
address_match_element; ... };
- listen-on-v6 [ port integer ] [ dscp
- integer ] {
+ listen-on-v6 [ port integer ] [ dscp
+ integer ] {
address_match_element; ... };
lmdb-mapsize sizeval;
lock-file ( quoted_string | none );
@@ -321,11 +323,10 @@ options
masterfile-format ( map | raw | text );
masterfile-style ( full | relative );
match-mapped-addresses boolean;
- max-acache-size ( unlimited | sizeval );
max-cache-size ( default | unlimited | sizeval | percentage );
max-cache-ttl integer;
max-clients-per-query integer;
- max-journal-size ( unlimited | sizeval );
+ max-journal-size ( default | unlimited | sizeval );
max-ncache-ttl integer;
max-records integer;
max-recursion-depth integer;
@@ -333,6 +334,7 @@ options
max-refresh-time integer;
max-retry-time integer;
max-rsa-exponent-size integer;
+ max-stale-ttl ttlval;
max-transfer-idle-in integer;
max-transfer-idle-out integer;
max-transfer-time-in integer;
@@ -347,33 +349,33 @@ options
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 | boolean );
notify-delay integer;
notify-rate integer;
- notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
- [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
notify-to-soa boolean;
- nsec3-test-zone boolean; // test only
nta-lifetime ttlval;
nta-recheck ttlval;
nxdomain-redirect string;
pid-file ( quoted_string | none );
port integer;
preferred-glue string;
- prefetch integer [ integer ];
+ prefetch integer [ integer ];
provide-ixfr boolean;
- query-source ( ( [ address ] ( ipv4_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
- query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
querylog boolean;
- random-device quoted_string;
+ random-device ( quoted_string | none );
rate-limit {
all-per-second integer;
errors-per-second integer;
@@ -399,20 +401,26 @@ options
request-nsid boolean;
require-server-cookie boolean;
reserved-sockets integer;
+ resolver-nonbackoff-tries integer;
resolver-query-timeout integer;
+ resolver-retry-interval integer;
response-padding { address_match_element; ... } block-size
integer;
- response-policy { zone quoted_string [ log boolean ] [
- max-policy-ttl integer ] [ min-update-interval integer ] [
+ response-policy { zone quoted_string [ log boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
policy ( cname | disabled | drop | given | no-op | nodata |
- nxdomain | passthru | tcp-only quoted_string ) ] [
- recursive-only boolean ]; ... } [ break-dnssec boolean ] [
- max-policy-ttl integer ] [ min-update-interval integer ] [
- min-ns-dots integer ] [ nsip-wait-recurse boolean ] [
- qname-wait-recurse boolean ] [ recursive-only boolean ];
- root-delegation-only [ exclude { quoted_string; ... } ];
- rrset-order { [ class string ] [ type string ] [ name
- quoted_string ] string string; ... };
+ nxdomain | passthru | tcp-only quoted_string ) ] [
+ recursive-only boolean ] [ nsip-enable boolean ] [
+ nsdname-enable boolean ]; ... } [ break-dnssec boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
+ min-ns-dots integer ] [ nsip-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 { quoted_string; ... } ];
+ rrset-order { [ class string ] [ type string ] [ name
+ quoted_string ] string string; ... };
secroots-file quoted_string;
send-cookie boolean;
serial-query-rate integer;
@@ -425,9 +433,11 @@ options
sig-signing-nodes integer;
sig-signing-signatures integer;
sig-signing-type integer;
- sig-validity-interval integer [ integer ];
+ sig-validity-interval integer [ integer ];
sortlist { address_match_element; ... };
stacksize ( default | unlimited | sizeval );
+ stale-answer-enable boolean;
+ stale-answer-ttl ttlval;
startup-notify-rate integer;
statistics-file quoted_string;
synth-from-dnssec boolean;
@@ -443,10 +453,10 @@ options
tkey-gssapi-keytab quoted_string;
transfer-format ( many-answers | one-answer );
transfer-message-size integer;
- transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
transfers-in integer;
transfers-out integer;
transfers-per-ns integer;
@@ -476,18 +486,18 @@ server
edns-version integer;
keys server_key;
max-udp-size integer;
- notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
- [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
padding integer;
provide-ixfr boolean;
- query-source ( ( [ address ] ( ipv4_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
- query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
request-expire boolean;
request-ixfr boolean;
request-nsid boolean;
@@ -495,10 +505,10 @@ server
tcp-keepalive boolean;
tcp-only boolean;
transfer-format ( many-answers | one-answer );
- transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
transfers integer;
};
@@ -510,9 +520,9 @@ server
statistics-channels {
inet ( ipv4_address | ipv6_address |
- * ) [ port ( integer | * ) ] [
+ * ) [ port ( integer | * ) ] [
allow { address_match_element; ...
- } ];
+ } ];
};
@@ -530,11 +540,7 @@ trusted-keys
VIEW
-view string [ class ] {
- acache-cleaning-interval integer;
- acache-enable boolean;
- additional-from-auth boolean;
- additional-from-cache boolean;
+view string [ class ] {
allow-new-zones boolean;
allow-notify { address_match_element; ... };
allow-query { address_match_element; ... };
@@ -546,38 +552,39 @@ view
allow-transfer { address_match_element; ... };
allow-update { address_match_element; ... };
allow-update-forwarding { address_match_element; ... };
- also-notify [ port integer ] [ dscp integer ] { ( masters |
- ipv4_address [ port integer ] | ipv6_address [ port
- integer ] ) [ key string ]; ... };
- alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
- alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
- * ) ] [ dscp integer ];
+ also-notify [ port integer ] [ dscp integer ] { ( masters |
+ ipv4_address [ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
attach-cache string;
auth-nxdomain boolean; // default changed
auto-dnssec ( allow | maintain | off );
cache-file quoted_string;
- catalog-zones { zone quoted_string [ default-masters [ port
- integer ] [ dscp integer ] { ( masters | ipv4_address [
- port integer ] | ipv6_address [ port integer ] ) [ key
- string ]; ... } ] [ zone-directory quoted_string ] [
- in-memory boolean ] [ min-update-interval integer ]; ... };
+ catalog-zones { zone quoted_string [ default-masters [ port
+ integer ] [ dscp integer ] { ( masters | ipv4_address [
+ port integer ] | ipv6_address [ port integer ] ) [ key
+ string ]; ... } ] [ zone-directory quoted_string ] [
+ in-memory boolean ] [ min-update-interval integer ]; ... };
check-dup-records ( fail | warn | ignore );
check-integrity boolean;
check-mx ( fail | warn | ignore );
check-mx-cname ( fail | warn | ignore );
- check-names ( master | slave | response
- ) ( fail | warn | ignore );
+ check-names ( primary | master |
+ secondary | slave | response ) (
+ fail | warn | ignore );
check-sibling boolean;
check-spf ( warn | ignore );
check-srv-cname ( fail | warn | ignore );
check-wildcard boolean;
cleaning-interval integer;
clients-per-query integer;
- deny-answer-addresses { address_match_element; ... } [
- except-from { quoted_string; ... } ];
- deny-answer-aliases { quoted_string; ... } [ except-from {
- quoted_string; ... } ];
+ deny-answer-addresses { address_match_element; ... } [
+ except-from { quoted_string; ... } ];
+ deny-answer-aliases { quoted_string; ... } [ except-from {
+ quoted_string; ... } ];
dialup ( notify | notify-passive | passive | refresh | boolean );
disable-algorithms string { string;
... };
@@ -598,6 +605,8 @@ view
};
dns64-contact string;
dns64-server string;
+ dnsrps-enable boolean;
+ dnsrps-options { unspecified-text };
dnssec-accept-expired boolean;
dnssec-dnskey-kskonly boolean;
dnssec-enable boolean;
@@ -609,11 +618,11 @@ view
dnssec-update-mode ( maintain | no-resign );
dnssec-validation ( yes | no | auto );
dnstap { ( all | auth | client | forwarder |
- resolver ) [ ( query | response ) ]; ... };
- dual-stack-servers [ port integer ] { ( quoted_string [ port
- integer ] [ dscp integer ] | ipv4_address [ port
- integer ] [ dscp integer ] | ipv6_address [ port
- integer ] [ dscp integer ] ); ... };
+ resolver ) [ ( query | response ) ]; ... };
+ dual-stack-servers [ port integer ] { ( quoted_string [ port
+ integer ] [ dscp integer ] | ipv4_address [ port
+ integer ] [ dscp integer ] | ipv6_address [ port
+ integer ] [ dscp integer ] ); ... };
dyndb string quoted_string {
unspecified-text };
edns-udp-size integer;
@@ -621,16 +630,18 @@ view
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 ) ];
+ fetches-per-server integer [ ( drop | fail ) ];
+ fetches-per-zone integer [ ( drop | fail ) ];
filter-aaaa { address_match_element; ... };
filter-aaaa-on-v4 ( break-dnssec | boolean );
filter-aaaa-on-v6 ( break-dnssec | boolean );
forward ( first | only );
- forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
- | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
+ | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ glue-cache boolean;
inline-signing boolean;
- ixfr-from-differences ( master | slave | boolean );
+ ixfr-from-differences ( primary | master | secondary | slave |
+ boolean );
key string {
algorithm string;
secret string;
@@ -646,17 +657,17 @@ view
match-clients { address_match_element; ... };
match-destinations { address_match_element; ... };
match-recursive-only boolean;
- max-acache-size ( unlimited | sizeval );
max-cache-size ( default | unlimited | sizeval | percentage );
max-cache-ttl integer;
max-clients-per-query integer;
- max-journal-size ( unlimited | sizeval );
+ max-journal-size ( default | unlimited | sizeval );
max-ncache-ttl integer;
max-records integer;
max-recursion-depth integer;
max-recursion-queries integer;
max-refresh-time integer;
max-retry-time integer;
+ max-stale-ttl ttlval;
max-transfer-idle-in integer;
max-transfer-idle-out integer;
max-transfer-time-in integer;
@@ -669,28 +680,28 @@ view
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 | boolean );
notify-delay integer;
- notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
- [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
notify-to-soa boolean;
- nsec3-test-zone boolean; // test only
nta-lifetime ttlval;
nta-recheck ttlval;
nxdomain-redirect string;
preferred-glue string;
- prefetch integer [ integer ];
+ prefetch integer [ integer ];
provide-ixfr boolean;
- query-source ( ( [ address ] ( ipv4_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
- query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
- integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
- port ( integer | * ) ) ) [ dscp integer ];
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
rate-limit {
all-per-second integer;
errors-per-second integer;
@@ -713,20 +724,26 @@ view
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 quoted_string [ log boolean ] [
- max-policy-ttl integer ] [ min-update-interval integer ] [
+ response-policy { zone quoted_string [ log boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
policy ( cname | disabled | drop | given | no-op | nodata |
- nxdomain | passthru | tcp-only quoted_string ) ] [
- recursive-only boolean ]; ... } [ break-dnssec boolean ] [
- max-policy-ttl integer ] [ min-update-interval integer ] [
- min-ns-dots integer ] [ nsip-wait-recurse boolean ] [
- qname-wait-recurse boolean ] [ recursive-only boolean ];
- root-delegation-only [ exclude { quoted_string; ... } ];
- rrset-order { [ class string ] [ type string ] [ name
- quoted_string ] string string; ... };
+ nxdomain | passthru | tcp-only quoted_string ) ] [
+ recursive-only boolean ] [ nsip-enable boolean ] [
+ nsdname-enable boolean ]; ... } [ break-dnssec boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
+ min-ns-dots integer ] [ nsip-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 { quoted_string; ... } ];
+ rrset-order { [ class string ] [ type string ] [ name
+ quoted_string ] string string; ... };
send-cookie boolean;
serial-update-method ( date | increment | unixtime );
server netprefix {
@@ -736,20 +753,20 @@ view
edns-version integer;
keys server_key;
max-udp-size integer;
- notify-source ( ipv4_address | * ) [ port ( integer | *
- ) ] [ dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer
- | * ) ] [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | *
+ ) ] [ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer
+ | * ) ] [ dscp integer ];
padding integer;
provide-ixfr boolean;
- query-source ( ( [ address ] ( ipv4_address | * ) [ port
- ( integer | * ) ] ) | ( [ [ address ] (
- ipv4_address | * ) ] port ( integer | * ) ) ) [
- dscp integer ];
- query-source-v6 ( ( [ address ] ( ipv6_address | * ) [
- port ( integer | * ) ] ) | ( [ [ address ] (
- ipv6_address | * ) ] port ( integer | * ) ) ) [
- dscp integer ];
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port
+ ( integer | * ) ] ) | ( [ [ address ] (
+ ipv4_address | * ) ] port ( integer | * ) ) ) [
+ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [
+ port ( integer | * ) ] ) | ( [ [ address ] (
+ ipv6_address | * ) ] port ( integer | * ) ) ) [
+ dscp integer ];
request-expire boolean;
request-ixfr boolean;
request-nsid boolean;
@@ -757,24 +774,26 @@ view
tcp-keepalive boolean;
tcp-only boolean;
transfer-format ( many-answers | one-answer );
- transfer-source ( ipv4_address | * ) [ port ( integer |
- * ) ] [ dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port (
- integer | * ) ] [ dscp integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port (
+ integer | * ) ] [ dscp integer ];
transfers integer;
};
servfail-ttl ttlval;
sig-signing-nodes integer;
sig-signing-signatures integer;
sig-signing-type integer;
- sig-validity-interval integer [ integer ];
+ sig-validity-interval integer [ integer ];
sortlist { address_match_element; ... };
+ stale-answer-enable boolean;
+ stale-answer-ttl ttlval;
synth-from-dnssec boolean;
transfer-format ( many-answers | one-answer );
- transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
trust-anchor-telemetry boolean; // experimental
trusted-keys { string integer
integer integer quoted_string;
@@ -785,21 +804,21 @@ view
v6-bias integer;
zero-no-soa-ttl boolean;
zero-no-soa-ttl-cache boolean;
- zone string [ class ] {
+ zone string [ class ] {
allow-notify { address_match_element; ... };
allow-query { address_match_element; ... };
allow-query-on { address_match_element; ... };
allow-transfer { address_match_element; ... };
allow-update { address_match_element; ... };
allow-update-forwarding { address_match_element; ... };
- also-notify [ port integer ] [ dscp integer ] { (
- masters | ipv4_address [ port integer ] |
- ipv6_address [ port integer ] ) [ key string ];
+ also-notify [ port integer ] [ dscp integer ] { (
+ masters | ipv4_address [ port integer ] |
+ ipv6_address [ port integer ] ) [ key string ];
... };
- alt-transfer-source ( ipv4_address | * ) [ port (
- integer | * ) ] [ dscp integer ];
- alt-transfer-source-v6 ( ipv6_address | * ) [ port (
- integer | * ) ] [ dscp integer ];
+ alt-transfer-source ( ipv4_address | * ) [ port (
+ integer | * ) ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port (
+ integer | * ) ] [ dscp integer ];
auto-dnssec ( allow | maintain | off );
check-dup-records ( fail | warn | ignore );
check-integrity boolean;
@@ -821,9 +840,9 @@ view
dnssec-update-mode ( maintain | no-resign );
file quoted_string;
forward ( first | only );
- forwarders [ port integer ] [ dscp integer ] { (
- ipv4_address | ipv6_address ) [ port integer ] [
- dscp integer ]; ... };
+ forwarders [ port integer ] [ dscp integer ] { (
+ ipv4_address | ipv6_address ) [ port integer ] [
+ dscp integer ]; ... };
in-view string;
inline-signing boolean;
ixfr-from-differences boolean;
@@ -831,11 +850,11 @@ view
key-directory quoted_string;
masterfile-format ( map | raw | text );
masterfile-style ( full | relative );
- masters [ port integer ] [ dscp integer ] { ( masters
- | ipv4_address [ port integer ] | ipv6_address [
- port integer ] ) [ key string ]; ... };
+ masters [ port integer ] [ dscp integer ] { ( masters
+ | ipv4_address [ port integer ] | ipv6_address [
+ port integer ] ) [ key string ]; ... };
max-ixfr-log-size ( default | unlimited |
- max-journal-size ( unlimited | sizeval );
+ max-journal-size ( default | unlimited | sizeval );
max-records integer;
max-refresh-time integer;
max-retry-time integer;
@@ -849,38 +868,38 @@ view
multi-master boolean;
notify ( explicit | master-only | boolean );
notify-delay integer;
- notify-source ( ipv4_address | * ) [ port ( integer | *
- ) ] [ dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer
- | * ) ] [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | *
+ ) ] [ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer
+ | * ) ] [ dscp integer ];
notify-to-soa boolean;
- nsec3-test-zone boolean; // test only
pubkey integer
integer
integer
request-expire boolean;
request-ixfr boolean;
serial-update-method ( date | increment | unixtime );
- server-addresses { ( ipv4_address | ipv6_address ) [
- port integer ]; ... };
+ server-addresses { ( ipv4_address | ipv6_address ) [
+ port integer ]; ... };
server-names { quoted_string; ... };
sig-signing-nodes integer;
sig-signing-signatures integer;
sig-signing-type integer;
- sig-validity-interval integer [ integer ];
- transfer-source ( ipv4_address | * ) [ port ( integer |
- * ) ] [ dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port (
- integer | * ) ] [ dscp integer ];
+ sig-validity-interval integer [ integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port (
+ integer | * ) ] [ dscp integer ];
try-tcp-refresh boolean;
- type ( delegation-only | forward | hint | master | redirect
- | slave | static-stub | stub );
+ type ( primary | master | secondary | slave |
+ delegation-only | forward | hint | redirect |
+ static-stub | stub );
update-check-ksk boolean;
update-policy ( local | { ( deny | grant ) string (
6to4-self | external | krb5-self | krb5-subdomain |
ms-self | ms-subdomain | name | self | selfsub |
selfwild | subdomain | tcp-self | wildcard | zonesub )
- [ string ] rrtypelist; ... };
+ [ string ] rrtypelist; ... };
use-alt-transfer-source boolean;
zero-no-soa-ttl boolean;
zone-statistics ( full | terse | none | boolean );
@@ -894,20 +913,20 @@ view
ZONE
-zone string [ class ] {
+zone string [ class ] {
allow-notify { address_match_element; ... };
allow-query { address_match_element; ... };
allow-query-on { address_match_element; ... };
allow-transfer { address_match_element; ... };
allow-update { address_match_element; ... };
allow-update-forwarding { address_match_element; ... };
- also-notify [ port integer ] [ dscp integer ] { ( masters |
- ipv4_address [ port integer ] | ipv6_address [ port
- integer ] ) [ key string ]; ... };
- alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
- alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
- * ) ] [ dscp integer ];
+ also-notify [ port integer ] [ dscp integer ] { ( masters |
+ ipv4_address [ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
auto-dnssec ( allow | maintain | off );
check-dup-records ( fail | warn | ignore );
check-integrity boolean;
@@ -928,8 +947,8 @@ zone
dnssec-update-mode ( maintain | no-resign );
file quoted_string;
forward ( first | only );
- forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
- | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
+ | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
in-view string;
inline-signing boolean;
ixfr-from-differences boolean;
@@ -937,10 +956,10 @@ zone
key-directory quoted_string;
masterfile-format ( map | raw | text );
masterfile-style ( full | relative );
- masters [ port integer ] [ dscp integer ] { ( masters |
- ipv4_address [ port integer ] | ipv6_address [ port
- integer ] ) [ key string ]; ... };
- max-journal-size ( unlimited | sizeval );
+ masters [ port integer ] [ dscp integer ] { ( masters |
+ ipv4_address [ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+ max-journal-size ( default | unlimited | sizeval );
max-records integer;
max-refresh-time integer;
max-retry-time integer;
@@ -954,35 +973,34 @@ zone
multi-master boolean;
notify ( explicit | master-only | boolean );
notify-delay integer;
- notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
- [ dscp integer ];
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
notify-to-soa boolean;
- nsec3-test-zone boolean; // test only
pubkey integer integer
request-expire boolean;
request-ixfr boolean;
serial-update-method ( date | increment | unixtime );
- server-addresses { ( ipv4_address | ipv6_address ) [ port
- integer ]; ... };
+ server-addresses { ( ipv4_address | ipv6_address ) [ port
+ integer ]; ... };
server-names { quoted_string; ... };
sig-signing-nodes integer;
sig-signing-signatures integer;
sig-signing-type integer;
- sig-validity-interval integer [ integer ];
- transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
- dscp integer ];
- transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
- ] [ dscp integer ];
+ sig-validity-interval integer [ integer ];
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
try-tcp-refresh boolean;
- type ( delegation-only | forward | hint | master | redirect | slave
- | static-stub | stub );
+ type ( primary | master | secondary | slave | delegation-only |
+ forward | hint | redirect | static-stub | stub );
update-check-ksk boolean;
update-policy ( local | { ( deny | grant ) string ( 6to4-self |
external | krb5-self | krb5-subdomain | ms-self | ms-subdomain
| name | self | selfsub | selfwild | subdomain | tcp-self |
- wildcard | zonesub ) [ string ] rrtypelist; ... };
+ wildcard | zonesub ) [ string ] rrtypelist; ... };
use-alt-transfer-source boolean;
zero-no-soa-ttl boolean;
zone-statistics ( full | terse | none | boolean );
diff --git a/doc/arm/managed-keys.grammar.xml b/doc/arm/managed-keys.grammar.xml
new file mode 100644
index 0000000000..3377a80cb4
--- /dev/null
+++ b/doc/arm/managed-keys.grammar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+managed-keys { string string integer
+ integer integer quoted_string; ... };
+
diff --git a/doc/arm/master.zoneopt.xml b/doc/arm/master.zoneopt.xml
new file mode 100644
index 0000000000..8801e33dc1
--- /dev/null
+++ b/doc/arm/master.zoneopt.xml
@@ -0,0 +1,66 @@
+
+
+
+
+zone string [ class ] {
+ type ( master | primary );
+ allow-query { address_match_element; ... };
+ allow-query-on { address_match_element; ... };
+ allow-transfer { address_match_element; ... };
+ allow-update { address_match_element; ... };
+ also-notify [ port integer ] [ dscp integer ] { ( masters | ipv4_address [ port integer ] | ipv6_address [ port integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ auto-dnssec ( allow | maintain | off );
+ 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 );
+ dlz string;
+ dnssec-dnskey-kskonly boolean;
+ dnssec-loadkeys-interval integer;
+ dnssec-secure-to-insecure boolean;
+ dnssec-update-mode ( maintain | no-resign );
+ file quoted_string;
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ inline-signing boolean;
+ ixfr-from-differences boolean;
+ journal quoted_string;
+ key-directory quoted_string;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ max-journal-size ( default | unlimited | sizeval );
+ max-records integer;
+ max-transfer-idle-out integer;
+ max-transfer-time-out integer;
+ max-zone-ttl ( unlimited | ttlval );
+ notify ( explicit | master-only | boolean );
+ notify-delay integer;
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ notify-to-soa boolean;
+ 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-subdomain | ms-self | ms-subdomain | 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/arm/masters.grammar.xml b/doc/arm/masters.grammar.xml
new file mode 100644
index 0000000000..f76d9026ac
--- /dev/null
+++ b/doc/arm/masters.grammar.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+masters string [ port integer ] [ dscp
+ integer ] { ( masters | ipv4_address [
+ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+
diff --git a/doc/arm/notes.pdf b/doc/arm/notes.pdf
index 6dc2536f1c..663abae8a0 100644
Binary files a/doc/arm/notes.pdf and b/doc/arm/notes.pdf differ
diff --git a/doc/arm/options.grammar.xml b/doc/arm/options.grammar.xml
new file mode 100644
index 0000000000..d6898e0c1c
--- /dev/null
+++ b/doc/arm/options.grammar.xml
@@ -0,0 +1,305 @@
+
+
+
+
+
+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 { address_match_element; ... };
+ allow-update { address_match_element; ... };
+ allow-update-forwarding { address_match_element; ... };
+ also-notify [ port integer ] [ dscp integer ] { ( masters |
+ ipv4_address [ port integer ] | ipv6_address [ port
+ integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer |
+ * ) ] [ dscp integer ];
+ attach-cache string;
+ auth-nxdomain boolean; // default changed
+ auto-dnssec ( allow | maintain | off );
+ automatic-interface-scan boolean;
+ avoid-v4-udp-ports { portrange; ... };
+ avoid-v6-udp-ports { portrange; ... };
+ bindkeys-file quoted_string;
+ blackhole { address_match_element; ... };
+ cache-file quoted_string;
+ catalog-zones { zone quoted_string [ default-masters [ port
+ integer ] [ dscp integer ] { ( masters | ipv4_address [
+ port integer ] | ipv6_address [ port integer ] ) [ key
+ string ]; ... } ] [ zone-directory quoted_string ] [
+ in-memory boolean ] [ min-update-interval integer ]; ... };
+ 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 );
+ check-sibling boolean;
+ check-spf ( warn | ignore );
+ check-srv-cname ( fail | warn | ignore );
+ check-wildcard boolean;
+ cleaning-interval integer;
+ clients-per-query integer;
+ cookie-algorithm ( aes | sha1 | sha256 );
+ cookie-secret string;
+ coresize ( default | unlimited | sizeval );
+ datasize ( default | unlimited | sizeval );
+ deny-answer-addresses { address_match_element; ... } [
+ except-from { quoted_string; ... } ];
+ deny-answer-aliases { quoted_string; ... } [ except-from {
+ quoted_string; ... } ];
+ dialup ( notify | notify-passive | passive | refresh | boolean );
+ directory quoted_string;
+ disable-algorithms string { string;
+ ... };
+ disable-ds-digests string { string;
+ ... };
+ disable-empty-zone string;
+ dns64 netprefix {
+ break-dnssec boolean;
+ clients { address_match_element; ... };
+ exclude { address_match_element; ... };
+ mapped { address_match_element; ... };
+ recursive-only boolean;
+ suffix ipv6_address;
+ };
+ dns64-contact string;
+ dns64-server string;
+ dnsrps-enable boolean;
+ dnsrps-options { unspecified-text };
+ dnssec-accept-expired boolean;
+ dnssec-dnskey-kskonly boolean;
+ dnssec-enable boolean;
+ dnssec-loadkeys-interval integer;
+ dnssec-lookaside ( string trust-anchor
+ string | auto | no );
+ dnssec-must-be-secure string boolean;
+ dnssec-secure-to-insecure boolean;
+ dnssec-update-mode ( maintain | no-resign );
+ dnssec-validation ( yes | no | auto );
+ dnstap { ( all | auth | client | forwarder |
+ resolver ) [ ( query | response ) ]; ... };
+ dnstap-identity ( quoted_string | none |
+ hostname );
+ dnstap-output ( file | unix ) quoted_string [
+ size ( unlimited | size ) ] [ versions (
+ unlimited | integer ) ] [ suffix ( increment
+ | timestamp ) ];
+ dnstap-version ( quoted_string | none );
+ dscp integer;
+ dual-stack-servers [ port integer ] { ( quoted_string [ port
+ integer ] [ dscp integer ] | ipv4_address [ port
+ integer ] [ dscp integer ] | ipv6_address [ port
+ integer ] [ dscp 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 );
+ filter-aaaa { address_match_element; ... };
+ filter-aaaa-on-v4 ( break-dnssec | boolean );
+ filter-aaaa-on-v6 ( break-dnssec | boolean );
+ flush-zones-on-shutdown boolean;
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address
+ | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ fstrm-set-buffer-hint integer;
+ fstrm-set-flush-timeout integer;
+ fstrm-set-input-queue-size integer;
+ fstrm-set-output-notify-threshold integer;
+ fstrm-set-output-queue-model ( mpsc | spsc );
+ fstrm-set-output-queue-size integer;
+ fstrm-set-reopen-interval integer;
+ geoip-directory ( quoted_string | none );
+ geoip-use-ecs boolean;
+ glue-cache boolean;
+ heartbeat-interval integer;
+ hostname ( quoted_string | none );
+ inline-signing boolean;
+ interface-interval integer;
+ ixfr-from-differences ( primary | master | secondary | slave |
+ boolean );
+ keep-response-order { address_match_element; ... };
+ key-directory quoted_string;
+ lame-ttl ttlval;
+ listen-on [ port integer ] [ dscp
+ integer ] {
+ address_match_element; ... };
+ listen-on-v6 [ port integer ] [ dscp
+ integer ] {
+ address_match_element; ... };
+ lmdb-mapsize sizeval;
+ lock-file ( quoted_string | none );
+ managed-keys-directory quoted_string;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ match-mapped-addresses boolean;
+ max-cache-size ( default | unlimited | sizeval | percentage );
+ max-cache-ttl integer;
+ max-clients-per-query integer;
+ max-journal-size ( default | unlimited | sizeval );
+ max-ncache-ttl integer;
+ 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 ttlval;
+ 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 | ttlval );
+ memstatistics boolean;
+ memstatistics-file quoted_string;
+ message-compression boolean;
+ 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 | boolean );
+ notify-delay integer;
+ notify-rate integer;
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
+ notify-to-soa boolean;
+ nta-lifetime ttlval;
+ nta-recheck ttlval;
+ nxdomain-redirect string;
+ pid-file ( quoted_string | none );
+ port integer;
+ preferred-glue string;
+ prefetch integer [ integer ];
+ provide-ixfr boolean;
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ querylog boolean;
+ random-device ( quoted_string | none );
+ 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;
+ resolver-nonbackoff-tries integer;
+ resolver-query-timeout integer;
+ resolver-retry-interval integer;
+ response-padding { address_match_element; ... } block-size
+ integer;
+ response-policy { zone quoted_string [ log boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
+ policy ( cname | disabled | drop | given | no-op | nodata |
+ nxdomain | passthru | tcp-only quoted_string ) ] [
+ recursive-only boolean ] [ nsip-enable boolean ] [
+ nsdname-enable boolean ]; ... } [ break-dnssec boolean ] [
+ max-policy-ttl integer ] [ min-update-interval integer ] [
+ min-ns-dots integer ] [ nsip-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 { quoted_string; ... } ];
+ 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 ttlval;
+ 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 );
+ stale-answer-enable boolean;
+ stale-answer-ttl ttlval;
+ startup-notify-rate integer;
+ statistics-file quoted_string;
+ 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;
+ tkey-dhkey quoted_string integer;
+ tkey-domain quoted_string;
+ tkey-gssapi-credential quoted_string;
+ tkey-gssapi-keytab quoted_string;
+ transfer-format ( many-answers | one-answer );
+ transfer-message-size integer;
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ transfers-in integer;
+ transfers-out integer;
+ transfers-per-ns integer;
+ trust-anchor-telemetry boolean; // experimental
+ try-tcp-refresh boolean;
+ update-check-ksk boolean;
+ use-alt-transfer-source boolean;
+ use-v4-udp-ports { portrange; ... };
+ use-v6-udp-ports { portrange; ... };
+ v6-bias integer;
+ version ( quoted_string | none );
+ zero-no-soa-ttl boolean;
+ zero-no-soa-ttl-cache boolean;
+ zone-statistics ( full | terse | none | boolean );
+};
+
diff --git a/doc/arm/redirect.zoneopt.xml b/doc/arm/redirect.zoneopt.xml
new file mode 100644
index 0000000000..c176558126
--- /dev/null
+++ b/doc/arm/redirect.zoneopt.xml
@@ -0,0 +1,24 @@
+
+
+
+
+zone string [ class ] {
+ type redirect;
+ allow-query { address_match_element; ... };
+ allow-query-on { address_match_element; ... };
+ dlz string;
+ file quoted_string;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port integer ] [ dscp integer ] { ( masters | ipv4_address [ port integer ] | ipv6_address [ port integer ] ) [ key string ]; ... };
+ max-records integer;
+ max-zone-ttl ( unlimited | ttlval );
+ zone-statistics ( full | terse | none | boolean );
+};
+
diff --git a/doc/arm/server.grammar.xml b/doc/arm/server.grammar.xml
new file mode 100644
index 0000000000..b78be9e9fa
--- /dev/null
+++ b/doc/arm/server.grammar.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+server netprefix {
+ bogus boolean;
+ edns boolean;
+ edns-udp-size integer;
+ edns-version integer;
+ keys server_key;
+ max-udp-size integer;
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ]
+ [ dscp integer ];
+ padding integer;
+ provide-ixfr boolean;
+ query-source ( ( [ address ] ( ipv4_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv4_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ query-source-v6 ( ( [ address ] ( ipv6_address | * ) [ port (
+ integer | * ) ] ) | ( [ [ address ] ( ipv6_address | * ) ]
+ port ( integer | * ) ) ) [ dscp integer ];
+ 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 | * ) [ port ( integer | * ) ] [
+ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * )
+ ] [ dscp integer ];
+ transfers integer;
+};
+
diff --git a/doc/arm/slave.zoneopt.xml b/doc/arm/slave.zoneopt.xml
new file mode 100644
index 0000000000..b305787931
--- /dev/null
+++ b/doc/arm/slave.zoneopt.xml
@@ -0,0 +1,69 @@
+
+
+
+
+zone string [ class ] {
+ type ( slave | secondary );
+ allow-notify { address_match_element; ... };
+ allow-query { address_match_element; ... };
+ allow-query-on { address_match_element; ... };
+ allow-transfer { address_match_element; ... };
+ allow-update-forwarding { address_match_element; ... };
+ also-notify [ port integer ] [ dscp integer ] { ( masters | ipv4_address [ port integer ] | ipv6_address [ port integer ] ) [ key string ]; ... };
+ alt-transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ alt-transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ auto-dnssec ( allow | maintain | off );
+ check-names ( fail | warn | ignore );
+ database string;
+ dialup ( notify | notify-passive | passive | refresh | boolean );
+ dlz string;
+ dnssec-dnskey-kskonly boolean;
+ dnssec-loadkeys-interval integer;
+ dnssec-update-mode ( maintain | no-resign );
+ file quoted_string;
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ inline-signing boolean;
+ ixfr-from-differences boolean;
+ journal quoted_string;
+ key-directory quoted_string;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port integer ] [ dscp integer ] { ( masters | ipv4_address [ port integer ] | ipv6_address [ port integer ] ) [ key string ]; ... };
+ 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 | boolean );
+ notify-delay integer;
+ notify-source ( ipv4_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ notify-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ notify-to-soa boolean;
+ 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 | * ) [ port ( integer | * ) ] [ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ try-tcp-refresh boolean;
+ update-check-ksk boolean;
+ use-alt-transfer-source boolean;
+ zero-no-soa-ttl boolean;
+ zone-statistics ( full | terse | none | boolean );
+};
+
diff --git a/doc/arm/static-stub.zoneopt.xml b/doc/arm/static-stub.zoneopt.xml
new file mode 100644
index 0000000000..6571a8075f
--- /dev/null
+++ b/doc/arm/static-stub.zoneopt.xml
@@ -0,0 +1,22 @@
+
+
+
+
+zone string [ class ] {
+ type static-stub;
+ allow-query { address_match_element; ... };
+ allow-query-on { address_match_element; ... };
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ max-records integer;
+ server-addresses { ( ipv4_address | ipv6_address ) [ port integer ]; ... };
+ server-names { quoted_string; ... };
+ zone-statistics ( full | terse | none | boolean );
+};
+
diff --git a/doc/arm/statistics-channels.grammar.xml b/doc/arm/statistics-channels.grammar.xml
new file mode 100644
index 0000000000..a50f32152c
--- /dev/null
+++ b/doc/arm/statistics-channels.grammar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+statistics-channels {
+ inet ( ipv4_address | ipv6_address |
+ * ) [ port ( integer | * ) ] [
+ allow { address_match_element; ...
+ } ];
+};
+
diff --git a/doc/arm/stub.zoneopt.xml b/doc/arm/stub.zoneopt.xml
new file mode 100644
index 0000000000..ccd038ffdb
--- /dev/null
+++ b/doc/arm/stub.zoneopt.xml
@@ -0,0 +1,38 @@
+
+
+
+
+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;
+ dialup ( notify | notify-passive | passive | refresh | boolean );
+ file quoted_string;
+ forward ( first | only );
+ forwarders [ port integer ] [ dscp integer ] { ( ipv4_address | ipv6_address ) [ port integer ] [ dscp integer ]; ... };
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port integer ] [ dscp integer ] { ( masters | ipv4_address [ port integer ] | ipv6_address [ port integer ] ) [ key string ]; ... };
+ 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;
+ transfer-source ( ipv4_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ transfer-source-v6 ( ipv6_address | * ) [ port ( integer | * ) ] [ dscp integer ];
+ use-alt-transfer-source boolean;
+ zone-statistics ( full | terse | none | boolean );
+};
+
diff --git a/doc/arm/trusted-keys.grammar.xml b/doc/arm/trusted-keys.grammar.xml
new file mode 100644
index 0000000000..2e7da28a7b
--- /dev/null
+++ b/doc/arm/trusted-keys.grammar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+trusted-keys { string integer integer
+ integer quoted_string; ... };
+
diff --git a/doc/misc/Makefile.in b/doc/misc/Makefile.in
index b3a1f68d3b..5ee27a7e31 100644
--- a/doc/misc/Makefile.in
+++ b/doc/misc/Makefile.in
@@ -30,6 +30,15 @@ options: FORCE
if test -x ${CFG_TEST} ; \
then \
${CFG_TEST} --named --grammar > $@.raw ; \
+ ${CFG_TEST} --zonegrammar master > master.zoneopt ; \
+ ${CFG_TEST} --zonegrammar slave > slave.zoneopt ; \
+ ${CFG_TEST} --zonegrammar forward > forward.zoneopt ; \
+ ${CFG_TEST} --zonegrammar hint > hint.zoneopt ; \
+ ${CFG_TEST} --zonegrammar stub > stub.zoneopt ; \
+ ${CFG_TEST} --zonegrammar static-stub > static-stub.zoneopt ; \
+ ${CFG_TEST} --zonegrammar redirect > redirect.zoneopt ; \
+ ${CFG_TEST} --zonegrammar delegation-only > delegation-only.zoneopt ; \
+ ${CFG_TEST} --zonegrammar in-view > in-view.zoneopt ; \
${PERL} ${srcdir}/sort-options.pl < $@.raw > $@.sorted ; \
${PERL} ${srcdir}/format-options.pl < $@.sorted > $@.new ; \
mv -f $@.new $@ ; \
@@ -40,3 +49,22 @@ options: FORCE
docbook: options
${PERL} docbook-options.pl options > ${top_srcdir}/bin/named/named.conf.docbook
+ ${PERL} docbook-zoneopt.pl master.zoneopt > ${top_srcdir}/doc/arm/master.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl slave.zoneopt > ${top_srcdir}/doc/arm/slave.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl forward.zoneopt > ${top_srcdir}/doc/arm/forward.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl hint.zoneopt > ${top_srcdir}/doc/arm/hint.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl stub.zoneopt > ${top_srcdir}/doc/arm/stub.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl static-stub.zoneopt > ${top_srcdir}/doc/arm/static-stub.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl redirect.zoneopt > ${top_srcdir}/doc/arm/redirect.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl delegation-only.zoneopt > ${top_srcdir}/doc/arm/delegation-only.zoneopt.xml
+ ${PERL} docbook-zoneopt.pl in-view.zoneopt > ${top_srcdir}/doc/arm/in-view.zoneopt.xml
+ ${PERL} docbook-grammars.pl options acl > ${top_srcdir}/doc/arm/acl.grammar.xml
+ ${PERL} docbook-grammars.pl options controls > ${top_srcdir}/doc/arm/controls.grammar.xml
+ ${PERL} docbook-grammars.pl options key > ${top_srcdir}/doc/arm/key.grammar.xml
+ ${PERL} docbook-grammars.pl options logging > ${top_srcdir}/doc/arm/logging.grammar.xml
+ ${PERL} docbook-grammars.pl options masters > ${top_srcdir}/doc/arm/masters.grammar.xml
+ ${PERL} docbook-grammars.pl options options > ${top_srcdir}/doc/arm/options.grammar.xml
+ ${PERL} docbook-grammars.pl options server > ${top_srcdir}/doc/arm/server.grammar.xml
+ ${PERL} docbook-grammars.pl options statistics-channels > ${top_srcdir}/doc/arm/statistics-channels.grammar.xml
+ ${PERL} docbook-grammars.pl options trusted-keys > ${top_srcdir}/doc/arm/trusted-keys.grammar.xml
+ ${PERL} docbook-grammars.pl options managed-keys > ${top_srcdir}/doc/arm/managed-keys.grammar.xml
diff --git a/doc/misc/delegation-only.zoneopt b/doc/misc/delegation-only.zoneopt
new file mode 100644
index 0000000000..ab86327cbd
--- /dev/null
+++ b/doc/misc/delegation-only.zoneopt
@@ -0,0 +1,3 @@
+zone [ ] {
+ type delegation-only;
+};
diff --git a/doc/misc/docbook-grammars.pl b/doc/misc/docbook-grammars.pl
new file mode 100644
index 0000000000..95620b2eff
--- /dev/null
+++ b/doc/misc/docbook-grammars.pl
@@ -0,0 +1,82 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2017 Internet Systems Consortium, Inc. ("ISC")
+#
+# 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 http://mozilla.org/MPL/2.0/.
+
+use warnings;
+use strict;
+use Time::Piece;
+
+if (@ARGV < 2) {
+ print STDERR <<'END';
+usage:
+ perl docbook-options.pl options_file section > section.grammar.xml
+END
+ exit 1;
+}
+
+my $FILE = shift;
+my $SECTION = shift;
+
+open (FH, "<", $FILE) or die "Can't open $FILE";
+
+my $t = Time::Piece->new();
+my $year = $t->year;
+
+print <
+
+
+
+
+END
+
+# skip preamble
+my $preamble = 0;
+while () {
+ if (m{^\s*$}) {
+ last if $preamble > 0;
+ } else {
+ $preamble++;
+ }
+}
+
+my $display = 0;
+while () {
+ if (m{^$SECTION\b}) {
+ $display = 1
+ }
+
+ if (m{// not.*implemented} || m{// obsolete} || m{// test.*only}) {
+ next;
+ }
+
+ s{ // not configured}{};
+ s{ // non-operational}{};
+ s{ // may occur multiple times}{};
+ s{<([a-z0-9_-]+)>}{$1}g;
+ s{^(\s*)([a-z0-9_-]+)\b}{$1$2};
+ s{[[]}{[}g;
+ s{[]]}{]}g;
+ s{ }{\t}g;
+
+ if (m{^\s*$} && $display) {
+ last;
+ }
+ if ($display) {
+ print;
+ }
+}
+
+print <
+END
diff --git a/doc/misc/docbook-options.pl b/doc/misc/docbook-options.pl
index 9b78fd5ea4..75b775f78b 100644
--- a/doc/misc/docbook-options.pl
+++ b/doc/misc/docbook-options.pl
@@ -122,6 +122,7 @@ while () {
}
s{ // not configured}{};
+ s{ // non-operational}{};
s{ // may occur multiple times}{};
s{<([a-z0-9_-]+)>}{$1}g;
s{[[]}{[}g;
diff --git a/doc/misc/docbook-zoneopt.pl b/doc/misc/docbook-zoneopt.pl
new file mode 100644
index 0000000000..900dddf53f
--- /dev/null
+++ b/doc/misc/docbook-zoneopt.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2017 Internet Systems Consortium, Inc. ("ISC")
+#
+# 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 http://mozilla.org/MPL/2.0/.
+
+use warnings;
+use strict;
+use Time::Piece;
+
+if (@ARGV < 1) {
+ print STDERR <<'END';
+usage:
+ perl docbook-zoneopt.pl zoneopt_file [YYYY]
+END
+ exit 1;
+}
+
+my $FILE = shift;
+
+my $t = Time::Piece->new();
+my $year;
+$year = `git log --max-count=1 --date=format:%Y --format='%cd' -- $FILE` or $year = $t->year;
+chomp $year;
+
+open (FH, "<", $FILE) or die "Can't open $FILE";
+
+print <
+
+
+
+END
+
+while () {
+ if (m{// not.*implemented} || m{// obsolete} || m{// test.*only}) {
+ next;
+ }
+
+ s{ // not configured}{};
+ s{ // may occur multiple times}{};
+ s{<([a-z0-9_-]+)>}{$1}g;
+ s{^(\s*)([a-z0-9_-]+)\b}{$1$2};
+ s{[[]}{[}g;
+ s{[]]}{]}g;
+ s{ }{\t}g;
+
+ print;
+}
+
+print <
+END
diff --git a/doc/misc/forward.zoneopt b/doc/misc/forward.zoneopt
new file mode 100644
index 0000000000..e694813a86
--- /dev/null
+++ b/doc/misc/forward.zoneopt
@@ -0,0 +1,6 @@
+zone [ ] {
+ type forward;
+ delegation-only ;
+ forward ( first | only );
+ forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... };
+};
diff --git a/doc/misc/hint.zoneopt b/doc/misc/hint.zoneopt
new file mode 100644
index 0000000000..d7ec16c739
--- /dev/null
+++ b/doc/misc/hint.zoneopt
@@ -0,0 +1,6 @@
+zone [ ] {
+ type hint;
+ check-names ( fail | warn | ignore );
+ delegation-only ;
+ file ;
+};
diff --git a/doc/misc/in-view.zoneopt b/doc/misc/in-view.zoneopt
new file mode 100644
index 0000000000..c63c4273e5
--- /dev/null
+++ b/doc/misc/in-view.zoneopt
@@ -0,0 +1,3 @@
+zone [ ] {
+ in-view ;
+};
diff --git a/doc/misc/master.zoneopt b/doc/misc/master.zoneopt
new file mode 100644
index 0000000000..7bec788bb6
--- /dev/null
+++ b/doc/misc/master.zoneopt
@@ -0,0 +1,56 @@
+zone [ ] {
+ type ( master | primary );
+ allow-query { ; ... };
+ allow-query-on { ; ... };
+ allow-transfer { ; ... };
+ allow-update { ; ... };
+ also-notify [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... };
+ alt-transfer-source ( | * ) [ port ( | * ) ] [ dscp ];
+ alt-transfer-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ auto-dnssec ( allow | maintain | off );
+ check-dup-records ( fail | warn | ignore );
+ check-integrity ;
+ check-mx ( fail | warn | ignore );
+ check-mx-cname ( fail | warn | ignore );
+ check-names ( fail | warn | ignore );
+ check-sibling ;
+ check-spf ( warn | ignore );
+ check-srv-cname ( fail | warn | ignore );
+ check-wildcard ;
+ database ;
+ dialup ( notify | notify-passive | passive | refresh | );
+ dlz ;
+ dnssec-dnskey-kskonly ;
+ dnssec-loadkeys-interval ;
+ dnssec-secure-to-insecure ;
+ dnssec-update-mode ( maintain | no-resign );
+ file ;
+ forward ( first | only );
+ forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... };
+ inline-signing ;
+ ixfr-from-differences ;
+ journal ;
+ key-directory ;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ max-journal-size ( default | unlimited | );
+ max-records ;
+ max-transfer-idle-out ;
+ max-transfer-time-out ;
+ max-zone-ttl ( unlimited | );
+ notify ( explicit | master-only | );
+ notify-delay ;
+ notify-source ( | * ) [ port ( | * ) ] [ dscp ];
+ notify-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ notify-to-soa ;
+ nsec3-test-zone ; // test only
+ serial-update-method ( date | increment | unixtime );
+ sig-signing-nodes ;
+ sig-signing-signatures ;
+ sig-signing-type ;
+ sig-validity-interval [ ];
+ update-check-ksk ;
+ update-policy ( local | { ( deny | grant ) ( 6to4-self | external | krb5-self | krb5-subdomain | ms-self | ms-subdomain | name | self | selfsub | selfwild | subdomain | tcp-self | wildcard | zonesub ) [ ] ; ... };
+ zero-no-soa-ttl ;
+ zone-statistics ( full | terse | none | );
+};
diff --git a/doc/misc/redirect.zoneopt b/doc/misc/redirect.zoneopt
new file mode 100644
index 0000000000..a127de9bbf
--- /dev/null
+++ b/doc/misc/redirect.zoneopt
@@ -0,0 +1,13 @@
+zone [ ] {
+ type redirect;
+ allow-query { ; ... };
+ allow-query-on { ; ... };
+ dlz ;
+ file ;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... };
+ max-records ;
+ max-zone-ttl ( unlimited | );
+ zone-statistics ( full | terse | none | );
+};
diff --git a/doc/misc/slave.zoneopt b/doc/misc/slave.zoneopt
new file mode 100644
index 0000000000..a9e62a4503
--- /dev/null
+++ b/doc/misc/slave.zoneopt
@@ -0,0 +1,59 @@
+zone [ ] {
+ type ( slave | secondary );
+ allow-notify { ; ... };
+ allow-query { ; ... };
+ allow-query-on { ; ... };
+ allow-transfer { ; ... };
+ allow-update-forwarding { ; ... };
+ also-notify [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... };
+ alt-transfer-source ( | * ) [ port ( | * ) ] [ dscp ];
+ alt-transfer-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ auto-dnssec ( allow | maintain | off );
+ check-names ( fail | warn | ignore );
+ database ;
+ dialup ( notify | notify-passive | passive | refresh | );
+ dlz ;
+ dnssec-dnskey-kskonly ;
+ dnssec-loadkeys-interval ;
+ dnssec-update-mode ( maintain | no-resign );
+ file ;
+ forward ( first | only );
+ forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... };
+ inline-signing ;
+ ixfr-from-differences ;
+ journal ;
+ key-directory ;
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... };
+ max-journal-size ( default | unlimited | );
+ max-records ;
+ max-refresh-time ;
+ max-retry-time ;
+ max-transfer-idle-in ;
+ max-transfer-idle-out ;
+ max-transfer-time-in ;
+ max-transfer-time-out ;
+ min-refresh-time ;
+ min-retry-time ;
+ multi-master ;
+ notify ( explicit | master-only | );
+ notify-delay ;
+ notify-source ( | * ) [ port ( | * ) ] [ dscp ];
+ notify-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ notify-to-soa ;
+ nsec3-test-zone ; // test only
+ request-expire ;
+ request-ixfr ;
+ sig-signing-nodes ;
+ sig-signing-signatures ;
+ sig-signing-type ;
+ sig-validity-interval [ ];
+ transfer-source ( | * ) [ port ( | * ) ] [ dscp ];
+ transfer-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ try-tcp-refresh ;
+ update-check-ksk ;
+ use-alt-transfer-source ;
+ zero-no-soa-ttl ;
+ zone-statistics ( full | terse | none | );
+};
diff --git a/doc/misc/static-stub.zoneopt b/doc/misc/static-stub.zoneopt
new file mode 100644
index 0000000000..74abe0b137
--- /dev/null
+++ b/doc/misc/static-stub.zoneopt
@@ -0,0 +1,11 @@
+zone [ ] {
+ type static-stub;
+ allow-query { ; ... };
+ allow-query-on { ; ... };
+ forward ( first | only );
+ forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... };
+ max-records ;
+ server-addresses { ( | ) [ port ]; ... };
+ server-names { ; ... };
+ zone-statistics ( full | terse | none | );
+};
diff --git a/doc/misc/stub.zoneopt b/doc/misc/stub.zoneopt
new file mode 100644
index 0000000000..b18b102912
--- /dev/null
+++ b/doc/misc/stub.zoneopt
@@ -0,0 +1,27 @@
+zone [ ] {
+ type stub;
+ allow-query { ; ... };
+ allow-query-on { ; ... };
+ check-names ( fail | warn | ignore );
+ database ;
+ delegation-only ;
+ dialup ( notify | notify-passive | passive | refresh | );
+ file ;
+ forward ( first | only );
+ forwarders [ port ] [ dscp ] { ( | ) [ port ] [ dscp ]; ... };
+ masterfile-format ( map | raw | text );
+ masterfile-style ( full | relative );
+ masters [ port ] [ dscp ] { ( | [ port ] | [ port ] ) [ key ]; ... };
+ max-records ;
+ max-refresh-time ;
+ max-retry-time ;
+ max-transfer-idle-in ;
+ max-transfer-time-in ;
+ min-refresh-time ;
+ min-retry-time ;
+ multi-master ;
+ transfer-source ( | * ) [ port ( | * ) ] [ dscp ];
+ transfer-source-v6 ( | * ) [ port ( | * ) ] [ dscp ];
+ use-alt-transfer-source ;
+ zone-statistics ( full | terse | none | );
+};
diff --git a/lib/bind9/check.c b/lib/bind9/check.c
index 0645cc44cc..b11de10edc 100644
--- a/lib/bind9/check.c
+++ b/lib/bind9/check.c
@@ -46,6 +46,8 @@
#include
#include