Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c65d26855e |
@@ -62,4 +62,3 @@ unit/atf-src/test-programs/sh_helpers
|
||||
.project
|
||||
.cproject
|
||||
.settings
|
||||
kyua.log
|
||||
@@ -10,7 +10,6 @@ stages:
|
||||
- precheck
|
||||
- build
|
||||
- test
|
||||
- push
|
||||
|
||||
.centos-centos6-amd64: ¢os_centos6_amd64_image
|
||||
image: "$CI_REGISTRY_IMAGE:centos-centos6-amd64"
|
||||
@@ -119,8 +118,6 @@ stages:
|
||||
- ./configure --enable-developer --with-libtool --disable-static --with-atf=/usr --prefix=$HOME/.local --without-make-clean $EXTRA_CONFIGURE || cat config.log
|
||||
- make -j${PARALLEL_JOBS_BUILD:-1} -k all V=1
|
||||
artifacts:
|
||||
paths:
|
||||
- doc/
|
||||
expire_in: '1 hour'
|
||||
untracked: true
|
||||
|
||||
@@ -183,29 +180,6 @@ precheck:debian:sid:amd64:
|
||||
expire_in: '1 week'
|
||||
when: on_failure
|
||||
|
||||
docs:debian:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: test
|
||||
dependencies:
|
||||
- build:debian:sid:amd64
|
||||
script:
|
||||
- make -C doc/misc docbook
|
||||
- make -C doc/arm Bv9ARM.html
|
||||
artifacts:
|
||||
paths:
|
||||
- doc/arm/
|
||||
expire_in: '1 month'
|
||||
|
||||
push:docs:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: push
|
||||
dependencies: []
|
||||
script:
|
||||
- curl -X POST -F token=$GITLAB_PAGES_DOCS_TRIGGER_TOKEN -F ref=master $GITLAB_PAGES_DOCS_TRIGGER_URL
|
||||
only:
|
||||
- master@isc-projects/bind9
|
||||
- /^v9_.*$/@isc-projects/bind9
|
||||
|
||||
#build:debian:jessie:amd64:
|
||||
# <<: *debian_jessie_amd64_image
|
||||
# <<: *build_job
|
||||
@@ -257,7 +231,6 @@ build:debian:jessie:amd64:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
EXTRA_CONFIGURE: --without-cmocka
|
||||
<<: *debian_jessie_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
@@ -394,23 +367,3 @@ pkcs11:systemtest:debian:sid:amd64:
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- pkcs11:build:debian:sid:amd64
|
||||
|
||||
noassert:build:debian:sid:amd64:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g -DISC_CHECK_NONE=1"
|
||||
EXTRA_CONFIGURE: "--with-libidn2"
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
noassert:unittest:debian:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- noassert:build:debian:sid:amd64
|
||||
|
||||
noassert:systemtest:debian:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- noassert:build:debian:sid:amd64
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
##Release Checklist
|
||||
|
||||
- [ ] Check for the presence of a milestone for the release
|
||||
- If there is a milestone, are all the issues for the milestone resolved? (other than this checklist)
|
||||
- [ ] Prepare the sources for tarball generation
|
||||
- [ ] Change software version and library versions in configure.in
|
||||
- [ ] Update CHANGES
|
||||
- [ ] Ensure the release notes are correct for this release
|
||||
- [ ] Ensure the metainformation is correct for this release
|
||||
- [ ] Make sure the tests are passing
|
||||
- [ ] Create a tag (name vX_Y_Z[-alphatag], content BIND X.Y.Z[-alphatag], signed with a developer's GPG key): git tag -u <DEVELOPER_KEYID> -a -s -m "BIND X.Y.Z" vX.Y.Z
|
||||
- [ ] Push the changes and tag
|
||||
- [ ] Create the tarball
|
||||
- [ ] Create the Windows zips
|
||||
- [ ] Ask QA to sanity check the tarball and zips
|
||||
- [ ] Request the signature on the tarballs
|
||||
- [ ] Make tarballs and signatures available to download
|
||||
- [ ] Edit the release https://gitlab.isc.org/isc-projects/bind9/tags and the NEWS snippet + links to the tarballs
|
||||
- [ ] Update DEB and RPM packages
|
||||
|
||||
##Communication
|
||||
|
||||
- [ ] Inform support to upload to the web site (nice to give them a heads-up in advance)
|
||||
Write release e-mail to bind9-announce, bind-users in case of a major release
|
||||
- [ ] Inform marketing to announce the release
|
||||
Post short note to Twitter
|
||||
Update http://en.wikipedia.org/wiki/BIND (mktg)
|
||||
Blog post if a major release
|
||||
|
||||
@@ -9,10 +9,6 @@ email to [security-officer@isc.org](security-officer@isc.org).
|
||||
|
||||
(Summarize the bug encountered concisely.)
|
||||
|
||||
### BIND version used
|
||||
|
||||
(Paste the output of `named -V`.)
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
(How one can reproduce the issue - this is very important.)
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
## Release Checklist
|
||||
|
||||
- [ ] (Manager) Check for the presence of a milestone for the release.
|
||||
- If there is a milestone, are all the issues for the milestone resolved? (other than this checklist).
|
||||
- [ ] (Manager) Inform Support/Marketing of impending release (and give estimated release dates).
|
||||
- (SwEng) Prepare the sources for tarball generation.
|
||||
- [ ] Ensure that there are no outstanding merge requests in the private repository (subscription version only).
|
||||
- [ ] Update API files for libraries with new version information.
|
||||
- [ ] Change software version and library versions in configure.in (new major release only).
|
||||
- [ ] Ensure Kyua and ATF files are correct.
|
||||
- [ ] Rebuild configure using autoconf on docs.isc.org.
|
||||
- [ ] Update CHANGES.
|
||||
- [ ] Update CHANGES.SE (subscription branch only).
|
||||
- [ ] Update "version".
|
||||
- [ ] Update "readme.md".
|
||||
- [ ] Ensure the release notes are correct for this release (content, formatting, etc.).
|
||||
- [ ] Build documentation on docs.isc.org.
|
||||
- [ ] Commit changes and make sure the gitlab-ci tests are passing.
|
||||
- [ ] Push the changes and tag ("alphatag" is an optional string such as "b1", "rc1" etc.). (```git tag -u <DEVELOPER_KEYID> -a -s -m "BIND 9.X.Y[alphatag]" v9_X_Y[alphatag]```)
|
||||
- [ ] If this is the first tag for a release (e.g. beta), create a release branch named `release_v9_X_Y` (this allows development to continue on the release branch whilst release engineering continues).
|
||||
- [ ] (SwEng) Run the "make release" Jenkins job to produce the tarballs and zips.
|
||||
- [ ] (SwEng) Ask QA to sanity check the tarball and zips (passing to them the number of the Jenkins job).
|
||||
- [ ] (QA) Sanity check the tarballs.
|
||||
- [ ] (QA) Request the signature on the tarballs.
|
||||
- [ ] (QA) Check signatures on tarballs.
|
||||
- [ ] (QA) Tell Support to handle notification of release.
|
||||
- [ ] (Support) Make tarballs and signatures available to download.
|
||||
- [ ] (Manager) Update [https://wiki.isc.org/bin/view/Main/BindReleaseDates](BIND release dates page) when public announcement has been made.
|
||||
- [ ] (Manager) Inform marketing of the release
|
||||
|
||||
- [ ] (SwEng) Update DEB and RPM packages
|
||||
- [ ] (SwEng) Merge the automatically prepared `prep 9.X.Y` commit which updates `version` and documentation on the release branch into the relevant maintenance branch (`v9_X`)
|
||||
-1434
File diff suppressed because it is too large
Load Diff
@@ -1,215 +1,3 @@
|
||||
5086. [func] Log of RPZ now includes the QTYPE and QCLASS. [GL #623]
|
||||
|
||||
5085. [func] Use multiple event loops in socket code, and
|
||||
make network threads CPU-affinitive. This
|
||||
significantly improves performance on large
|
||||
systems. [GL #666]
|
||||
|
||||
5084. [func] Log of RPZ now includes the QTYPE and QCLASS. [GL #623]
|
||||
|
||||
5083. [func] Add autoconf macro AX_POSIX_SHELL, so we
|
||||
can use POSIX-compatible shell features
|
||||
in the scripts.
|
||||
|
||||
5082. [bug] Fixed a race that could cause a crash in
|
||||
dig/host/nslookup. [GL #650]
|
||||
|
||||
5081. [func] Use per-worker queues in task manager, make task
|
||||
runners CPU-affine. [GL #659]
|
||||
|
||||
5080. [func] Improvements to "rndc nta" user interface:
|
||||
- catch and report invalid command line options
|
||||
- when removing an NTA from all views, do not
|
||||
abort with an error if the NTA was not found
|
||||
in one of the views
|
||||
- include the view name in "rndc nta -dump"
|
||||
output, for consistency with the add and remove
|
||||
actions
|
||||
Thanks to Tony Finch. [GL !816]
|
||||
|
||||
5079. [func] Disable IDN processing in dig and nslookup
|
||||
when not on a tty. [GL #653]
|
||||
|
||||
5078. [cleanup] Require python components to be explicitly disabled if
|
||||
python is not available on unix platforms. [GL #601]
|
||||
|
||||
5077. [cleanup] Remove ip6.int support (-i) from dig and mdig.
|
||||
[GL !969]
|
||||
|
||||
5076. [bug] "require-server-cookie" was not effective if
|
||||
"rate-limit" was configured. [GL #617]
|
||||
|
||||
5075. [bug] Refresh nameservers from cache when sending final
|
||||
query in qname minimization. [GL #16]
|
||||
|
||||
5074. [cleanup] Remove vector socket functions - isc_socket_recvv(),
|
||||
isc_socket_sendtov(), isc_socket_sendtov2(),
|
||||
isc_socket_sendv() - in order to simplify socket code.
|
||||
[GL #645]
|
||||
|
||||
5073. [bug] Destroy a task first when destroying rpzs and catzs.
|
||||
[GL #84]
|
||||
|
||||
5072. [bug] Add unit tests for isc_buffer_copyregion() and fix its
|
||||
behavior for auto-reallocated buffers. [GL #644]
|
||||
|
||||
5071. [bug] Comparision of NXT records was broken. [GL #631]
|
||||
|
||||
5070. [bug] Record types which support a empty rdata field were
|
||||
not handling the empty rdata field case. [GL #638]
|
||||
|
||||
5069. [bug] Fix a hang on in RPZ when named is shutdown during RPZ
|
||||
zone update. [GL !907]
|
||||
|
||||
5068. [bug] Fix a race in RPZ with min-update-interval set to 0.
|
||||
[GL #643]
|
||||
|
||||
5067. [bug] Don't minimize qname when sending the query
|
||||
to a forwarder. [GL #361]
|
||||
|
||||
5066. [cleanup] Allow unquoted strings to be used as a zone names
|
||||
in response-policy statements. [GL #641]
|
||||
|
||||
5065. [bug] Only set IPV6_USE_MIN_MTU on IPv6. [GL #553]
|
||||
|
||||
5064. [test] Initalize TZ environment variable before calling
|
||||
dns_test_begin in dnstap_test. [GL #624]
|
||||
|
||||
5063. [test] In statschannel test try a few times before failing
|
||||
when checking if the compressed output is the same as
|
||||
uncompressed. [GL !909]
|
||||
|
||||
5062. [func] Use non-crypto-secure PRNG to generate nonces for
|
||||
cookies. [GL !887]
|
||||
|
||||
5061. [protocol] Add support for EID and NIMLOC. [GL #626]
|
||||
|
||||
5060. [bug] GID, UID and UINFO could not be loaded using unknown
|
||||
record format. [GL #627]
|
||||
|
||||
5059. [bug] Display a per-view list of zones in the web interface.
|
||||
[GL #427]
|
||||
|
||||
5058. [func] Replace old message digest and hmac APIs with more
|
||||
generic isc_md and isc_hmac APIs, and convert their
|
||||
respective tests to cmocka. [GL #305]
|
||||
|
||||
5057. [protocol] Add support for ATMA. [GL #619]
|
||||
|
||||
5056. [placeholder]
|
||||
|
||||
5055. [func] A default list of primary servers for the root zone is
|
||||
now built into named, allowing the "masters" statement
|
||||
to be omitted when configuring an IANA root zone
|
||||
mirror. [GL #564]
|
||||
|
||||
5054. [func] Attempts to use mirror zones with recursion disabled
|
||||
are now considered a configuration error. [GL #564]
|
||||
|
||||
5053. [func] The only valid zone-level NOTIFY settings for mirror
|
||||
zones are now "notify no;" and "notify explicit;".
|
||||
[GL #564]
|
||||
|
||||
5052. [func] Mirror zones are now configured using "type mirror;"
|
||||
rather than "mirror yes;". [GL #564]
|
||||
|
||||
5051. [doc] Documentation incorrectly stated that the
|
||||
"server-addresses" static-stub zone option accepts
|
||||
custom port numbers. [GL #582]
|
||||
|
||||
5050. [bug] The libirs version of getaddrinfo() was unable to parse
|
||||
scoped IPv6 addresses present in /etc/resolv.conf.
|
||||
[GL #187]
|
||||
|
||||
5049. [cleanup] QNAME minimization has been deeply refactored. [GL #16]
|
||||
|
||||
5048. [func] Add configure option to enable and enforce FIPS mode
|
||||
in BIND 9. [GL #506]
|
||||
|
||||
5047. [bug] Messages logged for certain query processing failures
|
||||
now include a more specific error description if it is
|
||||
available. [GL #572]
|
||||
|
||||
5046. [bug] named could crash during shutdown if an RPZ
|
||||
reload was in progress. [RT #46210]
|
||||
|
||||
5045. [func] Remove support for DNSSEC algorithms 3 (DSA)
|
||||
and 6 (DSA-NSEC3-SHA1). [GL #22]
|
||||
|
||||
5044. [cleanup] If "dnssec-enable" is no, then "dnssec-validation"
|
||||
now also defaults to no. [GL #388]
|
||||
|
||||
5043. [bug] Fix creating and validating EdDSA signatures. [GL #579]
|
||||
|
||||
5042. [test] Make the chained delegations in reclimit behave
|
||||
like they would in a regular name server. [GL #578]
|
||||
|
||||
5041. [test] The chain test contains a incomplete delegation.
|
||||
[GL #568]
|
||||
|
||||
5040. [func] Extended dnstap so that it can log UPDATE requests
|
||||
and responses as separate message types. Thanks
|
||||
to Greg Rabil. [GL #570]
|
||||
|
||||
5039. [bug] Named could fail to preserve owner name case of new
|
||||
RRset. [GL #420]
|
||||
|
||||
5038. [bug] Chaosnet addresses were compared incorrectly.
|
||||
[GL #562]
|
||||
|
||||
5037. [func] "allow-recursion-on" and "allow-query-cache-on"
|
||||
each now default to the other if only one of them
|
||||
is set, in order to be more consistent with the way
|
||||
"allow-recursion" and "allow-query-cache" work.
|
||||
Also we now ensure that both query-cache ACLs are
|
||||
checked when determining cache access. [GL #319]
|
||||
|
||||
5036. [cleanup] Fixed a spacing/formatting error in some RPZ-related
|
||||
error messages in the log. [GL !805]
|
||||
|
||||
5035. [test] Fixed errors that prevented the DNSRPS subtests
|
||||
from running in the rpz and rpzrecurse system
|
||||
tests. [GL #503]
|
||||
|
||||
5034. [bug] A race between threads could prevent zone maintenance
|
||||
scheduled immediately after zone load from being
|
||||
performed. [GL #542]
|
||||
|
||||
5033. [bug] When adding NTAs to multiple views using "rndc nta",
|
||||
the text returned via rndc was incorrectly terminated
|
||||
after the first line, making it look as if only one
|
||||
NTA had been added. Also, it was not possible to
|
||||
differentiate between views with the same name but
|
||||
different classes; this has been corrected with the
|
||||
addition of a "-class" option. [GL #105]
|
||||
|
||||
5032. [func] Add krb5-selfsub and ms-selfsub update policy rules.
|
||||
[GL #511]
|
||||
|
||||
5031. [cleanup] Various defines in platform.h has been either dropped
|
||||
if always or never triggered on supported platforms
|
||||
or replaced with config.h equivalents if the defines
|
||||
didn't have any impact on public headers. Workarounds
|
||||
for LinuxThreads have been removed because NPTL is
|
||||
available since Linux kernel 2.6.0. [GL #525]
|
||||
|
||||
5030. [bug] Align CMSG buffers to a 64-bit boundary, fixes crash
|
||||
on architectures with strict alignment. [GL #521]
|
||||
|
||||
--- 9.13.3 released ---
|
||||
|
||||
5029. [func] Workarounds for servers that misbehave when queried
|
||||
with EDNS have been removed, because these broken
|
||||
servers and the workarounds for their noncompliance
|
||||
cause unnecessary delays, increase code complexity,
|
||||
and prevent deployment of new DNS features. See
|
||||
https://dnsflagday.net for further details. [GL #150]
|
||||
|
||||
5028. [bug] Spread the initial RRSIG expiration times over the
|
||||
entire working sig-validity-interval when signing a
|
||||
zone in named to even out re-signing and transfer
|
||||
loads. [GL #418]
|
||||
|
||||
5027. [func] Set SO_SNDBUF size on sockets. [GL #74]
|
||||
|
||||
5026. [bug] rndc reconfig should not touch already loaded zones.
|
||||
@@ -300,7 +88,7 @@
|
||||
5000. [bug] named_server_servestale() could leave the server in
|
||||
exclusive mode if an error occured. [GL #441]
|
||||
|
||||
4999. [cleanup] Remove custom printf implementation in lib/isc/print.c.
|
||||
4999. [cleanup] Remove custom printf implementaion in lib/isc/print.c.
|
||||
[GL #261]
|
||||
|
||||
4998. [test] Make resolver and cacheclean tests more civilized.
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
Supported platforms
|
||||
|
||||
In general, this version of BIND will build and run on any POSIX-compliant
|
||||
system with a C99-compliant C compiler, BSD-style sockets with
|
||||
RFC-compliant IPv6 support, POSIX-compliant threads, and the OpenSSL
|
||||
cryptography library. Atomic operations support from the compiler is
|
||||
needed, either in the form of builtin operations, C11 atomics or the
|
||||
Interlocked family of functions on Windows.
|
||||
system with a C99-compliant C compiler, BSD-style sockets, and the OpenSSL
|
||||
cryptography library. To build with multiprocessing support, a
|
||||
C11-compliant C compiler will be needed for standard atomics.
|
||||
|
||||
ISC regularly tests BIND on many operating systems and architectures, but
|
||||
lacks the resources to test all of them. Consequently, ISC is only able to
|
||||
@@ -55,7 +53,4 @@ These are platforms on which BIND is known not to build or run:
|
||||
|
||||
* Platforms without at least OpenSSL 1.0.2
|
||||
* Windows 10 / x86
|
||||
* Windows Server 2012 and older
|
||||
* Platforms that don't support IPv6 Advanced Socket API (RFC 3542)
|
||||
* Platforms that don't support atomic operations (via compiler or
|
||||
library)
|
||||
* Windows Server 2012
|
||||
|
||||
+4
-40
@@ -11,11 +11,9 @@
|
||||
## Supported platforms
|
||||
|
||||
In general, this version of BIND will build and run on any POSIX-compliant
|
||||
system with a C99-compliant C compiler, BSD-style sockets with RFC-compliant
|
||||
IPv6 support, POSIX-compliant threads, and the OpenSSL cryptography library.
|
||||
Atomic operations support from the compiler is needed, either in the form of
|
||||
builtin operations, C11 atomics or the Interlocked family of functions on
|
||||
Windows.
|
||||
system with a C99-compliant C compiler, BSD-style sockets, and the OpenSSL
|
||||
cryptography library. To build with multiprocessing support, a
|
||||
C11-compliant C compiler will be needed for standard atomics.
|
||||
|
||||
ISC regularly tests BIND on many operating systems and architectures, but
|
||||
lacks the resources to test all of them. Consequently, ISC is only able to
|
||||
@@ -63,38 +61,4 @@ These are platforms on which BIND is known *not* to build or run:
|
||||
|
||||
* Platforms without at least OpenSSL 1.0.2
|
||||
* Windows 10 / x86
|
||||
* Windows Server 2012 and older
|
||||
* Platforms that don't support IPv6 Advanced Socket API (RFC 3542)
|
||||
* Platforms that don't support atomic operations (via compiler or library)
|
||||
* Linux without NPTL (Native POSIX Thread Library)
|
||||
|
||||
## Platform quirks
|
||||
|
||||
### ARM
|
||||
|
||||
If the compilation ends with following error:
|
||||
|
||||
```
|
||||
Error: selected processor does not support `yield' in ARM mode
|
||||
```
|
||||
|
||||
You will need to set `-march` compiler option to `native`, so the compiler
|
||||
recognizes `yield` assembler instruction. The proper way to set `-march=native`
|
||||
would be to put it into `CFLAGS`, e.g. run `./configure` like this:
|
||||
`CFLAGS="-march=native -Os -g" ./configure` plus your usual options.
|
||||
|
||||
If that doesn't work, you can enforce the minimum CPU and FPU (taken from Debian
|
||||
armhf documentation):
|
||||
|
||||
* The lowest worthwhile CPU implementation is Armv7-A, therefore the recommended
|
||||
build option is `-march=armv7-a`.
|
||||
|
||||
* FPU should be set at VFPv3-D16 as they represent the miminum specification of
|
||||
the processors to support here, therefore the recommended build option is
|
||||
`-mfpu=vfpv3-d16`.
|
||||
|
||||
The configure command should look like this:
|
||||
|
||||
```
|
||||
CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -Os -g" ./configure
|
||||
```
|
||||
* Windows Server 2012
|
||||
|
||||
@@ -104,7 +104,8 @@ BIND 9.13 features
|
||||
BIND 9.13 is the newest development branch of BIND 9. It includes a number
|
||||
of changes from BIND 9.12 and earlier releases. New features include:
|
||||
|
||||
* QNAME minimization, as described in RFC 7816, is now supported.
|
||||
* The default value of "dnssec-validation" is now "auto".
|
||||
* Support for IDNA2008 when linking with libidn2.
|
||||
* "Root key sentinel" support, enabling validating resolvers to indicate
|
||||
via a special query which trust anchors are configured for the root
|
||||
zone.
|
||||
@@ -113,24 +114,15 @@ of changes from BIND 9.12 and earlier releases. New features include:
|
||||
subject to DNSSEC validation and are not treated as authoritative data
|
||||
when answering. This makes it easier to configure a local copy of the
|
||||
root zone as described in RFC 7706.
|
||||
* QNAME minimization is now supported
|
||||
* The "validate-except" option allows configuration of domains below
|
||||
which DNSSEC validation should not be performed.
|
||||
* The default value of "dnssec-validation" is now "auto".
|
||||
* IDNA2008 is now supported when linking with libidn2.
|
||||
|
||||
In addition, workarounds that were formerly in place to enable resolution
|
||||
of domains whose authoritative servers did not respond to EDNS queries
|
||||
have been removed. See https://dnsflagday.net for more details.
|
||||
|
||||
Cryptographic support has been modernized. BIND now uses the best
|
||||
available pseudo-random number generator for the platform on which it's
|
||||
built. Very old versions of OpenSSL are no longer supported. Cryptography
|
||||
is now mandatory: building BIND without DNSSEC is now longer supported.
|
||||
|
||||
Special code to support certain legacy operating systems has also been
|
||||
removed; see the file PLATFORMS.md for details of supported platforms. In
|
||||
addition to OpenSSL, BIND now requires support for IPv6, threads, and
|
||||
standard atomic operations provided by the C compiler.
|
||||
In addition, cryptographic support has been modernized. BIND now uses the
|
||||
best available pseudo-random number generator for the platform on which
|
||||
it's built. Very old versions of OpenSSL are no longer supported.
|
||||
Cryptography is now mandatory; building BIND without DNSSEC is now longer
|
||||
supported.
|
||||
|
||||
Building BIND
|
||||
|
||||
@@ -138,7 +130,7 @@ Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler,
|
||||
basic POSIX support, and a 64-bit integer type. Successful builds have
|
||||
been observed on many versions of Linux and UNIX, including RedHat,
|
||||
Fedora, Debian, Ubuntu, SuSE, Slackware, FreeBSD, NetBSD, OpenBSD, Mac OS
|
||||
X, Solaris, HP-UX, and OpenWRT.
|
||||
X, Solaris, HP-UX, AIX, SCO OpenServer, and OpenWRT.
|
||||
|
||||
BIND requires a cryptography provider library such as OpenSSL or a
|
||||
hardware service module supporting PKCS#11. On Linux, BIND requires the
|
||||
@@ -264,6 +256,10 @@ specifying --enable-fixed-rrset or --disable-fixed-rrset on the configure
|
||||
command line. By default, fixed rrset-order is disabled to reduce memory
|
||||
footprint.
|
||||
|
||||
If your operating system has integrated support for IPv6, it will be used
|
||||
automatically. If you have installed KAME IPv6 separately, use --with-kame
|
||||
[=PATH] to specify its location.
|
||||
|
||||
make install will install named and the various BIND 9 libraries. By
|
||||
default, installation is into /usr/local, but this can be changed with the
|
||||
--prefix option when running configure.
|
||||
|
||||
@@ -122,7 +122,8 @@ BIND 9.13 is the newest development branch of BIND 9. It includes a
|
||||
number of changes from BIND 9.12 and earlier releases. New features
|
||||
include:
|
||||
|
||||
* QNAME minimization, as described in RFC 7816, is now supported.
|
||||
* The default value of "dnssec-validation" is now "auto".
|
||||
* Support for IDNA2008 when linking with `libidn2`.
|
||||
* "Root key sentinel" support, enabling validating resolvers to indicate
|
||||
via a special query which trust anchors are configured for the root zone.
|
||||
* Secondary zones can now be configured as "mirror" zones; their contents
|
||||
@@ -130,28 +131,16 @@ include:
|
||||
DNSSEC validation and are not treated as authoritative data when
|
||||
answering. This makes it easier to configure a local copy of the root
|
||||
zone as described in RFC 7706.
|
||||
* QNAME minimization is now supported
|
||||
* The "validate-except" option allows configuration of domains below which
|
||||
DNSSEC validation should not be performed.
|
||||
* The default value of "dnssec-validation" is now "auto".
|
||||
* IDNA2008 is now supported when linking with `libidn2`.
|
||||
|
||||
In addition, workarounds that were formerly in place to enable resolution
|
||||
of domains whose authoritative servers did not respond to EDNS queries
|
||||
have been removed. See [https://dnsflagday.net](https://dnsflagday.net)
|
||||
for more details.
|
||||
|
||||
Cryptographic support has been modernized. BIND now uses the
|
||||
In addition, cryptographic support has been modernized. BIND now uses the
|
||||
best available pseudo-random number generator for the platform on which
|
||||
it's built. Very old versions of OpenSSL are no longer supported.
|
||||
Cryptography is now mandatory: building BIND without DNSSEC is now
|
||||
Cryptography is now mandatory; building BIND without DNSSEC is now
|
||||
longer supported.
|
||||
|
||||
Special code to support certain legacy operating systems has also
|
||||
been removed; see the file [PLATFORMS.md](PLATFORMS.md) for details
|
||||
of supported platforms. In addition to OpenSSL, BIND now requires
|
||||
support for IPv6, threads, and standard atomic operations provided
|
||||
by the C compiler.
|
||||
|
||||
### <a name="build"/> Building BIND
|
||||
|
||||
Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler,
|
||||
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 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/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
/*! \file */
|
||||
|
||||
/***
|
||||
*** This file is not to be included by any public header files, because
|
||||
*** it does not get installed.
|
||||
***/
|
||||
@TOP@
|
||||
|
||||
/** define if your system needs pthread_init() before using pthreads */
|
||||
#undef NEED_PTHREAD_INIT
|
||||
|
||||
/** define if your system has sigwait() */
|
||||
#undef HAVE_SIGWAIT
|
||||
|
||||
/** define if sigwait() is the UnixWare flavor */
|
||||
#undef HAVE_UNIXWARE_SIGWAIT
|
||||
|
||||
/** define if LinuxThreads is in use */
|
||||
#undef HAVE_LINUXTHREADS
|
||||
|
||||
/** define if sysconf() is available */
|
||||
#undef HAVE_SYSCONF
|
||||
|
||||
/** define if sysctlbyname() is available */
|
||||
#undef HAVE_SYSCTLBYNAME
|
||||
|
||||
/** define if catgets() is available */
|
||||
#undef HAVE_CATGETS
|
||||
|
||||
/** define if getifaddrs() exists */
|
||||
#undef HAVE_GETIFADDRS
|
||||
|
||||
/** define if you have the NET_RT_IFLIST sysctl variable and sys/sysctl.h */
|
||||
#undef HAVE_IFLIST_SYSCTL
|
||||
|
||||
/** define if tzset() is available */
|
||||
#undef HAVE_TZSET
|
||||
|
||||
/**
|
||||
* define if pthread_setconcurrency() should be called to tell the
|
||||
* OS how many threads we might want to run.
|
||||
*/
|
||||
#undef CALL_PTHREAD_SETCONCURRENCY
|
||||
|
||||
/** define if flockfile() is available */
|
||||
#undef HAVE_FLOCKFILE
|
||||
|
||||
/** define if getc_unlocked() is available */
|
||||
#undef HAVE_GETCUNLOCKED
|
||||
|
||||
/** define if the system has a random number generating device */
|
||||
#undef PATH_RANDOMDEV
|
||||
|
||||
/** define if pthread_attr_getstacksize() is available */
|
||||
#undef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||
|
||||
/** define if pthread_attr_setstacksize() is available */
|
||||
#undef HAVE_PTHREAD_ATTR_SETSTACKSIZE
|
||||
|
||||
/** define if you have strerror in the C library. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define to the length type used by the socket API (socklen_t, size_t, int). */
|
||||
#undef ISC_SOCKADDR_LEN_T
|
||||
|
||||
/* Define if threads need PTHREAD_SCOPE_SYSTEM */
|
||||
#undef NEED_PTHREAD_SCOPE_SYSTEM
|
||||
|
||||
/* Define to 1 if you have the uname library function. */
|
||||
#undef HAVE_UNAME
|
||||
Vendored
-1
@@ -289,7 +289,6 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
||||
])dnl PKG_CHECK_VAR
|
||||
|
||||
m4_include([m4/ax_check_openssl.m4])
|
||||
m4_include([m4/ax_posix_shell.m4])
|
||||
m4_include([m4/ax_pthread.m4])
|
||||
m4_include([m4/libtool.m4])
|
||||
m4_include([m4/ltoptions.m4])
|
||||
|
||||
@@ -88,12 +88,12 @@ install:: named-checkconf@EXEEXT@ named-checkzone@EXEEXT@ installdirs
|
||||
${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} named-checkconf@EXEEXT@ ${DESTDIR}${sbindir}
|
||||
${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} named-checkzone@EXEEXT@ ${DESTDIR}${sbindir}
|
||||
(cd ${DESTDIR}${sbindir}; rm -f named-compilezone@EXEEXT@; ${LINK_PROGRAM} named-checkzone@EXEEXT@ named-compilezone@EXEEXT@)
|
||||
for m in ${MANPAGES}; do ${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man8 || exit 1; done
|
||||
for m in ${MANPAGES}; do ${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man8; done
|
||||
(cd ${DESTDIR}${mandir}/man8; rm -f named-compilezone.8; ${LINK_PROGRAM} named-checkzone.8 named-compilezone.8)
|
||||
|
||||
uninstall::
|
||||
rm -f ${DESTDIR}${mandir}/man8/named-compilezone.8
|
||||
for m in ${MANPAGES}; do rm -f ${DESTDIR}${mandir}/man8/$$m || exit 1; done
|
||||
for m in ${MANPAGES}; do rm -f ${DESTDIR}${mandir}/man8/$$m ; done
|
||||
rm -f ${DESTDIR}${sbindir}/named-compilezone@EXEEXT@
|
||||
${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/named-checkconf@EXEEXT@
|
||||
${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/named-checkzone@EXEEXT@
|
||||
|
||||
@@ -129,7 +129,7 @@ add(char *key, int value) {
|
||||
isc_symvalue_t symvalue;
|
||||
|
||||
if (sym_mctx == NULL) {
|
||||
result = isc_mem_create(&sym_mctx);
|
||||
result = isc_mem_create(0, 0, &sym_mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return;
|
||||
}
|
||||
|
||||
+11
-25
@@ -282,10 +282,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
@@ -302,10 +300,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMX;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMXFAIL;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKMX;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMXFAIL;
|
||||
@@ -331,10 +327,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_WARNMXCNAME;
|
||||
zone_options |= DNS_ZONEOPT_IGNOREMXCNAME;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_WARNMXCNAME;
|
||||
zone_options &= ~DNS_ZONEOPT_IGNOREMXCNAME;
|
||||
@@ -351,10 +345,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_WARNSRVCNAME;
|
||||
zone_options |= DNS_ZONEOPT_IGNORESRVCNAME;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_WARNSRVCNAME;
|
||||
zone_options &= ~DNS_ZONEOPT_IGNORESRVCNAME;
|
||||
@@ -374,10 +366,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
zone_options |= DNS_ZONEOPT_CHECKSPF;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKSPF;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKSPF;
|
||||
}
|
||||
@@ -393,10 +383,8 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKNAMES;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKNAMESFAIL;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKNAMES;
|
||||
zone_options |= DNS_ZONEOPT_CHECKNAMESFAIL;
|
||||
@@ -406,16 +394,14 @@ configure_zone(const char *vclass, const char *view,
|
||||
fmtobj = NULL;
|
||||
if (get_maps(maps, "masterfile-format", &fmtobj)) {
|
||||
const char *masterformatstr = cfg_obj_asstring(fmtobj);
|
||||
if (strcasecmp(masterformatstr, "text") == 0) {
|
||||
if (strcasecmp(masterformatstr, "text") == 0)
|
||||
masterformat = dns_masterformat_text;
|
||||
} else if (strcasecmp(masterformatstr, "raw") == 0) {
|
||||
else if (strcasecmp(masterformatstr, "raw") == 0)
|
||||
masterformat = dns_masterformat_raw;
|
||||
} else if (strcasecmp(masterformatstr, "map") == 0) {
|
||||
else if (strcasecmp(masterformatstr, "map") == 0)
|
||||
masterformat = dns_masterformat_map;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -583,7 +569,7 @@ main(int argc, char **argv) {
|
||||
}
|
||||
isc_commandline_reset = true;
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != EOF) {
|
||||
switch (c) {
|
||||
|
||||
@@ -139,14 +139,12 @@ main(int argc, char **argv) {
|
||||
#define PROGCMP(X) \
|
||||
(strcasecmp(prog_name, X) == 0 || strcasecmp(prog_name, X ".exe") == 0)
|
||||
|
||||
if (PROGCMP("named-checkzone")) {
|
||||
if (PROGCMP("named-checkzone"))
|
||||
progmode = progmode_check;
|
||||
} else if (PROGCMP("named-compilezone")) {
|
||||
else if (PROGCMP("named-compilezone"))
|
||||
progmode = progmode_compile;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/* Compilation specific defaults */
|
||||
if (progmode == progmode_compile) {
|
||||
@@ -519,7 +517,7 @@ main(int argc, char **argv) {
|
||||
InitSockets();
|
||||
#endif
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
if (!quiet)
|
||||
RUNTIME_CHECK(setup_logging(mctx, errout, &lctx)
|
||||
== ISC_R_SUCCESS);
|
||||
|
||||
@@ -125,12 +125,10 @@ main(int argc, char **argv) {
|
||||
if (PROGCMP("tsig-keygen")) {
|
||||
progmode = progmode_keygen;
|
||||
quiet = true;
|
||||
} else if (PROGCMP("ddns-confgen")) {
|
||||
} else if (PROGCMP("ddns-confgen"))
|
||||
progmode = progmode_confgen;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
isc_commandline_errprint = false;
|
||||
|
||||
@@ -209,7 +207,7 @@ main(int argc, char **argv) {
|
||||
/* Use canonical algorithm name */
|
||||
algname = alg_totext(alg);
|
||||
|
||||
DO("create memory context", isc_mem_create(&mctx));
|
||||
DO("create memory context", isc_mem_create(0, 0, &mctx));
|
||||
|
||||
if (keyname == NULL) {
|
||||
const char *suffix = NULL;
|
||||
|
||||
@@ -211,7 +211,7 @@ main(int argc, char **argv) {
|
||||
keysize = alg_bits(alg);
|
||||
algname = alg_totext(alg);
|
||||
|
||||
DO("create memory context", isc_mem_create(&mctx));
|
||||
DO("create memory context", isc_mem_create(0, 0, &mctx));
|
||||
isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret));
|
||||
|
||||
generate_key(mctx, alg, keysize, &key_txtbuffer);
|
||||
|
||||
+1
-2
@@ -1224,7 +1224,6 @@ dash_option(char *option, char *next, bool *open_type_class) {
|
||||
/* NOTREACHED */
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (strlen(option) > 1U)
|
||||
option = &option[1];
|
||||
@@ -1586,7 +1585,7 @@ main(int argc, char *argv[]) {
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("dns_lib_init failed: %d", result);
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("failed to create mctx");
|
||||
|
||||
|
||||
+3
-3
@@ -101,12 +101,12 @@ install:: dig@EXEEXT@ host@EXEEXT@ nslookup@EXEEXT@ installdirs
|
||||
${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} \
|
||||
nslookup@EXEEXT@ ${DESTDIR}${bindir}
|
||||
for m in ${MANPAGES}; do \
|
||||
${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man1 || exit 1; \
|
||||
done
|
||||
${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man1; \
|
||||
done
|
||||
|
||||
uninstall::
|
||||
for m in ${MANPAGES}; do \
|
||||
rm -f ${DESTDIR}${mandir}/man1/$$m || exit 1; \
|
||||
rm -f ${DESTDIR}${mandir}/man1/$$m ; \
|
||||
done
|
||||
${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${bindir}/nslookup@EXEEXT@
|
||||
${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${bindir}/host@EXEEXT@
|
||||
|
||||
+7
-7
@@ -65,7 +65,7 @@ static char domainopt[DNS_NAME_MAXTEXT];
|
||||
static char hexcookie[81];
|
||||
|
||||
static bool short_form = false, printcmd = true,
|
||||
plusquest = false, pluscomm = false,
|
||||
ip6_int = false, plusquest = false, pluscomm = false,
|
||||
ipv4only = false, ipv6only = false;
|
||||
static uint32_t splitwidth = 0xffffffff;
|
||||
|
||||
@@ -153,6 +153,7 @@ help(void) {
|
||||
" -b address[#port] (bind to source address/port)\n"
|
||||
" -c class (specify query class)\n"
|
||||
" -f filename (batch mode)\n"
|
||||
" -i (use IP6.INT for IPv6 reverse lookups)\n"
|
||||
" -k keyfile (specify tsig key file)\n"
|
||||
" -m (enable memory usage debugging)\n"
|
||||
" -p port (specify port number)\n"
|
||||
@@ -192,10 +193,8 @@ help(void) {
|
||||
" +[no]fail (Don't try next server on SERVFAIL)\n"
|
||||
" +[no]header-only (Send query without a question section)\n"
|
||||
" +[no]identify (ID responders in short answers)\n"
|
||||
#ifdef HAVE_LIBIDN2
|
||||
" +[no]idnin (Parse IDN names [default=on on tty])\n"
|
||||
" +[no]idnout (Convert IDN response [default=on on tty])\n"
|
||||
#endif
|
||||
" +[no]idnin (Parse IDN names)\n"
|
||||
" +[no]idnout (Convert IDN response)\n"
|
||||
" +[no]ignore (Don't revert to TCP for TC responses.)\n"
|
||||
" +[no]keepalive (Request EDNS TCP keepalive)\n"
|
||||
" +[no]keepopen (Keep the TCP socket open between queries)\n"
|
||||
@@ -1607,7 +1606,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||
exit(0);
|
||||
break;
|
||||
case 'i':
|
||||
/* deprecated */
|
||||
ip6_int = true;
|
||||
break;
|
||||
case 'm': /* memdebug */
|
||||
/* memdebug is handled in preparse_args() */
|
||||
@@ -1788,12 +1787,13 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||
*lookup = clone_lookup(default_lookup, true);
|
||||
*need_clone = true;
|
||||
if (get_reverse(textname, sizeof(textname), value,
|
||||
false) == ISC_R_SUCCESS) {
|
||||
ip6_int, false) == ISC_R_SUCCESS) {
|
||||
strlcpy((*lookup)->textname, textname,
|
||||
sizeof((*lookup)->textname));
|
||||
debug("looking up %s", (*lookup)->textname);
|
||||
(*lookup)->trace_root = ((*lookup)->trace ||
|
||||
(*lookup)->ns_search_only);
|
||||
(*lookup)->ip6_int = ip6_int;
|
||||
if (!(*lookup)->rdtypeset)
|
||||
(*lookup)->rdtype = dns_rdatatype_ptr;
|
||||
if (!(*lookup)->rdclassset)
|
||||
|
||||
+16
-18
@@ -271,6 +271,17 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-i</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Do reverse IPv6 lookups using the obsolete RFC 1886 IP6.INT
|
||||
domain, which is no longer in use. Obsolete bit string
|
||||
label queries (RFC 2874) are not attempted.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-k <replaceable class="parameter">keyfile</replaceable></term>
|
||||
<listitem>
|
||||
@@ -383,7 +394,8 @@
|
||||
<literal>94.2.0.192.in-addr.arpa</literal> and sets the
|
||||
query type and class to PTR and IN respectively. IPv6
|
||||
addresses are looked up using nibble format under the
|
||||
IP6.ARPA domain.
|
||||
IP6.ARPA domain (but see also the <option>-i</option>
|
||||
option).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -777,13 +789,7 @@
|
||||
<para>
|
||||
Process [do not process] IDN domain names on input.
|
||||
This requires IDN SUPPORT to have been enabled at
|
||||
compile time.
|
||||
</para>
|
||||
<para>
|
||||
The default is to process IDN input when standard output
|
||||
is a tty. The IDN processing on input is disabled when
|
||||
dig output is redirected to files, pipes, and other
|
||||
non-tty file descriptors.
|
||||
compile time. The default is to process IDN input.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -794,13 +800,7 @@
|
||||
<para>
|
||||
Convert [do not convert] puny code on output.
|
||||
This requires IDN SUPPORT to have been enabled at
|
||||
compile time.
|
||||
</para>
|
||||
<para>
|
||||
The default is to process puny code on output when
|
||||
standard output is a tty. The puny code processing on
|
||||
output is disabled when dig output is redirected to
|
||||
files, pipes, and other non-tty file descriptors.
|
||||
compile time. The default is to convert output.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -1330,9 +1330,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, use
|
||||
parameters <parameter>+noidnin</parameter> and
|
||||
<parameter>+noidnout</parameter> or define
|
||||
the <envar>IDN_DISABLE</envar> environment variable.
|
||||
|
||||
<parameter>+noidnout</parameter>.
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
|
||||
+119
-110
@@ -312,7 +312,8 @@ reverse_octets(const char *in, char **p, char *end) {
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
get_reverse(char *reverse, size_t len, char *value, bool strict)
|
||||
get_reverse(char *reverse, size_t len, char *value, bool ip6_int,
|
||||
bool strict)
|
||||
{
|
||||
int r;
|
||||
isc_result_t result;
|
||||
@@ -326,6 +327,8 @@ get_reverse(char *reverse, size_t len, char *value, bool strict)
|
||||
dns_name_t *name;
|
||||
unsigned int options = 0;
|
||||
|
||||
if (ip6_int)
|
||||
options |= DNS_BYADDROPT_IPV6INT;
|
||||
name = dns_fixedname_initname(&fname);
|
||||
result = dns_byaddr_createptrname(&addr, options, name);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
@@ -625,8 +628,8 @@ make_empty_lookup(void) {
|
||||
looknew->ttlunits = false;
|
||||
looknew->qr = false;
|
||||
#ifdef HAVE_LIBIDN2
|
||||
looknew->idnin = isatty(1)?(getenv("IDN_DISABLE") == NULL):false;
|
||||
looknew->idnout = looknew->idnin;
|
||||
looknew->idnin = true;
|
||||
looknew->idnout = true;
|
||||
#else
|
||||
looknew->idnin = false;
|
||||
looknew->idnout = false;
|
||||
@@ -649,6 +652,7 @@ make_empty_lookup(void) {
|
||||
looknew->nsfound = 0;
|
||||
looknew->tcp_mode = false;
|
||||
looknew->tcp_mode_set = false;
|
||||
looknew->ip6_int = false;
|
||||
looknew->comments = true;
|
||||
looknew->stats = true;
|
||||
looknew->section_question = true;
|
||||
@@ -1324,7 +1328,7 @@ setup_libs(void) {
|
||||
if (!have_ipv6 && !have_ipv4)
|
||||
fatal("can't find either v4 or v6 networking");
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
check_result(result, "isc_mem_create");
|
||||
isc_mem_setname(mctx, "dig", NULL);
|
||||
|
||||
@@ -1519,21 +1523,23 @@ clear_query(dig_query_t *query) {
|
||||
|
||||
debug("clear_query(%p)", query);
|
||||
|
||||
if (query->timer != NULL) {
|
||||
if (query->timer != NULL)
|
||||
isc_timer_detach(&query->timer);
|
||||
}
|
||||
lookup = query->lookup;
|
||||
|
||||
if (lookup->current_query == query) {
|
||||
if (lookup->current_query == query)
|
||||
lookup->current_query = NULL;
|
||||
}
|
||||
|
||||
if (ISC_LINK_LINKED(query, link)) {
|
||||
if (ISC_LINK_LINKED(query, link))
|
||||
ISC_LIST_UNLINK(lookup->q, query, link);
|
||||
}
|
||||
if (ISC_LINK_LINKED(query, clink)) {
|
||||
if (ISC_LINK_LINKED(query, clink))
|
||||
ISC_LIST_UNLINK(lookup->connecting, query, clink);
|
||||
}
|
||||
if (ISC_LINK_LINKED(&query->recvbuf, link))
|
||||
ISC_LIST_DEQUEUE(query->recvlist, &query->recvbuf,
|
||||
link);
|
||||
if (ISC_LINK_LINKED(&query->lengthbuf, link))
|
||||
ISC_LIST_DEQUEUE(query->lengthlist, &query->lengthbuf,
|
||||
link);
|
||||
INSIST(query->recvspace != NULL);
|
||||
|
||||
if (query->sock != NULL) {
|
||||
@@ -1542,16 +1548,12 @@ clear_query(dig_query_t *query) {
|
||||
debug("sockcount=%d", sockcount);
|
||||
}
|
||||
isc_mempool_put(commctx, query->recvspace);
|
||||
isc_mempool_put(commctx, query->tmpsendspace);
|
||||
isc_buffer_invalidate(&query->recvbuf);
|
||||
isc_buffer_invalidate(&query->lengthbuf);
|
||||
|
||||
if (query->waiting_senddone) {
|
||||
if (query->waiting_senddone)
|
||||
query->pending_free = true;
|
||||
} else {
|
||||
query->magic = 0;
|
||||
else
|
||||
isc_mem_free(mctx, query);
|
||||
}
|
||||
}
|
||||
|
||||
/*%
|
||||
@@ -2291,7 +2293,7 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
|
||||
if (lookup->ecs_addr != NULL) {
|
||||
uint8_t addr[16];
|
||||
uint16_t family = 0;
|
||||
uint16_t family;
|
||||
uint32_t plen;
|
||||
struct sockaddr *sa;
|
||||
struct sockaddr_in *sin;
|
||||
@@ -2348,7 +2350,6 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
isc_buffer_init(&b, ecsbuf, sizeof(ecsbuf));
|
||||
@@ -2460,14 +2461,13 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
|
||||
for (serv = ISC_LIST_HEAD(lookup->my_server_list);
|
||||
serv != NULL;
|
||||
serv = ISC_LIST_NEXT(serv, link))
|
||||
{
|
||||
serv = ISC_LIST_NEXT(serv, link)) {
|
||||
query = isc_mem_allocate(mctx, sizeof(dig_query_t));
|
||||
if (query == NULL) {
|
||||
if (query == NULL)
|
||||
fatal("memory allocation failure in %s:%d",
|
||||
__FILE__, __LINE__);
|
||||
}
|
||||
debug("create query %p linked to lookup %p", query, lookup);
|
||||
debug("create query %p linked to lookup %p",
|
||||
query, lookup);
|
||||
query->lookup = lookup;
|
||||
query->timer = NULL;
|
||||
query->waiting_connect = false;
|
||||
@@ -2488,24 +2488,20 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
query->msg_count = 0;
|
||||
query->byte_count = 0;
|
||||
query->ixfr_axfr = false;
|
||||
ISC_LIST_INIT(query->recvlist);
|
||||
ISC_LIST_INIT(query->lengthlist);
|
||||
query->sock = NULL;
|
||||
query->recvspace = isc_mempool_get(commctx);
|
||||
query->tmpsendspace = isc_mempool_get(commctx);
|
||||
if (query->recvspace == NULL) {
|
||||
if (query->recvspace == NULL)
|
||||
fatal("memory allocation failure");
|
||||
}
|
||||
|
||||
isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
|
||||
isc_buffer_init(&query->lengthbuf, query->lengthspace, 2);
|
||||
isc_buffer_init(&query->tmpsendbuf, query->tmpsendspace,
|
||||
COMMSIZE);
|
||||
isc_buffer_init(&query->slbuf, query->slspace, 2);
|
||||
query->sendbuf = lookup->renderbuf;
|
||||
|
||||
ISC_LINK_INIT(query, clink);
|
||||
ISC_LINK_INIT(query, link);
|
||||
|
||||
query->magic = DIG_QUERY_MAGIC;
|
||||
|
||||
ISC_LIST_ENQUEUE(lookup->q, query, link);
|
||||
}
|
||||
|
||||
@@ -2514,10 +2510,9 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
extrabytes = 0;
|
||||
dighost_printmessage(ISC_LIST_HEAD(lookup->q),
|
||||
lookup->sendmsg, true);
|
||||
if (lookup->stats) {
|
||||
if (lookup->stats)
|
||||
printf(";; QUERY SIZE: %u\n\n",
|
||||
isc_buffer_usedlength(&lookup->renderbuf));
|
||||
}
|
||||
}
|
||||
return (true);
|
||||
}
|
||||
@@ -2528,6 +2523,8 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
*/
|
||||
static void
|
||||
send_done(isc_task_t *_task, isc_event_t *event) {
|
||||
isc_socketevent_t *sevent = (isc_socketevent_t *)event;
|
||||
isc_buffer_t *b = NULL;
|
||||
dig_query_t *query, *next;
|
||||
dig_lookup_t *l;
|
||||
|
||||
@@ -2542,27 +2539,28 @@ send_done(isc_task_t *_task, isc_event_t *event) {
|
||||
debug("sendcount=%d", sendcount);
|
||||
INSIST(sendcount >= 0);
|
||||
|
||||
for (b = ISC_LIST_HEAD(sevent->bufferlist);
|
||||
b != NULL;
|
||||
b = ISC_LIST_HEAD(sevent->bufferlist)) {
|
||||
ISC_LIST_DEQUEUE(sevent->bufferlist, b, link);
|
||||
isc_mem_free(mctx, b);
|
||||
}
|
||||
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
query->waiting_senddone = false;
|
||||
l = query->lookup;
|
||||
|
||||
if (!query->pending_free && l->ns_search_only &&
|
||||
!l->trace_root && !l->tcp_mode)
|
||||
{
|
||||
if (l->ns_search_only && !l->trace_root && !l->tcp_mode) {
|
||||
debug("sending next, since searching");
|
||||
next = ISC_LIST_NEXT(query, link);
|
||||
if (next != NULL) {
|
||||
if (next != NULL)
|
||||
send_udp(next);
|
||||
}
|
||||
}
|
||||
|
||||
isc_event_free(&event);
|
||||
|
||||
if (query->pending_free) {
|
||||
query->magic = 0;
|
||||
if (query->pending_free)
|
||||
isc_mem_free(mctx, query);
|
||||
}
|
||||
|
||||
check_if_done();
|
||||
UNLOCK_LOOKUP;
|
||||
@@ -2580,7 +2578,6 @@ cancel_lookup(dig_lookup_t *lookup) {
|
||||
debug("cancel_lookup()");
|
||||
query = ISC_LIST_HEAD(lookup->q);
|
||||
while (query != NULL) {
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
next = ISC_LIST_NEXT(query, link);
|
||||
if (query->sock != NULL) {
|
||||
isc_socket_cancel(query->sock, global_task,
|
||||
@@ -2600,7 +2597,6 @@ bringup_timer(dig_query_t *query, unsigned int default_timeout) {
|
||||
dig_lookup_t *l;
|
||||
unsigned int local_timeout;
|
||||
isc_result_t result;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("bringup_timer()");
|
||||
/*
|
||||
@@ -2665,7 +2661,6 @@ send_tcp_connect(dig_query_t *query) {
|
||||
isc_result_t result;
|
||||
dig_query_t *next;
|
||||
dig_lookup_t *l;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("send_tcp_connect(%p)", query);
|
||||
|
||||
@@ -2782,6 +2777,17 @@ send_tcp_connect(dig_query_t *query) {
|
||||
}
|
||||
}
|
||||
|
||||
static isc_buffer_t *
|
||||
clone_buffer(isc_buffer_t *source) {
|
||||
isc_buffer_t *buffer;
|
||||
buffer = isc_mem_allocate(mctx, sizeof(*buffer));
|
||||
if (buffer == NULL)
|
||||
fatal("memory allocation failure in %s:%d",
|
||||
__FILE__, __LINE__);
|
||||
*buffer = *source;
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Send a UDP packet to the remote nameserver, possible starting the
|
||||
* recv action as well. Also make sure that the timer is running and
|
||||
@@ -2791,10 +2797,8 @@ static void
|
||||
send_udp(dig_query_t *query) {
|
||||
dig_lookup_t *l = NULL;
|
||||
isc_result_t result;
|
||||
isc_buffer_t *sendbuf;
|
||||
dig_query_t *next;
|
||||
isc_region_t r;
|
||||
isc_socketevent_t *sevent;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("send_udp(%p)", query);
|
||||
|
||||
@@ -2855,27 +2859,29 @@ send_udp(dig_query_t *query) {
|
||||
check_result(result, "isc_socket_bind");
|
||||
|
||||
query->recv_made = true;
|
||||
isc_buffer_availableregion(&query->recvbuf, &r);
|
||||
ISC_LINK_INIT(&query->recvbuf, link);
|
||||
ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf,
|
||||
link);
|
||||
debug("recving with lookup=%p, query=%p, sock=%p",
|
||||
query->lookup, query, query->sock);
|
||||
result = isc_socket_recv(query->sock, &r, 1,
|
||||
global_task, recv_done, query);
|
||||
check_result(result, "isc_socket_recv");
|
||||
result = isc_socket_recvv(query->sock, &query->recvlist, 1,
|
||||
global_task, recv_done, query);
|
||||
check_result(result, "isc_socket_recvv");
|
||||
recvcount++;
|
||||
debug("recvcount=%d", recvcount);
|
||||
}
|
||||
isc_buffer_usedregion(&query->sendbuf, &r);
|
||||
ISC_LIST_INIT(query->sendlist);
|
||||
sendbuf = clone_buffer(&query->sendbuf);
|
||||
ISC_LIST_ENQUEUE(query->sendlist, sendbuf, link);
|
||||
debug("sending a request");
|
||||
TIME_NOW(&query->time_sent);
|
||||
INSIST(query->sock != NULL);
|
||||
query->waiting_senddone = true;
|
||||
sevent = isc_socket_socketevent(mctx, query->sock,
|
||||
ISC_SOCKEVENT_SENDDONE,
|
||||
send_done, query);
|
||||
result = isc_socket_sendto2(query->sock, &r,
|
||||
global_task, &query->sockaddr, NULL,
|
||||
sevent, ISC_SOCKFLAG_NORETRY);
|
||||
check_result(result, "isc_socket_sendto2");
|
||||
result = isc_socket_sendtov2(query->sock, &query->sendlist,
|
||||
global_task, send_done, query,
|
||||
&query->sockaddr, NULL,
|
||||
ISC_SOCKFLAG_NORETRY);
|
||||
check_result(result, "isc_socket_sendtov");
|
||||
sendcount++;
|
||||
}
|
||||
|
||||
@@ -2896,7 +2902,6 @@ connect_timeout(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
LOCK_LOOKUP;
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
l = query->lookup;
|
||||
isc_event_free(&event);
|
||||
|
||||
@@ -2966,8 +2971,7 @@ connect_timeout(isc_task_t *task, isc_event_t *event) {
|
||||
static void
|
||||
tcp_length_done(isc_task_t *task, isc_event_t *event) {
|
||||
isc_socketevent_t *sevent;
|
||||
isc_buffer_t b;
|
||||
isc_region_t r;
|
||||
isc_buffer_t *b = NULL;
|
||||
isc_result_t result;
|
||||
dig_query_t *query = NULL;
|
||||
dig_lookup_t *l, *n;
|
||||
@@ -2983,11 +2987,14 @@ tcp_length_done(isc_task_t *task, isc_event_t *event) {
|
||||
LOCK_LOOKUP;
|
||||
sevent = (isc_socketevent_t *)event;
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
recvcount--;
|
||||
INSIST(recvcount >= 0);
|
||||
|
||||
b = ISC_LIST_HEAD(sevent->bufferlist);
|
||||
INSIST(b == &query->lengthbuf);
|
||||
ISC_LIST_DEQUEUE(sevent->bufferlist, b, link);
|
||||
|
||||
if (sevent->result == ISC_R_CANCELED) {
|
||||
isc_event_free(&event);
|
||||
l = query->lookup;
|
||||
@@ -3020,10 +3027,7 @@ tcp_length_done(isc_task_t *task, isc_event_t *event) {
|
||||
UNLOCK_LOOKUP;
|
||||
return;
|
||||
}
|
||||
isc_buffer_init(&b, sevent->region.base, sevent->n);
|
||||
isc_buffer_add(&b, sevent->n);
|
||||
length = isc_buffer_getuint16(&b);
|
||||
|
||||
length = isc_buffer_getuint16(b);
|
||||
if (length == 0) {
|
||||
isc_event_free(&event);
|
||||
launch_next_query(query, false);
|
||||
@@ -3037,11 +3041,13 @@ tcp_length_done(isc_task_t *task, isc_event_t *event) {
|
||||
*/
|
||||
isc_buffer_invalidate(&query->recvbuf);
|
||||
isc_buffer_init(&query->recvbuf, query->recvspace, length);
|
||||
isc_buffer_availableregion(&query->recvbuf, &r);
|
||||
ENSURE(ISC_LIST_EMPTY(query->recvlist));
|
||||
ISC_LINK_INIT(&query->recvbuf, link);
|
||||
ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
|
||||
debug("recving with lookup=%p, query=%p", query->lookup, query);
|
||||
result = isc_socket_recv(query->sock, &r, length, task,
|
||||
recv_done, query);
|
||||
check_result(result, "isc_socket_recv");
|
||||
result = isc_socket_recvv(query->sock, &query->recvlist, length, task,
|
||||
recv_done, query);
|
||||
check_result(result, "isc_socket_recvv");
|
||||
recvcount++;
|
||||
debug("resubmitted recv request with length %d, recvcount=%d",
|
||||
length, recvcount);
|
||||
@@ -3057,8 +3063,7 @@ static void
|
||||
launch_next_query(dig_query_t *query, bool include_question) {
|
||||
isc_result_t result;
|
||||
dig_lookup_t *l;
|
||||
isc_region_t r;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
isc_buffer_t *buffer;
|
||||
|
||||
INSIST(!free_now);
|
||||
|
||||
@@ -3077,28 +3082,35 @@ launch_next_query(dig_query_t *query, bool include_question) {
|
||||
return;
|
||||
}
|
||||
|
||||
isc_buffer_clear(&query->slbuf);
|
||||
isc_buffer_clear(&query->lengthbuf);
|
||||
isc_buffer_availableregion(&query->lengthbuf, &r);
|
||||
result = isc_socket_recv(query->sock, &r, 0,
|
||||
global_task, tcp_length_done, query);
|
||||
check_result(result, "isc_socket_recv");
|
||||
isc_buffer_putuint16(&query->slbuf, (uint16_t) query->sendbuf.used);
|
||||
ISC_LIST_INIT(query->sendlist);
|
||||
ISC_LINK_INIT(&query->slbuf, link);
|
||||
if (!query->first_soa_rcvd) {
|
||||
buffer = clone_buffer(&query->slbuf);
|
||||
ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
|
||||
if (include_question) {
|
||||
buffer = clone_buffer(&query->sendbuf);
|
||||
ISC_LIST_ENQUEUE(query->sendlist, buffer, link);
|
||||
}
|
||||
}
|
||||
|
||||
ISC_LINK_INIT(&query->lengthbuf, link);
|
||||
ISC_LIST_ENQUEUE(query->lengthlist, &query->lengthbuf, link);
|
||||
|
||||
result = isc_socket_recvv(query->sock, &query->lengthlist, 0,
|
||||
global_task, tcp_length_done, query);
|
||||
check_result(result, "isc_socket_recvv");
|
||||
recvcount++;
|
||||
debug("recvcount=%d", recvcount);
|
||||
if (!query->first_soa_rcvd) {
|
||||
debug("sending a request in launch_next_query");
|
||||
TIME_NOW(&query->time_sent);
|
||||
query->waiting_senddone = true;
|
||||
isc_buffer_clear(&query->tmpsendbuf);
|
||||
isc_buffer_putuint16(&query->tmpsendbuf,
|
||||
isc_buffer_usedlength(&query->sendbuf));
|
||||
if (include_question) {
|
||||
isc_buffer_usedregion(&query->sendbuf, &r);
|
||||
isc_buffer_copyregion(&query->tmpsendbuf, &r);
|
||||
}
|
||||
isc_buffer_usedregion(&query->tmpsendbuf, &r);
|
||||
result = isc_socket_send(query->sock, &r,
|
||||
global_task, send_done, query);
|
||||
check_result(result, "isc_socket_send");
|
||||
result = isc_socket_sendv(query->sock, &query->sendlist,
|
||||
global_task, send_done, query);
|
||||
check_result(result, "isc_socket_sendv");
|
||||
sendcount++;
|
||||
debug("sendcount=%d", sendcount);
|
||||
}
|
||||
@@ -3131,7 +3143,6 @@ connect_done(isc_task_t *task, isc_event_t *event) {
|
||||
LOCK_LOOKUP;
|
||||
sevent = (isc_socketevent_t *)event;
|
||||
query = sevent->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
INSIST(query->waiting_connect);
|
||||
|
||||
@@ -3449,9 +3460,8 @@ ednsvers(dns_rdataset_t *opt) {
|
||||
static void
|
||||
recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
isc_socketevent_t *sevent = NULL;
|
||||
isc_region_t r;
|
||||
dig_query_t *query = NULL;
|
||||
isc_buffer_t b;
|
||||
isc_buffer_t *b = NULL;
|
||||
dns_message_t *msg = NULL;
|
||||
isc_result_t result;
|
||||
dig_lookup_t *n, *l;
|
||||
@@ -3481,8 +3491,9 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
REQUIRE(event->ev_type == ISC_SOCKEVENT_RECVDONE);
|
||||
sevent = (isc_socketevent_t *)event;
|
||||
|
||||
isc_buffer_init(&b, sevent->region.base, sevent->n);
|
||||
isc_buffer_add(&b, sevent->n);
|
||||
b = ISC_LIST_HEAD(sevent->bufferlist);
|
||||
INSIST(b == &query->recvbuf);
|
||||
ISC_LIST_DEQUEUE(sevent->bufferlist, &query->recvbuf, link);
|
||||
|
||||
if ((l->tcp_mode) && (query->timer != NULL))
|
||||
isc_timer_touch(query->timer);
|
||||
@@ -3558,7 +3569,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
}
|
||||
}
|
||||
|
||||
result = dns_message_peekheader(&b, &id, &msgflags);
|
||||
result = dns_message_peekheader(b, &id, &msgflags);
|
||||
if (result != ISC_R_SUCCESS || l->sendmsg->id != id) {
|
||||
match = false;
|
||||
if (l->tcp_mode) {
|
||||
@@ -3627,7 +3638,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
parseflags |= DNS_MESSAGEPARSE_BESTEFFORT;
|
||||
parseflags |= DNS_MESSAGEPARSE_IGNORETRUNCATION;
|
||||
}
|
||||
result = dns_message_parse(msg, &b, parseflags);
|
||||
result = dns_message_parse(msg, b, parseflags);
|
||||
if (result == DNS_R_RECOVERABLE) {
|
||||
printf(";; Warning: Message parser reports malformed "
|
||||
"message packet.\n");
|
||||
@@ -3635,7 +3646,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
}
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
printf(";; Got bad packet: %s\n", isc_result_totext(result));
|
||||
hex_dump(&b);
|
||||
hex_dump(b);
|
||||
query->waiting_connect = false;
|
||||
dns_message_destroy(&msg);
|
||||
isc_event_free(&event);
|
||||
@@ -3789,7 +3800,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
}
|
||||
|
||||
if (tsigkey != NULL) {
|
||||
result = dns_tsig_verify(&b, msg, NULL, NULL);
|
||||
result = dns_tsig_verify(&query->recvbuf, msg, NULL, NULL);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
printf(";; Couldn't verify signature: %s\n",
|
||||
isc_result_totext(result));
|
||||
@@ -3805,7 +3816,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
check_result(result,"dns_message_getquerytsig");
|
||||
}
|
||||
|
||||
extrabytes = isc_buffer_remaininglength(&b);
|
||||
extrabytes = isc_buffer_remaininglength(b);
|
||||
|
||||
debug("after parse");
|
||||
if (l->doing_xfr && l->xfr_q == NULL) {
|
||||
@@ -3852,8 +3863,8 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
(l->origin != NULL || l->need_search)) {
|
||||
if (!next_origin(query->lookup) || showsearch) {
|
||||
dighost_printmessage(query, msg, true);
|
||||
dighost_received(isc_buffer_usedlength(&b),
|
||||
&sevent->address, query);
|
||||
dighost_received(b->used, &sevent->address,
|
||||
query);
|
||||
}
|
||||
} else if (!l->trace && !l->ns_search_only) {
|
||||
dighost_printmessage(query, msg, true);
|
||||
@@ -3920,8 +3931,7 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
} else {
|
||||
|
||||
if (msg->rcode == dns_rcode_noerror || l->origin == NULL) {
|
||||
dighost_received(isc_buffer_usedlength(&b),
|
||||
&sevent->address, query);
|
||||
dighost_received(b->used, &sevent->address, query);
|
||||
}
|
||||
|
||||
if (!query->lookup->ns_search_only)
|
||||
@@ -3945,10 +3955,10 @@ recv_done(isc_task_t *task, isc_event_t *event) {
|
||||
udp_mismatch:
|
||||
isc_buffer_invalidate(&query->recvbuf);
|
||||
isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
|
||||
isc_buffer_availableregion(&query->recvbuf, &r);
|
||||
result = isc_socket_recv(query->sock, &r, 1,
|
||||
global_task, recv_done, query);
|
||||
check_result(result, "isc_socket_recv");
|
||||
ISC_LIST_ENQUEUE(query->recvlist, &query->recvbuf, link);
|
||||
result = isc_socket_recvv(query->sock, &query->recvlist, 1,
|
||||
global_task, recv_done, query);
|
||||
check_result(result, "isc_socket_recvv");
|
||||
recvcount++;
|
||||
isc_event_free(&event);
|
||||
UNLOCK_LOOKUP;
|
||||
@@ -4023,7 +4033,6 @@ do_lookup(dig_lookup_t *lookup) {
|
||||
lookup->pending = true;
|
||||
query = ISC_LIST_HEAD(lookup->q);
|
||||
if (query != NULL) {
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
if (lookup->tcp_mode)
|
||||
send_tcp_connect(query);
|
||||
else
|
||||
|
||||
+4
-3
@@ -143,6 +143,7 @@ show_usage(void) {
|
||||
" -c specifies query class for non-IN data\n"
|
||||
" -C compares SOA records on authoritative nameservers\n"
|
||||
" -d is equivalent to -v\n"
|
||||
" -i IP6.INT reverse lookups\n"
|
||||
" -l lists all hosts in a domain, using AXFR\n"
|
||||
" -m set memory debugging flag (trace|record|usage)\n"
|
||||
" -N changes the number of dots allowed before root lookup is done\n"
|
||||
@@ -761,7 +762,7 @@ parse_args(bool is_batchfile, int argc, char **argv) {
|
||||
default_lookups = false;
|
||||
break;
|
||||
case 'i':
|
||||
/* deprecated */
|
||||
lookup->ip6_int = true;
|
||||
break;
|
||||
case 'n':
|
||||
/* deprecated */
|
||||
@@ -840,8 +841,8 @@ parse_args(bool is_batchfile, int argc, char **argv) {
|
||||
check_ra = true;
|
||||
|
||||
lookup->pending = false;
|
||||
if (get_reverse(store, sizeof(store), hostname, true)
|
||||
== ISC_R_SUCCESS) {
|
||||
if (get_reverse(store, sizeof(store), hostname,
|
||||
lookup->ip6_int, true) == ISC_R_SUCCESS) {
|
||||
strlcpy(lookup->textname, store, sizeof(lookup->textname));
|
||||
lookup->rdtype = dns_rdatatype_ptr;
|
||||
lookup->rdtypeset = true;
|
||||
|
||||
+13
-1
@@ -179,6 +179,18 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-i</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Obsolete.
|
||||
Use the IP6.INT domain for reverse lookups of IPv6
|
||||
addresses as defined in RFC1886 and deprecated in RFC4159.
|
||||
The default is to use IP6.ARPA as specified in RFC3596.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-l</term>
|
||||
<listitem>
|
||||
@@ -377,7 +389,7 @@
|
||||
<command>host</command> appropriately converts character encoding of
|
||||
domain name before sending a request to DNS server or displaying a
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, define
|
||||
If you'd like to turn off the IDN support for some reason, defines
|
||||
the <envar>IDN_DISABLE</envar> environment variable.
|
||||
The IDN support is disabled if the variable is set when
|
||||
<command>host</command> runs.
|
||||
|
||||
+11
-12
@@ -26,7 +26,6 @@
|
||||
#include <isc/formatcheck.h>
|
||||
#include <isc/lang.h>
|
||||
#include <isc/list.h>
|
||||
#include <isc/magic.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/sockaddr.h>
|
||||
@@ -82,11 +81,6 @@ typedef struct dig_server dig_server_t;
|
||||
typedef ISC_LIST(dig_server_t) dig_serverlist_t;
|
||||
typedef struct dig_searchlist dig_searchlist_t;
|
||||
|
||||
#define DIG_QUERY_MAGIC ISC_MAGIC('D','i','g','q')
|
||||
|
||||
#define DIG_VALID_QUERY(x) ISC_MAGIC_VALID((x), DIG_QUERY_MAGIC)
|
||||
|
||||
|
||||
/*% The dig_lookup structure */
|
||||
struct dig_lookup {
|
||||
bool
|
||||
@@ -109,6 +103,7 @@ struct dig_lookup {
|
||||
trace_root, /*% initial query for either +trace or +nssearch */
|
||||
tcp_mode,
|
||||
tcp_mode_set,
|
||||
ip6_int,
|
||||
comments,
|
||||
stats,
|
||||
section_question,
|
||||
@@ -190,7 +185,6 @@ struct dig_lookup {
|
||||
|
||||
/*% The dig_query structure */
|
||||
struct dig_query {
|
||||
unsigned int magic;
|
||||
dig_lookup_t *lookup;
|
||||
bool waiting_connect,
|
||||
pending_free,
|
||||
@@ -209,12 +203,15 @@ struct dig_query {
|
||||
bool ixfr_axfr;
|
||||
char *servname;
|
||||
char *userarg;
|
||||
isc_bufferlist_t sendlist,
|
||||
recvlist,
|
||||
lengthlist;
|
||||
isc_buffer_t recvbuf,
|
||||
lengthbuf,
|
||||
tmpsendbuf,
|
||||
sendbuf;
|
||||
char *recvspace, *tmpsendspace,
|
||||
lengthspace[4];
|
||||
slbuf;
|
||||
char *recvspace,
|
||||
lengthspace[4],
|
||||
slspace[4];
|
||||
isc_socket_t *sock;
|
||||
ISC_LINK(dig_query_t) link;
|
||||
ISC_LINK(dig_query_t) clink;
|
||||
@@ -222,6 +219,7 @@ struct dig_query {
|
||||
isc_time_t time_sent;
|
||||
isc_time_t time_recv;
|
||||
uint64_t byte_count;
|
||||
isc_buffer_t sendbuf;
|
||||
isc_timer_t *timer;
|
||||
};
|
||||
|
||||
@@ -286,7 +284,8 @@ int
|
||||
getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp);
|
||||
|
||||
isc_result_t
|
||||
get_reverse(char *reverse, size_t len, char *value, bool strict);
|
||||
get_reverse(char *reverse, size_t len, char *value, bool ip6_int,
|
||||
bool strict);
|
||||
|
||||
ISC_PLATFORM_NORETURN_PRE void
|
||||
fatal(const char *format, ...)
|
||||
|
||||
+7
-1
@@ -772,7 +772,7 @@ addlookup(char *opt) {
|
||||
rdclass = dns_rdataclass_in;
|
||||
}
|
||||
lookup = make_empty_lookup();
|
||||
if (get_reverse(store, sizeof(store), opt, true)
|
||||
if (get_reverse(store, sizeof(store), opt, lookup->ip6_int, true)
|
||||
== ISC_R_SUCCESS) {
|
||||
strlcpy(lookup->textname, store, sizeof(lookup->textname));
|
||||
lookup->rdtype = dns_rdatatype_ptr;
|
||||
@@ -923,6 +923,12 @@ flush_lookup_list(void) {
|
||||
ISC_SOCKCANCEL_ALL);
|
||||
isc_socket_detach(&q->sock);
|
||||
}
|
||||
if (ISC_LINK_LINKED(&q->recvbuf, link))
|
||||
ISC_LIST_DEQUEUE(q->recvlist, &q->recvbuf,
|
||||
link);
|
||||
if (ISC_LINK_LINKED(&q->lengthbuf, link))
|
||||
ISC_LIST_DEQUEUE(q->lengthlist, &q->lengthbuf,
|
||||
link);
|
||||
isc_buffer_invalidate(&q->recvbuf);
|
||||
isc_buffer_invalidate(&q->lengthbuf);
|
||||
qp = q;
|
||||
|
||||
@@ -478,22 +478,6 @@ nslookup -query=hinfo -timeout=10
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
<refsection><info><title>IDN SUPPORT</title></info>
|
||||
|
||||
<para>
|
||||
If <command>nslookup</command> has been built with IDN (internationalized
|
||||
domain name) support, it can accept and display non-ASCII domain names.
|
||||
<command>nslookup</command> appropriately converts character encoding of
|
||||
domain name before sending a request to DNS server or displaying a
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, define
|
||||
the <envar>IDN_DISABLE</envar> environment variable.
|
||||
The IDN support is disabled if the variable is set when
|
||||
<command>nslookup</command> runs or when the standard output is not
|
||||
a tty.
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
<refsection><info><title>FILES</title></info>
|
||||
|
||||
<para><filename>/etc/resolv.conf</filename>
|
||||
|
||||
@@ -115,12 +115,12 @@ installdirs:
|
||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man8
|
||||
|
||||
install:: ${TARGETS} installdirs
|
||||
for t in ${TARGETS}; do ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} $$t ${DESTDIR}${sbindir} || exit 1; done
|
||||
for m in ${MANPAGES}; do ${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man8 || exit 1; done
|
||||
for t in ${TARGETS}; do ${LIBTOOL_MODE_INSTALL} ${INSTALL_PROGRAM} $$t ${DESTDIR}${sbindir}; done
|
||||
for m in ${MANPAGES}; do ${INSTALL_DATA} ${srcdir}/$$m ${DESTDIR}${mandir}/man8; done
|
||||
|
||||
uninstall::
|
||||
for m in ${MANPAGES}; do rm -f ${DESTDIR}${mandir}/man8/$$m || exit 1; done
|
||||
for t in ${TARGETS}; do ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/$$t || exit 1; done
|
||||
for m in ${MANPAGES}; do rm -f ${DESTDIR}${mandir}/man8/$$m ; done
|
||||
for t in ${TARGETS}; do ${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${sbindir}/$$t ; done
|
||||
|
||||
clean distclean::
|
||||
rm -f ${TARGETS}
|
||||
|
||||
@@ -163,8 +163,8 @@ verbose_time(int level, const char *msg, isc_stdtime_t time) {
|
||||
if (verbose < 3) {
|
||||
vbprintf(level, "%s %s\n", msg, timestr);
|
||||
} else {
|
||||
vbprintf(level, "%s %s (%" PRIu32 ")\n",
|
||||
msg, timestr, time);
|
||||
vbprintf(level, "%s %s (%lld)\n",
|
||||
msg, timestr, (long long)time);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1144,7 +1144,7 @@ main(int argc, char *argv[]) {
|
||||
int ch;
|
||||
char *endp;
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fatal("out of memory");
|
||||
}
|
||||
|
||||
@@ -368,7 +368,7 @@ main(int argc, char **argv) {
|
||||
if (argc == 1)
|
||||
usage();
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("out of memory");
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ main(int argc, char **argv) {
|
||||
if (argc == 1)
|
||||
usage();
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("out of memory");
|
||||
|
||||
|
||||
@@ -64,8 +64,8 @@ usage(void) {
|
||||
fprintf(stderr, " name: owner of the key\n");
|
||||
fprintf(stderr, "Other options:\n");
|
||||
fprintf(stderr, " -a algorithm: \n"
|
||||
" RSA | RSAMD5 | DH | RSASHA1 |\n"
|
||||
" NSEC3RSASHA1 |\n"
|
||||
" RSA | RSAMD5 | DH | DSA | RSASHA1 |\n"
|
||||
" NSEC3DSA | NSEC3RSASHA1 |\n"
|
||||
" RSASHA256 | RSASHA512 |\n"
|
||||
" ECDSAP256SHA256 | ECDSAP384SHA384\n");
|
||||
fprintf(stderr, " -3: use NSEC3-capable algorithm\n");
|
||||
@@ -166,7 +166,7 @@ main(int argc, char **argv) {
|
||||
if (argc == 1)
|
||||
usage();
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
#if USE_PKCS11
|
||||
pk11_result_register();
|
||||
@@ -402,9 +402,13 @@ main(int argc, char **argv) {
|
||||
|
||||
if (use_nsec3) {
|
||||
switch (alg) {
|
||||
case DST_ALG_DSA:
|
||||
alg = DST_ALG_NSEC3DSA;
|
||||
break;
|
||||
case DST_ALG_RSASHA1:
|
||||
alg = DST_ALG_NSEC3RSASHA1;
|
||||
break;
|
||||
case DST_ALG_NSEC3DSA:
|
||||
case DST_ALG_NSEC3RSASHA1:
|
||||
case DST_ALG_RSASHA256:
|
||||
case DST_ALG_RSASHA512:
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
<para>
|
||||
Selects the cryptographic algorithm. The value of
|
||||
<option>algorithm</option> must be one of RSAMD5, RSASHA1,
|
||||
NSEC3RSASHA1, RSASHA256, RSASHA512,
|
||||
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512,
|
||||
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448.
|
||||
</para>
|
||||
<para>
|
||||
@@ -119,9 +119,9 @@
|
||||
<para>
|
||||
These values are case insensitive. In some cases, abbreviations
|
||||
are supported, such as ECDSA256 for ECDSAP256SHA256 and
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 is specified
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 or DSA is specified
|
||||
along with the <option>-3</option> option, then NSEC3RSASHA1
|
||||
will be used instead.
|
||||
or NSEC3DSA will be used instead.
|
||||
</para>
|
||||
<para>
|
||||
As of BIND 9.12.0, this option is mandatory except when using
|
||||
|
||||
@@ -79,8 +79,8 @@ usage(void) {
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " -K <directory>: write keys into directory\n");
|
||||
fprintf(stderr, " -a <algorithm>:\n");
|
||||
fprintf(stderr, " RSA | RSAMD5 | RSASHA1 | NSEC3RSASHA1"
|
||||
" |\n");
|
||||
fprintf(stderr, " RSA | RSAMD5 | DSA | RSASHA1 | NSEC3RSASHA1"
|
||||
" | NSEC3DSA |\n");
|
||||
fprintf(stderr, " RSASHA256 | RSASHA512 |\n");
|
||||
fprintf(stderr, " ECDSAP256SHA256 | ECDSAP384SHA384 |\n");
|
||||
fprintf(stderr, " ED25519 | ED448 | DH\n");
|
||||
@@ -92,6 +92,10 @@ usage(void) {
|
||||
fprintf(stderr, " RSASHA256:\t[1024..%d]\n", MAX_RSA);
|
||||
fprintf(stderr, " RSASHA512:\t[1024..%d]\n", MAX_RSA);
|
||||
fprintf(stderr, " DH:\t\t[128..4096]\n");
|
||||
fprintf(stderr, " DSA:\t\t[512..1024] and divisible by 64\n");
|
||||
fprintf(stderr, " NSEC3DSA:\t[512..1024] and divisible "
|
||||
"by 64\n");
|
||||
fprintf(stderr, " ECCGOST:\tignored\n");
|
||||
fprintf(stderr, " ECDSAP256SHA256:\tignored\n");
|
||||
fprintf(stderr, " ECDSAP384SHA384:\tignored\n");
|
||||
fprintf(stderr, " ED25519:\tignored\n");
|
||||
@@ -157,6 +161,11 @@ usage(void) {
|
||||
exit (-1);
|
||||
}
|
||||
|
||||
static bool
|
||||
dsa_size_ok(int size) {
|
||||
return (size >= 512 && size <= 1024 && size % 64 == 0);
|
||||
}
|
||||
|
||||
static void
|
||||
progress(int p)
|
||||
{
|
||||
@@ -265,7 +274,7 @@ main(int argc, char **argv) {
|
||||
}
|
||||
isc_commandline_reset = true;
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
|
||||
@@ -299,7 +308,7 @@ main(int argc, char **argv) {
|
||||
case 'e':
|
||||
fprintf(stderr,
|
||||
"phased-out option -e "
|
||||
"(was 'use (RSA) large exponent')\n");
|
||||
"(was 'use (RSA) large exponent)\n");
|
||||
break;
|
||||
case 'f':
|
||||
c = (unsigned char)(isc_commandline_argument[0]);
|
||||
@@ -533,12 +542,17 @@ main(int argc, char **argv) {
|
||||
|
||||
if (use_nsec3) {
|
||||
switch (alg) {
|
||||
case DST_ALG_DSA:
|
||||
alg = DST_ALG_NSEC3DSA;
|
||||
break;
|
||||
case DST_ALG_RSASHA1:
|
||||
alg = DST_ALG_NSEC3RSASHA1;
|
||||
break;
|
||||
case DST_ALG_NSEC3DSA:
|
||||
case DST_ALG_NSEC3RSASHA1:
|
||||
case DST_ALG_RSASHA256:
|
||||
case DST_ALG_RSASHA512:
|
||||
case DST_ALG_ECCGOST:
|
||||
case DST_ALG_ECDSA256:
|
||||
case DST_ALG_ECDSA384:
|
||||
case DST_ALG_ED25519:
|
||||
@@ -584,6 +598,7 @@ main(int argc, char **argv) {
|
||||
" to %d\n", size);
|
||||
}
|
||||
break;
|
||||
case DST_ALG_ECCGOST:
|
||||
case DST_ALG_ECDSA256:
|
||||
case DST_ALG_ECDSA384:
|
||||
case DST_ALG_ED25519:
|
||||
@@ -713,6 +728,14 @@ main(int argc, char **argv) {
|
||||
if (size != 0 && (size < 128 || size > 4096))
|
||||
fatal("DH key size %d out of range", size);
|
||||
break;
|
||||
case DNS_KEYALG_DSA:
|
||||
case DNS_KEYALG_NSEC3DSA:
|
||||
if (size != 0 && !dsa_size_ok(size))
|
||||
fatal("invalid DSS key size: %d", size);
|
||||
break;
|
||||
case DST_ALG_ECCGOST:
|
||||
size = 256;
|
||||
break;
|
||||
case DST_ALG_ECDSA256:
|
||||
size = 256;
|
||||
break;
|
||||
@@ -792,6 +815,9 @@ main(int argc, char **argv) {
|
||||
param = generator;
|
||||
break;
|
||||
|
||||
case DNS_KEYALG_DSA:
|
||||
case DNS_KEYALG_NSEC3DSA:
|
||||
case DST_ALG_ECCGOST:
|
||||
case DST_ALG_ECDSA256:
|
||||
case DST_ALG_ECDSA384:
|
||||
case DST_ALG_ED25519:
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
<para>
|
||||
Selects the cryptographic algorithm. For DNSSEC keys, the value
|
||||
of <option>algorithm</option> must be one of RSAMD5, RSASHA1,
|
||||
NSEC3RSASHA1, RSASHA256, RSASHA512,
|
||||
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512,
|
||||
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For
|
||||
TKEY, the value must be DH (Diffie Hellman); specifying
|
||||
his value will automatically set the <option>-T KEY</option>
|
||||
@@ -132,9 +132,9 @@
|
||||
<para>
|
||||
These values are case insensitive. In some cases, abbreviations
|
||||
are supported, such as ECDSA256 for ECDSAP256SHA256 and
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 is specified
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 or DSA is specified
|
||||
along with the <option>-3</option> option, then NSEC3RSASHA1
|
||||
will be used instead.
|
||||
or NSEC3DSA will be used instead.
|
||||
</para>
|
||||
<para>
|
||||
This parameter <emphasis>must</emphasis> be specified except
|
||||
|
||||
@@ -91,7 +91,7 @@ main(int argc, char **argv) {
|
||||
if (argc == 1)
|
||||
usage();
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("Out of memory");
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ main(int argc, char **argv) {
|
||||
if (argc == 1)
|
||||
usage();
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("Out of memory");
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include <isc/file.h>
|
||||
#include <isc/hash.h>
|
||||
#include <isc/hex.h>
|
||||
#include <isc/md.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/mutex.h>
|
||||
#include <isc/os.h>
|
||||
@@ -3278,7 +3277,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
check_result(isc_app_start(), "isc_app_start");
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("out of memory");
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ main(int argc, char *argv[]) {
|
||||
isc_commandline_reset = true;
|
||||
check_result(isc_app_start(), "isc_app_start");
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("out of memory");
|
||||
|
||||
|
||||
@@ -198,25 +198,6 @@
|
||||
background-color: #99ddff;
|
||||
}
|
||||
|
||||
table.zones {
|
||||
border: 1px solid grey;
|
||||
width: 500px;
|
||||
}
|
||||
table.zones th {
|
||||
text-align: center;
|
||||
border: 1px solid grey;
|
||||
}
|
||||
table.zones td {
|
||||
text-align: center;
|
||||
font-family: monospace;
|
||||
}
|
||||
table.zones td:nth-child(1) {
|
||||
text-align: right;
|
||||
}
|
||||
table.zones td:nth-child(4) {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.totals {
|
||||
background-color: rgb(1,169,206);
|
||||
color: #ffffff;
|
||||
@@ -724,35 +705,6 @@
|
||||
</table>
|
||||
<br/>
|
||||
</xsl:if>
|
||||
<xsl:for-each select="views/view">
|
||||
<xsl:if test="zones/zone">
|
||||
<h3>Zones for View <xsl:value-of select="@name"/></h3>
|
||||
<table class="zones">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Class</th>
|
||||
<th>Type</th>
|
||||
<th>Serial</th>
|
||||
</tr>
|
||||
<xsl:for-each select="zones/zone">
|
||||
<tr>
|
||||
<td>
|
||||
<xsl:value-of select="@name"/>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="@rdataclass"/>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="type"/>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="serial"/>
|
||||
</td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
<xsl:if test="views/view[zones/zone/counters[@type="qtype"]/counter >0]">
|
||||
<h2>Received QTYPES per view/zone</h2>
|
||||
<xsl:for-each select="views/view[zones/zone/counters[@type="qtype"]/counter >0]">
|
||||
|
||||
@@ -203,25 +203,6 @@ static char xslmsg[] =
|
||||
" background-color: #99ddff;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" table.zones {\n"
|
||||
" border: 1px solid grey;\n"
|
||||
" width: 500px;\n"
|
||||
" }\n"
|
||||
" table.zones th {\n"
|
||||
" text-align: center;\n"
|
||||
" border: 1px solid grey;\n"
|
||||
" }\n"
|
||||
" table.zones td {\n"
|
||||
" text-align: center;\n"
|
||||
" font-family: monospace;\n"
|
||||
" }\n"
|
||||
" table.zones td:nth-child(1) {\n"
|
||||
" text-align: right;\n"
|
||||
" }\n"
|
||||
" table.zones td:nth-child(4) {\n"
|
||||
" text-align: right;\n"
|
||||
" }\n"
|
||||
"\n"
|
||||
" .totals {\n"
|
||||
" background-color: rgb(1,169,206);\n"
|
||||
" color: #ffffff;\n"
|
||||
@@ -729,35 +710,6 @@ static char xslmsg[] =
|
||||
" </table>\n"
|
||||
" <br/>\n"
|
||||
" </xsl:if>\n"
|
||||
" <xsl:for-each select=\"views/view\">\n"
|
||||
" <xsl:if test=\"zones/zone\">\n"
|
||||
" <h3>Zones for View <xsl:value-of select=\"@name\"/></h3>\n"
|
||||
" <table class=\"zones\">\n"
|
||||
" <tr>\n"
|
||||
" <th>Name</th>\n"
|
||||
" <th>Class</th>\n"
|
||||
" <th>Type</th>\n"
|
||||
" <th>Serial</th>\n"
|
||||
" </tr>\n"
|
||||
" <xsl:for-each select=\"zones/zone\">\n"
|
||||
" <tr>\n"
|
||||
" <td>\n"
|
||||
" <xsl:value-of select=\"@name\"/>\n"
|
||||
" </td>\n"
|
||||
" <td>\n"
|
||||
" <xsl:value-of select=\"@rdataclass\"/>\n"
|
||||
" </td>\n"
|
||||
" <td>\n"
|
||||
" <xsl:value-of select=\"type\"/>\n"
|
||||
" </td>\n"
|
||||
" <td>\n"
|
||||
" <xsl:value-of select=\"serial\"/>\n"
|
||||
" </td>\n"
|
||||
" </tr>\n"
|
||||
" </xsl:for-each>\n"
|
||||
" </table>\n"
|
||||
" </xsl:if>\n"
|
||||
" </xsl:for-each>\n"
|
||||
" <xsl:if test=\"views/view[zones/zone/counters[@type="qtype"]/counter >0]\">\n"
|
||||
" <h2>Received QTYPES per view/zone</h2>\n"
|
||||
" <xsl:for-each select=\"views/view[zones/zone/counters[@type="qtype"]/counter >0]\">\n"
|
||||
|
||||
+4
-24
@@ -301,21 +301,6 @@ view \"_bind\" chaos {\n\
|
||||
MANAGED_KEYS
|
||||
|
||||
"# END MANAGED KEYS\n\
|
||||
\n\
|
||||
masters " DEFAULT_IANA_ROOT_ZONE_MASTERS " {\n\
|
||||
2001:500:84::b; # b.root-servers.net\n\
|
||||
2001:500:2f::f; # f.root-servers.net\n\
|
||||
2001:7fd::1; # k.root-servers.net\n\
|
||||
2620:0:2830:202::132; # xfr.cjr.dns.icann.org\n\
|
||||
2620:0:2d0:202::132; # xfr.lax.dns.icann.org\n\
|
||||
192.228.79.201; # b.root-servers.net\n\
|
||||
192.33.4.12; # c.root-servers.net\n\
|
||||
192.5.5.241; # f.root-servers.net\n\
|
||||
192.112.36.4; # g.root-servers.net\n\
|
||||
193.0.14.129; # k.root-servers.net\n\
|
||||
192.0.47.132; # xfr.cjr.dns.icann.org\n\
|
||||
192.0.32.132; # xfr.lax.dns.icann.org\n\
|
||||
};\n\
|
||||
";
|
||||
|
||||
isc_result_t
|
||||
@@ -447,8 +432,6 @@ named_config_getzonetype(const cfg_obj_t *zonetypeobj) {
|
||||
strcasecmp(str, "slave") == 0)
|
||||
{
|
||||
ztype = dns_zone_slave;
|
||||
} else if (strcasecmp(str, "mirror") == 0) {
|
||||
ztype = dns_zone_mirror;
|
||||
} else if (strcasecmp(str, "stub") == 0) {
|
||||
ztype = dns_zone_stub;
|
||||
} else if (strcasecmp(str, "static-stub") == 0) {
|
||||
@@ -457,7 +440,6 @@ named_config_getzonetype(const cfg_obj_t *zonetypeobj) {
|
||||
ztype = dns_zone_redirect;
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
return (ztype);
|
||||
}
|
||||
@@ -571,9 +553,9 @@ named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
|
||||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
named_config_getmastersdef(const cfg_obj_t *cctx, const char *name,
|
||||
const cfg_obj_t **ret)
|
||||
static isc_result_t
|
||||
get_masters_def(const cfg_obj_t *cctx, const char *name,
|
||||
const cfg_obj_t **ret)
|
||||
{
|
||||
isc_result_t result;
|
||||
const cfg_obj_t *masters = NULL;
|
||||
@@ -715,8 +697,7 @@ named_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
|
||||
break;
|
||||
if (j < l)
|
||||
continue;
|
||||
tresult = named_config_getmastersdef(config, listname,
|
||||
&list);
|
||||
tresult = get_masters_def(config, listname, &list);
|
||||
if (tresult == ISC_R_NOTFOUND) {
|
||||
cfg_obj_log(addr, named_g_lctx, ISC_LOG_ERROR,
|
||||
"masters \"%s\" not found", listname);
|
||||
@@ -1030,7 +1011,6 @@ named_config_getkeyalgorithm2(const char *str, const dns_name_t **name,
|
||||
case hmacsha512: *name = dns_tsig_hmacsha512_name; break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
if (typep != NULL)
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
#include <dns/types.h>
|
||||
#include <dns/zone.h>
|
||||
|
||||
#define DEFAULT_IANA_ROOT_ZONE_MASTERS "_default_iana_root_zone_masters"
|
||||
|
||||
isc_result_t
|
||||
named_config_parsedefaults(cfg_parser_t *parser, cfg_obj_t **conf);
|
||||
|
||||
@@ -59,10 +57,6 @@ void
|
||||
named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
|
||||
isc_dscp_t **dscpsp, uint32_t count);
|
||||
|
||||
isc_result_t
|
||||
named_config_getmastersdef(const cfg_obj_t *cctx, const char *name,
|
||||
const cfg_obj_t **ret);
|
||||
|
||||
isc_result_t
|
||||
named_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
|
||||
isc_mem_t *mctx, dns_ipkeylist_t *ipkl);
|
||||
|
||||
@@ -157,7 +157,6 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *logconfig) {
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
type = ISC_LOG_TOFILE;
|
||||
|
||||
+50
-56
@@ -122,17 +122,14 @@ static int maxudp = 0;
|
||||
*/
|
||||
static bool clienttest = false;
|
||||
static bool dropedns = false;
|
||||
static bool ednsformerr = false;
|
||||
static bool ednsnotimp = false;
|
||||
static bool ednsrefused = false;
|
||||
static bool fixedlocal = false;
|
||||
static bool noaa = false;
|
||||
static bool noedns = false;
|
||||
static bool nonearest = false;
|
||||
static bool nosoa = false;
|
||||
static bool notcp = false;
|
||||
static bool sigvalinsecs = false;
|
||||
static bool noaa = false;
|
||||
static unsigned int delay = 0;
|
||||
static bool nonearest = false;
|
||||
static bool notcp = false;
|
||||
static bool fixedlocal = false;
|
||||
static bool sigvalinsecs = false;
|
||||
|
||||
/*
|
||||
* -4 and -6
|
||||
@@ -491,12 +488,6 @@ parse_T_opt(char *option) {
|
||||
dropedns = true;
|
||||
} else if (!strncmp(option, "dscp=", 5)) {
|
||||
isc_dscp_check_value = atoi(option + 5);
|
||||
} else if (!strcmp(option, "ednsformerr")) {
|
||||
ednsformerr = true;
|
||||
} else if (!strcmp(option, "ednsnotimp")) {
|
||||
ednsnotimp = true;
|
||||
} else if (!strcmp(option, "ednsrefused")) {
|
||||
ednsrefused = true;
|
||||
} else if (!strcmp(option, "fixedlocal")) {
|
||||
fixedlocal = true;
|
||||
} else if (!strcmp(option, "keepstderr")) {
|
||||
@@ -556,7 +547,7 @@ parse_T_opt(char *option) {
|
||||
} else if (!strncmp(option, "tat=", 4)) {
|
||||
named_g_tat_interval = atoi(option + 4);
|
||||
} else {
|
||||
fprintf(stderr, "unknown -T flag '%s'\n", option);
|
||||
fprintf(stderr, "unknown -T flag '%s\n", option);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -793,7 +784,10 @@ create_managers(void) {
|
||||
named_g_udpdisp = 1;
|
||||
#else
|
||||
if (named_g_udpdisp == 0) {
|
||||
named_g_udpdisp = named_g_cpus_detected;
|
||||
if (named_g_cpus_detected == 1)
|
||||
named_g_udpdisp = 1;
|
||||
else
|
||||
named_g_udpdisp = named_g_cpus_detected - 1;
|
||||
}
|
||||
if (named_g_udpdisp > named_g_cpus)
|
||||
named_g_udpdisp = named_g_cpus;
|
||||
@@ -821,14 +815,14 @@ create_managers(void) {
|
||||
}
|
||||
|
||||
result = isc_socketmgr_create2(named_g_mctx, &named_g_socketmgr,
|
||||
maxsocks, named_g_udpdisp);
|
||||
maxsocks);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_socketmgr_create() failed: %s",
|
||||
isc_result_totext(result));
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
isc_socketmgr_maxudp(named_g_socketmgr, maxudp);
|
||||
isc__socketmgr_maxudp(named_g_socketmgr, maxudp);
|
||||
result = isc_socketmgr_getmaxsockets(named_g_socketmgr, &socks);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
@@ -1041,6 +1035,16 @@ setup(void) {
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
"linked to zlib version: %s", zlibVersion());
|
||||
#endif
|
||||
#ifdef ISC_PLATFORM_USETHREADS
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
"threads support is enabled");
|
||||
#else
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
"threads support is disabled");
|
||||
#endif
|
||||
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
"----------------------------------------------------");
|
||||
@@ -1065,20 +1069,14 @@ setup(void) {
|
||||
/*
|
||||
* Get the initial resource limits.
|
||||
*/
|
||||
#ifndef WIN32
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_stacksize,
|
||||
&named_g_initstacksize)
|
||||
== ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_datasize,
|
||||
&named_g_initdatasize)
|
||||
== ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_coresize,
|
||||
&named_g_initcoresize)
|
||||
== ISC_R_SUCCESS);
|
||||
#endif
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles)
|
||||
== ISC_R_SUCCESS);
|
||||
(void)isc_resource_getlimit(isc_resource_stacksize,
|
||||
&named_g_initstacksize);
|
||||
(void)isc_resource_getlimit(isc_resource_datasize,
|
||||
&named_g_initdatasize);
|
||||
(void)isc_resource_getlimit(isc_resource_coresize,
|
||||
&named_g_initcoresize);
|
||||
(void)isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles);
|
||||
|
||||
/*
|
||||
* System resources cannot effectively be tuned on some systems.
|
||||
@@ -1086,9 +1084,8 @@ setup(void) {
|
||||
*/
|
||||
old_openfiles = named_g_initopenfiles;
|
||||
named_os_adjustnofile();
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles)
|
||||
== ISC_R_SUCCESS);
|
||||
(void)isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles);
|
||||
if (old_openfiles != named_g_initopenfiles) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
@@ -1162,30 +1159,24 @@ setup(void) {
|
||||
*/
|
||||
if (clienttest)
|
||||
ns_server_setoption(sctx, NS_SERVER_CLIENTTEST, true);
|
||||
if (dropedns)
|
||||
ns_server_setoption(sctx, NS_SERVER_DROPEDNS, true);
|
||||
if (noedns)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOEDNS, true);
|
||||
if (nosoa)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOSOA, true);
|
||||
if (noaa)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOAA, true);
|
||||
if (nonearest)
|
||||
ns_server_setoption(sctx, NS_SERVER_NONEAREST, true);
|
||||
if (notcp)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOTCP, true);
|
||||
if (fixedlocal)
|
||||
ns_server_setoption(sctx, NS_SERVER_FIXEDLOCAL, true);
|
||||
if (disable4)
|
||||
ns_server_setoption(sctx, NS_SERVER_DISABLE4, true);
|
||||
if (disable6)
|
||||
ns_server_setoption(sctx, NS_SERVER_DISABLE6, true);
|
||||
if (dropedns)
|
||||
ns_server_setoption(sctx, NS_SERVER_DROPEDNS, true);
|
||||
if (ednsformerr) /* STD13 server */
|
||||
ns_server_setoption(sctx, NS_SERVER_EDNSFORMERR, true);
|
||||
if (ednsnotimp)
|
||||
ns_server_setoption(sctx, NS_SERVER_EDNSNOTIMP, true);
|
||||
if (ednsrefused)
|
||||
ns_server_setoption(sctx, NS_SERVER_EDNSREFUSED, true);
|
||||
if (fixedlocal)
|
||||
ns_server_setoption(sctx, NS_SERVER_FIXEDLOCAL, true);
|
||||
if (noaa)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOAA, true);
|
||||
if (noedns)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOEDNS, true);
|
||||
if (nonearest)
|
||||
ns_server_setoption(sctx, NS_SERVER_NONEAREST, true);
|
||||
if (nosoa)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOSOA, true);
|
||||
if (notcp)
|
||||
ns_server_setoption(sctx, NS_SERVER_NOTCP, true);
|
||||
if (sigvalinsecs)
|
||||
ns_server_setoption(sctx, NS_SERVER_SIGVALINSECS, true);
|
||||
|
||||
@@ -1339,6 +1330,9 @@ main(int argc, char *argv[]) {
|
||||
if (result != ISC_R_SUCCESS)
|
||||
named_main_earlyfatal("program name too long");
|
||||
|
||||
if (result != ISC_R_SUCCESS)
|
||||
named_main_earlyfatal("failed to build internal symbol table");
|
||||
|
||||
isc_assertion_setcallback(assertion_failed);
|
||||
isc_error_setfatal(library_fatal_error);
|
||||
isc_error_setunexpected(library_unexpected_error);
|
||||
@@ -1388,7 +1382,7 @@ main(int argc, char *argv[]) {
|
||||
named_g_chrootdir);
|
||||
}
|
||||
|
||||
result = isc_mem_create(&named_g_mctx);
|
||||
result = isc_mem_create(0, 0, &named_g_mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
named_main_earlyfatal("isc_mem_create() failed: %s",
|
||||
isc_result_totext(result));
|
||||
|
||||
+33
-30
@@ -10,12 +10,12 @@
|
||||
.\" Title: named.conf
|
||||
.\" Author:
|
||||
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
|
||||
.\" Date: 2018-06-21
|
||||
.\" Date: 2018-05-29
|
||||
.\" Manual: BIND9
|
||||
.\" Source: ISC
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "NAMED\&.CONF" "5" "2018\-06\-21" "ISC" "BIND9"
|
||||
.TH "NAMED\&.CONF" "5" "2018\-05\-29" "ISC" "BIND9"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -231,9 +231,9 @@ options {
|
||||
coresize ( default | unlimited | \fIsizeval\fR );
|
||||
datasize ( default | unlimited | \fIsizeval\fR );
|
||||
deny\-answer\-addresses { \fIaddress_match_element\fR; \&.\&.\&. } [
|
||||
except\-from { \fIstring\fR; \&.\&.\&. } ];
|
||||
deny\-answer\-aliases { \fIstring\fR; \&.\&.\&. } [ except\-from { \fIstring\fR; \&.\&.\&.
|
||||
} ];
|
||||
except\-from { \fIquoted_string\fR; \&.\&.\&. } ];
|
||||
deny\-answer\-aliases { \fIquoted_string\fR; \&.\&.\&. } [ except\-from {
|
||||
\fIquoted_string\fR; \&.\&.\&. } ];
|
||||
dialup ( notify | notify\-passive | passive | refresh | \fIboolean\fR );
|
||||
directory \fIquoted_string\fR;
|
||||
disable\-algorithms \fIstring\fR { \fIstring\fR;
|
||||
@@ -264,12 +264,14 @@ options {
|
||||
dnssec\-secure\-to\-insecure \fIboolean\fR;
|
||||
dnssec\-update\-mode ( maintain | no\-resign );
|
||||
dnssec\-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; \&.\&.\&. };
|
||||
dnstap\-identity ( \fIquoted_string\fR | none | hostname );
|
||||
dnstap\-output ( file | unix ) \fIquoted_string\fR [ size ( unlimited |
|
||||
\fIsize\fR ) ] [ versions ( unlimited | \fIinteger\fR ) ] [ suffix (
|
||||
increment | timestamp ) ];
|
||||
dnstap { ( all | auth | client | forwarder |
|
||||
resolver ) [ ( query | response ) ]; \&.\&.\&. };
|
||||
dnstap\-identity ( \fIquoted_string\fR | none |
|
||||
hostname );
|
||||
dnstap\-output ( file | unix ) \fIquoted_string\fR [
|
||||
size ( unlimited | \fIsize\fR ) ] [ versions (
|
||||
unlimited | \fIinteger\fR ) ] [ suffix ( increment
|
||||
| timestamp ) ];
|
||||
dnstap\-version ( \fIquoted_string\fR | none );
|
||||
dscp \fIinteger\fR;
|
||||
dual\-stack\-servers [ port \fIinteger\fR ] { ( \fIquoted_string\fR [ port
|
||||
@@ -367,7 +369,7 @@ options {
|
||||
preferred\-glue \fIstring\fR;
|
||||
prefetch \fIinteger\fR [ \fIinteger\fR ];
|
||||
provide\-ixfr \fIboolean\fR;
|
||||
qname\-minimization ( strict | relaxed | disabled | off );
|
||||
qname\-minimization ( strict | relaxed | disabled );
|
||||
query\-source ( ( [ address ] ( \fIipv4_address\fR | * ) [ port (
|
||||
\fIinteger\fR | * ) ] ) | ( [ [ address ] ( \fIipv4_address\fR | * ) ]
|
||||
port ( \fIinteger\fR | * ) ) ) [ dscp \fIinteger\fR ];
|
||||
@@ -418,7 +420,7 @@ options {
|
||||
nsip\-enable \fIboolean\fR ] [ nsdname\-enable \fIboolean\fR ] [
|
||||
dnsrps\-enable \fIboolean\fR ] [ dnsrps\-options { \fIunspecified\-text\fR
|
||||
} ];
|
||||
root\-delegation\-only [ exclude { \fIstring\fR; \&.\&.\&. } ];
|
||||
root\-delegation\-only [ exclude { \fIquoted_string\fR; \&.\&.\&. } ];
|
||||
root\-key\-sentinel \fIboolean\fR;
|
||||
rrset\-order { [ class \fIstring\fR ] [ type \fIstring\fR ] [ name
|
||||
\fIquoted_string\fR ] \fIstring\fR \fIstring\fR; \&.\&.\&. };
|
||||
@@ -468,7 +470,6 @@ options {
|
||||
use\-v4\-udp\-ports { \fIportrange\fR; \&.\&.\&. };
|
||||
use\-v6\-udp\-ports { \fIportrange\fR; \&.\&.\&. };
|
||||
v6\-bias \fIinteger\fR;
|
||||
validate\-except { \fIstring\fR; \&.\&.\&. };
|
||||
version ( \fIquoted_string\fR | none );
|
||||
zero\-no\-soa\-ttl \fIboolean\fR;
|
||||
zero\-no\-soa\-ttl\-cache \fIboolean\fR;
|
||||
@@ -596,9 +597,9 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
cleaning\-interval \fIinteger\fR;
|
||||
clients\-per\-query \fIinteger\fR;
|
||||
deny\-answer\-addresses { \fIaddress_match_element\fR; \&.\&.\&. } [
|
||||
except\-from { \fIstring\fR; \&.\&.\&. } ];
|
||||
deny\-answer\-aliases { \fIstring\fR; \&.\&.\&. } [ except\-from { \fIstring\fR; \&.\&.\&.
|
||||
} ];
|
||||
except\-from { \fIquoted_string\fR; \&.\&.\&. } ];
|
||||
deny\-answer\-aliases { \fIquoted_string\fR; \&.\&.\&. } [ except\-from {
|
||||
\fIquoted_string\fR; \&.\&.\&. } ];
|
||||
dialup ( notify | notify\-passive | passive | refresh | \fIboolean\fR );
|
||||
disable\-algorithms \fIstring\fR { \fIstring\fR;
|
||||
\&.\&.\&. };
|
||||
@@ -632,8 +633,8 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
dnssec\-secure\-to\-insecure \fIboolean\fR;
|
||||
dnssec\-update\-mode ( maintain | no\-resign );
|
||||
dnssec\-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; \&.\&.\&. };
|
||||
dnstap { ( all | auth | client | forwarder |
|
||||
resolver ) [ ( query | response ) ]; \&.\&.\&. };
|
||||
dual\-stack\-servers [ port \fIinteger\fR ] { ( \fIquoted_string\fR [ port
|
||||
\fIinteger\fR ] [ dscp \fIinteger\fR ] | \fIipv4_address\fR [ port
|
||||
\fIinteger\fR ] [ dscp \fIinteger\fR ] | \fIipv6_address\fR [ port
|
||||
@@ -711,7 +712,7 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
preferred\-glue \fIstring\fR;
|
||||
prefetch \fIinteger\fR [ \fIinteger\fR ];
|
||||
provide\-ixfr \fIboolean\fR;
|
||||
qname\-minimization ( strict | relaxed | disabled | off );
|
||||
qname\-minimization ( strict | relaxed | disabled );
|
||||
query\-source ( ( [ address ] ( \fIipv4_address\fR | * ) [ port (
|
||||
\fIinteger\fR | * ) ] ) | ( [ [ address ] ( \fIipv4_address\fR | * ) ]
|
||||
port ( \fIinteger\fR | * ) ) ) [ dscp \fIinteger\fR ];
|
||||
@@ -757,7 +758,7 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
nsip\-enable \fIboolean\fR ] [ nsdname\-enable \fIboolean\fR ] [
|
||||
dnsrps\-enable \fIboolean\fR ] [ dnsrps\-options { \fIunspecified\-text\fR
|
||||
} ];
|
||||
root\-delegation\-only [ exclude { \fIstring\fR; \&.\&.\&. } ];
|
||||
root\-delegation\-only [ exclude { \fIquoted_string\fR; \&.\&.\&. } ];
|
||||
root\-key\-sentinel \fIboolean\fR;
|
||||
rrset\-order { [ class \fIstring\fR ] [ type \fIstring\fR ] [ name
|
||||
\fIquoted_string\fR ] \fIstring\fR \fIstring\fR; \&.\&.\&. };
|
||||
@@ -819,7 +820,6 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
update\-check\-ksk \fIboolean\fR;
|
||||
use\-alt\-transfer\-source \fIboolean\fR;
|
||||
v6\-bias \fIinteger\fR;
|
||||
validate\-except { \fIstring\fR; \&.\&.\&. };
|
||||
zero\-no\-soa\-ttl \fIboolean\fR;
|
||||
zero\-no\-soa\-ttl\-cache \fIboolean\fR;
|
||||
zone \fIstring\fR [ \fIclass\fR ] {
|
||||
@@ -884,6 +884,7 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
max\-zone\-ttl ( unlimited | \fIttlval\fR );
|
||||
min\-refresh\-time \fIinteger\fR;
|
||||
min\-retry\-time \fIinteger\fR;
|
||||
mirror \fIboolean\fR;
|
||||
multi\-master \fIboolean\fR;
|
||||
notify ( explicit | master\-only | \fIboolean\fR );
|
||||
notify\-delay \fIinteger\fR;
|
||||
@@ -898,8 +899,9 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
request\-expire \fIboolean\fR;
|
||||
request\-ixfr \fIboolean\fR;
|
||||
serial\-update\-method ( date | increment | unixtime );
|
||||
server\-addresses { ( \fIipv4_address\fR | \fIipv6_address\fR ); \&.\&.\&. };
|
||||
server\-names { \fIstring\fR; \&.\&.\&. };
|
||||
server\-addresses { ( \fIipv4_address\fR | \fIipv6_address\fR ) [
|
||||
port \fIinteger\fR ]; \&.\&.\&. };
|
||||
server\-names { \fIquoted_string\fR; \&.\&.\&. };
|
||||
sig\-signing\-nodes \fIinteger\fR;
|
||||
sig\-signing\-signatures \fIinteger\fR;
|
||||
sig\-signing\-type \fIinteger\fR;
|
||||
@@ -909,7 +911,7 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
transfer\-source\-v6 ( \fIipv6_address\fR | * ) [ port (
|
||||
\fIinteger\fR | * ) ] [ dscp \fIinteger\fR ];
|
||||
try\-tcp\-refresh \fIboolean\fR;
|
||||
type ( primary | master | secondary | slave | mirror |
|
||||
type ( primary | master | secondary | slave |
|
||||
delegation\-only | forward | hint | redirect |
|
||||
static\-stub | stub );
|
||||
update\-check\-ksk \fIboolean\fR;
|
||||
@@ -992,6 +994,7 @@ zone \fIstring\fR [ \fIclass\fR ] {
|
||||
max\-zone\-ttl ( unlimited | \fIttlval\fR );
|
||||
min\-refresh\-time \fIinteger\fR;
|
||||
min\-retry\-time \fIinteger\fR;
|
||||
mirror \fIboolean\fR;
|
||||
multi\-master \fIboolean\fR;
|
||||
notify ( explicit | master\-only | \fIboolean\fR );
|
||||
notify\-delay \fIinteger\fR;
|
||||
@@ -1004,8 +1007,9 @@ zone \fIstring\fR [ \fIclass\fR ] {
|
||||
request\-expire \fIboolean\fR;
|
||||
request\-ixfr \fIboolean\fR;
|
||||
serial\-update\-method ( date | increment | unixtime );
|
||||
server\-addresses { ( \fIipv4_address\fR | \fIipv6_address\fR ); \&.\&.\&. };
|
||||
server\-names { \fIstring\fR; \&.\&.\&. };
|
||||
server\-addresses { ( \fIipv4_address\fR | \fIipv6_address\fR ) [ port
|
||||
\fIinteger\fR ]; \&.\&.\&. };
|
||||
server\-names { \fIquoted_string\fR; \&.\&.\&. };
|
||||
sig\-signing\-nodes \fIinteger\fR;
|
||||
sig\-signing\-signatures \fIinteger\fR;
|
||||
sig\-signing\-type \fIinteger\fR;
|
||||
@@ -1015,9 +1019,8 @@ zone \fIstring\fR [ \fIclass\fR ] {
|
||||
transfer\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR | * )
|
||||
] [ dscp \fIinteger\fR ];
|
||||
try\-tcp\-refresh \fIboolean\fR;
|
||||
type ( primary | master | secondary | slave | mirror |
|
||||
delegation\-only | forward | hint | redirect | 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
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
<refentry xmlns:db="http://docbook.org/ns/docbook" version="5.0" xml:id="man.named.conf">
|
||||
<info>
|
||||
<date>2018-10-23</date>
|
||||
<date>2018-06-21</date>
|
||||
</info>
|
||||
<refentryinfo>
|
||||
<corpname>ISC</corpname>
|
||||
@@ -192,7 +192,6 @@ options {
|
||||
] [ dscp <replaceable>integer</replaceable> ];
|
||||
alt-transfer-source-v6 ( <replaceable>ipv6_address</replaceable> | * ) [ port ( <replaceable>integer</replaceable> |
|
||||
* ) ] [ dscp <replaceable>integer</replaceable> ];
|
||||
answer-cookie <replaceable>boolean</replaceable>;
|
||||
attach-cache <replaceable>string</replaceable>;
|
||||
auth-nxdomain <replaceable>boolean</replaceable>; // default changed
|
||||
auto-dnssec ( allow | maintain | off );
|
||||
@@ -258,8 +257,8 @@ options {
|
||||
dnssec-secure-to-insecure <replaceable>boolean</replaceable>;
|
||||
dnssec-update-mode ( maintain | no-resign );
|
||||
dnssec-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [
|
||||
( query | response ) ]; ... };
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; ... };
|
||||
dnstap-identity ( <replaceable>quoted_string</replaceable> | none | hostname );
|
||||
dnstap-output ( file | unix ) <replaceable>quoted_string</replaceable> [ size ( unlimited |
|
||||
<replaceable>size</replaceable> ) ] [ versions ( unlimited | <replaceable>integer</replaceable> ) ] [ suffix (
|
||||
@@ -610,8 +609,8 @@ view <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
dnssec-secure-to-insecure <replaceable>boolean</replaceable>;
|
||||
dnssec-update-mode ( maintain | no-resign );
|
||||
dnssec-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [
|
||||
( query | response ) ]; ... };
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; ... };
|
||||
dual-stack-servers [ port <replaceable>integer</replaceable> ] { ( <replaceable>quoted_string</replaceable> [ port
|
||||
<replaceable>integer</replaceable> ] [ dscp <replaceable>integer</replaceable> ] | <replaceable>ipv4_address</replaceable> [ port
|
||||
<replaceable>integer</replaceable> ] [ dscp <replaceable>integer</replaceable> ] | <replaceable>ipv6_address</replaceable> [ port
|
||||
@@ -862,6 +861,7 @@ view <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
max-zone-ttl ( unlimited | <replaceable>ttlval</replaceable> );
|
||||
min-refresh-time <replaceable>integer</replaceable>;
|
||||
min-retry-time <replaceable>integer</replaceable>;
|
||||
mirror <replaceable>boolean</replaceable>;
|
||||
multi-master <replaceable>boolean</replaceable>;
|
||||
notify ( explicit | master-only | <replaceable>boolean</replaceable> );
|
||||
notify-delay <replaceable>integer</replaceable>;
|
||||
@@ -876,7 +876,8 @@ view <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
request-expire <replaceable>boolean</replaceable>;
|
||||
request-ixfr <replaceable>boolean</replaceable>;
|
||||
serial-update-method ( date | increment | unixtime );
|
||||
server-addresses { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> ); ... };
|
||||
server-addresses { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> ) [
|
||||
port <replaceable>integer</replaceable> ]; ... };
|
||||
server-names { <replaceable>string</replaceable>; ... };
|
||||
sig-signing-nodes <replaceable>integer</replaceable>;
|
||||
sig-signing-signatures <replaceable>integer</replaceable>;
|
||||
@@ -887,15 +888,15 @@ view <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
transfer-source-v6 ( <replaceable>ipv6_address</replaceable> | * ) [ port (
|
||||
<replaceable>integer</replaceable> | * ) ] [ dscp <replaceable>integer</replaceable> ];
|
||||
try-tcp-refresh <replaceable>boolean</replaceable>;
|
||||
type ( primary | master | secondary | slave | mirror |
|
||||
type ( primary | master | secondary | slave |
|
||||
delegation-only | forward | hint | redirect |
|
||||
static-stub | stub );
|
||||
update-check-ksk <replaceable>boolean</replaceable>;
|
||||
update-policy ( local | { ( deny | grant ) <replaceable>string</replaceable> (
|
||||
6to4-self | external | krb5-self | krb5-selfsub |
|
||||
krb5-subdomain | ms-self | ms-selfsub | ms-subdomain |
|
||||
name | self | selfsub | selfwild | subdomain | tcp-self
|
||||
| wildcard | zonesub ) [ <replaceable>string</replaceable> ] <replaceable>rrtypelist</replaceable>; ... };
|
||||
6to4-self | external | krb5-self | krb5-subdomain |
|
||||
ms-self | ms-subdomain | name | self | selfsub |
|
||||
selfwild | subdomain | tcp-self | wildcard | zonesub )
|
||||
[ <replaceable>string</replaceable> ] <replaceable>rrtypelist</replaceable>; ... };
|
||||
use-alt-transfer-source <replaceable>boolean</replaceable>;
|
||||
zero-no-soa-ttl <replaceable>boolean</replaceable>;
|
||||
zone-statistics ( full | terse | none | <replaceable>boolean</replaceable> );
|
||||
@@ -966,6 +967,7 @@ zone <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
max-zone-ttl ( unlimited | <replaceable>ttlval</replaceable> );
|
||||
min-refresh-time <replaceable>integer</replaceable>;
|
||||
min-retry-time <replaceable>integer</replaceable>;
|
||||
mirror <replaceable>boolean</replaceable>;
|
||||
multi-master <replaceable>boolean</replaceable>;
|
||||
notify ( explicit | master-only | <replaceable>boolean</replaceable> );
|
||||
notify-delay <replaceable>integer</replaceable>;
|
||||
@@ -978,7 +980,8 @@ zone <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
request-expire <replaceable>boolean</replaceable>;
|
||||
request-ixfr <replaceable>boolean</replaceable>;
|
||||
serial-update-method ( date | increment | unixtime );
|
||||
server-addresses { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> ); ... };
|
||||
server-addresses { ( <replaceable>ipv4_address</replaceable> | <replaceable>ipv6_address</replaceable> ) [ port
|
||||
<replaceable>integer</replaceable> ]; ... };
|
||||
server-names { <replaceable>string</replaceable>; ... };
|
||||
sig-signing-nodes <replaceable>integer</replaceable>;
|
||||
sig-signing-signatures <replaceable>integer</replaceable>;
|
||||
@@ -989,15 +992,13 @@ zone <replaceable>string</replaceable> [ <replaceable>class</replaceable> ] {
|
||||
transfer-source-v6 ( <replaceable>ipv6_address</replaceable> | * ) [ port ( <replaceable>integer</replaceable> | * )
|
||||
] [ dscp <replaceable>integer</replaceable> ];
|
||||
try-tcp-refresh <replaceable>boolean</replaceable>;
|
||||
type ( primary | master | secondary | slave | mirror |
|
||||
delegation-only | forward | hint | redirect | static-stub |
|
||||
stub );
|
||||
type ( primary | master | secondary | slave | delegation-only |
|
||||
forward | hint | redirect | static-stub | stub );
|
||||
update-check-ksk <replaceable>boolean</replaceable>;
|
||||
update-policy ( local | { ( deny | grant ) <replaceable>string</replaceable> ( 6to4-self |
|
||||
external | krb5-self | krb5-selfsub | krb5-subdomain | ms-self
|
||||
| ms-selfsub | ms-subdomain | name | self | selfsub | selfwild
|
||||
| subdomain | tcp-self | wildcard | zonesub ) [ <replaceable>string</replaceable> ]
|
||||
<replaceable>rrtypelist</replaceable>; ... };
|
||||
external | krb5-self | krb5-subdomain | ms-self | ms-subdomain
|
||||
| name | self | selfsub | selfwild | subdomain | tcp-self |
|
||||
wildcard | zonesub ) [ <replaceable>string</replaceable> ] <replaceable>rrtypelist</replaceable>; ... };
|
||||
use-alt-transfer-source <replaceable>boolean</replaceable>;
|
||||
zero-no-soa-ttl <replaceable>boolean</replaceable>;
|
||||
zone-statistics ( full | terse | none | <replaceable>boolean</replaceable> );
|
||||
|
||||
+31
-28
@@ -212,9 +212,9 @@ options
|
||||
coresize ( default | unlimited | <em class="replaceable"><code>sizeval</code></em> );<br>
|
||||
datasize ( default | unlimited | <em class="replaceable"><code>sizeval</code></em> );<br>
|
||||
deny-answer-addresses { <em class="replaceable"><code>address_match_element</code></em>; ... } [<br>
|
||||
except-from { <em class="replaceable"><code>string</code></em>; ... } ];<br>
|
||||
deny-answer-aliases { <em class="replaceable"><code>string</code></em>; ... } [ except-from { <em class="replaceable"><code>string</code></em>; ...<br>
|
||||
} ];<br>
|
||||
except-from { <em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
deny-answer-aliases { <em class="replaceable"><code>quoted_string</code></em>; ... } [ except-from {<br>
|
||||
<em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
dialup ( notify | notify-passive | passive | refresh | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
directory <em class="replaceable"><code>quoted_string</code></em>;<br>
|
||||
disable-algorithms <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>;<br>
|
||||
@@ -245,12 +245,14 @@ options
|
||||
dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
dnssec-update-mode ( maintain | no-resign );<br>
|
||||
dnssec-validation ( yes | no | auto );<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |<br>
|
||||
response ) ]; ... };<br>
|
||||
dnstap-identity ( <em class="replaceable"><code>quoted_string</code></em> | none | hostname );<br>
|
||||
dnstap-output ( file | unix ) <em class="replaceable"><code>quoted_string</code></em> [ size ( unlimited |<br>
|
||||
<em class="replaceable"><code>size</code></em> ) ] [ versions ( unlimited | <em class="replaceable"><code>integer</code></em> ) ] [ suffix (<br>
|
||||
increment | timestamp ) ];<br>
|
||||
dnstap { ( all | auth | client | forwarder |<br>
|
||||
resolver ) [ ( query | response ) ]; ... };<br>
|
||||
dnstap-identity ( <em class="replaceable"><code>quoted_string</code></em> | none |<br>
|
||||
hostname );<br>
|
||||
dnstap-output ( file | unix ) <em class="replaceable"><code>quoted_string</code></em> [<br>
|
||||
size ( unlimited | <em class="replaceable"><code>size</code></em> ) ] [ versions (<br>
|
||||
unlimited | <em class="replaceable"><code>integer</code></em> ) ] [ suffix ( increment<br>
|
||||
| timestamp ) ];<br>
|
||||
dnstap-version ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
|
||||
dscp <em class="replaceable"><code>integer</code></em>;<br>
|
||||
dual-stack-servers [ port <em class="replaceable"><code>integer</code></em> ] { ( <em class="replaceable"><code>quoted_string</code></em> [ port<br>
|
||||
@@ -348,7 +350,7 @@ options
|
||||
preferred-glue <em class="replaceable"><code>string</code></em>;<br>
|
||||
prefetch <em class="replaceable"><code>integer</code></em> [ <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
provide-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
qname-minimization ( strict | relaxed | disabled | off );<br>
|
||||
qname-minimization ( strict | relaxed | disabled );<br>
|
||||
query-source ( ( [ address ] ( <em class="replaceable"><code>ipv4_address</code></em> | * ) [ port (<br>
|
||||
<em class="replaceable"><code>integer</code></em> | * ) ] ) | ( [ [ address ] ( <em class="replaceable"><code>ipv4_address</code></em> | * ) ]<br>
|
||||
port ( <em class="replaceable"><code>integer</code></em> | * ) ) ) [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
@@ -399,7 +401,7 @@ options
|
||||
nsip-enable <em class="replaceable"><code>boolean</code></em> ] [ nsdname-enable <em class="replaceable"><code>boolean</code></em> ] [<br>
|
||||
dnsrps-enable <em class="replaceable"><code>boolean</code></em> ] [ dnsrps-options { <em class="replaceable"><code>unspecified-text</code></em><br>
|
||||
} ];<br>
|
||||
root-delegation-only [ exclude { <em class="replaceable"><code>string</code></em>; ... } ];<br>
|
||||
root-delegation-only [ exclude { <em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
root-key-sentinel <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
rrset-order { [ class <em class="replaceable"><code>string</code></em> ] [ type <em class="replaceable"><code>string</code></em> ] [ name<br>
|
||||
<em class="replaceable"><code>quoted_string</code></em> ] <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
@@ -449,7 +451,6 @@ options
|
||||
use-v4-udp-ports { <em class="replaceable"><code>portrange</code></em>; ... };<br>
|
||||
use-v6-udp-ports { <em class="replaceable"><code>portrange</code></em>; ... };<br>
|
||||
v6-bias <em class="replaceable"><code>integer</code></em>;<br>
|
||||
validate-except { <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
version ( <em class="replaceable"><code>quoted_string</code></em> | none );<br>
|
||||
zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zero-no-soa-ttl-cache <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
@@ -565,9 +566,9 @@ view
|
||||
cleaning-interval <em class="replaceable"><code>integer</code></em>;<br>
|
||||
clients-per-query <em class="replaceable"><code>integer</code></em>;<br>
|
||||
deny-answer-addresses { <em class="replaceable"><code>address_match_element</code></em>; ... } [<br>
|
||||
except-from { <em class="replaceable"><code>string</code></em>; ... } ];<br>
|
||||
deny-answer-aliases { <em class="replaceable"><code>string</code></em>; ... } [ except-from { <em class="replaceable"><code>string</code></em>; ...<br>
|
||||
} ];<br>
|
||||
except-from { <em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
deny-answer-aliases { <em class="replaceable"><code>quoted_string</code></em>; ... } [ except-from {<br>
|
||||
<em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
dialup ( notify | notify-passive | passive | refresh | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
disable-algorithms <em class="replaceable"><code>string</code></em> { <em class="replaceable"><code>string</code></em>;<br>
|
||||
... };<br>
|
||||
@@ -601,8 +602,8 @@ view
|
||||
dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
dnssec-update-mode ( maintain | no-resign );<br>
|
||||
dnssec-validation ( yes | no | auto );<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |<br>
|
||||
response ) ]; ... };<br>
|
||||
dnstap { ( all | auth | client | forwarder |<br>
|
||||
resolver ) [ ( query | response ) ]; ... };<br>
|
||||
dual-stack-servers [ port <em class="replaceable"><code>integer</code></em> ] { ( <em class="replaceable"><code>quoted_string</code></em> [ port<br>
|
||||
<em class="replaceable"><code>integer</code></em> ] [ dscp <em class="replaceable"><code>integer</code></em> ] | <em class="replaceable"><code>ipv4_address</code></em> [ port<br>
|
||||
<em class="replaceable"><code>integer</code></em> ] [ dscp <em class="replaceable"><code>integer</code></em> ] | <em class="replaceable"><code>ipv6_address</code></em> [ port<br>
|
||||
@@ -680,7 +681,7 @@ view
|
||||
preferred-glue <em class="replaceable"><code>string</code></em>;<br>
|
||||
prefetch <em class="replaceable"><code>integer</code></em> [ <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
provide-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
qname-minimization ( strict | relaxed | disabled | off );<br>
|
||||
qname-minimization ( strict | relaxed | disabled );<br>
|
||||
query-source ( ( [ address ] ( <em class="replaceable"><code>ipv4_address</code></em> | * ) [ port (<br>
|
||||
<em class="replaceable"><code>integer</code></em> | * ) ] ) | ( [ [ address ] ( <em class="replaceable"><code>ipv4_address</code></em> | * ) ]<br>
|
||||
port ( <em class="replaceable"><code>integer</code></em> | * ) ) ) [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
@@ -726,7 +727,7 @@ view
|
||||
nsip-enable <em class="replaceable"><code>boolean</code></em> ] [ nsdname-enable <em class="replaceable"><code>boolean</code></em> ] [<br>
|
||||
dnsrps-enable <em class="replaceable"><code>boolean</code></em> ] [ dnsrps-options { <em class="replaceable"><code>unspecified-text</code></em><br>
|
||||
} ];<br>
|
||||
root-delegation-only [ exclude { <em class="replaceable"><code>string</code></em>; ... } ];<br>
|
||||
root-delegation-only [ exclude { <em class="replaceable"><code>quoted_string</code></em>; ... } ];<br>
|
||||
root-key-sentinel <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
rrset-order { [ class <em class="replaceable"><code>string</code></em> ] [ type <em class="replaceable"><code>string</code></em> ] [ name<br>
|
||||
<em class="replaceable"><code>quoted_string</code></em> ] <em class="replaceable"><code>string</code></em> <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
@@ -788,7 +789,6 @@ view
|
||||
update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
v6-bias <em class="replaceable"><code>integer</code></em>;<br>
|
||||
validate-except { <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zero-no-soa-ttl-cache <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zone <em class="replaceable"><code>string</code></em> [ <em class="replaceable"><code>class</code></em> ] {<br>
|
||||
@@ -853,6 +853,7 @@ view
|
||||
max-zone-ttl ( unlimited | <em class="replaceable"><code>ttlval</code></em> );<br>
|
||||
min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
mirror <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
multi-master <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
notify ( explicit | master-only | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
notify-delay <em class="replaceable"><code>integer</code></em>;<br>
|
||||
@@ -867,8 +868,9 @@ view
|
||||
request-expire <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
serial-update-method ( date | increment | unixtime );<br>
|
||||
server-addresses { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ); ... };<br>
|
||||
server-names { <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
server-addresses { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [<br>
|
||||
port <em class="replaceable"><code>integer</code></em> ]; ... };<br>
|
||||
server-names { <em class="replaceable"><code>quoted_string</code></em>; ... };<br>
|
||||
sig-signing-nodes <em class="replaceable"><code>integer</code></em>;<br>
|
||||
sig-signing-signatures <em class="replaceable"><code>integer</code></em>;<br>
|
||||
sig-signing-type <em class="replaceable"><code>integer</code></em>;<br>
|
||||
@@ -878,7 +880,7 @@ view
|
||||
transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [ port (<br>
|
||||
<em class="replaceable"><code>integer</code></em> | * ) ] [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
try-tcp-refresh <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
type ( primary | master | secondary | slave | mirror |<br>
|
||||
type ( primary | master | secondary | slave |<br>
|
||||
delegation-only | forward | hint | redirect |<br>
|
||||
static-stub | stub );<br>
|
||||
update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
@@ -958,6 +960,7 @@ zone
|
||||
max-zone-ttl ( unlimited | <em class="replaceable"><code>ttlval</code></em> );<br>
|
||||
min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
mirror <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
multi-master <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
notify ( explicit | master-only | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
notify-delay <em class="replaceable"><code>integer</code></em>;<br>
|
||||
@@ -970,8 +973,9 @@ zone
|
||||
request-expire <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
serial-update-method ( date | increment | unixtime );<br>
|
||||
server-addresses { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ); ... };<br>
|
||||
server-names { <em class="replaceable"><code>string</code></em>; ... };<br>
|
||||
server-addresses { ( <em class="replaceable"><code>ipv4_address</code></em> | <em class="replaceable"><code>ipv6_address</code></em> ) [ port<br>
|
||||
<em class="replaceable"><code>integer</code></em> ]; ... };<br>
|
||||
server-names { <em class="replaceable"><code>quoted_string</code></em>; ... };<br>
|
||||
sig-signing-nodes <em class="replaceable"><code>integer</code></em>;<br>
|
||||
sig-signing-signatures <em class="replaceable"><code>integer</code></em>;<br>
|
||||
sig-signing-type <em class="replaceable"><code>integer</code></em>;<br>
|
||||
@@ -981,9 +985,8 @@ zone
|
||||
transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [ port ( <em class="replaceable"><code>integer</code></em> | * )<br>
|
||||
] [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
try-tcp-refresh <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
type ( primary | master | secondary | slave | mirror |<br>
|
||||
delegation-only | forward | hint | redirect | static-stub |<br>
|
||||
stub );<br>
|
||||
type ( primary | master | secondary | slave | delegation-only |<br>
|
||||
forward | hint | redirect | static-stub | stub );<br>
|
||||
update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
update-policy ( local | { ( deny | grant ) <em class="replaceable"><code>string</code></em> ( 6to4-self |<br>
|
||||
external | krb5-self | krb5-subdomain | ms-self | ms-subdomain<br>
|
||||
|
||||
+122
-323
@@ -30,7 +30,7 @@
|
||||
#include <isc/file.h>
|
||||
#include <isc/hash.h>
|
||||
#include <isc/hex.h>
|
||||
#include <isc/hmac.h>
|
||||
#include <isc/hmacsha.h>
|
||||
#include <isc/httpd.h>
|
||||
#include <isc/lex.h>
|
||||
#include <isc/meminfo.h>
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <isc/print.h>
|
||||
#include <isc/refcount.h>
|
||||
#include <isc/resource.h>
|
||||
#include <isc/sha2.h>
|
||||
#include <isc/socket.h>
|
||||
#include <isc/stat.h>
|
||||
#include <isc/stats.h>
|
||||
@@ -937,8 +938,7 @@ configure_view_dnsseckeys(dns_view_t *view, const cfg_obj_t *vconfig,
|
||||
|
||||
/* We don't need trust anchors for the _bind view */
|
||||
if (strcmp(view->name, "_bind") == 0 &&
|
||||
view->rdclass == dns_rdataclass_chaos)
|
||||
{
|
||||
view->rdclass == dns_rdataclass_chaos) {
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -1145,7 +1145,6 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
sa = *(cfg_obj_assockaddr(obj));
|
||||
@@ -1167,7 +1166,6 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_SUCCESS);
|
||||
@@ -1275,22 +1273,20 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) {
|
||||
obj = cfg_tuple_get(ent, "ordering");
|
||||
INSIST(cfg_obj_isstring(obj));
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (!strcasecmp(str, "fixed")) {
|
||||
if (!strcasecmp(str, "fixed"))
|
||||
#if DNS_RDATASET_FIXED
|
||||
mode = DNS_RDATASETATTR_FIXEDORDER;
|
||||
#else
|
||||
mode = DNS_RDATASETATTR_CYCLIC;
|
||||
#endif /* DNS_RDATASET_FIXED */
|
||||
} else if (!strcasecmp(str, "random")) {
|
||||
else if (!strcasecmp(str, "random"))
|
||||
mode = DNS_RDATASETATTR_RANDOMIZE;
|
||||
} else if (!strcasecmp(str, "cyclic")) {
|
||||
else if (!strcasecmp(str, "cyclic"))
|
||||
mode = DNS_RDATASETATTR_CYCLIC;
|
||||
} else if (!strcasecmp(str, "none")) {
|
||||
else if (!strcasecmp(str, "none"))
|
||||
mode = DNS_RDATASETATTR_NONE;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/*
|
||||
* "*" should match everything including the root (BIND 8 compat).
|
||||
@@ -1422,16 +1418,14 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) {
|
||||
(void)cfg_map_get(cpeer, "transfer-format", &obj);
|
||||
if (obj != NULL) {
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(str, "many-answers") == 0) {
|
||||
if (strcasecmp(str, "many-answers") == 0)
|
||||
CHECK(dns_peer_settransferformat(peer,
|
||||
dns_many_answers));
|
||||
} else if (strcasecmp(str, "one-answer") == 0) {
|
||||
else if (strcasecmp(str, "one-answer") == 0)
|
||||
CHECK(dns_peer_settransferformat(peer,
|
||||
dns_one_answer));
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -2724,7 +2718,7 @@ catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin,
|
||||
catz_chgzone_event_t *event;
|
||||
isc_task_t *task;
|
||||
isc_result_t result;
|
||||
isc_taskaction_t action = NULL;
|
||||
isc_taskaction_t action;
|
||||
|
||||
switch (type) {
|
||||
case DNS_EVENT_CATZADDZONE:
|
||||
@@ -3417,14 +3411,11 @@ configure_dnstap(const cfg_obj_t **maps, dns_view_t *view) {
|
||||
dt |= DNS_DTTYPE_RQ|DNS_DTTYPE_RR;
|
||||
} else if (strcasecmp(str, "forwarder") == 0) {
|
||||
dt |= DNS_DTTYPE_FQ|DNS_DTTYPE_FR;
|
||||
} else if (strcasecmp(str, "update") == 0) {
|
||||
dt |= DNS_DTTYPE_UQ|DNS_DTTYPE_UR;
|
||||
} else if (strcasecmp(str, "all") == 0) {
|
||||
dt |= DNS_DTTYPE_CQ|DNS_DTTYPE_CR|
|
||||
DNS_DTTYPE_AQ|DNS_DTTYPE_AR|
|
||||
DNS_DTTYPE_RQ|DNS_DTTYPE_RR|
|
||||
DNS_DTTYPE_FQ|DNS_DTTYPE_FR|
|
||||
DNS_DTTYPE_UQ|DNS_DTTYPE_UR;
|
||||
DNS_DTTYPE_FQ|DNS_DTTYPE_FR;
|
||||
}
|
||||
|
||||
obj2 = cfg_tuple_get(obj, "mode");
|
||||
@@ -3949,10 +3940,8 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->checknames = false;
|
||||
} else if (strcasecmp(str, "ignore") == 0) {
|
||||
view->checknames = false;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "zero-no-soa-ttl-cache", &obj);
|
||||
@@ -4074,38 +4063,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->acceptexpired = cfg_obj_asboolean(obj);
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "dnssec-enable", &obj);
|
||||
result = named_config_get(maps, "dnssec-validation", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->enablednssec = cfg_obj_asboolean(obj);
|
||||
|
||||
obj = NULL;
|
||||
/* 'optionmaps', not 'maps': don't check named_g_defaults yet */
|
||||
(void)named_config_get(optionmaps, "dnssec-validation", &obj);
|
||||
if (obj == NULL) {
|
||||
/*
|
||||
* If dnssec-enable is yes, then we default to
|
||||
* VALIDATION_DEFAULT as set in config.c. Otherwise
|
||||
* we default to "no".
|
||||
*/
|
||||
if (view->enablednssec) {
|
||||
(void)cfg_map_get(named_g_defaults,
|
||||
"dnssec-validation", &obj);
|
||||
INSIST(obj != NULL);
|
||||
} else {
|
||||
view->enablevalidation = false;
|
||||
}
|
||||
}
|
||||
if (obj != NULL) {
|
||||
if (cfg_obj_isboolean(obj)) {
|
||||
view->enablevalidation = cfg_obj_asboolean(obj);
|
||||
} else {
|
||||
/*
|
||||
* If dnssec-validation is set but not boolean,
|
||||
* then it must be "auto"
|
||||
*/
|
||||
view->enablevalidation = true;
|
||||
auto_root = true;
|
||||
}
|
||||
if (cfg_obj_isboolean(obj)) {
|
||||
view->enablevalidation = cfg_obj_asboolean(obj);
|
||||
} else {
|
||||
/* If dnssec-validation is not boolean, it must be "auto" */
|
||||
view->enablevalidation = true;
|
||||
auto_root = true;
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -4236,9 +4201,9 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
* cache, for the main cache memory and the heap
|
||||
* memory.
|
||||
*/
|
||||
CHECK(isc_mem_create(&cmctx));
|
||||
CHECK(isc_mem_create(0, 0, &cmctx));
|
||||
isc_mem_setname(cmctx, "cache", NULL);
|
||||
CHECK(isc_mem_create(&hmctx));
|
||||
CHECK(isc_mem_create(0, 0, &hmctx));
|
||||
isc_mem_setname(hmctx, "cache_heap", NULL);
|
||||
CHECK(dns_cache_create(cmctx, hmctx, named_g_taskmgr,
|
||||
named_g_timermgr, view->rdclass,
|
||||
@@ -4364,16 +4329,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
obj2 = cfg_tuple_get(obj, "response");
|
||||
if (!cfg_obj_isvoid(obj2)) {
|
||||
const char *resp = cfg_obj_asstring(obj2);
|
||||
isc_result_t r = DNS_R_SERVFAIL;
|
||||
isc_result_t r;
|
||||
|
||||
if (strcasecmp(resp, "drop") == 0) {
|
||||
if (strcasecmp(resp, "drop") == 0)
|
||||
r = DNS_R_DROP;
|
||||
} else if (strcasecmp(resp, "fail") == 0) {
|
||||
else if (strcasecmp(resp, "fail") == 0)
|
||||
r = DNS_R_SERVFAIL;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
dns_resolver_setquotaresponse(view->resolver,
|
||||
dns_quotatype_server, r);
|
||||
@@ -4719,24 +4682,20 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->minimalresponses = dns_minimal_noauth;
|
||||
} else if (strcasecmp(str, "no-auth-recursive") == 0) {
|
||||
view->minimalresponses = dns_minimal_noauthrec;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "transfer-format", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(str, "many-answers") == 0) {
|
||||
if (strcasecmp(str, "many-answers") == 0)
|
||||
view->transfer_format = dns_many_answers;
|
||||
} else if (strcasecmp(str, "one-answer") == 0) {
|
||||
else if (strcasecmp(str, "one-answer") == 0)
|
||||
view->transfer_format = dns_one_answer;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "trust-anchor-telemetry", &obj);
|
||||
@@ -4748,12 +4707,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->root_key_sentinel = cfg_obj_asboolean(obj);
|
||||
|
||||
CHECK(configure_view_acl(vconfig, config, named_g_config,
|
||||
"allow-query-cache-on", NULL, actx,
|
||||
named_g_mctx, &view->cacheonacl));
|
||||
/*
|
||||
* Set the "allow-query", "allow-query-cache", "allow-recursion",
|
||||
* "allow-recursion-on" and "allow-query-cache-on" ACLs if
|
||||
* configured in named.conf, but NOT from the global defaults.
|
||||
* This is done by leaving the third argument to configure_view_acl()
|
||||
* NULL.
|
||||
* and "allow-recursion-on" ACLs if configured in named.conf, but
|
||||
* NOT from the global defaults. This is done by leaving the third
|
||||
* argument to configure_view_acl() NULL.
|
||||
*
|
||||
* We ignore the global defaults here because these ACLs
|
||||
* can inherit from each other. If any are still unset after
|
||||
@@ -4770,10 +4731,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
CHECK(configure_view_acl(vconfig, config, NULL,
|
||||
"allow-query-cache", NULL, actx,
|
||||
named_g_mctx, &view->cacheacl));
|
||||
/* named.conf only */
|
||||
CHECK(configure_view_acl(vconfig, config, NULL,
|
||||
"allow-query-cache-on", NULL, actx,
|
||||
named_g_mctx, &view->cacheonacl));
|
||||
|
||||
if (strcmp(view->name, "_bind") != 0 &&
|
||||
view->rdclass != dns_rdataclass_chaos)
|
||||
@@ -4792,6 +4749,8 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
/*
|
||||
* "allow-query-cache" inherits from "allow-recursion" if set,
|
||||
* otherwise from "allow-query" if set.
|
||||
* "allow-recursion" inherits from "allow-query-cache" if set,
|
||||
* otherwise from "allow-query" if set.
|
||||
*/
|
||||
if (view->cacheacl == NULL) {
|
||||
if (view->recursionacl != NULL) {
|
||||
@@ -4802,11 +4761,6 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
&view->cacheacl);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* "allow-recursion" inherits from "allow-query-cache" if set,
|
||||
* otherwise from "allow-query" if set.
|
||||
*/
|
||||
if (view->recursionacl == NULL) {
|
||||
if (view->cacheacl != NULL) {
|
||||
dns_acl_attach(view->cacheacl,
|
||||
@@ -4818,32 +4772,10 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
}
|
||||
|
||||
/*
|
||||
* "allow-query-cache-on" inherits from "allow-recursion-on"
|
||||
* if set.
|
||||
* If any are still unset, we now get default "allow-recursion",
|
||||
* "allow-recursion-on" and "allow-query-cache" ACLs from
|
||||
* the global config.
|
||||
*/
|
||||
if (view->cacheonacl == NULL) {
|
||||
if (view->recursiononacl != NULL) {
|
||||
dns_acl_attach(view->recursiononacl,
|
||||
&view->cacheonacl);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* "allow-recursion-on" inherits from "allow-query-cache-on"
|
||||
* if set.
|
||||
*/
|
||||
if (view->recursiononacl == NULL) {
|
||||
if (view->cacheonacl != NULL) {
|
||||
dns_acl_attach(view->cacheonacl,
|
||||
&view->recursiononacl);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If any are still unset at this point, we now get default
|
||||
* values for from the global config.
|
||||
*/
|
||||
|
||||
if (view->recursionacl == NULL) {
|
||||
/* global default only */
|
||||
CHECK(configure_view_acl(NULL, NULL, named_g_config,
|
||||
@@ -4865,30 +4797,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
actx, named_g_mctx,
|
||||
&view->cacheacl));
|
||||
}
|
||||
if (view->cacheonacl == NULL) {
|
||||
/* global default only */
|
||||
CHECK(configure_view_acl(NULL, NULL, named_g_config,
|
||||
"allow-query-cache-on", NULL,
|
||||
actx, named_g_mctx,
|
||||
&view->cacheonacl));
|
||||
}
|
||||
} else {
|
||||
} else if (view->cacheacl == NULL) {
|
||||
/*
|
||||
* We're not recursive; if the query-cache ACLs haven't
|
||||
* been set at the options/view level, set them to none.
|
||||
* We're not recursive; if "allow-query-cache" hasn't been
|
||||
* set at the options/view level, set it to none.
|
||||
*/
|
||||
if (view->cacheacl == NULL) {
|
||||
CHECK(dns_acl_none(mctx, &view->cacheacl));
|
||||
}
|
||||
if (view->cacheonacl == NULL) {
|
||||
CHECK(dns_acl_none(mctx, &view->cacheonacl));
|
||||
}
|
||||
CHECK(dns_acl_none(mctx, &view->cacheacl));
|
||||
}
|
||||
|
||||
/*
|
||||
* Finished setting recursion and query-cache ACLs, so now we
|
||||
* can get the allow-query default if it wasn't set in named.conf
|
||||
*/
|
||||
if (view->queryacl == NULL) {
|
||||
/* global default only */
|
||||
CHECK(configure_view_acl(NULL, NULL, named_g_config,
|
||||
@@ -5050,16 +4966,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
obj2 = cfg_tuple_get(obj, "response");
|
||||
if (!cfg_obj_isvoid(obj2)) {
|
||||
const char *resp = cfg_obj_asstring(obj2);
|
||||
isc_result_t r = DNS_R_SERVFAIL;
|
||||
isc_result_t r;
|
||||
|
||||
if (strcasecmp(resp, "drop") == 0) {
|
||||
if (strcasecmp(resp, "drop") == 0)
|
||||
r = DNS_R_DROP;
|
||||
} else if (strcasecmp(resp, "fail") == 0) {
|
||||
else if (strcasecmp(resp, "fail") == 0)
|
||||
r = DNS_R_SERVFAIL;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
dns_resolver_setquotaresponse(view->resolver,
|
||||
dns_quotatype_zone, r);
|
||||
@@ -5075,12 +4989,10 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->v4_aaaa = dns_aaaa_ok;
|
||||
} else {
|
||||
const char *v4_aaaastr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(v4_aaaastr, "break-dnssec") == 0) {
|
||||
if (strcasecmp(v4_aaaastr, "break-dnssec") == 0)
|
||||
view->v4_aaaa = dns_aaaa_break_dnssec;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -5093,12 +5005,10 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->v6_aaaa = dns_aaaa_ok;
|
||||
} else {
|
||||
const char *v6_aaaastr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(v6_aaaastr, "break-dnssec") == 0) {
|
||||
if (strcasecmp(v6_aaaastr, "break-dnssec") == 0)
|
||||
view->v6_aaaa = dns_aaaa_break_dnssec;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
CHECK(configure_view_acl(vconfig, config, named_g_config,
|
||||
@@ -5133,6 +5043,11 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->prefetch_eligible = view->prefetch_trigger + 6;
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "dnssec-enable", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->enablednssec = cfg_obj_asboolean(obj);
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(optionmaps, "dnssec-lookaside", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
@@ -5301,7 +5216,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
const char *empty_dbtype[4] =
|
||||
{ "_builtin", "empty", NULL, NULL };
|
||||
int empty_dbtypec = 4;
|
||||
dns_zonestat_level_t statlevel = dns_zonestat_none;
|
||||
dns_zonestat_level_t statlevel;
|
||||
|
||||
name = dns_fixedname_initname(&fixed);
|
||||
|
||||
@@ -5339,16 +5254,14 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
const char *levelstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(levelstr, "full") == 0) {
|
||||
if (strcasecmp(levelstr, "full") == 0)
|
||||
statlevel = dns_zonestat_full;
|
||||
} else if (strcasecmp(levelstr, "terse") == 0) {
|
||||
else if (strcasecmp(levelstr, "terse") == 0)
|
||||
statlevel = dns_zonestat_terse;
|
||||
} else if (strcasecmp(levelstr, "none") == 0) {
|
||||
else if (strcasecmp(levelstr, "none") == 0)
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
for (empty = empty_zones[empty_zone];
|
||||
@@ -5708,18 +5621,16 @@ configure_forward(const cfg_obj_t *config, dns_view_t *view,
|
||||
"forwarding");
|
||||
fwdpolicy = dns_fwdpolicy_none;
|
||||
} else {
|
||||
if (forwardtype == NULL) {
|
||||
if (forwardtype == NULL)
|
||||
fwdpolicy = dns_fwdpolicy_first;
|
||||
} else {
|
||||
else {
|
||||
const char *forwardstr = cfg_obj_asstring(forwardtype);
|
||||
if (strcasecmp(forwardstr, "first") == 0) {
|
||||
if (strcasecmp(forwardstr, "first") == 0)
|
||||
fwdpolicy = dns_fwdpolicy_first;
|
||||
} else if (strcasecmp(forwardstr, "only") == 0) {
|
||||
else if (strcasecmp(forwardstr, "only") == 0)
|
||||
fwdpolicy = dns_fwdpolicy_only;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6787,8 +6698,8 @@ dotat(dns_keytable_t *keytable, dns_keynode_t *keynode, void *arg) {
|
||||
*/
|
||||
domain = dns_fixedname_initname(&fdomain);
|
||||
dns_rdataset_init(&nameservers);
|
||||
result = dns_view_findzonecut(view, origin, domain, NULL, 0, 0,
|
||||
true, true, &nameservers, NULL);
|
||||
result = dns_view_findzonecut(view, origin, domain, 0, 0, true,
|
||||
true, &nameservers, NULL);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
result = dns_resolver_createfetch(view->resolver, tatname,
|
||||
dns_rdatatype_null, domain,
|
||||
@@ -7001,9 +6912,6 @@ removed(dns_zone_t *zone, void *uap) {
|
||||
case dns_zone_slave:
|
||||
type = "slave";
|
||||
break;
|
||||
case dns_zone_mirror:
|
||||
type = "mirror";
|
||||
break;
|
||||
case dns_zone_stub:
|
||||
type = "stub";
|
||||
break;
|
||||
@@ -8146,7 +8054,7 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
"less than 128 UDP sockets available after "
|
||||
"applying 'reserved-sockets' and 'maxsockets'");
|
||||
}
|
||||
isc_socketmgr_setreserved(named_g_socketmgr, reserved);
|
||||
isc__socketmgr_setreserved(named_g_socketmgr, reserved);
|
||||
|
||||
#ifdef HAVE_GEOIP
|
||||
/*
|
||||
@@ -8930,7 +8838,7 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
named_g_memstatistics = cfg_obj_asboolean(obj);
|
||||
} else {
|
||||
named_g_memstatistics =
|
||||
((isc_mem_debugging & ISC_MEM_DEBUGRECORD) != 0);
|
||||
(isc_mem_debugging & ISC_MEM_DEBUGRECORD);
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -9025,7 +8933,6 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
server->sctx->cookiealg = ns_cookiealg_sha256;
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -9035,7 +8942,6 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
bool first = true;
|
||||
isc_buffer_t b;
|
||||
unsigned int usedlength;
|
||||
unsigned int expectedlength;
|
||||
|
||||
for (element = cfg_list_first(obj);
|
||||
element != NULL;
|
||||
@@ -9081,26 +8987,21 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
usedlength = isc_buffer_usedlength(&b);
|
||||
switch (server->sctx->cookiealg) {
|
||||
case ns_cookiealg_aes:
|
||||
expectedlength = ISC_AES128_KEYLENGTH;
|
||||
if (usedlength != expectedlength) {
|
||||
if (usedlength != ISC_AES128_KEYLENGTH) {
|
||||
CHECKM(ISC_R_RANGE,
|
||||
"AES cookie-secret must be "
|
||||
"128 bits");
|
||||
}
|
||||
break;
|
||||
case ns_cookiealg_sha1:
|
||||
expectedlength =
|
||||
isc_md_type_get_size(ISC_MD_SHA1);
|
||||
if (usedlength != expectedlength) {
|
||||
if (usedlength != ISC_SHA1_DIGESTLENGTH) {
|
||||
CHECKM(ISC_R_RANGE,
|
||||
"SHA1 cookie-secret must be "
|
||||
"160 bits");
|
||||
}
|
||||
break;
|
||||
case ns_cookiealg_sha256:
|
||||
expectedlength =
|
||||
isc_md_type_get_size(ISC_MD_SHA256);
|
||||
if (usedlength != expectedlength) {
|
||||
if (usedlength != ISC_SHA256_DIGESTLENGTH) {
|
||||
CHECKM(ISC_R_RANGE,
|
||||
"SHA256 cookie-secret must be "
|
||||
"256 bits");
|
||||
@@ -9276,17 +9177,8 @@ view_loaded(void *arg) {
|
||||
"forcing zone maintenance");
|
||||
|
||||
named_os_started();
|
||||
|
||||
#ifdef HAVE_FIPS_MODE
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_NOTICE,
|
||||
"FIPS mode is %s",
|
||||
FIPS_mode() ? "enabled" : "disabled");
|
||||
#endif
|
||||
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_NOTICE,
|
||||
"running");
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_NOTICE, "running");
|
||||
}
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
@@ -9352,7 +9244,8 @@ load_zones(named_server_t *server, bool init, bool reconfig) {
|
||||
* the initial server setup; it isn't necessary during
|
||||
* a reload.)
|
||||
*/
|
||||
isc_taskmgr_setprivilegedmode(named_g_taskmgr);
|
||||
isc_taskmgr_setmode(named_g_taskmgr,
|
||||
isc_taskmgrmode_privileged);
|
||||
}
|
||||
|
||||
isc_task_endexclusive(server->task);
|
||||
@@ -9945,7 +9838,7 @@ static void
|
||||
named_server_reload(isc_task_t *task, isc_event_t *event) {
|
||||
named_server_t *server = (named_server_t *)event->ev_arg;
|
||||
|
||||
INSIST(task == server->task);
|
||||
INSIST(task = server->task);
|
||||
UNUSED(task);
|
||||
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
@@ -10194,8 +10087,7 @@ named_server_retransfercommand(named_server_t *server, isc_lex_t *lex,
|
||||
dns_zone_detach(&raw);
|
||||
}
|
||||
type = dns_zone_gettype(zone);
|
||||
if (type == dns_zone_slave || type == dns_zone_mirror ||
|
||||
type == dns_zone_stub ||
|
||||
if (type == dns_zone_slave || type == dns_zone_stub ||
|
||||
(type == dns_zone_redirect &&
|
||||
dns_zone_getredirecttype(zone) == dns_zone_slave))
|
||||
dns_zone_forcereload(zone);
|
||||
@@ -10227,9 +10119,7 @@ named_server_reloadcommand(named_server_t *server, isc_lex_t *lex,
|
||||
msg = "server reload successful";
|
||||
} else {
|
||||
type = dns_zone_gettype(zone);
|
||||
if (type == dns_zone_slave || type == dns_zone_mirror ||
|
||||
type == dns_zone_stub)
|
||||
{
|
||||
if (type == dns_zone_slave || type == dns_zone_stub) {
|
||||
dns_zone_refresh(zone);
|
||||
dns_zone_detach(&zone);
|
||||
msg = "zone refresh queued";
|
||||
@@ -10320,7 +10210,7 @@ named_server_refreshcommand(named_server_t *server, isc_lex_t *lex,
|
||||
isc_result_t result;
|
||||
dns_zone_t *zone = NULL, *raw = NULL;
|
||||
const char msg1[] = "zone refresh queued";
|
||||
const char msg2[] = "not a slave, mirror, or stub zone";
|
||||
const char msg2[] = "not a slave or stub zone";
|
||||
dns_zonetype_t type;
|
||||
|
||||
result = zone_from_args(server, lex, NULL, &zone, NULL,
|
||||
@@ -10338,9 +10228,7 @@ named_server_refreshcommand(named_server_t *server, isc_lex_t *lex,
|
||||
}
|
||||
|
||||
type = dns_zone_gettype(zone);
|
||||
if (type == dns_zone_slave || type == dns_zone_mirror ||
|
||||
type == dns_zone_stub)
|
||||
{
|
||||
if (type == dns_zone_slave || type == dns_zone_stub) {
|
||||
dns_zone_refresh(zone);
|
||||
dns_zone_detach(&zone);
|
||||
(void) putstr(text, msg1);
|
||||
@@ -10901,7 +10789,7 @@ named_server_dumpsecroots(named_server_t *server, isc_lex_t *lex,
|
||||
continue;
|
||||
}
|
||||
CHECK(putstr(text, "\n Negative trust anchors:\n\n"));
|
||||
CHECK(dns_ntatable_totext(ntatable, NULL, text));
|
||||
CHECK(dns_ntatable_totext(ntatable, text));
|
||||
}
|
||||
if (ptr != NULL)
|
||||
ptr = next_token(lex, text);
|
||||
@@ -12611,7 +12499,7 @@ newzone_parse(named_server_t *server, char *command, dns_view_t **viewp,
|
||||
const char *viewname = NULL;
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_view_t *view = NULL;
|
||||
const char *bn = NULL;
|
||||
const char *bn;
|
||||
|
||||
REQUIRE(viewp != NULL && *viewp == NULL);
|
||||
REQUIRE(zoneobjp != NULL && *zoneobjp == NULL);
|
||||
@@ -12622,14 +12510,12 @@ newzone_parse(named_server_t *server, char *command, dns_view_t **viewp,
|
||||
isc_buffer_init(&argbuf, command, (unsigned int) strlen(command));
|
||||
isc_buffer_add(&argbuf, strlen(command));
|
||||
|
||||
if (strncasecmp(command, "add", 3) == 0) {
|
||||
if (strncasecmp(command, "add", 3) == 0)
|
||||
bn = "addzone";
|
||||
} else if (strncasecmp(command, "mod", 3) == 0) {
|
||||
else if (strncasecmp(command, "mod", 3) == 0)
|
||||
bn = "modzone";
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the "addzone" or "modzone" to just "zone", for
|
||||
@@ -13534,7 +13420,6 @@ named_server_delzone(named_server_t *server, isc_lex_t *lex,
|
||||
TCHECK(putstr(text, zonename));
|
||||
TCHECK(putstr(text, "' and associated files will be deleted."));
|
||||
} else if (dns_zone_gettype(mayberaw) == dns_zone_slave ||
|
||||
dns_zone_gettype(mayberaw) == dns_zone_mirror ||
|
||||
dns_zone_gettype(mayberaw) == dns_zone_stub)
|
||||
{
|
||||
bool first;
|
||||
@@ -14077,10 +13962,7 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
|
||||
type = "master";
|
||||
break;
|
||||
case dns_zone_slave:
|
||||
type = "slave";
|
||||
break;
|
||||
case dns_zone_mirror:
|
||||
type = "mirror";
|
||||
type = dns_zone_ismirror(zone) ? "mirror" : "slave";
|
||||
break;
|
||||
case dns_zone_stub:
|
||||
type = "stub";
|
||||
@@ -14123,8 +14005,8 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
/* Security */
|
||||
secure = dns_db_issecure(db);
|
||||
allow = ((dns_zone_getkeyopts(zone) & DNS_ZONEKEY_ALLOW) != 0);
|
||||
maintain = ((dns_zone_getkeyopts(zone) & DNS_ZONEKEY_MAINTAIN) != 0);
|
||||
allow = (dns_zone_getkeyopts(zone) & DNS_ZONEKEY_ALLOW);
|
||||
maintain = (dns_zone_getkeyopts(zone) & DNS_ZONEKEY_MAINTAIN);
|
||||
|
||||
/* Master files */
|
||||
file = dns_zone_getfile(mayberaw);
|
||||
@@ -14136,7 +14018,6 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
/* Refresh/expire times */
|
||||
if (zonetype == dns_zone_slave ||
|
||||
zonetype == dns_zone_mirror ||
|
||||
zonetype == dns_zone_stub ||
|
||||
zonetype == dns_zone_redirect)
|
||||
{
|
||||
@@ -14340,7 +14221,6 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
char *ptr, *nametext = NULL, *viewname;
|
||||
char namebuf[DNS_NAME_FORMATSIZE];
|
||||
char viewbuf[DNS_NAME_FORMATSIZE];
|
||||
isc_stdtime_t now, when;
|
||||
isc_time_t t;
|
||||
char tbuf[64];
|
||||
@@ -14350,9 +14230,7 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
const dns_name_t *ntaname;
|
||||
dns_name_t *fname;
|
||||
dns_ttl_t ntattl;
|
||||
bool ttlset = false, excl = false, viewfound = false;
|
||||
dns_rdataclass_t rdclass = dns_rdataclass_in;
|
||||
bool first = true;
|
||||
bool ttlset = false, excl = false;
|
||||
|
||||
UNUSED(force);
|
||||
|
||||
@@ -14360,29 +14238,21 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
/* Skip the command name. */
|
||||
ptr = next_token(lex, text);
|
||||
if (ptr == NULL) {
|
||||
if (ptr == NULL)
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
bool opts = true;
|
||||
|
||||
/* Check for options */
|
||||
ptr = next_token(lex, text);
|
||||
if (ptr == NULL) {
|
||||
if (ptr == NULL)
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
}
|
||||
|
||||
if (!opts) {
|
||||
nametext = ptr;
|
||||
} else if (strcmp(ptr, "--") == 0) {
|
||||
opts = false;
|
||||
} else if (argcheck(ptr, "dump")) {
|
||||
if (argcheck(ptr, "dump"))
|
||||
dump = true;
|
||||
} else if (argcheck(ptr, "remove")) {
|
||||
else if (argcheck(ptr, "remove")) {
|
||||
ntattl = 0;
|
||||
ttlset = true;
|
||||
} else if (opts && argcheck(ptr, "force")) {
|
||||
} else if (argcheck(ptr, "force")) {
|
||||
force = true;
|
||||
continue;
|
||||
} else if (argcheck(ptr, "lifetime")) {
|
||||
@@ -14409,25 +14279,8 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
ttlset = true;
|
||||
continue;
|
||||
} else if (argcheck(ptr, "class")) {
|
||||
isc_textregion_t tr;
|
||||
|
||||
ptr = next_token(lex, text);
|
||||
if (ptr == NULL) {
|
||||
msg = "No class specified";
|
||||
CHECK(ISC_R_UNEXPECTEDEND);
|
||||
}
|
||||
|
||||
tr.base = ptr;
|
||||
tr.length = strlen(ptr);
|
||||
CHECK(dns_rdataclass_fromtext(&rdclass, &tr));
|
||||
continue;
|
||||
} else if (ptr[0] == '-') {
|
||||
msg = "Unknown option";
|
||||
CHECK(DNS_R_SYNTAX);
|
||||
} else {
|
||||
} else
|
||||
nametext = ptr;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -14440,15 +14293,12 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
view != NULL;
|
||||
view = ISC_LIST_NEXT(view, link))
|
||||
{
|
||||
if (ntatable != NULL) {
|
||||
if (ntatable != NULL)
|
||||
dns_ntatable_detach(&ntatable);
|
||||
}
|
||||
result = dns_view_getntatable(view, &ntatable);
|
||||
if (result == ISC_R_NOTFOUND) {
|
||||
if (result == ISC_R_NOTFOUND)
|
||||
continue;
|
||||
}
|
||||
|
||||
CHECK(dns_ntatable_totext(ntatable, view->name, text));
|
||||
CHECK(dns_ntatable_totext(ntatable, text));
|
||||
}
|
||||
CHECK(putnull(text));
|
||||
|
||||
@@ -14464,19 +14314,17 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
}
|
||||
|
||||
/* Get the NTA name. */
|
||||
if (nametext == NULL) {
|
||||
if (nametext == NULL)
|
||||
nametext = next_token(lex, text);
|
||||
}
|
||||
if (nametext == NULL) {
|
||||
if (nametext == NULL)
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
}
|
||||
|
||||
/* Copy nametext as it'll be overwritten by next_token() */
|
||||
strlcpy(namebuf, nametext, DNS_NAME_FORMATSIZE);
|
||||
|
||||
if (strcmp(namebuf, ".") == 0) {
|
||||
if (strcmp(namebuf, ".") == 0)
|
||||
ntaname = dns_rootname;
|
||||
} else {
|
||||
else {
|
||||
isc_buffer_t b;
|
||||
isc_buffer_init(&b, namebuf, strlen(namebuf));
|
||||
isc_buffer_add(&b, strlen(namebuf));
|
||||
@@ -14486,14 +14334,6 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
/* Look for the view name. */
|
||||
viewname = next_token(lex, text);
|
||||
if (viewname != NULL) {
|
||||
strlcpy(viewbuf, viewname, DNS_NAME_FORMATSIZE);
|
||||
viewname = viewbuf;
|
||||
}
|
||||
|
||||
if (next_token(lex, text) != NULL) {
|
||||
CHECK(DNS_R_SYNTAX);
|
||||
}
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
|
||||
@@ -14504,26 +14344,18 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
view != NULL;
|
||||
view = ISC_LIST_NEXT(view, link))
|
||||
{
|
||||
if (viewname != NULL && strcmp(view->name, viewname) != 0) {
|
||||
if (viewname != NULL &&
|
||||
strcmp(view->name, viewname) != 0)
|
||||
continue;
|
||||
}
|
||||
viewfound = true;
|
||||
|
||||
if (view->rdclass != rdclass && rdclass != dns_rdataclass_any) {
|
||||
if (view->nta_lifetime == 0)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (view->nta_lifetime == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!ttlset) {
|
||||
if (!ttlset)
|
||||
ntattl = view->nta_lifetime;
|
||||
}
|
||||
|
||||
if (ntatable != NULL) {
|
||||
if (ntatable != NULL)
|
||||
dns_ntatable_detach(&ntatable);
|
||||
}
|
||||
|
||||
result = dns_view_getntatable(view, &ntatable);
|
||||
if (result == ISC_R_NOTFOUND) {
|
||||
@@ -14546,11 +14378,6 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
isc_time_set(&t, when, 0);
|
||||
isc_time_formattimestamp(&t, tbuf, sizeof(tbuf));
|
||||
|
||||
if (!first) {
|
||||
CHECK(putstr(text, "\n"));
|
||||
}
|
||||
first = false;
|
||||
|
||||
CHECK(putstr(text, "Negative trust anchor added: "));
|
||||
CHECK(putstr(text, namebuf));
|
||||
CHECK(putstr(text, "/"));
|
||||
@@ -14563,37 +14390,17 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
"added NTA '%s' (%d sec) in view '%s'",
|
||||
namebuf, ntattl, view->name);
|
||||
} else {
|
||||
bool removed;
|
||||
CHECK(dns_ntatable_delete(ntatable, ntaname));
|
||||
|
||||
result = dns_ntatable_delete(ntatable, ntaname);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
removed = true;
|
||||
} else if (result == ISC_R_NOTFOUND) {
|
||||
removed = false;
|
||||
} else {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!first) {
|
||||
CHECK(putstr(text, "\n"));
|
||||
}
|
||||
first = false;
|
||||
|
||||
CHECK(putstr(text, "Negative trust anchor "));
|
||||
CHECK(putstr(text, removed ? "removed: "
|
||||
: "not found: "));
|
||||
CHECK(putstr(text, "Negative trust anchor removed: "));
|
||||
CHECK(putstr(text, namebuf));
|
||||
CHECK(putstr(text, "/"));
|
||||
CHECK(putstr(text, view->name));
|
||||
|
||||
if (removed) {
|
||||
isc_log_write(named_g_lctx,
|
||||
NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER,
|
||||
ISC_LOG_INFO,
|
||||
"removed NTA '%s' in view %s",
|
||||
namebuf, view->name);
|
||||
}
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
|
||||
"removed NTA '%s' in view %s",
|
||||
namebuf, view->name);
|
||||
}
|
||||
|
||||
result = dns_view_saventa(view);
|
||||
@@ -14604,27 +14411,20 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
"for view '%s': %s",
|
||||
view->name, isc_result_totext(result));
|
||||
}
|
||||
}
|
||||
|
||||
if (!viewfound) {
|
||||
msg = "No such view";
|
||||
CHECK(ISC_R_NOTFOUND);
|
||||
}
|
||||
CHECK(putnull(text));
|
||||
|
||||
CHECK(putnull(text));
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (msg != NULL) {
|
||||
(void) putstr(text, msg);
|
||||
(void) putnull(text);
|
||||
}
|
||||
|
||||
if (excl) {
|
||||
if (excl)
|
||||
isc_task_endexclusive(server->task);
|
||||
}
|
||||
if (ntatable != NULL) {
|
||||
if (ntatable != NULL)
|
||||
dns_ntatable_detach(&ntatable);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
@@ -14825,7 +14625,7 @@ mkey_dumpzone(dns_view_t *view, isc_buffer_t **text) {
|
||||
snprintf(buf, sizeof(buf), "\n\talgorithm: %s", alg);
|
||||
CHECK(putstr(text, buf));
|
||||
|
||||
revoked = ((kd.flags & DNS_KEYFLAG_REVOKE) != 0);
|
||||
revoked = (kd.flags & DNS_KEYFLAG_REVOKE);
|
||||
snprintf(buf, sizeof(buf), "\n\tflags:%s%s%s",
|
||||
revoked ? " REVOKE" : "",
|
||||
((kd.flags & DNS_KEYFLAG_KSK) != 0)
|
||||
@@ -15015,7 +14815,6 @@ named_server_mkeys(named_server_t *server, isc_lex_t *lex,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
if (viewtxt != NULL) {
|
||||
|
||||
@@ -94,7 +94,6 @@ user_zonetype( dns_zone_t *zone ) {
|
||||
{ dns_zone_none, "none" },
|
||||
{ dns_zone_master, "master" },
|
||||
{ dns_zone_slave, "slave" },
|
||||
{ dns_zone_mirror, "mirror" },
|
||||
{ dns_zone_stub, "stub" },
|
||||
{ dns_zone_staticstub, "static-stub" },
|
||||
{ dns_zone_key, "key" },
|
||||
|
||||
@@ -226,7 +226,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
|
||||
+114
-8
@@ -59,6 +59,54 @@ static int singletonfd = -1;
|
||||
#define ISC_FACILITY LOG_DAEMON
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If there's no <sys/capability.h>, we don't care about <sys/prctl.h>
|
||||
*/
|
||||
#ifndef HAVE_SYS_CAPABILITY_H
|
||||
#undef HAVE_SYS_PRCTL_H
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Linux defines:
|
||||
* (T) HAVE_LINUXTHREADS
|
||||
* (C) HAVE_SYS_CAPABILITY_H
|
||||
* (P) HAVE_SYS_PRCTL_H
|
||||
* The possible cases are:
|
||||
* none: setuid() normally
|
||||
* T: no setuid()
|
||||
* C: setuid() normally, drop caps (keep CAP_SETUID)
|
||||
* T+C: no setuid(), drop caps (don't keep CAP_SETUID)
|
||||
* T+C+P: setuid() early, drop caps (keep CAP_SETUID)
|
||||
* C+P: setuid() normally, drop caps (keep CAP_SETUID)
|
||||
* P: not possible
|
||||
* T+P: not possible
|
||||
*
|
||||
* if (C)
|
||||
* caps = BIND_SERVICE + CHROOT + SETGID
|
||||
* if ((T && C && P) || !T)
|
||||
* caps += SETUID
|
||||
* endif
|
||||
* capset(caps)
|
||||
* endif
|
||||
* if (T && C && P && -u)
|
||||
* setuid()
|
||||
* else if (T && -u)
|
||||
* fail
|
||||
* --> start threads
|
||||
* if (!T && -u)
|
||||
* setuid()
|
||||
* if (C && (P || !-u))
|
||||
* caps = BIND_SERVICE
|
||||
* capset(caps)
|
||||
* endif
|
||||
*
|
||||
* It will be nice when Linux threads work properly with setuid().
|
||||
*/
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
static pid_t mainpid = 0;
|
||||
#endif
|
||||
|
||||
static struct passwd *runas_pw = NULL;
|
||||
static bool done_setuid = false;
|
||||
static int dfd[2] = { -1, -1 };
|
||||
@@ -69,7 +117,10 @@ static bool non_root = false;
|
||||
static bool non_root_caps = false;
|
||||
|
||||
#include <sys/capability.h>
|
||||
#include <sys/prctl.h>
|
||||
|
||||
#ifdef HAVE_SYS_PRCTL_H
|
||||
#include <sys/prctl.h> /* Required for prctl(). */
|
||||
#endif /* HAVE_SYS_PRCTL_H */
|
||||
|
||||
static void
|
||||
linux_setcaps(cap_t caps) {
|
||||
@@ -150,11 +201,15 @@ linux_initialprivs(void) {
|
||||
*/
|
||||
SET_CAP(CAP_SYS_CHROOT);
|
||||
|
||||
#if defined(HAVE_SYS_PRCTL_H) || !defined(HAVE_LINUXTHREADS)
|
||||
/*
|
||||
* We need setuid() as the kernel supports keeping capabilities after
|
||||
* setuid().
|
||||
* We can setuid() only if either the kernel supports keeping
|
||||
* capabilities after setuid() (which we don't know until we've
|
||||
* tried) or we're not using threads. If either of these is
|
||||
* true, we want the setuid capability.
|
||||
*/
|
||||
SET_CAP(CAP_SETUID);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Since we call initgroups, we need this.
|
||||
@@ -220,6 +275,7 @@ linux_minprivs(void) {
|
||||
FREE_CAP;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYS_PRCTL_H
|
||||
static void
|
||||
linux_keepcaps(void) {
|
||||
char strbuf[ISC_STRERRORSIZE];
|
||||
@@ -239,9 +295,11 @@ linux_keepcaps(void) {
|
||||
non_root = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_SYS_CAPABILITY_H */
|
||||
|
||||
|
||||
static void
|
||||
setup_syslog(const char *progname) {
|
||||
int options;
|
||||
@@ -259,6 +317,9 @@ named_os_init(const char *progname) {
|
||||
#ifdef HAVE_SYS_CAPABILITY_H
|
||||
linux_initialprivs();
|
||||
#endif
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
mainpid = getpid();
|
||||
#endif
|
||||
#ifdef SIGXFSZ
|
||||
signal(SIGXFSZ, SIG_IGN);
|
||||
#endif
|
||||
@@ -301,6 +362,10 @@ named_os_daemonize(void) {
|
||||
* We're the child.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
mainpid = getpid();
|
||||
#endif
|
||||
|
||||
if (setsid() == -1) {
|
||||
strerror_r(errno, strbuf, sizeof(strbuf));
|
||||
named_main_earlyfatal("setsid(): %s", strbuf);
|
||||
@@ -434,6 +499,20 @@ named_os_changeuser(void) {
|
||||
|
||||
done_setuid = true;
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
#ifdef HAVE_SYS_CAPABILITY_H
|
||||
if (!non_root_caps) {
|
||||
named_main_earlyfatal("-u with Linux threads not supported: "
|
||||
"requires kernel support for "
|
||||
"prctl(PR_SET_KEEPCAPS)");
|
||||
}
|
||||
#else
|
||||
named_main_earlyfatal("-u with Linux threads not supported: "
|
||||
"no capabilities support or capabilities "
|
||||
"disabled at build time");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (setgid(runas_pw->pw_gid) < 0) {
|
||||
strerror_r(errno, strbuf, sizeof(strbuf));
|
||||
named_main_earlyfatal("setgid(): %s", strbuf);
|
||||
@@ -444,7 +523,7 @@ named_os_changeuser(void) {
|
||||
named_main_earlyfatal("setuid(): %s", strbuf);
|
||||
}
|
||||
|
||||
#if defined(HAVE_SYS_CAPABILITY_H)
|
||||
#if defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_DUMPABLE)
|
||||
/*
|
||||
* Restore the ability of named to drop core after the setuid()
|
||||
* call has disabled it.
|
||||
@@ -454,7 +533,8 @@ named_os_changeuser(void) {
|
||||
named_main_earlywarning("prctl(PR_SET_DUMPABLE) failed: %s",
|
||||
strbuf);
|
||||
}
|
||||
|
||||
#endif
|
||||
#if defined(HAVE_SYS_CAPABILITY_H) && !defined(HAVE_LINUXTHREADS)
|
||||
linux_minprivs();
|
||||
#endif
|
||||
}
|
||||
@@ -468,7 +548,7 @@ ns_os_uid(void) {
|
||||
|
||||
void
|
||||
named_os_adjustnofile(void) {
|
||||
#if defined(__linux__)
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
isc_result_t result;
|
||||
isc_resourcevalue_t newvalue;
|
||||
|
||||
@@ -486,9 +566,15 @@ named_os_adjustnofile(void) {
|
||||
|
||||
void
|
||||
named_os_minprivs(void) {
|
||||
#if defined(HAVE_SYS_CAPABILITY_H)
|
||||
#ifdef HAVE_SYS_PRCTL_H
|
||||
linux_keepcaps();
|
||||
named_os_changeuser();
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
named_os_changeuser(); /* Call setuid() before threads are started */
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYS_CAPABILITY_H) && defined(HAVE_LINUXTHREADS)
|
||||
linux_minprivs();
|
||||
#endif
|
||||
}
|
||||
@@ -673,16 +759,21 @@ named_os_openfile(const char *filename, mode_t mode, bool switch_user) {
|
||||
free(f);
|
||||
|
||||
if (switch_user && runas_pw != NULL) {
|
||||
#ifndef HAVE_LINUXTHREADS
|
||||
gid_t oldgid = getgid();
|
||||
#endif
|
||||
/* Set UID/GID to the one we'll be running with eventually */
|
||||
setperms(runas_pw->pw_uid, runas_pw->pw_gid);
|
||||
|
||||
fd = safe_open(filename, mode, false);
|
||||
|
||||
#ifndef HAVE_LINUXTHREADS
|
||||
/* Restore UID/GID to root */
|
||||
setperms(0, oldgid);
|
||||
#endif /* HAVE_LINUXTHREADS */
|
||||
|
||||
if (fd == -1) {
|
||||
#ifndef HAVE_LINUXTHREADS
|
||||
fd = safe_open(filename, mode, false);
|
||||
if (fd != -1) {
|
||||
named_main_earlywarning("Required root "
|
||||
@@ -695,6 +786,13 @@ named_os_openfile(const char *filename, mode_t mode, bool switch_user) {
|
||||
named_main_earlywarning("Please check file and "
|
||||
"directory permissions "
|
||||
"or reconfigure the filename.");
|
||||
#else /* HAVE_LINUXTHREADS */
|
||||
named_main_earlywarning("Could not open "
|
||||
"'%s'.", filename);
|
||||
named_main_earlywarning("Please check file and "
|
||||
"directory permissions "
|
||||
"or reconfigure the filename.");
|
||||
#endif /* HAVE_LINUXTHREADS */
|
||||
}
|
||||
} else {
|
||||
fd = safe_open(filename, mode, false);
|
||||
@@ -748,7 +846,11 @@ named_os_writepidfile(const char *filename, bool first_time) {
|
||||
cleanup_pidfile();
|
||||
return;
|
||||
}
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
pid = mainpid;
|
||||
#else
|
||||
pid = getpid();
|
||||
#endif
|
||||
if (fprintf(fh, "%ld\n", (long)pid) < 0) {
|
||||
(*report)("fprintf() to pid file '%s' failed", filename);
|
||||
(void)fclose(fh);
|
||||
@@ -854,7 +956,11 @@ named_os_shutdownmsg(char *command, isc_buffer_t *text) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LINUXTHREADS
|
||||
pid = mainpid;
|
||||
#else
|
||||
pid = getpid();
|
||||
#endif
|
||||
|
||||
(void)isc_buffer_printf(text, "pid: %ld", (long)pid);
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
isc_mem_create(&mctx);
|
||||
isc_mem_create(0, 0, &mctx);
|
||||
|
||||
cd = isc_mem_get(mctx, sizeof(*cd));
|
||||
if (cd == NULL) {
|
||||
|
||||
+88
-137
@@ -125,7 +125,7 @@ configure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
/* First check to see if ACL is defined within the zone */
|
||||
@@ -224,21 +224,19 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
|
||||
const char *str;
|
||||
bool grant = false;
|
||||
bool usezone = false;
|
||||
dns_ssumatchtype_t mtype = dns_ssumatchtype_name;
|
||||
unsigned int mtype = dns_ssumatchtype_name;
|
||||
dns_fixedname_t fname, fident;
|
||||
isc_buffer_t b;
|
||||
dns_rdatatype_t *types;
|
||||
unsigned int i, n;
|
||||
|
||||
str = cfg_obj_asstring(mode);
|
||||
if (strcasecmp(str, "grant") == 0) {
|
||||
if (strcasecmp(str, "grant") == 0)
|
||||
grant = true;
|
||||
} else if (strcasecmp(str, "deny") == 0) {
|
||||
else if (strcasecmp(str, "deny") == 0)
|
||||
grant = false;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
str = cfg_obj_asstring(matchtype);
|
||||
CHECK(dns_ssu_mtypefromstring(str, &mtype));
|
||||
@@ -757,16 +755,10 @@ checknames(dns_zonetype_t ztype, const cfg_obj_t **maps,
|
||||
isc_result_t result;
|
||||
|
||||
switch (ztype) {
|
||||
case dns_zone_slave:
|
||||
case dns_zone_mirror:
|
||||
zone = "slave";
|
||||
break;
|
||||
case dns_zone_master:
|
||||
zone = "master";
|
||||
break;
|
||||
case dns_zone_slave: zone = "slave"; break;
|
||||
case dns_zone_master: zone = "master"; break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
result = named_checknames_get(maps, zone, objp);
|
||||
INSIST(result == ISC_R_SUCCESS && objp != NULL && *objp != NULL);
|
||||
@@ -836,37 +828,6 @@ isself(dns_view_t *myview, dns_tsigkey_t *mykey,
|
||||
return (view == myview);
|
||||
}
|
||||
|
||||
/*%
|
||||
* For mirror zones, change "notify yes;" to "notify explicit;", informing the
|
||||
* user only if "notify" was explicitly configured rather than inherited from
|
||||
* default configuration.
|
||||
*/
|
||||
static dns_notifytype_t
|
||||
process_notifytype(dns_notifytype_t ntype, dns_zonetype_t ztype,
|
||||
const char *zname, const cfg_obj_t **maps)
|
||||
{
|
||||
const cfg_obj_t *obj = NULL;
|
||||
|
||||
/*
|
||||
* Return the original setting if this is not a mirror zone or if the
|
||||
* zone is configured with something else than "notify yes;".
|
||||
*/
|
||||
if (ztype != dns_zone_mirror || ntype != dns_notifytype_yes) {
|
||||
return (ntype);
|
||||
}
|
||||
|
||||
/*
|
||||
* Only log a message if "notify" was set in the configuration
|
||||
* hierarchy supplied in 'maps'.
|
||||
*/
|
||||
if (named_config_get(maps, "notify", &obj) == ISC_R_SUCCESS) {
|
||||
cfg_obj_log(obj, named_g_lctx, ISC_LOG_INFO,
|
||||
"'notify explicit;' will be used for mirror zone "
|
||||
"'%s'", zname);
|
||||
}
|
||||
|
||||
return (dns_notifytype_explicit);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
@@ -906,7 +867,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
const dns_master_style_t *masterstyle = &dns_master_style_default;
|
||||
isc_stats_t *zoneqrystats;
|
||||
dns_stats_t *rcvquerystats;
|
||||
dns_zonestat_level_t statlevel = dns_zonestat_none;
|
||||
dns_zonestat_level_t statlevel;
|
||||
int seconds;
|
||||
dns_zone_t *mayberaw = (raw != NULL) ? raw : zone;
|
||||
isc_dscp_t dscp;
|
||||
@@ -1021,7 +982,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
if (ztype == dns_zone_slave || ztype == dns_zone_mirror)
|
||||
if (ztype == dns_zone_slave)
|
||||
masterformat = dns_masterformat_raw;
|
||||
else
|
||||
masterformat = dns_masterformat_text;
|
||||
@@ -1030,16 +991,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *masterformatstr = cfg_obj_asstring(obj);
|
||||
|
||||
if (strcasecmp(masterformatstr, "text") == 0) {
|
||||
if (strcasecmp(masterformatstr, "text") == 0)
|
||||
masterformat = dns_masterformat_text;
|
||||
} else if (strcasecmp(masterformatstr, "raw") == 0) {
|
||||
else if (strcasecmp(masterformatstr, "raw") == 0)
|
||||
masterformat = dns_masterformat_raw;
|
||||
} else if (strcasecmp(masterformatstr, "map") == 0) {
|
||||
else if (strcasecmp(masterformatstr, "map") == 0)
|
||||
masterformat = dns_masterformat_map;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -1055,14 +1014,12 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
if (strcasecmp(masterstylestr, "full") == 0) {
|
||||
if (strcasecmp(masterstylestr, "full") == 0)
|
||||
masterstyle = &dns_master_style_full;
|
||||
} else if (strcasecmp(masterstylestr, "relative") == 0) {
|
||||
else if (strcasecmp(masterstylestr, "relative") == 0)
|
||||
masterstyle = &dns_master_style_default;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -1119,7 +1076,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
/*
|
||||
* Notify messages are processed by the raw zone if it exists.
|
||||
*/
|
||||
if (ztype == dns_zone_slave || ztype == dns_zone_mirror)
|
||||
if (ztype == dns_zone_slave)
|
||||
RETERR(configure_zone_acl(zconfig, vconfig, config,
|
||||
allow_notify, ac, mayberaw,
|
||||
dns_zone_setnotifyacl,
|
||||
@@ -1148,18 +1105,16 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
dialup = dns_dialuptype_no;
|
||||
} else {
|
||||
const char *dialupstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(dialupstr, "notify") == 0) {
|
||||
if (strcasecmp(dialupstr, "notify") == 0)
|
||||
dialup = dns_dialuptype_notify;
|
||||
} else if (strcasecmp(dialupstr, "notify-passive") == 0) {
|
||||
else if (strcasecmp(dialupstr, "notify-passive") == 0)
|
||||
dialup = dns_dialuptype_notifypassive;
|
||||
} else if (strcasecmp(dialupstr, "refresh") == 0) {
|
||||
else if (strcasecmp(dialupstr, "refresh") == 0)
|
||||
dialup = dns_dialuptype_refresh;
|
||||
} else if (strcasecmp(dialupstr, "passive") == 0) {
|
||||
else if (strcasecmp(dialupstr, "passive") == 0)
|
||||
dialup = dns_dialuptype_passive;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
if (raw != NULL)
|
||||
dns_zone_setdialup(raw, dialup);
|
||||
@@ -1175,16 +1130,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
const char *levelstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(levelstr, "full") == 0) {
|
||||
if (strcasecmp(levelstr, "full") == 0)
|
||||
statlevel = dns_zonestat_full;
|
||||
} else if (strcasecmp(levelstr, "terse") == 0) {
|
||||
else if (strcasecmp(levelstr, "terse") == 0)
|
||||
statlevel = dns_zonestat_terse;
|
||||
} else if (strcasecmp(levelstr, "none") == 0) {
|
||||
else if (strcasecmp(levelstr, "none") == 0)
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
dns_zone_setstatlevel(zone, statlevel);
|
||||
|
||||
@@ -1222,17 +1175,13 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
notifytype = dns_notifytype_no;
|
||||
} else {
|
||||
const char *notifystr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(notifystr, "explicit") == 0) {
|
||||
if (strcasecmp(notifystr, "explicit") == 0)
|
||||
notifytype = dns_notifytype_explicit;
|
||||
} else if (strcasecmp(notifystr, "master-only") == 0) {
|
||||
else if (strcasecmp(notifystr, "master-only") == 0)
|
||||
notifytype = dns_notifytype_masteronly;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
notifytype = process_notifytype(notifytype, ztype, zname,
|
||||
nodefault);
|
||||
if (raw != NULL)
|
||||
dns_zone_setnotifytype(raw, dns_notifytype_no);
|
||||
dns_zone_setnotifytype(zone, notifytype);
|
||||
@@ -1387,10 +1336,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (raw != NULL) {
|
||||
dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMES,
|
||||
check);
|
||||
@@ -1425,10 +1372,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
check = false;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSPF, check);
|
||||
|
||||
obj = NULL;
|
||||
@@ -1579,22 +1524,20 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
result = cfg_map_get(zoptions, "auto-dnssec", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *arg = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(arg, "allow") == 0) {
|
||||
if (strcasecmp(arg, "allow") == 0)
|
||||
allow = true;
|
||||
} else if (strcasecmp(arg, "maintain") == 0) {
|
||||
else if (strcasecmp(arg, "maintain") == 0)
|
||||
allow = maint = true;
|
||||
} else if (strcasecmp(arg, "off") == 0) {
|
||||
else if (strcasecmp(arg, "off") == 0)
|
||||
;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
|
||||
}
|
||||
}
|
||||
|
||||
if (ztype == dns_zone_slave || ztype == dns_zone_mirror) {
|
||||
if (ztype == dns_zone_slave) {
|
||||
RETERR(configure_zone_acl(zconfig, vconfig, config,
|
||||
allow_update_forwarding, ac,
|
||||
mayberaw, dns_zone_setforwardacl,
|
||||
@@ -1641,10 +1584,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(dupcheck, "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRR, check);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
|
||||
|
||||
@@ -1658,10 +1599,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMX, check);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMXFAIL, fail);
|
||||
|
||||
@@ -1697,10 +1636,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
warn = ignore = false;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
warn = ignore = true;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNMXCNAME, warn);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
|
||||
|
||||
@@ -1714,10 +1651,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
warn = ignore = false;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
warn = ignore = true;
|
||||
} else {
|
||||
} else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNSRVCNAME, warn);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNORESRVCNAME,
|
||||
ignore);
|
||||
@@ -1733,15 +1668,13 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
result = cfg_map_get(zoptions, "dnssec-update-mode", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *arg = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(arg, "no-resign") == 0) {
|
||||
if (strcasecmp(arg, "no-resign") == 0)
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_NORESIGN,
|
||||
true);
|
||||
} else if (strcasecmp(arg, "maintain") == 0) {
|
||||
else if (strcasecmp(arg, "maintain") == 0)
|
||||
;
|
||||
} else {
|
||||
else
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -1762,38 +1695,12 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
* Configure slave functionality.
|
||||
*/
|
||||
switch (ztype) {
|
||||
case dns_zone_mirror:
|
||||
/*
|
||||
* Disable outgoing zone transfers for mirror zones unless they
|
||||
* are explicitly enabled by zone configuration.
|
||||
*/
|
||||
obj = NULL;
|
||||
(void)cfg_map_get(zoptions, "allow-transfer", &obj);
|
||||
if (obj == NULL) {
|
||||
dns_acl_t *none;
|
||||
RETERR(dns_acl_none(mctx, &none));
|
||||
dns_zone_setxfracl(zone, none);
|
||||
dns_acl_detach(&none);
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
case dns_zone_slave:
|
||||
case dns_zone_stub:
|
||||
case dns_zone_redirect:
|
||||
count = 0;
|
||||
obj = NULL;
|
||||
(void)cfg_map_get(zoptions, "masters", &obj);
|
||||
/*
|
||||
* Use the built-in master server list if one was not
|
||||
* explicitly specified and this is a root zone mirror.
|
||||
*/
|
||||
if (obj == NULL && ztype == dns_zone_mirror &&
|
||||
dns_name_equal(dns_zone_getorigin(zone), dns_rootname))
|
||||
{
|
||||
result = named_config_getmastersdef(named_g_config,
|
||||
DEFAULT_IANA_ROOT_ZONE_MASTERS,
|
||||
&obj);
|
||||
RETERR(result);
|
||||
}
|
||||
if (obj != NULL) {
|
||||
dns_ipkeylist_t ipkl;
|
||||
dns_ipkeylist_init(&ipkl);
|
||||
@@ -1820,6 +1727,35 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_MULTIMASTER, multi);
|
||||
|
||||
obj = NULL;
|
||||
(void)cfg_map_get(zoptions, "mirror", &obj);
|
||||
if (obj != NULL) {
|
||||
bool mirror = cfg_obj_asboolean(obj);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_MIRROR,
|
||||
mirror);
|
||||
if (mirror) {
|
||||
/*
|
||||
* Disable outgoing zone transfers unless they
|
||||
* are explicitly enabled by zone
|
||||
* configuration.
|
||||
*/
|
||||
obj = NULL;
|
||||
(void)cfg_map_get(zoptions, "allow-transfer",
|
||||
&obj);
|
||||
if (obj == NULL) {
|
||||
dns_acl_t *none;
|
||||
RETERR(dns_acl_none(mctx, &none));
|
||||
dns_zone_setxfracl(zone, none);
|
||||
dns_acl_detach(&none);
|
||||
}
|
||||
/*
|
||||
* Only allow "also-notify".
|
||||
*/
|
||||
notifytype = dns_notifytype_explicit;
|
||||
dns_zone_setnotifytype(zone, notifytype);
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "max-transfer-time-in", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS && obj != NULL);
|
||||
@@ -1959,7 +1895,7 @@ named_zone_reusable(dns_zone_t *zone, const cfg_obj_t *zconfig) {
|
||||
const char *cfilename;
|
||||
const char *zfilename;
|
||||
dns_zone_t *raw = NULL;
|
||||
bool has_raw;
|
||||
bool has_raw, mirror;
|
||||
dns_zonetype_t ztype;
|
||||
|
||||
zoptions = cfg_tuple_get(zconfig, "options");
|
||||
@@ -1999,6 +1935,21 @@ named_zone_reusable(dns_zone_t *zone, const cfg_obj_t *zconfig) {
|
||||
return (false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not reuse a zone whose "mirror" setting was changed.
|
||||
*/
|
||||
obj = NULL;
|
||||
mirror = false;
|
||||
(void)cfg_map_get(zoptions, "mirror", &obj);
|
||||
if (obj != NULL) {
|
||||
mirror = cfg_obj_asboolean(obj);
|
||||
}
|
||||
if (dns_zone_ismirror(zone) != mirror) {
|
||||
dns_zone_log(zone, ISC_LOG_DEBUG(1),
|
||||
"not reusable: mirror setting changed");
|
||||
return (false);
|
||||
}
|
||||
|
||||
if (zonetype_fromconfig(zoptions) != ztype) {
|
||||
dns_zone_log(zone, ISC_LOG_DEBUG(1),
|
||||
"not reusable: type mismatch");
|
||||
|
||||
@@ -3254,7 +3254,7 @@ main(int argc, char **argv) {
|
||||
|
||||
pre_parse_args(argc, argv);
|
||||
|
||||
result = isc_mem_create(&gmctx);
|
||||
result = isc_mem_create(0, 0, &gmctx);
|
||||
check_result(result, "isc_mem_create");
|
||||
|
||||
parse_args(argc, argv);
|
||||
|
||||
+239
-8
@@ -43,7 +43,7 @@
|
||||
* Create a key in the keystore of an HSM
|
||||
*
|
||||
* The calculation of key tag is left to the script
|
||||
* that converts the key into a DNSKEY RR and inserts
|
||||
* that converts the key into a DNSKEY RR and inserts
|
||||
* it into a zone file.
|
||||
*
|
||||
* usage:
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
#include <pk11/pk11.h>
|
||||
#include <pk11/result.h>
|
||||
#define WANT_DH_PRIMES
|
||||
#include <pk11/constants.h>
|
||||
#include <pkcs11/eddsa.h>
|
||||
|
||||
@@ -78,10 +79,12 @@
|
||||
static CK_BBOOL truevalue = TRUE;
|
||||
static CK_BBOOL falsevalue = FALSE;
|
||||
|
||||
/* Key class: RSA, ECC, ECX, or unknown */
|
||||
/* Key class: RSA, ECC, ECX, DSA, DH, or unknown */
|
||||
typedef enum {
|
||||
key_unknown,
|
||||
key_rsa,
|
||||
key_dsa,
|
||||
key_dh,
|
||||
key_ecc,
|
||||
key_ecx
|
||||
} key_class_t;
|
||||
@@ -149,6 +152,78 @@ static CK_ATTRIBUTE ecc_template[] = {
|
||||
{CKA_ID, NULL_PTR, 0}
|
||||
};
|
||||
|
||||
/*
|
||||
* Public key template for DSA keys
|
||||
*/
|
||||
#define DSA_LABEL 0
|
||||
#define DSA_VERIFY 1
|
||||
#define DSA_TOKEN 2
|
||||
#define DSA_PRIVATE 3
|
||||
#define DSA_PRIME 4
|
||||
#define DSA_SUBPRIME 5
|
||||
#define DSA_BASE 6
|
||||
#define DSA_ID 7
|
||||
#define DSA_ATTRS 8
|
||||
static CK_ATTRIBUTE dsa_template[] = {
|
||||
{CKA_LABEL, NULL_PTR, 0},
|
||||
{CKA_VERIFY, &truevalue, sizeof(truevalue)},
|
||||
{CKA_TOKEN, &truevalue, sizeof(truevalue)},
|
||||
{CKA_PRIVATE, &falsevalue, sizeof(falsevalue)},
|
||||
{CKA_PRIME, NULL_PTR, 0},
|
||||
{CKA_SUBPRIME, NULL_PTR, 0},
|
||||
{CKA_BASE, NULL_PTR, 0},
|
||||
{CKA_ID, NULL_PTR, 0}
|
||||
};
|
||||
#define DSA_PARAM_PRIME 0
|
||||
#define DSA_PARAM_SUBPRIME 1
|
||||
#define DSA_PARAM_BASE 2
|
||||
#define DSA_PARAM_ATTRS 3
|
||||
static CK_ATTRIBUTE dsa_param_template[] = {
|
||||
{CKA_PRIME, NULL_PTR, 0},
|
||||
{CKA_SUBPRIME, NULL_PTR, 0},
|
||||
{CKA_BASE, NULL_PTR, 0},
|
||||
};
|
||||
#define DSA_DOMAIN_PRIMEBITS 0
|
||||
#define DSA_DOMAIN_PRIVATE 1
|
||||
#define DSA_DOMAIN_ATTRS 2
|
||||
static CK_ATTRIBUTE dsa_domain_template[] = {
|
||||
{CKA_PRIME_BITS, NULL_PTR, 0},
|
||||
{CKA_PRIVATE, &falsevalue, sizeof(falsevalue)},
|
||||
};
|
||||
|
||||
/*
|
||||
* Public key template for DH keys
|
||||
*/
|
||||
#define DH_LABEL 0
|
||||
#define DH_VERIFY 1
|
||||
#define DH_TOKEN 2
|
||||
#define DH_PRIVATE 3
|
||||
#define DH_PRIME 4
|
||||
#define DH_BASE 5
|
||||
#define DH_ID 6
|
||||
#define DH_ATTRS 7
|
||||
static CK_ATTRIBUTE dh_template[] = {
|
||||
{CKA_LABEL, NULL_PTR, 0},
|
||||
{CKA_VERIFY, &truevalue, sizeof(truevalue)},
|
||||
{CKA_TOKEN, &truevalue, sizeof(truevalue)},
|
||||
{CKA_PRIVATE, &falsevalue, sizeof(falsevalue)},
|
||||
{CKA_PRIME, NULL_PTR, 0},
|
||||
{CKA_BASE, NULL_PTR, 0},
|
||||
{CKA_ID, NULL_PTR, 0}
|
||||
};
|
||||
#define DH_PARAM_PRIME 0
|
||||
#define DH_PARAM_BASE 1
|
||||
#define DH_PARAM_ATTRS 2
|
||||
static CK_ATTRIBUTE dh_param_template[] = {
|
||||
{CKA_PRIME, NULL_PTR, 0},
|
||||
{CKA_BASE, NULL_PTR, 0},
|
||||
};
|
||||
#define DH_DOMAIN_PRIMEBITS 0
|
||||
#define DH_DOMAIN_ATTRS 1
|
||||
static CK_ATTRIBUTE dh_domain_template[] = {
|
||||
{CKA_PRIME_BITS, NULL_PTR, 0},
|
||||
};
|
||||
|
||||
/*
|
||||
* Convert from text to key class. Accepts the names of DNSSEC
|
||||
* signing algorithms, so e.g., ECDSAP256SHA256 maps to ECC and
|
||||
@@ -162,6 +237,11 @@ keyclass_fromtext(const char *name) {
|
||||
if (strncasecmp(name, "rsa", 3) == 0 ||
|
||||
strncasecmp(name, "nsec3rsa", 8) == 0)
|
||||
return (key_rsa);
|
||||
else if (strncasecmp(name, "dsa", 3) == 0 ||
|
||||
strncasecmp(name, "nsec3dsa", 8) == 0)
|
||||
return (key_dsa);
|
||||
else if (strcasecmp(name, "dh") == 0)
|
||||
return (key_dh);
|
||||
else if (strncasecmp(name, "ecc", 3) == 0 ||
|
||||
strncasecmp(name, "ecdsa", 5) == 0)
|
||||
return (key_ecc);
|
||||
@@ -199,7 +279,7 @@ main(int argc, char *argv[]) {
|
||||
pk11_context_t pctx;
|
||||
int error = 0;
|
||||
int c, errflg = 0;
|
||||
int hide = 1, quiet = 0;
|
||||
int hide = 1, special = 0, quiet = 0;
|
||||
int idlen = 0, id_offset = 0;
|
||||
unsigned int i;
|
||||
unsigned long id = 0;
|
||||
@@ -251,6 +331,9 @@ main(int argc, char *argv[]) {
|
||||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
case 'S':
|
||||
special = 1;
|
||||
break;
|
||||
case ':':
|
||||
fprintf(stderr,
|
||||
"Option -%c requires an operand\n",
|
||||
@@ -277,6 +360,12 @@ main(int argc, char *argv[]) {
|
||||
exit(2);
|
||||
}
|
||||
|
||||
if (special != 0 && keyclass != key_dh) {
|
||||
fprintf(stderr, "The -S option is only compatible "
|
||||
"with Diffie-Hellman key generation\n");
|
||||
exit(2);
|
||||
}
|
||||
|
||||
switch (keyclass) {
|
||||
case key_rsa:
|
||||
op_type = OP_RSA;
|
||||
@@ -372,10 +461,70 @@ main(int argc, char *argv[]) {
|
||||
|
||||
#endif
|
||||
break;
|
||||
case key_dsa:
|
||||
op_type = OP_DSA;
|
||||
if (bits == 0)
|
||||
usage();
|
||||
|
||||
dpmech.mechanism = CKM_DSA_PARAMETER_GEN;
|
||||
dpmech.pParameter = NULL;
|
||||
dpmech.ulParameterLen = 0;
|
||||
mech.mechanism = CKM_DSA_KEY_PAIR_GEN;
|
||||
mech.pParameter = NULL;
|
||||
mech.ulParameterLen = 0;
|
||||
|
||||
public_template = dsa_template;
|
||||
public_attrcnt = DSA_ATTRS;
|
||||
id_offset = DSA_ID;
|
||||
|
||||
domain_template = dsa_domain_template;
|
||||
domain_attrcnt = DSA_DOMAIN_ATTRS;
|
||||
param_template = dsa_param_template;
|
||||
param_attrcnt = DSA_PARAM_ATTRS;
|
||||
|
||||
domain_template[DSA_DOMAIN_PRIMEBITS].pValue = &bits;
|
||||
domain_template[DSA_DOMAIN_PRIMEBITS].ulValueLen = sizeof(bits);
|
||||
break;
|
||||
case key_dh:
|
||||
op_type = OP_DH;
|
||||
if (special && bits == 0)
|
||||
bits = 1024;
|
||||
else if (special &&
|
||||
bits != 768 && bits != 1024 && bits != 1536)
|
||||
{
|
||||
fprintf(stderr, "When using the special prime (-S) "
|
||||
"option, only key sizes of\n"
|
||||
"768, 1024 or 1536 are supported.\n");
|
||||
exit(2);
|
||||
} else if (bits == 0)
|
||||
usage();
|
||||
|
||||
dpmech.mechanism = CKM_DH_PKCS_PARAMETER_GEN;
|
||||
dpmech.pParameter = NULL;
|
||||
dpmech.ulParameterLen = 0;
|
||||
mech.mechanism = CKM_DH_PKCS_KEY_PAIR_GEN;
|
||||
mech.pParameter = NULL;
|
||||
mech.ulParameterLen = 0;
|
||||
|
||||
/* Override CKA_SIGN attribute */
|
||||
private_template[PRIVATE_DERIVE].type = CKA_DERIVE;
|
||||
|
||||
public_template = dh_template;
|
||||
public_attrcnt = DH_ATTRS;
|
||||
id_offset = DH_ID;
|
||||
|
||||
domain_template = dh_domain_template;
|
||||
domain_attrcnt = DH_DOMAIN_ATTRS;
|
||||
param_template = dh_param_template;
|
||||
param_attrcnt = DH_PARAM_ATTRS;
|
||||
|
||||
domain_template[DH_DOMAIN_PRIMEBITS].pValue = &bits;
|
||||
domain_template[DH_DOMAIN_PRIMEBITS].ulValueLen = sizeof(bits);
|
||||
break;
|
||||
case key_unknown:
|
||||
usage();
|
||||
}
|
||||
|
||||
|
||||
search_template[0].pValue = label;
|
||||
search_template[0].ulValueLen = strlen((char *)label);
|
||||
public_template[0].pValue = label;
|
||||
@@ -433,7 +582,7 @@ main(int argc, char *argv[]) {
|
||||
hSession = pctx.session;
|
||||
|
||||
/* check if a key with the same id already exists */
|
||||
rv = pkcs_C_FindObjectsInit(hSession, search_template, 1);
|
||||
rv = pkcs_C_FindObjectsInit(hSession, search_template, 1);
|
||||
if (rv != CKR_OK) {
|
||||
fprintf(stderr, "C_FindObjectsInit: Error = 0x%.8lX\n", rv);
|
||||
error = 1;
|
||||
@@ -460,6 +609,29 @@ main(int argc, char *argv[]) {
|
||||
if (keyclass == key_rsa || keyclass == key_ecc || keyclass == key_ecx)
|
||||
goto generate_keys;
|
||||
|
||||
/*
|
||||
* Special setup for Diffie-Hellman keys
|
||||
*/
|
||||
if (special != 0) {
|
||||
public_template[DH_BASE].pValue = pk11_dh_bn2;
|
||||
public_template[DH_BASE].ulValueLen = sizeof(pk11_dh_bn2);
|
||||
if (bits == 768) {
|
||||
public_template[DH_PRIME].pValue = pk11_dh_bn768;
|
||||
public_template[DH_PRIME].ulValueLen =
|
||||
sizeof(pk11_dh_bn768);
|
||||
} else if (bits == 1024) {
|
||||
public_template[DH_PRIME].pValue = pk11_dh_bn1024;
|
||||
public_template[DH_PRIME].ulValueLen =
|
||||
sizeof(pk11_dh_bn1024);
|
||||
} else {
|
||||
public_template[DH_PRIME].pValue = pk11_dh_bn1536;
|
||||
public_template[DH_PRIME].ulValueLen =
|
||||
sizeof(pk11_dh_bn1536);
|
||||
}
|
||||
param_attrcnt = 0;
|
||||
goto generate_keys;
|
||||
}
|
||||
|
||||
/* Generate Domain parameters */
|
||||
rv = pkcs_C_GenerateKey(hSession, &dpmech, domain_template,
|
||||
domain_attrcnt, &domainparams);
|
||||
@@ -479,7 +651,7 @@ main(int argc, char *argv[]) {
|
||||
fprintf(stderr,
|
||||
"C_GetAttributeValue0: Error = 0x%.8lX\n", rv);
|
||||
error = 1;
|
||||
goto exit_search;
|
||||
goto exit_domain;
|
||||
}
|
||||
|
||||
/* Allocate space for parameter attributes */
|
||||
@@ -492,22 +664,81 @@ main(int argc, char *argv[]) {
|
||||
if (param_template[i].pValue == NULL) {
|
||||
fprintf(stderr, "malloc failed\n");
|
||||
error = 1;
|
||||
goto exit_search;
|
||||
goto exit_params;
|
||||
}
|
||||
}
|
||||
|
||||
rv = pkcs_C_GetAttributeValue(hSession, domainparams,
|
||||
dsa_param_template, DSA_PARAM_ATTRS);
|
||||
|
||||
if (rv != CKR_OK) {
|
||||
fprintf(stderr,
|
||||
"C_GetAttributeValue1: Error = 0x%.8lX\n", rv);
|
||||
error = 1;
|
||||
goto exit_params;
|
||||
}
|
||||
|
||||
switch (keyclass) {
|
||||
case key_dsa:
|
||||
public_template[DSA_PRIME].pValue =
|
||||
param_template[DSA_PARAM_PRIME].pValue;
|
||||
public_template[DSA_PRIME].ulValueLen =
|
||||
param_template[DSA_PARAM_PRIME].ulValueLen;
|
||||
public_template[DSA_SUBPRIME].pValue =
|
||||
param_template[DSA_PARAM_SUBPRIME].pValue;
|
||||
public_template[DSA_SUBPRIME].ulValueLen =
|
||||
param_template[DSA_PARAM_SUBPRIME].ulValueLen;
|
||||
public_template[DSA_BASE].pValue =
|
||||
param_template[DSA_PARAM_BASE].pValue;
|
||||
public_template[DSA_BASE].ulValueLen =
|
||||
param_template[DSA_PARAM_BASE].ulValueLen;
|
||||
break;
|
||||
case key_dh:
|
||||
public_template[DH_PRIME].pValue =
|
||||
param_template[DH_PARAM_PRIME].pValue;
|
||||
public_template[DH_PRIME].ulValueLen =
|
||||
param_template[DH_PARAM_PRIME].ulValueLen;
|
||||
public_template[DH_BASE].pValue =
|
||||
param_template[DH_PARAM_BASE].pValue;
|
||||
public_template[DH_BASE].ulValueLen =
|
||||
param_template[DH_PARAM_BASE].ulValueLen;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
generate_keys:
|
||||
/* Generate Key pair for signing/verifying */
|
||||
rv = pkcs_C_GenerateKeyPair(hSession, &mech,
|
||||
public_template, public_attrcnt,
|
||||
private_template, private_attrcnt,
|
||||
&publickey, &privatekey);
|
||||
|
||||
|
||||
if (rv != CKR_OK) {
|
||||
fprintf(stderr, "C_GenerateKeyPair: Error = 0x%.8lX\n", rv);
|
||||
error = 1;
|
||||
} else if (!quiet)
|
||||
printf("Key pair generation complete.\n");
|
||||
|
||||
exit_params:
|
||||
/* Free parameter attributes */
|
||||
if (keyclass == key_dsa || keyclass == key_dh) {
|
||||
for (i = 0; i < param_attrcnt; i++) {
|
||||
if (param_template[i].pValue != NULL) {
|
||||
free(param_template[i].pValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exit_domain:
|
||||
/* Destroy domain parameters */
|
||||
if (keyclass == key_dsa || (keyclass == key_dh && !special)) {
|
||||
rv = pkcs_C_DestroyObject(hSession, domainparams);
|
||||
if (rv != CKR_OK) {
|
||||
fprintf(stderr,
|
||||
"C_DestroyObject: Error = 0x%.8lX\n", rv);
|
||||
error = 1;
|
||||
}
|
||||
}
|
||||
|
||||
exit_search:
|
||||
rv = pkcs_C_FindObjectsFinal(hSession);
|
||||
|
||||
@@ -67,7 +67,7 @@ main(int argc, char *argv[]) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (isc_mem_create(&mctx) != ISC_R_SUCCESS) {
|
||||
if (isc_mem_create(0, 0, &mctx) != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "isc_mem_create() failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -299,7 +299,8 @@
|
||||
Takes two arguments: keytype (eihter "zsk" or "ksk") and size.
|
||||
A default value for this option can be set in algorithm policies
|
||||
as well as in policy classes or zone policies. If no policy is
|
||||
configured, the default is 2048 bits for RSA keys.
|
||||
configured, the default is 1024 bits for DSA keys and 2048 for
|
||||
RSA.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -30,9 +30,9 @@ class dnskey:
|
||||
'Revoke', 'DSPublish', 'SyncPublish', 'SyncDelete')
|
||||
_OPTS = (None, '-P', '-A', '-I', '-D', '-R', None, '-Psync', '-Dsync')
|
||||
|
||||
_ALGNAMES = (None, 'RSAMD5', 'DH', 'DSA', None, 'RSASHA1',
|
||||
_ALGNAMES = (None, 'RSAMD5', 'DH', 'DSA', 'ECC', 'RSASHA1',
|
||||
'NSEC3DSA', 'NSEC3RSASHA1', 'RSASHA256', None,
|
||||
'RSASHA512', None, 'ECCGOST', 'ECDSAP256SHA256',
|
||||
'RSASHA512', None, None, 'ECDSAP256SHA256',
|
||||
'ECDSAP384SHA384', 'ED25519', 'ED448')
|
||||
|
||||
def __init__(self, key, directory=None, keyttl=None):
|
||||
|
||||
@@ -71,7 +71,7 @@ class PolicyLex:
|
||||
return t
|
||||
|
||||
def t_ALGNAME(self, t):
|
||||
r'(?i)\b(RSAMD5|DH|ECC|RSASHA1|NSEC3RSASHA1|RSASHA256|RSASHA512|ECDSAP256SHA256|ECDSAP384SHA384|ED25519|ED448)\b'
|
||||
r'(?i)\b(RSAMD5|DH|DSA|NSEC3DSA|ECC|RSASHA1|NSEC3RSASHA1|RSASHA256|RSASHA512|ECDSAP256SHA256|ECDSAP384SHA384|ED25519|ED448)\b'
|
||||
t.value = t.value.upper()
|
||||
return t
|
||||
|
||||
@@ -132,7 +132,9 @@ class Policy:
|
||||
keyttl = None
|
||||
coverage = None
|
||||
directory = None
|
||||
valid_key_sz_per_algo = {'RSAMD5': [1024, 4096],
|
||||
valid_key_sz_per_algo = {'DSA': [512, 1024],
|
||||
'NSEC3DSA': [512, 1024],
|
||||
'RSAMD5': [1024, 4096],
|
||||
'RSASHA1': [1024, 4096],
|
||||
'NSEC3RSASHA1': [512, 4096],
|
||||
'RSASHA256': [1024, 4096],
|
||||
@@ -262,6 +264,19 @@ class Policy:
|
||||
return False, 'ZSK key size %d outside valid range %s' \
|
||||
% (self.zsk_keysize, key_sz_range)
|
||||
|
||||
# Specific check for DSA keys
|
||||
if self.algorithm in ['DSA', 'NSEC3DSA'] and \
|
||||
self.ksk_keysize % 64 != 0:
|
||||
return False, \
|
||||
('KSK key size %d not divisible by 64 ' +
|
||||
'as required for DSA') % self.ksk_keysize
|
||||
|
||||
if self.algorithm in ['DSA', 'NSEC3DSA'] and \
|
||||
self.zsk_keysize % 64 != 0:
|
||||
return False, \
|
||||
('ZSK key size %d not divisible by 64 ' +
|
||||
'as required for DSA') % self.zsk_keysize
|
||||
|
||||
if self.algorithm in ['ECDSAP256SHA256', \
|
||||
'ECDSAP384SHA384', \
|
||||
'ED25519', \
|
||||
@@ -320,6 +335,16 @@ class dnssec_policy:
|
||||
p.zsk_keysize = 2048;
|
||||
|
||||
# set default algorithm policies
|
||||
# these need a lower default key size:
|
||||
self.alg_policy['DSA'] = copy(p)
|
||||
self.alg_policy['DSA'].algorithm = "DSA"
|
||||
self.alg_policy['DSA'].name = "DSA"
|
||||
self.alg_policy['DSA'].ksk_keysize = 1024;
|
||||
|
||||
self.alg_policy['NSEC3DSA'] = copy(p)
|
||||
self.alg_policy['NSEC3DSA'].algorithm = "NSEC3DSA"
|
||||
self.alg_policy['NSEC3DSA'].name = "NSEC3DSA"
|
||||
self.alg_policy['NSEC3DSA'].ksk_keysize = 1024;
|
||||
|
||||
# these can use default settings
|
||||
self.alg_policy['RSAMD5'] = copy(p)
|
||||
|
||||
@@ -25,6 +25,15 @@ class PolicyTest(unittest.TestCase):
|
||||
self.assertEqual(p.constructed(), False)
|
||||
self.assertEqual(p.validate(), (True, ""))
|
||||
|
||||
p = pol.policy('good_dsa.test', novalidate=True)
|
||||
self.assertEqual(p.get_name(), "good_dsa.test")
|
||||
self.assertEqual(p.constructed(), False)
|
||||
self.assertEqual(p.validate(), (True, ""))
|
||||
|
||||
p = pol.policy('bad_dsa.test', novalidate=True)
|
||||
self.assertEqual(p.validate(),
|
||||
(False, 'ZSK key size 769 not divisible by 64 as required for DSA'))
|
||||
|
||||
def test_prepublish(self):
|
||||
pol = policy.dnssec_policy()
|
||||
pol.load('test-policies/02-prepublish.pol')
|
||||
|
||||
+1
-1
@@ -932,7 +932,7 @@ main(int argc, char **argv) {
|
||||
|
||||
serial = isc_random32();
|
||||
|
||||
DO("create memory context", isc_mem_create(&rndc_mctx));
|
||||
DO("create memory context", isc_mem_create(0, 0, &rndc_mctx));
|
||||
DO("create socket manager", isc_socketmgr_create(rndc_mctx, &socketmgr));
|
||||
DO("create task manager", isc_taskmgr_create(rndc_mctx, 1, 0, &taskmgr));
|
||||
DO("create task", isc_task_create(taskmgr, 0, &task));
|
||||
|
||||
+8
-22
@@ -575,7 +575,7 @@
|
||||
|
||||
<varlistentry>
|
||||
<term><userinput>nta
|
||||
<optional>( -class <replaceable>class</replaceable> | -dump | -force | -remove | -lifetime <replaceable>duration</replaceable>)</optional>
|
||||
<optional>( -d | -f | -r | -l <replaceable>duration</replaceable>)</optional>
|
||||
<replaceable>domain</replaceable>
|
||||
<optional><replaceable>view</replaceable></optional>
|
||||
</userinput></term>
|
||||
@@ -623,7 +623,7 @@
|
||||
is equivalent to <option>-remove</option>.
|
||||
</para>
|
||||
<para>
|
||||
If the <option>-dump</option> is used, any other arguments
|
||||
If <option>-dump</option> is used, any other arguments
|
||||
are ignored, and a list of existing NTAs is printed
|
||||
(note that this may include NTAs that are expired but
|
||||
have not yet been cleaned up).
|
||||
@@ -640,21 +640,10 @@
|
||||
lifetime, regardless of whether data could be
|
||||
validated if the NTA were not present.
|
||||
</para>
|
||||
<para>
|
||||
The view class can be specified with <option>-class</option>.
|
||||
The default is class <userinput>IN</userinput>, which is
|
||||
the only class for which DNSSEC is currently supported.
|
||||
</para>
|
||||
<para>
|
||||
All of these options can be shortened, i.e., to
|
||||
<option>-l</option>, <option>-r</option>, <option>-d</option>,
|
||||
<option>-f</option>, and <option>-c</option>.
|
||||
</para>
|
||||
<para>
|
||||
Unrecognized options are treated as errors. To reference
|
||||
a domain or view name that begins with a hyphen,
|
||||
use a double-hyphen on the command line to indicate the
|
||||
end of options.
|
||||
and <option>-f</option>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@@ -1076,14 +1065,11 @@
|
||||
<listitem>
|
||||
<para>
|
||||
Enable, disable, or check the current status of
|
||||
DNSSEC validation. By default, validation is enabled.
|
||||
(Note that <command>dnssec-enable</command> must also be
|
||||
<userinput>yes</userinput> (the default value) for signatures
|
||||
to be returned along with validated data. If validation is
|
||||
enabled while <command>dnssec-enable</command> is set to
|
||||
<userinput>no</userinput>, the server will validate internally,
|
||||
but will not supply clients with the necessary records to allow
|
||||
validity to be confirmed.)
|
||||
DNSSEC validation.
|
||||
Note <command>dnssec-enable</command> also needs to be
|
||||
set to <userinput>yes</userinput> or
|
||||
<userinput>auto</userinput> to be effective.
|
||||
It defaults to enabled.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@@ -70,7 +70,7 @@ main(int argc, char **argv) {
|
||||
char *filename = NULL;
|
||||
unsigned int zonetype = 0;
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
result = isc_log_create(mctx, &lctx, &lcfg);
|
||||
check_result(result, "isc_log_create()");
|
||||
@@ -115,8 +115,6 @@ main(int argc, char **argv) {
|
||||
strcmp(argv[1], "seconary") == 0)
|
||||
{
|
||||
zonetype = CFG_ZONE_SLAVE;
|
||||
} else if (strcmp(argv[1], "mirror") == 0) {
|
||||
zonetype = CFG_ZONE_MIRROR;
|
||||
} else if (strcmp(argv[1], "stub") == 0) {
|
||||
zonetype = CFG_ZONE_STUB;
|
||||
} else if (strcmp(argv[1], "static-stub") == 0) {
|
||||
|
||||
@@ -97,7 +97,7 @@ main(int argc, char **argv) {
|
||||
journal = argv[4];
|
||||
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGRECORD;
|
||||
CHECK(isc_mem_create(&mctx));
|
||||
CHECK(isc_mem_create(0, 0, &mctx));
|
||||
|
||||
CHECK(dst_lib_init(mctx, NULL));
|
||||
dst_active = true;
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
child.example. IN KEY 256 3 3 ALeiYGFXbil6PgHnkm5ZE67ygEVDvGT/gqZmLH7tGboofcPSfyhh1hpw dxZgJ26d/gynWMGVSYzaXfzsxpPoNeYn+qeevQoJOaxXXlfcy8Ik52Rm eW0J9mWlf9hsD7ShIhh1+0kRYGCOCaU25wIe3SLVkN3HgqiCBDYnBY0u nMkqRadiUnoEa3Tcvc9kJx9r9gDstR2A9A5sBhFLI/XQ0gViHHLVpQ4x hz+rTLb/xrBoAb5sQJT3xUjhhdNo9HuL6kwdLdSu//PCl1QnY9NpYPVV SKUo
|
||||
@@ -0,0 +1,7 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 3 (DSA)
|
||||
Prime(p): vGT/gqZmLH7tGboofcPSfyhh1hpwdxZgJ26d/gynWMGVSYzaXfzsxpPoNeYn+qeevQoJOaxXXlfcy8Ik52RmeQ==
|
||||
Subprime(q): t6JgYVduKXo+AeeSblkTrvKARUM=
|
||||
Base(g): bQn2ZaV/2GwPtKEiGHX7SRFgYI4JpTbnAh7dItWQ3ceCqIIENicFjS6cySpFp2JSegRrdNy9z2QnH2v2AOy1HQ==
|
||||
Private_value(x): J1Ctez8+w1PTR56Hze3pGoe0Wag=
|
||||
Public_value(y): gPQObAYRSyP10NIFYhxy1aUOMYc/q0y2/8awaAG+bECU98VI4YXTaPR7i+pMHS3Urv/zwpdUJ2PTaWD1VUilKA==
|
||||
@@ -1,5 +0,0 @@
|
||||
; This is a zone-signing key, keyid 33180, for child.example.
|
||||
; Created: 20181025104746 (Thu Oct 25 12:47:46 2018)
|
||||
; Publish: 20181025104746 (Thu Oct 25 12:47:46 2018)
|
||||
; Activate: 20181025104746 (Thu Oct 25 12:47:46 2018)
|
||||
child.example. IN DNSKEY 256 3 5 AwEAAb9eatC8ASzDnRApcZuxyBrvJRANRQjCXQ1FWK+8vEyXV5NIE9Km hKIV2wbq2tLBPfjNQz4BTJ9RmDINf1RayDlt6L+IQV1JCaDaMjd1zU3n SQK18Y7fMu0ww4AMKOnoVRbkIxa3zlA0chImXcfPE0q2AvKBYLzPfkPO cfplAuRkLcGUxdADCipNzCOakpcd5gfm9Sa2HlaXcw3gyI1WcE8=
|
||||
@@ -1,13 +0,0 @@
|
||||
Private-key-format: v1.3
|
||||
Algorithm: 5 (RSASHA1)
|
||||
Modulus: v15q0LwBLMOdEClxm7HIGu8lEA1FCMJdDUVYr7y8TJdXk0gT0qaEohXbBura0sE9+M1DPgFMn1GYMg1/VFrIOW3ov4hBXUkJoNoyN3XNTedJArXxjt8y7TDDgAwo6ehVFuQjFrfOUDRyEiZdx88TSrYC8oFgvM9+Q85x+mUC5GQtwZTF0AMKKk3MI5qSlx3mB+b1JrYeVpdzDeDIjVZwTw==
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: WDsn9GU6BXGLENCK2MX3BLQN2oDDu24hiOTYJu5VwtpkPjuVKCIuNKzu9xmBGnqOIBBDWGsw8KOmEC247yOL/S53iRdBS8lI7yiqznc52RhlmrdPKXbNpVnPwil8wocw+oQYa7uvdPYxI2Yy3B/tRgUxlxSlc/LW/dr0BX2L7qr/aeOBeGSRUlCpc7tYU9a2RUaLpVxF6SlqicCpC91MAQ==
|
||||
Prime1: 466f+JL66Bl4qYnkj0s9+1N3pYmdcM9Ja1AN66X4VLslA9Cm1JEaC5V9HOptfcXUk0XYEVnKeKM2lIQnvcLG0yuQHIa+pGi7P8vgQfdaRUE=
|
||||
Prime2: 1yuUkTVRSbUWeUreEcHgeeBBJ61UshX7t07gnGgIr3artGdo2CVEb5//+2Mvj5bgjCQBvjBbmHNZrR0jKDRBTIGtqbBerOuhEN4AXdAEgY8=
|
||||
Exponent1: KzUXbJ/P973ltR7S/hKEV66WVRbRhvf/cdsGWULs5n+BXcD59/r1W19qF9OxJZ4mYjBt+ZT1pIEsuXB+7jcJbkelGJTFlwO9DTVOgJZFTkE=
|
||||
Exponent2: FTPsLertGbBIiKdB/sn2Dsx0Xy6LXAkihsu1AnSV9oRhIyPVhwcVGVLQ7Lq3YxThB648pbsqK3miapamcj3D+YAF1uTUT4Hgm0LlEll/OC0=
|
||||
Coefficient: Vulw9kmmjKc+wmOukLdzheoA2hNPDVtgiynfzHybyXdqvapCoK+ZVmNFzjO0M41ATcpvya3iX0bekMQqYnBhLURNZUIyqz2nGskOjV8I5Jg=
|
||||
Created: 20181025104746
|
||||
Publish: 20181025104746
|
||||
Activate: 20181025104746
|
||||
@@ -49,6 +49,7 @@ XTARGETS = adb_test@EXEEXT@ \
|
||||
db_test@EXEEXT@ \
|
||||
dst_test@EXEEXT@ \
|
||||
gsstest@EXEEXT@ \
|
||||
hash_test@EXEEXT@ \
|
||||
fsaccess_test@EXEEXT@ \
|
||||
inter_test@EXEEXT@ \
|
||||
lex_test@EXEEXT@ \
|
||||
@@ -77,6 +78,7 @@ XSRCS = adb_test.c \
|
||||
byname_test.c \
|
||||
db_test.c \
|
||||
dst_test.c \
|
||||
hash_test.c \
|
||||
fsaccess_test.c \
|
||||
gsstest.c \
|
||||
inter_test.c \
|
||||
@@ -165,6 +167,10 @@ name_test@EXEEXT@: name_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
|
||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ name_test.@O@ \
|
||||
${DNSLIBS} ${ISCLIBS} ${LIBS}
|
||||
|
||||
hash_test@EXEEXT@: hash_test.@O@ ${ISCDEPLIBS}
|
||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ hash_test.@O@ \
|
||||
${ISCLIBS} ${LIBS}
|
||||
|
||||
entropy_test@EXEEXT@: entropy_test.@O@ ${ISCDEPLIBS}
|
||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ entropy_test.@O@ \
|
||||
${ISCLIBS} ${LIBS}
|
||||
|
||||
@@ -297,7 +297,7 @@ main(int argc, char **argv) {
|
||||
/*
|
||||
* EVERYTHING needs a memory context.
|
||||
*/
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
cmp = NULL;
|
||||
RUNTIME_CHECK(isc_mempool_create(mctx, sizeof(client_t), &cmp)
|
||||
|
||||
@@ -89,7 +89,7 @@ main(int argc, char *argv[]) {
|
||||
dns_result_register();
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
while ((ch = isc_commandline_parse(argc, argv, "nvw:")) != -1) {
|
||||
switch (ch) {
|
||||
|
||||
@@ -203,7 +203,7 @@ main(int argc, char *argv[]) {
|
||||
dns_result_register();
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
while ((ch = isc_commandline_parse(argc, argv, "d:vw:")) != -1) {
|
||||
switch (ch) {
|
||||
|
||||
@@ -359,6 +359,7 @@ main(int argc, char *argv[]) {
|
||||
dbinfo *dbi;
|
||||
dns_dbversion_t *version;
|
||||
const dns_name_t *origin;
|
||||
size_t memory_quota = 0;
|
||||
dns_trust_t trust = 0;
|
||||
unsigned int addopts;
|
||||
isc_log_t *lctx = NULL;
|
||||
@@ -366,12 +367,12 @@ main(int argc, char *argv[]) {
|
||||
|
||||
dns_result_register();
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(dns_dbtable_create(mctx, dns_rdataclass_in, &dbtable) ==
|
||||
ISC_R_SUCCESS);
|
||||
|
||||
snprintf(dbtype, sizeof(dbtype), "rbt");
|
||||
while ((ch = isc_commandline_parse(argc, argv, "c:d:t:z:P:glpqvT"))
|
||||
while ((ch = isc_commandline_parse(argc, argv, "c:d:t:z:P:Q:glpqvT"))
|
||||
!= -1) {
|
||||
switch (ch) {
|
||||
case 'c':
|
||||
@@ -410,6 +411,10 @@ main(int argc, char *argv[]) {
|
||||
case 'P':
|
||||
pause_every = atoi(isc_commandline_argument);
|
||||
break;
|
||||
case 'Q':
|
||||
memory_quota = atoi(isc_commandline_argument);
|
||||
isc_mem_setquota(mctx, memory_quota);
|
||||
break;
|
||||
case 't':
|
||||
type = atoi(isc_commandline_argument);
|
||||
break;
|
||||
@@ -766,7 +771,7 @@ main(int argc, char *argv[]) {
|
||||
if (noexact_zonecut)
|
||||
zcoptions |= DNS_DBFIND_NOEXACT;
|
||||
result = dns_db_findzonecut(db, &name, zcoptions,
|
||||
0, &node, fname, NULL,
|
||||
0, &node, fname,
|
||||
&rdataset, &sigrdataset);
|
||||
} else {
|
||||
result = dns_db_find(db, &name, version, type,
|
||||
|
||||
@@ -232,7 +232,7 @@ main(void) {
|
||||
dns_name_t *name;
|
||||
isc_result_t result;
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (1);
|
||||
|
||||
@@ -254,9 +254,11 @@ main(void) {
|
||||
result = dns_name_fromtext(name, &b, NULL, 0, NULL);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (1);
|
||||
io(name, 23616, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx);
|
||||
io(name, 54622, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC,
|
||||
mctx);
|
||||
|
||||
io(name, 49667, DST_ALG_DSA, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx);
|
||||
io(name, 2, DST_ALG_RSAMD5, DST_TYPE_PRIVATE|DST_TYPE_PUBLIC, mctx);
|
||||
|
||||
isc_buffer_constinit(&b, "dh.", 3);
|
||||
@@ -268,6 +270,7 @@ main(void) {
|
||||
|
||||
generate(DST_ALG_RSAMD5, mctx);
|
||||
generate(DST_ALG_DH, mctx);
|
||||
generate(DST_ALG_DSA, mctx);
|
||||
generate(DST_ALG_HMACMD5, mctx);
|
||||
|
||||
dst_lib_destroy();
|
||||
|
||||
@@ -447,7 +447,7 @@ main(int argc, char *argv[]) {
|
||||
dns_result_register();
|
||||
|
||||
mctx = NULL;
|
||||
RUNCHECK(isc_mem_create(&mctx));
|
||||
RUNCHECK(isc_mem_create(0, 0, &mctx));
|
||||
|
||||
RUNCHECK(isc_log_create(mctx, &lctx, &lcfg));
|
||||
isc_log_setcontext(lctx);
|
||||
|
||||
@@ -0,0 +1,284 @@
|
||||
/*
|
||||
* Copyright (C) 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/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
/*! \file */
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <isc/hmacmd5.h>
|
||||
#include <isc/hmacsha.h>
|
||||
#include <isc/md5.h>
|
||||
#include <isc/sha1.h>
|
||||
#include <isc/util.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/string.h>
|
||||
|
||||
#include <pk11/site.h>
|
||||
|
||||
static void
|
||||
print_digest(const char *s, const char *hash, unsigned char *d,
|
||||
unsigned int words)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
printf("hash (%s) %s:\n\t", hash, s);
|
||||
for (i = 0; i < words; i++) {
|
||||
printf(" ");
|
||||
for (j = 0; j < 4; j++)
|
||||
printf("%02x", d[i * 4 + j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
isc_sha1_t sha1;
|
||||
isc_sha224_t sha224;
|
||||
isc_md5_t md5;
|
||||
isc_hmacmd5_t hmacmd5;
|
||||
isc_hmacsha1_t hmacsha1;
|
||||
isc_hmacsha224_t hmacsha224;
|
||||
isc_hmacsha256_t hmacsha256;
|
||||
isc_hmacsha384_t hmacsha384;
|
||||
isc_hmacsha512_t hmacsha512;
|
||||
unsigned char digest[ISC_SHA512_DIGESTLENGTH];
|
||||
unsigned char buffer[1024];
|
||||
const char *s;
|
||||
unsigned char key[20];
|
||||
|
||||
UNUSED(argc);
|
||||
UNUSED(argv);
|
||||
|
||||
s = "abc";
|
||||
isc_sha1_init(&sha1);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_sha1_update(&sha1, buffer, strlen(s));
|
||||
isc_sha1_final(&sha1, digest);
|
||||
print_digest(s, "sha1", digest, ISC_SHA1_DIGESTLENGTH/4);
|
||||
|
||||
s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
||||
isc_sha1_init(&sha1);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_sha1_update(&sha1, buffer, strlen(s));
|
||||
isc_sha1_final(&sha1, digest);
|
||||
print_digest(s, "sha1", digest, ISC_SHA1_DIGESTLENGTH/4);
|
||||
|
||||
s = "abc";
|
||||
isc_sha224_init(&sha224);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_sha224_update(&sha224, buffer, strlen(s));
|
||||
isc_sha224_final(digest, &sha224);
|
||||
print_digest(s, "sha224", digest, ISC_SHA224_DIGESTLENGTH/4);
|
||||
|
||||
s = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
|
||||
isc_sha224_init(&sha224);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_sha224_update(&sha224, buffer, strlen(s));
|
||||
isc_sha224_final(digest, &sha224);
|
||||
print_digest(s, "sha224", digest, ISC_SHA224_DIGESTLENGTH/4);
|
||||
|
||||
s = "abc";
|
||||
isc_md5_init(&md5);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_md5_update(&md5, buffer, strlen(s));
|
||||
isc_md5_final(&md5, digest);
|
||||
print_digest(s, "md5", digest, 4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-MD5 examples from RFC2104
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 16);
|
||||
isc_hmacmd5_init(&hmacmd5, key, 16);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacmd5_update(&hmacmd5, buffer, strlen(s));
|
||||
isc_hmacmd5_sign(&hmacmd5, digest);
|
||||
print_digest(s, "hmacmd5", digest, 4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacmd5_init(&hmacmd5, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacmd5_update(&hmacmd5, buffer, strlen(s));
|
||||
isc_hmacmd5_sign(&hmacmd5, digest);
|
||||
print_digest(s, "hmacmd5", digest, 4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 16);
|
||||
isc_hmacmd5_init(&hmacmd5, key, 16);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacmd5_update(&hmacmd5, buffer, strlen(s));
|
||||
isc_hmacmd5_sign(&hmacmd5, digest);
|
||||
print_digest(s, "hmacmd5", digest, 4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-SHA1 examples from RFC4634.
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 20);
|
||||
isc_hmacsha1_init(&hmacsha1, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha1_update(&hmacsha1, buffer, strlen(s));
|
||||
isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacsha1_init(&hmacsha1, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha1_update(&hmacsha1, buffer, strlen(s));
|
||||
isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 20);
|
||||
isc_hmacsha1_init(&hmacsha1, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha1_update(&hmacsha1, buffer, strlen(s));
|
||||
isc_hmacsha1_sign(&hmacsha1, digest, ISC_SHA1_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha1", digest, ISC_SHA1_DIGESTLENGTH/4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-SHA224 examples from RFC4634.
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 20);
|
||||
isc_hmacsha224_init(&hmacsha224, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha224_update(&hmacsha224, buffer, strlen(s));
|
||||
isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacsha224_init(&hmacsha224, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha224_update(&hmacsha224, buffer, strlen(s));
|
||||
isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 20);
|
||||
isc_hmacsha224_init(&hmacsha224, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha224_update(&hmacsha224, buffer, strlen(s));
|
||||
isc_hmacsha224_sign(&hmacsha224, digest, ISC_SHA224_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha224", digest, ISC_SHA224_DIGESTLENGTH/4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-SHA256 examples from RFC4634.
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 20);
|
||||
isc_hmacsha256_init(&hmacsha256, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha256_update(&hmacsha256, buffer, strlen(s));
|
||||
isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacsha256_init(&hmacsha256, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha256_update(&hmacsha256, buffer, strlen(s));
|
||||
isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 20);
|
||||
isc_hmacsha256_init(&hmacsha256, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha256_update(&hmacsha256, buffer, strlen(s));
|
||||
isc_hmacsha256_sign(&hmacsha256, digest, ISC_SHA256_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha256", digest, ISC_SHA256_DIGESTLENGTH/4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-SHA384 examples from RFC4634.
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 20);
|
||||
isc_hmacsha384_init(&hmacsha384, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha384_update(&hmacsha384, buffer, strlen(s));
|
||||
isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacsha384_init(&hmacsha384, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha384_update(&hmacsha384, buffer, strlen(s));
|
||||
isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 20);
|
||||
isc_hmacsha384_init(&hmacsha384, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha384_update(&hmacsha384, buffer, strlen(s));
|
||||
isc_hmacsha384_sign(&hmacsha384, digest, ISC_SHA384_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha384", digest, ISC_SHA384_DIGESTLENGTH/4);
|
||||
|
||||
/*
|
||||
* The 3 HMAC-SHA512 examples from RFC4634.
|
||||
*/
|
||||
s = "Hi There";
|
||||
memset(key, 0x0b, 20);
|
||||
isc_hmacsha512_init(&hmacsha512, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha512_update(&hmacsha512, buffer, strlen(s));
|
||||
isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4);
|
||||
|
||||
s = "what do ya want for nothing?";
|
||||
strlcpy((char *)key, "Jefe", sizeof(key));
|
||||
isc_hmacsha512_init(&hmacsha512, key, 4);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha512_update(&hmacsha512, buffer, strlen(s));
|
||||
isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4);
|
||||
|
||||
s = "\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335"
|
||||
"\335\335\335\335\335\335\335\335\335\335";
|
||||
memset(key, 0xaa, 20);
|
||||
isc_hmacsha512_init(&hmacsha512, key, 20);
|
||||
memmove(buffer, s, strlen(s));
|
||||
isc_hmacsha512_update(&hmacsha512, buffer, strlen(s));
|
||||
isc_hmacsha512_sign(&hmacsha512, digest, ISC_SHA512_DIGESTLENGTH);
|
||||
print_digest(s, "hmacsha512", digest, ISC_SHA512_DIGESTLENGTH/4);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -31,7 +31,7 @@ main(int argc, char **argv) {
|
||||
UNUSED(argc);
|
||||
UNUSED(argv);
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
result = isc_interfaceiter_create(mctx, &iter);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
@@ -91,7 +91,7 @@ main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_lex_create(mctx, 256, &lex) == ISC_R_SUCCESS);
|
||||
|
||||
if (masterfile) {
|
||||
|
||||
@@ -108,7 +108,7 @@ main(int argc, char **argv) {
|
||||
lctx = NULL;
|
||||
lcfg = NULL;
|
||||
|
||||
CHECK(isc_mem_create(&mctx));
|
||||
CHECK(isc_mem_create(0, 0, &mctx));
|
||||
CHECK(isc_log_create(mctx, &lctx, &lcfg));
|
||||
|
||||
CHECK(isc_log_settag(lcfg, progname));
|
||||
|
||||
@@ -59,7 +59,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
UNUSED(argc);
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
if (argv[1]) {
|
||||
isc_buffer_init(&source, argv[1], strlen(argv[1]));
|
||||
|
||||
@@ -33,7 +33,7 @@ main(int argc, char *argv[]) {
|
||||
RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS);
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
mp1 = NULL;
|
||||
RUNTIME_CHECK(isc_mempool_create(mctx, 24, &mp1) == ISC_R_SUCCESS);
|
||||
|
||||
@@ -192,7 +192,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
dns_result_register();
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
check_result(result, "isc_mem_create()");
|
||||
|
||||
argc--;
|
||||
|
||||
@@ -103,7 +103,7 @@ main(int argc, char *argv[]) {
|
||||
isc_app_start();
|
||||
isc_interval_set(&linterval, 1, 0);
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_taskmgr_create(mctx, 3, 0, &taskmgr) ==
|
||||
ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) ==
|
||||
|
||||
@@ -283,7 +283,7 @@ main(int argc, char **argv) {
|
||||
*/
|
||||
isc_mem_debugging = ISC_MEM_DEBUGRECORD;
|
||||
|
||||
result = isc_mem_create(&mctx);
|
||||
result = isc_mem_create(0, 0, &mctx);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
printf("isc_mem_create: %s: exiting\n",
|
||||
dns_result_totext(result));
|
||||
|
||||
@@ -180,9 +180,9 @@ main(int argc, char *argv[]) {
|
||||
printf("%u workers\n", workers);
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
mctx2 = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx2) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx2) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &task_manager) ==
|
||||
ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_timermgr_create(mctx, &timer_manager) ==
|
||||
|
||||
@@ -209,7 +209,7 @@ main(int argc, char *argv[]) {
|
||||
RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS);
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
while ((ch = isc_commandline_parse(argc, argv, "vp:")) != -1) {
|
||||
switch (ch) {
|
||||
@@ -255,7 +255,7 @@ main(int argc, char *argv[]) {
|
||||
CHECK("dns_name_fromtext", result);
|
||||
|
||||
key = NULL;
|
||||
result = dst_key_fromfile(name, 33180, DNS_KEYALG_RSASHA1,
|
||||
result = dst_key_fromfile(name, 4017, DNS_KEYALG_DSA,
|
||||
DST_TYPE_PUBLIC | DST_TYPE_PRIVATE,
|
||||
NULL, mctx, &key);
|
||||
CHECK("dst_key_fromfile", result);
|
||||
|
||||
@@ -291,7 +291,7 @@ main(int argc, char *argv[]) {
|
||||
* EVERYTHING needs a memory context.
|
||||
*/
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
/*
|
||||
* The task manager is independent (other than memory context)
|
||||
|
||||
@@ -61,7 +61,7 @@ main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_symtab_create(mctx, 691, undefine_action, NULL,
|
||||
case_sensitive, &st) == ISC_R_SUCCESS);
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ main(int argc, char *argv[]) {
|
||||
workers = 2;
|
||||
printf("%u workers\n", workers);
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
RUNTIME_CHECK(isc_taskmgr_create(mctx, workers, 0, &manager) ==
|
||||
ISC_R_SUCCESS);
|
||||
|
||||
@@ -109,7 +109,7 @@ main(int argc, char *argv[]) {
|
||||
workers = 2;
|
||||
printf("%u workers\n", workers);
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx1) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx1) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_taskmgr_create(mctx1, workers, 0, &manager) ==
|
||||
ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_timermgr_create(mctx1, &timgr) == ISC_R_SUCCESS);
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
@@ -36,6 +35,10 @@
|
||||
#include <dns/result.h>
|
||||
#include <dns/zone.h>
|
||||
|
||||
#ifdef ISC_PLATFORM_NEEDSYSSELECTH
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
static int debug = 0;
|
||||
static int quiet = 0;
|
||||
static int stats = 0;
|
||||
@@ -283,7 +286,7 @@ main(int argc, char **argv) {
|
||||
usage();
|
||||
|
||||
RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(&mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_taskmgr_create(mctx, 2, 0, &taskmgr) ==
|
||||
ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_timermgr_create(mctx, &timermgr) == ISC_R_SUCCESS);
|
||||
|
||||
@@ -22,10 +22,3 @@ ns2 A 10.53.0.2
|
||||
|
||||
a A 10.0.7.1
|
||||
mail A 10.0.7.2
|
||||
b A 10.0.7.3
|
||||
c A 10.0.7.4
|
||||
d A 10.0.7.5
|
||||
e A 10.0.7.6
|
||||
f A 10.0.7.7
|
||||
g A 10.0.7.8
|
||||
h A 10.0.7.9
|
||||
|
||||
-9
@@ -18,15 +18,6 @@ options {
|
||||
dnssec-validation no;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
secret "1234abcd8765";
|
||||
algorithm hmac-sha256;
|
||||
};
|
||||
|
||||
controls {
|
||||
inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type hint;
|
||||
file "../../common/root.hint";
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 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/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
port @PORT@;
|
||||
pid-file "named.pid";
|
||||
listen-on { 10.53.0.3; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
allow-recursion { any; };
|
||||
allow-recursion-on { none; };
|
||||
allow-query-cache-on { 10.53.0.3; };
|
||||
dnssec-validation no;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
secret "1234abcd8765";
|
||||
algorithm hmac-sha256;
|
||||
};
|
||||
|
||||
controls {
|
||||
inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type hint;
|
||||
file "../../common/root.hint";
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 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/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
port @PORT@;
|
||||
pid-file "named.pid";
|
||||
listen-on { 10.53.0.3; 10.53.1.2; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
allow-recursion { any; };
|
||||
allow-query-cache { any; };
|
||||
allow-query-cache-on { 10.53.0.3; }; # allow-recursion-on inherits
|
||||
dnssec-validation no;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
secret "1234abcd8765";
|
||||
algorithm hmac-sha256;
|
||||
};
|
||||
|
||||
controls {
|
||||
inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type hint;
|
||||
file "../../common/root.hint";
|
||||
};
|
||||
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 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/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
port @PORT@;
|
||||
pid-file "named.pid";
|
||||
listen-on { 10.53.0.3; 10.53.1.2; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
allow-recursion { any; };
|
||||
allow-query-cache { any; };
|
||||
allow-recursion-on { 10.53.0.3; }; # allow-query-cache-on inherits
|
||||
dnssec-validation no;
|
||||
};
|
||||
|
||||
key rndc_key {
|
||||
secret "1234abcd8765";
|
||||
algorithm hmac-sha256;
|
||||
};
|
||||
|
||||
controls {
|
||||
inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
||||
};
|
||||
|
||||
zone "." {
|
||||
type hint;
|
||||
file "../../common/root.hint";
|
||||
};
|
||||
@@ -12,9 +12,7 @@
|
||||
SYSTEMTESTTOP=..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
|
||||
$SHELL clean.sh
|
||||
|
||||
copy_setports ../common/controls.conf.in ns2/controls.conf
|
||||
copy_setports ns1/named.conf.in ns1/named.conf
|
||||
copy_setports ns2/named01.conf.in ns2/named.conf
|
||||
copy_setports ns3/named1.conf.in ns3/named.conf
|
||||
copy_setports ns3/named.conf.in ns3/named.conf
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user