Compare commits

..
Author SHA1 Message Date
Evan Hunt 3063f34e47 put A and AAAA in additional section when responding to type=ANAME queries 2018-03-18 14:27:22 +00:00
Evan Hunt 8c0f8a7c0c initial implementation of ANAME rrtype, using type code point 65532
- this is only the bare type represetation, with no special processing
2018-03-18 11:40:51 +00:00
2492 changed files with 157801 additions and 40737 deletions
-2
View File
@@ -7,8 +7,6 @@ libtool
/isc-config.sh /isc-config.sh
/configure.lineno /configure.lineno
autom4te.cache/ autom4te.cache/
*.rej
*.orig
*.o *.o
*.lo *.lo
*.so *.so
+4 -179
View File
@@ -2,141 +2,105 @@ variables:
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
LC_ALL: C LC_ALL: C
DOCKER_DRIVER: overlay2 DOCKER_DRIVER: overlay2
CI_REGISTRY_IMAGE: registry.gitlab.isc.org/isc-projects/images/bind9 CI_REGISTRY_IMAGE: oerdnj/bind9
CCACHE_DIR: "/ccache" CCACHE_DIR: "/ccache"
SOFTHSM2_CONF: "/var/tmp/softhsm2/softhsm2.conf"
stages: stages:
- precheck - precheck
- build - build
- test - test
.centos-centos6-amd64: &centos_centos6_amd64_image
image: "$CI_REGISTRY_IMAGE:centos-centos6-amd64"
tags:
- linux
- docker
- amd64
.centos-centos7-amd64: &centos_centos7_amd64_image
image: "$CI_REGISTRY_IMAGE:centos-centos7-amd64"
tags:
- linux
- docker
- amd64
.debian-jessie-amd64: &debian_jessie_amd64_image .debian-jessie-amd64: &debian_jessie_amd64_image
image: "$CI_REGISTRY_IMAGE:debian-jessie-amd64" image: "$CI_REGISTRY_IMAGE:debian-jessie-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.debian-jessie-i386: &debian_jessie_i386_image .debian-jessie-i386: &debian_jessie_i386_image
image: "$CI_REGISTRY_IMAGE:debian-jessie-i386" image: "$CI_REGISTRY_IMAGE:debian-jessie-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.debian-stretch-amd64: &debian_stretch_amd64_image .debian-stretch-amd64: &debian_stretch_amd64_image
image: "$CI_REGISTRY_IMAGE:debian-stretch-amd64" image: "$CI_REGISTRY_IMAGE:debian-stretch-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.debian-stretch-i386:: &debian_stretch_i386_image .debian-stretch-i386:: &debian_stretch_i386_image
image: "$CI_REGISTRY_IMAGE:debian-stretch-i386" image: "$CI_REGISTRY_IMAGE:debian-stretch-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.debian-buster-amd64: &debian_buster_amd64_image .debian-buster-amd64: &debian_buster_amd64_image
image: "$CI_REGISTRY_IMAGE:debian-buster-amd64" image: "$CI_REGISTRY_IMAGE:debian-buster-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.debian-buster-i386:: &debian_buster_i386_image .debian-buster-i386:: &debian_buster_i386_image
image: "$CI_REGISTRY_IMAGE:debian-buster-i386" image: "$CI_REGISTRY_IMAGE:debian-buster-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.debian-sid-amd64: &debian_sid_amd64_image .debian-sid-amd64: &debian_sid_amd64_image
image: "$CI_REGISTRY_IMAGE:debian-sid-amd64" image: "$CI_REGISTRY_IMAGE:debian-sid-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.debian-sid-i386: &debian_sid_i386_image .debian-sid-i386: &debian_sid_i386_image
image: "$CI_REGISTRY_IMAGE:debian-sid-i386" image: "$CI_REGISTRY_IMAGE:debian-sid-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.ubuntu-trusty-amd64: &ubuntu_trusty_amd64_image .ubuntu-trusty-amd64: &ubuntu_trusty_amd64_image
image: "$CI_REGISTRY_IMAGE:ubuntu-trusty-amd64" image: "$CI_REGISTRY_IMAGE:ubuntu-trusty-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.ubuntu-trusty-i386: &ubuntu_trusty_i386_image .ubuntu-trusty-i386: &ubuntu_trusty_i386_image
image: "$CI_REGISTRY_IMAGE:ubuntu-trusty-i386" image: "$CI_REGISTRY_IMAGE:ubuntu-trusty-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.ubuntu-xenial-amd64: &ubuntu_xenial_amd64_image .ubuntu-xenial-amd64: &ubuntu_xenial_amd64_image
image: "$CI_REGISTRY_IMAGE:ubuntu-xenial-amd64" image: "$CI_REGISTRY_IMAGE:ubuntu-xenial-amd64"
tags: tags:
- linux - linux
- docker - docker
- amd64
.ubuntu-xenial-i386: &ubuntu_xenial_i386_image .ubuntu-xenial-i386: &ubuntu_xenial_i386_image
image: "$CI_REGISTRY_IMAGE:ubuntu-xenial-i386" image: "$CI_REGISTRY_IMAGE:ubuntu-xenial-i386"
tags: tags:
- linux - linux
- docker - docker
- i386
.build: &build_job .build: &build_job
stage: build stage: build
before_script: before_script:
- test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}" - test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}"
# - ./autogen.sh - ./autogen.sh
script: script:
- ./configure --enable-developer --with-libtool --disable-static --with-atf=/usr --prefix=$HOME/.local --without-make-clean $EXTRA_CONFIGURE || cat config.log - ./configure --enable-developer --with-libtool --disable-static --with-atf=/usr/local --with-libidn2
- make -j${PARALLEL_JOBS_BUILD:-1} -k all V=1 - make -j${PARALLEL_JOBS_BUILD:-1} -k all V=1
artifacts: artifacts:
expire_in: '1 hour' expire_in: '1 hour'
untracked: true untracked: true
.install_test: &install_test_job
stage: test
before_script:
- mkdir $HOME/.local
script:
- make install
.system_test: &system_test_job .system_test: &system_test_job
stage: test stage: test
before_script: before_script:
- rm -rf .ccache - rm -rf .ccache
- bash -x bin/tests/system/ifconfig.sh up - bash -x bin/tests/system/ifconfig.sh up
- bash -x util/prepare-softhsm2.sh
script: script:
- ( cd bin/tests && make -j${TEST_PARALLEL_JOBS:-1} -k test V=1 ) - cd bin/tests && make -j${TEST_PARALLEL_JOBS:-1} -k test V=1
- test -s bin/tests/system/systests.output
artifacts: artifacts:
untracked: true untracked: true
expire_in: '1 week' expire_in: '1 week'
@@ -146,7 +110,6 @@ stages:
stage: test stage: test
before_script: before_script:
- export KYUA_RESULT="$CI_PROJECT_DIR/kyua.results" - export KYUA_RESULT="$CI_PROJECT_DIR/kyua.results"
- bash -x util/prepare-softhsm2.sh
script: script:
- make unit - make unit
after_script: after_script:
@@ -164,19 +127,13 @@ precheck:debian:sid:amd64:
<<: *debian_sid_amd64_image <<: *debian_sid_amd64_image
stage: precheck stage: precheck
script: script:
- sh util/checklibs.sh > checklibs.out
- perl util/check-changes CHANGES - perl util/check-changes CHANGES
- perl -w util/merge_copyrights - perl -w util/merge_copyrights
- diff -urNap util/copyrights util/newcopyrights - diff -urNap util/copyrights util/newcopyrights
- rm util/newcopyrights - rm util/newcopyrights
- perl -w util/update_copyrights < util/copyrights
- if test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi
- xmllint --noout --nonet `git ls-files '*.xml' '*.docbook'`
- xmllint --noout --nonet --html `git ls-files '*.html'`
artifacts: artifacts:
paths: paths:
- util/newcopyrights - util/newcopyrights
- checklibs.out
expire_in: '1 week' expire_in: '1 week'
when: on_failure when: on_failure
@@ -204,132 +161,26 @@ precheck:debian:sid:amd64:
# <<: *ubuntu_xenial_i386_image # <<: *ubuntu_xenial_i386_image
# <<: *build_job # <<: *build_job
build:centos:centos6:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
EXTRA_CONFIGURE: "--with-libidn2 --disable-warn-error"
<<: *centos_centos6_amd64_image
<<: *build_job
build:centos:centos7:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
EXTRA_CONFIGURE: "--with-libidn2"
<<: *centos_centos7_amd64_image
<<: *build_job
build:clang:debian:stretch:amd64:
variables:
CC: clang
CFLAGS: "-Wall -Wextra -Wenum-conversion -O2 -g"
<<: *debian_stretch_amd64_image
<<: *build_job
build:debian:jessie:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
<<: *debian_jessie_amd64_image
<<: *build_job
build:debian:stretch:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
<<: *debian_stretch_amd64_image
<<: *build_job
build:debian:sid:amd64: build:debian:sid:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
EXTRA_CONFIGURE: "--with-libidn2"
<<: *debian_sid_amd64_image <<: *debian_sid_amd64_image
<<: *build_job <<: *build_job
build:clang:debian:stretch:i386:
variables:
CC: clang
CFLAGS: "-Wall -Wextra -Wenum-conversion -O2 -g"
<<: *debian_stretch_i386_image
<<: *build_job
build:debian:sid:i386: build:debian:sid:i386:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
EXTRA_CONFIGURE: "--with-libidn2"
<<: *debian_sid_i386_image <<: *debian_sid_i386_image
<<: *build_job <<: *build_job
unittest:centos:centos6:amd64:
<<: *centos_centos6_amd64_image
<<: *unit_test_job
dependencies:
- build:centos:centos6:amd64
unittest:centos:centos7:amd64:
<<: *centos_centos7_amd64_image
<<: *unit_test_job
dependencies:
- build:centos:centos7:amd64
unittest:debian:jessie:amd64:
<<: *debian_jessie_amd64_image
<<: *unit_test_job
dependencies:
- build:debian:jessie:amd64
unittest:debian:stretch:amd64:
<<: *debian_stretch_amd64_image
<<: *unit_test_job
dependencies:
- build:debian:stretch:amd64
unittest:debian:sid:amd64: unittest:debian:sid:amd64:
<<: *debian_sid_amd64_image <<: *debian_sid_amd64_image
<<: *unit_test_job <<: *unit_test_job
dependencies: dependencies:
- build:debian:sid:amd64 - build:debian:sid:amd64
unittest:clang:debian:stretch:amd64:
<<: *debian_stretch_amd64_image
<<: *unit_test_job
dependencies:
- build:clang:debian:stretch:amd64
unittest:debian:sid:i386: unittest:debian:sid:i386:
<<: *debian_sid_i386_image <<: *debian_sid_i386_image
<<: *unit_test_job <<: *unit_test_job
dependencies: dependencies:
- build:debian:sid:i386 - build:debian:sid:i386
systemtest:centos:centos6:amd64:
<<: *centos_centos6_amd64_image
<<: *system_test_job
dependencies:
- build:centos:centos6:amd64
systemtest:centos:centos7:amd64:
<<: *centos_centos7_amd64_image
<<: *system_test_job
dependencies:
- build:centos:centos7:amd64
systemtest:debian:jessie:amd64:
<<: *debian_jessie_amd64_image
<<: *system_test_job
dependencies:
- build:debian:jessie:amd64
systemtest:debian:stretch:amd64:
<<: *debian_stretch_amd64_image
<<: *system_test_job
dependencies:
- build:debian:stretch:amd64
systemtest:debian:sid:amd64: systemtest:debian:sid:amd64:
<<: *debian_sid_amd64_image <<: *debian_sid_amd64_image
<<: *system_test_job <<: *system_test_job
@@ -341,29 +192,3 @@ systemtest:debian:sid:i386:
<<: *system_test_job <<: *system_test_job
dependencies: dependencies:
- build:debian:sid:i386 - build:debian:sid:i386
install:debian:sid:amd64:
<<: *debian_sid_amd64_image
<<: *install_test_job
dependencies:
- build:debian:sid:amd64
pkcs11:build:debian:sid:amd64:
variables:
CC: gcc
CFLAGS: "-Wall -Wextra -O2 -g"
EXTRA_CONFIGURE: "--enable-native-pkcs11 --with-pkcs11=/usr/lib/softhsm/libsofthsm2.so"
<<: *debian_sid_amd64_image
<<: *build_job
pkcs11:unittest:debian:sid:amd64:
<<: *debian_sid_amd64_image
<<: *unit_test_job
dependencies:
- pkcs11:build:debian:sid:amd64
pkcs11:systemtest:debian:sid:amd64:
<<: *debian_sid_amd64_image
<<: *system_test_job
dependencies:
- pkcs11:build:debian:sid:amd64
@@ -1,29 +0,0 @@
##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
+6 -395
View File
@@ -1,392 +1,3 @@
5027. [func] Set SO_SNDBUF size on sockets. [GL #74]
5026. [bug] rndc reconfig should not touch already loaded zones.
[GL #276]
5025. [cleanup] Remove isc_keyboard family of functions. [GL #178]
5024. [func] Replace custom assembly for atomic operations with
atomic support from the compiler. The code will now use
C11 stdatomic, or __atomic, or __sync builtins with GCC
or Clang compilers, and Interlocked functions with MSVC.
[GL #10]
5023. [cleanup] Remove wrappers that try to fix broken or incomplete
implementations of IPv6, pthreads and other core
functionality required and used by BIND. [GL #192]
5022. [doc] Update ms-self, ms-subdomain, krb5-self, and
krb5-subdomain documentation. [GL !708]
5021. [bug] dig returned a non-zero exit code when it received a
reply over TCP after a retry. [GL #487]
5020. [func] RNG uses thread-local storage instead of locks, if
supported by platform. [GL #496]
5019. [cleanup] A message is now logged when ixfr-from-differences is
set at zone level for an inline-signed zone. [GL #470]
5018. [bug] Fix incorrect sizeof arguments in lib/isc/pk11.c.
[GL !588]
5017. [bug] lib/isc/pk11.c failed to unlink the session before
releasing the lock which is unsafe. [GL !589]
5016. [bug] Named could assert with overlapping filter-aaaa and
dns64 acls. [GL #445]
5015. [bug] Reloading all zones caused zone maintenance to cease
for inline-signed zones. [GL #435]
5014. [bug] Signatures loaded from the journal for the signed
version of an inline-signed zone were not scheduled for
refresh. [GL #482]
5013. [bug] A referral response with a non-empty ANSWER section was
inadvertently being treated as an error. [GL #390]
5012. [bug] Fix lock order reversal in pk11_initialize. [GL !590]
5011. [func] Remove support for unthreaded named. [GL #478]
5010. [func] New "validate-except" option specifies a list of
domains beneath which DNSSEC validation should not
be performed. [GL #237]
5009. [bug] Upon an OpenSSL failure, the first error in the OpenSSL
error queue was not logged. [GL #476]
5008. [bug] "rndc signing -nsec3param ..." requests were silently
ignored for zones which were not yet loaded or
transferred. [GL #468]
5007. [cleanup] Replace custom ISC boolean and integer data types
with C99 stdint.h and stdbool.h types. [GL #9]
5006. [cleanup] Code preparing a delegation response was extracted from
query_delegation() and query_zone_delegation() into a
separate function in order to decrease code
duplication. [GL #431]
5005. [bug] dnssec-verify, and dnssec-signzone at the verification
step, failed on some validly signed zones. [GL #442]
5004. [bug] 'rndc reconfig' could cause inline zones to stop
re-signing. [GL #439]
5003. [bug] dns_acl_isinsecure did not handle geoip elements.
[GL #406]
5002. [bug] mdig: Handle malformed +ednsopt option, support 100
+ednsopt options per query rather than 100 total and
address memory leaks if +ednsopt was specified.
[GL #410]
5001. [bug] Fix refcount errors on error paths. [GL !563]
5000. [bug] named_server_servestale() could leave the server in
exclusive mode if an error occured. [GL #441]
4999. [cleanup] Remove custom printf implementaion in lib/isc/print.c.
[GL #261]
4998. [test] Make resolver and cacheclean tests more civilized.
4997. [security] named could crash during recursive processing
of DNAME records when "deny-answer-aliases" was
in use. (CVE-2018-5740) [GL #387]
4996. [bug] dig: Handle malformed +ednsopt option. [GL #403]
4995. [test] Add tests for "tcp-self" update policy. [GL !282]
4994. [bug] Trust anchor telemetry queries were not being sent
upstream for locally served zones. [GL #392]
4993. [cleanup] Remove support for silently ignoring 'no-change' deltas
from BIND 8 when processing an IXFR stream. 'no-change'
deltas will now trigger a fallback to AXFR as the
recovery mechanism. [GL #369]
4992. [bug] The wrong address was being logged for trust anchor
telemetry queries. [GL #379]
4991. [bug] "rndc reconfig" was incorrectly handling zones whose
"mirror" setting was changed. [GL #381]
4990. [bug] Prevent a possible NULL reference in pkcs11-keygen.
[GL #401]
4989. [cleanup] IDN support in dig has been reworked. IDNA2003
fallbacks were removed in the process. [GL #384]
4988. [bug] Don't synthesize NXDOMAIN from NSEC for records under
a DNAME.
--- 9.13.2 released ---
4987. [cleanup] dns_rdataslab_tordataset() and its related
dns_rdatasetmethods_t callbacks were removed as they
were not being used by anything in BIND. [GL #371]
4986. [func] When built on Linux, BIND now requires the libcap
library to set process privileges, unless capability
support is explicitly overridden with "configure
--disable-linux-caps". [GL #321]
4985. [func] Add a new slave zone option, "mirror", to enable
serving a non-authoritative copy of a zone that
is subject to DNSSEC validation before being
used. For now, this option is only meant to
facilitate deployment of an RFC 7706-style local
copy of the root zone. [GL #33]
4984. [bug] Improve handling of very large incremental
zone transfers to prevent journal corruption. [GL #339]
4983. [func] Add the ability to not return a DNS COOKIE option
when one is present in the request (answer-cookie no;).
[GL #173]
4982. [cleanup] Return FORMERR if the question section is empty
and no COOKIE option is present; this restores
older behavior except in the newly specified
COOKIE case. [GL #260]
4981. [bug] Fix race in cmsg buffer usage in socket code.
[GL #180]
4980. [bug] Named-checkconf failed to detect bad in-view targets.
[GL #288]
4979. [placeholder]
4978. [test] Fix error handling and resolver configuration in the
"rpz" system test. [GL #312]
4977. [func] When starting up, log the same details that
would be reported by 'named -V'. [GL #247]
4976. [bug] Log the label with invalid prefix length correctly
when loading RPZ zones. [GL #254]
4975. [bug] The server cookie computation for sha1 and sha256 did
not match the method described in RFC 7873. [GL #356]
4974. [bug] Restore default rrset-order to random. [GL #336]
4973. [func] verifyzone() and the functions it uses were moved to
libdns and refactored to prevent exit() from being
called upon failure. A side effect of that is that
dnssec-signzone and dnssec-verify now check for memory
leaks upon shutdown. [GL #266]
4972. [func] Declare the 'rdata' argument for dns_rdata_tostruct()
to be const. [GL #341]
4971. [bug] dnssec-signzone and dnssec-verify did not treat records
below a DNAME as out-of-zone data. [GL #298]
4970. [func] Add QNAME minimization option to resolver. [GL #16]
4969. [cleanup] Refactor zone logging functions. [GL #269]
--- 9.13.1 released ---
4968. [bug] If glue records are signed, attempt to validate them.
[GL #209]
4967. [cleanup] Add "answer-cookie" to the parser, marked obsolete.
4966. [placeholder]
4965. [func] Add support for marking options as deprecated.
[GL #322]
4964. [bug] Reduce the probabilty of double signature when deleting
a DNSKEY by checking if the node is otherwise signed
by the algorithm of the key to be deleted. [GL #240]
4963. [test] ifconfig.sh now uses "ip" instead of "ifconfig",
if available, to configure the test interfaces on
linux. [GL #302]
4962. [cleanup] Move 'named -T' processing to its own function.
[GL #316]
4961. [protocol] Remove support for ECC-GOST (GOST R 34.11-94).
[GL #295]
4960. [security] When recursion is enabled, but the "allow-recursion"
and "allow-query-cache" ACLs are not specified,
they should be limited to local networks,
but were inadvertently set to match the default
"allow-query", thus allowing remote queries.
(CVE-2018-5738) [GL #309]
4959. [func] NSID logging (enabled by the "request-nsid" option)
now has its own "nsid" category, instead of using the
"resolver" category. [GL !332]
4958. [bug] Remove redundant space from NSEC3 record. [GL #281]
4957. [func] The default setting for "dnssec-validation" is now
"auto", which activates DNSSEC validation using the
IANA root key. (The default can be changed back to
"yes", which activates DNSSEC validation only when keys
are explicitly configured in named.conf, by building
BIND with "configure --disable-auto-validation".)
[GL #30]
4956. [func] Change isc_random() to be just PRNG using xoshiro128**,
and add isc_nonce_buf() that uses CSPRNG. [GL #289]
4955. [cleanup] Silence cppcheck warnings in lib/dns/master.c.
[GL #286]
4954. [func] Messages about serving of stale answers are now
directed to the "serve-stale" logging category.
Also clarified serve-stale documentation. [GL !323]
4953. [bug] Removed the option to build the red black tree
database without a hash table; the non-hashing
version was buggy and is not needed. [GL #184]
4952. [func] Authoritative server support in named for the
EDNS CLIENT-SUBNET option (which was experimental
and not practical to deploy) has been removed.
The ECS option is still supported in dig and mdig
via the +subnet option, and can be parsed and logged
when received by named, but it is no longer used
for ACL processing. The "geoip-use-ecs" option
is now obsolete; a warning will be logged if it is
used in named.conf. "ecs" tags in an ACL definition
are also obsolete and will cause the configuration
to fail to load. [GL #32]
4951. [protocol] Add "HOME.ARPA" to list of built in empty zones as
per RFC 8375. [GL #273]
--- 9.13.0 released ---
4950. [bug] ISC_SOCKEVENTATTR_TRUNC was not be set. [GL #238]
4949. [placeholder]
4948. [bug] When request-nsid is turned on, EDNS NSID options
should be logged at level info. Since change 3741
they have been logged at debug(3) by mistake.
[GL !290]
4947. [func] Replace all random functions with isc_random(),
isc_random_buf() and isc_random_uniform() API.
[GL #221]
4946. [bug] Additional glue was not being returned by resolver
for unsigned zones since change 4596. [GL #209]
4945. [func] BIND can no longer be built without DNSSEC support.
A cryptography provder (i.e., OpenSSL or a hardware
service module with PKCS#11 support) must be
available. [GL #244]
4944. [cleanup] Silence cppcheck portability warnings in
lib/isc/tests/buffer_test.c. [GL #239]
4943. [bug] Change 4687 consumed too much memory when running
system tests with --with-tuning=large. Reduced the
hash table size to 512 entries for 'named -m record'
restoring the previous memory footprint. [GL #248]
4942. [cleanup] Consolidate multiple instances of splitting of
batchline in dig into a single function. [GL #196]
4941. [cleanup] Silence clang static analyzer warnings. [GL #196]
4940. [cleanup] Extract the loop in dns__zone_updatesigs() into
separate functions to improve code readability.
[GL #135]
4939. [test] Add basic unit tests for update_sigs(). [GL #135]
4938. [placeholder]
4937. [func] Remove support for OpenSSL < 1.0.0 [GL #191]
4936. [func] Always use OpenSSL or PKCS#11 random data providers,
and remove the --{enable,disable}-crypto-rand configure
options. [GL #165]
4935. [func] Add support for LibreSSL >= 2.7.0 (some OpenSSL 1.1.0
call were added). [GL #191]
4934. [security] The serve-stale feature could cause an assertion failure
in rbtdb.c even when stale-answer-enable was false.
Simultaneous use of stale cache records and NSEC
aggressive negative caching could trigger a recursion
loop. (CVE-2018-5737) [GL #185]
4933. [bug] Not creating signing keys for an inline signed zone
prevented changes applied to the raw zone from being
reflected in the secure zone until signing keys were
made available. [GL #159]
4932. [bug] Bumped signed serial of an inline signed zone was
logged even when an error occurred while updating
signatures. [GL #159]
4931. [func] Removed the "rbtdb64" database implementation.
[GL #217]
4930. [bug] Remove a bogus check in nslookup command line
argument processing. [GL #206]
4929. [func] Add the ability to set RA and TC in queries made by
dig (+[no]raflag, +[no]tcflag). [GL #213]
4928. [func] The "dnskey-sig-validity" option allows
"sig-validity-interval" to be overriden for signatures
covering DNSKEY RRsets. [GL #145]
4927. [placeholder]
4926. [func] Add root key sentinel support. To disable, add
'root-key-sentinel no;' to named.conf. [GL #37]
4925. [func] Several configuration options that define intervals
can now take TTL value suffixes (for example, 2h or 1d)
in addition to integer parameters. These include
max-cache-ttl, max-ncache-ttl, max-policy-ttl,
fstrm-set-reopen-interval, interface-interval, and
min-update-interval. [GL #203]
4924. [cleanup] Clean up the isc_string_* namespace and leave
only strlcpy and strlcat. [GL #178]
4923. [cleanup] Refactor socket and socket event options into
enum types. [GL !135]
4922. [bug] dnstap: Log the destination address of client
packets rather than the interface address.
[GL #197]
4921. [cleanup] Add dns_fixedname_initname() and refactor the caller
code to make usage of the new function, as a part of
refactoring dns_fixedname_*() macros were turned into
functions. [GL #183]
4920. [cleanup] Clean up libdns removing most of the backwards
compatibility wrappers.
4919. [cleanup] Clean up the isc_hash_* namespace and leave only
the FNV-1a hash implementation. [GL #178]
4918. [bug] Fix double free after keygen error in dnssec-keygen
when OpenSSL >= 1.1.0 is used and RSA_generate_key_ex
fails. [GL #109]
4917. [func] Support 64 RPZ policy zones by default. [GL #123] 4917. [func] Support 64 RPZ policy zones by default. [GL #123]
4916. [func] Remove IDNA2003 support and the bundled idnkit-1.0 4916. [func] Remove IDNA2003 support and the bundled idnkit-1.0
@@ -398,10 +9,10 @@
like dig without IDN support. libidn2 version 2.0 like dig without IDN support. libidn2 version 2.0
or higher is needed for +idnout enabled by default. or higher is needed for +idnout enabled by default.
4914. [security] A bug in zone database reference counting could lead to 4914. [bug] A bug in zone database reference counting could lead to
a crash when multiple versions of a slave zone were a crash when multiple versions of a slave zone were
transferred from a master in close succession. transferred from a master in close succession.
(CVE-2018-5736) [GL #134] [GL #134]
4913. [test] Re-implemented older unit tests in bin/tests as ATF, 4913. [test] Re-implemented older unit tests in bin/tests as ATF,
removed the lib/tests unit testing library. [GL #115] removed the lib/tests unit testing library. [GL #115]
@@ -932,8 +543,8 @@
4760. [func] Add glue cache statistics counters. [RT #46028] 4760. [func] Add glue cache statistics counters. [RT #46028]
4759. [func] Add logging channel "trust-anchor-telemetry" to 4759. [func] Add logging channel "trust-anchor-telementry" to
record trust-anchor-telemetry in incoming requests. record trust-anchor-telementry in incoming requests.
Both _ta-XXXX.<anchor>/NULL and EDNS KEY-TAG options Both _ta-XXXX.<anchor>/NULL and EDNS KEY-TAG options
are logged. [RT #46124] are logged. [RT #46124]
@@ -1002,10 +613,10 @@
tests when running on terminals that support them. tests when running on terminals that support them.
[RT #45977] [RT #45977]
4744. [bug] Suppress trust-anchor-telemetry queries if 4744. [bug] Suppress trust-anchor-telementry queries if
validation is disabled. [RT #46131] validation is disabled. [RT #46131]
4743. [func] Exclude trust-anchor-telemetry queries from 4743. [func] Exclude trust-anchor-telementry queries from
synth-from-dnssec processing. [RT #46123] synth-from-dnssec processing. [RT #46123]
4742. [func] Synthesis of responses from DNSSEC-verified records. 4742. [func] Synthesis of responses from DNSSEC-verified records.
+1
View File
@@ -522,3 +522,4 @@ BIND 9.2.0
DNSSEC implementation is still considered experimental. For detailed DNSSEC implementation is still considered experimental. For detailed
information about the state of the DNSSEC implementation, see the file information about the state of the DNSSEC implementation, see the file
doc/misc/dnssec. doc/misc/dnssec.
+3 -10
View File
@@ -14,7 +14,7 @@ top_builddir = @top_builddir@
VERSION=@BIND9_VERSION@ VERSION=@BIND9_VERSION@
SUBDIRS = make unit lib fuzz bin doc SUBDIRS = make unit lib bin doc
TARGETS = TARGETS =
PREREQS = bind.keys.h PREREQS = bind.keys.h
@@ -22,8 +22,7 @@ MANPAGES = isc-config.sh.1
HTMLPAGES = isc-config.sh.html HTMLPAGES = isc-config.sh.html
MANOBJS = README HISTORY OPTIONS CONTRIBUTING PLATFORMS \ MANOBJS = README HISTORY OPTIONS CONTRIBUTING ${MANPAGES} ${HTMLPAGES}
${MANPAGES} ${HTMLPAGES}
@BIND9_MAKE_RULES@ @BIND9_MAKE_RULES@
@@ -75,7 +74,7 @@ tags:
find lib bin -name "*.[ch]" -print | @ETAGS@ - find lib bin -name "*.[ch]" -print | @ETAGS@ -
test check: test check:
@if test -n "`${PERL} ${top_srcdir}/bin/tests/system/testsock.pl 2>/dev/null || echo fail`"; then \ @if test -n "`${PERL} ${top_srcdir}/bin/tests/system/testsock.pl 2>&- || echo fail`"; then \
echo I: NOTE: The tests were not run because they require that; \ echo I: NOTE: The tests were not run because they require that; \
echo I: the IP addresses 10.53.0.1 through 10.53.0.8 are configured; \ echo I: the IP addresses 10.53.0.1 through 10.53.0.8 are configured; \
echo I: as alias addresses on the loopback interface. Please run; \ echo I: as alias addresses on the loopback interface. Please run; \
@@ -90,7 +89,6 @@ force-test: test-force
test-force: test-force:
status=0; \ status=0; \
(cd fuzz && ${MAKE} check) || status=1; \
(cd bin/tests && ${MAKE} ${MAKEDEFS} test) || status=1; \ (cd bin/tests && ${MAKE} ${MAKEDEFS} test) || status=1; \
(test -f ${top_builddir}/unit/unittest.sh && \ (test -f ${top_builddir}/unit/unittest.sh && \
$(SHELL) ${top_builddir}/unit/unittest.sh) || status=1; \ $(SHELL) ${top_builddir}/unit/unittest.sh) || status=1; \
@@ -116,11 +114,6 @@ CONTRIBUTING: CONTRIBUTING.md
${W3M} -dump -cols 75 -O ascii -T text/html | \ ${W3M} -dump -cols 75 -O ascii -T text/html | \
sed -e '$${/^$$/d;}' > $@ sed -e '$${/^$$/d;}' > $@
PLATFORMS: PLATFORMS.md
${PANDOC} --email-obfuscation=none -s -t html PLATFORMS.md | \
${W3M} -dump -cols 75 -O ascii -T text/html | \
sed -e '$${/^$$/d;}' > $@
unit:: unit::
sh ${top_builddir}/unit/unittest.sh sh ${top_builddir}/unit/unittest.sh
+1
View File
@@ -24,3 +24,4 @@ Setting Description
may be useful when debugging may be useful when debugging
-DISC_HEAP_CHECK Test heap consistency after every heap -DISC_HEAP_CHECK Test heap consistency after every heap
operation; used when debugging operation; used when debugging
-56
View File
@@ -1,56 +0,0 @@
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, 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
offer support on a "best effort" basis for some.
Regularly tested platforms
As of May 2018, BIND 9.13 is tested on the following systems:
* Debian 8, 9
* Ubuntu 16.04, 18.04
* Fedora 27, 28
* Red Hat/CentOS 6, 7
* FreeBSD 10.x, 11.x
* OpenBSD 6.3
The amd64, i386, armhf and arm64 CPU architectures are all fully
supported.
Best effort
The following are platforms on which BIND is known to build and run, but
on which it is not routinely tested. ISC makes every effort to fix bugs on
these platforms, but may be unable to do so quickly due to lack of
hardware, less familiarity on the part of engineering staff, and other
constraints.
* Windows 10 / x64
* Windows Server 2012 R2, 2016 / x64
* macOS 10.12+
* Solaris 10
* FreeBSD 12+
* OpenBSD 6.2
* NetBSD
* Older or less popular Linux distributions still supported by their
vendors, such as:
+ Ubuntu 14.04, 18.10+
+ Gentoo
+ ArchLinux
+ Alpine Linux
* OpenWRT/LEDE 17.0
* Other CPU architectures (mips, mipsel, sparc, ...)
Unsupported platforms
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
-64
View File
@@ -1,64 +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.
-->
## 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, 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
offer support on a "best effort" basis for some.
### Regularly tested platforms
As of May 2018, BIND 9.13 is tested on the following systems:
* Debian 8, 9
* Ubuntu 16.04, 18.04
* Fedora 27, 28
* Red Hat/CentOS 6, 7
* FreeBSD 10.x, 11.x
* OpenBSD 6.3
The amd64, i386, armhf and arm64 CPU architectures are all fully supported.
### Best effort
The following are platforms on which BIND is known to build and run,
but on which it is not routinely tested. ISC makes every effort to fix bugs
on these platforms, but may be unable to do so quickly due to lack of
hardware, less familiarity on the part of engineering staff, and other
constraints.
* Windows 10 / x64
* Windows Server 2012 R2, 2016 / x64
* macOS 10.12+
* Solaris 10
* FreeBSD 12+
* OpenBSD 6.2
* NetBSD
* Older or less popular Linux distributions still supported by their vendors, such as:
* Ubuntu 14.04, 18.10+
* Gentoo
* ArchLinux
* Alpine Linux
* OpenWRT/LEDE 17.0
* Other CPU architectures (mips, mipsel, sparc, ...)
## Unsupported platforms
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
+20 -50
View File
@@ -31,9 +31,9 @@ administrative tools, including the dig and delv DNS lookup tools,
nsupdate for dynamic DNS zone updates, rndc for remote name server nsupdate for dynamic DNS zone updates, rndc for remote name server
administration, and more. administration, and more.
BIND 9 began as a complete re-write of the BIND architecture that was used BIND 9 is a complete re-write of the BIND architecture that was used in
in versions 4 and 8. Internet Systems Consortium (https://www.isc.org), a versions 4 and 8. Internet Systems Consortium (https://www.isc.org), a 501
501(c)(3) public benefit corporation dedicated to providing software and (c)(3) public benefit corporation dedicated to providing software and
services in support of the Internet infrastructure, developed BIND 9 and services in support of the Internet infrastructure, developed BIND 9 and
is responsible for its ongoing maintenance and improvement. BIND is open is responsible for its ongoing maintenance and improvement. BIND is open
source software licenced under the terms of the Mozilla Public License, source software licenced under the terms of the Mozilla Public License,
@@ -48,8 +48,6 @@ the file CHANGES. See below for details on the CHANGES file format.
For up-to-date release notes and errata, see http://www.isc.org/software/ For up-to-date release notes and errata, see http://www.isc.org/software/
bind9/releasenotes bind9/releasenotes
For information about supported platforms, see PLATFORMS.
Reporting bugs and getting help Reporting bugs and getting help
To report non-security-sensitive bugs or request new features, you may To report non-security-sensitive bugs or request new features, you may
@@ -101,43 +99,19 @@ format-patch.
BIND 9.13 features BIND 9.13 features
BIND 9.13 is the newest development branch of BIND 9. It includes a number BIND 9.13.0 is the newest development branch of BIND 9. It includes a
of changes from BIND 9.12 and earlier releases. New features include: number of changes from BIND 9.12 and earlier releases. New features
include:
* The default value of "dnssec-validation" is now "auto". * TBD
* 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 are transferred in as with traditional slave zones, but are
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.
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 Building BIND
Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler, BIND requires a UNIX or Linux system with an ANSI C compiler, basic POSIX
basic POSIX support, and a 64-bit integer type. Successful builds have support, and a 64-bit integer type. Successful builds have been observed
been observed on many versions of Linux and UNIX, including RedHat, on many versions of Linux and UNIX, including RedHat, Fedora, Debian,
Fedora, Debian, Ubuntu, SuSE, Slackware, FreeBSD, NetBSD, OpenBSD, Mac OS Ubuntu, SuSE, Slackware, FreeBSD, NetBSD, OpenBSD, Mac OS X, Solaris,
X, Solaris, HP-UX, AIX, SCO OpenServer, and OpenWRT. 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
libcap library to set process privileges, though this requirement can be
overridden by disabling capability support at compile time. See
Compile-time options below for details on other libraries that may be
required to support optional features.
BIND is also available for Windows 2008 and higher. See win32utils/ BIND is also available for Windows 2008 and higher. See win32utils/
readme1st.txt for details on building for Windows systems. readme1st.txt for details on building for Windows systems.
@@ -208,10 +182,11 @@ smaller systems.
For the server to support DNSSEC, you need to build it with crypto For the server to support DNSSEC, you need to build it with crypto
support. To use OpenSSL, you should have OpenSSL 1.0.2e or newer support. To use OpenSSL, you should have OpenSSL 1.0.2e or newer
installed. If the OpenSSL library is installed in a nonstandard location, installed. If the OpenSSL library is installed in a nonstandard location,
specify the prefix using --with-openssl=<PREFIX> on the configure command specify the prefix using "--with-openssl=<PREFIX>" on the configure
line. To use a PKCS#11 hardware service module for cryptographic command line. To use a PKCS#11 hardware service module for cryptographic
operations, specify the path to the PKCS#11 provider library using operations, specify the path to the PKCS#11 provider library using
--with-pkcs11=<PREFIX>, and configure BIND with --enable-native-pkcs11. "--with-pkcs11=<PREFIX>", and configure BIND with
"--enable-native-pkcs11".
To support the HTTP statistics channel, the server must be linked with at To support the HTTP statistics channel, the server must be linked with at
least one of the following: libxml2 http://xmlsoft.org or json-c https:// least one of the following: libxml2 http://xmlsoft.org or json-c https://
@@ -224,22 +199,17 @@ specify the prefix using --with-zlib=/prefix.
To support storing configuration data for runtime-added zones in an LMDB To support storing configuration data for runtime-added zones in an LMDB
database, the server must be linked with liblmdb. If this is installed in database, the server must be linked with liblmdb. If this is installed in
a nonstandard location, specify the prefix using with-lmdb=/prefix. a nonstandard location, specify the prefix using "with-lmdb=/prefix".
To support GeoIP location-based ACLs, the server must be linked with To support GeoIP location-based ACLs, the server must be linked with
libGeoIP. This is not turned on by default; BIND must be configured with libGeoIP. This is not turned on by default; BIND must be configured with
--with-geoip. If the library is installed in a nonstandard location, "--with-geoip". If the library is installed in a nonstandard location, use
specify the prefix using --with-geoip=/prefix. specify the prefix using "--with-geoip=/prefix".
For DNSTAP packet logging, you must have installed libfstrm https:// For DNSTAP packet logging, you must have installed libfstrm https://
github.com/farsightsec/fstrm and libprotobuf-c https:// github.com/farsightsec/fstrm and libprotobuf-c https://
developers.google.com/protocol-buffers, and BIND must be configured with developers.google.com/protocol-buffers, and BIND must be configured with
--enable-dnstap. "--enable-dnstap".
On Linux, process capabilities are managed in user space using the libcap
library, which can be installed on most Linux systems via the libcap-dev
or libcap-devel module. Process capability support can also be disabled by
configuring with --disable-linux-caps.
Portions of BIND that are written in Python, including dnssec-keymgr, Portions of BIND that are written in Python, including dnssec-keymgr,
dnssec-coverage, dnssec-checkds, and some of the system tests, require the dnssec-coverage, dnssec-checkds, and some of the system tests, require the
+20 -47
View File
@@ -41,8 +41,8 @@ administrative tools, including the `dig` and `delv` DNS lookup tools,
`nsupdate` for dynamic DNS zone updates, `rndc` for remote name server `nsupdate` for dynamic DNS zone updates, `rndc` for remote name server
administration, and more. administration, and more.
BIND 9 began as a complete re-write of the BIND architecture that was BIND 9 is a complete re-write of the BIND architecture that was used in
used in versions 4 and 8. Internet Systems Consortium versions 4 and 8. Internet Systems Consortium
([https://www.isc.org](https://www.isc.org)), a 501(c)(3) public benefit ([https://www.isc.org](https://www.isc.org)), a 501(c)(3) public benefit
corporation dedicated to providing software and services in support of the corporation dedicated to providing software and services in support of the
Internet infrastructure, developed BIND 9 and is responsible for its Internet infrastructure, developed BIND 9 and is responsible for its
@@ -59,8 +59,6 @@ CHANGES file format.
For up-to-date release notes and errata, see For up-to-date release notes and errata, see
[http://www.isc.org/software/bind9/releasenotes](http://www.isc.org/software/bind9/releasenotes) [http://www.isc.org/software/bind9/releasenotes](http://www.isc.org/software/bind9/releasenotes)
For information about supported platforms, see [PLATFORMS](PLATFORMS.md).
### <a name="help"/> Reporting bugs and getting help ### <a name="help"/> Reporting bugs and getting help
To report non-security-sensitive bugs or request new features, you may To report non-security-sensitive bugs or request new features, you may
@@ -118,43 +116,19 @@ including your patch as an attachment, preferably generated by
### <a name="features"/> BIND 9.13 features ### <a name="features"/> BIND 9.13 features
BIND 9.13 is the newest development branch of BIND 9. It includes a BIND 9.13.0 is the newest development branch of BIND 9. It includes a
number of changes from BIND 9.12 and earlier releases. New features number of changes from BIND 9.12 and earlier releases. New features
include: include:
* The default value of "dnssec-validation" is now "auto". * TBD
* 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
are transferred in as with traditional slave zones, but are 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.
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.
### <a name="build"/> Building BIND ### <a name="build"/> Building BIND
Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler, BIND requires a UNIX or Linux system with an ANSI C compiler, basic POSIX
basic POSIX support, and a 64-bit integer type. Successful builds have been support, and a 64-bit integer type. Successful builds have been observed on
observed on many versions of Linux and UNIX, including RedHat, Fedora, many versions of Linux and UNIX, including RedHat, Fedora, Debian, Ubuntu,
Debian, Ubuntu, SuSE, Slackware, FreeBSD, NetBSD, OpenBSD, Mac OS X, SuSE, Slackware, FreeBSD, NetBSD, OpenBSD, Mac OS X, Solaris, HP-UX, AIX,
Solaris, HP-UX, and OpenWRT. 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 `libcap` library to set process privileges, though this requirement
can be overridden by disabling capability support at compile time.
See [Compile-time options](#opts) below for details on other libraries
that may be required to support optional features.
BIND is also available for Windows 2008 and higher. See BIND is also available for Windows 2008 and higher. See
`win32utils/readme1st.txt` for details on building for Windows `win32utils/readme1st.txt` for details on building for Windows
@@ -220,10 +194,10 @@ performance on smaller systems.
For the server to support DNSSEC, you need to build it with crypto support. For the server to support DNSSEC, you need to build it with crypto support.
To use OpenSSL, you should have OpenSSL 1.0.2e or newer installed. If the To use OpenSSL, you should have OpenSSL 1.0.2e or newer installed. If the
OpenSSL library is installed in a nonstandard location, specify the prefix OpenSSL library is installed in a nonstandard location, specify the prefix
using `--with-openssl=<PREFIX>` on the configure command line. To use a using "--with-openssl=&lt;PREFIX&gt;" on the configure command line. To use a
PKCS#11 hardware service module for cryptographic operations, specify the PKCS#11 hardware service module for cryptographic operations, specify the
path to the PKCS#11 provider library using `--with-pkcs11=<PREFIX>`, and path to the PKCS#11 provider library using "--with-pkcs11=&lt;PREFIX&gt;", and
configure BIND with `--enable-native-pkcs11`. configure BIND with "--enable-native-pkcs11".
To support the HTTP statistics channel, the server must be linked with at To support the HTTP statistics channel, the server must be linked with at
least one of the following: libxml2 least one of the following: libxml2
@@ -238,23 +212,18 @@ specify the prefix using `--with-zlib=/prefix`.
To support storing configuration data for runtime-added zones in an LMDB To support storing configuration data for runtime-added zones in an LMDB
database, the server must be linked with liblmdb. If this is installed in a database, the server must be linked with liblmdb. If this is installed in a
nonstandard location, specify the prefix using `with-lmdb=/prefix`. nonstandard location, specify the prefix using "with-lmdb=/prefix".
To support GeoIP location-based ACLs, the server must be linked with To support GeoIP location-based ACLs, the server must be linked with
libGeoIP. This is not turned on by default; BIND must be configured with libGeoIP. This is not turned on by default; BIND must be configured with
`--with-geoip`. If the library is installed in a nonstandard location, "--with-geoip". If the library is installed in a nonstandard location, use
specify the prefix using `--with-geoip=/prefix`. specify the prefix using "--with-geoip=/prefix".
For DNSTAP packet logging, you must have installed libfstrm For DNSTAP packet logging, you must have installed libfstrm
[https://github.com/farsightsec/fstrm](https://github.com/farsightsec/fstrm) [https://github.com/farsightsec/fstrm](https://github.com/farsightsec/fstrm)
and libprotobuf-c and libprotobuf-c
[https://developers.google.com/protocol-buffers](https://developers.google.com/protocol-buffers), [https://developers.google.com/protocol-buffers](https://developers.google.com/protocol-buffers),
and BIND must be configured with `--enable-dnstap`. and BIND must be configured with "--enable-dnstap".
On Linux, process capabilities are managed in user space using
the `libcap` library, which can be installed on most Linux systems via
the `libcap-dev` or `libcap-devel` module. Process capability support can
also be disabled by configuring with `--disable-linux-caps`.
Portions of BIND that are written in Python, including Portions of BIND that are written in Python, including
`dnssec-keymgr`, `dnssec-coverage`, `dnssec-checkds`, and some of the `dnssec-keymgr`, `dnssec-coverage`, `dnssec-checkds`, and some of the
@@ -271,6 +240,10 @@ specifying `--enable-fixed-rrset` or `--disable-fixed-rrset` on the
configure command line. By default, fixed rrset-order is disabled to configure command line. By default, fixed rrset-order is disabled to
reduce memory footprint. 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 `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 default, installation is into /usr/local, but this can be changed with the
`--prefix` option when running `configure`. `--prefix` option when running `configure`.
+56
View File
@@ -17,6 +17,9 @@
***/ ***/
@TOP@ @TOP@
/** define on DEC OSF to enable 4.4BSD style sa_len support */
#undef _SOCKADDR_LEN
/** define if your system needs pthread_init() before using pthreads */ /** define if your system needs pthread_init() before using pthreads */
#undef NEED_PTHREAD_INIT #undef NEED_PTHREAD_INIT
@@ -26,6 +29,9 @@
/** define if sigwait() is the UnixWare flavor */ /** define if sigwait() is the UnixWare flavor */
#undef HAVE_UNIXWARE_SIGWAIT #undef HAVE_UNIXWARE_SIGWAIT
/** define on Solaris to get sigwait() to work using pthreads semantics */
#undef _POSIX_PTHREAD_SEMANTICS
/** define if LinuxThreads is in use */ /** define if LinuxThreads is in use */
#undef HAVE_LINUXTHREADS #undef HAVE_LINUXTHREADS
@@ -47,18 +53,62 @@
/** define if tzset() is available */ /** define if tzset() is available */
#undef HAVE_TZSET #undef HAVE_TZSET
/** define if struct addrinfo exists */
#undef HAVE_ADDRINFO
/** define if getaddrinfo() exists */
#undef HAVE_GETADDRINFO
/** define if gai_strerror() exists */
#undef HAVE_GAISTRERROR
/** /**
* define if pthread_setconcurrency() should be called to tell the * define if pthread_setconcurrency() should be called to tell the
* OS how many threads we might want to run. * OS how many threads we might want to run.
*/ */
#undef CALL_PTHREAD_SETCONCURRENCY #undef CALL_PTHREAD_SETCONCURRENCY
/** define if IPv6 is not disabled */
#undef WANT_IPV6
/** define if flockfile() is available */ /** define if flockfile() is available */
#undef HAVE_FLOCKFILE #undef HAVE_FLOCKFILE
/** define if getc_unlocked() is available */ /** define if getc_unlocked() is available */
#undef HAVE_GETCUNLOCKED #undef HAVE_GETCUNLOCKED
/** Shut up warnings about sputaux in stdio.h on BSD/OS pre-4.1 */
#undef SHUTUP_SPUTAUX
#ifdef SHUTUP_SPUTAUX
struct __sFILE;
extern __inline int __sputaux(int _c, struct __sFILE *_p);
#endif
/** Shut up warnings about missing sigwait prototype on BSD/OS 4.0* */
#undef SHUTUP_SIGWAIT
#ifdef SHUTUP_SIGWAIT
int sigwait(const unsigned int *set, int *sig);
#endif
/** Shut up warnings from gcc -Wcast-qual on BSD/OS 4.1. */
#undef SHUTUP_STDARG_CAST
#if defined(SHUTUP_STDARG_CAST) && defined(__GNUC__)
#include <stdarg.h> /** Grr. Must be included *every time*. */
/**
* The silly continuation line is to keep configure from
* commenting out the #undef.
*/
#undef \
va_start
#define va_start(ap, last) \
do { \
union { const void *konst; long *var; } _u; \
_u.konst = &(last); \
ap = (va_list)(_u.var + __va_words(__typeof(last))); \
} while (0)
#endif /** SHUTUP_STDARG_CAST && __GNUC__ */
/** define if the system has a random number generating device */ /** define if the system has a random number generating device */
#undef PATH_RANDOMDEV #undef PATH_RANDOMDEV
@@ -71,6 +121,12 @@
/** define if you have strerror in the C library. */ /** define if you have strerror in the C library. */
#undef HAVE_STRERROR #undef HAVE_STRERROR
/* Define if OpenSSL includes DSA support */
#undef HAVE_OPENSSL_DSA
/* Define if you have getpassphrase in the C library. */
#undef HAVE_GETPASSPHRASE
/* Define to the length type used by the socket API (socklen_t, size_t, int). */ /* Define to the length type used by the socket API (socklen_t, size_t, int). */
#undef ISC_SOCKADDR_LEN_T #undef ISC_SOCKADDR_LEN_T
Vendored
+15 -295
View File
@@ -1,297 +1,17 @@
# generated automatically by aclocal 1.16.1 -*- Autoconf -*- sinclude(libtool.m4/libtool.m4)dnl
sinclude(libtool.m4/ltoptions.m4)dnl
sinclude(libtool.m4/ltsugar.m4)dnl
sinclude(libtool.m4/ltversion.m4)dnl
sinclude(libtool.m4/lt~obsolete.m4)dnl
# Copyright (C) 1996-2018 Free Software Foundation, Inc. m4_divert_text(HELP_CANON, [[
NOTE: If PREFIX is not set, then the default values for --sysconfdir
and --localstatedir are /etc and /var, respectively.]])
m4_divert_text(HELP_END, [[
Professional support for BIND is provided by Internet Systems Consortium,
Inc. Information about paid support and training options is available at
https://www.isc.org/support.
# This file is free software; the Free Software Foundation Help can also often be found on the BIND Users mailing list
# gives unlimited permission to copy and/or distribute it, (https://lists.isc.org/mailman/listinfo/bind-users) or in the #bind
# with or without modifications, as long as this notice is preserved. channel of the Freenode IRC service.]])
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 12 (pkg-config-0.29.2)
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
dnl 02111-1307, USA.
dnl
dnl As a special exception to the GNU General Public License, if you
dnl distribute this file as part of a program that contains a
dnl configuration script generated by Autoconf, you may include it under
dnl the same distribution terms that you use for the rest of that
dnl program.
dnl PKG_PREREQ(MIN-VERSION)
dnl -----------------------
dnl Since: 0.29
dnl
dnl Verify that the version of the pkg-config macros are at least
dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
dnl installed version of pkg-config, this checks the developer's version
dnl of pkg.m4 when generating configure.
dnl
dnl To ensure that this macro is defined, also add:
dnl m4_ifndef([PKG_PREREQ],
dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
dnl
dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require.
m4_defun([PKG_PREREQ],
[m4_define([PKG_MACROS_VERSION], [0.29.2])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ
dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
dnl ----------------------------------
dnl Since: 0.16
dnl
dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
dnl first found in the path. Checks that the version of pkg-config found
dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
dnl used since that's the first version where most current features of
dnl pkg-config existed.
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])dnl PKG_PROG_PKG_CONFIG
dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------------------------------
dnl Since: 0.18
dnl
dnl Check to see whether a particular set of modules exists. Similar to
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
dnl
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
dnl only at the first occurence in configure.ac, so if the first place
dnl it's called might be skipped (such as if it is within an "if", you
dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_default([$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
dnl ---------------------------------------------
dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
dnl pkg_failed based on the result.
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
pkg_cv_[]$1="$$1"
elif test -n "$PKG_CONFIG"; then
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes ],
[pkg_failed=yes])
else
pkg_failed=untried
fi[]dnl
])dnl _PKG_CONFIG
dnl _PKG_SHORT_ERRORS_SUPPORTED
dnl ---------------------------
dnl Internal check to see if pkg-config supports short errors.
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])dnl _PKG_SHORT_ERRORS_SUPPORTED
dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl [ACTION-IF-NOT-FOUND])
dnl --------------------------------------------------------------
dnl Since: 0.4.0
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $2])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT])[]dnl
])
elif test $pkg_failed = untried; then
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
$3
fi[]dnl
])dnl PKG_CHECK_MODULES
dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl [ACTION-IF-NOT-FOUND])
dnl ---------------------------------------------------------------------
dnl Since: 0.29
dnl
dnl Checks for existence of MODULES and gathers its build flags with
dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
dnl and VARIABLE-PREFIX_LIBS from --libs.
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
dnl configure.ac.
AC_DEFUN([PKG_CHECK_MODULES_STATIC],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
_save_PKG_CONFIG=$PKG_CONFIG
PKG_CONFIG="$PKG_CONFIG --static"
PKG_CHECK_MODULES($@)
PKG_CONFIG=$_save_PKG_CONFIG[]dnl
])dnl PKG_CHECK_MODULES_STATIC
dnl PKG_INSTALLDIR([DIRECTORY])
dnl -------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable pkgconfigdir as the location where a module
dnl should install pkg-config .pc files. By default the directory is
dnl $libdir/pkgconfig, but the default can be changed by passing
dnl DIRECTORY. The user can override through the --with-pkgconfigdir
dnl parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([pkgconfigdir],
[AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
[with_pkgconfigdir=]pkg_default)
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_INSTALLDIR
dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
dnl --------------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
dnl module should install arch-independent pkg-config .pc files. By
dnl default the directory is $datadir/pkgconfig, but the default can be
dnl changed by passing DIRECTORY. The user can override through the
dnl --with-noarch-pkgconfigdir parameter.
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([noarch-pkgconfigdir],
[AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
[with_noarch_pkgconfigdir=]pkg_default)
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_NOARCH_INSTALLDIR
dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------
dnl Since: 0.28
dnl
dnl Retrieves the value of the pkg-config variable for the given module.
AC_DEFUN([PKG_CHECK_VAR],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
_PKG_CONFIG([$1], [variable="][$3]["], [$2])
AS_VAR_COPY([$1], [pkg_cv_][$1])
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR
m4_include([m4/ax_check_openssl.m4])
m4_include([m4/ax_pthread.m4])
m4_include([m4/libtool.m4])
m4_include([m4/ltoptions.m4])
m4_include([m4/ltsugar.m4])
m4_include([m4/ltversion.m4])
m4_include([m4/lt~obsolete.m4])
+1 -1
View File
@@ -10,4 +10,4 @@
# information regarding copyright ownership. # information regarding copyright ownership.
# Run this script after modifying configure.in to generate configure # Run this script after modifying configure.in to generate configure
autoreconf -f -i autoreconf -i
+4 -4
View File
@@ -16,15 +16,15 @@ VERSION=@BIND9_VERSION@
@BIND9_MAKE_INCLUDES@ @BIND9_MAKE_INCLUDES@
CINCLUDES = ${NS_INCLUDES} ${BIND9_INCLUDES} ${DNS_INCLUDES} ${ISCCFG_INCLUDES} \ CINCLUDES = ${NS_INCLUDES} ${BIND9_INCLUDES} ${DNS_INCLUDES} ${ISCCFG_INCLUDES} \
${ISC_INCLUDES} @OPENSSL_INCLUDES@ ${ISC_INCLUDES} @DST_OPENSSL_INC@
CDEFINES = -DNAMED_CONFFILE=\"${sysconfdir}/named.conf\" CDEFINES = @CRYPTO@ -DNAMED_CONFFILE=\"${sysconfdir}/named.conf\"
CWARNINGS = CWARNINGS =
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@ ISCLIBS = ../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @OPENSSL_LIBS@ ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @ISC_OPENSSL_LIBS@
BIND9LIBS = ../../lib/bind9/libbind9.@A@ BIND9LIBS = ../../lib/bind9/libbind9.@A@
NSLIBS = ../../lib/ns/libns.@A@ NSLIBS = ../../lib/ns/libns.@A@
+83 -60
View File
@@ -9,14 +9,13 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: check-tool.c,v 1.44 2011/12/22 07:32:39 each Exp $ */
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <inttypes.h>
#ifdef _WIN32 #ifdef _WIN32
#include <Winsock2.h> #include <Winsock2.h>
@@ -62,6 +61,14 @@
#define CHECK_LOCAL 1 #define CHECK_LOCAL 1
#endif #endif
#ifdef HAVE_ADDRINFO
#ifdef HAVE_GETADDRINFO
#ifdef HAVE_GAISTRERROR
#define USE_GETADDRINFO
#endif
#endif
#endif
#define CHECK(r) \ #define CHECK(r) \
do { \ do { \
result = (r); \ result = (r); \
@@ -82,27 +89,28 @@ static const char *dbtype[] = { "rbt" };
int debug = 0; int debug = 0;
const char *journal = NULL; const char *journal = NULL;
bool nomerge = true; isc_boolean_t nomerge = ISC_TRUE;
#if CHECK_LOCAL #if CHECK_LOCAL
bool docheckmx = true; isc_boolean_t docheckmx = ISC_TRUE;
bool dochecksrv = true; isc_boolean_t dochecksrv = ISC_TRUE;
bool docheckns = true; isc_boolean_t docheckns = ISC_TRUE;
#else #else
bool docheckmx = false; isc_boolean_t docheckmx = ISC_FALSE;
bool dochecksrv = false; isc_boolean_t dochecksrv = ISC_FALSE;
bool docheckns = false; isc_boolean_t docheckns = ISC_FALSE;
#endif #endif
dns_zoneopt_t zone_options = DNS_ZONEOPT_CHECKNS | unsigned int zone_options = DNS_ZONEOPT_CHECKNS |
DNS_ZONEOPT_CHECKMX | DNS_ZONEOPT_CHECKMX |
DNS_ZONEOPT_MANYERRORS | DNS_ZONEOPT_MANYERRORS |
DNS_ZONEOPT_CHECKNAMES | DNS_ZONEOPT_CHECKNAMES |
DNS_ZONEOPT_CHECKINTEGRITY | DNS_ZONEOPT_CHECKINTEGRITY |
#if CHECK_SIBLING #if CHECK_SIBLING
DNS_ZONEOPT_CHECKSIBLING | DNS_ZONEOPT_CHECKSIBLING |
#endif #endif
DNS_ZONEOPT_CHECKWILDCARD | DNS_ZONEOPT_CHECKWILDCARD |
DNS_ZONEOPT_WARNMXCNAME | DNS_ZONEOPT_WARNMXCNAME |
DNS_ZONEOPT_WARNSRVCNAME; DNS_ZONEOPT_WARNSRVCNAME;
unsigned int zone_options2 = 0;
/* /*
* This needs to match the list in bin/named/log.c. * This needs to match the list in bin/named/log.c.
@@ -136,7 +144,7 @@ add(char *key, int value) {
if (symtab == NULL) { if (symtab == NULL) {
result = isc_symtab_create(sym_mctx, 100, freekey, sym_mctx, result = isc_symtab_create(sym_mctx, 100, freekey, sym_mctx,
false, &symtab); ISC_FALSE, &symtab);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return; return;
} }
@@ -152,31 +160,32 @@ add(char *key, int value) {
isc_mem_free(sym_mctx, key); isc_mem_free(sym_mctx, key);
} }
static bool static isc_boolean_t
logged(char *key, int value) { logged(char *key, int value) {
isc_result_t result; isc_result_t result;
if (symtab == NULL) if (symtab == NULL)
return (false); return (ISC_FALSE);
result = isc_symtab_lookup(symtab, key, value, NULL); result = isc_symtab_lookup(symtab, key, value, NULL);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
return (true); return (ISC_TRUE);
return (false); return (ISC_FALSE);
} }
static bool static isc_boolean_t
checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner, checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
dns_rdataset_t *a, dns_rdataset_t *aaaa) dns_rdataset_t *a, dns_rdataset_t *aaaa)
{ {
#ifdef USE_GETADDRINFO
dns_rdataset_t *rdataset; dns_rdataset_t *rdataset;
dns_rdata_t rdata = DNS_RDATA_INIT; dns_rdata_t rdata = DNS_RDATA_INIT;
struct addrinfo hints, *ai, *cur; struct addrinfo hints, *ai, *cur;
char namebuf[DNS_NAME_FORMATSIZE + 1]; char namebuf[DNS_NAME_FORMATSIZE + 1];
char ownerbuf[DNS_NAME_FORMATSIZE]; char ownerbuf[DNS_NAME_FORMATSIZE];
char addrbuf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:123.123.123.123")]; char addrbuf[sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:123.123.123.123")];
bool answer = true; isc_boolean_t answer = ISC_TRUE;
bool match; isc_boolean_t match;
const char *type; const char *type;
void *ptr = NULL; void *ptr = NULL;
int result; int result;
@@ -225,7 +234,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
ownerbuf, namebuf, ownerbuf, namebuf,
cur->ai_canonname); cur->ai_canonname);
/* XXX950 make fatal for 9.5.0 */ /* XXX950 make fatal for 9.5.0 */
/* answer = false; */ /* answer = ISC_FALSE; */
add(namebuf, ERR_IS_CNAME); add(namebuf, ERR_IS_CNAME);
} }
break; break;
@@ -241,7 +250,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
add(namebuf, ERR_NO_ADDRESSES); add(namebuf, ERR_NO_ADDRESSES);
} }
/* XXX950 make fatal for 9.5.0 */ /* XXX950 make fatal for 9.5.0 */
return (true); return (ISC_TRUE);
default: default:
if (!logged(namebuf, ERR_LOOKUP_FAILURE)) { if (!logged(namebuf, ERR_LOOKUP_FAILURE)) {
@@ -250,7 +259,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
namebuf, gai_strerror(result)); namebuf, gai_strerror(result));
add(namebuf, ERR_LOOKUP_FAILURE); add(namebuf, ERR_LOOKUP_FAILURE);
} }
return (true); return (ISC_TRUE);
} }
/* /*
@@ -261,13 +270,13 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
result = dns_rdataset_first(a); result = dns_rdataset_first(a);
while (result == ISC_R_SUCCESS) { while (result == ISC_R_SUCCESS) {
dns_rdataset_current(a, &rdata); dns_rdataset_current(a, &rdata);
match = false; match = ISC_FALSE;
for (cur = ai; cur != NULL; cur = cur->ai_next) { for (cur = ai; cur != NULL; cur = cur->ai_next) {
if (cur->ai_family != AF_INET) if (cur->ai_family != AF_INET)
continue; continue;
ptr = &((struct sockaddr_in *)(cur->ai_addr))->sin_addr; ptr = &((struct sockaddr_in *)(cur->ai_addr))->sin_addr;
if (memcmp(ptr, rdata.data, rdata.length) == 0) { if (memcmp(ptr, rdata.data, rdata.length) == 0) {
match = true; match = ISC_TRUE;
break; break;
} }
} }
@@ -279,7 +288,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
addrbuf, sizeof(addrbuf))); addrbuf, sizeof(addrbuf)));
add(namebuf, ERR_EXTRA_A); add(namebuf, ERR_EXTRA_A);
/* XXX950 make fatal for 9.5.0 */ /* XXX950 make fatal for 9.5.0 */
/* answer = false; */ /* answer = ISC_FALSE; */
} }
dns_rdata_reset(&rdata); dns_rdata_reset(&rdata);
result = dns_rdataset_next(a); result = dns_rdataset_next(a);
@@ -291,13 +300,13 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
result = dns_rdataset_first(aaaa); result = dns_rdataset_first(aaaa);
while (result == ISC_R_SUCCESS) { while (result == ISC_R_SUCCESS) {
dns_rdataset_current(aaaa, &rdata); dns_rdataset_current(aaaa, &rdata);
match = false; match = ISC_FALSE;
for (cur = ai; cur != NULL; cur = cur->ai_next) { for (cur = ai; cur != NULL; cur = cur->ai_next) {
if (cur->ai_family != AF_INET6) if (cur->ai_family != AF_INET6)
continue; continue;
ptr = &((struct sockaddr_in6 *)(cur->ai_addr))->sin6_addr; ptr = &((struct sockaddr_in6 *)(cur->ai_addr))->sin6_addr;
if (memcmp(ptr, rdata.data, rdata.length) == 0) { if (memcmp(ptr, rdata.data, rdata.length) == 0) {
match = true; match = ISC_TRUE;
break; break;
} }
} }
@@ -309,7 +318,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
addrbuf, sizeof(addrbuf))); addrbuf, sizeof(addrbuf)));
add(namebuf, ERR_EXTRA_AAAA); add(namebuf, ERR_EXTRA_AAAA);
/* XXX950 make fatal for 9.5.0. */ /* XXX950 make fatal for 9.5.0. */
/* answer = false; */ /* answer = ISC_FALSE; */
} }
dns_rdata_reset(&rdata); dns_rdata_reset(&rdata);
result = dns_rdataset_next(aaaa); result = dns_rdataset_next(aaaa);
@@ -320,7 +329,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
* Check that all addresses appear in the glue. * Check that all addresses appear in the glue.
*/ */
if (!logged(namebuf, ERR_MISSING_GLUE)) { if (!logged(namebuf, ERR_MISSING_GLUE)) {
bool missing_glue = false; isc_boolean_t missing_glue = ISC_FALSE;
for (cur = ai; cur != NULL; cur = cur->ai_next) { for (cur = ai; cur != NULL; cur = cur->ai_next) {
switch (cur->ai_family) { switch (cur->ai_family) {
case AF_INET: case AF_INET:
@@ -336,7 +345,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
default: default:
continue; continue;
} }
match = false; match = ISC_FALSE;
if (dns_rdataset_isassociated(rdataset)) if (dns_rdataset_isassociated(rdataset))
result = dns_rdataset_first(rdataset); result = dns_rdataset_first(rdataset);
else else
@@ -344,7 +353,7 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
while (result == ISC_R_SUCCESS && !match) { while (result == ISC_R_SUCCESS && !match) {
dns_rdataset_current(rdataset, &rdata); dns_rdataset_current(rdataset, &rdata);
if (memcmp(ptr, rdata.data, rdata.length) == 0) if (memcmp(ptr, rdata.data, rdata.length) == 0)
match = true; match = ISC_TRUE;
dns_rdata_reset(&rdata); dns_rdata_reset(&rdata);
result = dns_rdataset_next(rdataset); result = dns_rdataset_next(rdataset);
} }
@@ -355,8 +364,8 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
inet_ntop(cur->ai_family, ptr, inet_ntop(cur->ai_family, ptr,
addrbuf, sizeof(addrbuf))); addrbuf, sizeof(addrbuf)));
/* XXX950 make fatal for 9.5.0. */ /* XXX950 make fatal for 9.5.0. */
/* answer = false; */ /* answer = ISC_FALSE; */
missing_glue = true; missing_glue = ISC_TRUE;
} }
} }
if (missing_glue) if (missing_glue)
@@ -364,16 +373,20 @@ checkns(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner,
} }
freeaddrinfo(ai); freeaddrinfo(ai);
return (answer); return (answer);
#else
return (ISC_TRUE);
#endif
} }
static bool static isc_boolean_t
checkmx(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) { checkmx(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
#ifdef USE_GETADDRINFO
struct addrinfo hints, *ai, *cur; struct addrinfo hints, *ai, *cur;
char namebuf[DNS_NAME_FORMATSIZE + 1]; char namebuf[DNS_NAME_FORMATSIZE + 1];
char ownerbuf[DNS_NAME_FORMATSIZE]; char ownerbuf[DNS_NAME_FORMATSIZE];
int result; int result;
int level = ISC_LOG_ERROR; int level = ISC_LOG_ERROR;
bool answer = true; isc_boolean_t answer = ISC_TRUE;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME; hints.ai_flags = AI_CANONNAME;
@@ -417,7 +430,7 @@ checkmx(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
add(namebuf, ERR_IS_MXCNAME); add(namebuf, ERR_IS_MXCNAME);
} }
if (level == ISC_LOG_ERROR) if (level == ISC_LOG_ERROR)
answer = false; answer = ISC_FALSE;
} }
} }
freeaddrinfo(ai); freeaddrinfo(ai);
@@ -435,7 +448,7 @@ checkmx(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
add(namebuf, ERR_NO_ADDRESSES); add(namebuf, ERR_NO_ADDRESSES);
} }
/* XXX950 make fatal for 9.5.0. */ /* XXX950 make fatal for 9.5.0. */
return (true); return (ISC_TRUE);
default: default:
if (!logged(namebuf, ERR_LOOKUP_FAILURE)) { if (!logged(namebuf, ERR_LOOKUP_FAILURE)) {
@@ -444,18 +457,22 @@ checkmx(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
namebuf, gai_strerror(result)); namebuf, gai_strerror(result));
add(namebuf, ERR_LOOKUP_FAILURE); add(namebuf, ERR_LOOKUP_FAILURE);
} }
return (true); return (ISC_TRUE);
} }
#else
return (ISC_TRUE);
#endif
} }
static bool static isc_boolean_t
checksrv(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) { checksrv(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
#ifdef USE_GETADDRINFO
struct addrinfo hints, *ai, *cur; struct addrinfo hints, *ai, *cur;
char namebuf[DNS_NAME_FORMATSIZE + 1]; char namebuf[DNS_NAME_FORMATSIZE + 1];
char ownerbuf[DNS_NAME_FORMATSIZE]; char ownerbuf[DNS_NAME_FORMATSIZE];
int result; int result;
int level = ISC_LOG_ERROR; int level = ISC_LOG_ERROR;
bool answer = true; isc_boolean_t answer = ISC_TRUE;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME; hints.ai_flags = AI_CANONNAME;
@@ -498,7 +515,7 @@ checksrv(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
add(namebuf, ERR_IS_SRVCNAME); add(namebuf, ERR_IS_SRVCNAME);
} }
if (level == ISC_LOG_ERROR) if (level == ISC_LOG_ERROR)
answer = false; answer = ISC_FALSE;
} }
} }
freeaddrinfo(ai); freeaddrinfo(ai);
@@ -516,7 +533,7 @@ checksrv(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
add(namebuf, ERR_NO_ADDRESSES); add(namebuf, ERR_NO_ADDRESSES);
} }
/* XXX950 make fatal for 9.5.0. */ /* XXX950 make fatal for 9.5.0. */
return (true); return (ISC_TRUE);
default: default:
if (!logged(namebuf, ERR_LOOKUP_FAILURE)) { if (!logged(namebuf, ERR_LOOKUP_FAILURE)) {
@@ -525,8 +542,11 @@ checksrv(dns_zone_t *zone, const dns_name_t *name, const dns_name_t *owner) {
namebuf, gai_strerror(result)); namebuf, gai_strerror(result));
add(namebuf, ERR_LOOKUP_FAILURE); add(namebuf, ERR_LOOKUP_FAILURE);
} }
return (true); return (ISC_TRUE);
} }
#else
return (ISC_TRUE);
#endif
} }
isc_result_t isc_result_t
@@ -570,7 +590,8 @@ check_ttls(dns_zone_t *zone, dns_ttl_t maxttl) {
dns_rdataset_t rdataset; dns_rdataset_t rdataset;
dns_fixedname_t fname; dns_fixedname_t fname;
dns_name_t *name; dns_name_t *name;
name = dns_fixedname_initname(&fname); dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
dns_rdataset_init(&rdataset); dns_rdataset_init(&rdataset);
CHECK(dns_zone_getdb(zone, &db)); CHECK(dns_zone_getdb(zone, &db));
@@ -632,7 +653,7 @@ check_ttls(dns_zone_t *zone, dns_ttl_t maxttl) {
if (dbiter != NULL) if (dbiter != NULL)
dns_dbiterator_destroy(&dbiter); dns_dbiterator_destroy(&dbiter);
if (version != NULL) if (version != NULL)
dns_db_closeversion(db, &version, false); dns_db_closeversion(db, &version, ISC_FALSE);
if (db != NULL) if (db != NULL)
dns_db_detach(&db); dns_db_detach(&db);
@@ -665,12 +686,12 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
isc_buffer_constinit(&buffer, zonename, strlen(zonename)); isc_buffer_constinit(&buffer, zonename, strlen(zonename));
isc_buffer_add(&buffer, strlen(zonename)); isc_buffer_add(&buffer, strlen(zonename));
origin = dns_fixedname_initname(&fixorigin); dns_fixedname_init(&fixorigin);
origin = dns_fixedname_name(&fixorigin);
CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0, NULL)); CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0, NULL));
CHECK(dns_zone_setorigin(zone, origin)); CHECK(dns_zone_setorigin(zone, origin));
CHECK(dns_zone_setdbtype(zone, 1, (const char * const *) dbtype)); CHECK(dns_zone_setdbtype(zone, 1, (const char * const *) dbtype));
CHECK(dns_zone_setfile(zone, filename, fileformat, CHECK(dns_zone_setfile2(zone, filename, fileformat));
&dns_master_style_default));
if (journal != NULL) if (journal != NULL)
CHECK(dns_zone_setjournal(zone, journal)); CHECK(dns_zone_setjournal(zone, journal));
@@ -679,7 +700,8 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
CHECK(dns_rdataclass_fromtext(&rdclass, &region)); CHECK(dns_rdataclass_fromtext(&rdclass, &region));
dns_zone_setclass(zone, rdclass); dns_zone_setclass(zone, rdclass);
dns_zone_setoption(zone, zone_options, true); dns_zone_setoption(zone, zone_options, ISC_TRUE);
dns_zone_setoption2(zone, zone_options2, ISC_TRUE);
dns_zone_setoption(zone, DNS_ZONEOPT_NOMERGE, nomerge); dns_zone_setoption(zone, DNS_ZONEOPT_NOMERGE, nomerge);
dns_zone_setmaxttl(zone, maxttl); dns_zone_setmaxttl(zone, maxttl);
@@ -691,7 +713,7 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
if (dochecksrv) if (dochecksrv)
dns_zone_setchecksrv(zone, checksrv); dns_zone_setchecksrv(zone, checksrv);
CHECK(dns_zone_load(zone, false)); CHECK(dns_zone_load(zone));
/* /*
* When loading map files we can't catch oversize TTLs during * When loading map files we can't catch oversize TTLs during
@@ -716,7 +738,7 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
isc_result_t isc_result_t
dump_zone(const char *zonename, dns_zone_t *zone, const char *filename, dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
dns_masterformat_t fileformat, const dns_master_style_t *style, dns_masterformat_t fileformat, const dns_master_style_t *style,
const uint32_t rawversion) const isc_uint32_t rawversion)
{ {
isc_result_t result; isc_result_t result;
FILE *output = stdout; FILE *output = stdout;
@@ -742,8 +764,8 @@ dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
} }
} }
result = dns_zone_dumptostream(zone, output, fileformat, style, result = dns_zone_dumptostream3(zone, output, fileformat, style,
rawversion); rawversion);
if (output != stdout) if (output != stdout)
(void)isc_stdio_close(output); (void)isc_stdio_close(output);
@@ -771,3 +793,4 @@ DestroySockets(void) {
WSACleanup(); WSACleanup();
} }
#endif #endif
+8 -10
View File
@@ -9,22 +9,19 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: check-tool.h,v 1.18 2011/12/09 23:47:02 tbox Exp $ */
#ifndef CHECK_TOOL_H #ifndef CHECK_TOOL_H
#define CHECK_TOOL_H #define CHECK_TOOL_H
/*! \file */ /*! \file */
#include <inttypes.h>
#include <stdbool.h>
#include <isc/lang.h> #include <isc/lang.h>
#include <isc/stdio.h> #include <isc/stdio.h>
#include <isc/types.h> #include <isc/types.h>
#include <dns/masterdump.h> #include <dns/masterdump.h>
#include <dns/types.h> #include <dns/types.h>
#include <dns/zone.h>
ISC_LANG_BEGINDECLS ISC_LANG_BEGINDECLS
@@ -39,7 +36,7 @@ load_zone(isc_mem_t *mctx, const char *zonename, const char *filename,
isc_result_t isc_result_t
dump_zone(const char *zonename, dns_zone_t *zone, const char *filename, dump_zone(const char *zonename, dns_zone_t *zone, const char *filename,
dns_masterformat_t fileformat, const dns_master_style_t *style, dns_masterformat_t fileformat, const dns_master_style_t *style,
const uint32_t rawversion); const isc_uint32_t rawversion);
#ifdef _WIN32 #ifdef _WIN32
void InitSockets(void); void InitSockets(void);
@@ -48,11 +45,12 @@ void DestroySockets(void);
extern int debug; extern int debug;
extern const char *journal; extern const char *journal;
extern bool nomerge; extern isc_boolean_t nomerge;
extern bool docheckmx; extern isc_boolean_t docheckmx;
extern bool docheckns; extern isc_boolean_t docheckns;
extern bool dochecksrv; extern isc_boolean_t dochecksrv;
extern dns_zoneopt_t zone_options; extern unsigned int zone_options;
extern unsigned int zone_options2;
ISC_LANG_ENDDECLS ISC_LANG_ENDDECLS
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2000-2002, 2004, 2005, 2007, 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2000-2002, 2004, 2005, 2007, 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -136,5 +136,5 @@ BIND 9 Administrator Reference Manual\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2000-2002, 2004, 2005, 2007, 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2000-2002, 2004, 2005, 2007, 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+33 -24
View File
@@ -9,18 +9,19 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: named-checkconf.c,v 1.56 2011/03/12 04:59:46 tbox Exp $ */
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <errno.h> #include <errno.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/dir.h> #include <isc/dir.h>
#include <isc/entropy.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/log.h> #include <isc/log.h>
#include <isc/mem.h> #include <isc/mem.h>
@@ -92,18 +93,18 @@ directory_callback(const char *clausename, const cfg_obj_t *obj, void *arg) {
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
static bool static isc_boolean_t
get_maps(const cfg_obj_t **maps, const char *name, const cfg_obj_t **obj) { get_maps(const cfg_obj_t **maps, const char *name, const cfg_obj_t **obj) {
int i; int i;
for (i = 0;; i++) { for (i = 0;; i++) {
if (maps[i] == NULL) if (maps[i] == NULL)
return (false); return (ISC_FALSE);
if (cfg_map_get(maps[i], name, obj) == ISC_R_SUCCESS) if (cfg_map_get(maps[i], name, obj) == ISC_R_SUCCESS)
return (true); return (ISC_TRUE);
} }
} }
static bool static isc_boolean_t
get_checknames(const cfg_obj_t **maps, const cfg_obj_t **obj) { get_checknames(const cfg_obj_t **maps, const cfg_obj_t **obj) {
const cfg_listelt_t *element; const cfg_listelt_t *element;
const cfg_obj_t *checknames; const cfg_obj_t *checknames;
@@ -114,14 +115,14 @@ get_checknames(const cfg_obj_t **maps, const cfg_obj_t **obj) {
for (i = 0;; i++) { for (i = 0;; i++) {
if (maps[i] == NULL) if (maps[i] == NULL)
return (false); return (ISC_FALSE);
checknames = NULL; checknames = NULL;
result = cfg_map_get(maps[i], "check-names", &checknames); result = cfg_map_get(maps[i], "check-names", &checknames);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
continue; continue;
if (checknames != NULL && !cfg_obj_islist(checknames)) { if (checknames != NULL && !cfg_obj_islist(checknames)) {
*obj = checknames; *obj = checknames;
return (true); return (ISC_TRUE);
} }
for (element = cfg_list_first(checknames); for (element = cfg_list_first(checknames);
element != NULL; element != NULL;
@@ -136,7 +137,7 @@ get_checknames(const cfg_obj_t **maps, const cfg_obj_t **obj) {
continue; continue;
} }
*obj = cfg_tuple_get(value, "mode"); *obj = cfg_tuple_get(value, "mode");
return (true); return (ISC_TRUE);
} }
} }
} }
@@ -169,7 +170,7 @@ configure_hint(const char *zfile, const char *zclass, isc_mem_t *mctx) {
static isc_result_t static isc_result_t
configure_zone(const char *vclass, const char *view, configure_zone(const char *vclass, const char *view,
const cfg_obj_t *zconfig, const cfg_obj_t *vconfig, const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
const cfg_obj_t *config, isc_mem_t *mctx, bool list) const cfg_obj_t *config, isc_mem_t *mctx, isc_boolean_t list)
{ {
int i = 0; int i = 0;
isc_result_t result; isc_result_t result;
@@ -407,7 +408,7 @@ configure_zone(const char *vclass, const char *view,
obj = NULL; obj = NULL;
if (get_maps(maps, "max-zone-ttl", &obj)) { if (get_maps(maps, "max-zone-ttl", &obj)) {
maxttl = cfg_obj_asuint32(obj); maxttl = cfg_obj_asuint32(obj);
zone_options |= DNS_ZONEOPT_CHECKTTL; zone_options2 |= DNS_ZONEOPT2_CHECKTTL;
} }
result = load_zone(mctx, zname, zfile, masterformat, result = load_zone(mctx, zname, zfile, masterformat,
@@ -421,7 +422,7 @@ configure_zone(const char *vclass, const char *view,
/*% configure a view */ /*% configure a view */
static isc_result_t static isc_result_t
configure_view(const char *vclass, const char *view, const cfg_obj_t *config, configure_view(const char *vclass, const char *view, const cfg_obj_t *config,
const cfg_obj_t *vconfig, isc_mem_t *mctx, bool list) const cfg_obj_t *vconfig, isc_mem_t *mctx, isc_boolean_t list)
{ {
const cfg_listelt_t *element; const cfg_listelt_t *element;
const cfg_obj_t *voptions; const cfg_obj_t *voptions;
@@ -470,7 +471,7 @@ config_getclass(const cfg_obj_t *classobj, dns_rdataclass_t defclass,
/*% load zones from the configuration */ /*% load zones from the configuration */
static isc_result_t static isc_result_t
load_zones_fromconfig(const cfg_obj_t *config, isc_mem_t *mctx, load_zones_fromconfig(const cfg_obj_t *config, isc_mem_t *mctx,
bool list_zones) isc_boolean_t list_zones)
{ {
const cfg_listelt_t *element; const cfg_listelt_t *element;
const cfg_obj_t *views; const cfg_obj_t *views;
@@ -538,12 +539,13 @@ main(int argc, char **argv) {
isc_mem_t *mctx = NULL; isc_mem_t *mctx = NULL;
isc_result_t result; isc_result_t result;
int exit_status = 0; int exit_status = 0;
bool load_zones = false; isc_entropy_t *ectx = NULL;
bool list_zones = false; isc_boolean_t load_zones = ISC_FALSE;
bool print = false; isc_boolean_t list_zones = ISC_FALSE;
isc_boolean_t print = ISC_FALSE;
unsigned int flags = 0; unsigned int flags = 0;
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
/* /*
* Process memory debugging argument first. * Process memory debugging argument first.
@@ -567,7 +569,7 @@ main(int argc, char **argv) {
break; break;
} }
} }
isc_commandline_reset = true; isc_commandline_reset = ISC_TRUE;
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
@@ -578,11 +580,11 @@ main(int argc, char **argv) {
break; break;
case 'j': case 'j':
nomerge = false; nomerge = ISC_FALSE;
break; break;
case 'l': case 'l':
list_zones = true; list_zones = ISC_TRUE;
break; break;
case 'm': case 'm':
@@ -598,7 +600,7 @@ main(int argc, char **argv) {
break; break;
case 'p': case 'p':
print = true; print = ISC_TRUE;
break; break;
case 'v': case 'v':
@@ -610,10 +612,10 @@ main(int argc, char **argv) {
break; break;
case 'z': case 'z':
load_zones = true; load_zones = ISC_TRUE;
docheckmx = false; docheckmx = ISC_FALSE;
docheckns = false; docheckns = ISC_FALSE;
dochecksrv = false; dochecksrv = ISC_FALSE;
break; break;
case '?': case '?':
@@ -653,6 +655,10 @@ main(int argc, char **argv) {
RUNTIME_CHECK(setup_logging(mctx, stdout, &logc) == ISC_R_SUCCESS); RUNTIME_CHECK(setup_logging(mctx, stdout, &logc) == ISC_R_SUCCESS);
RUNTIME_CHECK(isc_entropy_create(mctx, &ectx) == ISC_R_SUCCESS);
RUNTIME_CHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE)
== ISC_R_SUCCESS);
dns_result_register(); dns_result_register();
RUNTIME_CHECK(cfg_parser_create(mctx, logc, &parser) == ISC_R_SUCCESS); RUNTIME_CHECK(cfg_parser_create(mctx, logc, &parser) == ISC_R_SUCCESS);
@@ -683,6 +689,9 @@ main(int argc, char **argv) {
isc_log_destroy(&logc); isc_log_destroy(&logc);
isc_hash_destroy();
isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx); isc_mem_destroy(&mctx);
#ifdef _WIN32 #ifdef _WIN32
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2000-2002, 2004, 2005, 2007, 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2000-2002, 2004, 2005, 2007, 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2000-2002, 2004-2007, 2009-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2000-2002, 2004-2007, 2009-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -325,5 +325,5 @@ BIND 9 Administrator Reference Manual\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2000-2002, 2004-2007, 2009-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2000-2002, 2004-2007, 2009-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+32 -26
View File
@@ -9,18 +9,18 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: named-checkzone.c,v 1.65.32.2 2012/02/07 02:45:21 each Exp $ */
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <inttypes.h>
#include <isc/app.h> #include <isc/app.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/dir.h> #include <isc/dir.h>
#include <isc/entropy.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/log.h> #include <isc/log.h>
#include <isc/mem.h> #include <isc/mem.h>
@@ -47,6 +47,7 @@
static int quiet = 0; static int quiet = 0;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static isc_entropy_t *ectx = NULL;
dns_zone_t *zone = NULL; dns_zone_t *zone = NULL;
dns_zonetype_t zonetype = dns_zone_master; dns_zonetype_t zonetype = dns_zone_master;
static int dumpzone = 0; static int dumpzone = 0;
@@ -108,10 +109,10 @@ main(int argc, char **argv) {
dns_masterformat_t inputformat = dns_masterformat_text; dns_masterformat_t inputformat = dns_masterformat_text;
dns_masterformat_t outputformat = dns_masterformat_text; dns_masterformat_t outputformat = dns_masterformat_text;
dns_masterrawheader_t header; dns_masterrawheader_t header;
uint32_t rawversion = 1, serialnum = 0; isc_uint32_t rawversion = 1, serialnum = 0;
dns_ttl_t maxttl = 0; dns_ttl_t maxttl = 0;
bool snset = false; isc_boolean_t snset = ISC_FALSE;
bool logdump = false; isc_boolean_t logdump = ISC_FALSE;
FILE *errout = stdout; FILE *errout = stdout;
char *endp; char *endp;
@@ -161,7 +162,7 @@ main(int argc, char **argv) {
#define ARGCMP(X) (strcmp(isc_commandline_argument, X) == 0) #define ARGCMP(X) (strcmp(isc_commandline_argument, X) == 0)
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
while ((c = isc_commandline_parse(argc, argv, while ((c = isc_commandline_parse(argc, argv,
"c:df:hi:jJ:k:L:l:m:n:qr:s:t:o:vw:DF:M:S:T:W:")) "c:df:hi:jJ:k:L:l:m:n:qr:s:t:o:vw:DF:M:S:T:W:"))
@@ -179,33 +180,33 @@ main(int argc, char **argv) {
if (ARGCMP("full")) { if (ARGCMP("full")) {
zone_options |= DNS_ZONEOPT_CHECKINTEGRITY | zone_options |= DNS_ZONEOPT_CHECKINTEGRITY |
DNS_ZONEOPT_CHECKSIBLING; DNS_ZONEOPT_CHECKSIBLING;
docheckmx = true; docheckmx = ISC_TRUE;
docheckns = true; docheckns = ISC_TRUE;
dochecksrv = true; dochecksrv = ISC_TRUE;
} else if (ARGCMP("full-sibling")) { } else if (ARGCMP("full-sibling")) {
zone_options |= DNS_ZONEOPT_CHECKINTEGRITY; zone_options |= DNS_ZONEOPT_CHECKINTEGRITY;
zone_options &= ~DNS_ZONEOPT_CHECKSIBLING; zone_options &= ~DNS_ZONEOPT_CHECKSIBLING;
docheckmx = true; docheckmx = ISC_TRUE;
docheckns = true; docheckns = ISC_TRUE;
dochecksrv = true; dochecksrv = ISC_TRUE;
} else if (ARGCMP("local")) { } else if (ARGCMP("local")) {
zone_options |= DNS_ZONEOPT_CHECKINTEGRITY; zone_options |= DNS_ZONEOPT_CHECKINTEGRITY;
zone_options |= DNS_ZONEOPT_CHECKSIBLING; zone_options |= DNS_ZONEOPT_CHECKSIBLING;
docheckmx = false; docheckmx = ISC_FALSE;
docheckns = false; docheckns = ISC_FALSE;
dochecksrv = false; dochecksrv = ISC_FALSE;
} else if (ARGCMP("local-sibling")) { } else if (ARGCMP("local-sibling")) {
zone_options |= DNS_ZONEOPT_CHECKINTEGRITY; zone_options |= DNS_ZONEOPT_CHECKINTEGRITY;
zone_options &= ~DNS_ZONEOPT_CHECKSIBLING; zone_options &= ~DNS_ZONEOPT_CHECKSIBLING;
docheckmx = false; docheckmx = ISC_FALSE;
docheckns = false; docheckns = ISC_FALSE;
dochecksrv = false; dochecksrv = ISC_FALSE;
} else if (ARGCMP("none")) { } else if (ARGCMP("none")) {
zone_options &= ~DNS_ZONEOPT_CHECKINTEGRITY; zone_options &= ~DNS_ZONEOPT_CHECKINTEGRITY;
zone_options &= ~DNS_ZONEOPT_CHECKSIBLING; zone_options &= ~DNS_ZONEOPT_CHECKSIBLING;
docheckmx = false; docheckmx = ISC_FALSE;
docheckns = false; docheckns = ISC_FALSE;
dochecksrv = false; dochecksrv = ISC_FALSE;
} else { } else {
fprintf(stderr, "invalid argument to -i: %s\n", fprintf(stderr, "invalid argument to -i: %s\n",
isc_commandline_argument); isc_commandline_argument);
@@ -222,12 +223,12 @@ main(int argc, char **argv) {
break; break;
case 'j': case 'j':
nomerge = false; nomerge = ISC_FALSE;
break; break;
case 'J': case 'J':
journal = isc_commandline_argument; journal = isc_commandline_argument;
nomerge = false; nomerge = ISC_FALSE;
break; break;
case 'k': case 'k':
@@ -248,7 +249,7 @@ main(int argc, char **argv) {
break; break;
case 'L': case 'L':
snset = true; snset = ISC_TRUE;
endp = NULL; endp = NULL;
serialnum = strtol(isc_commandline_argument, &endp, 0); serialnum = strtol(isc_commandline_argument, &endp, 0);
if (*endp != '\0') { if (*endp != '\0') {
@@ -259,7 +260,7 @@ main(int argc, char **argv) {
break; break;
case 'l': case 'l':
zone_options |= DNS_ZONEOPT_CHECKTTL; zone_options2 |= DNS_ZONEOPT2_CHECKTTL;
endp = NULL; endp = NULL;
maxttl = strtol(isc_commandline_argument, &endp, 0); maxttl = strtol(isc_commandline_argument, &endp, 0);
if (*endp != '\0') { if (*endp != '\0') {
@@ -507,7 +508,7 @@ main(int argc, char **argv) {
strcmp(output_filename, "/dev/fd/1") == 0 || strcmp(output_filename, "/dev/fd/1") == 0 ||
strcmp(output_filename, "/dev/stdout") == 0)) { strcmp(output_filename, "/dev/stdout") == 0)) {
errout = stderr; errout = stderr;
logdump = false; logdump = ISC_FALSE;
} }
if (isc_commandline_index + 2 != argc) if (isc_commandline_index + 2 != argc)
@@ -521,6 +522,9 @@ main(int argc, char **argv) {
if (!quiet) if (!quiet)
RUNTIME_CHECK(setup_logging(mctx, errout, &lctx) RUNTIME_CHECK(setup_logging(mctx, errout, &lctx)
== ISC_R_SUCCESS); == ISC_R_SUCCESS);
RUNTIME_CHECK(isc_entropy_create(mctx, &ectx) == ISC_R_SUCCESS);
RUNTIME_CHECK(isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE)
== ISC_R_SUCCESS);
dns_result_register(); dns_result_register();
@@ -552,6 +556,8 @@ main(int argc, char **argv) {
destroy(); destroy();
if (lctx != NULL) if (lctx != NULL)
isc_log_destroy(&lctx); isc_log_destroy(&lctx);
isc_hash_destroy();
isc_entropy_detach(&ectx);
isc_mem_destroy(&mctx); isc_mem_destroy(&mctx);
#ifdef _WIN32 #ifdef _WIN32
DestroySockets(); DestroySockets();
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2000-2002, 2004-2007, 2009-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2000-2002, 2004-2007, 2009-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+4 -4
View File
@@ -55,7 +55,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(ProjectName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(ProjectName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -70,7 +70,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -81,7 +81,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -99,7 +99,7 @@
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
+2 -2
View File
@@ -58,7 +58,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -80,7 +80,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
+4 -4
View File
@@ -55,7 +55,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(ProjectName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(ProjectName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -70,7 +70,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
<Command>cd ..\..\..\Build\$(Configuration) <Command>cd ..\..\..\Build\$(Configuration)
@@ -87,7 +87,7 @@ copy /Y named-checkzone.ilk named-compilezone.ilk
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -105,7 +105,7 @@ copy /Y named-checkzone.ilk named-compilezone.ilk
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);..\..\..\lib\ns\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>checktool.lib;libisc.lib;libdns.lib;libisccfg.lib;libbind9.lib;libns.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
+2 -2
View File
@@ -27,8 +27,8 @@ CWARNINGS =
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
ISCCCLIBS = ../../lib/isccc/libisccc.@A@ ISCCCLIBS = ../../lib/isccc/libisccc.@A@
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@ ISCLIBS = ../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @OPENSSL_LIBS@ ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @ISC_OPENSSL_LIBS@
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
BIND9LIBS = ../../lib/bind9/libbind9.@A@ BIND9LIBS = ../../lib/bind9/libbind9.@A@
+14 -3
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -39,7 +39,7 @@
ddns-confgen \- ddns key generation tool ddns-confgen \- ddns key generation tool
.SH "SYNOPSIS" .SH "SYNOPSIS"
.HP \w'\fBtsig\-keygen\fR\ 'u .HP \w'\fBtsig\-keygen\fR\ 'u
\fBtsig\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-h\fR] [name] \fBtsig\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-h\fR] [\fB\-r\ \fR\fB\fIrandomfile\fR\fR] [name]
.HP \w'\fBddns\-confgen\fR\ 'u .HP \w'\fBddns\-confgen\fR\ 'u
\fBddns\-confgen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-h\fR] [\fB\-k\ \fR\fB\fIkeyname\fR\fR] [\fB\-q\fR] [\fB\-r\ \fR\fB\fIrandomfile\fR\fR] [\-s\ \fIname\fR | \-z\ \fIzone\fR] \fBddns\-confgen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-h\fR] [\fB\-k\ \fR\fB\fIkeyname\fR\fR] [\fB\-q\fR] [\fB\-r\ \fR\fB\fIrandomfile\fR\fR] [\-s\ \fIname\fR | \-z\ \fIzone\fR]
.SH "DESCRIPTION" .SH "DESCRIPTION"
@@ -109,6 +109,17 @@ only\&.) Quiet mode: Print only the key, with no explanatory text or usage examp
\fBtsig\-keygen\fR\&. \fBtsig\-keygen\fR\&.
.RE .RE
.PP .PP
\-r \fIrandomfile\fR
.RS 4
Specifies a source of random data for generating the authorization\&. If the operating system does not provide a
/dev/random
or equivalent device, the default source of randomness is keyboard input\&.
randomdev
specifies the name of a character device or file containing random data to be used instead of the default\&. The special value
keyboard
indicates that keyboard input should be used\&.
.RE
.PP
\-s \fIname\fR \-s \fIname\fR
.RS 4 .RS 4
(\fBddns\-confgen\fR (\fBddns\-confgen\fR
@@ -144,5 +155,5 @@ BIND 9 Administrator Reference Manual\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+20 -16
View File
@@ -19,15 +19,16 @@
#include <config.h> #include <config.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h>
#include <isc/assertions.h> #include <isc/assertions.h>
#include <isc/base64.h> #include <isc/base64.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/keyboard.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/net.h> #include <isc/net.h>
#include <isc/print.h> #include <isc/print.h>
@@ -36,7 +37,7 @@
#include <isc/time.h> #include <isc/time.h>
#include <isc/util.h> #include <isc/util.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -56,7 +57,7 @@
static char program[256]; static char program[256];
const char *progname; const char *progname;
static enum { progmode_keygen, progmode_confgen} progmode; static enum { progmode_keygen, progmode_confgen} progmode;
bool verbose = false; /* needed by util.c but not used here */ isc_boolean_t verbose = ISC_FALSE; /* needed by util.c but not used here */
ISC_PLATFORM_NORETURN_PRE static void ISC_PLATFORM_NORETURN_PRE static void
usage(int status) ISC_PLATFORM_NORETURN_POST; usage(int status) ISC_PLATFORM_NORETURN_POST;
@@ -66,9 +67,10 @@ usage(int status) {
if (progmode == progmode_confgen) { if (progmode == progmode_confgen) {
fprintf(stderr, "\ fprintf(stderr, "\
Usage:\n\ Usage:\n\
%s [-a alg] [-k keyname] [-q] [-s name | -z zone]\n\ %s [-a alg] [-k keyname] [-r randomfile] [-q] [-s name | -z zone]\n\
-a alg: algorithm (default hmac-sha256)\n\ -a alg: algorithm (default hmac-sha256)\n\
-k keyname: name of the key as it will be used in named.conf\n\ -k keyname: name of the key as it will be used in named.conf\n\
-r randomfile: source of random data (use \"keyboard\" for key timing)\n\
-s name: domain name to be updated using the created key\n\ -s name: domain name to be updated using the created key\n\
-z zone: name of the zone as it will be used in named.conf\n\ -z zone: name of the zone as it will be used in named.conf\n\
-q: quiet mode: print the key, with no explanatory text\n", -q: quiet mode: print the key, with no explanatory text\n",
@@ -76,8 +78,9 @@ Usage:\n\
} else { } else {
fprintf(stderr, "\ fprintf(stderr, "\
Usage:\n\ Usage:\n\
%s [-a alg] [keyname]\n\ %s [-a alg] [-r randomfile] [keyname]\n\
-a alg: algorithm (default hmac-sha256)\n\n", -a alg: algorithm (default hmac-sha256)\n\
-r randomfile: source of random data (use \"keyboard\" for key timing)\n",
progname); progname);
} }
@@ -87,11 +90,12 @@ Usage:\n\
int int
main(int argc, char **argv) { main(int argc, char **argv) {
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
bool show_final_mem = false; isc_boolean_t show_final_mem = ISC_FALSE;
bool quiet = false; isc_boolean_t quiet = ISC_FALSE;
isc_buffer_t key_txtbuffer; isc_buffer_t key_txtbuffer;
char key_txtsecret[256]; char key_txtsecret[256];
isc_mem_t *mctx = NULL; isc_mem_t *mctx = NULL;
const char *randomfile = NULL;
const char *keyname = NULL; const char *keyname = NULL;
const char *zone = NULL; const char *zone = NULL;
const char *self_domain = NULL; const char *self_domain = NULL;
@@ -102,7 +106,7 @@ main(int argc, char **argv) {
int len = 0; int len = 0;
int ch; int ch;
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
@@ -124,13 +128,13 @@ main(int argc, char **argv) {
if (PROGCMP("tsig-keygen")) { if (PROGCMP("tsig-keygen")) {
progmode = progmode_keygen; progmode = progmode_keygen;
quiet = true; quiet = ISC_TRUE;
} else if (PROGCMP("ddns-confgen")) } else if (PROGCMP("ddns-confgen"))
progmode = progmode_confgen; progmode = progmode_confgen;
else else
INSIST(0); INSIST(0);
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv, while ((ch = isc_commandline_parse(argc, argv,
"a:hk:Mmr:qs:y:z:")) != -1) { "a:hk:Mmr:qs:y:z:")) != -1) {
@@ -155,16 +159,16 @@ main(int argc, char **argv) {
isc_mem_debugging = ISC_MEM_DEBUGTRACE; isc_mem_debugging = ISC_MEM_DEBUGTRACE;
break; break;
case 'm': case 'm':
show_final_mem = true; show_final_mem = ISC_TRUE;
break; break;
case 'q': case 'q':
if (progmode == progmode_confgen) if (progmode == progmode_confgen)
quiet = true; quiet = ISC_TRUE;
else else
usage(1); usage(1);
break; break;
case 'r': case 'r':
fatal("The -r option has been deprecated."); randomfile = isc_commandline_argument;
break; break;
case 's': case 's':
if (progmode == progmode_confgen) if (progmode == progmode_confgen)
@@ -231,7 +235,7 @@ main(int argc, char **argv) {
isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret)); isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret));
generate_key(mctx, alg, keysize, &key_txtbuffer); generate_key(mctx, randomfile, alg, keysize, &key_txtbuffer);
if (!quiet) if (!quiet)
+18
View File
@@ -46,6 +46,7 @@
<command>tsig-keygen</command> <command>tsig-keygen</command>
<arg choice="opt" rep="norepeat"><option>-a <replaceable class="parameter">algorithm</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-a <replaceable class="parameter">algorithm</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-h</option></arg> <arg choice="opt" rep="norepeat"><option>-h</option></arg>
<arg choice="opt" rep="norepeat"><option>-r <replaceable class="parameter">randomfile</replaceable></option></arg>
<arg choice="opt" rep="norepeat">name</arg> <arg choice="opt" rep="norepeat">name</arg>
</cmdsynopsis> </cmdsynopsis>
<cmdsynopsis sepchar=" "> <cmdsynopsis sepchar=" ">
@@ -156,6 +157,23 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-r <replaceable class="parameter">randomfile</replaceable></term>
<listitem>
<para>
Specifies a source of random data for generating the
authorization. If the operating system does not provide a
<filename>/dev/random</filename> or equivalent device, the
default source of randomness is keyboard input.
<filename>randomdev</filename> specifies the name of a
character device or file containing random data to be used
instead of the default. The special value
<filename>keyboard</filename> indicates that keyboard input
should be used.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-s <replaceable class="parameter">name</replaceable></term> <term>-s <replaceable class="parameter">name</replaceable></term>
<listitem> <listitem>
+16 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2009, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -35,6 +35,7 @@
<code class="command">tsig-keygen</code> <code class="command">tsig-keygen</code>
[<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>]
[<code class="option">-h</code>] [<code class="option">-h</code>]
[<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>]
[name] [name]
</p></div> </p></div>
<div class="cmdsynopsis"><p> <div class="cmdsynopsis"><p>
@@ -135,6 +136,20 @@
This is essentially identical to <span class="command"><strong>tsig-keygen</strong></span>. This is essentially identical to <span class="command"><strong>tsig-keygen</strong></span>.
</p> </p>
</dd> </dd>
<dt><span class="term">-r <em class="replaceable"><code>randomfile</code></em></span></dt>
<dd>
<p>
Specifies a source of random data for generating the
authorization. If the operating system does not provide a
<code class="filename">/dev/random</code> or equivalent device, the
default source of randomness is keyboard input.
<code class="filename">randomdev</code> specifies the name of a
character device or file containing random data to be used
instead of the default. The special value
<code class="filename">keyboard</code> indicates that keyboard input
should be used.
</p>
</dd>
<dt><span class="term">-s <em class="replaceable"><code>name</code></em></span></dt> <dt><span class="term">-s <em class="replaceable"><code>name</code></em></span></dt>
<dd> <dd>
<p> <p>
+1
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: os.h,v 1.3 2009/06/11 23:47:55 tbox Exp $ */
/*! \file */ /*! \file */
+49 -7
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: keygen.c,v 1.4 2009/11/12 14:02:38 marka Exp $ */
/*! \file */ /*! \file */
@@ -19,7 +20,9 @@
#include <isc/base64.h> #include <isc/base64.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/keyboard.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/print.h> #include <isc/print.h>
#include <isc/result.h> #include <isc/result.h>
@@ -42,8 +45,10 @@
const char * const char *
alg_totext(dns_secalg_t alg) { alg_totext(dns_secalg_t alg) {
switch (alg) { switch (alg) {
#ifndef PK11_MD5_DISABLE
case DST_ALG_HMACMD5: case DST_ALG_HMACMD5:
return "hmac-md5"; return "hmac-md5";
#endif
case DST_ALG_HMACSHA1: case DST_ALG_HMACSHA1:
return "hmac-sha1"; return "hmac-sha1";
case DST_ALG_HMACSHA224: case DST_ALG_HMACSHA224:
@@ -68,8 +73,10 @@ alg_fromtext(const char *name) {
if (strncasecmp(p, "hmac-", 5) == 0) if (strncasecmp(p, "hmac-", 5) == 0)
p = &name[5]; p = &name[5];
#ifndef PK11_MD5_DISABLE
if (strcasecmp(p, "md5") == 0) if (strcasecmp(p, "md5") == 0)
return DST_ALG_HMACMD5; return DST_ALG_HMACMD5;
#endif
if (strcasecmp(p, "sha1") == 0) if (strcasecmp(p, "sha1") == 0)
return DST_ALG_HMACSHA1; return DST_ALG_HMACSHA1;
if (strcasecmp(p, "sha224") == 0) if (strcasecmp(p, "sha224") == 0)
@@ -107,19 +114,26 @@ alg_bits(dns_secalg_t alg) {
} }
/*% /*%
* Generate a key of size 'keysize' and place it in 'key_txtbuffer' * Generate a key of size 'keysize' using entropy source 'randomfile',
* and place it in 'key_txtbuffer'
*/ */
void void
generate_key(isc_mem_t *mctx, dns_secalg_t alg, int keysize, generate_key(isc_mem_t *mctx, const char *randomfile, dns_secalg_t alg,
isc_buffer_t *key_txtbuffer) { int keysize, isc_buffer_t *key_txtbuffer) {
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
isc_entropysource_t *entropy_source = NULL;
int open_keyboard = ISC_ENTROPY_KEYBOARDMAYBE;
int entropy_flags = 0;
isc_entropy_t *ectx = NULL;
isc_buffer_t key_rawbuffer; isc_buffer_t key_rawbuffer;
isc_region_t key_rawregion; isc_region_t key_rawregion;
char key_rawsecret[64]; char key_rawsecret[64];
dst_key_t *key = NULL; dst_key_t *key = NULL;
switch (alg) { switch (alg) {
#ifndef PK11_MD5_DISABLE
case DST_ALG_HMACMD5: case DST_ALG_HMACMD5:
#endif
case DST_ALG_HMACSHA1: case DST_ALG_HMACSHA1:
case DST_ALG_HMACSHA224: case DST_ALG_HMACSHA224:
case DST_ALG_HMACSHA256: case DST_ALG_HMACSHA256:
@@ -137,12 +151,31 @@ generate_key(isc_mem_t *mctx, dns_secalg_t alg, int keysize,
fatal("unsupported algorithm %d\n", alg); fatal("unsupported algorithm %d\n", alg);
} }
DO("initialize dst library", dst_lib_init(mctx, NULL));
DO("create entropy context", isc_entropy_create(mctx, &ectx));
#ifdef ISC_PLATFORM_CRYPTORANDOM
if (randomfile == NULL) {
isc_entropy_usehook(ectx, ISC_TRUE);
}
#endif
if (randomfile != NULL && strcmp(randomfile, "keyboard") == 0) {
randomfile = NULL;
open_keyboard = ISC_ENTROPY_KEYBOARDYES;
}
DO("start entropy source", isc_entropy_usebestsource(ectx,
&entropy_source,
randomfile,
open_keyboard));
entropy_flags = ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY;
DO("initialize dst library", dst_lib_init(mctx, ectx, entropy_flags));
DO("generate key", dst_key_generate(dns_rootname, alg, DO("generate key", dst_key_generate(dns_rootname, alg,
keysize, 0, 0, DNS_KEYPROTO_ANY, keysize, 0, 0,
dns_rdataclass_in, mctx, &key, DNS_KEYPROTO_ANY,
NULL)); dns_rdataclass_in, mctx, &key));
isc_buffer_init(&key_rawbuffer, &key_rawsecret, sizeof(key_rawsecret)); isc_buffer_init(&key_rawbuffer, &key_rawsecret, sizeof(key_rawsecret));
@@ -153,9 +186,17 @@ generate_key(isc_mem_t *mctx, dns_secalg_t alg, int keysize,
DO("bsse64 encode secret", isc_base64_totext(&key_rawregion, -1, "", DO("bsse64 encode secret", isc_base64_totext(&key_rawregion, -1, "",
key_txtbuffer)); key_txtbuffer));
/*
* Shut down the entropy source now so the "stop typing" message
* does not muck with the output.
*/
if (entropy_source != NULL)
isc_entropy_destroysource(&entropy_source);
if (key != NULL) if (key != NULL)
dst_key_free(&key); dst_key_free(&key);
isc_entropy_detach(&ectx);
dst_lib_destroy(); dst_lib_destroy();
} }
@@ -191,3 +232,4 @@ write_key_file(const char *keyfile, const char *user,
fatal("fclose(%s) failed\n", keyfile); fatal("fclose(%s) failed\n", keyfile);
fprintf(stderr, "wrote key file \"%s\"\n", keyfile); fprintf(stderr, "wrote key file \"%s\"\n", keyfile);
} }
+3 -2
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: keygen.h,v 1.3 2009/06/11 23:47:55 tbox Exp $ */
#ifndef RNDC_KEYGEN_H #ifndef RNDC_KEYGEN_H
#define RNDC_KEYGEN_H 1 #define RNDC_KEYGEN_H 1
@@ -19,8 +20,8 @@
ISC_LANG_BEGINDECLS ISC_LANG_BEGINDECLS
void generate_key(isc_mem_t *mctx, dns_secalg_t alg, int keysize, void generate_key(isc_mem_t *mctx, const char *randomfile, dns_secalg_t alg,
isc_buffer_t *key_txtbuffer); int keysize, isc_buffer_t *key_txtbuffer);
void write_key_file(const char *keyfile, const char *user, void write_key_file(const char *keyfile, const char *user,
const char *keyname, isc_buffer_t *secret, const char *keyname, isc_buffer_t *secret,
+14 -3
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2001, 2003-2005, 2007, 2009, 2013-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2001, 2003-2005, 2007, 2009, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -39,7 +39,7 @@
rndc-confgen \- rndc key generation tool rndc-confgen \- rndc key generation tool
.SH "SYNOPSIS" .SH "SYNOPSIS"
.HP \w'\fBrndc\-confgen\fR\ 'u .HP \w'\fBrndc\-confgen\fR\ 'u
\fBrndc\-confgen\fR [\fB\-a\fR] [\fB\-A\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-c\ \fR\fB\fIkeyfile\fR\fR] [\fB\-h\fR] [\fB\-k\ \fR\fB\fIkeyname\fR\fR] [\fB\-p\ \fR\fB\fIport\fR\fR] [\fB\-s\ \fR\fB\fIaddress\fR\fR] [\fB\-t\ \fR\fB\fIchrootdir\fR\fR] [\fB\-u\ \fR\fB\fIuser\fR\fR] \fBrndc\-confgen\fR [\fB\-a\fR] [\fB\-A\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-c\ \fR\fB\fIkeyfile\fR\fR] [\fB\-h\fR] [\fB\-k\ \fR\fB\fIkeyname\fR\fR] [\fB\-p\ \fR\fB\fIport\fR\fR] [\fB\-r\ \fR\fB\fIrandomfile\fR\fR] [\fB\-s\ \fR\fB\fIaddress\fR\fR] [\fB\-t\ \fR\fB\fIchrootdir\fR\fR] [\fB\-u\ \fR\fB\fIuser\fR\fR]
.SH "DESCRIPTION" .SH "DESCRIPTION"
.PP .PP
\fBrndc\-confgen\fR \fBrndc\-confgen\fR
@@ -147,6 +147,17 @@ listens for connections from
\fBrndc\fR\&. The default is 953\&. \fBrndc\fR\&. The default is 953\&.
.RE .RE
.PP .PP
\-r \fIrandomfile\fR
.RS 4
Specifies a source of random data for generating the authorization\&. If the operating system does not provide a
/dev/random
or equivalent device, the default source of randomness is keyboard input\&.
randomdev
specifies the name of a character device or file containing random data to be used instead of the default\&. The special value
keyboard
indicates that keyboard input should be used\&.
.RE
.PP
\-s \fIaddress\fR \-s \fIaddress\fR
.RS 4 .RS 4
Specifies the IP address where Specifies the IP address where
@@ -206,5 +217,5 @@ BIND 9 Administrator Reference Manual\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2001, 2003-2005, 2007, 2009, 2013-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2001, 2003-2005, 2007, 2009, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+15 -12
View File
@@ -22,15 +22,16 @@
#include <config.h> #include <config.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h>
#include <isc/assertions.h> #include <isc/assertions.h>
#include <isc/base64.h> #include <isc/base64.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/keyboard.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/net.h> #include <isc/net.h>
#include <isc/print.h> #include <isc/print.h>
@@ -57,7 +58,7 @@
static char program[256]; static char program[256];
const char *progname; const char *progname;
bool verbose = false; isc_boolean_t verbose = ISC_FALSE;
const char *keyfile, *keydef; const char *keyfile, *keydef;
@@ -69,7 +70,7 @@ usage(int status) {
fprintf(stderr, "\ fprintf(stderr, "\
Usage:\n\ Usage:\n\
%s [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] \ %s [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] \
[-s addr] [-t chrootdir] [-u user]\n\ [-s addr] [-t chrootdir] [-u user]\n\
-a: generate just the key clause and write it to keyfile (%s)\n\ -a: generate just the key clause and write it to keyfile (%s)\n\
-A alg: algorithm (default hmac-sha256)\n\ -A alg: algorithm (default hmac-sha256)\n\
@@ -77,6 +78,7 @@ Usage:\n\
-c keyfile: specify an alternate key file (requires -a)\n\ -c keyfile: specify an alternate key file (requires -a)\n\
-k keyname: the name as it will be used in named.conf and rndc.conf\n\ -k keyname: the name as it will be used in named.conf and rndc.conf\n\
-p port: the port named will listen on and rndc will connect to\n\ -p port: the port named will listen on and rndc will connect to\n\
-r randomfile: source of random data (use \"keyboard\" for key timing)\n\
-s addr: the address to which rndc should connect\n\ -s addr: the address to which rndc should connect\n\
-t chrootdir: write a keyfile in chrootdir as well (requires -a)\n\ -t chrootdir: write a keyfile in chrootdir as well (requires -a)\n\
-u user: set the keyfile owner to \"user\" (requires -a)\n", -u user: set the keyfile owner to \"user\" (requires -a)\n",
@@ -87,12 +89,13 @@ Usage:\n\
int int
main(int argc, char **argv) { main(int argc, char **argv) {
bool show_final_mem = false; isc_boolean_t show_final_mem = ISC_FALSE;
isc_buffer_t key_txtbuffer; isc_buffer_t key_txtbuffer;
char key_txtsecret[256]; char key_txtsecret[256];
isc_mem_t *mctx = NULL; isc_mem_t *mctx = NULL;
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
const char *keyname = NULL; const char *keyname = NULL;
const char *randomfile = NULL;
const char *serveraddr = NULL; const char *serveraddr = NULL;
dns_secalg_t alg; dns_secalg_t alg;
const char *algname; const char *algname;
@@ -104,7 +107,7 @@ main(int argc, char **argv) {
struct in6_addr addr6_dummy; struct in6_addr addr6_dummy;
char *chrootdir = NULL; char *chrootdir = NULL;
char *user = NULL; char *user = NULL;
bool keyonly = false; isc_boolean_t keyonly = ISC_FALSE;
int len; int len;
keydef = keyfile = RNDC_KEYFILE; keydef = keyfile = RNDC_KEYFILE;
@@ -119,14 +122,14 @@ main(int argc, char **argv) {
serveraddr = DEFAULT_SERVER; serveraddr = DEFAULT_SERVER;
port = DEFAULT_PORT; port = DEFAULT_PORT;
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv, while ((ch = isc_commandline_parse(argc, argv,
"aA:b:c:hk:Mmp:r:s:t:u:Vy")) != -1) "aA:b:c:hk:Mmp:r:s:t:u:Vy")) != -1)
{ {
switch (ch) { switch (ch) {
case 'a': case 'a':
keyonly = true; keyonly = ISC_TRUE;
break; break;
case 'A': case 'A':
algname = isc_commandline_argument; algname = isc_commandline_argument;
@@ -153,7 +156,7 @@ main(int argc, char **argv) {
break; break;
case 'm': case 'm':
show_final_mem = true; show_final_mem = ISC_TRUE;
break; break;
case 'p': case 'p':
port = strtol(isc_commandline_argument, &p, 10); port = strtol(isc_commandline_argument, &p, 10);
@@ -162,7 +165,7 @@ main(int argc, char **argv) {
isc_commandline_argument); isc_commandline_argument);
break; break;
case 'r': case 'r':
fatal("The -r option has been deprecated."); randomfile = isc_commandline_argument;
break; break;
case 's': case 's':
serveraddr = isc_commandline_argument; serveraddr = isc_commandline_argument;
@@ -177,7 +180,7 @@ main(int argc, char **argv) {
user = isc_commandline_argument; user = isc_commandline_argument;
break; break;
case 'V': case 'V':
verbose = true; verbose = ISC_TRUE;
break; break;
case '?': case '?':
if (isc_commandline_option != '?') { if (isc_commandline_option != '?') {
@@ -214,7 +217,7 @@ main(int argc, char **argv) {
DO("create memory context", isc_mem_create(0, 0, &mctx)); DO("create memory context", isc_mem_create(0, 0, &mctx));
isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret)); isc_buffer_init(&key_txtbuffer, &key_txtsecret, sizeof(key_txtsecret));
generate_key(mctx, alg, keysize, &key_txtbuffer); generate_key(mctx, randomfile, alg, keysize, &key_txtbuffer);
if (keyonly) { if (keyonly) {
write_key_file(keyfile, chrootdir == NULL ? user : NULL, write_key_file(keyfile, chrootdir == NULL ? user : NULL,
+19
View File
@@ -58,6 +58,7 @@
<arg choice="opt" rep="norepeat"><option>-h</option></arg> <arg choice="opt" rep="norepeat"><option>-h</option></arg>
<arg choice="opt" rep="norepeat"><option>-k <replaceable class="parameter">keyname</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-k <replaceable class="parameter">keyname</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">port</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">port</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-r <replaceable class="parameter">randomfile</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">address</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">address</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">chrootdir</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">chrootdir</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-u <replaceable class="parameter">user</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-u <replaceable class="parameter">user</replaceable></option></arg>
@@ -190,6 +191,24 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-r <replaceable class="parameter">randomfile</replaceable></term>
<listitem>
<para>
Specifies a source of random data for generating the
authorization. If the operating
system does not provide a <filename>/dev/random</filename>
or equivalent device, the default source of randomness
is keyboard input. <filename>randomdev</filename>
specifies
the name of a character device or file containing random
data to be used instead of the default. The special value
<filename>keyboard</filename> indicates that keyboard
input should be used.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-s <replaceable class="parameter">address</replaceable></term> <term>-s <replaceable class="parameter">address</replaceable></term>
<listitem> <listitem>
+17 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2001, 2003-2005, 2007, 2009, 2013-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2001, 2003-2005, 2007, 2009, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -40,6 +40,7 @@
[<code class="option">-h</code>] [<code class="option">-h</code>]
[<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>]
[<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>]
[<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>]
[<code class="option">-s <em class="replaceable"><code>address</code></em></code>] [<code class="option">-s <em class="replaceable"><code>address</code></em></code>]
[<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>] [<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>]
[<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>]
@@ -153,6 +154,21 @@
The default is 953. The default is 953.
</p> </p>
</dd> </dd>
<dt><span class="term">-r <em class="replaceable"><code>randomfile</code></em></span></dt>
<dd>
<p>
Specifies a source of random data for generating the
authorization. If the operating
system does not provide a <code class="filename">/dev/random</code>
or equivalent device, the default source of randomness
is keyboard input. <code class="filename">randomdev</code>
specifies
the name of a character device or file containing random
data to be used instead of the default. The special value
<code class="filename">keyboard</code> indicates that keyboard
input should be used.
</p>
</dd>
<dt><span class="term">-s <em class="replaceable"><code>address</code></em></span></dt> <dt><span class="term">-s <em class="replaceable"><code>address</code></em></span></dt>
<dd> <dd>
<p> <p>
+2
View File
@@ -7,6 +7,8 @@
# See the COPYRIGHT file distributed with this work for additional # See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership. # information regarding copyright ownership.
# $Id: Makefile.in,v 1.3 2009/06/11 23:47:55 tbox Exp $
srcdir = @srcdir@ srcdir = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
+1
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: os.c,v 1.3 2009/06/11 23:47:55 tbox Exp $ */
/*! \file */ /*! \file */
+3 -2
View File
@@ -9,21 +9,22 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: util.c,v 1.3 2009/06/11 23:47:55 tbox Exp $ */
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <isc/boolean.h>
#include <isc/print.h> #include <isc/print.h>
#include "util.h" #include "util.h"
extern bool verbose; extern isc_boolean_t verbose;
extern const char *progname; extern const char *progname;
void void
+1
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: util.h,v 1.4 2009/09/29 15:06:05 fdupont Exp $ */
#ifndef RNDC_UTIL_H #ifndef RNDC_UTIL_H
#define RNDC_UTIL_H 1 #define RNDC_UTIL_H 1
+2 -2
View File
@@ -70,7 +70,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
<Command>cd ..\..\..\Build\$(Configuration) <Command>cd ..\..\..\Build\$(Configuration)
@@ -106,7 +106,7 @@ copy /Y ddns-confgen.ilk tsig-keygen.ilk
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
<PostBuildEvent> <PostBuildEvent>
<Command>cd ..\..\..\Build\$(Configuration) <Command>cd ..\..\..\Build\$(Configuration)
+1
View File
@@ -9,6 +9,7 @@
* information regarding copyright ownership. * information regarding copyright ownership.
*/ */
/* $Id: os.c,v 1.3 2009/06/11 23:47:55 tbox Exp $ */
#include <config.h> #include <config.h>
+2 -2
View File
@@ -70,7 +70,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -100,7 +100,7 @@
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\isccc\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>confgentool.lib;libisc.lib;libdns.lib;libisccfg.lib;libisccc.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
+4 -4
View File
@@ -16,16 +16,16 @@ VERSION=@BIND9_VERSION@
@BIND9_MAKE_INCLUDES@ @BIND9_MAKE_INCLUDES@
CINCLUDES = -I${srcdir}/include ${DNS_INCLUDES} ${ISC_INCLUDES} \ CINCLUDES = -I${srcdir}/include ${DNS_INCLUDES} ${ISC_INCLUDES} \
${IRS_INCLUDES} ${ISCCFG_INCLUDES} @OPENSSL_INCLUDES@ ${IRS_INCLUDES} ${ISCCFG_INCLUDES} @DST_OPENSSL_INC@
CDEFINES = -DVERSION=\"${VERSION}\" \ CDEFINES = @CRYPTO@ -DVERSION=\"${VERSION}\" \
-DSYSCONFDIR=\"${sysconfdir}\" -DSYSCONFDIR=\"${sysconfdir}\"
CWARNINGS = CWARNINGS =
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @OPENSSL_LIBS@ ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @ISC_OPENSSL_LIBS@
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@ ISCLIBS = ../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@
IRSLIBS = ../../lib/irs/libirs.@A@ IRSLIBS = ../../lib/irs/libirs.@A@
ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -437,5 +437,5 @@ RFC5155\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2014-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+109 -97
View File
@@ -24,9 +24,7 @@
#include <netdb.h> #include <netdb.h>
#endif #endif
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <inttypes.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@@ -96,40 +94,40 @@ static const char *port = "53";
static isc_sockaddr_t *srcaddr4 = NULL, *srcaddr6 = NULL; static isc_sockaddr_t *srcaddr4 = NULL, *srcaddr6 = NULL;
static isc_sockaddr_t a4, a6; static isc_sockaddr_t a4, a6;
static char *curqname = NULL, *qname = NULL; static char *curqname = NULL, *qname = NULL;
static bool classset = false; static isc_boolean_t classset = ISC_FALSE;
static dns_rdatatype_t qtype = dns_rdatatype_none; static dns_rdatatype_t qtype = dns_rdatatype_none;
static bool typeset = false; static isc_boolean_t typeset = ISC_FALSE;
static unsigned int styleflags = 0; static unsigned int styleflags = 0;
static uint32_t splitwidth = 0xffffffff; static isc_uint32_t splitwidth = 0xffffffff;
static bool static isc_boolean_t
showcomments = true, showcomments = ISC_TRUE,
showdnssec = true, showdnssec = ISC_TRUE,
showtrust = true, showtrust = ISC_TRUE,
rrcomments = true, rrcomments = ISC_TRUE,
noclass = false, noclass = ISC_FALSE,
nocrypto = false, nocrypto = ISC_FALSE,
nottl = false, nottl = ISC_FALSE,
multiline = false, multiline = ISC_FALSE,
short_form = false, short_form = ISC_FALSE,
print_unknown_format = false; print_unknown_format = ISC_FALSE;
static bool static isc_boolean_t
resolve_trace = false, resolve_trace = ISC_FALSE,
validator_trace = false, validator_trace = ISC_FALSE,
message_trace = false; message_trace = ISC_FALSE;
static bool static isc_boolean_t
use_ipv4 = true, use_ipv4 = ISC_TRUE,
use_ipv6 = true; use_ipv6 = ISC_TRUE;
static bool static isc_boolean_t
cdflag = false, cdflag = ISC_FALSE,
no_sigs = false, no_sigs = ISC_FALSE,
root_validation = true, root_validation = ISC_TRUE,
dlv_validation = true; dlv_validation = ISC_TRUE;
static bool use_tcp = false; static isc_boolean_t use_tcp = ISC_FALSE;
static char *anchorfile = NULL; static char *anchorfile = NULL;
static char *trust_anchor = NULL; static char *trust_anchor = NULL;
@@ -146,10 +144,10 @@ static char anchortext[] = MANAGED_KEYS;
* Static function prototypes * Static function prototypes
*/ */
static isc_result_t static isc_result_t
get_reverse(char *reverse, size_t len, char *value, bool strict); get_reverse(char *reverse, size_t len, char *value, isc_boolean_t strict);
static isc_result_t static isc_result_t
parse_uint(uint32_t *uip, const char *value, uint32_t max, parse_uint(isc_uint32_t *uip, const char *value, isc_uint32_t max,
const char *desc); const char *desc);
static void static void
@@ -410,7 +408,7 @@ printdata(dns_rdataset_t *rdataset, dns_name_t *owner,
{ {
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
static dns_trust_t trust; static dns_trust_t trust;
static bool first = true; static isc_boolean_t first = ISC_TRUE;
isc_buffer_t target; isc_buffer_t target;
isc_region_t r; isc_region_t r;
char *t = NULL; char *t = NULL;
@@ -432,7 +430,7 @@ printdata(dns_rdataset_t *rdataset, dns_name_t *owner,
putchar('\n'); putchar('\n');
print_status(rdataset); print_status(rdataset);
trust = rdataset->trust; trust = rdataset->trust;
first = false; first = ISC_FALSE;
} }
do { do {
@@ -523,17 +521,17 @@ setup_style(dns_master_style_t **stylep) {
} }
if (multiline || (nottl && noclass)) if (multiline || (nottl && noclass))
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 24, 24, 32, 80, 8, 24, 24, 24, 32, 80, 8,
splitwidth, mctx); splitwidth, mctx);
else if (nottl || noclass) else if (nottl || noclass)
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 24, 32, 40, 80, 8, 24, 24, 32, 40, 80, 8,
splitwidth, mctx); splitwidth, mctx);
else else
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 32, 40, 48, 80, 8, 24, 32, 40, 48, 80, 8,
splitwidth, mctx); splitwidth, mctx);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
*stylep = style; *stylep = style;
@@ -552,7 +550,8 @@ convert_name(dns_fixedname_t *fn, dns_name_t **name, const char *text) {
isc_buffer_constinit(&b, text, len); isc_buffer_constinit(&b, text, len);
isc_buffer_add(&b, len); isc_buffer_add(&b, len);
n = dns_fixedname_initname(fn); dns_fixedname_init(fn);
n = dns_fixedname_name(fn);
result = dns_name_fromtext(n, &b, dns_rootname, 0, NULL); result = dns_name_fromtext(n, &b, dns_rootname, 0, NULL);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
@@ -568,7 +567,7 @@ convert_name(dns_fixedname_t *fn, dns_name_t **name, const char *text) {
static isc_result_t static isc_result_t
key_fromconfig(const cfg_obj_t *key, dns_client_t *client) { key_fromconfig(const cfg_obj_t *key, dns_client_t *client) {
dns_rdata_dnskey_t keystruct; dns_rdata_dnskey_t keystruct;
uint32_t flags, proto, alg; isc_uint32_t flags, proto, alg;
const char *keystr, *keynamestr; const char *keystr, *keynamestr;
unsigned char keydata[4096]; unsigned char keydata[4096];
isc_buffer_t keydatabuf; isc_buffer_t keydatabuf;
@@ -578,7 +577,7 @@ key_fromconfig(const cfg_obj_t *key, dns_client_t *client) {
dns_fixedname_t fkeyname; dns_fixedname_t fkeyname;
dns_name_t *keyname; dns_name_t *keyname;
isc_result_t result; isc_result_t result;
bool match_root = false, match_dlv = false; isc_boolean_t match_root = ISC_FALSE, match_dlv = ISC_FALSE;
keynamestr = cfg_obj_asstring(cfg_tuple_get(key, "name")); keynamestr = cfg_obj_asstring(cfg_tuple_get(key, "name"));
CHECK(convert_name(&fkeyname, &keyname, keynamestr)); CHECK(convert_name(&fkeyname, &keyname, keynamestr));
@@ -623,9 +622,9 @@ key_fromconfig(const cfg_obj_t *key, dns_client_t *client) {
if (alg > 0xff) if (alg > 0xff)
CHECK(ISC_R_RANGE); CHECK(ISC_R_RANGE);
keystruct.flags = (uint16_t)flags; keystruct.flags = (isc_uint16_t)flags;
keystruct.protocol = (uint8_t)proto; keystruct.protocol = (isc_uint8_t)proto;
keystruct.algorithm = (uint8_t)alg; keystruct.algorithm = (isc_uint8_t)alg;
isc_buffer_init(&keydatabuf, keydata, sizeof(keydata)); isc_buffer_init(&keydatabuf, keydata, sizeof(keydata));
isc_buffer_init(&rrdatabuf, rrdata, sizeof(rrdata)); isc_buffer_init(&rrdatabuf, rrdata, sizeof(rrdata));
@@ -780,7 +779,7 @@ addserver(dns_client_t *client) {
struct in6_addr in6; struct in6_addr in6;
isc_sockaddr_t *sa; isc_sockaddr_t *sa;
isc_sockaddrlist_t servers; isc_sockaddrlist_t servers;
uint32_t destport; isc_uint32_t destport;
isc_result_t result; isc_result_t result;
dns_name_t *name = NULL; dns_name_t *name = NULL;
@@ -871,7 +870,7 @@ findserver(dns_client_t *client) {
irs_resconf_t *resconf = NULL; irs_resconf_t *resconf = NULL;
isc_sockaddrlist_t *nameservers; isc_sockaddrlist_t *nameservers;
isc_sockaddr_t *sa, *next; isc_sockaddr_t *sa, *next;
uint32_t destport; isc_uint32_t destport;
result = parse_uint(&destport, port, 0xffff, "port"); result = parse_uint(&destport, port, 0xffff, "port");
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
@@ -945,10 +944,22 @@ cleanup:
return (result); return (result);
} }
static char *
next_token(char **stringp, const char *delim) {
char *res;
do {
res = strsep(stringp, delim);
if (res == NULL)
break;
} while (*res == '\0');
return (res);
}
static isc_result_t static isc_result_t
parse_uint(uint32_t *uip, const char *value, uint32_t max, parse_uint(isc_uint32_t *uip, const char *value, isc_uint32_t max,
const char *desc) { const char *desc) {
uint32_t n; isc_uint32_t n;
isc_result_t result = isc_parse_uint32(&n, value, 10); isc_result_t result = isc_parse_uint32(&n, value, 10);
if (result == ISC_R_SUCCESS && n > max) if (result == ISC_R_SUCCESS && n > max)
result = ISC_R_RANGE; result = ISC_R_RANGE;
@@ -964,23 +975,23 @@ parse_uint(uint32_t *uip, const char *value, uint32_t max,
static void static void
plus_option(char *option) { plus_option(char *option) {
isc_result_t result; isc_result_t result;
char *cmd, *value, *last = NULL; char option_store[256];
bool state = true; char *cmd, *value, *ptr;
isc_boolean_t state = ISC_TRUE;
INSIST(option != NULL); strlcpy(option_store, option, sizeof(option_store));
ptr = option_store;
cmd = strtok_r(option, "=", &last); cmd = next_token(&ptr,"=");
if (cmd == NULL) { if (cmd == NULL) {
printf(";; Invalid option %s\n", option); printf(";; Invalid option %s\n", option_store);
return; return;
} }
value = ptr;
if (strncasecmp(cmd, "no", 2)==0) { if (strncasecmp(cmd, "no", 2)==0) {
cmd += 2; cmd += 2;
state = false; state = ISC_FALSE;
} }
value = strtok_r(NULL, "\0", &last);
#define FULLCHECK(A) \ #define FULLCHECK(A) \
do { \ do { \
size_t _l = strlen(cmd); \ size_t _l = strlen(cmd); \
@@ -1003,7 +1014,7 @@ plus_option(char *option) {
break; break;
case 'l': /* class */ case 'l': /* class */
FULLCHECK("class"); FULLCHECK("class");
noclass = !state; noclass = ISC_TF(!state);
break; break;
case 'o': /* comments */ case 'o': /* comments */
FULLCHECK("comments"); FULLCHECK("comments");
@@ -1011,7 +1022,7 @@ plus_option(char *option) {
break; break;
case 'r': /* crypto */ case 'r': /* crypto */
FULLCHECK("crypto"); FULLCHECK("crypto");
nocrypto = !state; nocrypto = ISC_TF(!state);
break; break;
default: default:
goto invalid_option; goto invalid_option;
@@ -1084,10 +1095,10 @@ plus_option(char *option) {
FULLCHECK("short"); FULLCHECK("short");
short_form = state; short_form = state;
if (short_form) { if (short_form) {
multiline = false; multiline = ISC_FALSE;
showcomments = false; showcomments = ISC_FALSE;
showtrust = false; showtrust = ISC_FALSE;
showdnssec = false; showdnssec = ISC_FALSE;
} }
break; break;
case 'p': /* split */ case 'p': /* split */
@@ -1139,7 +1150,7 @@ plus_option(char *option) {
break; break;
case 't': /* ttl */ case 't': /* ttl */
FULLCHECK("ttl"); FULLCHECK("ttl");
nottl = !state; nottl = ISC_TF(!state);
break; break;
default: default:
goto invalid_option; goto invalid_option;
@@ -1167,11 +1178,11 @@ plus_option(char *option) {
* options: "46a:b:c:d:himp:q:t:vx:"; * options: "46a:b:c:d:himp:q:t:vx:";
*/ */
static const char *single_dash_opts = "46himv"; static const char *single_dash_opts = "46himv";
static bool static isc_boolean_t
dash_option(char *option, char *next, bool *open_type_class) { dash_option(char *option, char *next, isc_boolean_t *open_type_class) {
char opt, *value; char opt, *value;
isc_result_t result; isc_result_t result;
bool value_from_next; isc_boolean_t value_from_next;
isc_textregion_t tr; isc_textregion_t tr;
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
@@ -1179,7 +1190,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
struct in_addr in4; struct in_addr in4;
struct in6_addr in6; struct in6_addr in6;
in_port_t srcport; in_port_t srcport;
uint32_t num; isc_uint32_t num;
char *hash; char *hash;
while (strpbrk(option, single_dash_opts) == &option[0]) { while (strpbrk(option, single_dash_opts) == &option[0]) {
@@ -1195,7 +1206,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
fatal("IPv4 networking not available"); fatal("IPv4 networking not available");
if (use_ipv6) { if (use_ipv6) {
isc_net_disableipv6(); isc_net_disableipv6();
use_ipv6 = false; use_ipv6 = ISC_FALSE;
} }
break; break;
case '6': case '6':
@@ -1203,7 +1214,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
fatal("IPv6 networking not available"); fatal("IPv6 networking not available");
if (use_ipv4) { if (use_ipv4) {
isc_net_disableipv4(); isc_net_disableipv4();
use_ipv4 = false; use_ipv4 = ISC_FALSE;
} }
break; break;
case 'h': case 'h':
@@ -1211,9 +1222,9 @@ dash_option(char *option, char *next, bool *open_type_class) {
exit(0); exit(0);
/* NOTREACHED */ /* NOTREACHED */
case 'i': case 'i':
no_sigs = true; no_sigs = ISC_TRUE;
dlv_validation = false; dlv_validation = ISC_FALSE;
root_validation = false; root_validation = ISC_FALSE;
break; break;
case 'm': case 'm':
/* handled in preparse_args() */ /* handled in preparse_args() */
@@ -1228,14 +1239,14 @@ dash_option(char *option, char *next, bool *open_type_class) {
if (strlen(option) > 1U) if (strlen(option) > 1U)
option = &option[1]; option = &option[1];
else else
return (false); return (ISC_FALSE);
} }
opt = option[0]; opt = option[0];
if (strlen(option) > 1U) { if (strlen(option) > 1U) {
value_from_next = false; value_from_next = ISC_FALSE;
value = &option[1]; value = &option[1];
} else { } else {
value_from_next = true; value_from_next = ISC_TRUE;
value = next; value = next;
} }
if (value == NULL) if (value == NULL)
@@ -1281,13 +1292,13 @@ dash_option(char *option, char *next, bool *open_type_class) {
if (classset) if (classset)
warn("extra query class"); warn("extra query class");
*open_type_class = false; *open_type_class = ISC_FALSE;
tr.base = value; tr.base = value;
tr.length = strlen(value); tr.length = strlen(value);
result = dns_rdataclass_fromtext(&rdclass, result = dns_rdataclass_fromtext(&rdclass,
(isc_textregion_t *)&tr); (isc_textregion_t *)&tr);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
classset = true; classset = ISC_TRUE;
else if (rdclass != dns_rdataclass_in) else if (rdclass != dns_rdataclass_in)
warn("ignoring non-IN query class"); warn("ignoring non-IN query class");
else else
@@ -1312,7 +1323,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
fatal("out of memory"); fatal("out of memory");
return (value_from_next); return (value_from_next);
case 't': case 't':
*open_type_class = false; *open_type_class = ISC_FALSE;
tr.base = value; tr.base = value;
tr.length = strlen(value); tr.length = strlen(value);
result = dns_rdatatype_fromtext(&rdtype, result = dns_rdatatype_fromtext(&rdtype,
@@ -1324,13 +1335,13 @@ dash_option(char *option, char *next, bool *open_type_class) {
rdtype == dns_rdatatype_axfr) rdtype == dns_rdatatype_axfr)
fatal("Transfer not supported"); fatal("Transfer not supported");
qtype = rdtype; qtype = rdtype;
typeset = true; typeset = ISC_TRUE;
} else } else
warn("ignoring invalid type"); warn("ignoring invalid type");
return (value_from_next); return (value_from_next);
case 'x': case 'x':
result = get_reverse(textname, sizeof(textname), value, result = get_reverse(textname, sizeof(textname), value,
false); ISC_FALSE);
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
if (curqname != NULL) { if (curqname != NULL) {
isc_mem_free(mctx, curqname); isc_mem_free(mctx, curqname);
@@ -1342,7 +1353,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
if (typeset) if (typeset)
warn("extra query type"); warn("extra query type");
qtype = dns_rdatatype_ptr; qtype = dns_rdatatype_ptr;
typeset = true; typeset = ISC_TRUE;
} else { } else {
fprintf(stderr, "Invalid IP address %s\n", value); fprintf(stderr, "Invalid IP address %s\n", value);
exit(1); exit(1);
@@ -1354,7 +1365,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
usage(); usage();
} }
/* NOTREACHED */ /* NOTREACHED */
return (false); return (ISC_FALSE);
} }
/* /*
@@ -1363,7 +1374,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
*/ */
static void static void
preparse_args(int argc, char **argv) { preparse_args(int argc, char **argv) {
bool ipv4only = false, ipv6only = false; isc_boolean_t ipv4only = ISC_FALSE, ipv6only = ISC_FALSE;
char *option; char *option;
for (argc--, argv++; argc > 0; argc--, argv++) { for (argc--, argv++; argc > 0; argc--, argv++) {
@@ -1380,13 +1391,13 @@ preparse_args(int argc, char **argv) {
if (ipv6only) { if (ipv6only) {
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
} }
ipv4only = true; ipv4only = ISC_TRUE;
break; break;
case '6': case '6':
if (ipv4only) { if (ipv4only) {
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
} }
ipv6only = true; ipv6only = ISC_TRUE;
break; break;
} }
option = &option[1]; option = &option[1];
@@ -1406,7 +1417,7 @@ parse_args(int argc, char **argv) {
isc_textregion_t tr; isc_textregion_t tr;
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
bool open_type_class = true; isc_boolean_t open_type_class = ISC_TRUE;
for (; argc > 0; argc--, argv++) { for (; argc > 0; argc--, argv++) {
if (argv[0][0] == '@') { if (argv[0][0] == '@') {
@@ -1445,7 +1456,7 @@ parse_args(int argc, char **argv) {
rdtype == dns_rdatatype_axfr) rdtype == dns_rdatatype_axfr)
fatal("Transfer not supported"); fatal("Transfer not supported");
qtype = rdtype; qtype = rdtype;
typeset = true; typeset = ISC_TRUE;
continue; continue;
} }
result = dns_rdataclass_fromtext(&rdclass, result = dns_rdataclass_fromtext(&rdclass,
@@ -1514,7 +1525,7 @@ reverse_octets(const char *in, char **p, char *end) {
} }
static isc_result_t static isc_result_t
get_reverse(char *reverse, size_t len, char *value, bool strict) { get_reverse(char *reverse, size_t len, char *value, isc_boolean_t strict) {
int r; int r;
isc_result_t result; isc_result_t result;
isc_netaddr_t addr; isc_netaddr_t addr;
@@ -1527,8 +1538,9 @@ get_reverse(char *reverse, size_t len, char *value, bool strict) {
dns_name_t *name; dns_name_t *name;
unsigned int options = 0; unsigned int options = 0;
name = dns_fixedname_initname(&fname); dns_fixedname_init(&fname);
result = dns_byaddr_createptrname(&addr, options, name); name = dns_fixedname_name(&fname);
result = dns_byaddr_createptrname2(&addr, options, name);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
dns_name_format(name, reverse, (unsigned int)len); dns_name_format(name, reverse, (unsigned int)len);
@@ -1612,8 +1624,8 @@ main(int argc, char *argv[]) {
/* Create client */ /* Create client */
clopt = DNS_CLIENTCREATEOPT_USECACHE; clopt = DNS_CLIENTCREATEOPT_USECACHE;
result = dns_client_createx(mctx, actx, taskmgr, socketmgr, timermgr, result = dns_client_createx2(mctx, actx, taskmgr, socketmgr, timermgr,
clopt, &client, srcaddr4, srcaddr6); clopt, &client, srcaddr4, srcaddr6);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
delv_log(ISC_LOG_ERROR, "dns_client_create: %s", delv_log(ISC_LOG_ERROR, "dns_client_create: %s",
isc_result_totext(result)); isc_result_totext(result));
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2014-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+4 -4
View File
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -68,7 +68,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@libisc.lib;libdns.lib;libisccfg.lib;libirs.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>libisc.lib;libdns.lib;libisccfg.lib;libirs.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -79,7 +79,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -98,7 +98,7 @@
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@libisc.lib;libdns.lib;libisccfg.lib;libirs.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>libisc.lib;libdns.lib;libisccfg.lib;libirs.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
+4 -6
View File
@@ -19,16 +19,16 @@ READLINE_LIB = @READLINE_LIB@
CINCLUDES = -I${srcdir}/include ${DNS_INCLUDES} \ CINCLUDES = -I${srcdir}/include ${DNS_INCLUDES} \
${BIND9_INCLUDES} ${ISC_INCLUDES} \ ${BIND9_INCLUDES} ${ISC_INCLUDES} \
${IRS_INCLUDES} ${ISCCFG_INCLUDES} @LIBIDN2_CFLAGS@ @OPENSSL_INCLUDES@ ${IRS_INCLUDES} ${ISCCFG_INCLUDES} @LIBIDN2_CFLAGS@ @DST_OPENSSL_INC@
CDEFINES = -DVERSION=\"${VERSION}\" CDEFINES = -DVERSION=\"${VERSION}\" @CRYPTO@
CWARNINGS = CWARNINGS =
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
BIND9LIBS = ../../lib/bind9/libbind9.@A@ BIND9LIBS = ../../lib/bind9/libbind9.@A@
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@ ISCLIBS = ../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @OPENSSL_LIBS@ ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @ISC_OPENSSL_LIBS@
IRSLIBS = ../../lib/irs/libirs.@A@ IRSLIBS = ../../lib/irs/libirs.@A@
ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@ ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@
@@ -64,8 +64,6 @@ MANOBJS = ${MANPAGES} ${HTMLPAGES}
@BIND9_MAKE_RULES@ @BIND9_MAKE_RULES@
LDFLAGS = @LDFLAGS@ @LIBIDN2_LDFLAGS@
dig@EXEEXT@: dig.@O@ dighost.@O@ ${UOBJS} ${DEPLIBS} dig@EXEEXT@: dig.@O@ dighost.@O@ ${UOBJS} ${DEPLIBS}
export BASEOBJS="dig.@O@ dighost.@O@ ${UOBJS}"; \ export BASEOBJS="dig.@O@ dighost.@O@ ${UOBJS}"; \
export LIBS0="${DNSLIBS} ${IRSLIBS}"; \ export LIBS0="${DNSLIBS} ${IRSLIBS}"; \
+9 -25
View File
@@ -176,7 +176,7 @@ using the command\-line interface\&.
.PP .PP
\-i \-i
.RS 4 .RS 4
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\&. Do reverse IPv6 lookups using the obsolete RFC1886 IP6\&.INT domain, which is no longer in use\&. Obsolete bit string label queries (RFC2874) are not attempted\&.
.RE .RE
.PP .PP
\-k \fIkeyfile\fR \-k \fIkeyfile\fR
@@ -210,15 +210,13 @@ from other arguments\&.
.PP .PP
\-t \fItype\fR \-t \fItype\fR
.RS 4 .RS 4
The resource record type to query\&. It can be any valid query type\&. If it is a resource record type supported in BIND 9, it can be given by the type mnemonic (such as "NS" or "AAAA")\&. The default query type is "A", unless the The resource record type to query\&. It can be any valid query type which is supported in BIND 9\&. The default query type is "A", unless the
\fB\-x\fR \fB\-x\fR
option is supplied to indicate a reverse lookup\&. A zone transfer can be requested by specifying a type of AXFR\&. When an incremental zone transfer (IXFR) is required, set the option is supplied to indicate a reverse lookup\&. A zone transfer can be requested by specifying a type of AXFR\&. When an incremental zone transfer (IXFR) is required, set the
\fItype\fR \fItype\fR
to to
ixfr=N\&. The incremental zone transfer will contain the changes made to the zone since the serial number in the zone\*(Aqs SOA record was ixfr=N\&. The incremental zone transfer will contain the changes made to the zone since the serial number in the zone\*(Aqs SOA record was
\fIN\fR\&. \fIN\fR\&.
.sp
All resource record types can be expressed as "TYPEnn", where "nn" is the number of the type\&. If the resource record type is not supported in BIND 9, the result will be displayed as described in RFC 3597\&.
.RE .RE
.PP .PP
\-u \-u
@@ -466,11 +464,6 @@ Show [or do not show] the IP address and port number that supplied the answer wh
option is enabled\&. If short form answers are requested, the default is not to show the source address and port number of the server that provided the answer\&. option is enabled\&. If short form answers are requested, the default is not to show the source address and port number of the server that provided the answer\&.
.RE .RE
.PP .PP
\fB+[no]idnin\fR
.RS 4
Process [do not process] IDN domain names on input\&. This requires IDN SUPPORT to have been enabled at compile time\&. The default is to process IDN input\&.
.RE
.PP
\fB+[no]idnout\fR \fB+[no]idnout\fR
.RS 4 .RS 4
Convert [do not convert] puny code on output\&. This requires IDN SUPPORT to have been enabled at compile time\&. The default is to convert output\&. Convert [do not convert] puny code on output\&. This requires IDN SUPPORT to have been enabled at compile time\&. The default is to convert output\&.
@@ -532,7 +525,7 @@ Include an EDNS name server ID request when sending a query\&.
.RS 4 .RS 4
When this option is set, When this option is set,
\fBdig\fR \fBdig\fR
attempts to find the authoritative name servers for the zone containing the name being looked up and display the SOA record that each name server has for the zone\&. Addresses of servers that that did not respond are also printed\&. attempts to find the authoritative name servers for the zone containing the name being looked up and display the SOA record that each name server has for the zone\&.
.RE .RE
.PP .PP
\fB+[no]onesoa\fR \fB+[no]onesoa\fR
@@ -564,11 +557,6 @@ Print [do not print] the query as it is sent\&. By default, the query is not pri
Print [do not print] the question section of a query when an answer is returned\&. The default is to print the question section as a comment\&. Print [do not print] the question section of a query when an answer is returned\&. The default is to print the question section as a comment\&.
.RE .RE
.PP .PP
\fB+[no]raflag\fR
.RS 4
Set [do not set] the RA (Recursion Available) bit in the query\&. The default is +noraflag\&. This bit should be ignored by the server for QUERY\&.
.RE
.PP
\fB+[no]rdflag\fR \fB+[no]rdflag\fR
.RS 4 .RS 4
A synonym for A synonym for
@@ -658,11 +646,6 @@ for short, sends an EDNS CLIENT\-SUBNET option with an empty address and a sourc
be used when resolving this query\&. be used when resolving this query\&.
.RE .RE
.PP .PP
\fB+[no]tcflag\fR
.RS 4
Set [do not set] the TC (TrunCation) bit in the query\&. The default is +notcflag\&. This bit should be ignored by the server for QUERY\&.
.RE
.PP
\fB+[no]tcp\fR \fB+[no]tcp\fR
.RS 4 .RS 4
Use [do not use] TCP when querying name servers\&. The default behavior is to use UDP unless a type Use [do not use] TCP when querying name servers\&. The default behavior is to use UDP unless a type
@@ -792,10 +775,11 @@ If
\fBdig\fR \fBdig\fR
has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names\&. has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names\&.
\fBdig\fR \fBdig\fR
appropriately converts character encoding of domain name before sending a request to DNS server or displaying a reply from the server\&. If you\*(Aqd like to turn off the IDN support for some reason, use parameters appropriately converts character encoding of domain name before sending a request to DNS server or displaying a reply from the server\&. If you\*(Aqd like to turn off the IDN support for some reason, defines the
\fI+noidnin\fR \fBIDN_DISABLE\fR
and environment variable\&. The IDN support is disabled if the variable is set when
\fI+noidnout\fR\&. \fBdig\fR
runs\&.
.SH "FILES" .SH "FILES"
.PP .PP
/etc/resolv\&.conf /etc/resolv\&.conf
@@ -807,7 +791,7 @@ ${HOME}/\&.digrc
\fBhost\fR(1), \fBhost\fR(1),
\fBnamed\fR(8), \fBnamed\fR(8),
\fBdnssec-keygen\fR(8), \fBdnssec-keygen\fR(8),
RFC 1035\&. RFC1035\&.
.SH "BUGS" .SH "BUGS"
.PP .PP
There are probably too many query options\&. There are probably too many query options\&.
+227 -233
View File
@@ -12,9 +12,6 @@
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <ctype.h> #include <ctype.h>
@@ -64,10 +61,10 @@ static int addresscount = 0;
static char domainopt[DNS_NAME_MAXTEXT]; static char domainopt[DNS_NAME_MAXTEXT];
static char hexcookie[81]; static char hexcookie[81];
static bool short_form = false, printcmd = true, static isc_boolean_t short_form = ISC_FALSE, printcmd = ISC_TRUE,
ip6_int = false, plusquest = false, pluscomm = false, ip6_int = ISC_FALSE, plusquest = ISC_FALSE, pluscomm = ISC_FALSE,
ipv4only = false, ipv6only = false; ipv4only = ISC_FALSE, ipv6only = ISC_FALSE;
static uint32_t splitwidth = 0xffffffff; static isc_uint32_t splitwidth = 0xffffffff;
/*% opcode text */ /*% opcode text */
static const char * const opcodetext[] = { static const char * const opcodetext[] = {
@@ -208,7 +205,6 @@ help(void) {
" +padding=### (Set padding block size [0])\n" " +padding=### (Set padding block size [0])\n"
" +[no]qr (Print question before sending)\n" " +[no]qr (Print question before sending)\n"
" +[no]question (Control display of question section)\n" " +[no]question (Control display of question section)\n"
" +[no]raflag (Set RA flag in query (+[no]raflag))\n"
" +[no]rdflag (Recursive mode (+[no]recurse))\n" " +[no]rdflag (Recursive mode (+[no]recurse))\n"
" +[no]recurse (Recursive mode (+[no]rdflag))\n" " +[no]recurse (Recursive mode (+[no]rdflag))\n"
" +retry=### (Set number of UDP retries) [2]\n" " +retry=### (Set number of UDP retries) [2]\n"
@@ -221,7 +217,6 @@ help(void) {
" +[no]split=## (Split hex/base64 fields into chunks)\n" " +[no]split=## (Split hex/base64 fields into chunks)\n"
" +[no]stats (Control display of statistics)\n" " +[no]stats (Control display of statistics)\n"
" +subnet=addr (Set edns-client-subnet option)\n" " +subnet=addr (Set edns-client-subnet option)\n"
" +[no]tcflag (Set TC flag in query (+[no]tcflag))\n"
" +[no]tcp (TCP mode (+[no]vc))\n" " +[no]tcp (TCP mode (+[no]vc))\n"
" +timeout=### (Set query timeout) [5]\n" " +timeout=### (Set query timeout) [5]\n"
" +[no]trace (Trace delegation down from root [+dnssec])\n" " +[no]trace (Trace delegation down from root [+dnssec])\n"
@@ -243,7 +238,7 @@ help(void) {
*/ */
static void static void
received(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query) { received(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query) {
uint64_t diff; isc_uint64_t diff;
time_t tnow; time_t tnow;
struct tm tmnow; struct tm tmnow;
#ifdef WIN32 #ifdef WIN32
@@ -263,7 +258,7 @@ received(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query) {
printf(";; Query time: %ld msec\n", (long) diff / 1000); printf(";; Query time: %ld msec\n", (long) diff / 1000);
printf(";; SERVER: %s(%s)\n", fromtext, query->servname); printf(";; SERVER: %s(%s)\n", fromtext, query->servname);
time(&tnow); time(&tnow);
#if !defined(WIN32) #if defined(ISC_PLATFORM_USETHREADS) && !defined(WIN32)
(void)localtime_r(&tnow, &tmnow); (void)localtime_r(&tnow, &tmnow);
#else #else
tmnow = *localtime(&tnow); tmnow = *localtime(&tnow);
@@ -284,36 +279,36 @@ received(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query) {
#endif #endif
if (query->lookup->doing_xfr) { if (query->lookup->doing_xfr) {
printf(";; XFR size: %u records (messages %u, " printf(";; XFR size: %u records (messages %u, "
"bytes %" PRIu64 ")\n", "bytes %" ISC_PRINT_QUADFORMAT "u)\n",
query->rr_count, query->msg_count, query->rr_count, query->msg_count,
query->byte_count); query->byte_count);
} else { } else {
printf(";; MSG SIZE rcvd: %u\n", bytes); printf(";; MSG SIZE rcvd: %u\n", bytes);
} }
if (tsigkey != NULL) { if (key != NULL) {
if (!validated) if (!validated)
puts(";; WARNING -- Some TSIG could not " puts(";; WARNING -- Some TSIG could not "
"be validated"); "be validated");
} }
if ((tsigkey == NULL) && (keysecret[0] != 0)) { if ((key == NULL) && (keysecret[0] != 0)) {
puts(";; WARNING -- TSIG key was not used."); puts(";; WARNING -- TSIG key was not used.");
} }
puts(""); puts("");
} else if (query->lookup->identify && !short_form) { } else if (query->lookup->identify && !short_form) {
diff = isc_time_microdiff(&query->time_recv, &query->time_sent); diff = isc_time_microdiff(&query->time_recv, &query->time_sent);
if (query->lookup->use_usec) if (query->lookup->use_usec)
printf(";; Received %" PRIu64 " bytes " printf(";; Received %" ISC_PRINT_QUADFORMAT "u bytes "
"from %s(%s) in %ld us\n\n", "from %s(%s) in %ld us\n\n",
query->lookup->doing_xfr query->lookup->doing_xfr
? query->byte_count ? query->byte_count
: (uint64_t)bytes, : (isc_uint64_t)bytes,
fromtext, query->userarg, (long) diff); fromtext, query->userarg, (long) diff);
else else
printf(";; Received %" PRIu64 " bytes " printf(";; Received %" ISC_PRINT_QUADFORMAT "u bytes "
"from %s(%s) in %ld ms\n\n", "from %s(%s) in %ld ms\n\n",
query->lookup->doing_xfr query->lookup->doing_xfr
? query->byte_count ? query->byte_count
: (uint64_t)bytes, : (isc_uint64_t)bytes,
fromtext, query->userarg, (long) diff / 1000); fromtext, query->userarg, (long) diff / 1000);
} }
} }
@@ -335,7 +330,7 @@ trying(char *frm, dig_lookup_t *lookup) {
static isc_result_t static isc_result_t
say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) { say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) {
isc_result_t result; isc_result_t result;
uint64_t diff; isc_uint64_t diff;
char store[sizeof(" in 18446744073709551616 us.")]; char store[sizeof(" in 18446744073709551616 us.")];
unsigned int styleflags = 0; unsigned int styleflags = 0;
@@ -363,11 +358,10 @@ say_message(dns_rdata_t *rdata, dig_query_t *query, isc_buffer_t *buf) {
diff = isc_time_microdiff(&query->time_recv, &query->time_sent); diff = isc_time_microdiff(&query->time_recv, &query->time_sent);
ADD_STRING(buf, " from server "); ADD_STRING(buf, " from server ");
ADD_STRING(buf, query->servname); ADD_STRING(buf, query->servname);
if (query->lookup->use_usec) { if (query->lookup->use_usec)
snprintf(store, sizeof(store), " in %" PRIu64 " us.", diff); snprintf(store, sizeof(store), " in %" ISC_PLATFORM_QUADFORMAT "u us.", diff);
} else { else
snprintf(store, sizeof(store), " in %" PRIu64 " ms.", diff / 1000); snprintf(store, sizeof(store), " in %" ISC_PLATFORM_QUADFORMAT "u ms.", diff / 1000);
}
ADD_STRING(buf, store); ADD_STRING(buf, store);
} }
ADD_STRING(buf, "\n"); ADD_STRING(buf, "\n");
@@ -425,7 +419,7 @@ short_answer(dns_message_t *msg, dns_messagetextflag_t flags,
return (ISC_R_SUCCESS); return (ISC_R_SUCCESS);
} }
static bool static isc_boolean_t
isdotlocal(dns_message_t *msg) { isdotlocal(dns_message_t *msg) {
isc_result_t result; isc_result_t result;
static unsigned char local_ndata[] = { "\005local\0" }; static unsigned char local_ndata[] = { "\005local\0" };
@@ -440,16 +434,16 @@ isdotlocal(dns_message_t *msg) {
dns_name_t *name = NULL; dns_name_t *name = NULL;
dns_message_currentname(msg, DNS_SECTION_QUESTION, &name); dns_message_currentname(msg, DNS_SECTION_QUESTION, &name);
if (dns_name_issubdomain(name, &local)) if (dns_name_issubdomain(name, &local))
return (true); return (ISC_TRUE);
} }
return (false); return (ISC_FALSE);
} }
/* /*
* Callback from dighost.c to print the reply from a server * Callback from dighost.c to print the reply from a server
*/ */
static isc_result_t static isc_result_t
printmessage(dig_query_t *query, dns_message_t *msg, bool headers) { printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
isc_result_t result; isc_result_t result;
dns_messagetextflag_t flags; dns_messagetextflag_t flags;
isc_buffer_t *buf = NULL; isc_buffer_t *buf = NULL;
@@ -486,17 +480,17 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
} }
if (query->lookup->multiline || if (query->lookup->multiline ||
(query->lookup->nottl && query->lookup->noclass)) (query->lookup->nottl && query->lookup->noclass))
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 24, 24, 32, 80, 8, 24, 24, 24, 32, 80, 8,
splitwidth, mctx); splitwidth, mctx);
else if (query->lookup->nottl || query->lookup->noclass) else if (query->lookup->nottl || query->lookup->noclass)
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 24, 32, 40, 80, 8, 24, 24, 32, 40, 80, 8,
splitwidth, mctx); splitwidth, mctx);
else else
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
24, 32, 40, 48, 80, 8, 24, 32, 40, 48, 80, 8,
splitwidth, mctx); splitwidth, mctx);
check_result(result, "dns_master_stylecreate"); check_result(result, "dns_master_stylecreate");
if (query->lookup->cmdline[0] != 0) { if (query->lookup->cmdline[0] != 0) {
@@ -693,7 +687,7 @@ cleanup:
static void static void
printgreeting(int argc, char **argv, dig_lookup_t *lookup) { printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
int i; int i;
static bool first = true; static isc_boolean_t first = ISC_TRUE;
char append[MXNAME]; char append[MXNAME];
if (printcmd) { if (printcmd) {
@@ -720,7 +714,7 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
";; global options:%s%s\n", ";; global options:%s%s\n",
short_form ? " +short" : "", short_form ? " +short" : "",
printcmd ? " +cmd" : ""); printcmd ? " +cmd" : "");
first = false; first = ISC_FALSE;
strlcat(lookup->cmdline, append, strlcat(lookup->cmdline, append,
sizeof(lookup->cmdline)); sizeof(lookup->cmdline));
} }
@@ -735,27 +729,28 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
*/ */
static void static void
plus_option(char *option, bool is_batchfile, plus_option(const char *option, isc_boolean_t is_batchfile,
dig_lookup_t *lookup) dig_lookup_t *lookup)
{ {
isc_result_t result; isc_result_t result;
char *cmd, *value, *last = NULL, *code, *extra; char option_store[256];
uint32_t num; char *cmd, *value, *ptr, *code;
bool state = true; isc_uint32_t num;
isc_boolean_t state = ISC_TRUE;
size_t n; size_t n;
INSIST(option != NULL); strlcpy(option_store, option, sizeof(option_store));
ptr = option_store;
if ((cmd = strtok_r(option, "=", &last)) == NULL) { cmd = next_token(&ptr, "=");
printf(";; Invalid option %s\n", option); if (cmd == NULL) {
printf(";; Invalid option %s\n", option_store);
return; return;
} }
value = ptr;
if (strncasecmp(cmd, "no", 2)==0) { if (strncasecmp(cmd, "no", 2)==0) {
cmd += 2; cmd += 2;
state = false; state = ISC_FALSE;
} }
/* parse the rest of the string */
value = strtok_r(NULL, "", &last);
#define FULLCHECK(A) \ #define FULLCHECK(A) \
do { \ do { \
@@ -859,7 +854,7 @@ plus_option(char *option, bool is_batchfile,
case 'l': /* class */ case 'l': /* class */
/* keep +cl for backwards compatibility */ /* keep +cl for backwards compatibility */
FULLCHECK2("cl", "class"); FULLCHECK2("cl", "class");
lookup->noclass = !state; lookup->noclass = ISC_TF(!state);
break; break;
case 'm': /* cmd */ case 'm': /* cmd */
FULLCHECK("cmd"); FULLCHECK("cmd");
@@ -895,7 +890,7 @@ plus_option(char *option, bool is_batchfile,
break; break;
case 'r': case 'r':
FULLCHECK("crypto"); FULLCHECK("crypto");
lookup->nocrypto = !state; lookup->nocrypto = ISC_TF(!state);
break; break;
default: default:
goto invalid_option; goto invalid_option;
@@ -1005,21 +1000,14 @@ plus_option(char *option, bool is_batchfile,
lookup->ednsoptscnt = 0; lookup->ednsoptscnt = 0;
break; break;
} }
code = NULL; if (value == NULL) {
if (value != NULL) {
code = strtok_r(value,
":",
&last);
}
if (code == NULL) {
warn("ednsopt no " warn("ednsopt no "
"code point " "code point "
"specified"); "specified");
goto exit_or_usage; goto exit_or_usage;
} }
extra = strtok_r(NULL, "\0", code = next_token(&value, ":");
&last); save_opt(lookup, code, value);
save_opt(lookup, code, extra);
break; break;
default: default:
goto invalid_option; goto invalid_option;
@@ -1061,18 +1049,18 @@ plus_option(char *option, bool is_batchfile,
switch (cmd[3]) { switch (cmd[3]) {
case 'i': case 'i':
FULLCHECK("idnin"); FULLCHECK("idnin");
#ifndef HAVE_LIBIDN2 #ifndef WITH_IDN_SUPPORT
fprintf(stderr, ";; IDN input support" fprintf(stderr, ";; IDN input support"
" not enabled\n"); " not enabled\n");
#else #else
lookup->idnin = state; lookup->idnin = state;
#endif #endif
break; break;
case 'o': case 'o':
FULLCHECK("idnout"); FULLCHECK("idnout");
#ifndef HAVE_LIBIDN2 #ifndef WITH_IDN_OUT_SUPPORT
fprintf(stderr, ";; IDN output support" fprintf(stderr, ";; IDN output support"
" not enabled\n"); " not enabled\n");
#else #else
lookup->idnout = state; lookup->idnout = state;
#endif #endif
@@ -1166,17 +1154,17 @@ plus_option(char *option, bool is_batchfile,
FULLCHECK("nssearch"); FULLCHECK("nssearch");
lookup->ns_search_only = state; lookup->ns_search_only = state;
if (state) { if (state) {
lookup->trace_root = true; lookup->trace_root = ISC_TRUE;
lookup->recurse = true; lookup->recurse = ISC_TRUE;
lookup->identify = true; lookup->identify = ISC_TRUE;
lookup->stats = false; lookup->stats = ISC_FALSE;
lookup->comments = false; lookup->comments = ISC_FALSE;
lookup->section_additional = false; lookup->section_additional = ISC_FALSE;
lookup->section_authority = false; lookup->section_authority = ISC_FALSE;
lookup->section_question = false; lookup->section_question = ISC_FALSE;
lookup->rdtype = dns_rdatatype_ns; lookup->rdtype = dns_rdatatype_ns;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
short_form = true; short_form = ISC_TRUE;
lookup->rrcomments = 0; lookup->rrcomments = 0;
} }
break; break;
@@ -1234,7 +1222,7 @@ plus_option(char *option, bool is_batchfile,
warn("Couldn't parse padding"); warn("Couldn't parse padding");
goto exit_or_usage; goto exit_or_usage;
} }
lookup->padding = (uint16_t)num; lookup->padding = (isc_uint16_t)num;
break; break;
case 'q': case 'q':
switch (cmd[1]) { switch (cmd[1]) {
@@ -1254,10 +1242,6 @@ plus_option(char *option, bool is_batchfile,
break; break;
case 'r': case 'r':
switch (cmd[1]) { switch (cmd[1]) {
case 'a': /* raflag */
FULLCHECK("raflag");
lookup->raflag = state;
break;
case 'd': /* rdflag */ case 'd': /* rdflag */
FULLCHECK("rdflag"); FULLCHECK("rdflag");
lookup->recurse = state; lookup->recurse = state;
@@ -1310,13 +1294,13 @@ plus_option(char *option, bool is_batchfile,
FULLCHECK("short"); FULLCHECK("short");
short_form = state; short_form = state;
if (state) { if (state) {
printcmd = false; printcmd = ISC_FALSE;
lookup->section_additional = false; lookup->section_additional = ISC_FALSE;
lookup->section_answer = true; lookup->section_answer = ISC_TRUE;
lookup->section_authority = false; lookup->section_authority = ISC_FALSE;
lookup->section_question = false; lookup->section_question = ISC_FALSE;
lookup->comments = false; lookup->comments = ISC_FALSE;
lookup->stats = false; lookup->stats = ISC_FALSE;
lookup->rrcomments = -1; lookup->rrcomments = -1;
} }
break; break;
@@ -1401,20 +1385,10 @@ plus_option(char *option, bool is_batchfile,
case 't': case 't':
switch (cmd[1]) { switch (cmd[1]) {
case 'c': /* tcp */ case 'c': /* tcp */
switch (cmd[2]) { FULLCHECK("tcp");
case 'f': if (!is_batchfile) {
FULLCHECK("tcflag"); lookup->tcp_mode = state;
lookup->tcflag = state; lookup->tcp_mode_set = ISC_TRUE;
break;
case 'p':
FULLCHECK("tcp");
if (!is_batchfile) {
lookup->tcp_mode = state;
lookup->tcp_mode_set = true;
}
break;
default:
goto invalid_option;
} }
break; break;
case 'i': /* timeout */ case 'i': /* timeout */
@@ -1443,17 +1417,17 @@ plus_option(char *option, bool is_batchfile,
lookup->trace = state; lookup->trace = state;
lookup->trace_root = state; lookup->trace_root = state;
if (state) { if (state) {
lookup->recurse = false; lookup->recurse = ISC_FALSE;
lookup->identify = true; lookup->identify = ISC_TRUE;
lookup->comments = false; lookup->comments = ISC_FALSE;
lookup->rrcomments = 0; lookup->rrcomments = 0;
lookup->stats = false; lookup->stats = ISC_FALSE;
lookup->section_additional = false; lookup->section_additional = ISC_FALSE;
lookup->section_authority = true; lookup->section_authority = ISC_TRUE;
lookup->section_question = false; lookup->section_question = ISC_FALSE;
lookup->dnssec = true; lookup->dnssec = ISC_TRUE;
lookup->sendcookie = true; lookup->sendcookie = ISC_TRUE;
usesearch = false; usesearch = ISC_FALSE;
} }
break; break;
case 'i': /* tries */ case 'i': /* tries */
@@ -1487,12 +1461,12 @@ plus_option(char *option, bool is_batchfile,
case 0: case 0:
case 'i': /* ttlid */ case 'i': /* ttlid */
FULLCHECK2("ttl", "ttlid"); FULLCHECK2("ttl", "ttlid");
lookup->nottl = !state; lookup->nottl = ISC_TF(!state);
break; break;
case 'u': /* ttlunits */ case 'u': /* ttlunits */
FULLCHECK("ttlunits"); FULLCHECK("ttlunits");
lookup->nottl = false; lookup->nottl = ISC_FALSE;
lookup->ttlunits = state; lookup->ttlunits = ISC_TF(state);
break; break;
default: default:
goto invalid_option; goto invalid_option;
@@ -1514,7 +1488,7 @@ plus_option(char *option, bool is_batchfile,
FULLCHECK("vc"); FULLCHECK("vc");
if (!is_batchfile) { if (!is_batchfile) {
lookup->tcp_mode = state; lookup->tcp_mode = state;
lookup->tcp_mode_set = true; lookup->tcp_mode_set = ISC_TRUE;
} }
break; break;
case 'z': /* zflag */ case 'z': /* zflag */
@@ -1540,19 +1514,19 @@ plus_option(char *option, bool is_batchfile,
} }
/*% /*%
* #true returned if value was used * #ISC_TRUE returned if value was used
*/ */
static const char *single_dash_opts = "46dhimnuv"; static const char *single_dash_opts = "46dhimnuv";
static const char *dash_opts = "46bcdfhikmnptvyx"; static const char *dash_opts = "46bcdfhikmnptvyx";
static bool static isc_boolean_t
dash_option(char *option, char *next, dig_lookup_t **lookup, dash_option(char *option, char *next, dig_lookup_t **lookup,
bool *open_type_class, bool *need_clone, isc_boolean_t *open_type_class, isc_boolean_t *need_clone,
bool config_only, int argc, char **argv, isc_boolean_t config_only, int argc, char **argv,
bool *firstarg) isc_boolean_t *firstarg)
{ {
char opt, *value, *ptr, *ptr2, *ptr3, *last; char opt, *value, *ptr, *ptr2, *ptr3;
isc_result_t result; isc_result_t result;
bool value_from_next; isc_boolean_t value_from_next;
isc_textregion_t tr; isc_textregion_t tr;
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
@@ -1561,7 +1535,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
struct in6_addr in6; struct in6_addr in6;
in_port_t srcport; in_port_t srcport;
char *hash, *cmd; char *hash, *cmd;
uint32_t num; isc_uint32_t num;
while (strpbrk(option, single_dash_opts) == &option[0]) { while (strpbrk(option, single_dash_opts) == &option[0]) {
/* /*
@@ -1574,21 +1548,21 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
case '4': case '4':
if (have_ipv4) { if (have_ipv4) {
isc_net_disableipv6(); isc_net_disableipv6();
have_ipv6 = false; have_ipv6 = ISC_FALSE;
} else { } else {
fatal("can't find IPv4 networking"); fatal("can't find IPv4 networking");
/* NOTREACHED */ /* NOTREACHED */
return (false); return (ISC_FALSE);
} }
break; break;
case '6': case '6':
if (have_ipv6) { if (have_ipv6) {
isc_net_disableipv4(); isc_net_disableipv4();
have_ipv4 = false; have_ipv4 = ISC_FALSE;
} else { } else {
fatal("can't find IPv6 networking"); fatal("can't find IPv6 networking");
/* NOTREACHED */ /* NOTREACHED */
return (false); return (ISC_FALSE);
} }
break; break;
case 'd': case 'd':
@@ -1596,17 +1570,17 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
if (ptr != &option[1]) { if (ptr != &option[1]) {
cmd = option; cmd = option;
FULLCHECK("debug"); FULLCHECK("debug");
debugging = true; debugging = ISC_TRUE;
return (false); return (ISC_FALSE);
} else } else
debugging = true; debugging = ISC_TRUE;
break; break;
case 'h': case 'h':
help(); help();
exit(0); exit(0);
break; break;
case 'i': case 'i':
ip6_int = true; ip6_int = ISC_TRUE;
break; break;
case 'm': /* memdebug */ case 'm': /* memdebug */
/* memdebug is handled in preparse_args() */ /* memdebug is handled in preparse_args() */
@@ -1615,7 +1589,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
/* deprecated */ /* deprecated */
break; break;
case 'u': case 'u':
(*lookup)->use_usec = true; (*lookup)->use_usec = ISC_TRUE;
break; break;
case 'v': case 'v':
version(); version();
@@ -1625,14 +1599,14 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
if (strlen(option) > 1U) if (strlen(option) > 1U)
option = &option[1]; option = &option[1];
else else
return (false); return (ISC_FALSE);
} }
opt = option[0]; opt = option[0];
if (strlen(option) > 1U) { if (strlen(option) > 1U) {
value_from_next = false; value_from_next = ISC_FALSE;
value = &option[1]; value = &option[1];
} else { } else {
value_from_next = true; value_from_next = ISC_TRUE;
value = next; value = next;
} }
if (value == NULL) if (value == NULL)
@@ -1662,20 +1636,20 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
} }
if (hash != NULL) if (hash != NULL)
*hash = '#'; *hash = '#';
specified_source = true; specified_source = ISC_TRUE;
return (value_from_next); return (value_from_next);
case 'c': case 'c':
if ((*lookup)->rdclassset) { if ((*lookup)->rdclassset) {
fprintf(stderr, ";; Warning, extra class option\n"); fprintf(stderr, ";; Warning, extra class option\n");
} }
*open_type_class = false; *open_type_class = ISC_FALSE;
tr.base = value; tr.base = value;
tr.length = (unsigned int) strlen(value); tr.length = (unsigned int) strlen(value);
result = dns_rdataclass_fromtext(&rdclass, result = dns_rdataclass_fromtext(&rdclass,
(isc_textregion_t *)&tr); (isc_textregion_t *)&tr);
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
(*lookup)->rdclass = rdclass; (*lookup)->rdclass = rdclass;
(*lookup)->rdclassset = true; (*lookup)->rdclassset = ISC_TRUE;
} else } else
fprintf(stderr, ";; Warning, ignoring " fprintf(stderr, ";; Warning, ignoring "
"invalid class %s\n", "invalid class %s\n",
@@ -1697,23 +1671,23 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
if (!config_only) { if (!config_only) {
if (*need_clone) if (*need_clone)
(*lookup) = clone_lookup(default_lookup, (*lookup) = clone_lookup(default_lookup,
true); ISC_TRUE);
*need_clone = true; *need_clone = ISC_TRUE;
strlcpy((*lookup)->textname, value, strlcpy((*lookup)->textname, value,
sizeof((*lookup)->textname)); sizeof((*lookup)->textname));
(*lookup)->trace_root = ((*lookup)->trace || (*lookup)->trace_root = ISC_TF((*lookup)->trace ||
(*lookup)->ns_search_only); (*lookup)->ns_search_only);
(*lookup)->new_search = true; (*lookup)->new_search = ISC_TRUE;
if (*firstarg) { if (*firstarg) {
printgreeting(argc, argv, *lookup); printgreeting(argc, argv, *lookup);
*firstarg = false; *firstarg = ISC_FALSE;
} }
ISC_LIST_APPEND(lookup_list, (*lookup), link); ISC_LIST_APPEND(lookup_list, (*lookup), link);
debug("looking up %s", (*lookup)->textname); debug("looking up %s", (*lookup)->textname);
} }
return (value_from_next); return (value_from_next);
case 't': case 't':
*open_type_class = false; *open_type_class = ISC_FALSE;
if (strncasecmp(value, "ixfr=", 5) == 0) { if (strncasecmp(value, "ixfr=", 5) == 0) {
rdtype = dns_rdatatype_ixfr; rdtype = dns_rdatatype_ixfr;
result = ISC_R_SUCCESS; result = ISC_R_SUCCESS;
@@ -1733,9 +1707,9 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
"extra type option\n"); "extra type option\n");
} }
if (rdtype == dns_rdatatype_ixfr) { if (rdtype == dns_rdatatype_ixfr) {
uint32_t serial; isc_uint32_t serial;
(*lookup)->rdtype = dns_rdatatype_ixfr; (*lookup)->rdtype = dns_rdatatype_ixfr;
(*lookup)->rdtypeset = true; (*lookup)->rdtypeset = ISC_TRUE;
result = parse_uint(&serial, &value[5], result = parse_uint(&serial, &value[5],
MAXSERIAL, "serial number"); MAXSERIAL, "serial number");
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
@@ -1744,19 +1718,19 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
(*lookup)->section_question = plusquest; (*lookup)->section_question = plusquest;
(*lookup)->comments = pluscomm; (*lookup)->comments = pluscomm;
if (!(*lookup)->tcp_mode_set) if (!(*lookup)->tcp_mode_set)
(*lookup)->tcp_mode = true; (*lookup)->tcp_mode = ISC_TRUE;
} else { } else {
(*lookup)->rdtype = rdtype; (*lookup)->rdtype = rdtype;
if (!config_only) if (!config_only)
(*lookup)->rdtypeset = true; (*lookup)->rdtypeset = ISC_TRUE;
if (rdtype == dns_rdatatype_axfr) { if (rdtype == dns_rdatatype_axfr) {
(*lookup)->section_question = plusquest; (*lookup)->section_question = plusquest;
(*lookup)->comments = pluscomm; (*lookup)->comments = pluscomm;
} else if (rdtype == dns_rdatatype_any) { } else if (rdtype == dns_rdatatype_any) {
if (!(*lookup)->tcp_mode_set) if (!(*lookup)->tcp_mode_set)
(*lookup)->tcp_mode = true; (*lookup)->tcp_mode = ISC_TRUE;
} }
(*lookup)->ixfr_serial = false; (*lookup)->ixfr_serial = ISC_FALSE;
} }
} else } else
fprintf(stderr, ";; Warning, ignoring " fprintf(stderr, ";; Warning, ignoring "
@@ -1764,44 +1738,49 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
value); value);
return (value_from_next); return (value_from_next);
case 'y': case 'y':
if ((ptr = strtok_r(value, ":", &last)) == NULL) { ptr = next_token(&value, ":"); /* hmac type or name */
if (ptr == NULL) {
usage(); usage();
} }
if ((ptr2 = strtok_r(NULL, ":", &last)) == NULL) { /* name or secret */ ptr2 = next_token(&value, ":"); /* name or secret */
if (ptr2 == NULL)
usage(); usage();
} ptr3 = next_token(&value, ":"); /* secret or NULL */
if ((ptr3 = strtok_r(NULL, ":", &last)) != NULL) { /* secret or NULL */ if (ptr3 != NULL) {
parse_hmac(ptr); parse_hmac(ptr);
ptr = ptr2; ptr = ptr2;
ptr2 = ptr3; ptr2 = ptr3;
} else { } else {
#ifndef PK11_MD5_DISABLE
hmacname = DNS_TSIG_HMACMD5_NAME; hmacname = DNS_TSIG_HMACMD5_NAME;
#else
hmacname = DNS_TSIG_HMACSHA256_NAME;
#endif
digestbits = 0; digestbits = 0;
} }
/* XXXONDREJ: FIXME */
strlcpy(keynametext, ptr, sizeof(keynametext)); strlcpy(keynametext, ptr, sizeof(keynametext));
strlcpy(keysecret, ptr2, sizeof(keysecret)); strlcpy(keysecret, ptr2, sizeof(keysecret));
return (value_from_next); return (value_from_next);
case 'x': case 'x':
if (*need_clone) if (*need_clone)
*lookup = clone_lookup(default_lookup, true); *lookup = clone_lookup(default_lookup, ISC_TRUE);
*need_clone = true; *need_clone = ISC_TRUE;
if (get_reverse(textname, sizeof(textname), value, if (get_reverse(textname, sizeof(textname), value,
ip6_int, false) == ISC_R_SUCCESS) { ip6_int, ISC_FALSE) == ISC_R_SUCCESS) {
strlcpy((*lookup)->textname, textname, strlcpy((*lookup)->textname, textname,
sizeof((*lookup)->textname)); sizeof((*lookup)->textname));
debug("looking up %s", (*lookup)->textname); debug("looking up %s", (*lookup)->textname);
(*lookup)->trace_root = ((*lookup)->trace || (*lookup)->trace_root = ISC_TF((*lookup)->trace ||
(*lookup)->ns_search_only); (*lookup)->ns_search_only);
(*lookup)->ip6_int = ip6_int; (*lookup)->ip6_int = ip6_int;
if (!(*lookup)->rdtypeset) if (!(*lookup)->rdtypeset)
(*lookup)->rdtype = dns_rdatatype_ptr; (*lookup)->rdtype = dns_rdatatype_ptr;
if (!(*lookup)->rdclassset) if (!(*lookup)->rdclassset)
(*lookup)->rdclass = dns_rdataclass_in; (*lookup)->rdclass = dns_rdataclass_in;
(*lookup)->new_search = true; (*lookup)->new_search = ISC_TRUE;
if (*firstarg) { if (*firstarg) {
printgreeting(argc, argv, *lookup); printgreeting(argc, argv, *lookup);
*firstarg = false; *firstarg = ISC_FALSE;
} }
ISC_LIST_APPEND(lookup_list, *lookup, link); ISC_LIST_APPEND(lookup_list, *lookup, link);
} else { } else {
@@ -1815,7 +1794,7 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
usage(); usage();
} }
/* NOTREACHED */ /* NOTREACHED */
return (false); return (ISC_FALSE);
} }
/*% /*%
@@ -1842,19 +1821,19 @@ preparse_args(int argc, char **argv) {
while (strpbrk(option, single_dash_opts) == &option[0]) { while (strpbrk(option, single_dash_opts) == &option[0]) {
switch (option[0]) { switch (option[0]) {
case 'm': case 'm':
memdebugging = true; memdebugging = ISC_TRUE;
isc_mem_debugging = ISC_MEM_DEBUGTRACE | isc_mem_debugging = ISC_MEM_DEBUGTRACE |
ISC_MEM_DEBUGRECORD; ISC_MEM_DEBUGRECORD;
break; break;
case '4': case '4':
if (ipv6only) if (ipv6only)
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
ipv4only = true; ipv4only = ISC_TRUE;
break; break;
case '6': case '6':
if (ipv4only) if (ipv4only)
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
ipv6only = true; ipv6only = ISC_TRUE;
break; break;
} }
option = &option[1]; option = &option[1];
@@ -1862,33 +1841,17 @@ preparse_args(int argc, char **argv) {
} }
} }
static int
split_batchline(char *batchline, char **bargv, int len, const char *msg) {
int bargc;
char *last = NULL;
REQUIRE(batchline != NULL);
for (bargc = 1, bargv[bargc] = strtok_r(batchline, " \t\r\n", &last);
bargc < len && bargv[bargc];
bargv[++bargc] = strtok_r(NULL, " \t\r\n", &last))
{
debug("%s %d: %s", msg, bargc, bargv[bargc]);
}
return (bargc);
}
static void static void
parse_args(bool is_batchfile, bool config_only, parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
int argc, char **argv) int argc, char **argv)
{ {
isc_result_t result; isc_result_t result;
isc_textregion_t tr; isc_textregion_t tr;
bool firstarg = true; isc_boolean_t firstarg = ISC_TRUE;
dig_lookup_t *lookup = NULL; dig_lookup_t *lookup = NULL;
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
bool open_type_class = true; isc_boolean_t open_type_class = ISC_TRUE;
char batchline[MXNAME]; char batchline[MXNAME];
int bargc; int bargc;
char *bargv[64]; char *bargv[64];
@@ -1896,9 +1859,11 @@ parse_args(bool is_batchfile, bool config_only,
char **rv; char **rv;
#ifndef NOPOSIX #ifndef NOPOSIX
char *homedir; char *homedir;
char rcfile[PATH_MAX]; char rcfile[256];
#endif #endif
bool need_clone = true; char *input;
int i;
isc_boolean_t need_clone = ISC_TRUE;
/* /*
* The semantics for parsing the args is a bit complex; if * The semantics for parsing the args is a bit complex; if
@@ -1915,9 +1880,9 @@ parse_args(bool is_batchfile, bool config_only,
if (!is_batchfile) { if (!is_batchfile) {
debug("making new lookup"); debug("making new lookup");
default_lookup = make_empty_lookup(); default_lookup = make_empty_lookup();
default_lookup->adflag = true; default_lookup->adflag = ISC_TRUE;
default_lookup->edns = 0; default_lookup->edns = 0;
default_lookup->sendcookie = true; default_lookup->sendcookie = ISC_TRUE;
#ifndef NOPOSIX #ifndef NOPOSIX
/* /*
@@ -1929,21 +1894,30 @@ parse_args(bool is_batchfile, bool config_only,
unsigned int n; unsigned int n;
n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc", n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc",
homedir); homedir);
if (n < sizeof(rcfile)) { if (n < sizeof(rcfile))
batchfp = fopen(rcfile, "r"); batchfp = fopen(rcfile, "r");
}
} }
if (batchfp != NULL) { if (batchfp != NULL) {
while (fgets(batchline, sizeof(batchline), while (fgets(batchline, sizeof(batchline),
batchfp) != 0) batchfp) != 0) {
{
debug("config line %s", batchline); debug("config line %s", batchline);
bargc = split_batchline(batchline, bargv, 62, bargc = 1;
".digrc argv"); input = batchline;
bargv[bargc] = next_token(&input, " \t\r\n");
while ((bargc < 62) && (bargv[bargc] != NULL)) {
bargc++;
bargv[bargc] =
next_token(&input, " \t\r\n");
}
bargv[0] = argv[0]; bargv[0] = argv[0];
argv0 = argv[0]; argv0 = argv[0];
parse_args(true, true,
bargc, (char **)bargv); for(i = 0; i < bargc; i++)
debug(".digrc argv %d: %s",
i, bargv[i]);
parse_args(ISC_TRUE, ISC_TRUE, bargc,
(char **)bargv);
} }
fclose(batchfp); fclose(batchfp);
} }
@@ -1952,11 +1926,10 @@ parse_args(bool is_batchfile, bool config_only,
if (is_batchfile && !config_only) { if (is_batchfile && !config_only) {
/* Processing '-f batchfile'. */ /* Processing '-f batchfile'. */
lookup = clone_lookup(default_lookup, true); lookup = clone_lookup(default_lookup, ISC_TRUE);
need_clone = false; need_clone = ISC_FALSE;
} else { } else
lookup = default_lookup; lookup = default_lookup;
}
rc = argc; rc = argc;
rv = argv; rv = argv;
@@ -2036,10 +2009,10 @@ parse_args(bool is_batchfile, bool config_only,
"extra type option\n"); "extra type option\n");
} }
if (rdtype == dns_rdatatype_ixfr) { if (rdtype == dns_rdatatype_ixfr) {
uint32_t serial; isc_uint32_t serial;
lookup->rdtype = lookup->rdtype =
dns_rdatatype_ixfr; dns_rdatatype_ixfr;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
result = parse_uint(&serial, result = parse_uint(&serial,
&rv[0][5], &rv[0][5],
MAXSERIAL, MAXSERIAL,
@@ -2052,10 +2025,10 @@ parse_args(bool is_batchfile, bool config_only,
plusquest; plusquest;
lookup->comments = pluscomm; lookup->comments = pluscomm;
if (!lookup->tcp_mode_set) if (!lookup->tcp_mode_set)
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
} else { } else {
lookup->rdtype = rdtype; lookup->rdtype = rdtype;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
if (rdtype == if (rdtype ==
dns_rdatatype_axfr) { dns_rdatatype_axfr) {
lookup->section_question = lookup->section_question =
@@ -2065,8 +2038,8 @@ parse_args(bool is_batchfile, bool config_only,
if (rdtype == if (rdtype ==
dns_rdatatype_any && dns_rdatatype_any &&
!lookup->tcp_mode_set) !lookup->tcp_mode_set)
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
lookup->ixfr_serial = false; lookup->ixfr_serial = ISC_FALSE;
} }
continue; continue;
} }
@@ -2078,7 +2051,7 @@ parse_args(bool is_batchfile, bool config_only,
"extra class option\n"); "extra class option\n");
} }
lookup->rdclass = rdclass; lookup->rdclass = rdclass;
lookup->rdclassset = true; lookup->rdclassset = ISC_TRUE;
continue; continue;
} }
} }
@@ -2086,16 +2059,16 @@ parse_args(bool is_batchfile, bool config_only,
if (!config_only) { if (!config_only) {
if (need_clone) if (need_clone)
lookup = clone_lookup(default_lookup, lookup = clone_lookup(default_lookup,
true); ISC_TRUE);
need_clone = true; need_clone = ISC_TRUE;
strlcpy(lookup->textname, rv[0], strlcpy(lookup->textname, rv[0],
sizeof(lookup->textname)); sizeof(lookup->textname));
lookup->trace_root = (lookup->trace || lookup->trace_root = ISC_TF(lookup->trace ||
lookup->ns_search_only); lookup->ns_search_only);
lookup->new_search = true; lookup->new_search = ISC_TRUE;
if (firstarg) { if (firstarg) {
printgreeting(argc, argv, lookup); printgreeting(argc, argv, lookup);
firstarg = false; firstarg = ISC_FALSE;
} }
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
debug("looking up %s", lookup->textname); debug("looking up %s", lookup->textname);
@@ -2123,15 +2096,24 @@ parse_args(bool is_batchfile, bool config_only,
/* XXX Remove code dup from shutdown code */ /* XXX Remove code dup from shutdown code */
next_line: next_line:
if (fgets(batchline, sizeof(batchline), batchfp) != 0) { if (fgets(batchline, sizeof(batchline), batchfp) != 0) {
bargc = 1;
debug("batch line %s", batchline); debug("batch line %s", batchline);
if (batchline[0] == '\r' || batchline[0] == '\n' || if (batchline[0] == '\r' || batchline[0] == '\n'
batchline[0] == '#' || batchline[0] == ';') || batchline[0] == '#' || batchline[0] == ';')
goto next_line; goto next_line;
bargc = split_batchline(batchline, bargv, 14, input = batchline;
"batch argv"); bargv[bargc] = next_token(&input, " \t\r\n");
while ((bargc < 14) && (bargv[bargc] != NULL)) {
bargc++;
bargv[bargc] = next_token(&input, " \t\r\n");
}
bargv[0] = argv[0]; bargv[0] = argv[0];
argv0 = argv[0]; argv0 = argv[0];
parse_args(true, false, bargc, (char **)bargv);
for(i = 0; i < bargc; i++)
debug("batch argv %d: %s", i, bargv[i]);
parse_args(ISC_TRUE, ISC_FALSE, bargc, (char **)bargv);
return; return;
} }
return; return;
@@ -2141,17 +2123,17 @@ parse_args(bool is_batchfile, bool config_only,
*/ */
if ((lookup_list.head == NULL) && !config_only) { if ((lookup_list.head == NULL) && !config_only) {
if (need_clone) if (need_clone)
lookup = clone_lookup(default_lookup, true); lookup = clone_lookup(default_lookup, ISC_TRUE);
need_clone = true; need_clone = ISC_TRUE;
lookup->trace_root = (lookup->trace || lookup->trace_root = ISC_TF(lookup->trace ||
lookup->ns_search_only); lookup->ns_search_only);
lookup->new_search = true; lookup->new_search = ISC_TRUE;
strlcpy(lookup->textname, ".", sizeof(lookup->textname)); strlcpy(lookup->textname, ".", sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_ns; lookup->rdtype = dns_rdatatype_ns;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
if (firstarg) { if (firstarg) {
printgreeting(argc, argv, lookup); printgreeting(argc, argv, lookup);
firstarg = false; firstarg = ISC_FALSE;
} }
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
} }
@@ -2169,6 +2151,8 @@ query_finished(void) {
char batchline[MXNAME]; char batchline[MXNAME];
int bargc; int bargc;
char *bargv[16]; char *bargv[16];
char *input;
int i;
if (batchname == NULL) { if (batchname == NULL) {
isc_app_shutdown(); isc_app_shutdown();
@@ -2186,9 +2170,19 @@ query_finished(void) {
if (fgets(batchline, sizeof(batchline), batchfp) != 0) { if (fgets(batchline, sizeof(batchline), batchfp) != 0) {
debug("batch line %s", batchline); debug("batch line %s", batchline);
bargc = split_batchline(batchline, bargv, 14, "batch argv"); bargc = 1;
input = batchline;
bargv[bargc] = next_token(&input, " \t\r\n");
while ((bargc < 14) && (bargv[bargc] != NULL)) {
bargc++;
bargv[bargc] = next_token(&input, " \t\r\n");
}
bargv[0] = argv0; bargv[0] = argv0;
parse_args(true, false, bargc, (char **)bargv);
for(i = 0; i < bargc; i++)
debug("batch argv %d: %s", i, bargv[i]);
parse_args(ISC_TRUE, ISC_FALSE, bargc, (char **)bargv);
start_lookup(); start_lookup();
} else { } else {
batchname = NULL; batchname = NULL;
@@ -2225,7 +2219,7 @@ void dig_setup(int argc, char **argv)
setup_system(ipv4only, ipv6only); setup_system(ipv4only, ipv6only);
} }
void dig_query_setup(bool is_batchfile, bool config_only, void dig_query_setup(isc_boolean_t is_batchfile, isc_boolean_t config_only,
int argc, char **argv) int argc, char **argv)
{ {
debug("dig_query_setup"); debug("dig_query_setup");
@@ -2237,7 +2231,7 @@ void dig_query_setup(bool is_batchfile, bool config_only,
setup_text_key(); setup_text_key();
if (domainopt[0] != '\0') { if (domainopt[0] != '\0') {
set_search_domain(domainopt); set_search_domain(domainopt);
usesearch = true; usesearch = ISC_TRUE;
} }
} }
@@ -2274,7 +2268,7 @@ int
main(int argc, char **argv) { main(int argc, char **argv) {
dig_setup(argc, argv); dig_setup(argc, argv);
dig_query_setup(false, false, argc, argv); dig_query_setup(ISC_FALSE, ISC_FALSE, argc, argv);
dig_startup(); dig_startup();
dig_shutdown(); dig_shutdown();
+14 -43
View File
@@ -275,9 +275,9 @@
<term>-i</term> <term>-i</term>
<listitem> <listitem>
<para> <para>
Do reverse IPv6 lookups using the obsolete RFC 1886 IP6.INT Do reverse IPv6 lookups using the obsolete RFC1886 IP6.INT
domain, which is no longer in use. Obsolete bit string domain, which is no longer in use. Obsolete bit string
label queries (RFC 2874) are not attempted. label queries (RFC2874) are not attempted.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -338,12 +338,11 @@
<term>-t <replaceable class="parameter">type</replaceable></term> <term>-t <replaceable class="parameter">type</replaceable></term>
<listitem> <listitem>
<para> <para>
The resource record type to query. It can be any valid query The resource record type to query. It can be any valid query type
type. If it is a resource record type supported in BIND 9, it which is
can be given by the type mnemonic (such as "NS" or "AAAA"). supported in BIND 9. The default query type is "A", unless the
The default query type is "A", unless the <option>-x</option> <option>-x</option> option is supplied to indicate a reverse lookup.
option is supplied to indicate a reverse lookup. A zone A zone transfer can be requested by specifying a type of AXFR. When
transfer can be requested by specifying a type of AXFR. When
an incremental zone transfer (IXFR) is required, set the an incremental zone transfer (IXFR) is required, set the
<parameter>type</parameter> to <literal>ixfr=N</literal>. <parameter>type</parameter> to <literal>ixfr=N</literal>.
The incremental zone transfer will contain the changes The incremental zone transfer will contain the changes
@@ -351,12 +350,6 @@
record was record was
<parameter>N</parameter>. <parameter>N</parameter>.
</para> </para>
<para>
All resource record types can be expressed as "TYPEnn", where
"nn" is the number of the type. If the resource record type is
not supported in BIND 9, the result will be displayed as
described in RFC 3597.
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -960,17 +953,6 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>+[no]raflag</option></term>
<listitem>
<para>
Set [do not set] the RA (Recursion Available) bit in
the query. The default is +noraflag. This bit should
be ignored by the server for QUERY.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><option>+[no]rdflag</option></term> <term><option>+[no]rdflag</option></term>
<listitem> <listitem>
@@ -1062,7 +1044,7 @@
<listitem> <listitem>
<para> <para>
This feature is now obsolete and has been removed; This feature is now obsolete and has been removed;
use <command>delv</command> instead. use <command>delv</command> instead.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -1114,17 +1096,6 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>+[no]tcflag</option></term>
<listitem>
<para>
Set [do not set] the TC (TrunCation) bit in the query.
The default is +notcflag. This bit should be ignored
by the server for QUERY.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term><option>+[no]tcp</option></term> <term><option>+[no]tcp</option></term>
<listitem> <listitem>
@@ -1158,8 +1129,8 @@
<listitem> <listitem>
<para> <para>
This feature is related to <command>dig +sigchase</command>, This feature is related to <command>dig +sigchase</command>,
which is obsolete and has been removed. Use which is obsolete and has been removed. Use
<command>delv</command> instead. <command>delv</command> instead.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -1204,9 +1175,9 @@
<listitem> <listitem>
<para> <para>
Formerly specified trusted keys for use with Formerly specified trusted keys for use with
<command>dig +sigchase</command>. This feature is now <command>dig +sigchase</command>. This feature is now
obsolete and has been removed; use obsolete and has been removed; use
<command>delv</command> instead. <command>delv</command> instead.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -1356,7 +1327,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
<citerefentry> <citerefentry>
<refentrytitle>dnssec-keygen</refentrytitle><manvolnum>8</manvolnum> <refentrytitle>dnssec-keygen</refentrytitle><manvolnum>8</manvolnum>
</citerefentry>, </citerefentry>,
<citetitle>RFC 1035</citetitle>. <citetitle>RFC1035</citetitle>.
</para> </para>
</refsection> </refsection>
+19 -50
View File
@@ -230,9 +230,9 @@
<dt><span class="term">-i</span></dt> <dt><span class="term">-i</span></dt>
<dd> <dd>
<p> <p>
Do reverse IPv6 lookups using the obsolete RFC 1886 IP6.INT Do reverse IPv6 lookups using the obsolete RFC1886 IP6.INT
domain, which is no longer in use. Obsolete bit string domain, which is no longer in use. Obsolete bit string
label queries (RFC 2874) are not attempted. label queries (RFC2874) are not attempted.
</p> </p>
</dd> </dd>
<dt><span class="term">-k <em class="replaceable"><code>keyfile</code></em></span></dt> <dt><span class="term">-k <em class="replaceable"><code>keyfile</code></em></span></dt>
@@ -277,12 +277,11 @@
<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt> <dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
<dd> <dd>
<p> <p>
The resource record type to query. It can be any valid query The resource record type to query. It can be any valid query type
type. If it is a resource record type supported in BIND 9, it which is
can be given by the type mnemonic (such as "NS" or "AAAA"). supported in BIND 9. The default query type is "A", unless the
The default query type is "A", unless the <code class="option">-x</code> <code class="option">-x</code> option is supplied to indicate a reverse lookup.
option is supplied to indicate a reverse lookup. A zone A zone transfer can be requested by specifying a type of AXFR. When
transfer can be requested by specifying a type of AXFR. When
an incremental zone transfer (IXFR) is required, set the an incremental zone transfer (IXFR) is required, set the
<em class="parameter"><code>type</code></em> to <code class="literal">ixfr=N</code>. <em class="parameter"><code>type</code></em> to <code class="literal">ixfr=N</code>.
The incremental zone transfer will contain the changes The incremental zone transfer will contain the changes
@@ -290,12 +289,6 @@
record was record was
<em class="parameter"><code>N</code></em>. <em class="parameter"><code>N</code></em>.
</p> </p>
<p>
All resource record types can be expressed as "TYPEnn", where
"nn" is the number of the type. If the resource record type is
not supported in BIND 9, the result will be displayed as
described in RFC 3597.
</p>
</dd> </dd>
<dt><span class="term">-u</span></dt> <dt><span class="term">-u</span></dt>
<dd> <dd>
@@ -626,14 +619,6 @@
server that provided the answer. server that provided the answer.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]idnin</code></span></dt>
<dd>
<p>
Process [do not process] IDN domain names on input.
This requires IDN SUPPORT to have been enabled at
compile time. The default is to process IDN input.
</p>
</dd>
<dt><span class="term"><code class="option">+[no]idnout</code></span></dt> <dt><span class="term"><code class="option">+[no]idnout</code></span></dt>
<dd> <dd>
<p> <p>
@@ -710,8 +695,7 @@
attempts to find the authoritative name servers for attempts to find the authoritative name servers for
the zone containing the name being looked up and the zone containing the name being looked up and
display the SOA record that each name server has for display the SOA record that each name server has for
the zone. Addresses of servers that that did not the zone.
respond are also printed.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]onesoa</code></span></dt> <dt><span class="term"><code class="option">+[no]onesoa</code></span></dt>
@@ -758,14 +742,6 @@
the question section as a comment. the question section as a comment.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]raflag</code></span></dt>
<dd>
<p>
Set [do not set] the RA (Recursion Available) bit in
the query. The default is +noraflag. This bit should
be ignored by the server for QUERY.
</p>
</dd>
<dt><span class="term"><code class="option">+[no]rdflag</code></span></dt> <dt><span class="term"><code class="option">+[no]rdflag</code></span></dt>
<dd> <dd>
<p> <p>
@@ -835,7 +811,7 @@
<dd> <dd>
<p> <p>
This feature is now obsolete and has been removed; This feature is now obsolete and has been removed;
use <span class="command"><strong>delv</strong></span> instead. use <span class="command"><strong>delv</strong></span> instead.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+split=W</code></span></dt> <dt><span class="term"><code class="option">+split=W</code></span></dt>
@@ -876,14 +852,6 @@
this query. this query.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]tcflag</code></span></dt>
<dd>
<p>
Set [do not set] the TC (TrunCation) bit in the query.
The default is +notcflag. This bit should be ignored
by the server for QUERY.
</p>
</dd>
<dt><span class="term"><code class="option">+[no]tcp</code></span></dt> <dt><span class="term"><code class="option">+[no]tcp</code></span></dt>
<dd> <dd>
<p> <p>
@@ -910,8 +878,8 @@
<dd> <dd>
<p> <p>
This feature is related to <span class="command"><strong>dig +sigchase</strong></span>, This feature is related to <span class="command"><strong>dig +sigchase</strong></span>,
which is obsolete and has been removed. Use which is obsolete and has been removed. Use
<span class="command"><strong>delv</strong></span> instead. <span class="command"><strong>delv</strong></span> instead.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]trace</code></span></dt> <dt><span class="term"><code class="option">+[no]trace</code></span></dt>
@@ -947,9 +915,9 @@
<dd> <dd>
<p> <p>
Formerly specified trusted keys for use with Formerly specified trusted keys for use with
<span class="command"><strong>dig +sigchase</strong></span>. This feature is now <span class="command"><strong>dig +sigchase</strong></span>. This feature is now
obsolete and has been removed; use obsolete and has been removed; use
<span class="command"><strong>delv</strong></span> instead. <span class="command"><strong>delv</strong></span> instead.
</p> </p>
</dd> </dd>
<dt><span class="term"><code class="option">+[no]ttlid</code></span></dt> <dt><span class="term"><code class="option">+[no]ttlid</code></span></dt>
@@ -1059,9 +1027,10 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
<span class="command"><strong>dig</strong></span> appropriately converts character encoding of <span class="command"><strong>dig</strong></span> appropriately converts character encoding of
domain name before sending a request to DNS server or displaying a domain name before sending a request to DNS server or displaying a
reply from the server. reply from the server.
If you'd like to turn off the IDN support for some reason, use If you'd like to turn off the IDN support for some reason, defines
parameters <em class="parameter"><code>+noidnin</code></em> and the <code class="envar">IDN_DISABLE</code> environment variable.
<em class="parameter"><code>+noidnout</code></em>. The IDN support is disabled if the variable is set when
<span class="command"><strong>dig</strong></span> runs.
</p> </p>
</div> </div>
@@ -1089,7 +1058,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
<span class="citerefentry"> <span class="citerefentry">
<span class="refentrytitle">dnssec-keygen</span>(8) <span class="refentrytitle">dnssec-keygen</span>(8)
</span>, </span>,
<em class="citetitle">RFC 1035</em>. <em class="citetitle">RFC1035</em>.
</p> </p>
</div> </div>
+451 -434
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2000-2002, 2004, 2005, 2007-2009, 2014-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2000-2002, 2004, 2005, 2007-2009, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -274,5 +274,5 @@ runs\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2000-2002, 2004, 2005, 2007-2009, 2014-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2000-2002, 2004, 2005, 2007-2009, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+87 -88
View File
@@ -12,9 +12,6 @@
/*! \file */ /*! \file */
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <limits.h> #include <limits.h>
@@ -29,6 +26,7 @@
#include <isc/string.h> #include <isc/string.h>
#include <isc/util.h> #include <isc/util.h>
#include <isc/task.h> #include <isc/task.h>
#include <isc/stdlib.h>
#include <dns/byaddr.h> #include <dns/byaddr.h>
#include <dns/fixedname.h> #include <dns/fixedname.h>
@@ -42,14 +40,14 @@
#include <dig/dig.h> #include <dig/dig.h>
static bool short_form = true, listed_server = false; static isc_boolean_t short_form = ISC_TRUE, listed_server = ISC_FALSE;
static bool default_lookups = true; static isc_boolean_t default_lookups = ISC_TRUE;
static int seen_error = -1; static int seen_error = -1;
static bool list_addresses = true; static isc_boolean_t list_addresses = ISC_TRUE;
static bool list_almost_all = false; static isc_boolean_t list_almost_all = ISC_FALSE;
static dns_rdatatype_t list_type = dns_rdatatype_a; static dns_rdatatype_t list_type = dns_rdatatype_a;
static bool printed_server = false; static isc_boolean_t printed_server = ISC_FALSE;
static bool ipv4only = false, ipv6only = false; static isc_boolean_t ipv4only = ISC_FALSE, ipv6only = ISC_FALSE;
static const char *opcodetext[] = { static const char *opcodetext[] = {
"QUERY", "QUERY",
@@ -226,7 +224,7 @@ say_message(dns_name_t *name, const char *msg, dns_rdata_t *rdata,
static isc_result_t static isc_result_t
printsection(dns_message_t *msg, dns_section_t sectionid, printsection(dns_message_t *msg, dns_section_t sectionid,
const char *section_name, bool headers, const char *section_name, isc_boolean_t headers,
dig_query_t *query) dig_query_t *query)
{ {
dns_name_t *name, *print_name; dns_name_t *name, *print_name;
@@ -237,13 +235,13 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
isc_region_t r; isc_region_t r;
dns_name_t empty_name; dns_name_t empty_name;
char tbuf[4096]; char tbuf[4096];
bool first; isc_boolean_t first;
bool no_rdata; isc_boolean_t no_rdata;
if (sectionid == DNS_SECTION_QUESTION) if (sectionid == DNS_SECTION_QUESTION)
no_rdata = true; no_rdata = ISC_TRUE;
else else
no_rdata = false; no_rdata = ISC_FALSE;
if (headers) if (headers)
printf(";; %s SECTION:\n", section_name); printf(";; %s SECTION:\n", section_name);
@@ -261,7 +259,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
dns_message_currentname(msg, sectionid, &name); dns_message_currentname(msg, sectionid, &name);
isc_buffer_init(&target, tbuf, sizeof(tbuf)); isc_buffer_init(&target, tbuf, sizeof(tbuf));
first = true; first = ISC_TRUE;
print_name = name; print_name = name;
for (rdataset = ISC_LIST_HEAD(name->list); for (rdataset = ISC_LIST_HEAD(name->list);
@@ -285,7 +283,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
if (!short_form) { if (!short_form) {
result = dns_rdataset_totext(rdataset, result = dns_rdataset_totext(rdataset,
print_name, print_name,
false, ISC_FALSE,
no_rdata, no_rdata,
&target); &target);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
@@ -293,7 +291,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
#ifdef USEINITALWS #ifdef USEINITALWS
if (first) { if (first) {
print_name = &empty_name; print_name = &empty_name;
first = false; first = ISC_FALSE;
} }
#else #else
UNUSED(first); /* Shut up compiler. */ UNUSED(first); /* Shut up compiler. */
@@ -352,7 +350,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
static isc_result_t static isc_result_t
printrdata(dns_message_t *msg, dns_rdataset_t *rdataset, printrdata(dns_message_t *msg, dns_rdataset_t *rdataset,
const dns_name_t *owner, const char *set_name, const dns_name_t *owner, const char *set_name,
bool headers) isc_boolean_t headers)
{ {
isc_buffer_t target; isc_buffer_t target;
isc_result_t result; isc_result_t result;
@@ -365,7 +363,7 @@ printrdata(dns_message_t *msg, dns_rdataset_t *rdataset,
isc_buffer_init(&target, tbuf, sizeof(tbuf)); isc_buffer_init(&target, tbuf, sizeof(tbuf));
result = dns_rdataset_totext(rdataset, owner, false, false, result = dns_rdataset_totext(rdataset, owner, ISC_FALSE, ISC_FALSE,
&target); &target);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
@@ -402,8 +400,8 @@ chase_cnamechain(dns_message_t *msg, dns_name_t *qname) {
} }
static isc_result_t static isc_result_t
printmessage(dig_query_t *query, dns_message_t *msg, bool headers) { printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
bool did_flag = false; isc_boolean_t did_flag = ISC_FALSE;
dns_rdataset_t *opt, *tsig = NULL; dns_rdataset_t *opt, *tsig = NULL;
const dns_name_t *tsigname; const dns_name_t *tsigname;
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
@@ -426,7 +424,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
sizeof(sockstr)); sizeof(sockstr));
printf("Address: %s\n", sockstr); printf("Address: %s\n", sockstr);
printf("Aliases: \n\n"); printf("Aliases: \n\n");
printed_server = true; printed_server = ISC_TRUE;
} }
if (msg->rcode != 0) { if (msg->rcode != 0) {
@@ -454,26 +452,27 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
dns_name_t *name; dns_name_t *name;
/* Add AAAA and MX lookups. */ /* Add AAAA and MX lookups. */
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
dns_name_copy(query->lookup->name, name, NULL); dns_name_copy(query->lookup->name, name, NULL);
chase_cnamechain(msg, name); chase_cnamechain(msg, name);
dns_name_format(name, namestr, sizeof(namestr)); dns_name_format(name, namestr, sizeof(namestr));
lookup = clone_lookup(query->lookup, false); lookup = clone_lookup(query->lookup, ISC_FALSE);
if (lookup != NULL) { if (lookup != NULL) {
strlcpy(lookup->textname, namestr, strlcpy(lookup->textname, namestr,
sizeof(lookup->textname)); sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_aaaa; lookup->rdtype = dns_rdatatype_aaaa;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
lookup->origin = NULL; lookup->origin = NULL;
lookup->retries = tries; lookup->retries = tries;
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
} }
lookup = clone_lookup(query->lookup, false); lookup = clone_lookup(query->lookup, ISC_FALSE);
if (lookup != NULL) { if (lookup != NULL) {
strlcpy(lookup->textname, namestr, strlcpy(lookup->textname, namestr,
sizeof(lookup->textname)); sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_mx; lookup->rdtype = dns_rdatatype_mx;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
lookup->origin = NULL; lookup->origin = NULL;
lookup->retries = tries; lookup->retries = tries;
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
@@ -487,31 +486,31 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
printf(";; flags: "); printf(";; flags: ");
if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) {
printf("qr"); printf("qr");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) {
printf("%saa", did_flag ? " " : ""); printf("%saa", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {
printf("%stc", did_flag ? " " : ""); printf("%stc", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) {
printf("%srd", did_flag ? " " : ""); printf("%srd", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) {
printf("%sra", did_flag ? " " : ""); printf("%sra", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0) {
printf("%sad", did_flag ? " " : ""); printf("%sad", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
} }
if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0) { if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0) {
printf("%scd", did_flag ? " " : ""); printf("%scd", did_flag ? " " : "");
did_flag = true; did_flag = ISC_TRUE;
POST(did_flag); POST(did_flag);
} }
printf("; QUERY: %u, ANSWER: %u, " printf("; QUERY: %u, ANSWER: %u, "
@@ -534,7 +533,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
!short_form) { !short_form) {
printf("\n"); printf("\n");
result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION", result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION",
true, query); ISC_TRUE, query);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} }
@@ -542,7 +541,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
if (!short_form) if (!short_form)
printf("\n"); printf("\n");
result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER", result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER",
!short_form, query); ISC_TF(!short_form), query);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} }
@@ -551,7 +550,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
!short_form) { !short_form) {
printf("\n"); printf("\n");
result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY", result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY",
true, query); ISC_TRUE, query);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} }
@@ -559,14 +558,14 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
!short_form) { !short_form) {
printf("\n"); printf("\n");
result = printsection(msg, DNS_SECTION_ADDITIONAL, result = printsection(msg, DNS_SECTION_ADDITIONAL,
"ADDITIONAL", true, query); "ADDITIONAL", ISC_TRUE, query);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} }
if ((tsig != NULL) && !short_form) { if ((tsig != NULL) && !short_form) {
printf("\n"); printf("\n");
result = printrdata(msg, tsig, tsigname, result = printrdata(msg, tsig, tsigname,
"PSEUDOSECTION TSIG", true); "PSEUDOSECTION TSIG", ISC_TRUE);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
return (result); return (result);
} }
@@ -601,7 +600,7 @@ pre_parse_args(int argc, char **argv) {
while ((c = isc_commandline_parse(argc, argv, optstring)) != -1) { while ((c = isc_commandline_parse(argc, argv, optstring)) != -1) {
switch (c) { switch (c) {
case 'm': case 'm':
memdebugging = true; memdebugging = ISC_TRUE;
if (strcasecmp("trace", isc_commandline_argument) == 0) if (strcasecmp("trace", isc_commandline_argument) == 0)
isc_mem_debugging |= ISC_MEM_DEBUGTRACE; isc_mem_debugging |= ISC_MEM_DEBUGTRACE;
else if (strcasecmp("record", else if (strcasecmp("record",
@@ -615,12 +614,12 @@ pre_parse_args(int argc, char **argv) {
case '4': case '4':
if (ipv6only) if (ipv6only)
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
ipv4only = true; ipv4only = ISC_TRUE;
break; break;
case '6': case '6':
if (ipv4only) if (ipv4only)
fatal("only one of -4 and -6 allowed"); fatal("only one of -4 and -6 allowed");
ipv6only = true; ipv6only = ISC_TRUE;
break; break;
case 'a': break; case 'a': break;
case 'A': break; case 'A': break;
@@ -641,8 +640,8 @@ pre_parse_args(int argc, char **argv) {
case 'C': break; case 'C': break;
case 'D': case 'D':
if (debugging) if (debugging)
debugtiming = true; debugtiming = ISC_TRUE;
debugging = true; debugging = ISC_TRUE;
break; break;
case 'N': break; case 'N': break;
case 'R': break; case 'R': break;
@@ -652,12 +651,12 @@ pre_parse_args(int argc, char **argv) {
show_usage(); show_usage();
} }
} }
isc_commandline_reset = true; isc_commandline_reset = ISC_TRUE;
isc_commandline_index = 1; isc_commandline_index = 1;
} }
static void static void
parse_args(bool is_batchfile, int argc, char **argv) { parse_args(isc_boolean_t is_batchfile, int argc, char **argv) {
char hostname[MXNAME]; char hostname[MXNAME];
dig_lookup_t *lookup; dig_lookup_t *lookup;
int c; int c;
@@ -666,30 +665,30 @@ parse_args(bool is_batchfile, int argc, char **argv) {
isc_result_t result = ISC_R_SUCCESS; isc_result_t result = ISC_R_SUCCESS;
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
uint32_t serial = 0; isc_uint32_t serial = 0;
UNUSED(is_batchfile); UNUSED(is_batchfile);
lookup = make_empty_lookup(); lookup = make_empty_lookup();
lookup->servfail_stops = false; lookup->servfail_stops = ISC_FALSE;
lookup->comments = false; lookup->comments = ISC_FALSE;
short_form = !verbose; short_form = !verbose;
while ((c = isc_commandline_parse(argc, argv, optstring)) != -1) { while ((c = isc_commandline_parse(argc, argv, optstring)) != -1) {
switch (c) { switch (c) {
case 'l': case 'l':
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
lookup->rdtype = dns_rdatatype_axfr; lookup->rdtype = dns_rdatatype_axfr;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
fatalexit = 3; fatalexit = 3;
break; break;
case 'v': case 'v':
case 'd': case 'd':
short_form = false; short_form = ISC_FALSE;
break; break;
case 'r': case 'r':
lookup->recurse = false; lookup->recurse = ISC_FALSE;
break; break;
case 't': case 't':
if (strncasecmp(isc_commandline_argument, if (strncasecmp(isc_commandline_argument,
@@ -714,23 +713,23 @@ parse_args(bool is_batchfile, int argc, char **argv) {
if (!lookup->rdtypeset || if (!lookup->rdtypeset ||
lookup->rdtype != dns_rdatatype_axfr) lookup->rdtype != dns_rdatatype_axfr)
lookup->rdtype = rdtype; lookup->rdtype = rdtype;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
if (rdtype == dns_rdatatype_axfr) { if (rdtype == dns_rdatatype_axfr) {
/* -l -t any -v */ /* -l -t any -v */
list_type = dns_rdatatype_any; list_type = dns_rdatatype_any;
short_form = false; short_form = ISC_FALSE;
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
} else if (rdtype == dns_rdatatype_ixfr) { } else if (rdtype == dns_rdatatype_ixfr) {
lookup->ixfr_serial = serial; lookup->ixfr_serial = serial;
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
list_type = rdtype; list_type = rdtype;
} else if (rdtype == dns_rdatatype_any) { } else if (rdtype == dns_rdatatype_any) {
if (!lookup->tcp_mode_set) if (!lookup->tcp_mode_set)
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
} else } else
list_type = rdtype; list_type = rdtype;
list_addresses = false; list_addresses = ISC_FALSE;
default_lookups = false; default_lookups = ISC_FALSE;
break; break;
case 'c': case 'c':
tr.base = isc_commandline_argument; tr.base = isc_commandline_argument;
@@ -744,25 +743,25 @@ parse_args(bool is_batchfile, int argc, char **argv) {
isc_commandline_argument); isc_commandline_argument);
} else { } else {
lookup->rdclass = rdclass; lookup->rdclass = rdclass;
lookup->rdclassset = true; lookup->rdclassset = ISC_TRUE;
} }
default_lookups = false; default_lookups = ISC_FALSE;
break; break;
case 'A': case 'A':
list_almost_all = true; list_almost_all = ISC_TRUE;
/* FALL THROUGH */ /* FALL THROUGH */
case 'a': case 'a':
if (!lookup->rdtypeset || if (!lookup->rdtypeset ||
lookup->rdtype != dns_rdatatype_axfr) lookup->rdtype != dns_rdatatype_axfr)
lookup->rdtype = dns_rdatatype_any; lookup->rdtype = dns_rdatatype_any;
list_type = dns_rdatatype_any; list_type = dns_rdatatype_any;
list_addresses = false; list_addresses = ISC_FALSE;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
short_form = false; short_form = ISC_FALSE;
default_lookups = false; default_lookups = ISC_FALSE;
break; break;
case 'i': case 'i':
lookup->ip6_int = true; lookup->ip6_int = ISC_TRUE;
break; break;
case 'n': case 'n':
/* deprecated */ /* deprecated */
@@ -788,23 +787,23 @@ parse_args(bool is_batchfile, int argc, char **argv) {
tries = 2; tries = 2;
break; break;
case 'T': case 'T':
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
lookup->tcp_mode_set = true; lookup->tcp_mode_set = ISC_TRUE;
break; break;
case 'U': case 'U':
lookup->tcp_mode = false; lookup->tcp_mode = ISC_FALSE;
lookup->tcp_mode_set = true; lookup->tcp_mode_set = ISC_TRUE;
break; break;
case 'C': case 'C':
debug("showing all SOAs"); debug("showing all SOAs");
lookup->rdtype = dns_rdatatype_ns; lookup->rdtype = dns_rdatatype_ns;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
lookup->rdclass = dns_rdataclass_in; lookup->rdclass = dns_rdataclass_in;
lookup->rdclassset = true; lookup->rdclassset = ISC_TRUE;
lookup->ns_search_only = true; lookup->ns_search_only = ISC_TRUE;
lookup->trace_root = true; lookup->trace_root = ISC_TRUE;
lookup->identify_previous_line = true; lookup->identify_previous_line = ISC_TRUE;
default_lookups = false; default_lookups = ISC_FALSE;
break; break;
case 'N': case 'N':
debug("setting NDOTS to %s", debug("setting NDOTS to %s",
@@ -821,7 +820,7 @@ parse_args(bool is_batchfile, int argc, char **argv) {
/* Handled by pre_parse_args(). */ /* Handled by pre_parse_args(). */
break; break;
case 's': case 's':
lookup->servfail_stops = true; lookup->servfail_stops = ISC_TRUE;
break; break;
} }
} }
@@ -836,22 +835,22 @@ parse_args(bool is_batchfile, int argc, char **argv) {
if (argc > isc_commandline_index + 1) { if (argc > isc_commandline_index + 1) {
set_nameserver(argv[isc_commandline_index+1]); set_nameserver(argv[isc_commandline_index+1]);
debug("server is %s", argv[isc_commandline_index+1]); debug("server is %s", argv[isc_commandline_index+1]);
listed_server = true; listed_server = ISC_TRUE;
} else } else
check_ra = true; check_ra = ISC_TRUE;
lookup->pending = false; lookup->pending = ISC_FALSE;
if (get_reverse(store, sizeof(store), hostname, if (get_reverse(store, sizeof(store), hostname,
lookup->ip6_int, true) == ISC_R_SUCCESS) { lookup->ip6_int, ISC_TRUE) == ISC_R_SUCCESS) {
strlcpy(lookup->textname, store, sizeof(lookup->textname)); strlcpy(lookup->textname, store, sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_ptr; lookup->rdtype = dns_rdatatype_ptr;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
default_lookups = false; default_lookups = ISC_FALSE;
} else { } else {
strlcpy(lookup->textname, hostname, sizeof(lookup->textname)); strlcpy(lookup->textname, hostname, sizeof(lookup->textname));
usesearch = true; usesearch = ISC_TRUE;
} }
lookup->new_search = true; lookup->new_search = ISC_TRUE;
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
} }
@@ -880,7 +879,7 @@ main(int argc, char **argv) {
check_result(result, "isc_app_start"); check_result(result, "isc_app_start");
setup_libs(); setup_libs();
setup_system(ipv4only, ipv6only); setup_system(ipv4only, ipv6only);
parse_args(false, argc, argv); parse_args(ISC_FALSE, argc, argv);
if (keyfile[0] != 0) if (keyfile[0] != 0)
setup_file_key(); setup_file_key();
else if (keysecret[0] != 0) else if (keysecret[0] != 0)
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2000-2002, 2004, 2005, 2007-2009, 2014-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2000-2002, 2004, 2005, 2007-2009, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+37 -38
View File
@@ -14,13 +14,11 @@
/*! \file */ /*! \file */
#include <inttypes.h>
#include <stdbool.h>
#include <dns/rdatalist.h> #include <dns/rdatalist.h>
#include <dst/dst.h> #include <dst/dst.h>
#include <isc/boolean.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/bufferlist.h> #include <isc/bufferlist.h>
#include <isc/formatcheck.h> #include <isc/formatcheck.h>
@@ -83,7 +81,7 @@ typedef struct dig_searchlist dig_searchlist_t;
/*% The dig_lookup structure */ /*% The dig_lookup structure */
struct dig_lookup { struct dig_lookup {
bool isc_boolean_t
pending, /*%< Pending a successful answer */ pending, /*%< Pending a successful answer */
waiting_connect, waiting_connect,
doing_xfr, doing_xfr,
@@ -96,8 +94,6 @@ struct dig_lookup {
aaonly, aaonly,
adflag, adflag,
cdflag, cdflag,
raflag,
tcflag,
zflag, zflag,
trace, /*% dig +trace */ trace, /*% dig +trace */
trace_root, /*% initial query for either +trace or +nssearch */ trace_root, /*% initial query for either +trace or +nssearch */
@@ -141,8 +137,8 @@ struct dig_lookup {
dns_rdatatype_t rdtype; dns_rdatatype_t rdtype;
dns_rdatatype_t qrdtype; dns_rdatatype_t qrdtype;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
bool rdtypeset; isc_boolean_t rdtypeset;
bool rdclassset; isc_boolean_t rdclassset;
char name_space[BUFSIZE]; char name_space[BUFSIZE];
char oname_space[BUFSIZE]; char oname_space[BUFSIZE];
isc_buffer_t namebuf; isc_buffer_t namebuf;
@@ -160,17 +156,17 @@ struct dig_lookup {
dig_serverlist_t my_server_list; dig_serverlist_t my_server_list;
dig_searchlist_t *origin; dig_searchlist_t *origin;
dig_query_t *xfr_q; dig_query_t *xfr_q;
uint32_t retries; isc_uint32_t retries;
int nsfound; int nsfound;
uint16_t udpsize; isc_uint16_t udpsize;
int16_t edns; isc_int16_t edns;
int16_t padding; isc_int16_t padding;
uint32_t ixfr_serial; isc_uint32_t ixfr_serial;
isc_buffer_t rdatabuf; isc_buffer_t rdatabuf;
char rdatastore[MXNAME]; char rdatastore[MXNAME];
dst_context_t *tsigctx; dst_context_t *tsigctx;
isc_buffer_t *querysig; isc_buffer_t *querysig;
uint32_t msgcounter; isc_uint32_t msgcounter;
dns_fixedname_t fdomain; dns_fixedname_t fdomain;
isc_sockaddr_t *ecs_addr; isc_sockaddr_t *ecs_addr;
char *cookie; char *cookie;
@@ -186,7 +182,7 @@ struct dig_lookup {
/*% The dig_query structure */ /*% The dig_query structure */
struct dig_query { struct dig_query {
dig_lookup_t *lookup; dig_lookup_t *lookup;
bool waiting_connect, isc_boolean_t waiting_connect,
pending_free, pending_free,
waiting_senddone, waiting_senddone,
first_pass, first_pass,
@@ -196,11 +192,11 @@ struct dig_query {
recv_made, recv_made,
warn_id, warn_id,
timedout; timedout;
uint32_t first_rr_serial; isc_uint32_t first_rr_serial;
uint32_t second_rr_serial; isc_uint32_t second_rr_serial;
uint32_t msg_count; isc_uint32_t msg_count;
uint32_t rr_count; isc_uint32_t rr_count;
bool ixfr_axfr; isc_boolean_t ixfr_axfr;
char *servname; char *servname;
char *userarg; char *userarg;
isc_bufferlist_t sendlist, isc_bufferlist_t sendlist,
@@ -218,7 +214,7 @@ struct dig_query {
isc_sockaddr_t sockaddr; isc_sockaddr_t sockaddr;
isc_time_t time_sent; isc_time_t time_sent;
isc_time_t time_recv; isc_time_t time_recv;
uint64_t byte_count; isc_uint64_t byte_count;
isc_buffer_t sendbuf; isc_buffer_t sendbuf;
isc_timer_t *timer; isc_timer_t *timer;
}; };
@@ -246,7 +242,7 @@ extern dig_serverlist_t server_list;
extern dig_searchlistlist_t search_list; extern dig_searchlistlist_t search_list;
extern unsigned int extrabytes; extern unsigned int extrabytes;
extern bool check_ra, have_ipv4, have_ipv6, specified_source, extern isc_boolean_t check_ra, have_ipv4, have_ipv6, specified_source,
usesearch, showsearch; usesearch, showsearch;
extern in_port_t port; extern in_port_t port;
extern unsigned int timeout; extern unsigned int timeout;
@@ -261,18 +257,18 @@ extern char keyfile[MXNAME];
extern char keysecret[MXNAME]; extern char keysecret[MXNAME];
extern const dns_name_t *hmacname; extern const dns_name_t *hmacname;
extern unsigned int digestbits; extern unsigned int digestbits;
extern dns_tsigkey_t *tsigkey; extern dns_tsigkey_t *key;
extern bool validated; extern isc_boolean_t validated;
extern isc_taskmgr_t *taskmgr; extern isc_taskmgr_t *taskmgr;
extern isc_task_t *global_task; extern isc_task_t *global_task;
extern bool free_now; extern isc_boolean_t free_now;
extern bool debugging, debugtiming, memdebugging; extern isc_boolean_t debugging, debugtiming, memdebugging;
extern bool keep_open; extern isc_boolean_t keep_open;
extern char *progname; extern char *progname;
extern int tries; extern int tries;
extern int fatalexit; extern int fatalexit;
extern bool verbose; extern isc_boolean_t verbose;
/* /*
* Routines in dighost.c. * Routines in dighost.c.
@@ -284,8 +280,8 @@ int
getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp); getaddresses(dig_lookup_t *lookup, const char *host, isc_result_t *resultp);
isc_result_t isc_result_t
get_reverse(char *reverse, size_t len, char *value, bool ip6_int, get_reverse(char *reverse, size_t len, char *value, isc_boolean_t ip6_int,
bool strict); isc_boolean_t strict);
ISC_PLATFORM_NORETURN_PRE void ISC_PLATFORM_NORETURN_PRE void
fatal(const char *format, ...) fatal(const char *format, ...)
@@ -304,7 +300,7 @@ debug(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
void void
check_result(isc_result_t result, const char *msg); check_result(isc_result_t result, const char *msg);
bool isc_boolean_t
setup_lookup(dig_lookup_t *lookup); setup_lookup(dig_lookup_t *lookup);
void void
@@ -326,14 +322,14 @@ void
setup_libs(void); setup_libs(void);
void void
setup_system(bool ipv4only, bool ipv6only); setup_system(isc_boolean_t ipv4only, isc_boolean_t ipv6only);
isc_result_t isc_result_t
parse_uint(uint32_t *uip, const char *value, uint32_t max, parse_uint(isc_uint32_t *uip, const char *value, isc_uint32_t max,
const char *desc); const char *desc);
isc_result_t isc_result_t
parse_xint(uint32_t *uip, const char *value, uint32_t max, parse_xint(isc_uint32_t *uip, const char *value, isc_uint32_t max,
const char *desc); const char *desc);
isc_result_t isc_result_t
@@ -343,13 +339,13 @@ void
parse_hmac(const char *hmacstr); parse_hmac(const char *hmacstr);
dig_lookup_t * dig_lookup_t *
requeue_lookup(dig_lookup_t *lookold, bool servers); requeue_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
dig_lookup_t * dig_lookup_t *
make_empty_lookup(void); make_empty_lookup(void);
dig_lookup_t * dig_lookup_t *
clone_lookup(dig_lookup_t *lookold, bool servers); clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
dig_server_t * dig_server_t *
make_server(const char *servname, const char *userarg); make_server(const char *servname, const char *userarg);
@@ -373,12 +369,15 @@ destroy_libs(void);
void void
set_search_domain(char *domain); set_search_domain(char *domain);
char *
next_token(char **stringp, const char *delim);
/* /*
* Routines to be defined in dig.c, host.c, and nslookup.c. and * Routines to be defined in dig.c, host.c, and nslookup.c. and
* then assigned to the appropriate function pointer * then assigned to the appropriate function pointer
*/ */
extern isc_result_t extern isc_result_t
(*dighost_printmessage)(dig_query_t *query, dns_message_t *msg, bool headers); (*dighost_printmessage)(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers);
/*%< /*%<
* Print the final result of the lookup. * Print the final result of the lookup.
*/ */
@@ -420,7 +419,7 @@ dig_setup(int argc, char **argv);
* Call to supply new parameters for the next lookup * Call to supply new parameters for the next lookup
*/ */
void void
dig_query_setup(bool, bool, int argc, char **argv); dig_query_setup(isc_boolean_t, isc_boolean_t, int argc, char **argv);
/*%< /*%<
* set the main application event cycle running * set the main application event cycle running
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2004-2007, 2010, 2013-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2004-2007, 2010, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -290,5 +290,5 @@ returns with an exit status of 1 if any query failed, and 0 otherwise\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2004-2007, 2010, 2013-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2004-2007, 2010, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+103 -104
View File
@@ -11,8 +11,6 @@
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
@@ -55,18 +53,18 @@
#endif #endif
#endif #endif
static bool short_form = true, static isc_boolean_t short_form = ISC_TRUE,
tcpmode = false, tcpmode_set = false, tcpmode = ISC_FALSE, tcpmode_set = ISC_FALSE,
identify = false, stats = true, identify = ISC_FALSE, stats = ISC_TRUE,
comments = true, section_question = true, comments = ISC_TRUE, section_question = ISC_TRUE,
section_answer = true, section_authority = true, section_answer = ISC_TRUE, section_authority = ISC_TRUE,
section_additional = true, recurse = true, section_additional = ISC_TRUE, recurse = ISC_TRUE,
aaonly = false, nofail = true, aaonly = ISC_FALSE, nofail = ISC_TRUE,
default_lookups = true, a_noanswer = false; default_lookups = ISC_TRUE, a_noanswer = ISC_FALSE;
static bool interactive; static isc_boolean_t interactive;
static bool in_use = false; static isc_boolean_t in_use = ISC_FALSE;
static char defclass[MXRD] = "IN"; static char defclass[MXRD] = "IN";
static char deftype[MXRD] = "A"; static char deftype[MXRD] = "A";
static isc_event_t *global_event = NULL; static isc_event_t *global_event = NULL;
@@ -215,7 +213,7 @@ printrdata(dns_rdata_t *rdata) {
isc_result_t result; isc_result_t result;
isc_buffer_t *b = NULL; isc_buffer_t *b = NULL;
unsigned int size = 1024; unsigned int size = 1024;
bool done = false; isc_boolean_t done = ISC_FALSE;
if (rdata->type < N_KNOWN_RRTYPES) if (rdata->type < N_KNOWN_RRTYPES)
printf("%s", rtypetext[rdata->type]); printf("%s", rtypetext[rdata->type]);
@@ -230,7 +228,7 @@ printrdata(dns_rdata_t *rdata) {
if (result == ISC_R_SUCCESS) { if (result == ISC_R_SUCCESS) {
printf("%.*s\n", (int)isc_buffer_usedlength(b), printf("%.*s\n", (int)isc_buffer_usedlength(b),
(char *)isc_buffer_base(b)); (char *)isc_buffer_base(b));
done = true; done = ISC_TRUE;
} else if (result != ISC_R_NOSPACE) } else if (result != ISC_R_NOSPACE)
check_result(result, "dns_rdata_totext"); check_result(result, "dns_rdata_totext");
isc_buffer_free(&b); isc_buffer_free(&b);
@@ -239,7 +237,7 @@ printrdata(dns_rdata_t *rdata) {
} }
static isc_result_t static isc_result_t
printsection(dig_query_t *query, dns_message_t *msg, bool headers, printsection(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers,
dns_section_t section) { dns_section_t section) {
isc_result_t result, loopresult; isc_result_t result, loopresult;
dns_name_t *name; dns_name_t *name;
@@ -306,7 +304,7 @@ printsection(dig_query_t *query, dns_message_t *msg, bool headers,
} }
static isc_result_t static isc_result_t
detailsection(dig_query_t *query, dns_message_t *msg, bool headers, detailsection(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers,
dns_section_t section) { dns_section_t section) {
isc_result_t result, loopresult; isc_result_t result, loopresult;
dns_name_t *name; dns_name_t *name;
@@ -431,7 +429,7 @@ chase_cnamechain(dns_message_t *msg, dns_name_t *qname) {
} }
static isc_result_t static isc_result_t
printmessage(dig_query_t *query, dns_message_t *msg, bool headers) { printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
char servtext[ISC_SOCKADDR_FORMATSIZE]; char servtext[ISC_SOCKADDR_FORMATSIZE];
/* I've we've gotten this far, we've reached a server. */ /* I've we've gotten this far, we've reached a server. */
@@ -450,10 +448,10 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
if (!short_form) { if (!short_form) {
puts("------------"); puts("------------");
/* detailheader(query, msg);*/ /* detailheader(query, msg);*/
detailsection(query, msg, true, DNS_SECTION_QUESTION); detailsection(query, msg, ISC_TRUE, DNS_SECTION_QUESTION);
detailsection(query, msg, true, DNS_SECTION_ANSWER); detailsection(query, msg, ISC_TRUE, DNS_SECTION_ANSWER);
detailsection(query, msg, true, DNS_SECTION_AUTHORITY); detailsection(query, msg, ISC_TRUE, DNS_SECTION_AUTHORITY);
detailsection(query, msg, true, DNS_SECTION_ADDITIONAL); detailsection(query, msg, ISC_TRUE, DNS_SECTION_ADDITIONAL);
puts("------------"); puts("------------");
} }
@@ -477,16 +475,17 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
dns_name_t *name; dns_name_t *name;
/* Add AAAA lookup. */ /* Add AAAA lookup. */
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
dns_name_copy(query->lookup->name, name, NULL); dns_name_copy(query->lookup->name, name, NULL);
chase_cnamechain(msg, name); chase_cnamechain(msg, name);
dns_name_format(name, namestr, sizeof(namestr)); dns_name_format(name, namestr, sizeof(namestr));
lookup = clone_lookup(query->lookup, false); lookup = clone_lookup(query->lookup, ISC_FALSE);
if (lookup != NULL) { if (lookup != NULL) {
strlcpy(lookup->textname, namestr, strlcpy(lookup->textname, namestr,
sizeof(lookup->textname)); sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_aaaa; lookup->rdtype = dns_rdatatype_aaaa;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
lookup->origin = NULL; lookup->origin = NULL;
lookup->retries = tries; lookup->retries = tries;
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
@@ -500,7 +499,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
printsection(query, msg, headers, DNS_SECTION_ANSWER); printsection(query, msg, headers, DNS_SECTION_ANSWER);
else { else {
if (default_lookups && query->lookup->rdtype == dns_rdatatype_a) if (default_lookups && query->lookup->rdtype == dns_rdatatype_a)
a_noanswer = true; a_noanswer = ISC_TRUE;
else if (!default_lookups || else if (!default_lookups ||
(query->lookup->rdtype == dns_rdatatype_aaaa && (query->lookup->rdtype == dns_rdatatype_aaaa &&
@@ -522,7 +521,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, bool headers) {
} }
static void static void
show_settings(bool full, bool serv_only) { show_settings(isc_boolean_t full, isc_boolean_t serv_only) {
dig_server_t *srv; dig_server_t *srv;
isc_sockaddr_t sockaddr; isc_sockaddr_t sockaddr;
dig_searchlist_t *listent; dig_searchlist_t *listent;
@@ -567,7 +566,7 @@ show_settings(bool full, bool serv_only) {
printf("\n"); printf("\n");
} }
static bool static isc_boolean_t
testtype(char *typetext) { testtype(char *typetext) {
isc_result_t result; isc_result_t result;
isc_textregion_t tr; isc_textregion_t tr;
@@ -577,14 +576,14 @@ testtype(char *typetext) {
tr.length = strlen(typetext); tr.length = strlen(typetext);
result = dns_rdatatype_fromtext(&rdtype, &tr); result = dns_rdatatype_fromtext(&rdtype, &tr);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
return (true); return (ISC_TRUE);
else { else {
printf("unknown query type: %s\n", typetext); printf("unknown query type: %s\n", typetext);
return (false); return (ISC_FALSE);
} }
} }
static bool static isc_boolean_t
testclass(char *typetext) { testclass(char *typetext) {
isc_result_t result; isc_result_t result;
isc_textregion_t tr; isc_textregion_t tr;
@@ -594,24 +593,24 @@ testclass(char *typetext) {
tr.length = strlen(typetext); tr.length = strlen(typetext);
result = dns_rdataclass_fromtext(&rdclass, &tr); result = dns_rdataclass_fromtext(&rdclass, &tr);
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
return (true); return (ISC_TRUE);
else { else {
printf("unknown query class: %s\n", typetext); printf("unknown query class: %s\n", typetext);
return (false); return (ISC_FALSE);
} }
} }
static void static void
set_port(const char *value) { set_port(const char *value) {
uint32_t n; isc_uint32_t n;
isc_result_t result = parse_uint(&n, value, 65535, "port"); isc_result_t result = parse_uint(&n, value, 65535, "port");
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
port = (uint16_t) n; port = (isc_uint16_t) n;
} }
static void static void
set_timeout(const char *value) { set_timeout(const char *value) {
uint32_t n; isc_uint32_t n;
isc_result_t result = parse_uint(&n, value, UINT_MAX, "timeout"); isc_result_t result = parse_uint(&n, value, UINT_MAX, "timeout");
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
timeout = n; timeout = n;
@@ -619,7 +618,7 @@ set_timeout(const char *value) {
static void static void
set_tries(const char *value) { set_tries(const char *value) {
uint32_t n; isc_uint32_t n;
isc_result_t result = parse_uint(&n, value, INT_MAX, "tries"); isc_result_t result = parse_uint(&n, value, INT_MAX, "tries");
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
tries = n; tries = n;
@@ -627,7 +626,7 @@ set_tries(const char *value) {
static void static void
set_ndots(const char *value) { set_ndots(const char *value) {
uint32_t n; isc_uint32_t n;
isc_result_t result = parse_uint(&n, value, 128, "ndots"); isc_result_t result = parse_uint(&n, value, 128, "ndots");
if (result == ISC_R_SUCCESS) if (result == ISC_R_SUCCESS)
ndots = n; ndots = n;
@@ -646,7 +645,7 @@ setoption(char *opt) {
((l >= N) && (l < sizeof(A)) && (strncasecmp(opt, A, l) == 0)) ((l >= N) && (l < sizeof(A)) && (strncasecmp(opt, A, l) == 0))
if (CHECKOPT("all", 3)) { if (CHECKOPT("all", 3)) {
show_settings(true, false); show_settings(ISC_TRUE, ISC_FALSE);
} else if (strncasecmp(opt, "class=", 6) == 0) { } else if (strncasecmp(opt, "class=", 6) == 0) {
if (testclass(&opt[6])) if (testclass(&opt[6]))
strlcpy(defclass, &opt[6], sizeof(defclass)); strlcpy(defclass, &opt[6], sizeof(defclass));
@@ -656,41 +655,41 @@ setoption(char *opt) {
} else if (strncasecmp(opt, "type=", 5) == 0) { } else if (strncasecmp(opt, "type=", 5) == 0) {
if (testtype(&opt[5])) { if (testtype(&opt[5])) {
strlcpy(deftype, &opt[5], sizeof(deftype)); strlcpy(deftype, &opt[5], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "ty=", 3) == 0) { } else if (strncasecmp(opt, "ty=", 3) == 0) {
if (testtype(&opt[3])) { if (testtype(&opt[3])) {
strlcpy(deftype, &opt[3], sizeof(deftype)); strlcpy(deftype, &opt[3], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "querytype=", 10) == 0) { } else if (strncasecmp(opt, "querytype=", 10) == 0) {
if (testtype(&opt[10])) { if (testtype(&opt[10])) {
strlcpy(deftype, &opt[10], sizeof(deftype)); strlcpy(deftype, &opt[10], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "query=", 6) == 0) { } else if (strncasecmp(opt, "query=", 6) == 0) {
if (testtype(&opt[6])) { if (testtype(&opt[6])) {
strlcpy(deftype, &opt[6], sizeof(deftype)); strlcpy(deftype, &opt[6], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "qu=", 3) == 0) { } else if (strncasecmp(opt, "qu=", 3) == 0) {
if (testtype(&opt[3])) { if (testtype(&opt[3])) {
strlcpy(deftype, &opt[3], sizeof(deftype)); strlcpy(deftype, &opt[3], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "q=", 2) == 0) { } else if (strncasecmp(opt, "q=", 2) == 0) {
if (testtype(&opt[2])) { if (testtype(&opt[2])) {
strlcpy(deftype, &opt[2], sizeof(deftype)); strlcpy(deftype, &opt[2], sizeof(deftype));
default_lookups = false; default_lookups = ISC_FALSE;
} }
} else if (strncasecmp(opt, "domain=", 7) == 0) { } else if (strncasecmp(opt, "domain=", 7) == 0) {
strlcpy(domainopt, &opt[7], sizeof(domainopt)); strlcpy(domainopt, &opt[7], sizeof(domainopt));
set_search_domain(domainopt); set_search_domain(domainopt);
usesearch = true; usesearch = ISC_TRUE;
} else if (strncasecmp(opt, "do=", 3) == 0) { } else if (strncasecmp(opt, "do=", 3) == 0) {
strlcpy(domainopt, &opt[3], sizeof(domainopt)); strlcpy(domainopt, &opt[3], sizeof(domainopt));
set_search_domain(domainopt); set_search_domain(domainopt);
usesearch = true; usesearch = ISC_TRUE;
} else if (strncasecmp(opt, "port=", 5) == 0) { } else if (strncasecmp(opt, "port=", 5) == 0) {
set_port(&opt[5]); set_port(&opt[5]);
} else if (strncasecmp(opt, "po=", 3) == 0) { } else if (strncasecmp(opt, "po=", 3) == 0) {
@@ -700,43 +699,43 @@ setoption(char *opt) {
} else if (strncasecmp(opt, "t=", 2) == 0) { } else if (strncasecmp(opt, "t=", 2) == 0) {
set_timeout(&opt[2]); set_timeout(&opt[2]);
} else if (CHECKOPT("recurse", 3)) { } else if (CHECKOPT("recurse", 3)) {
recurse = true; recurse = ISC_TRUE;
} else if (CHECKOPT("norecurse", 5)) { } else if (CHECKOPT("norecurse", 5)) {
recurse = false; recurse = ISC_FALSE;
} else if (strncasecmp(opt, "retry=", 6) == 0) { } else if (strncasecmp(opt, "retry=", 6) == 0) {
set_tries(&opt[6]); set_tries(&opt[6]);
} else if (strncasecmp(opt, "ret=", 4) == 0) { } else if (strncasecmp(opt, "ret=", 4) == 0) {
set_tries(&opt[4]); set_tries(&opt[4]);
} else if (CHECKOPT("defname", 3)) { } else if (CHECKOPT("defname", 3)) {
usesearch = true; usesearch = ISC_TRUE;
} else if (CHECKOPT("nodefname", 5)) { } else if (CHECKOPT("nodefname", 5)) {
usesearch = false; usesearch = ISC_FALSE;
} else if (CHECKOPT("vc", 2)) { } else if (CHECKOPT("vc", 2) == 0) {
tcpmode = true; tcpmode = ISC_TRUE;
tcpmode_set = true; tcpmode_set = ISC_TRUE;
} else if (CHECKOPT("novc", 4)) { } else if (CHECKOPT("novc", 4) == 0) {
tcpmode = false; tcpmode = ISC_FALSE;
tcpmode_set = true; tcpmode_set = ISC_TRUE;
} else if (CHECKOPT("debug", 3)) { } else if (CHECKOPT("debug", 3) == 0) {
short_form = false; short_form = ISC_FALSE;
showsearch = true; showsearch = ISC_TRUE;
} else if (CHECKOPT("nodebug", 5)) { } else if (CHECKOPT("nodebug", 5) == 0) {
short_form = true; short_form = ISC_TRUE;
showsearch = false; showsearch = ISC_FALSE;
} else if (CHECKOPT("d2", 2)) { } else if (CHECKOPT("d2", 2) == 0) {
debugging = true; debugging = ISC_TRUE;
} else if (CHECKOPT("nod2", 4)) { } else if (CHECKOPT("nod2", 4) == 0) {
debugging = false; debugging = ISC_FALSE;
} else if (CHECKOPT("search", 3)) { } else if (CHECKOPT("search", 3) == 0) {
usesearch = true; usesearch = ISC_TRUE;
} else if (CHECKOPT("nosearch", 5)) { } else if (CHECKOPT("nosearch", 5) == 0) {
usesearch = false; usesearch = ISC_FALSE;
} else if (CHECKOPT("sil", 3)) { } else if (CHECKOPT("sil", 3) == 0) {
/* deprecation_msg = false; */ /* deprecation_msg = ISC_FALSE; */
} else if (CHECKOPT("fail", 3)) { } else if (CHECKOPT("fail", 3) == 0) {
nofail=false; nofail=ISC_FALSE;
} else if (CHECKOPT("nofail", 5)) { } else if (CHECKOPT("nofail", 5) == 0) {
nofail=true; nofail=ISC_TRUE;
} else if (strncasecmp(opt, "ndots=", 6) == 0) { } else if (strncasecmp(opt, "ndots=", 6) == 0) {
set_ndots(&opt[6]); set_ndots(&opt[6]);
} else { } else {
@@ -755,7 +754,7 @@ addlookup(char *opt) {
debug("addlookup()"); debug("addlookup()");
a_noanswer = false; a_noanswer = ISC_FALSE;
tr.base = deftype; tr.base = deftype;
tr.length = strlen(deftype); tr.length = strlen(deftype);
@@ -772,21 +771,21 @@ addlookup(char *opt) {
rdclass = dns_rdataclass_in; rdclass = dns_rdataclass_in;
} }
lookup = make_empty_lookup(); lookup = make_empty_lookup();
if (get_reverse(store, sizeof(store), opt, lookup->ip6_int, true) if (get_reverse(store, sizeof(store), opt, lookup->ip6_int, ISC_TRUE)
== ISC_R_SUCCESS) { == ISC_R_SUCCESS) {
strlcpy(lookup->textname, store, sizeof(lookup->textname)); strlcpy(lookup->textname, store, sizeof(lookup->textname));
lookup->rdtype = dns_rdatatype_ptr; lookup->rdtype = dns_rdatatype_ptr;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
} else { } else {
strlcpy(lookup->textname, opt, sizeof(lookup->textname)); strlcpy(lookup->textname, opt, sizeof(lookup->textname));
lookup->rdtype = rdtype; lookup->rdtype = rdtype;
lookup->rdtypeset = true; lookup->rdtypeset = ISC_TRUE;
} }
lookup->rdclass = rdclass; lookup->rdclass = rdclass;
lookup->rdclassset = true; lookup->rdclassset = ISC_TRUE;
lookup->trace = false; lookup->trace = ISC_FALSE;
lookup->trace_root = lookup->trace; lookup->trace_root = lookup->trace;
lookup->ns_search_only = false; lookup->ns_search_only = ISC_FALSE;
lookup->identify = identify; lookup->identify = identify;
lookup->recurse = recurse; lookup->recurse = recurse;
lookup->aaonly = aaonly; lookup->aaonly = aaonly;
@@ -794,7 +793,7 @@ addlookup(char *opt) {
lookup->udpsize = 0; lookup->udpsize = 0;
lookup->comments = comments; lookup->comments = comments;
if (lookup->rdtype == dns_rdatatype_any && !tcpmode_set) if (lookup->rdtype == dns_rdatatype_any && !tcpmode_set)
lookup->tcp_mode = true; lookup->tcp_mode = ISC_TRUE;
else else
lookup->tcp_mode = tcpmode; lookup->tcp_mode = tcpmode;
lookup->stats = stats; lookup->stats = stats;
@@ -802,9 +801,9 @@ addlookup(char *opt) {
lookup->section_answer = section_answer; lookup->section_answer = section_answer;
lookup->section_authority = section_authority; lookup->section_authority = section_authority;
lookup->section_additional = section_additional; lookup->section_additional = section_additional;
lookup->new_search = true; lookup->new_search = ISC_TRUE;
if (nofail) if (nofail)
lookup->servfail_stops = false; lookup->servfail_stops = ISC_FALSE;
ISC_LIST_INIT(lookup->q); ISC_LIST_INIT(lookup->q);
ISC_LINK_INIT(lookup, link); ISC_LINK_INIT(lookup, link);
ISC_LIST_APPEND(lookup_list, lookup, link); ISC_LIST_APPEND(lookup_list, lookup, link);
@@ -815,12 +814,12 @@ addlookup(char *opt) {
static void static void
do_next_command(char *input) { do_next_command(char *input) {
char *ptr, *arg, *last; char *ptr, *arg;
if ((ptr = strtok_r(input, " \t\r\n", &last)) == NULL) { ptr = next_token(&input, " \t\r\n");
if (ptr == NULL)
return; return;
} arg = next_token(&input, " \t\r\n");
arg = strtok_r(NULL, " \t\r\n", &last);
if ((strcasecmp(ptr, "set") == 0) && if ((strcasecmp(ptr, "set") == 0) &&
(arg != NULL)) (arg != NULL))
setoption(arg); setoption(arg);
@@ -828,11 +827,11 @@ do_next_command(char *input) {
(strcasecmp(ptr, "lserver") == 0)) { (strcasecmp(ptr, "lserver") == 0)) {
isc_app_block(); isc_app_block();
set_nameserver(arg); set_nameserver(arg);
check_ra = false; check_ra = ISC_FALSE;
isc_app_unblock(); isc_app_unblock();
show_settings(true, true); show_settings(ISC_TRUE, ISC_TRUE);
} else if (strcasecmp(ptr, "exit") == 0) { } else if (strcasecmp(ptr, "exit") == 0) {
in_use = false; in_use = ISC_FALSE;
} else if (strcasecmp(ptr, "help") == 0 || } else if (strcasecmp(ptr, "help") == 0 ||
strcasecmp(ptr, "?") == 0) { strcasecmp(ptr, "?") == 0) {
printf("The '%s' command is not yet implemented.\n", ptr); printf("The '%s' command is not yet implemented.\n", ptr);
@@ -869,7 +868,7 @@ get_next_command(void) {
ptr = fgets(buf, COMMSIZE, stdin); ptr = fgets(buf, COMMSIZE, stdin);
isc_app_unblock(); isc_app_unblock();
if (ptr == NULL) { if (ptr == NULL) {
in_use = false; in_use = ISC_FALSE;
} else } else
do_next_command(ptr); do_next_command(ptr);
#ifdef HAVE_READLINE #ifdef HAVE_READLINE
@@ -881,9 +880,9 @@ get_next_command(void) {
static void static void
parse_args(int argc, char **argv) { parse_args(int argc, char **argv) {
bool have_lookup = false; isc_boolean_t have_lookup = ISC_FALSE;
usesearch = true; usesearch = ISC_TRUE;
for (argc--, argv++; argc > 0; argc--, argv++) { for (argc--, argv++; argc > 0; argc--, argv++) {
debug("main parsing %s", argv[0]); debug("main parsing %s", argv[0]);
if (argv[0][0] == '-') { if (argv[0][0] == '-') {
@@ -893,15 +892,15 @@ parse_args(int argc, char **argv) {
} else if (argv[0][1] != 0) { } else if (argv[0][1] != 0) {
setoption(&argv[0][1]); setoption(&argv[0][1]);
} else } else
have_lookup = true; have_lookup = ISC_TRUE;
} else { } else {
if (!have_lookup) { if (!have_lookup) {
have_lookup = true; have_lookup = ISC_TRUE;
in_use = true; in_use = ISC_TRUE;
addlookup(argv[0]); addlookup(argv[0]);
} else { } else {
set_nameserver(argv[0]); set_nameserver(argv[0]);
check_ra = false; check_ra = ISC_FALSE;
} }
} }
} }
@@ -972,13 +971,13 @@ int
main(int argc, char **argv) { main(int argc, char **argv) {
isc_result_t result; isc_result_t result;
interactive = isatty(0); interactive = ISC_TF(isatty(0));
ISC_LIST_INIT(lookup_list); ISC_LIST_INIT(lookup_list);
ISC_LIST_INIT(server_list); ISC_LIST_INIT(server_list);
ISC_LIST_INIT(search_list); ISC_LIST_INIT(search_list);
check_ra = true; check_ra = ISC_TRUE;
/* setup dighost callbacks */ /* setup dighost callbacks */
dighost_printmessage = printmessage; dighost_printmessage = printmessage;
@@ -992,7 +991,7 @@ main(int argc, char **argv) {
setup_libs(); setup_libs();
progname = argv[0]; progname = argv[0];
setup_system(false, false); setup_system(ISC_FALSE, ISC_FALSE);
parse_args(argc, argv); parse_args(argc, argv);
if (keyfile[0] != 0) if (keyfile[0] != 0)
setup_file_key(); setup_file_key();
@@ -1006,7 +1005,7 @@ main(int argc, char **argv) {
else else
result = isc_app_onrun(mctx, global_task, getinput, NULL); result = isc_app_onrun(mctx, global_task, getinput, NULL);
check_result(result, "isc_app_onrun"); check_result(result, "isc_app_onrun");
in_use = !in_use; in_use = ISC_TF(!in_use);
(void)isc_app_run(); (void)isc_app_run();
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2004-2007, 2010, 2013-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2004-2007, 2010, 2013-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+4 -4
View File
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -68,7 +68,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@dighost.lib;libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;@IDN_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dighost.lib;libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;@IDN_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -79,7 +79,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -98,7 +98,7 @@
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@dighost.lib;libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;@IDN_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dighost.lib;libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;@IDN_LIB@ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
+2 -2
View File
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -77,7 +77,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
+4 -4
View File
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -68,7 +68,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@dighost.lib;@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dighost.lib;@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -79,7 +79,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -98,7 +98,7 @@
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@dighost.lib;@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dighost.lib;@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
+4 -4
View File
@@ -53,7 +53,7 @@
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;USE_READLINE_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@USE_READLINE_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
<AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation> <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
@@ -68,7 +68,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@@READLINE_LIBD@@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>@READLINE_LIBD@@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
@@ -79,7 +79,7 @@
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking> <FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions> <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;USE_READLINE_STATIC;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;@CRYPTO@USE_READLINE_STATIC;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization> <WholeProgramOptimization>false</WholeProgramOptimization>
<StringPooling>true</StringPooling> <StringPooling>true</StringPooling>
@@ -98,7 +98,7 @@
<OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile> <OutputFile>..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration> <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\isccfg\win32\$(Configuration);..\..\..\lib\irs\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);..\..\..\lib\bind9\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>@OPENSSL_LIB@@READLINE_LIB@@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>@READLINE_LIB@@IDN_LIB@libisc.lib;libisccfg.lib;libirs.lib;libdns.lib;libbind9.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
+5 -4
View File
@@ -15,14 +15,15 @@ VERSION=@BIND9_VERSION@
@BIND9_MAKE_INCLUDES@ @BIND9_MAKE_INCLUDES@
CINCLUDES = ${DNS_INCLUDES} ${ISC_INCLUDES} @OPENSSL_INCLUDES@ CINCLUDES = ${DNS_INCLUDES} ${ISC_INCLUDES} @DST_OPENSSL_INC@
CDEFINES = -DVERSION=\"${VERSION}\" CDEFINES = -DVERSION=\"${VERSION}\" @USE_PKCS11@ @PKCS11_ENGINE@ \
@CRYPTO@ -DPK11_LIB_LOCATION=\"@PKCS11_PROVIDER@\"
CWARNINGS = CWARNINGS =
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@ DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@ ISCLIBS = ../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@
ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @OPENSSL_LIBS@ ISCNOSYMLIBS = ../../lib/isc/libisc-nosymtbl.@A@ @ISC_OPENSSL_LIBS@
DNSDEPLIBS = ../../lib/dns/libdns.@A@ DNSDEPLIBS = ../../lib/dns/libdns.@A@
ISCDEPLIBS = ../../lib/isc/libisc.@A@ ISCDEPLIBS = ../../lib/isc/libisc.@A@
+1 -1
View File
@@ -102,7 +102,7 @@ Specify a digest algorithm to use when converting CDNSKEY records to DS records\
.sp .sp
The The
\fIalgorithm\fR \fIalgorithm\fR
must be one of SHA\-1 (SHA1), SHA\-256 (SHA256), or SHA\-384 (SHA384)\&. These values are case insensitive\&. If no algorithm is specified, the default is SHA\-256\&. must be one of SHA\-1 (SHA1), SHA\-256 (SHA256), GOST, or SHA\-384 (SHA384)\&. These values are case insensitive\&. If no algorithm is specified, the default is SHA\-256\&.
.RE .RE
.PP .PP
\-c \fIclass\fR \-c \fIclass\fR
+70 -61
View File
@@ -19,12 +19,11 @@
#include <config.h> #include <config.h>
#include <errno.h> #include <errno.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/mem.h> #include <isc/mem.h>
@@ -55,14 +54,14 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
#include "dnssectool.h" #include "dnssectool.h"
#ifndef PATH_MAX #ifndef PATH_MAX
#define PATH_MAX 1024 /* WIN32, and others don't define this. */ #define PATH_MAX 1024 /* AIX, WIN32, and others don't define this. */
#endif #endif
const char *program = "dnssec-cds"; const char *program = "dnssec-cds";
@@ -73,6 +72,7 @@ int verbose;
*/ */
static isc_log_t *lctx = NULL; static isc_log_t *lctx = NULL;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static isc_entropy_t *ectx = NULL;
/* /*
* The domain we are working on * The domain we are working on
@@ -86,7 +86,7 @@ static dns_rdataclass_t rdclass = dns_rdataclass_in;
* List of digest types used by ds_from_cdnskey(), filled in by add_dtype() * List of digest types used by ds_from_cdnskey(), filled in by add_dtype()
* from -a arguments. The size of the array is an arbitrary limit. * from -a arguments. The size of the array is an arbitrary limit.
*/ */
static uint8_t dtype[8]; static isc_uint8_t dtype[8];
static const char *startstr = NULL; /* from which we derive notbefore */ static const char *startstr = NULL; /* from which we derive notbefore */
static isc_stdtime_t notbefore = 0; /* restrict sig inception times */ static isc_stdtime_t notbefore = 0; /* restrict sig inception times */
@@ -129,7 +129,7 @@ static int nkey; /* number of child zone DNSKEY records */
typedef struct keyinfo { typedef struct keyinfo {
dns_rdata_t rdata; dns_rdata_t rdata;
dst_key_t *dst; dst_key_t *dst;
uint8_t algo; isc_uint8_t algo;
dns_keytag_t tag; dns_keytag_t tag;
} keyinfo_t; } keyinfo_t;
@@ -173,7 +173,8 @@ initname(char *setname) {
isc_result_t result; isc_result_t result;
isc_buffer_t buf; isc_buffer_t buf;
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
namestr = setname; namestr = setname;
isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_init(&buf, setname, strlen(setname));
@@ -253,14 +254,14 @@ load_db(const char *filename, dns_db_t **dbp, dns_dbnode_t **nodep) {
rdclass, 0, NULL, dbp); rdclass, 0, NULL, dbp);
check_result(result, "dns_db_create()"); check_result(result, "dns_db_create()");
result = dns_db_load(*dbp, filename, result = dns_db_load3(*dbp, filename,
dns_masterformat_text, DNS_MASTER_HINT); dns_masterformat_text, DNS_MASTER_HINT);
if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) { if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) {
fatal("can't load %s: %s", filename, fatal("can't load %s: %s", filename,
isc_result_totext(result)); isc_result_totext(result));
} }
result = dns_db_findnode(*dbp, name, false, nodep); result = dns_db_findnode(*dbp, name, ISC_FALSE, nodep);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
fatal("can't find %s node in %s", namestr, filename); fatal("can't find %s node in %s", namestr, filename);
} }
@@ -314,7 +315,7 @@ get_dsset_name(char *filename, size_t size,
} }
isc_buffer_putstr(&buf, prefix); isc_buffer_putstr(&buf, prefix);
result = dns_name_tofilenametext(name, false, &buf); result = dns_name_tofilenametext(name, ISC_FALSE, &buf);
check_result(result, "dns_name_tofilenametext()"); check_result(result, "dns_name_tofilenametext()");
if (isc_buffer_availablelength(&buf) == 0) { if (isc_buffer_availablelength(&buf) == 0) {
fatal("%s: pathname too long", path); fatal("%s: pathname too long", path);
@@ -378,9 +379,9 @@ formatset(dns_rdataset_t *rdataset) {
* which just separates fields with spaces. The huge tab stop width * which just separates fields with spaces. The huge tab stop width
* eliminates any tab characters. * eliminates any tab characters.
*/ */
result = dns_master_stylecreate(&style, styleflags, result = dns_master_stylecreate2(&style, styleflags,
0, 0, 0, 0, 0, 1000000, 0, 0, 0, 0, 0, 0, 1000000, 0,
mctx); mctx);
check_result(result, "dns_master_stylecreate2 failed"); check_result(result, "dns_master_stylecreate2 failed");
result = isc_buffer_allocate(mctx, &buf, MAX_CDS_RDATA_TEXT_SIZE); result = isc_buffer_allocate(mctx, &buf, MAX_CDS_RDATA_TEXT_SIZE);
@@ -402,7 +403,7 @@ formatset(dns_rdataset_t *rdataset) {
static void static void
write_parent_set(const char *path, const char *inplace, write_parent_set(const char *path, const char *inplace,
bool nsupdate, dns_rdataset_t *rdataset) isc_boolean_t nsupdate, dns_rdataset_t *rdataset)
{ {
isc_result_t result; isc_result_t result;
isc_buffer_t *buf = NULL; isc_buffer_t *buf = NULL;
@@ -469,7 +470,7 @@ typedef enum { LOOSE, TIGHT } strictness_t;
/* /*
* Find out if any (C)DS record matches a particular (C)DNSKEY. * Find out if any (C)DS record matches a particular (C)DNSKEY.
*/ */
static bool static isc_boolean_t
match_key_dsset(keyinfo_t *ki, dns_rdataset_t *dsset, strictness_t strictness) match_key_dsset(keyinfo_t *ki, dns_rdataset_t *dsset, strictness_t strictness)
{ {
isc_result_t result; isc_result_t result;
@@ -483,7 +484,7 @@ match_key_dsset(keyinfo_t *ki, dns_rdataset_t *dsset, strictness_t strictness)
dns_rdata_t dsrdata = DNS_RDATA_INIT; dns_rdata_t dsrdata = DNS_RDATA_INIT;
dns_rdata_t newdsrdata = DNS_RDATA_INIT; dns_rdata_t newdsrdata = DNS_RDATA_INIT;
dns_rdatatype_t keytype; dns_rdatatype_t keytype;
bool c; isc_boolean_t c;
dns_rdataset_current(dsset, &dsrdata); dns_rdataset_current(dsset, &dsrdata);
result = dns_rdata_tostruct(&dsrdata, &ds, NULL); result = dns_rdata_tostruct(&dsrdata, &ds, NULL);
@@ -513,13 +514,13 @@ match_key_dsset(keyinfo_t *ki, dns_rdataset_t *dsset, strictness_t strictness)
vbprintf(1, "found matching %s %d %d %d\n", vbprintf(1, "found matching %s %d %d %d\n",
c ? "CDS" : "DS", c ? "CDS" : "DS",
ds.key_tag, ds.algorithm, ds.digest_type); ds.key_tag, ds.algorithm, ds.digest_type);
return (true); return (ISC_TRUE);
} else if (strictness == TIGHT) { } else if (strictness == TIGHT) {
vbprintf(0, "key does not match %s %d %d %d " vbprintf(0, "key does not match %s %d %d %d "
"when it looks like it should\n", "when it looks like it should\n",
c ? "CDS" : "DS", c ? "CDS" : "DS",
ds.key_tag, ds.algorithm, ds.digest_type); ds.key_tag, ds.algorithm, ds.digest_type);
return (false); return (ISC_FALSE);
} }
} }
@@ -530,7 +531,7 @@ match_key_dsset(keyinfo_t *ki, dns_rdataset_t *dsset, strictness_t strictness)
? "CDNSKEY" : "DNSKEY", ? "CDNSKEY" : "DNSKEY",
ki->tag, ki->algo); ki->tag, ki->algo);
return (false); return (ISC_FALSE);
} }
/* /*
@@ -619,12 +620,12 @@ free_keytable(keyinfo_t **keytable_p) {
* otherwise the key algorithm. This is used by the signature coverage * otherwise the key algorithm. This is used by the signature coverage
* check functions below. * check functions below.
*/ */
static uint8_t * static isc_uint8_t *
matching_sigs(keyinfo_t *keytbl, dns_rdataset_t *rdataset, matching_sigs(keyinfo_t *keytbl, dns_rdataset_t *rdataset,
dns_rdataset_t *sigset) dns_rdataset_t *sigset)
{ {
isc_result_t result; isc_result_t result;
uint8_t *algo; isc_uint8_t *algo;
int i; int i;
algo = isc_mem_get(mctx, nkey); algo = isc_mem_get(mctx, nkey);
@@ -670,11 +671,8 @@ matching_sigs(keyinfo_t *keytbl, dns_rdataset_t *rdataset,
} }
result = dns_dnssec_verify(name, rdataset, ki->dst, result = dns_dnssec_verify(name, rdataset, ki->dst,
false, 0, mctx, ISC_FALSE, mctx, &sigrdata);
&sigrdata, NULL); if (result != ISC_R_SUCCESS) {
if (result != ISC_R_SUCCESS &&
result != DNS_R_FROMWILDCARD) {
vbprintf(1, "skip RRSIG by key %d:" vbprintf(1, "skip RRSIG by key %d:"
" verification failed: %s\n", " verification failed: %s\n",
sig.keyid, isc_result_totext(result)); sig.keyid, isc_result_totext(result));
@@ -706,13 +704,13 @@ matching_sigs(keyinfo_t *keytbl, dns_rdataset_t *rdataset,
* Consume the result of matching_sigs(). When checking records * Consume the result of matching_sigs(). When checking records
* fetched from the child zone, any working signature is enough. * fetched from the child zone, any working signature is enough.
*/ */
static bool static isc_boolean_t
signed_loose(uint8_t *algo) { signed_loose(isc_uint8_t *algo) {
bool ok = false; isc_boolean_t ok = ISC_FALSE;
int i; int i;
for (i = 0; i < nkey; i++) { for (i = 0; i < nkey; i++) {
if (algo[i] != 0) { if (algo[i] != 0) {
ok = true; ok = ISC_TRUE;
} }
} }
isc_mem_put(mctx, algo, nkey); isc_mem_put(mctx, algo, nkey);
@@ -725,10 +723,10 @@ signed_loose(uint8_t *algo) {
* key algorithm in the DS RRset must have a signature in the DNSKEY * key algorithm in the DS RRset must have a signature in the DNSKEY
* RRset. * RRset.
*/ */
static bool static isc_boolean_t
signed_strict(dns_rdataset_t *dsset, uint8_t *algo) { signed_strict(dns_rdataset_t *dsset, isc_uint8_t *algo) {
isc_result_t result; isc_result_t result;
bool all_ok = true; isc_boolean_t all_ok = ISC_TRUE;
for (result = dns_rdataset_first(dsset); for (result = dns_rdataset_first(dsset);
result == ISC_R_SUCCESS; result == ISC_R_SUCCESS;
@@ -736,23 +734,23 @@ signed_strict(dns_rdataset_t *dsset, uint8_t *algo) {
{ {
dns_rdata_t dsrdata = DNS_RDATA_INIT; dns_rdata_t dsrdata = DNS_RDATA_INIT;
dns_rdata_ds_t ds; dns_rdata_ds_t ds;
bool ds_ok; isc_boolean_t ds_ok;
int i; int i;
dns_rdataset_current(dsset, &dsrdata); dns_rdataset_current(dsset, &dsrdata);
result = dns_rdata_tostruct(&dsrdata, &ds, NULL); result = dns_rdata_tostruct(&dsrdata, &ds, NULL);
check_result(result, "dns_rdata_tostruct(DS)"); check_result(result, "dns_rdata_tostruct(DS)");
ds_ok = false; ds_ok = ISC_FALSE;
for (i = 0; i < nkey; i++) { for (i = 0; i < nkey; i++) {
if (algo[i] == ds.algorithm) { if (algo[i] == ds.algorithm) {
ds_ok = true; ds_ok = ISC_TRUE;
} }
} }
if (!ds_ok) { if (!ds_ok) {
vbprintf(0, "missing signature for algorithm %d " vbprintf(0, "missing signature for algorithm %d "
"(key %d)\n", ds.algorithm, ds.key_tag); "(key %d)\n", ds.algorithm, ds.key_tag);
all_ok = false; all_ok = ISC_FALSE;
} }
} }
@@ -850,14 +848,14 @@ ds_from_cdnskey(dns_rdatalist_t *dslist, isc_buffer_t *buf,
*/ */
static int static int
cmp_dtype(const void *ap, const void *bp) { cmp_dtype(const void *ap, const void *bp) {
int a = *(const uint8_t *)ap; int a = *(const isc_uint8_t *)ap;
int b = *(const uint8_t *)bp; int b = *(const isc_uint8_t *)bp;
return (a - b); return (a - b);
} }
static void static void
add_dtype(const char *dn) { add_dtype(const char *dn) {
uint8_t dt; isc_uint8_t dt;
unsigned i, n; unsigned i, n;
dt = strtodsdigest(dn); dt = strtodsdigest(dn);
@@ -874,7 +872,7 @@ add_dtype(const char *dn) {
static void static void
make_new_ds_set(ds_maker_func_t *ds_from_rdata, make_new_ds_set(ds_maker_func_t *ds_from_rdata,
uint32_t ttl, dns_rdataset_t *rdset) isc_uint32_t ttl, dns_rdataset_t *rdset)
{ {
unsigned int size = 16; unsigned int size = 16;
for (;;) { for (;;) {
@@ -936,14 +934,14 @@ rdata_cmp(const void *rdata1, const void *rdata2) {
* Ensure that every key identified by the DS RRset has the same set of * Ensure that every key identified by the DS RRset has the same set of
* digest types. * digest types.
*/ */
static bool static isc_boolean_t
consistent_digests(dns_rdataset_t *dsset) { consistent_digests(dns_rdataset_t *dsset) {
isc_result_t result; isc_result_t result;
dns_rdata_t *arrdata; dns_rdata_t *arrdata;
dns_rdata_ds_t *ds; dns_rdata_ds_t *ds;
dns_keytag_t key_tag; dns_keytag_t key_tag;
uint8_t algorithm; isc_uint8_t algorithm;
bool match; isc_boolean_t match;
int i, j, n, d; int i, j, n, d;
/* /*
@@ -997,7 +995,7 @@ consistent_digests(dns_rdataset_t *dsset) {
/* /*
* Check subsequent keys match the first one * Check subsequent keys match the first one
*/ */
match = true; match = ISC_TRUE;
while (i < n) { while (i < n) {
key_tag = ds[i].key_tag; key_tag = ds[i].key_tag;
algorithm = ds[i].algorithm; algorithm = ds[i].algorithm;
@@ -1006,7 +1004,7 @@ consistent_digests(dns_rdataset_t *dsset) {
ds[i+j].algorithm != algorithm || ds[i+j].algorithm != algorithm ||
ds[i+j].digest_type != ds[j].digest_type) ds[i+j].digest_type != ds[j].digest_type)
{ {
match = false; match = ISC_FALSE;
} }
} }
i += d; i += d;
@@ -1041,7 +1039,7 @@ print_diff(const char *cmd, dns_rdataset_t *rdataset) {
} }
static void static void
update_diff(const char *cmd, uint32_t ttl, update_diff(const char *cmd, isc_uint32_t ttl,
dns_rdataset_t *addset, dns_rdataset_t *delset) dns_rdataset_t *addset, dns_rdataset_t *delset)
{ {
isc_result_t result; isc_result_t result;
@@ -1049,7 +1047,7 @@ update_diff(const char *cmd, uint32_t ttl,
dns_dbnode_t *node; dns_dbnode_t *node;
dns_dbversion_t *ver; dns_dbversion_t *ver;
dns_rdataset_t diffset; dns_rdataset_t diffset;
uint32_t save; isc_uint32_t save;
db = NULL; db = NULL;
result = dns_db_create(mctx, "rbt", name, dns_dbtype_zone, result = dns_db_create(mctx, "rbt", name, dns_dbtype_zone,
@@ -1061,7 +1059,7 @@ update_diff(const char *cmd, uint32_t ttl,
check_result(result, "dns_db_newversion()"); check_result(result, "dns_db_newversion()");
node = NULL; node = NULL;
result = dns_db_findnode(db, name, true, &node); result = dns_db_findnode(db, name, ISC_TRUE, &node);
check_result(result, "dns_db_findnode()"); check_result(result, "dns_db_findnode()");
dns_rdataset_init(&diffset); dns_rdataset_init(&diffset);
@@ -1085,12 +1083,12 @@ update_diff(const char *cmd, uint32_t ttl,
} }
dns_db_detachnode(db, &node); dns_db_detachnode(db, &node);
dns_db_closeversion(db, &ver, false); dns_db_closeversion(db, &ver, ISC_FALSE);
dns_db_detach(&db); dns_db_detach(&db);
} }
static void static void
nsdiff(uint32_t ttl, dns_rdataset_t *oldset, dns_rdataset_t *newset) { nsdiff(isc_uint32_t ttl, dns_rdataset_t *oldset, dns_rdataset_t *newset) {
if (ttl == 0) { if (ttl == 0) {
vbprintf(1, "warning: no TTL in nsupdate script\n"); vbprintf(1, "warning: no TTL in nsupdate script\n");
} }
@@ -1117,7 +1115,7 @@ usage(void) {
program); program);
fprintf(stderr, "Version: %s\n", VERSION); fprintf(stderr, "Version: %s\n", VERSION);
fprintf(stderr, "Options:\n" fprintf(stderr, "Options:\n"
" -a <algorithm> digest algorithm (SHA-1 / SHA-256 / SHA-384)\n" " -a <algorithm> digest algorithm (SHA-1 / SHA-256 / GOST / SHA-384)\n"
" -c <class> of domain (default IN)\n" " -c <class> of domain (default IN)\n"
" -D prefer CDNSKEY records instead of CDS\n" " -D prefer CDNSKEY records instead of CDS\n"
" -d <file|dir> where to find parent dsset- file\n" " -d <file|dir> where to find parent dsset- file\n"
@@ -1138,9 +1136,9 @@ main(int argc, char *argv[]) {
const char *ds_path = NULL; const char *ds_path = NULL;
const char *inplace = NULL; const char *inplace = NULL;
isc_result_t result; isc_result_t result;
bool prefer_cdnskey = false; isc_boolean_t prefer_cdnskey = ISC_FALSE;
bool nsupdate = false; isc_boolean_t nsupdate = ISC_FALSE;
uint32_t ttl = 0; isc_uint32_t ttl = 0;
int ch; int ch;
char *endp; char *endp;
@@ -1149,12 +1147,12 @@ main(int argc, char *argv[]) {
fatal("out of memory"); fatal("out of memory");
} }
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
#define OPTIONS "a:c:Dd:f:i:ms:T:uv:V" #define OPTIONS "a:c:Dd:f:i:ms:T:uv:V"
while ((ch = isc_commandline_parse(argc, argv, OPTIONS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, OPTIONS)) != -1) {
@@ -1166,7 +1164,7 @@ main(int argc, char *argv[]) {
rdclass = strtoclass(isc_commandline_argument); rdclass = strtoclass(isc_commandline_argument);
break; break;
case 'D': case 'D':
prefer_cdnskey = true; prefer_cdnskey = ISC_TRUE;
break; break;
case 'd': case 'd':
ds_path = isc_commandline_argument; ds_path = isc_commandline_argument;
@@ -1199,7 +1197,7 @@ main(int argc, char *argv[]) {
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
break; break;
case 'u': case 'u':
nsupdate = true; nsupdate = ISC_TRUE;
break; break;
case 'V': case 'V':
/* Does not return. */ /* Does not return. */
@@ -1233,11 +1231,20 @@ main(int argc, char *argv[]) {
setup_logging(mctx, &lctx); setup_logging(mctx, &lctx);
result = dst_lib_init(mctx, NULL); if (ectx == NULL) {
setup_entropy(mctx, NULL, &ectx);
}
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS) {
fatal("could not initialize hash");
}
result = dst_lib_init(mctx, ectx,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (result != ISC_R_SUCCESS) { if (result != ISC_R_SUCCESS) {
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
} }
isc_entropy_stopcallbacksources(ectx);
if (ds_path == NULL) { if (ds_path == NULL) {
fatal("missing -d DS pathname"); fatal("missing -d DS pathname");
@@ -1387,6 +1394,8 @@ main(int argc, char *argv[]) {
free_all_sets(); free_all_sets();
cleanup_logging(&lctx); cleanup_logging(&lctx);
dst_lib_destroy(); dst_lib_destroy();
isc_hash_destroy();
cleanup_entropy(&ectx);
if (verbose > 10) { if (verbose > 10) {
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
} }
+1 -1
View File
@@ -144,7 +144,7 @@
</para> </para>
<para> <para>
The <replaceable>algorithm</replaceable> must be one of SHA-1 The <replaceable>algorithm</replaceable> must be one of SHA-1
(SHA1), SHA-256 (SHA256), or SHA-384 (SHA384). These (SHA1), SHA-256 (SHA256), GOST, or SHA-384 (SHA384). These
values are case insensitive. If no algorithm is specified, values are case insensitive. If no algorithm is specified,
the default is SHA-256. the default is SHA-256.
</para> </para>
+1 -1
View File
@@ -130,7 +130,7 @@
</p> </p>
<p> <p>
The <em class="replaceable"><code>algorithm</code></em> must be one of SHA-1 The <em class="replaceable"><code>algorithm</code></em> must be one of SHA-1
(SHA1), SHA-256 (SHA256), or SHA-384 (SHA384). These (SHA1), SHA-256 (SHA256), GOST, or SHA-384 (SHA384). These
values are case insensitive. If no algorithm is specified, values are case insensitive. If no algorithm is specified,
the default is SHA-256. the default is SHA-256.
</p> </p>
+3 -3
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2008-2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2008-2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -64,7 +64,7 @@ Use SHA\-256 as the digest algorithm\&.
.RS 4 .RS 4
Select the digest algorithm\&. The value of Select the digest algorithm\&. The value of
\fBalgorithm\fR \fBalgorithm\fR
must be one of SHA\-1 (SHA1), SHA\-256 (SHA256) or SHA\-384 (SHA384)\&. These values are case insensitive\&. must be one of SHA\-1 (SHA1), SHA\-256 (SHA256), GOST or SHA\-384 (SHA384)\&. These values are case insensitive\&.
.RE .RE
.PP .PP
\-C \-C
@@ -178,5 +178,5 @@ RFC 4509\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2008-2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2008-2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+40 -29
View File
@@ -13,12 +13,11 @@
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/print.h> #include <isc/print.h>
@@ -43,14 +42,14 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
#include "dnssectool.h" #include "dnssectool.h"
#ifndef PATH_MAX #ifndef PATH_MAX
#define PATH_MAX 1024 /* WIN32, and others don't define this. */ #define PATH_MAX 1024 /* AIX, WIN32, and others don't define this. */
#endif #endif
const char *program = "dnssec-dsfromkey"; const char *program = "dnssec-dsfromkey";
@@ -60,15 +59,16 @@ static dns_rdataclass_t rdclass;
static dns_fixedname_t fixed; static dns_fixedname_t fixed;
static dns_name_t *name = NULL; static dns_name_t *name = NULL;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static uint32_t ttl; static isc_uint32_t ttl;
static bool emitttl = false; static isc_boolean_t emitttl = ISC_FALSE;
static isc_result_t static isc_result_t
initname(char *setname) { initname(char *setname) {
isc_result_t result; isc_result_t result;
isc_buffer_t buf; isc_buffer_t buf;
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_init(&buf, setname, strlen(setname));
isc_buffer_add(&buf, strlen(setname)); isc_buffer_add(&buf, strlen(setname));
@@ -114,13 +114,13 @@ loadset(const char *filename, dns_rdataset_t *rdataset) {
db_load_from_stream(db, stdin); db_load_from_stream(db, stdin);
filename = "input"; filename = "input";
} else { } else {
result = dns_db_load(db, filename, dns_masterformat_text, 0); result = dns_db_load(db, filename);
if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE)
fatal("can't load %s: %s", filename, fatal("can't load %s: %s", filename,
isc_result_totext(result)); isc_result_totext(result));
} }
result = dns_db_findnode(db, name, false, &node); result = dns_db_findnode(db, name, ISC_FALSE, &node);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't find %s node in %s", setname, filename); fatal("can't find %s node in %s", setname, filename);
@@ -161,7 +161,7 @@ loadkeyset(char *dirname, dns_rdataset_t *rdataset) {
return (ISC_R_NOSPACE); return (ISC_R_NOSPACE);
isc_buffer_putstr(&buf, "keyset-"); isc_buffer_putstr(&buf, "keyset-");
result = dns_name_tofilenametext(name, false, &buf); result = dns_name_tofilenametext(name, ISC_FALSE, &buf);
check_result(result, "dns_name_tofilenametext()"); check_result(result, "dns_name_tofilenametext()");
if (isc_buffer_availablelength(&buf) == 0) if (isc_buffer_availablelength(&buf) == 0)
return (ISC_R_NOSPACE); return (ISC_R_NOSPACE);
@@ -206,7 +206,8 @@ loadkey(char *filename, unsigned char *key_buf, unsigned int key_buf_size,
rdclass = dst_key_class(key); rdclass = dst_key_class(key);
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
result = dns_name_copy(dst_key_name(key), name, NULL); result = dns_name_copy(dst_key_name(key), name, NULL);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't copy name"); fatal("can't copy name");
@@ -235,8 +236,8 @@ logkey(dns_rdata_t *rdata)
} }
static void static void
emit(unsigned int dtype, bool showall, char *lookaside, emit(unsigned int dtype, isc_boolean_t showall, char *lookaside,
bool cds, dns_rdata_t *rdata) isc_boolean_t cds, dns_rdata_t *rdata)
{ {
isc_result_t result; isc_result_t result;
unsigned char buf[DNS_DS_BUFFERSIZE]; unsigned char buf[DNS_DS_BUFFERSIZE];
@@ -265,7 +266,7 @@ emit(unsigned int dtype, bool showall, char *lookaside,
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't build record"); fatal("can't build record");
result = dns_name_totext(name, false, &nameb); result = dns_name_totext(name, ISC_FALSE, &nameb);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't print name"); fatal("can't print name");
@@ -354,12 +355,13 @@ main(int argc, char **argv) {
char *endp; char *endp;
int ch; int ch;
unsigned int dtype = DNS_DSDIGEST_SHA1; unsigned int dtype = DNS_DSDIGEST_SHA1;
bool cds = false; isc_boolean_t cds = ISC_FALSE;
bool both = true; isc_boolean_t both = ISC_TRUE;
bool usekeyset = false; isc_boolean_t usekeyset = ISC_FALSE;
bool showall = false; isc_boolean_t showall = ISC_FALSE;
isc_result_t result; isc_result_t result;
isc_log_t *log = NULL; isc_log_t *log = NULL;
isc_entropy_t *ectx = NULL;
dns_rdataset_t rdataset; dns_rdataset_t rdataset;
dns_rdata_t rdata; dns_rdata_t rdata;
@@ -372,36 +374,36 @@ main(int argc, char **argv) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("out of memory"); fatal("out of memory");
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
#define OPTIONS "12Aa:Cc:d:Ff:K:l:sT:v:hV" #define OPTIONS "12Aa:Cc:d:Ff:K:l:sT:v:hV"
while ((ch = isc_commandline_parse(argc, argv, OPTIONS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, OPTIONS)) != -1) {
switch (ch) { switch (ch) {
case '1': case '1':
dtype = DNS_DSDIGEST_SHA1; dtype = DNS_DSDIGEST_SHA1;
both = false; both = ISC_FALSE;
break; break;
case '2': case '2':
dtype = DNS_DSDIGEST_SHA256; dtype = DNS_DSDIGEST_SHA256;
both = false; both = ISC_FALSE;
break; break;
case 'A': case 'A':
showall = true; showall = ISC_TRUE;
break; break;
case 'a': case 'a':
dtype = strtodsdigest(isc_commandline_argument); dtype = strtodsdigest(isc_commandline_argument);
both = false; both = ISC_FALSE;
break; break;
case 'C': case 'C':
if (lookaside != NULL) if (lookaside != NULL)
fatal("lookaside and CDS are mutually" fatal("lookaside and CDS are mutually"
" exclusive"); " exclusive");
cds = true; cds = ISC_TRUE;
break; break;
case 'c': case 'c':
classname = isc_commandline_argument; classname = isc_commandline_argument;
@@ -427,10 +429,10 @@ main(int argc, char **argv) {
fatal("lookaside must be a non-empty string"); fatal("lookaside must be a non-empty string");
break; break;
case 's': case 's':
usekeyset = true; usekeyset = ISC_TRUE;
break; break;
case 'T': case 'T':
emitttl = true; emitttl = ISC_TRUE;
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
break; break;
case 'v': case 'v':
@@ -468,17 +470,24 @@ main(int argc, char **argv) {
/* When not using -f, -A is implicit */ /* When not using -f, -A is implicit */
if (filename == NULL) if (filename == NULL)
showall = true; showall = ISC_TRUE;
if (argc < isc_commandline_index + 1 && filename == NULL) if (argc < isc_commandline_index + 1 && filename == NULL)
fatal("the key file name was not specified"); fatal("the key file name was not specified");
if (argc > isc_commandline_index + 1) if (argc > isc_commandline_index + 1)
fatal("extraneous arguments"); fatal("extraneous arguments");
result = dst_lib_init(mctx, NULL); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
result = dst_lib_init(mctx, ectx,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS)
fatal("could not initialize hash");
isc_entropy_stopcallbacksources(ectx);
setup_logging(mctx, &log); setup_logging(mctx, &log);
@@ -539,7 +548,9 @@ main(int argc, char **argv) {
if (dns_rdataset_isassociated(&rdataset)) if (dns_rdataset_isassociated(&rdataset))
dns_rdataset_disassociate(&rdataset); dns_rdataset_disassociate(&rdataset);
cleanup_logging(&log); cleanup_logging(&log);
isc_hash_destroy();
dst_lib_destroy(); dst_lib_destroy();
cleanup_entropy(&ectx);
dns_name_destroy(); dns_name_destroy();
if (verbose > 10) if (verbose > 10)
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
+1 -1
View File
@@ -117,7 +117,7 @@
<para> <para>
Select the digest algorithm. The value of Select the digest algorithm. The value of
<option>algorithm</option> must be one of SHA-1 (SHA1), <option>algorithm</option> must be one of SHA-1 (SHA1),
SHA-256 (SHA256) or SHA-384 (SHA384). SHA-256 (SHA256), GOST or SHA-384 (SHA384).
These values are case insensitive. These values are case insensitive.
</para> </para>
</listitem> </listitem>
+2 -2
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2008-2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2008-2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -97,7 +97,7 @@
<p> <p>
Select the digest algorithm. The value of Select the digest algorithm. The value of
<code class="option">algorithm</code> must be one of SHA-1 (SHA1), <code class="option">algorithm</code> must be one of SHA-1 (SHA1),
SHA-256 (SHA256) or SHA-384 (SHA384). SHA-256 (SHA256), GOST or SHA-384 (SHA384).
These values are case insensitive. These values are case insensitive.
</p> </p>
</dd> </dd>
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2013-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -134,5 +134,5 @@ RFC 5011\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2013-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2013-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+29 -17
View File
@@ -13,11 +13,11 @@
#include <config.h> #include <config.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/print.h> #include <isc/print.h>
@@ -42,14 +42,14 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
#include "dnssectool.h" #include "dnssectool.h"
#ifndef PATH_MAX #ifndef PATH_MAX
#define PATH_MAX 1024 /* WIN32, and others don't define this. */ #define PATH_MAX 1024 /* AIX, WIN32, and others don't define this. */
#endif #endif
const char *program = "dnssec-importkey"; const char *program = "dnssec-importkey";
@@ -59,20 +59,21 @@ static dns_rdataclass_t rdclass;
static dns_fixedname_t fixed; static dns_fixedname_t fixed;
static dns_name_t *name = NULL; static dns_name_t *name = NULL;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static bool setpub = false, setdel = false; static isc_boolean_t setpub = ISC_FALSE, setdel = ISC_FALSE;
static bool setttl = false; static isc_boolean_t setttl = ISC_FALSE;
static isc_stdtime_t pub = 0, del = 0; static isc_stdtime_t pub = 0, del = 0;
static dns_ttl_t ttl = 0; static dns_ttl_t ttl = 0;
static isc_stdtime_t syncadd = 0, syncdel = 0; static isc_stdtime_t syncadd = 0, syncdel = 0;
static bool setsyncadd = false; static isc_boolean_t setsyncadd = ISC_FALSE;
static bool setsyncdel = false; static isc_boolean_t setsyncdel = ISC_FALSE;
static isc_result_t static isc_result_t
initname(char *setname) { initname(char *setname) {
isc_result_t result; isc_result_t result;
isc_buffer_t buf; isc_buffer_t buf;
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
isc_buffer_init(&buf, setname, strlen(setname)); isc_buffer_init(&buf, setname, strlen(setname));
isc_buffer_add(&buf, strlen(setname)); isc_buffer_add(&buf, strlen(setname));
@@ -118,14 +119,14 @@ loadset(const char *filename, dns_rdataset_t *rdataset) {
db_load_from_stream(db, stdin); db_load_from_stream(db, stdin);
filename = "input"; filename = "input";
} else { } else {
result = dns_db_load(db, filename, dns_masterformat_text, result = dns_db_load3(db, filename, dns_masterformat_text,
DNS_MASTER_NOTTL); DNS_MASTER_NOTTL);
if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE) if (result != ISC_R_SUCCESS && result != DNS_R_SEENINCLUDE)
fatal("can't load %s: %s", filename, fatal("can't load %s: %s", filename,
isc_result_totext(result)); isc_result_totext(result));
} }
result = dns_db_findnode(db, name, false, &node); result = dns_db_findnode(db, name, ISC_FALSE, &node);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't find %s node in %s", setname, filename); fatal("can't find %s node in %s", setname, filename);
@@ -180,7 +181,8 @@ loadkey(char *filename, unsigned char *key_buf, unsigned int key_buf_size,
rdclass = dst_key_class(key); rdclass = dst_key_class(key);
name = dns_fixedname_initname(&fixed); dns_fixedname_init(&fixed);
name = dns_fixedname_name(&fixed);
result = dns_name_copy(dst_key_name(key), name, NULL); result = dns_name_copy(dst_key_name(key), name, NULL);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("can't copy name"); fatal("can't copy name");
@@ -227,7 +229,7 @@ emit(const char *dir, dns_rdata_t *rdata) {
dst_key_free(&tmp); dst_key_free(&tmp);
} }
dst_key_setexternal(key, true); dst_key_setexternal(key, ISC_TRUE);
if (setpub) if (setpub)
dst_key_settime(key, DST_TIME_PUBLISH, pub); dst_key_settime(key, DST_TIME_PUBLISH, pub);
if (setdel) if (setdel)
@@ -297,6 +299,7 @@ main(int argc, char **argv) {
int ch; int ch;
isc_result_t result; isc_result_t result;
isc_log_t *log = NULL; isc_log_t *log = NULL;
isc_entropy_t *ectx = NULL;
dns_rdataset_t rdataset; dns_rdataset_t rdataset;
dns_rdata_t rdata; dns_rdata_t rdata;
isc_stdtime_t now; isc_stdtime_t now;
@@ -311,12 +314,12 @@ main(int argc, char **argv) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("out of memory"); fatal("out of memory");
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
#define CMDLINE_FLAGS "D:f:hK:L:P:v:V" #define CMDLINE_FLAGS "D:f:hK:L:P:v:V"
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
@@ -347,7 +350,7 @@ main(int argc, char **argv) {
break; break;
case 'L': case 'L':
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
setttl = true; setttl = ISC_TRUE;
break; break;
case 'P': case 'P':
/* -Psync ? */ /* -Psync ? */
@@ -403,10 +406,17 @@ main(int argc, char **argv) {
if (argc > isc_commandline_index + 1) if (argc > isc_commandline_index + 1)
fatal("extraneous arguments"); fatal("extraneous arguments");
result = dst_lib_init(mctx, NULL); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
result = dst_lib_init(mctx, ectx,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS)
fatal("could not initialize hash");
isc_entropy_stopcallbacksources(ectx);
setup_logging(mctx, &log); setup_logging(mctx, &log);
@@ -449,7 +459,9 @@ main(int argc, char **argv) {
if (dns_rdataset_isassociated(&rdataset)) if (dns_rdataset_isassociated(&rdataset))
dns_rdataset_disassociate(&rdataset); dns_rdataset_disassociate(&rdataset);
cleanup_logging(&log); cleanup_logging(&log);
isc_hash_destroy();
dst_lib_destroy(); dst_lib_destroy();
cleanup_entropy(&ectx);
dns_name_destroy(); dns_name_destroy();
if (verbose > 10) if (verbose > 10)
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2013-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+3 -3
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2008-2012, 2014-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2008-2012, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -55,7 +55,7 @@ of the key is specified on the command line\&. This must match the name of the z
.RS 4 .RS 4
Selects the cryptographic algorithm\&. The value of Selects the cryptographic algorithm\&. The value of
\fBalgorithm\fR \fBalgorithm\fR
must be one of RSAMD5, RSASHA1, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448\&. must be one of RSAMD5, RSASHA1, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448\&.
.sp .sp
If no algorithm is specified, then RSASHA1 will be used by default, unless the If no algorithm is specified, then RSASHA1 will be used by default, unless the
\fB\-3\fR \fB\-3\fR
@@ -307,5 +307,5 @@ The PKCS#11 URI Scheme (draft\-pechanec\-pkcs11uri\-13)\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2008-2012, 2014-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2008-2012, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+62 -33
View File
@@ -14,12 +14,11 @@
#include <config.h> #include <config.h>
#include <ctype.h> #include <ctype.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/region.h> #include <isc/region.h>
#include <isc/print.h> #include <isc/print.h>
@@ -39,7 +38,7 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -66,14 +65,17 @@ usage(void) {
fprintf(stderr, " -a algorithm: \n" fprintf(stderr, " -a algorithm: \n"
" RSA | RSAMD5 | DH | DSA | RSASHA1 |\n" " RSA | RSAMD5 | DH | DSA | RSASHA1 |\n"
" NSEC3DSA | NSEC3RSASHA1 |\n" " NSEC3DSA | NSEC3RSASHA1 |\n"
" RSASHA256 | RSASHA512 |\n" " RSASHA256 | RSASHA512 | ECCGOST |\n"
" ECDSAP256SHA256 | ECDSAP384SHA384\n"); " ECDSAP256SHA256 | ECDSAP384SHA384\n");
fprintf(stderr, " -3: use NSEC3-capable algorithm\n"); fprintf(stderr, " -3: use NSEC3-capable algorithm\n");
fprintf(stderr, " -c class (default: IN)\n"); fprintf(stderr, " -c class (default: IN)\n");
fprintf(stderr, " -E <engine>:\n"); fprintf(stderr, " -E <engine>:\n");
#if USE_PKCS11 #if defined(PKCS11CRYPTO)
fprintf(stderr, " path to PKCS#11 provider library " fprintf(stderr, " path to PKCS#11 provider library "
"(default is %s)\n", PK11_LIB_LOCATION); "(default is %s)\n", PK11_LIB_LOCATION);
#elif defined(USE_PKCS11)
fprintf(stderr, " name of an OpenSSL engine to use "
"(default is \"pkcs11\")\n");
#else #else
fprintf(stderr, " name of an OpenSSL engine to use\n"); fprintf(stderr, " name of an OpenSSL engine to use\n");
#endif #endif
@@ -123,15 +125,19 @@ main(int argc, char **argv) {
const char *directory = NULL; const char *directory = NULL;
const char *predecessor = NULL; const char *predecessor = NULL;
dst_key_t *prevkey = NULL; dst_key_t *prevkey = NULL;
#ifdef USE_PKCS11
const char *engine = PKCS11_ENGINE;
#else
const char *engine = NULL; const char *engine = NULL;
#endif
char *classname = NULL; char *classname = NULL;
char *endp; char *endp;
dst_key_t *key = NULL; dst_key_t *key = NULL;
dns_fixedname_t fname; dns_fixedname_t fname;
dns_name_t *name; dns_name_t *name;
uint16_t flags = 0, kskflag = 0, revflag = 0; isc_uint16_t flags = 0, kskflag = 0, revflag = 0;
dns_secalg_t alg; dns_secalg_t alg;
bool oldstyle = false; isc_boolean_t oldstyle = ISC_FALSE;
isc_mem_t *mctx = NULL; isc_mem_t *mctx = NULL;
int ch; int ch;
int protocol = -1, signatory = 0; int protocol = -1, signatory = 0;
@@ -140,6 +146,7 @@ main(int argc, char **argv) {
char filename[255]; char filename[255];
isc_buffer_t buf; isc_buffer_t buf;
isc_log_t *log = NULL; isc_log_t *log = NULL;
isc_entropy_t *ectx = NULL;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC; int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC;
char *label = NULL; char *label = NULL;
@@ -148,32 +155,32 @@ main(int argc, char **argv) {
isc_stdtime_t inactive = 0, deltime = 0; isc_stdtime_t inactive = 0, deltime = 0;
isc_stdtime_t now; isc_stdtime_t now;
int prepub = -1; int prepub = -1;
bool setpub = false, setact = false; isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
bool setrev = false, setinact = false; isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
bool setdel = false, setttl = false; isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
bool unsetpub = false, unsetact = false; isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
bool unsetrev = false, unsetinact = false; isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
bool unsetdel = false; isc_boolean_t unsetdel = ISC_FALSE;
bool genonly = false; isc_boolean_t genonly = ISC_FALSE;
bool use_nsec3 = false; isc_boolean_t use_nsec3 = ISC_FALSE;
bool avoid_collisions = true; isc_boolean_t avoid_collisions = ISC_TRUE;
bool exact; isc_boolean_t exact;
unsigned char c; unsigned char c;
isc_stdtime_t syncadd = 0, syncdel = 0; isc_stdtime_t syncadd = 0, syncdel = 0;
bool unsetsyncadd = false, setsyncadd = false; isc_boolean_t unsetsyncadd = ISC_FALSE, setsyncadd = ISC_FALSE;
bool unsetsyncdel = false, setsyncdel = false; isc_boolean_t unsetsyncdel = ISC_FALSE, setsyncdel = ISC_FALSE;
if (argc == 1) if (argc == 1)
usage(); usage();
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
isc_stdtime_get(&now); isc_stdtime_get(&now);
@@ -181,13 +188,13 @@ main(int argc, char **argv) {
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
switch (ch) { switch (ch) {
case '3': case '3':
use_nsec3 = true; use_nsec3 = ISC_TRUE;
break; break;
case 'a': case 'a':
algname = isc_commandline_argument; algname = isc_commandline_argument;
break; break;
case 'C': case 'C':
oldstyle = true; oldstyle = ISC_TRUE;
break; break;
case 'c': case 'c':
classname = isc_commandline_argument; classname = isc_commandline_argument;
@@ -217,7 +224,7 @@ main(int argc, char **argv) {
break; break;
case 'L': case 'L':
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
setttl = true; setttl = ISC_TRUE;
break; break;
case 'l': case 'l':
label = isc_mem_strdup(mctx, isc_commandline_argument); label = isc_mem_strdup(mctx, isc_commandline_argument);
@@ -240,10 +247,10 @@ main(int argc, char **argv) {
fatal("-v must be followed by a number"); fatal("-v must be followed by a number");
break; break;
case 'y': case 'y':
avoid_collisions = false; avoid_collisions = ISC_FALSE;
break; break;
case 'G': case 'G':
genonly = true; genonly = ISC_TRUE;
break; break;
case 'P': case 'P':
/* -Psync ? */ /* -Psync ? */
@@ -340,7 +347,10 @@ main(int argc, char **argv) {
} }
} }
ret = dst_lib_init(mctx, engine); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
ret = dst_lib_init2(mctx, ectx, engine,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (ret != ISC_R_SUCCESS) if (ret != ISC_R_SUCCESS)
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(ret)); isc_result_totext(ret));
@@ -355,7 +365,8 @@ main(int argc, char **argv) {
if (argc > isc_commandline_index + 1) if (argc > isc_commandline_index + 1)
fatal("extraneous arguments"); fatal("extraneous arguments");
name = dns_fixedname_initname(&fname); dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
isc_buffer_init(&buf, argv[isc_commandline_index], isc_buffer_init(&buf, argv[isc_commandline_index],
strlen(argv[isc_commandline_index])); strlen(argv[isc_commandline_index]));
isc_buffer_add(&buf, strlen(argv[isc_commandline_index])); isc_buffer_add(&buf, strlen(argv[isc_commandline_index]));
@@ -383,10 +394,20 @@ main(int argc, char **argv) {
} }
if (strcasecmp(algname, "RSA") == 0) { if (strcasecmp(algname, "RSA") == 0) {
#ifndef PK11_MD5_DISABLE
fprintf(stderr, "The use of RSA (RSAMD5) is not " fprintf(stderr, "The use of RSA (RSAMD5) is not "
"recommended.\nIf you still wish to " "recommended.\nIf you still wish to "
"use RSA (RSAMD5) please specify " "use RSA (RSAMD5) please specify "
"\"-a RSAMD5\"\n"); "\"-a RSAMD5\"\n");
#else
fprintf(stderr,
"The use of RSA (RSAMD5) was disabled\n");
if (freeit != NULL)
free(freeit);
return (1);
} else if (strcasecmp(algname, "RSAMD5") == 0) {
fprintf(stderr, "The use of RSAMD5 was disabled\n");
#endif
if (freeit != NULL) if (freeit != NULL)
free(freeit); free(freeit);
return (1); return (1);
@@ -412,6 +433,7 @@ main(int argc, char **argv) {
case DST_ALG_NSEC3RSASHA1: case DST_ALG_NSEC3RSASHA1:
case DST_ALG_RSASHA256: case DST_ALG_RSASHA256:
case DST_ALG_RSASHA512: case DST_ALG_RSASHA512:
case DST_ALG_ECCGOST:
case DST_ALG_ECDSA256: case DST_ALG_ECDSA256:
case DST_ALG_ECDSA384: case DST_ALG_ECDSA384:
case DST_ALG_ED25519: case DST_ALG_ED25519:
@@ -444,14 +466,14 @@ main(int argc, char **argv) {
"prepublication interval."); "prepublication interval.");
if (!setpub && !setact) { if (!setpub && !setact) {
setpub = setact = true; setpub = setact = ISC_TRUE;
publish = now; publish = now;
activate = now + prepub; activate = now + prepub;
} else if (setpub && !setact) { } else if (setpub && !setact) {
setact = true; setact = ISC_TRUE;
activate = publish + prepub; activate = publish + prepub;
} else if (setact && !setpub) { } else if (setact && !setpub) {
setpub = true; setpub = ISC_TRUE;
publish = activate - prepub; publish = activate - prepub;
} }
@@ -497,6 +519,11 @@ main(int argc, char **argv) {
alg = dst_key_alg(prevkey); alg = dst_key_alg(prevkey);
flags = dst_key_flags(prevkey); flags = dst_key_flags(prevkey);
#ifdef PK11_MD5_DISABLE
if (alg == DST_ALG_RSAMD5)
fatal("Key %s uses disabled RSAMD5", predecessor);
#endif
dst_key_format(prevkey, keystr, sizeof(keystr)); dst_key_format(prevkey, keystr, sizeof(keystr));
dst_key_getprivateformat(prevkey, &major, &minor); dst_key_getprivateformat(prevkey, &major, &minor);
if (major != DST_MAJOR_VERSION || minor < DST_MINOR_VERSION) if (major != DST_MAJOR_VERSION || minor < DST_MINOR_VERSION)
@@ -534,7 +561,7 @@ main(int argc, char **argv) {
"You can use dnssec-settime -D to " "You can use dnssec-settime -D to "
"change this.\n", program, keystr); "change this.\n", program, keystr);
setpub = setact = true; setpub = setact = ISC_TRUE;
} }
if (nametype == NULL) { if (nametype == NULL) {
@@ -586,12 +613,13 @@ main(int argc, char **argv) {
/* associate the key */ /* associate the key */
ret = dst_key_fromlabel(name, alg, flags, protocol, rdclass, ret = dst_key_fromlabel(name, alg, flags, protocol, rdclass,
#if USE_PKCS11 #ifdef PKCS11CRYPTO
"pkcs11", "pkcs11",
#else #else
engine, engine,
#endif #endif
label, NULL, mctx, &key); label, NULL, mctx, &key);
isc_entropy_stopcallbacksources(ectx);
if (ret != ISC_R_SUCCESS) { if (ret != ISC_R_SUCCESS) {
char namestr[DNS_NAME_FORMATSIZE]; char namestr[DNS_NAME_FORMATSIZE];
@@ -710,6 +738,7 @@ main(int argc, char **argv) {
dst_key_free(&prevkey); dst_key_free(&prevkey);
cleanup_logging(&log); cleanup_logging(&log);
cleanup_entropy(&ectx);
dst_lib_destroy(); dst_lib_destroy();
dns_name_destroy(); dns_name_destroy();
if (verbose > 10) if (verbose > 10)
+1 -1
View File
@@ -106,7 +106,7 @@
<para> <para>
Selects the cryptographic algorithm. The value of Selects the cryptographic algorithm. The value of
<option>algorithm</option> must be one of RSAMD5, RSASHA1, <option>algorithm</option> must be one of RSAMD5, RSASHA1,
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448.
</para> </para>
<para> <para>
+2 -2
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2008-2012, 2014-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2008-2012, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -90,7 +90,7 @@
<p> <p>
Selects the cryptographic algorithm. The value of Selects the cryptographic algorithm. The value of
<code class="option">algorithm</code> must be one of RSAMD5, RSASHA1, <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448.
</p> </p>
<p> <p>
+17 -2
View File
@@ -39,7 +39,7 @@
dnssec-keygen \- DNSSEC key generation tool dnssec-keygen \- DNSSEC key generation tool
.SH "SYNOPSIS" .SH "SYNOPSIS"
.HP \w'\fBdnssec\-keygen\fR\ 'u .HP \w'\fBdnssec\-keygen\fR\ 'u
\fBdnssec\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-3\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-C\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ sync\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-g\ \fR\fB\fIgenerator\fR\fR] [\fB\-h\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-P\ sync\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-q\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-S\ \fR\fB\fIkey\fR\fR] [\fB\-s\ \fR\fB\fIstrength\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-V\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-z\fR] {name} \fBdnssec\-keygen\fR [\fB\-a\ \fR\fB\fIalgorithm\fR\fR] [\fB\-b\ \fR\fB\fIkeysize\fR\fR] [\fB\-n\ \fR\fB\fInametype\fR\fR] [\fB\-3\fR] [\fB\-A\ \fR\fB\fIdate/offset\fR\fR] [\fB\-C\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-D\ \fR\fB\fIdate/offset\fR\fR] [\fB\-D\ sync\ \fR\fB\fIdate/offset\fR\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-f\ \fR\fB\fIflag\fR\fR] [\fB\-G\fR] [\fB\-g\ \fR\fB\fIgenerator\fR\fR] [\fB\-h\fR] [\fB\-I\ \fR\fB\fIdate/offset\fR\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\fR] [\fB\-L\ \fR\fB\fIttl\fR\fR] [\fB\-P\ \fR\fB\fIdate/offset\fR\fR] [\fB\-P\ sync\ \fR\fB\fIdate/offset\fR\fR] [\fB\-p\ \fR\fB\fIprotocol\fR\fR] [\fB\-q\fR] [\fB\-R\ \fR\fB\fIdate/offset\fR\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\ \fR\fB\fIkey\fR\fR] [\fB\-s\ \fR\fB\fIstrength\fR\fR] [\fB\-t\ \fR\fB\fItype\fR\fR] [\fB\-V\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-z\fR] {name}
.SH "DESCRIPTION" .SH "DESCRIPTION"
.PP .PP
\fBdnssec\-keygen\fR \fBdnssec\-keygen\fR
@@ -62,7 +62,7 @@ may be preferable to direct use of
.RS 4 .RS 4
Selects the cryptographic algorithm\&. For DNSSEC keys, the value of Selects the cryptographic algorithm\&. For DNSSEC keys, the value of
\fBalgorithm\fR \fBalgorithm\fR
must be one of RSAMD5, RSASHA1, 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 must be one of RSAMD5, RSASHA1, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448\&. For TKEY, the value must be DH (Diffie Hellman); specifying his value will automatically set the
\fB\-T KEY\fR \fB\-T KEY\fR
option as well\&. option as well\&.
.sp .sp
@@ -178,6 +178,21 @@ stderr
indicating the progress of the key generation\&. A \*(Aq\&.\*(Aq indicates that a random number has been found which passed an initial sieve test; \*(Aq+\*(Aq means a number has passed a single round of the Miller\-Rabin primality test; a space means that the number has passed all the tests and is a satisfactory key\&. indicating the progress of the key generation\&. A \*(Aq\&.\*(Aq indicates that a random number has been found which passed an initial sieve test; \*(Aq+\*(Aq means a number has passed a single round of the Miller\-Rabin primality test; a space means that the number has passed all the tests and is a satisfactory key\&.
.RE .RE
.PP .PP
\-r \fIrandomdev\fR
.RS 4
Specifies a source of randomness\&. Normally, when generating DNSSEC keys, this option has no effect; the random number generation function provided by the cryptographic library will be used\&.
.sp
If that behavior is disabled at compile time, however, the specified file will be used as entropy source for key generation\&.
randomdev
is the name of a character device or file containing random data to be used\&. The special value
keyboard
indicates that keyboard input should be used\&.
.sp
The default is
/dev/random
if the operating system provides it or an equivalent device; if not, the default source of randomness is keyboard input\&.
.RE
.PP
\-S \fIkey\fR \-S \fIkey\fR
.RS 4 .RS 4
Create a new key which is an explicit successor to an existing key\&. The name, algorithm, size, and type of the key will be set to match the existing key\&. The activation date of the new key will be set to the inactivation date of the existing one\&. The publication date will be set to the activation date minus the prepublication interval, which defaults to 30 days\&. Create a new key which is an explicit successor to an existing key\&. The name, algorithm, size, and type of the key will be set to match the existing key\&. The activation date of the new key will be set to the inactivation date of the existing one\&. The publication date will be set to the activation date minus the prepublication interval, which defaults to 30 days\&.
+80 -51
View File
@@ -28,13 +28,12 @@
#include <config.h> #include <config.h>
#include <ctype.h> #include <ctype.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/mem.h> #include <isc/mem.h>
#include <isc/print.h> #include <isc/print.h>
#include <isc/region.h> #include <isc/region.h>
@@ -54,7 +53,7 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -81,7 +80,7 @@ usage(void) {
fprintf(stderr, " -a <algorithm>:\n"); fprintf(stderr, " -a <algorithm>:\n");
fprintf(stderr, " RSA | RSAMD5 | DSA | RSASHA1 | NSEC3RSASHA1" fprintf(stderr, " RSA | RSAMD5 | DSA | RSASHA1 | NSEC3RSASHA1"
" | NSEC3DSA |\n"); " | NSEC3DSA |\n");
fprintf(stderr, " RSASHA256 | RSASHA512 |\n"); fprintf(stderr, " RSASHA256 | RSASHA512 | ECCGOST |\n");
fprintf(stderr, " ECDSAP256SHA256 | ECDSAP384SHA384 |\n"); fprintf(stderr, " ECDSAP256SHA256 | ECDSAP384SHA384 |\n");
fprintf(stderr, " ED25519 | ED448 | DH\n"); fprintf(stderr, " ED25519 | ED448 | DH\n");
fprintf(stderr, " -3: use NSEC3-capable algorithm\n"); fprintf(stderr, " -3: use NSEC3-capable algorithm\n");
@@ -108,9 +107,12 @@ usage(void) {
fprintf(stderr, " -c <class>: (default: IN)\n"); fprintf(stderr, " -c <class>: (default: IN)\n");
fprintf(stderr, " -d <digest bits> (0 => max, default)\n"); fprintf(stderr, " -d <digest bits> (0 => max, default)\n");
fprintf(stderr, " -E <engine>:\n"); fprintf(stderr, " -E <engine>:\n");
#if USE_PKCS11 #if defined(PKCS11CRYPTO)
fprintf(stderr, " path to PKCS#11 provider library " fprintf(stderr, " path to PKCS#11 provider library "
"(default is %s)\n", PK11_LIB_LOCATION); "(default is %s)\n", PK11_LIB_LOCATION);
#elif defined(USE_PKCS11)
fprintf(stderr, " name of an OpenSSL engine to use "
"(default is \"pkcs11\")\n");
#else #else
fprintf(stderr, " name of an OpenSSL engine to use\n"); fprintf(stderr, " name of an OpenSSL engine to use\n");
#endif #endif
@@ -119,6 +121,7 @@ usage(void) {
"(DH only)\n"); "(DH only)\n");
fprintf(stderr, " -L <ttl>: default key TTL\n"); fprintf(stderr, " -L <ttl>: default key TTL\n");
fprintf(stderr, " -p <protocol>: (default: 3 [dnssec])\n"); fprintf(stderr, " -p <protocol>: (default: 3 [dnssec])\n");
fprintf(stderr, " -r <randomdev>: a file containing random data\n");
fprintf(stderr, " -s <strength>: strength value this key signs DNS " fprintf(stderr, " -s <strength>: strength value this key signs DNS "
"records with (default: 0)\n"); "records with (default: 0)\n");
fprintf(stderr, " -T <rrtype>: DNSKEY | KEY (default: DNSKEY; " fprintf(stderr, " -T <rrtype>: DNSKEY | KEY (default: DNSKEY; "
@@ -161,9 +164,9 @@ usage(void) {
exit (-1); exit (-1);
} }
static bool static isc_boolean_t
dsa_size_ok(int size) { dsa_size_ok(int size) {
return (size >= 512 && size <= 1024 && size % 64 == 0); return (ISC_TF(size >= 512 && size <= 1024 && size % 64 == 0));
} }
static void static void
@@ -200,10 +203,10 @@ main(int argc, char **argv) {
dst_key_t *key = NULL; dst_key_t *key = NULL;
dns_fixedname_t fname; dns_fixedname_t fname;
dns_name_t *name; dns_name_t *name;
uint16_t flags = 0, kskflag = 0, revflag = 0; isc_uint16_t flags = 0, kskflag = 0, revflag = 0;
dns_secalg_t alg; dns_secalg_t alg;
bool conflict = false, null_key = false; isc_boolean_t conflict = ISC_FALSE, null_key = ISC_FALSE;
bool oldstyle = false; isc_boolean_t oldstyle = ISC_FALSE;
isc_mem_t *mctx = NULL; isc_mem_t *mctx = NULL;
int ch, generator = 0, param = 0; int ch, generator = 0, param = 0;
int protocol = -1, size = -1, signatory = 0; int protocol = -1, size = -1, signatory = 0;
@@ -215,39 +218,44 @@ main(int argc, char **argv) {
dst_key_t *prevkey = NULL; dst_key_t *prevkey = NULL;
isc_buffer_t buf; isc_buffer_t buf;
isc_log_t *log = NULL; isc_log_t *log = NULL;
isc_entropy_t *ectx = NULL;
#ifdef USE_PKCS11
const char *engine = PKCS11_ENGINE;
#else
const char *engine = NULL; const char *engine = NULL;
#endif
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC; int options = DST_TYPE_PRIVATE | DST_TYPE_PUBLIC;
int dbits = 0; int dbits = 0;
dns_ttl_t ttl = 0; dns_ttl_t ttl = 0;
bool use_nsec3 = false; isc_boolean_t use_nsec3 = ISC_FALSE;
isc_stdtime_t publish = 0, activate = 0, revokekey = 0; isc_stdtime_t publish = 0, activate = 0, revokekey = 0;
isc_stdtime_t inactive = 0, deltime = 0; isc_stdtime_t inactive = 0, deltime = 0;
isc_stdtime_t now; isc_stdtime_t now;
int prepub = -1; int prepub = -1;
bool setpub = false, setact = false; isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
bool setrev = false, setinact = false; isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
bool setdel = false, setttl = false; isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
bool unsetpub = false, unsetact = false; isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
bool unsetrev = false, unsetinact = false; isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
bool unsetdel = false; isc_boolean_t unsetdel = ISC_FALSE;
bool genonly = false; isc_boolean_t genonly = ISC_FALSE;
bool quiet = false; isc_boolean_t quiet = ISC_FALSE;
bool show_progress = false; isc_boolean_t show_progress = ISC_FALSE;
unsigned char c; unsigned char c;
isc_stdtime_t syncadd = 0, syncdel = 0; isc_stdtime_t syncadd = 0, syncdel = 0;
bool setsyncadd = false; isc_boolean_t setsyncadd = ISC_FALSE;
bool setsyncdel = false; isc_boolean_t setsyncdel = ISC_FALSE;
if (argc == 1) if (argc == 1)
usage(); usage();
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
/* /*
* Process memory debugging argument first. * Process memory debugging argument first.
@@ -272,7 +280,7 @@ main(int argc, char **argv) {
break; break;
} }
} }
isc_commandline_reset = true; isc_commandline_reset = ISC_TRUE;
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS); RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
@@ -281,7 +289,7 @@ main(int argc, char **argv) {
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
switch (ch) { switch (ch) {
case '3': case '3':
use_nsec3 = true; use_nsec3 = ISC_TRUE;
break; break;
case 'a': case 'a':
algname = isc_commandline_argument; algname = isc_commandline_argument;
@@ -292,7 +300,7 @@ main(int argc, char **argv) {
fatal("-b requires a non-negative number"); fatal("-b requires a non-negative number");
break; break;
case 'C': case 'C':
oldstyle = true; oldstyle = ISC_TRUE;
break; break;
case 'c': case 'c':
classname = isc_commandline_argument; classname = isc_commandline_argument;
@@ -340,7 +348,7 @@ main(int argc, char **argv) {
break; break;
case 'L': case 'L':
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
setttl = true; setttl = ISC_TRUE;
break; break;
case 'n': case 'n':
nametype = isc_commandline_argument; nametype = isc_commandline_argument;
@@ -354,11 +362,10 @@ main(int argc, char **argv) {
"[0..255]"); "[0..255]");
break; break;
case 'q': case 'q':
quiet = true; quiet = ISC_TRUE;
break; break;
case 'r': case 'r':
fatal("The -r option has been deprecated.\n" setup_entropy(mctx, isc_commandline_argument, &ectx);
"System random data is always used.\n");
break; break;
case 's': case 's':
signatory = strtol(isc_commandline_argument, signatory = strtol(isc_commandline_argument,
@@ -391,7 +398,7 @@ main(int argc, char **argv) {
/* already the default */ /* already the default */
break; break;
case 'G': case 'G':
genonly = true; genonly = ISC_TRUE;
break; break;
case 'P': case 'P':
/* -Psync ? */ /* -Psync ? */
@@ -485,9 +492,12 @@ main(int argc, char **argv) {
} }
if (!isatty(0)) if (!isatty(0))
quiet = true; quiet = ISC_TRUE;
ret = dst_lib_init(mctx, engine); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
ret = dst_lib_init2(mctx, ectx, engine,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (ret != ISC_R_SUCCESS) if (ret != ISC_R_SUCCESS)
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(ret)); isc_result_totext(ret));
@@ -503,7 +513,8 @@ main(int argc, char **argv) {
if (argc > isc_commandline_index + 1) if (argc > isc_commandline_index + 1)
fatal("extraneous arguments"); fatal("extraneous arguments");
name = dns_fixedname_initname(&fname); dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
isc_buffer_init(&buf, argv[isc_commandline_index], isc_buffer_init(&buf, argv[isc_commandline_index],
strlen(argv[isc_commandline_index])); strlen(argv[isc_commandline_index]));
isc_buffer_add(&buf, strlen(argv[isc_commandline_index])); isc_buffer_add(&buf, strlen(argv[isc_commandline_index]));
@@ -518,12 +529,23 @@ main(int argc, char **argv) {
} }
if (strcasecmp(algname, "RSA") == 0) { if (strcasecmp(algname, "RSA") == 0) {
#ifndef PK11_MD5_DISABLE
fprintf(stderr, "The use of RSA (RSAMD5) is not " fprintf(stderr, "The use of RSA (RSAMD5) is not "
"recommended.\nIf you still wish to " "recommended.\nIf you still wish to "
"use RSA (RSAMD5) please specify " "use RSA (RSAMD5) please specify "
"\"-a RSAMD5\"\n"); "\"-a RSAMD5\"\n");
INSIST(freeit == NULL); INSIST(freeit == NULL);
return (1); return (1);
#else
fprintf(stderr,
"The use of RSA (RSAMD5) was disabled\n");
INSIST(freeit == NULL);
return (1);
} else if (strcasecmp(algname, "RSAMD5") == 0) {
fprintf(stderr, "The use of RSAMD5 was disabled\n");
INSIST(freeit == NULL);
return (1);
#endif
} else { } else {
r.base = algname; r.base = algname;
r.length = strlen(algname); r.length = strlen(algname);
@@ -536,6 +558,10 @@ main(int argc, char **argv) {
} }
} }
#ifdef PK11_MD5_DISABLE
INSIST((alg != DNS_KEYALG_RSAMD5));
#endif
if (!dst_algorithm_supported(alg)) { if (!dst_algorithm_supported(alg)) {
fatal("unsupported algorithm: %d", alg); fatal("unsupported algorithm: %d", alg);
} }
@@ -616,14 +642,14 @@ main(int argc, char **argv) {
"prepublication interval."); "prepublication interval.");
if (!setpub && !setact) { if (!setpub && !setact) {
setpub = setact = true; setpub = setact = ISC_TRUE;
publish = now; publish = now;
activate = now + prepub; activate = now + prepub;
} else if (setpub && !setact) { } else if (setpub && !setact) {
setact = true; setact = ISC_TRUE;
activate = publish + prepub; activate = publish + prepub;
} else if (setact && !setpub) { } else if (setact && !setpub) {
setpub = true; setpub = ISC_TRUE;
publish = activate - prepub; publish = activate - prepub;
} }
@@ -709,7 +735,7 @@ main(int argc, char **argv) {
"You can use dnssec-settime -D to " "You can use dnssec-settime -D to "
"change this.\n", program, keystr); "change this.\n", program, keystr);
setpub = setact = true; setpub = setact = ISC_TRUE;
} }
switch (alg) { switch (alg) {
@@ -808,7 +834,7 @@ main(int argc, char **argv) {
case DNS_KEYALG_NSEC3RSASHA1: case DNS_KEYALG_NSEC3RSASHA1:
case DNS_KEYALG_RSASHA256: case DNS_KEYALG_RSASHA256:
case DNS_KEYALG_RSASHA512: case DNS_KEYALG_RSASHA512:
show_progress = true; show_progress = ISC_TRUE;
break; break;
case DNS_KEYALG_DH: case DNS_KEYALG_DH:
@@ -822,31 +848,33 @@ main(int argc, char **argv) {
case DST_ALG_ECDSA384: case DST_ALG_ECDSA384:
case DST_ALG_ED25519: case DST_ALG_ED25519:
case DST_ALG_ED448: case DST_ALG_ED448:
show_progress = true; show_progress = ISC_TRUE;
break; break;
} }
if ((flags & DNS_KEYFLAG_TYPEMASK) == DNS_KEYTYPE_NOKEY) if ((flags & DNS_KEYFLAG_TYPEMASK) == DNS_KEYTYPE_NOKEY)
null_key = true; null_key = ISC_TRUE;
isc_buffer_init(&buf, filename, sizeof(filename) - 1); isc_buffer_init(&buf, filename, sizeof(filename) - 1);
do { do {
conflict = false; conflict = ISC_FALSE;
if (!quiet && show_progress) { if (!quiet && show_progress) {
fprintf(stderr, "Generating key pair."); fprintf(stderr, "Generating key pair.");
ret = dst_key_generate(name, alg, size, param, flags, ret = dst_key_generate2(name, alg, size, param, flags,
protocol, rdclass, mctx, &key, protocol, rdclass, mctx, &key,
&progress); &progress);
putc('\n', stderr); putc('\n', stderr);
fflush(stderr); fflush(stderr);
} else { } else {
ret = dst_key_generate(name, alg, size, param, flags, ret = dst_key_generate2(name, alg, size, param, flags,
protocol, rdclass, mctx, &key, protocol, rdclass, mctx, &key,
NULL); NULL);
} }
isc_entropy_stopcallbacksources(ectx);
if (ret != ISC_R_SUCCESS) { if (ret != ISC_R_SUCCESS) {
char namestr[DNS_NAME_FORMATSIZE]; char namestr[DNS_NAME_FORMATSIZE];
char algstr[DNS_SECALG_FORMATSIZE]; char algstr[DNS_SECALG_FORMATSIZE];
@@ -953,7 +981,7 @@ main(int argc, char **argv) {
* or another key being revoked. * or another key being revoked.
*/ */
if (key_collision(key, name, directory, mctx, NULL)) { if (key_collision(key, name, directory, mctx, NULL)) {
conflict = true; conflict = ISC_TRUE;
if (null_key) { if (null_key) {
dst_key_free(&key); dst_key_free(&key);
break; break;
@@ -974,7 +1002,7 @@ main(int argc, char **argv) {
dst_key_free(&key); dst_key_free(&key);
} }
} while (conflict == true); } while (conflict == ISC_TRUE);
if (conflict) if (conflict)
fatal("cannot generate a null key due to possible key ID " fatal("cannot generate a null key due to possible key ID "
@@ -999,6 +1027,7 @@ main(int argc, char **argv) {
dst_key_free(&prevkey); dst_key_free(&prevkey);
cleanup_logging(&log); cleanup_logging(&log);
cleanup_entropy(&ectx);
dst_lib_destroy(); dst_lib_destroy();
dns_name_destroy(); dns_name_destroy();
if (verbose > 10) if (verbose > 10)
+27 -1
View File
@@ -81,6 +81,7 @@
<arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">protocol</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-p <replaceable class="parameter">protocol</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-q</option></arg> <arg choice="opt" rep="norepeat"><option>-q</option></arg>
<arg choice="opt" rep="norepeat"><option>-R <replaceable class="parameter">date/offset</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-R <replaceable class="parameter">date/offset</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-r <replaceable class="parameter">randomdev</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-S <replaceable class="parameter">key</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-S <replaceable class="parameter">key</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">strength</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">strength</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">type</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-t <replaceable class="parameter">type</replaceable></option></arg>
@@ -123,7 +124,7 @@
<para> <para>
Selects the cryptographic algorithm. For DNSSEC keys, the value Selects the cryptographic algorithm. For DNSSEC keys, the value
of <option>algorithm</option> must be one of RSAMD5, RSASHA1, of <option>algorithm</option> must be one of RSAMD5, RSASHA1,
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For
TKEY, the value must be DH (Diffie Hellman); specifying TKEY, the value must be DH (Diffie Hellman); specifying
his value will automatically set the <option>-T KEY</option> his value will automatically set the <option>-T KEY</option>
@@ -348,6 +349,31 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-r <replaceable class="parameter">randomdev</replaceable></term>
<listitem>
<para>
Specifies a source of randomness. Normally, when generating
DNSSEC keys, this option has no effect; the random number
generation function provided by the cryptographic library will
be used.
</para>
<para>
If that behavior is disabled at compile time, however,
the specified file will be used as entropy source
for key generation. <filename>randomdev</filename> is
the name of a character device or file containing random
data to be used. The special value <filename>keyboard</filename>
indicates that keyboard input should be used.
</para>
<para>
The default is <filename>/dev/random</filename> if the
operating system provides it or an equivalent device;
if not, the default source of randomness is keyboard input.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-S <replaceable class="parameter">key</replaceable></term> <term>-S <replaceable class="parameter">key</replaceable></term>
<listitem> <listitem>
+24 -1
View File
@@ -57,6 +57,7 @@
[<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>]
[<code class="option">-q</code>] [<code class="option">-q</code>]
[<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>]
[<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>]
[<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>]
[<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>]
[<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>]
@@ -100,7 +101,7 @@
<p> <p>
Selects the cryptographic algorithm. For DNSSEC keys, the value Selects the cryptographic algorithm. For DNSSEC keys, the value
of <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1, of <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECCGOST,
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For
TKEY, the value must be DH (Diffie Hellman); specifying TKEY, the value must be DH (Diffie Hellman); specifying
his value will automatically set the <code class="option">-T KEY</code> his value will automatically set the <code class="option">-T KEY</code>
@@ -278,6 +279,28 @@
a satisfactory key. a satisfactory key.
</p> </p>
</dd> </dd>
<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
<dd>
<p>
Specifies a source of randomness. Normally, when generating
DNSSEC keys, this option has no effect; the random number
generation function provided by the cryptographic library will
be used.
</p>
<p>
If that behavior is disabled at compile time, however,
the specified file will be used as entropy source
for key generation. <code class="filename">randomdev</code> is
the name of a character device or file containing random
data to be used. The special value <code class="filename">keyboard</code>
indicates that keyboard input should be used.
</p>
<p>
The default is <code class="filename">/dev/random</code> if the
operating system provides it or an equivalent device;
if not, the default source of randomness is keyboard input.
</p>
</dd>
<dt><span class="term">-S <em class="replaceable"><code>key</code></em></span></dt> <dt><span class="term">-S <em class="replaceable"><code>key</code></em></span></dt>
<dd> <dd>
<p> <p>
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2009, 2011, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2009, 2011, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -99,5 +99,5 @@ RFC 5011\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2009, 2011, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2009, 2011, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+30 -14
View File
@@ -13,13 +13,12 @@
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/mem.h> #include <isc/mem.h>
@@ -32,7 +31,7 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -51,9 +50,12 @@ usage(void) {
fprintf(stderr, "Usage:\n"); fprintf(stderr, "Usage:\n");
fprintf(stderr, " %s [options] keyfile\n\n", program); fprintf(stderr, " %s [options] keyfile\n\n", program);
fprintf(stderr, "Version: %s\n", VERSION); fprintf(stderr, "Version: %s\n", VERSION);
#if USE_PKCS11 #if defined(PKCS11CRYPTO)
fprintf(stderr, " -E engine: specify PKCS#11 provider " fprintf(stderr, " -E engine: specify PKCS#11 provider "
"(default: %s)\n", PK11_LIB_LOCATION); "(default: %s)\n", PK11_LIB_LOCATION);
#elif defined(USE_PKCS11)
fprintf(stderr, " -E engine: specify OpenSSL engine "
"(default \"pkcs11\")\n");
#else #else
fprintf(stderr, " -E engine: specify OpenSSL engine\n"); fprintf(stderr, " -E engine: specify OpenSSL engine\n");
#endif #endif
@@ -74,19 +76,24 @@ usage(void) {
int int
main(int argc, char **argv) { main(int argc, char **argv) {
isc_result_t result; isc_result_t result;
#ifdef USE_PKCS11
const char *engine = PKCS11_ENGINE;
#else
const char *engine = NULL; const char *engine = NULL;
#endif
char const *filename = NULL; char const *filename = NULL;
char *dir = NULL; char *dir = NULL;
char newname[1024], oldname[1024]; char newname[1024], oldname[1024];
char keystr[DST_KEY_FORMATSIZE]; char keystr[DST_KEY_FORMATSIZE];
char *endp; char *endp;
int ch; int ch;
isc_entropy_t *ectx = NULL;
dst_key_t *key = NULL; dst_key_t *key = NULL;
uint32_t flags; isc_uint32_t flags;
isc_buffer_t buf; isc_buffer_t buf;
bool force = false; isc_boolean_t force = ISC_FALSE;
bool removefile = false; isc_boolean_t removefile = ISC_FALSE;
bool id = false; isc_boolean_t id = ISC_FALSE;
if (argc == 1) if (argc == 1)
usage(); usage();
@@ -95,12 +102,12 @@ main(int argc, char **argv) {
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("Out of memory"); fatal("Out of memory");
#if HAVE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv, "E:fK:rRhv:V")) != -1) { while ((ch = isc_commandline_parse(argc, argv, "E:fK:rRhv:V")) != -1) {
switch (ch) { switch (ch) {
@@ -108,7 +115,7 @@ main(int argc, char **argv) {
engine = isc_commandline_argument; engine = isc_commandline_argument;
break; break;
case 'f': case 'f':
force = true; force = ISC_TRUE;
break; break;
case 'K': case 'K':
/* /*
@@ -122,10 +129,10 @@ main(int argc, char **argv) {
} }
break; break;
case 'r': case 'r':
removefile = true; removefile = ISC_TRUE;
break; break;
case 'R': case 'R':
id = true; id = ISC_TRUE;
break; break;
case 'v': case 'v':
verbose = strtol(isc_commandline_argument, &endp, 0); verbose = strtol(isc_commandline_argument, &endp, 0);
@@ -173,10 +180,17 @@ main(int argc, char **argv) {
} }
} }
result = dst_lib_init(mctx, engine); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
result = dst_lib_init2(mctx, ectx, engine,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("Could not initialize dst: %s", fatal("Could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS)
fatal("Could not initialize hash");
isc_entropy_stopcallbacksources(ectx);
result = dst_key_fromnamedfile(filename, dir, result = dst_key_fromnamedfile(filename, dir,
DST_TYPE_PUBLIC|DST_TYPE_PRIVATE, DST_TYPE_PUBLIC|DST_TYPE_PRIVATE,
@@ -257,7 +271,9 @@ main(int argc, char **argv) {
cleanup: cleanup:
dst_key_free(&key); dst_key_free(&key);
isc_hash_destroy();
dst_lib_destroy(); dst_lib_destroy();
cleanup_entropy(&ectx);
if (verbose > 10) if (verbose > 10)
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
if (dir != NULL) if (dir != NULL)
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2009, 2011, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2009, 2011, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2009-2011, 2014-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2009-2011, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -200,5 +200,5 @@ RFC 5011\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2009-2011, 2014-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2009-2011, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
+68 -55
View File
@@ -13,8 +13,6 @@
#include <config.h> #include <config.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
@@ -22,6 +20,7 @@
#include <isc/buffer.h> #include <isc/buffer.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/hash.h> #include <isc/hash.h>
#include <isc/mem.h> #include <isc/mem.h>
@@ -35,7 +34,7 @@
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -55,7 +54,7 @@ usage(void) {
fprintf(stderr, " %s [options] keyfile\n\n", program); fprintf(stderr, " %s [options] keyfile\n\n", program);
fprintf(stderr, "Version: %s\n", VERSION); fprintf(stderr, "Version: %s\n", VERSION);
fprintf(stderr, "General options:\n"); fprintf(stderr, "General options:\n");
#if USE_PKCS11 #if defined(PKCS11CRYPTO)
fprintf(stderr, " -E engine: specify PKCS#11 provider " fprintf(stderr, " -E engine: specify PKCS#11 provider "
"(default: %s)\n", PK11_LIB_LOCATION); "(default: %s)\n", PK11_LIB_LOCATION);
#elif defined(USE_PKCS11) #elif defined(USE_PKCS11)
@@ -104,7 +103,7 @@ usage(void) {
} }
static void static void
printtime(dst_key_t *key, int type, const char *tag, bool epoch, printtime(dst_key_t *key, int type, const char *tag, isc_boolean_t epoch,
FILE *stream) FILE *stream)
{ {
isc_result_t result; isc_result_t result;
@@ -129,13 +128,18 @@ printtime(dst_key_t *key, int type, const char *tag, bool epoch,
int int
main(int argc, char **argv) { main(int argc, char **argv) {
isc_result_t result; isc_result_t result;
#ifdef USE_PKCS11
const char *engine = PKCS11_ENGINE;
#else
const char *engine = NULL; const char *engine = NULL;
#endif
const char *filename = NULL; const char *filename = NULL;
char *directory = NULL; char *directory = NULL;
char newname[1024]; char newname[1024];
char keystr[DST_KEY_FORMATSIZE]; char keystr[DST_KEY_FORMATSIZE];
char *endp, *p; char *endp, *p;
int ch; int ch;
isc_entropy_t *ectx = NULL;
const char *predecessor = NULL; const char *predecessor = NULL;
dst_key_t *prevkey = NULL; dst_key_t *prevkey = NULL;
dst_key_t *key = NULL; dst_key_t *key = NULL;
@@ -143,29 +147,29 @@ main(int argc, char **argv) {
dns_name_t *name = NULL; dns_name_t *name = NULL;
dns_secalg_t alg = 0; dns_secalg_t alg = 0;
unsigned int size = 0; unsigned int size = 0;
uint16_t flags = 0; isc_uint16_t flags = 0;
int prepub = -1; int prepub = -1;
dns_ttl_t ttl = 0; dns_ttl_t ttl = 0;
isc_stdtime_t now; isc_stdtime_t now;
isc_stdtime_t pub = 0, act = 0, rev = 0, inact = 0, del = 0; isc_stdtime_t pub = 0, act = 0, rev = 0, inact = 0, del = 0;
isc_stdtime_t prevact = 0, previnact = 0, prevdel = 0; isc_stdtime_t prevact = 0, previnact = 0, prevdel = 0;
bool setpub = false, setact = false; isc_boolean_t setpub = ISC_FALSE, setact = ISC_FALSE;
bool setrev = false, setinact = false; isc_boolean_t setrev = ISC_FALSE, setinact = ISC_FALSE;
bool setdel = false, setttl = false; isc_boolean_t setdel = ISC_FALSE, setttl = ISC_FALSE;
bool unsetpub = false, unsetact = false; isc_boolean_t unsetpub = ISC_FALSE, unsetact = ISC_FALSE;
bool unsetrev = false, unsetinact = false; isc_boolean_t unsetrev = ISC_FALSE, unsetinact = ISC_FALSE;
bool unsetdel = false; isc_boolean_t unsetdel = ISC_FALSE;
bool printcreate = false, printpub = false; isc_boolean_t printcreate = ISC_FALSE, printpub = ISC_FALSE;
bool printact = false, printrev = false; isc_boolean_t printact = ISC_FALSE, printrev = ISC_FALSE;
bool printinact = false, printdel = false; isc_boolean_t printinact = ISC_FALSE, printdel = ISC_FALSE;
bool force = false; isc_boolean_t force = ISC_FALSE;
bool epoch = false; isc_boolean_t epoch = ISC_FALSE;
bool changed = false; isc_boolean_t changed = ISC_FALSE;
isc_log_t *log = NULL; isc_log_t *log = NULL;
isc_stdtime_t syncadd = 0, syncdel = 0; isc_stdtime_t syncadd = 0, syncdel = 0;
bool unsetsyncadd = false, setsyncadd = false; isc_boolean_t unsetsyncadd = ISC_FALSE, setsyncadd = ISC_FALSE;
bool unsetsyncdel = false, setsyncdel = false; isc_boolean_t unsetsyncdel = ISC_FALSE, setsyncdel = ISC_FALSE;
bool printsyncadd = false, printsyncdel = false; isc_boolean_t printsyncadd = ISC_FALSE, printsyncdel = ISC_FALSE;
if (argc == 1) if (argc == 1)
usage(); usage();
@@ -176,12 +180,12 @@ main(int argc, char **argv) {
setup_logging(mctx, &log); setup_logging(mctx, &log);
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
isc_stdtime_get(&now); isc_stdtime_get(&now);
@@ -192,51 +196,51 @@ main(int argc, char **argv) {
engine = isc_commandline_argument; engine = isc_commandline_argument;
break; break;
case 'f': case 'f':
force = true; force = ISC_TRUE;
break; break;
case 'p': case 'p':
p = isc_commandline_argument; p = isc_commandline_argument;
if (!strcasecmp(p, "all")) { if (!strcasecmp(p, "all")) {
printcreate = true; printcreate = ISC_TRUE;
printpub = true; printpub = ISC_TRUE;
printact = true; printact = ISC_TRUE;
printrev = true; printrev = ISC_TRUE;
printinact = true; printinact = ISC_TRUE;
printdel = true; printdel = ISC_TRUE;
printsyncadd = true; printsyncadd = ISC_TRUE;
printsyncdel = true; printsyncdel = ISC_TRUE;
break; break;
} }
do { do {
switch (*p++) { switch (*p++) {
case 'C': case 'C':
printcreate = true; printcreate = ISC_TRUE;
break; break;
case 'P': case 'P':
if (!strncmp(p, "sync", 4)) { if (!strncmp(p, "sync", 4)) {
p += 4; p += 4;
printsyncadd = true; printsyncadd = ISC_TRUE;
break; break;
} }
printpub = true; printpub = ISC_TRUE;
break; break;
case 'A': case 'A':
printact = true; printact = ISC_TRUE;
break; break;
case 'R': case 'R':
printrev = true; printrev = ISC_TRUE;
break; break;
case 'I': case 'I':
printinact = true; printinact = ISC_TRUE;
break; break;
case 'D': case 'D':
if (!strncmp(p, "sync", 4)) { if (!strncmp(p, "sync", 4)) {
p += 4; p += 4;
printsyncdel = true; printsyncdel = ISC_TRUE;
break; break;
} }
printdel = true; printdel = ISC_TRUE;
break; break;
case ' ': case ' ':
break; break;
@@ -247,7 +251,7 @@ main(int argc, char **argv) {
} while (*p != '\0'); } while (*p != '\0');
break; break;
case 'u': case 'u':
epoch = true; epoch = ISC_TRUE;
break; break;
case 'K': case 'K':
/* /*
@@ -263,7 +267,7 @@ main(int argc, char **argv) {
break; break;
case 'L': case 'L':
ttl = strtottl(isc_commandline_argument); ttl = strtottl(isc_commandline_argument);
setttl = true; setttl = ISC_TRUE;
break; break;
case 'v': case 'v':
verbose = strtol(isc_commandline_argument, &endp, 0); verbose = strtol(isc_commandline_argument, &endp, 0);
@@ -277,7 +281,7 @@ main(int argc, char **argv) {
fatal("-P sync specified more than " fatal("-P sync specified more than "
"once"); "once");
changed = true; changed = ISC_TRUE;
syncadd = strtotime(isc_commandline_argument, syncadd = strtotime(isc_commandline_argument,
now, now, &setsyncadd); now, now, &setsyncadd);
unsetsyncadd = !setsyncadd; unsetsyncadd = !setsyncadd;
@@ -287,7 +291,7 @@ main(int argc, char **argv) {
if (setpub || unsetpub) if (setpub || unsetpub)
fatal("-P specified more than once"); fatal("-P specified more than once");
changed = true; changed = ISC_TRUE;
pub = strtotime(isc_commandline_argument, pub = strtotime(isc_commandline_argument,
now, now, &setpub); now, now, &setpub);
unsetpub = !setpub; unsetpub = !setpub;
@@ -296,7 +300,7 @@ main(int argc, char **argv) {
if (setact || unsetact) if (setact || unsetact)
fatal("-A specified more than once"); fatal("-A specified more than once");
changed = true; changed = ISC_TRUE;
act = strtotime(isc_commandline_argument, act = strtotime(isc_commandline_argument,
now, now, &setact); now, now, &setact);
unsetact = !setact; unsetact = !setact;
@@ -305,7 +309,7 @@ main(int argc, char **argv) {
if (setrev || unsetrev) if (setrev || unsetrev)
fatal("-R specified more than once"); fatal("-R specified more than once");
changed = true; changed = ISC_TRUE;
rev = strtotime(isc_commandline_argument, rev = strtotime(isc_commandline_argument,
now, now, &setrev); now, now, &setrev);
unsetrev = !setrev; unsetrev = !setrev;
@@ -314,7 +318,7 @@ main(int argc, char **argv) {
if (setinact || unsetinact) if (setinact || unsetinact)
fatal("-I specified more than once"); fatal("-I specified more than once");
changed = true; changed = ISC_TRUE;
inact = strtotime(isc_commandline_argument, inact = strtotime(isc_commandline_argument,
now, now, &setinact); now, now, &setinact);
unsetinact = !setinact; unsetinact = !setinact;
@@ -326,7 +330,7 @@ main(int argc, char **argv) {
fatal("-D sync specified more than " fatal("-D sync specified more than "
"once"); "once");
changed = true; changed = ISC_TRUE;
syncdel = strtotime(isc_commandline_argument, syncdel = strtotime(isc_commandline_argument,
now, now, &setsyncdel); now, now, &setsyncdel);
unsetsyncdel = !setsyncdel; unsetsyncdel = !setsyncdel;
@@ -337,7 +341,7 @@ main(int argc, char **argv) {
if (setdel || unsetdel) if (setdel || unsetdel)
fatal("-D specified more than once"); fatal("-D specified more than once");
changed = true; changed = ISC_TRUE;
del = strtotime(isc_commandline_argument, del = strtotime(isc_commandline_argument,
now, now, &setdel); now, now, &setdel);
unsetdel = !setdel; unsetdel = !setdel;
@@ -374,10 +378,17 @@ main(int argc, char **argv) {
if (argc > isc_commandline_index + 1) if (argc > isc_commandline_index + 1)
fatal("Extraneous arguments"); fatal("Extraneous arguments");
result = dst_lib_init(mctx, engine); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
result = dst_lib_init2(mctx, ectx, engine,
ISC_ENTROPY_BLOCKING | ISC_ENTROPY_GOODONLY);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("Could not initialize dst: %s", fatal("Could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS)
fatal("Could not initialize hash");
isc_entropy_stopcallbacksources(ectx);
if (predecessor != NULL) { if (predecessor != NULL) {
int major, minor; int major, minor;
@@ -448,7 +459,7 @@ main(int argc, char **argv) {
"before it is scheduled to be " "before it is scheduled to be "
"inactive.\n", program); "inactive.\n", program);
changed = setpub = setact = true; changed = setpub = setact = ISC_TRUE;
} else { } else {
if (prepub < 0) if (prepub < 0)
prepub = 0; prepub = 0;
@@ -460,10 +471,10 @@ main(int argc, char **argv) {
"prepublication interval."); "prepublication interval.");
if (setpub && !setact) { if (setpub && !setact) {
setact = true; setact = ISC_TRUE;
act = pub + prepub; act = pub + prepub;
} else if (setact && !setpub) { } else if (setact && !setpub) {
setpub = true; setpub = ISC_TRUE;
pub = act - prepub; pub = act - prepub;
} }
@@ -594,11 +605,11 @@ main(int argc, char **argv) {
if (force && !changed) { if (force && !changed) {
dst_key_settime(key, DST_TIME_PUBLISH, now); dst_key_settime(key, DST_TIME_PUBLISH, now);
dst_key_settime(key, DST_TIME_ACTIVATE, now); dst_key_settime(key, DST_TIME_ACTIVATE, now);
changed = true; changed = ISC_TRUE;
} }
if (!changed && setttl) if (!changed && setttl)
changed = true; changed = ISC_TRUE;
/* /*
* Print out time values, if -p was used. * Print out time values, if -p was used.
@@ -661,7 +672,9 @@ main(int argc, char **argv) {
if (prevkey != NULL) if (prevkey != NULL)
dst_key_free(&prevkey); dst_key_free(&prevkey);
dst_key_free(&key); dst_key_free(&key);
isc_hash_destroy();
dst_lib_destroy(); dst_lib_destroy();
cleanup_entropy(&ectx);
if (verbose > 10) if (verbose > 10)
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
cleanup_logging(&log); cleanup_logging(&log);
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2009-2011, 2014-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2009-2011, 2014-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
+19 -3
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2000-2009, 2011-2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2000-2009, 2011-2017 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -39,7 +39,7 @@
dnssec-signzone \- DNSSEC zone signing tool dnssec-signzone \- DNSSEC zone signing tool
.SH "SYNOPSIS" .SH "SYNOPSIS"
.HP \w'\fBdnssec\-signzone\fR\ 'u .HP \w'\fBdnssec\-signzone\fR\ 'u
\fBdnssec\-signzone\fR [\fB\-a\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-d\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-e\ \fR\fB\fIend\-time\fR\fR] [\fB\-f\ \fR\fB\fIoutput\-file\fR\fR] [\fB\-g\fR] [\fB\-h\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-I\ \fR\fB\fIinput\-format\fR\fR] [\fB\-j\ \fR\fB\fIjitter\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\ \fR\fB\fIkey\fR\fR] [\fB\-L\ \fR\fB\fIserial\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-M\ \fR\fB\fImaxttl\fR\fR] [\fB\-N\ \fR\fB\fIsoa\-serial\-format\fR\fR] [\fB\-o\ \fR\fB\fIorigin\fR\fR] [\fB\-O\ \fR\fB\fIoutput\-format\fR\fR] [\fB\-P\fR] [\fB\-Q\fR] [\fB\-R\fR] [\fB\-S\fR] [\fB\-s\ \fR\fB\fIstart\-time\fR\fR] [\fB\-T\ \fR\fB\fIttl\fR\fR] [\fB\-t\fR] [\fB\-u\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-V\fR] [\fB\-X\ \fR\fB\fIextended\ end\-time\fR\fR] [\fB\-x\fR] [\fB\-z\fR] [\fB\-3\ \fR\fB\fIsalt\fR\fR] [\fB\-H\ \fR\fB\fIiterations\fR\fR] [\fB\-A\fR] {zonefile} [key...] \fBdnssec\-signzone\fR [\fB\-a\fR] [\fB\-c\ \fR\fB\fIclass\fR\fR] [\fB\-d\ \fR\fB\fIdirectory\fR\fR] [\fB\-D\fR] [\fB\-E\ \fR\fB\fIengine\fR\fR] [\fB\-e\ \fR\fB\fIend\-time\fR\fR] [\fB\-f\ \fR\fB\fIoutput\-file\fR\fR] [\fB\-g\fR] [\fB\-h\fR] [\fB\-i\ \fR\fB\fIinterval\fR\fR] [\fB\-I\ \fR\fB\fIinput\-format\fR\fR] [\fB\-j\ \fR\fB\fIjitter\fR\fR] [\fB\-K\ \fR\fB\fIdirectory\fR\fR] [\fB\-k\ \fR\fB\fIkey\fR\fR] [\fB\-L\ \fR\fB\fIserial\fR\fR] [\fB\-l\ \fR\fB\fIdomain\fR\fR] [\fB\-M\ \fR\fB\fImaxttl\fR\fR] [\fB\-N\ \fR\fB\fIsoa\-serial\-format\fR\fR] [\fB\-o\ \fR\fB\fIorigin\fR\fR] [\fB\-O\ \fR\fB\fIoutput\-format\fR\fR] [\fB\-P\fR] [\fB\-p\fR] [\fB\-Q\fR] [\fB\-R\fR] [\fB\-r\ \fR\fB\fIrandomdev\fR\fR] [\fB\-S\fR] [\fB\-s\ \fR\fB\fIstart\-time\fR\fR] [\fB\-T\ \fR\fB\fIttl\fR\fR] [\fB\-t\fR] [\fB\-u\fR] [\fB\-v\ \fR\fB\fIlevel\fR\fR] [\fB\-V\fR] [\fB\-X\ \fR\fB\fIextended\ end\-time\fR\fR] [\fB\-x\fR] [\fB\-z\fR] [\fB\-3\ \fR\fB\fIsalt\fR\fR] [\fB\-H\ \fR\fB\fIiterations\fR\fR] [\fB\-A\fR] {zonefile} [key...]
.SH "DESCRIPTION" .SH "DESCRIPTION"
.PP .PP
\fBdnssec\-signzone\fR \fBdnssec\-signzone\fR
@@ -278,6 +278,11 @@ specifies the format version of the raw zone file: if N is 0, the raw file can b
\fBnamed\fR; if N is 1, the file can be read by release 9\&.9\&.0 or higher; the default is 1\&. \fBnamed\fR; if N is 1, the file can be read by release 9\&.9\&.0 or higher; the default is 1\&.
.RE .RE
.PP .PP
\-p
.RS 4
Use pseudo\-random data when signing the zone\&. This is faster, but less secure, than using real random data\&. This option may be useful when signing large zones or when the entropy source is limited\&.
.RE
.PP
\-P \-P
.RS 4 .RS 4
Disable post sign verification tests\&. Disable post sign verification tests\&.
@@ -306,6 +311,17 @@ This option is similar to
to signatures from keys that are no longer published\&. This enables ZSK rollover using the procedure described in RFC 4641, section 4\&.2\&.1\&.2 ("Double Signature Zone Signing Key Rollover")\&. to signatures from keys that are no longer published\&. This enables ZSK rollover using the procedure described in RFC 4641, section 4\&.2\&.1\&.2 ("Double Signature Zone Signing Key Rollover")\&.
.RE .RE
.PP .PP
\-r \fIrandomdev\fR
.RS 4
Specifies the source of randomness\&. If the operating system does not provide a
/dev/random
or equivalent device, the default source of randomness is keyboard input\&.
randomdev
specifies the name of a character device or file containing random data to be used instead of the default\&. The special value
keyboard
indicates that keyboard input should be used\&.
.RE
.PP
\-S \-S
.RS 4 .RS 4
Smart signing: Instructs Smart signing: Instructs
@@ -468,5 +484,5 @@ RFC 4641\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2000-2009, 2011-2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2000-2009, 2011-2017 Internet Systems Consortium, Inc. ("ISC")
.br .br
File diff suppressed because it is too large Load Diff
+31
View File
@@ -78,8 +78,10 @@
<arg choice="opt" rep="norepeat"><option>-o <replaceable class="parameter">origin</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-o <replaceable class="parameter">origin</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-O <replaceable class="parameter">output-format</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-O <replaceable class="parameter">output-format</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-P</option></arg> <arg choice="opt" rep="norepeat"><option>-P</option></arg>
<arg choice="opt" rep="norepeat"><option>-p</option></arg>
<arg choice="opt" rep="norepeat"><option>-Q</option></arg> <arg choice="opt" rep="norepeat"><option>-Q</option></arg>
<arg choice="opt" rep="norepeat"><option>-R</option></arg> <arg choice="opt" rep="norepeat"><option>-R</option></arg>
<arg choice="opt" rep="norepeat"><option>-r <replaceable class="parameter">randomdev</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-S</option></arg> <arg choice="opt" rep="norepeat"><option>-S</option></arg>
<arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">start-time</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-s <replaceable class="parameter">start-time</replaceable></option></arg>
<arg choice="opt" rep="norepeat"><option>-T <replaceable class="parameter">ttl</replaceable></option></arg> <arg choice="opt" rep="norepeat"><option>-T <replaceable class="parameter">ttl</replaceable></option></arg>
@@ -506,6 +508,18 @@
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-p</term>
<listitem>
<para>
Use pseudo-random data when signing the zone. This is faster,
but less secure, than using real random data. This option
may be useful when signing large zones or when the entropy
source is limited.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-P</term> <term>-P</term>
<listitem> <listitem>
@@ -557,6 +571,23 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>-r <replaceable class="parameter">randomdev</replaceable></term>
<listitem>
<para>
Specifies the source of randomness. If the operating
system does not provide a <filename>/dev/random</filename>
or equivalent device, the default source of randomness
is keyboard input. <filename>randomdev</filename>
specifies
the name of a character device or file containing random
data to be used instead of the default. The special value
<filename>keyboard</filename> indicates that keyboard
input should be used.
</para>
</listitem>
</varlistentry>
<varlistentry> <varlistentry>
<term>-S</term> <term>-S</term>
<listitem> <listitem>
+26 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2000-2009, 2011-2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2000-2009, 2011-2017 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -54,8 +54,10 @@
[<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>]
[<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>]
[<code class="option">-P</code>] [<code class="option">-P</code>]
[<code class="option">-p</code>]
[<code class="option">-Q</code>] [<code class="option">-Q</code>]
[<code class="option">-R</code>] [<code class="option">-R</code>]
[<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>]
[<code class="option">-S</code>] [<code class="option">-S</code>]
[<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>]
[<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>]
@@ -398,6 +400,15 @@
can be read by release 9.9.0 or higher; the default is 1. can be read by release 9.9.0 or higher; the default is 1.
</p> </p>
</dd> </dd>
<dt><span class="term">-p</span></dt>
<dd>
<p>
Use pseudo-random data when signing the zone. This is faster,
but less secure, than using real random data. This option
may be useful when signing large zones or when the entropy
source is limited.
</p>
</dd>
<dt><span class="term">-P</span></dt> <dt><span class="term">-P</span></dt>
<dd> <dd>
<p> <p>
@@ -442,6 +453,20 @@
("Double Signature Zone Signing Key Rollover"). ("Double Signature Zone Signing Key Rollover").
</p> </p>
</dd> </dd>
<dt><span class="term">-r <em class="replaceable"><code>randomdev</code></em></span></dt>
<dd>
<p>
Specifies the source of randomness. If the operating
system does not provide a <code class="filename">/dev/random</code>
or equivalent device, the default source of randomness
is keyboard input. <code class="filename">randomdev</code>
specifies
the name of a character device or file containing random
data to be used instead of the default. The special value
<code class="filename">keyboard</code> indicates that keyboard
input should be used.
</p>
</dd>
<dt><span class="term">-S</span></dt> <dt><span class="term">-S</span></dt>
<dd> <dd>
<p> <p>
+2 -2
View File
@@ -1,4 +1,4 @@
.\" Copyright (C) 2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") .\" Copyright (C) 2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.\" .\"
.\" This Source Code Form is subject to the terms of the Mozilla Public .\" 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 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -113,5 +113,5 @@ RFC 4033\&.
\fBInternet Systems Consortium, Inc\&.\fR \fBInternet Systems Consortium, Inc\&.\fR
.SH "COPYRIGHT" .SH "COPYRIGHT"
.br .br
Copyright \(co 2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") Copyright \(co 2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
.br .br
+36 -18
View File
@@ -13,13 +13,13 @@
#include <config.h> #include <config.h>
#include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <isc/app.h> #include <isc/app.h>
#include <isc/base32.h> #include <isc/base32.h>
#include <isc/commandline.h> #include <isc/commandline.h>
#include <isc/entropy.h>
#include <isc/event.h> #include <isc/event.h>
#include <isc/file.h> #include <isc/file.h>
#include <isc/hash.h> #include <isc/hash.h>
@@ -32,6 +32,7 @@
#include <isc/rwlock.h> #include <isc/rwlock.h>
#include <isc/serial.h> #include <isc/serial.h>
#include <isc/stdio.h> #include <isc/stdio.h>
#include <isc/stdlib.h>
#include <isc/string.h> #include <isc/string.h>
#include <isc/time.h> #include <isc/time.h>
#include <isc/util.h> #include <isc/util.h>
@@ -58,11 +59,10 @@
#include <dns/result.h> #include <dns/result.h>
#include <dns/soa.h> #include <dns/soa.h>
#include <dns/time.h> #include <dns/time.h>
#include <dns/zoneverify.h>
#include <dst/dst.h> #include <dst/dst.h>
#if USE_PKCS11 #ifdef PKCS11CRYPTO
#include <pk11/result.h> #include <pk11/result.h>
#endif #endif
@@ -73,13 +73,14 @@ int verbose;
static isc_stdtime_t now; static isc_stdtime_t now;
static isc_mem_t *mctx = NULL; static isc_mem_t *mctx = NULL;
static isc_entropy_t *ectx = NULL;
static dns_masterformat_t inputformat = dns_masterformat_text; static dns_masterformat_t inputformat = dns_masterformat_text;
static dns_db_t *gdb; /* The database */ static dns_db_t *gdb; /* The database */
static dns_dbversion_t *gversion; /* The database version */ static dns_dbversion_t *gversion; /* The database version */
static dns_rdataclass_t gclass; /* The class */ static dns_rdataclass_t gclass; /* The class */
static dns_name_t *gorigin; /* The database origin */ static dns_name_t *gorigin; /* The database origin */
static bool ignore_kskflag = false; static isc_boolean_t ignore_kskflag = ISC_FALSE;
static bool keyset_kskonly = false; static isc_boolean_t keyset_kskonly = ISC_FALSE;
/*% /*%
* Load the zone file from disk * Load the zone file from disk
@@ -96,7 +97,8 @@ loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
isc_buffer_init(&b, origin, len); isc_buffer_init(&b, origin, len);
isc_buffer_add(&b, len); isc_buffer_add(&b, len);
name = dns_fixedname_initname(&fname); dns_fixedname_init(&fname);
name = dns_fixedname_name(&fname);
result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL); result = dns_name_fromtext(name, &b, dns_rootname, 0, NULL);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("failed converting name '%s' to dns format: %s", fatal("failed converting name '%s' to dns format: %s",
@@ -106,7 +108,7 @@ loadzone(char *file, char *origin, dns_rdataclass_t rdclass, dns_db_t **db) {
rdclass, 0, NULL, db); rdclass, 0, NULL, db);
check_result(result, "dns_db_create()"); check_result(result, "dns_db_create()");
result = dns_db_load(*db, file, inputformat, 0); result = dns_db_load2(*db, file, inputformat);
switch (result) { switch (result) {
case DNS_R_SEENINCLUDE: case DNS_R_SEENINCLUDE:
case ISC_R_SUCCESS: case ISC_R_SUCCESS:
@@ -150,9 +152,12 @@ usage(void) {
fprintf(stderr, "\t\tfile format of input zonefile (text)\n"); fprintf(stderr, "\t\tfile format of input zonefile (text)\n");
fprintf(stderr, "\t-c class (IN)\n"); fprintf(stderr, "\t-c class (IN)\n");
fprintf(stderr, "\t-E engine:\n"); fprintf(stderr, "\t-E engine:\n");
#if USE_PKCS11 #if defined(PKCS11CRYPTO)
fprintf(stderr, "\t\tpath to PKCS#11 provider library " fprintf(stderr, "\t\tpath to PKCS#11 provider library "
"(default is %s)\n", PK11_LIB_LOCATION); "(default is %s)\n", PK11_LIB_LOCATION);
#elif defined(USE_PKCS11)
fprintf(stderr, "\t\tname of an OpenSSL engine to use "
"(default is \"pkcs11\")\n");
#else #else
fprintf(stderr, "\t\tname of an OpenSSL engine to use\n"); fprintf(stderr, "\t\tname of an OpenSSL engine to use\n");
#endif #endif
@@ -168,7 +173,11 @@ main(int argc, char *argv[]) {
char *inputformatstr = NULL; char *inputformatstr = NULL;
isc_result_t result; isc_result_t result;
isc_log_t *log = NULL; isc_log_t *log = NULL;
#ifdef USE_PKCS11
const char *engine = PKCS11_ENGINE;
#else
const char *engine = NULL; const char *engine = NULL;
#endif
char *classname = NULL; char *classname = NULL;
dns_rdataclass_t rdclass; dns_rdataclass_t rdclass;
char *endp; char *endp;
@@ -198,19 +207,19 @@ main(int argc, char *argv[]) {
break; break;
} }
} }
isc_commandline_reset = true; isc_commandline_reset = ISC_TRUE;
check_result(isc_app_start(), "isc_app_start"); check_result(isc_app_start(), "isc_app_start");
result = isc_mem_create(0, 0, &mctx); result = isc_mem_create(0, 0, &mctx);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("out of memory"); fatal("out of memory");
#if USE_PKCS11 #ifdef PKCS11CRYPTO
pk11_result_register(); pk11_result_register();
#endif #endif
dns_result_register(); dns_result_register();
isc_commandline_errprint = false; isc_commandline_errprint = ISC_FALSE;
while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) { while ((ch = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
switch (ch) { switch (ch) {
@@ -241,11 +250,11 @@ main(int argc, char *argv[]) {
break; break;
case 'x': case 'x':
keyset_kskonly = true; keyset_kskonly = ISC_TRUE;
break; break;
case 'z': case 'z':
ignore_kskflag = true; ignore_kskflag = ISC_TRUE;
break; break;
case '?': case '?':
@@ -269,11 +278,18 @@ main(int argc, char *argv[]) {
} }
} }
result = dst_lib_init(mctx, engine); if (ectx == NULL)
setup_entropy(mctx, NULL, &ectx);
result = dst_lib_init2(mctx, ectx, engine, ISC_ENTROPY_BLOCKING);
if (result != ISC_R_SUCCESS) if (result != ISC_R_SUCCESS)
fatal("could not initialize dst: %s", fatal("could not initialize dst: %s",
isc_result_totext(result)); isc_result_totext(result));
result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
if (result != ISC_R_SUCCESS)
fatal("could not create hash context");
isc_stdtime_get(&now); isc_stdtime_get(&now);
rdclass = strtoclass(classname); rdclass = strtoclass(classname);
@@ -316,14 +332,16 @@ main(int argc, char *argv[]) {
result = dns_db_newversion(gdb, &gversion); result = dns_db_newversion(gdb, &gversion);
check_result(result, "dns_db_newversion()"); check_result(result, "dns_db_newversion()");
result = dns_zoneverify_dnssec(NULL, gdb, gversion, gorigin, NULL, verifyzone(gdb, gversion, gorigin, mctx,
mctx, ignore_kskflag, keyset_kskonly); ignore_kskflag, keyset_kskonly);
dns_db_closeversion(gdb, &gversion, false); dns_db_closeversion(gdb, &gversion, ISC_FALSE);
dns_db_detach(&gdb); dns_db_detach(&gdb);
cleanup_logging(&log); cleanup_logging(&log);
dst_lib_destroy(); dst_lib_destroy();
isc_hash_destroy();
cleanup_entropy(&ectx);
dns_name_destroy(); dns_name_destroy();
if (verbose > 10) if (verbose > 10)
isc_mem_stats(mctx, stdout); isc_mem_stats(mctx, stdout);
@@ -331,5 +349,5 @@ main(int argc, char *argv[]) {
(void) isc_app_finish(); (void) isc_app_finish();
return (result == ISC_R_SUCCESS ? 0 : 1); return (0);
} }
+1 -1
View File
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- <!--
- Copyright (C) 2012, 2014-2016, 2018 Internet Systems Consortium, Inc. ("ISC") - Copyright (C) 2012, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
- -
- This Source Code Form is subject to the terms of the Mozilla Public - 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 - License, v. 2.0. If a copy of the MPL was not distributed with this

Some files were not shown because too many files have changed in this diff Show More