diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c6a784..6a823a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,10 +14,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Grammar fetcher for upstream BIND9 sources (`scripts/fetch_bind_grammar.py`) - Automated version difference tracking - Operating system support matrix +- BIND9 Version Differences documentation (`docs/BIND_VERSION_DIFFERENCES.md`) covering: + - 44 breaking changes between BIND9 9.18.44 and 9.20.18 + - 35 new options in BIND9 9.20 + - 22 modified options requiring configuration updates + - 3 newly deprecated options ### Changed - Established formal release management process - Defined backporting policy for security, bugs, and features +- Clarified version compatibility in CONFIGURATION_GRAMMAR.md ### Planned - BIND9 9.20+ support in separate `9.20` branch diff --git a/CONFIGURATION_GRAMMAR.md b/CONFIGURATION_GRAMMAR.md index 211a80f..4ea40b5 100644 --- a/CONFIGURATION_GRAMMAR.md +++ b/CONFIGURATION_GRAMMAR.md @@ -39,6 +39,17 @@ The BIND9 role uses YAML to replicate the official ISC BIND9 configuration forma - `max-cache-ttl` → `max_cache_ttl` - `dnssec-policy` → `dnssec_policy` +### Version Compatibility + +This role and its configuration grammar are based on **BIND9 9.18.x (LTS)**. + +For information about upgrading to BIND9 9.20 or later, see [BIND9 Version Differences](docs/BIND_VERSION_DIFFERENCES.md) which documents: +- **Breaking changes** between versions +- **New features** available in newer versions +- **Migration guidance** for configuration updates + +⚠️ **Important:** BIND9 9.20 introduces significant breaking changes. Please review the version differences document before upgrading configurations. + ## Configuration Structure All configuration is defined through four precedence-based variables that are merged: diff --git a/docs/BIND_VERSION_DIFFERENCES.md b/docs/BIND_VERSION_DIFFERENCES.md new file mode 100644 index 0000000..3076c2f --- /dev/null +++ b/docs/BIND_VERSION_DIFFERENCES.md @@ -0,0 +1,552 @@ +# BIND9 Version Differences: v9.18.44 vs v9.20.18 + +This document compares BIND9 configuration grammar between v9.18.44 and v9.20.18. + +Generated automatically by `scripts/compare_bind_versions.py`. + +## Summary + +- **New Options**: 35 +- **Removed Options**: 44 ⚠️ +- **Modified Options**: 22 +- **Newly Deprecated**: 3 + +## ⚠️ Breaking Changes + +The following options were removed in v9.20.18 and will cause configuration errors: + +### options + +- `alt-transfer-source` +- `alt-transfer-source-v6` +- `auto-dnssec` +- `coresize` +- `datasize` +- `dscp` +- `files` +- `glue-cache` +- `heartbeat-interval` +- `keep-response-order` +- `lock-file` +- `maxz-zone-ttl` +- `parent-registration-delay` +- `parental-agents` +- `primaries` +- `random-device` +- `recurse-ing-file` +- `reserved-sockets` +- `resolver-nonbackoff-tries` +- `resolver-retry-interval` +- `reuse` +- `root-delegation-only` +- `stacksize` +- `suppress-initial-notify` +- `tkey-dhkey` +- `tkey-gssapi-credential` +- `use-alt-transfer-source` + +### forward.zoneopt + +- `delegation-only` + +### hint.zoneopt + +- `delegation-only` + +### mirror.zoneopt + +- `alt-transfer-source` +- `alt-transfer-source-v6` +- `use-alt-transfer-source` + +### primary.zoneopt + +- `alt-transfer-source` +- `alt-transfer-source-v6` +- `auto-dnssec` +- `update-check-ksk` + +### secondary.zoneopt + +- `alt-transfer-source` +- `alt-transfer-source-v6` +- `auto-dnssec` +- `use-alt-transfer-source` + +### stub.zoneopt + +- `delegation-only` +- `use-alt-transfer-source` + +### delegation-only.zoneopt + +- `type` +- `zone` + +## ✨ New Features + +The following options were added in v9.20.18: + +### options + +- `allow-proxy` +- `allow-proxy-on` +- `cdnskey` +- `cds-digest-types` +- `check-svcb` +- `cipher-suites` +- `dnsrps-library` +- `inline-signing` +- `key-store` +- `manual-mode` +- `max-validation-failures-per-fetch` +- `max-validations-per-fetch` +- `min-transfer-rate-in` +- `notify-defer` +- `offline-ksk` +- `pkcs11-uri` +- `recursing-file` +- `remote-servers` +- `require-cookie` +- `resolver-use-dns64` +- `responselog` +- `reuseport` +- `sig0-checks-quota` +- `sig0-checks-quota-exempt` +- `sig0-key-checks-limit` +- `sig0-message-checks-limit` + +### mirror.zoneopt + +- `min-transfer-rate-in` +- `notify-defer` + +### primary.zoneopt + +- `check-svcb` +- `checkds` +- `notify-defer` + +### secondary.zoneopt + +- `checkds` +- `min-transfer-rate-in` +- `notify-defer` + +### stub.zoneopt + +- `min-transfer-rate-in` + +## 🔧 Modified Options + +The following options have syntax changes in v9.20.18: + +### options + +#### `listen-on` + +**v9.18.44**: +``` +[ port ] [ tls ] [ http ] { +``` + +**v9.20.18**: +``` +[ port ] [ proxy ] [ tls ] [ http ] { +``` + +#### `response-policy` + +**v9.18.44**: +``` +{ zone [ add-soa ] [ log ] [ max-policy-ttl ] [ min-update-interval ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only ) ] [ recursive-only ] [ nsip-enable ] [ nsdname-enable ] +``` + +**v9.20.18**: +``` +{ zone [ add-soa ] [ log ] [ max-policy-ttl ] [ min-update-interval ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only ) ] [ recursive-only ] [ nsip-enable ] [ nsdname-enable ] [ ede ] +``` + +#### `cookie-algorithm` + +**v9.18.44**: +``` +( aes | siphash24 ) +``` + +**v9.20.18**: +``` +( siphash24 ) +``` + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +#### `listen-on-v6` + +**v9.18.44**: +``` +[ port ] [ tls ] [ http ] { +``` + +**v9.20.18**: +``` +[ port ] [ proxy ] [ tls ] [ http ] { +``` + +#### `also-notify` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `catalog-zones` + +**v9.18.44**: +``` +{ zone [ default-primaries [ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +{ zone [ default-primaries [ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +### forward.zoneopt + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +### mirror.zoneopt + +#### `also-notify` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `primaries` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +### primary.zoneopt + +#### `update-policy` + +**v9.18.44**: +``` +( local | { ( deny | grant ) ( 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 | zonesubject ) [ ] +``` + +**v9.20.18**: +``` +( local | { ( deny | grant ) ( 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 ) [ ] +``` + +#### `also-notify` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `parental-agents` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +### redirect.zoneopt + +#### `primaries` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +### secondary.zoneopt + +#### `also-notify` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `parental-agents` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +#### `primaries` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +### static-stub.zoneopt + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +### stub.zoneopt + +#### `forwarders` + +**v9.18.44**: +``` +[ port ] { ( | ) [ port ] +``` + +**v9.20.18**: +``` +[ port ] [ tls ] { ( | ) [ port ] [ tls ] +``` + +#### `primaries` + +**v9.18.44**: +``` +[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +**v9.20.18**: +``` +[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ] +``` + +## 📋 Newly Deprecated Options + +The following options were marked as deprecated in v9.20.18: + +### options + +- `sortlist` + +### primary.zoneopt + +- `max-zone-ttl` + +### redirect.zoneopt + +- `max-zone-ttl` + +## Detailed File-by-File Comparison + +### options + +- v9.18.44: 334 options +- v9.20.18: 333 options +- Added: 26 +- Removed: 27 +- Modified: 7 + +### forward.zoneopt + +- v9.18.44: 5 options +- v9.20.18: 4 options +- Added: 0 +- Removed: 1 +- Modified: 1 + +### hint.zoneopt + +- v9.18.44: 5 options +- v9.20.18: 4 options +- Added: 0 +- Removed: 1 +- Modified: 0 + +### in-view.zoneopt + +- v9.18.44: 2 options +- v9.20.18: 2 options +- Added: 0 +- Removed: 0 +- Modified: 0 + +### mirror.zoneopt + +- v9.18.44: 44 options +- v9.20.18: 43 options +- Added: 2 +- Removed: 3 +- Modified: 2 + +### primary.zoneopt + +- v9.18.44: 63 options +- v9.20.18: 62 options +- Added: 3 +- Removed: 4 +- Modified: 4 + +### redirect.zoneopt + +- v9.18.44: 14 options +- v9.20.18: 14 options +- Added: 0 +- Removed: 0 +- Modified: 1 + +### secondary.zoneopt + +- v9.18.44: 66 options +- v9.20.18: 65 options +- Added: 3 +- Removed: 4 +- Modified: 4 + +### static-stub.zoneopt + +- v9.18.44: 12 options +- v9.20.18: 12 options +- Added: 0 +- Removed: 0 +- Modified: 1 + +### stub.zoneopt + +- v9.18.44: 28 options +- v9.20.18: 27 options +- Added: 1 +- Removed: 2 +- Modified: 2 + +### delegation-only.zoneopt + +- v9.18.44: 2 options +- v9.20.18: 0 options +- Added: 0 +- Removed: 2 +- Modified: 0 + +### rndc.grammar + +- v9.18.44: 14 options +- v9.20.18: 14 options +- Added: 0 +- Removed: 0 +- Modified: 0 + +## Migration Guide + +### Migrating from v9.18.44 to v9.20.18 + +1. **Remove unsupported options** from your configuration + - Review the Breaking Changes section above + - Check if there are replacement options + +2. **Plan for deprecated options** + - These options still work but may be removed in future versions + - Start planning migration to recommended alternatives + +3. **Test your configuration** + - Use `named-checkconf` to validate syntax + - Test in a development environment before production diff --git a/docs/bind_version_comparison.json b/docs/bind_version_comparison.json new file mode 100644 index 0000000..06a783f --- /dev/null +++ b/docs/bind_version_comparison.json @@ -0,0 +1,326 @@ +{ + "options": { + "file": "options", + "added": [ + "allow-proxy", + "allow-proxy-on", + "cdnskey", + "cds-digest-types", + "check-svcb", + "cipher-suites", + "dnsrps-library", + "inline-signing", + "key-store", + "manual-mode", + "max-validation-failures-per-fetch", + "max-validations-per-fetch", + "min-transfer-rate-in", + "notify-defer", + "offline-ksk", + "pkcs11-uri", + "recursing-file", + "remote-servers", + "require-cookie", + "resolver-use-dns64", + "responselog", + "reuseport", + "sig0-checks-quota", + "sig0-checks-quota-exempt", + "sig0-key-checks-limit", + "sig0-message-checks-limit" + ], + "removed": [ + "alt-transfer-source", + "alt-transfer-source-v6", + "auto-dnssec", + "coresize", + "datasize", + "dscp", + "files", + "glue-cache", + "heartbeat-interval", + "keep-response-order", + "lock-file", + "maxz-zone-ttl", + "parent-registration-delay", + "parental-agents", + "primaries", + "random-device", + "recurse-ing-file", + "reserved-sockets", + "resolver-nonbackoff-tries", + "resolver-retry-interval", + "reuse", + "root-delegation-only", + "stacksize", + "suppress-initial-notify", + "tkey-dhkey", + "tkey-gssapi-credential", + "use-alt-transfer-source" + ], + "modified": [ + { + "option": "listen-on", + "old_definition": "[ port ] [ tls ] [ http ] { ", + "new_definition": "[ port ] [ proxy ] [ tls ] [ http ] { " + }, + { + "option": "response-policy", + "old_definition": "{ zone [ add-soa ] [ log ] [ max-policy-ttl ] [ min-update-interval ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only ) ] [ recursive-only ] [ nsip-enable ] [ nsdname-enable ]", + "new_definition": "{ zone [ add-soa ] [ log ] [ max-policy-ttl ] [ min-update-interval ] [ policy ( cname | disabled | drop | given | no-op | nodata | nxdomain | passthru | tcp-only ) ] [ recursive-only ] [ nsip-enable ] [ nsdname-enable ] [ ede ]" + }, + { + "option": "cookie-algorithm", + "old_definition": "( aes | siphash24 )", + "new_definition": "( siphash24 )" + }, + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + }, + { + "option": "listen-on-v6", + "old_definition": "[ port ] [ tls ] [ http ] { ", + "new_definition": "[ port ] [ proxy ] [ tls ] [ http ] { " + }, + { + "option": "also-notify", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "catalog-zones", + "old_definition": "{ zone [ default-primaries [ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "{ zone [ default-primaries [ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + } + ], + "deprecated_new": [ + "sortlist" + ], + "options1_count": 334, + "options2_count": 333 + }, + "forward.zoneopt": { + "file": "forward.zoneopt", + "added": [], + "removed": [ + "delegation-only" + ], + "modified": [ + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + } + ], + "deprecated_new": [], + "options1_count": 5, + "options2_count": 4 + }, + "hint.zoneopt": { + "file": "hint.zoneopt", + "added": [], + "removed": [ + "delegation-only" + ], + "modified": [], + "deprecated_new": [], + "options1_count": 5, + "options2_count": 4 + }, + "in-view.zoneopt": { + "file": "in-view.zoneopt", + "added": [], + "removed": [], + "modified": [], + "deprecated_new": [], + "options1_count": 2, + "options2_count": 2 + }, + "mirror.zoneopt": { + "file": "mirror.zoneopt", + "added": [ + "min-transfer-rate-in", + "notify-defer" + ], + "removed": [ + "alt-transfer-source", + "alt-transfer-source-v6", + "use-alt-transfer-source" + ], + "modified": [ + { + "option": "also-notify", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "primaries", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + } + ], + "deprecated_new": [], + "options1_count": 44, + "options2_count": 43 + }, + "primary.zoneopt": { + "file": "primary.zoneopt", + "added": [ + "check-svcb", + "checkds", + "notify-defer" + ], + "removed": [ + "alt-transfer-source", + "alt-transfer-source-v6", + "auto-dnssec", + "update-check-ksk" + ], + "modified": [ + { + "option": "update-policy", + "old_definition": "( local | { ( deny | grant ) ( 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 | zonesubject ) [ ] ", + "new_definition": "( local | { ( deny | grant ) ( 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 ) [ ] " + }, + { + "option": "also-notify", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "parental-agents", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + } + ], + "deprecated_new": [ + "max-zone-ttl" + ], + "options1_count": 63, + "options2_count": 62 + }, + "redirect.zoneopt": { + "file": "redirect.zoneopt", + "added": [], + "removed": [], + "modified": [ + { + "option": "primaries", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + } + ], + "deprecated_new": [ + "max-zone-ttl" + ], + "options1_count": 14, + "options2_count": 14 + }, + "secondary.zoneopt": { + "file": "secondary.zoneopt", + "added": [ + "checkds", + "min-transfer-rate-in", + "notify-defer" + ], + "removed": [ + "alt-transfer-source", + "alt-transfer-source-v6", + "auto-dnssec", + "use-alt-transfer-source" + ], + "modified": [ + { + "option": "also-notify", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "parental-agents", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + }, + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + }, + { + "option": "primaries", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + } + ], + "deprecated_new": [], + "options1_count": 66, + "options2_count": 65 + }, + "static-stub.zoneopt": { + "file": "static-stub.zoneopt", + "added": [], + "removed": [], + "modified": [ + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + } + ], + "deprecated_new": [], + "options1_count": 12, + "options2_count": 12 + }, + "stub.zoneopt": { + "file": "stub.zoneopt", + "added": [ + "min-transfer-rate-in" + ], + "removed": [ + "delegation-only", + "use-alt-transfer-source" + ], + "modified": [ + { + "option": "forwarders", + "old_definition": "[ port ] { ( | ) [ port ]", + "new_definition": "[ port ] [ tls ] { ( | ) [ port ] [ tls ]" + }, + { + "option": "primaries", + "old_definition": "[ port ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]", + "new_definition": "[ port ] [ source ( | * ) ] [ source-v6 ( | * ) ] { ( | [ port ] | [ port ] ) [ key ] [ tls ]" + } + ], + "deprecated_new": [], + "options1_count": 28, + "options2_count": 27 + }, + "delegation-only.zoneopt": { + "file": "delegation-only.zoneopt", + "added": [], + "removed": [ + "type", + "zone" + ], + "modified": [], + "deprecated_new": [], + "options1_count": 2, + "options2_count": 0 + }, + "rndc.grammar": { + "file": "rndc.grammar", + "added": [], + "removed": [], + "modified": [], + "deprecated_new": [], + "options1_count": 14, + "options2_count": 14 + } +} \ No newline at end of file