Compare commits
397
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
816368c438 | ||
|
|
74f895740c | ||
|
|
bc12c52e82 | ||
|
|
351efd8812 | ||
|
|
7ff7de0609 | ||
|
|
f5785f97fc | ||
|
|
e71bbde57d | ||
|
|
e1bf5624fb | ||
|
|
f566010717 | ||
|
|
7e07d05ae7 | ||
|
|
211d83b0cd | ||
|
|
aeebcb4ae8 | ||
|
|
ca7cadfa92 | ||
|
|
a160fecaa1 | ||
|
|
c0eb02d435 | ||
|
|
3bca52ca07 | ||
|
|
e5da71f746 | ||
|
|
adbca54079 | ||
|
|
6b470bbf42 | ||
|
|
06e218c421 | ||
|
|
4ccff3bbed | ||
|
|
b108376a10 | ||
|
|
8b17f364a9 | ||
|
|
c6527aedc7 | ||
|
|
882ad18c5e | ||
|
|
5bd855251c | ||
|
|
cbde34e7a3 | ||
|
|
ab7356a7de | ||
|
|
90b773134c | ||
|
|
b2aca96c27 | ||
|
|
388bfdb945 | ||
|
|
c8e92d3e45 | ||
|
|
9eec02a81f | ||
|
|
0c0536a1e4 | ||
|
|
115736b3f5 | ||
|
|
5e2cd91321 | ||
|
|
9586c3a696 | ||
|
|
665618698e | ||
|
|
71e54bfe0f | ||
|
|
fa666f5d88 | ||
|
|
0e12988dd6 | ||
|
|
f70a84537d | ||
|
|
c63ead9d96 | ||
|
|
4234968798 | ||
|
|
fd20f10d52 | ||
|
|
8da0c0e7d5 | ||
|
|
7a47e4d85f | ||
|
|
b94945e606 | ||
|
|
9df0bdc99c | ||
|
|
baa38d6e94 | ||
|
|
0b988256c7 | ||
|
|
74683fbc3b | ||
|
|
8725f57371 | ||
|
|
427e9ca357 | ||
|
|
055bf2665c | ||
|
|
81f58e2ea2 | ||
|
|
9911c835d3 | ||
|
|
d2f4644388 | ||
|
|
e2ac439e28 | ||
|
|
d3f0f71b6b | ||
|
|
e4f0a98b4d | ||
|
|
0d7ab9bafc | ||
|
|
d43dcef139 | ||
|
|
29897b14dc | ||
|
|
70cc3f803e | ||
|
|
6f11f90ef4 | ||
|
|
0737079824 | ||
|
|
7ef858f503 | ||
|
|
1cf2f7d077 | ||
|
|
6a5c8ec2ea | ||
|
|
d0ba302028 | ||
|
|
953a957dfa | ||
|
|
8537adef4c | ||
|
|
43be6ff428 | ||
|
|
ddc1d4d6d4 | ||
|
|
258ea3a8f4 | ||
|
|
00cc0b236a | ||
|
|
b13c7ca402 | ||
|
|
cbcf6dacb6 | ||
|
|
835bad2c5c | ||
|
|
8743a853d2 | ||
|
|
ef87b1e60b | ||
|
|
69dee61f5a | ||
|
|
88d3338f5f | ||
|
|
c644c0f283 | ||
|
|
9532e3256e | ||
|
|
a48ca15e77 | ||
|
|
998e3e2880 | ||
|
|
e227815af5 | ||
|
|
27ee629e6b | ||
|
|
16b95157e8 | ||
|
|
0fc8bfef13 | ||
|
|
597049461d | ||
|
|
828d7121e0 | ||
|
|
253c175d7b | ||
|
|
f454d9825c | ||
|
|
b2c4c35493 | ||
|
|
1b2a3a0ea6 | ||
|
|
7c60b78080 | ||
|
|
5744415a75 | ||
|
|
409ac247f7 | ||
|
|
e6c5ad37a4 | ||
|
|
16eb35187a | ||
|
|
b78376ffc9 | ||
|
|
d13cabd27e | ||
|
|
77032a4e29 | ||
|
|
73bc3147d1 | ||
|
|
66fc2f7fec | ||
|
|
b29f0c1d05 | ||
|
|
a487473fc5 | ||
|
|
b726ca4533 | ||
|
|
02d20a2f53 | ||
|
|
6499bdfd8b | ||
|
|
0ac2a868bb | ||
|
|
6ab40c043d | ||
|
|
b99af25d0f | ||
|
|
53bdf8038c | ||
|
|
0708e43d3f | ||
|
|
e8d7292d5d | ||
|
|
b94293f591 | ||
|
|
d75602406e | ||
|
|
2ecd280297 | ||
|
|
da9038e9a0 | ||
|
|
c5b8bc0e15 | ||
|
|
a688a43faf | ||
|
|
bf519a3574 | ||
|
|
62ca7743ae | ||
|
|
7e4ed9f8ad | ||
|
|
e24afa3088 | ||
|
|
ad0b4e9d41 | ||
|
|
d5793ecca2 | ||
|
|
54b4e4e61c | ||
|
|
6363652d51 | ||
|
|
4f075d869c | ||
|
|
509dad8737 | ||
|
|
1634592c99 | ||
|
|
6696a40ea9 | ||
|
|
2eabc74547 | ||
|
|
2156a5b610 | ||
|
|
e9d999f6b0 | ||
|
|
33132406a3 | ||
|
|
9cf529fa50 | ||
|
|
29fb4faf76 | ||
|
|
d0f0298f38 | ||
|
|
d1a8a3faed | ||
|
|
2fa857d502 | ||
|
|
3987a146be | ||
|
|
0667fa935a | ||
|
|
f6c4ed94e4 | ||
|
|
259a4947e6 | ||
|
|
2271e77d99 | ||
|
|
21db43da8e | ||
|
|
e3c8a23276 | ||
|
|
929ea7c2c4 | ||
|
|
d940e95206 | ||
|
|
b7a15a5da0 | ||
|
|
2f3eee5a4f | ||
|
|
73a8999d1c | ||
|
|
0bed9bfc28 | ||
|
|
ac4f8a51cc | ||
|
|
db1cd0d970 | ||
|
|
976881f4be | ||
|
|
5c9c53e9e7 | ||
|
|
9145bec00d | ||
|
|
6b65a4f86e | ||
|
|
9c4c1320e2 | ||
|
|
9a4aa2aa5a | ||
|
|
380ab3b39f | ||
|
|
5f81aa10bc | ||
|
|
4f7177c794 | ||
|
|
a8649cc299 | ||
|
|
5bc8feab45 | ||
|
|
d00b3f47ba | ||
|
|
0e555d7e01 | ||
|
|
175f06949f | ||
|
|
aa4ac49bb8 | ||
|
|
7a3eb391fa | ||
|
|
6f09738cef | ||
|
|
ccfd577715 | ||
|
|
867180e462 | ||
|
|
4979d5f31f | ||
|
|
39ebebaaf7 | ||
|
|
e75e206a3d | ||
|
|
4e5ac64aca | ||
|
|
8f15219f36 | ||
|
|
d4bad35bb0 | ||
|
|
dfa1589975 | ||
|
|
827d7f0e49 | ||
|
|
14fa99e3b4 | ||
|
|
1276cf4cd1 | ||
|
|
6cfb2249e1 | ||
|
|
7346199a92 | ||
|
|
bad342adab | ||
|
|
1ca5920113 | ||
|
|
474fbe88bf | ||
|
|
f5d8bd0853 | ||
|
|
c2a274cc5d | ||
|
|
de0290821a | ||
|
|
37ff7f635b | ||
|
|
65c084e4eb | ||
|
|
8de2451756 | ||
|
|
436b6fb354 | ||
|
|
9b0501635b | ||
|
|
fa33b4ee23 | ||
|
|
ed4a49122b | ||
|
|
de219b8555 | ||
|
|
e31e5732fd | ||
|
|
18781c5a3d | ||
|
|
9f35a59f71 | ||
|
|
79afbe2966 | ||
|
|
16d329d55b | ||
|
|
6be7b631ab | ||
|
|
1f0cd6606e | ||
|
|
59ac0e87f8 | ||
|
|
e55bbec66e | ||
|
|
3f7d79e574 | ||
|
|
ca7b5ceee5 | ||
|
|
d960210114 | ||
|
|
c1a4f0e66a | ||
|
|
559ce1e330 | ||
|
|
b2b210d6d9 | ||
|
|
d652551e86 | ||
|
|
88edf8fe4d | ||
|
|
7223790380 | ||
|
|
9c926a5d9b | ||
|
|
58d75d9d8d | ||
|
|
f94f4bc1f4 | ||
|
|
bd024eee57 | ||
|
|
89b1817211 | ||
|
|
6feb688f69 | ||
|
|
cbc1b12311 | ||
|
|
778ab8158a | ||
|
|
59171fe359 | ||
|
|
32503f3b52 | ||
|
|
a2013231a3 | ||
|
|
8c4d50c6bc | ||
|
|
efe3c038b1 | ||
|
|
d534ae5c12 | ||
|
|
336d5a5374 | ||
|
|
92a3762cb6 | ||
|
|
2c7e6947fa | ||
|
|
eda6281f98 | ||
|
|
b915cdbf0b | ||
|
|
2837a821e8 | ||
|
|
dfd90dbb82 | ||
|
|
1b48e710d5 | ||
|
|
4ba08bb119 | ||
|
|
e38901154d | ||
|
|
9a464ef869 | ||
|
|
98d5abb73c | ||
|
|
ad923f82b1 | ||
|
|
005e19ad3f | ||
|
|
8d347788b0 | ||
|
|
01a193ff6c | ||
|
|
0a4f6122de | ||
|
|
bb5ed5a4ac | ||
|
|
55465517c7 | ||
|
|
9f83d31e42 | ||
|
|
06b4ff5fe2 | ||
|
|
015fda0bb4 | ||
|
|
28121c248e | ||
|
|
79cd093cd7 | ||
|
|
6dfc868fba | ||
|
|
db5eece106 | ||
|
|
cca16eccd7 | ||
|
|
a33bca5d55 | ||
|
|
dcf65c82ad | ||
|
|
9eea00cd3c | ||
|
|
bd009b34a6 | ||
|
|
6ad7acd787 | ||
|
|
683094e308 | ||
|
|
20cef35ece | ||
|
|
3e52987229 | ||
|
|
72f60bdd84 | ||
|
|
c701f036ea | ||
|
|
3bf9a1e567 | ||
|
|
c9ff174dce | ||
|
|
4f84acb788 | ||
|
|
231436039d | ||
|
|
7ab8c5b583 | ||
|
|
5f377136be | ||
|
|
b3db0266cb | ||
|
|
8161be27db | ||
|
|
4133fd86f1 | ||
|
|
049a3a7c0e | ||
|
|
c1c8d8846f | ||
|
|
718ca3166c | ||
|
|
cc6ab2416b | ||
|
|
a7c308df9c | ||
|
|
52b86f0abe | ||
|
|
02a5db7631 | ||
|
|
dc88db015b | ||
|
|
79ac715763 | ||
|
|
48dc2831d7 | ||
|
|
318b340f5e | ||
|
|
cec8c52cbe | ||
|
|
7ec945bd41 | ||
|
|
d8766293ab | ||
|
|
b434b0a4b6 | ||
|
|
2afd18a2ce | ||
|
|
f456e64736 | ||
|
|
c38b145b89 | ||
|
|
1473ddcc65 | ||
|
|
a5524b5fe2 | ||
|
|
fdb74fed9e | ||
|
|
995bafbd72 | ||
|
|
de6f43d071 | ||
|
|
5e44a1008f | ||
|
|
82b23ecc5e | ||
|
|
4eadebe2b2 | ||
|
|
93776c4c81 | ||
|
|
652ce14e7f | ||
|
|
2639030d66 | ||
|
|
9c8fead6d8 | ||
|
|
13e53ef38a | ||
|
|
50714a9b35 | ||
|
|
a91bf68d66 | ||
|
|
333f718dd3 | ||
|
|
c59f332db2 | ||
|
|
261230343a | ||
|
|
11db6dd8ff | ||
|
|
3f95f4ffbb | ||
|
|
cf9c2ef305 | ||
|
|
f6ca532df4 | ||
|
|
02b828e63f | ||
|
|
54fdd6e834 | ||
|
|
e9a939841d | ||
|
|
ac2ea36fa5 | ||
|
|
590d391bbb | ||
|
|
aa2c4bfdc0 | ||
|
|
e356d93175 | ||
|
|
77128c867c | ||
|
|
f6f07fb41e | ||
|
|
ba5d28dcfe | ||
|
|
75fa84b67b | ||
|
|
1003ef4d67 | ||
|
|
9e1af0cef1 | ||
|
|
129e5306d0 | ||
|
|
867bc3399b | ||
|
|
18758392da | ||
|
|
0507658884 | ||
|
|
ae40e8039b | ||
|
|
4621756596 | ||
|
|
75cc4156e9 | ||
|
|
9671909289 | ||
|
|
582e261290 | ||
|
|
cd0d61e0c8 | ||
|
|
b2dbe37538 | ||
|
|
9024cf0c15 | ||
|
|
ba0e5ffc09 | ||
|
|
9a59352b4c | ||
|
|
cc60f3a3be | ||
|
|
a1de63a2d2 | ||
|
|
d99788042d | ||
|
|
62a92b7784 | ||
|
|
5e3f20a71b | ||
|
|
7a7cf952ad | ||
|
|
471110933a | ||
|
|
4f04a79250 | ||
|
|
3f0aaf7a60 | ||
|
|
baa46c3d4b | ||
|
|
65ffafdc6a | ||
|
|
4f7deb348b | ||
|
|
6ead8c7be8 | ||
|
|
6bac3508ec | ||
|
|
505a1ceda4 | ||
|
|
28442f11f0 | ||
|
|
a13a0a2beb | ||
|
|
896fb585b3 | ||
|
|
02be459f37 | ||
|
|
6f5fe11f5a | ||
|
|
c355e1f38f | ||
|
|
2a652aefe9 | ||
|
|
f95e4593ed | ||
|
|
c303cf5cc9 | ||
|
|
68ca987792 | ||
|
|
23fff6c569 | ||
|
|
b992b5b811 | ||
|
|
29c45200e7 | ||
|
|
4eaf927571 | ||
|
|
e2e138a801 | ||
|
|
a831e0f72d | ||
|
|
461ffead1f | ||
|
|
b2b43fd235 | ||
|
|
fbd2e47f51 | ||
|
|
8e292b3262 | ||
|
|
82dfb77328 | ||
|
|
0949b1fe2c | ||
|
|
dbf2e7928e | ||
|
|
3317d3d2bb | ||
|
|
601abfab30 | ||
|
|
b1e1dd2c25 | ||
|
|
54ff27a6bc | ||
|
|
cd6c016896 | ||
|
|
ce478b4fc9 | ||
|
|
7a2248acf9 | ||
|
|
e9bf8e4798 |
-29
@@ -27,35 +27,6 @@ gen.dSYM/
|
||||
.deps/
|
||||
.dirstamp
|
||||
.libs/
|
||||
unit/atf-src/atf-c++/atf-c++.pc
|
||||
unit/atf-src/atf-c/atf-c.pc
|
||||
unit/atf-src/atf-c/defs.h
|
||||
unit/atf-src/atf-c/detail/process_helpers
|
||||
unit/atf-src/atf-config/atf-config
|
||||
unit/atf-src/atf-report/atf-report
|
||||
unit/atf-src/atf-report/fail_helper
|
||||
unit/atf-src/atf-report/misc_helpers
|
||||
unit/atf-src/atf-report/pass_helper
|
||||
unit/atf-src/atf-run/atf-run
|
||||
unit/atf-src/atf-run/bad_metadata_helper
|
||||
unit/atf-src/atf-run/expect_helpers
|
||||
unit/atf-src/atf-run/misc_helpers
|
||||
unit/atf-src/atf-run/pass_helper
|
||||
unit/atf-src/atf-run/several_tcs_helper
|
||||
unit/atf-src/atf-run/zero_tcs_helper
|
||||
unit/atf-src/atf-sh/atf-check
|
||||
unit/atf-src/atf-sh/atf-sh
|
||||
unit/atf-src/atf-sh/misc_helpers
|
||||
unit/atf-src/atf-version/atf-version
|
||||
unit/atf-src/atf-version/revision.h
|
||||
unit/atf-src/atf-version/revision.h.stamp
|
||||
unit/atf-src/bconfig.h
|
||||
unit/atf-src/bootstrap/atconfig
|
||||
unit/atf-src/doc/atf.7
|
||||
unit/atf-src/stamp-h1
|
||||
unit/atf-src/test-programs/c_helpers
|
||||
unit/atf-src/test-programs/cpp_helpers
|
||||
unit/atf-src/test-programs/sh_helpers
|
||||
# ccc-analyzer store its results in .plist directories
|
||||
*.plist/
|
||||
*~
|
||||
|
||||
+95
-50
@@ -116,7 +116,7 @@ stages:
|
||||
- test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}"
|
||||
# - ./autogen.sh
|
||||
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-cmocka --prefix=$HOME/.local --without-make-clean $EXTRA_CONFIGURE || cat config.log
|
||||
- make -j${PARALLEL_JOBS_BUILD:-1} -k all V=1
|
||||
artifacts:
|
||||
paths:
|
||||
@@ -156,14 +156,13 @@ stages:
|
||||
- kyua report-html --force --results-file kyua.results --results-filter "" --output kyua_html
|
||||
artifacts:
|
||||
paths:
|
||||
- atf.out
|
||||
- kyua.log
|
||||
- kyua.results
|
||||
- kyua_html/
|
||||
expire_in: '1 week'
|
||||
when: on_failure
|
||||
|
||||
precheck:debian:sid:amd64:
|
||||
sid:amd64:precheck:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: precheck
|
||||
script:
|
||||
@@ -183,11 +182,16 @@ precheck:debian:sid:amd64:
|
||||
expire_in: '1 week'
|
||||
when: on_failure
|
||||
|
||||
docs:debian:sid:amd64:
|
||||
🐞:sid:amd64:precheck:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: precheck
|
||||
script: util/check-cocci
|
||||
|
||||
docs:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: test
|
||||
dependencies:
|
||||
- build:debian:sid:amd64
|
||||
- sid:amd64:build
|
||||
script:
|
||||
- make -C doc/misc docbook
|
||||
- make -C doc/arm Bv9ARM.html
|
||||
@@ -196,7 +200,7 @@ docs:debian:sid:amd64:
|
||||
- doc/arm/
|
||||
expire_in: '1 month'
|
||||
|
||||
push:docs:
|
||||
docs:push:
|
||||
<<: *debian_sid_amd64_image
|
||||
stage: push
|
||||
dependencies: []
|
||||
@@ -206,15 +210,15 @@ push:docs:
|
||||
- master@isc-projects/bind9
|
||||
- /^v9_.*$/@isc-projects/bind9
|
||||
|
||||
#build:debian:jessie:amd64:
|
||||
#jessie:amd64:build:
|
||||
# <<: *debian_jessie_amd64_image
|
||||
# <<: *build_job
|
||||
#
|
||||
#build:debian:jessie:i386:
|
||||
#build:jessie:i386:
|
||||
# <<: *debian_jessie_i386_image
|
||||
# <<: *build_job
|
||||
#
|
||||
#build:debian:stretch:amd64:
|
||||
#build:stretch:amd64:
|
||||
# <<: *debian_stretch_amd64_image
|
||||
# <<: *build_job
|
||||
#
|
||||
@@ -230,7 +234,7 @@ push:docs:
|
||||
# <<: *ubuntu_xenial_i386_image
|
||||
# <<: *build_job
|
||||
|
||||
build:centos:centos6:amd64:
|
||||
centos6:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -238,7 +242,7 @@ build:centos:centos6:amd64:
|
||||
<<: *centos_centos6_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:centos:centos7:amd64:
|
||||
centos7:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -246,14 +250,14 @@ build:centos:centos7:amd64:
|
||||
<<: *centos_centos7_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:clang:debian:stretch:amd64:
|
||||
clang:stretch:amd64:build:
|
||||
variables:
|
||||
CC: clang
|
||||
CFLAGS: "-Wall -Wextra -Wenum-conversion -O2 -g"
|
||||
<<: *debian_stretch_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:debian:jessie:amd64:
|
||||
jessie:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -261,14 +265,14 @@ build:debian:jessie:amd64:
|
||||
<<: *debian_jessie_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:debian:stretch:amd64:
|
||||
stretch:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
<<: *debian_stretch_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:debian:sid:amd64:
|
||||
sid:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -276,14 +280,23 @@ build:debian:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
build:clang:debian:stretch:i386:
|
||||
asan:sid:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g -fsanitize=address,undefined -DISC_MEM_USE_INTERNAL_MALLOC=0"
|
||||
LDFLAGS: "-fsanitize=address,undefined"
|
||||
EXTRA_CONFIGURE: "--with-libidn2"
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
clang:stretch:i386:build:
|
||||
variables:
|
||||
CC: clang
|
||||
CFLAGS: "-Wall -Wextra -Wenum-conversion -O2 -g"
|
||||
<<: *debian_stretch_i386_image
|
||||
<<: *build_job
|
||||
|
||||
build:debian:sid:i386:
|
||||
sid:i386:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -291,91 +304,103 @@ build:debian:sid:i386:
|
||||
<<: *debian_sid_i386_image
|
||||
<<: *build_job
|
||||
|
||||
unittest:centos:centos6:amd64:
|
||||
unit:centos6:amd64:
|
||||
<<: *centos_centos6_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:centos:centos6:amd64
|
||||
- centos6:amd64:build
|
||||
|
||||
unittest:centos:centos7:amd64:
|
||||
unit:centos7:amd64:
|
||||
<<: *centos_centos7_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:centos:centos7:amd64
|
||||
- centos7:amd64:build
|
||||
|
||||
unittest:debian:jessie:amd64:
|
||||
unit:jessie:amd64:
|
||||
<<: *debian_jessie_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:debian:jessie:amd64
|
||||
- jessie:amd64:build
|
||||
|
||||
unittest:debian:stretch:amd64:
|
||||
unit:stretch:amd64:
|
||||
<<: *debian_stretch_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:debian:stretch:amd64
|
||||
- stretch:amd64:build
|
||||
|
||||
unittest:debian:sid:amd64:
|
||||
unit:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:debian:sid:amd64
|
||||
- sid:amd64:build
|
||||
|
||||
unittest:clang:debian:stretch:amd64:
|
||||
unit:asan:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- asan:sid:amd64:build
|
||||
|
||||
unit:clang:stretch:amd64:
|
||||
<<: *debian_stretch_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:clang:debian:stretch:amd64
|
||||
- clang:stretch:amd64:build
|
||||
|
||||
unittest:debian:sid:i386:
|
||||
unit:sid:i386:
|
||||
<<: *debian_sid_i386_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- build:debian:sid:i386
|
||||
- sid:i386:build
|
||||
|
||||
systemtest:centos:centos6:amd64:
|
||||
system:centos6:amd64:
|
||||
<<: *centos_centos6_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:centos:centos6:amd64
|
||||
- centos6:amd64:build
|
||||
|
||||
systemtest:centos:centos7:amd64:
|
||||
system:centos7:amd64:
|
||||
<<: *centos_centos7_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:centos:centos7:amd64
|
||||
- centos7:amd64:build
|
||||
|
||||
systemtest:debian:jessie:amd64:
|
||||
system:jessie:amd64:
|
||||
<<: *debian_jessie_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:debian:jessie:amd64
|
||||
- jessie:amd64:build
|
||||
|
||||
systemtest:debian:stretch:amd64:
|
||||
system:stretch:amd64:
|
||||
<<: *debian_stretch_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:debian:stretch:amd64
|
||||
- stretch:amd64:build
|
||||
|
||||
systemtest:debian:sid:amd64:
|
||||
system:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:debian:sid:amd64
|
||||
- sid:amd64:build
|
||||
|
||||
systemtest:debian:sid:i386:
|
||||
system:asan:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- asan:sid:amd64:build
|
||||
|
||||
system:sid:i386:
|
||||
<<: *debian_sid_i386_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- build:debian:sid:i386
|
||||
- sid:i386:build
|
||||
|
||||
install:debian:sid:amd64:
|
||||
install:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *install_test_job
|
||||
dependencies:
|
||||
- build:debian:sid:amd64
|
||||
- sid:amd64:build
|
||||
|
||||
pkcs11:build:debian:sid:amd64:
|
||||
pkcs11:sid:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g"
|
||||
@@ -383,14 +408,34 @@ pkcs11:build:debian:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
pkcs11:unittest:debian:sid:amd64:
|
||||
pkcs11:unit:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- pkcs11:build:debian:sid:amd64
|
||||
- pkcs11:sid:amd64:build
|
||||
|
||||
pkcs11:systemtest:debian:sid:amd64:
|
||||
pkcs11:system:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- pkcs11:build:debian:sid:amd64
|
||||
- pkcs11:sid:amd64:build
|
||||
|
||||
noassert:sid:amd64:build:
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "-Wall -Wextra -O2 -g -DISC_CHECK_NONE=1"
|
||||
EXTRA_CONFIGURE: "--with-libidn2"
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *build_job
|
||||
|
||||
noassert:unit:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *unit_test_job
|
||||
dependencies:
|
||||
- noassert:sid:amd64:build
|
||||
|
||||
noassert:system:sid:amd64:
|
||||
<<: *debian_sid_amd64_image
|
||||
<<: *system_test_job
|
||||
dependencies:
|
||||
- noassert:sid:amd64:build
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
## Release Checklist
|
||||
|
||||
- [ ] (Manager) Check for the presence of a milestone for the release.
|
||||
- [ ] (Manager) Check for the presence of a milestone for the release:
|
||||
- If there is a milestone, are all the issues for the milestone resolved? (other than this checklist).
|
||||
- [ ] (Manager) Inform Support/Marketing of impending release (and give estimated release dates).
|
||||
- (SwEng) Prepare the sources for tarball generation.
|
||||
- (SwEng) Prepare the sources for tarball generation:
|
||||
- [ ] Check perflab to ensure there has been no unexplained drop in performance for the version being released.
|
||||
- [ ] Ensure that there are no outstanding merge requests in the private repository (subscription version only).
|
||||
- [ ] Update API files for libraries with new version information.
|
||||
- [ ] Change software version and library versions in configure.in (new major release only).
|
||||
- [ ] Ensure Kyua and ATF files are correct.
|
||||
- [ ] Rebuild configure using autoconf on docs.isc.org.
|
||||
- [ ] Update CHANGES.
|
||||
- [ ] Update CHANGES.SE (subscription branch only).
|
||||
- [ ] Update "version".
|
||||
- [ ] Update "readme.md".
|
||||
- [ ] Ensure the release notes are correct for this release (content, formatting, etc.).
|
||||
- Check the release notes are correct:
|
||||
- [ ] Compare content with merge requests for the release.
|
||||
- [ ] Check formatting.
|
||||
- [ ] Build documentation on docs.isc.org.
|
||||
- [ ] Commit changes and make sure the gitlab-ci tests are passing.
|
||||
- [ ] Push the changes and tag ("alphatag" is an optional string such as "b1", "rc1" etc.). (```git tag -u <DEVELOPER_KEYID> -a -s -m "BIND 9.X.Y[alphatag]" v9_X_Y[alphatag]```)
|
||||
@@ -24,9 +26,19 @@
|
||||
- [ ] (QA) Request the signature on the tarballs.
|
||||
- [ ] (QA) Check signatures on tarballs.
|
||||
- [ ] (QA) Tell Support to handle notification of release.
|
||||
- [ ] (Support) Make tarballs and signatures available to download.
|
||||
- [ ] (Manager) Update [https://wiki.isc.org/bin/view/Main/BindReleaseDates](BIND release dates page) when public announcement has been made.
|
||||
- [ ] (Manager) Inform marketing of the release
|
||||
- [ ] (Manager) Inform Marketing of the release
|
||||
- [ ] (Manager) Update the internal [BIND release dates wiki page](https://wiki.isc.org/bin/view/Main/BindReleaseDates) when public announcement has been made.
|
||||
|
||||
- [ ] (SwEng) Update DEB and RPM packages
|
||||
- [ ] (SwEng) Merge the automatically prepared `prep 9.X.Y` commit which updates `version` and documentation on the release branch into the relevant maintenance branch (`v9_X`)
|
||||
|
||||
## Support
|
||||
- [ ] Make tarballs and signatures available to download.
|
||||
- [ ] Write release email to bind9-announce.
|
||||
- [ ] Write email to bind9-users (if a major release).
|
||||
- [ ] Update tickets in case of waiting support customers.
|
||||
|
||||
## Marketing
|
||||
- [ ] Post short note to Twitter.
|
||||
- [ ] Update [Wikipedia entry for BIND](http://en.wikipedia.org/wiki/BIND).
|
||||
- [ ] Write blog article (if a major release).
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
Content-Type: application/X-atf-atffile; version="1"
|
||||
|
||||
prop: test-suite = bind9
|
||||
|
||||
tp: lib
|
||||
@@ -1,3 +1,107 @@
|
||||
--- 9.13.5 released ---
|
||||
|
||||
5108. [bug] Named could fail to determine bottom of zone when
|
||||
removing out of date keys leading to invalid NSEC
|
||||
and NSEC3 records being added to the zone. [GL #771]
|
||||
|
||||
5107. [bug] 'host -U' did not work. [GL #769]
|
||||
|
||||
5106. [experimental] A new "plugin" mechanism has been added to allow
|
||||
extension of query processing functionality through
|
||||
the use of dynamically loadable libraries. A
|
||||
"filter-aaaa.so" plugin has been implemented,
|
||||
replacing the filter-aaaa feature that was formerly
|
||||
implemented as a native part of BIND.
|
||||
|
||||
The "filter-aaaa", "filter-aaaa-on-v4" and
|
||||
"filter-aaaa-on-v6" options can no longer be
|
||||
configured using native named.conf syntax. However,
|
||||
loading the filter-aaaa.so plugin and setting its
|
||||
parameters provides identical functionality.
|
||||
|
||||
Note that the plugin API is a work in progress and
|
||||
is likely to evolve as further plugins are
|
||||
implemented. [GL #15]
|
||||
|
||||
5105. [bug] Fix a race between process_fd and socketclose in
|
||||
unix socket code. [GL #744]
|
||||
|
||||
5104. [cleanup] Log clearer informational message when a catz zone
|
||||
is overridden by a zone in named.conf.
|
||||
Thanks to Tony Finch. [GL !1157]
|
||||
|
||||
5103. [bug] Add missing design by contract tests to dns_catz*.
|
||||
[GL #748]
|
||||
|
||||
5102. [bug] dnssec-coverage failed to use the default TTL when
|
||||
checking KSK deletion times leading to a exception.
|
||||
[GL #585]
|
||||
|
||||
5101. [bug] Fix default installation path for Python modules and
|
||||
remove the dnspython dependency accidentally introduced
|
||||
by change 4970. [GL #730]
|
||||
|
||||
5100. [func] Pin resolver tasks to specific task queues. [GL !1117]
|
||||
|
||||
5099. [func] Failed mutex and conditional creations are always
|
||||
fatal. [GL #674]
|
||||
|
||||
--- 9.13.4 released ---
|
||||
|
||||
5098. [func] Failed memory allocations are now fatal. [GL #674]
|
||||
|
||||
5097. [cleanup] Remove embedded ATF unit testing framework
|
||||
from BIND source distribution. [GL !875]
|
||||
|
||||
5096. [func] Use multiple event loops in socket code, and
|
||||
make network threads CPU-affinitive. This
|
||||
significantly improves performance on large
|
||||
systems. [GL #666]
|
||||
|
||||
5095. [test] Converted all unit tests from ATF to CMocka;
|
||||
removed the source code for the ATF libraries.
|
||||
Build with "configure --with-cmocka" to enable
|
||||
unit testing. [GL #620]
|
||||
|
||||
5094. [func] Add 'dig -r' to disable reading of .digrc. [GL !970]
|
||||
|
||||
5093. [bug] Log lame qname-minimization servers only if they're
|
||||
really lame. [GL #671]
|
||||
|
||||
5092. [bug] Address memory leak on SIGTERM in nsupdate when using
|
||||
GSS-TSIG. [GL #558]
|
||||
|
||||
5091. [func] Two new global and per-view options min-cache-ttl
|
||||
and min-ncache-ttl [GL #613]
|
||||
|
||||
5090. [bug] dig and mdig failed to properly preparse dash value
|
||||
pairs when value was a seperate argument and started
|
||||
with a dash. [GL #584]
|
||||
|
||||
5089. [bug] Restore localhost fallback in dig and host which is
|
||||
used when no nameserver addresses present in
|
||||
/etc/resolv.conf are usable due to the requested
|
||||
address family restrictions. [GL #433]
|
||||
|
||||
5088. [bug] dig/host/nslookup could crash when interrupted close to
|
||||
a query timeout. [GL #599]
|
||||
|
||||
5087. [test] Check that result tables are complete. [GL #676]
|
||||
|
||||
5086. [func] Log of RPZ now includes the QTYPE and QCLASS. [GL #623]
|
||||
|
||||
5085. [bug] win32: Restore looking up nameservers, search list,
|
||||
etc. [GL #186]
|
||||
|
||||
5084. [placeholder]
|
||||
|
||||
5083. [func] Add autoconf macro AX_POSIX_SHELL, so we
|
||||
can use POSIX-compatible shell features
|
||||
in the scripts.
|
||||
|
||||
5082. [bug] Fixed a race that could cause a crash in
|
||||
dig/host/nslookup. [GL #650]
|
||||
|
||||
5081. [func] Use per-worker queues in task manager, make task
|
||||
runners CPU-affine. [GL #659]
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ top_builddir = @top_builddir@
|
||||
|
||||
VERSION=@BIND9_VERSION@
|
||||
|
||||
SUBDIRS = make unit lib fuzz bin doc
|
||||
SUBDIRS = make lib fuzz bin doc
|
||||
TARGETS =
|
||||
PREREQS = bind.keys.h
|
||||
|
||||
|
||||
@@ -59,3 +59,31 @@ These are platforms on which BIND is known not to build or run:
|
||||
* Platforms that don't support IPv6 Advanced Socket API (RFC 3542)
|
||||
* Platforms that don't support atomic operations (via compiler or
|
||||
library)
|
||||
* Linux without NPTL (Native POSIX Thread Library)
|
||||
|
||||
Platform quirks
|
||||
|
||||
ARM
|
||||
|
||||
If the compilation ends with following error:
|
||||
|
||||
Error: selected processor does not support `yield' in ARM mode
|
||||
|
||||
You will need to set -march compiler option to native, so the compiler
|
||||
recognizes yield assembler instruction. The proper way to set -march=
|
||||
native would be to put it into CFLAGS, e.g. run ./configure like this:
|
||||
CFLAGS="-march=native -Os -g" ./configure plus your usual options.
|
||||
|
||||
If that doesn't work, you can enforce the minimum CPU and FPU (taken from
|
||||
Debian armhf documentation):
|
||||
|
||||
* The lowest worthwhile CPU implementation is Armv7-A, therefore the
|
||||
recommended build option is -march=armv7-a.
|
||||
|
||||
* FPU should be set at VFPv3-D16 as they represent the miminum
|
||||
specification of the processors to support here, therefore the
|
||||
recommended build option is -mfpu=vfpv3-d16.
|
||||
|
||||
The configure command should look like this:
|
||||
|
||||
CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -Os -g" ./configure
|
||||
|
||||
@@ -104,6 +104,11 @@ BIND 9.13 features
|
||||
BIND 9.13 is the newest development branch of BIND 9. It includes a number
|
||||
of changes from BIND 9.12 and earlier releases. New features include:
|
||||
|
||||
* A new "plugin" mechanism has been added to allow query functionality
|
||||
to be extended using dynamically loadable libraries. The "filter-aaaa"
|
||||
feature has been removed from named and is now implemented as a
|
||||
plugin.
|
||||
* Socket and task code has been refactored to improve performance.
|
||||
* QNAME minimization, as described in RFC 7816, is now supported.
|
||||
* "Root key sentinel" support, enabling validating resolvers to indicate
|
||||
via a special query which trust anchors are configured for the root
|
||||
@@ -289,8 +294,10 @@ and will be skipped if these are not available. Some tests require Python
|
||||
and the 'dnspython' module and will be skipped if these are not available.
|
||||
See bin/tests/system/README for further details.
|
||||
|
||||
Unit tests are implemented using Automated Testing Framework (ATF). To run
|
||||
them, use configure --with-atf, then run make test or make unit.
|
||||
Unit tests are implemented using the CMocka unit testing framework. To
|
||||
build them, use configure --with-cmocka. Execution of tests is done by the
|
||||
Kyua test execution engine; if the kyua command is available, then unit
|
||||
tests can be run via make test or make unit.
|
||||
|
||||
Documentation
|
||||
|
||||
|
||||
@@ -122,6 +122,10 @@ BIND 9.13 is the newest development branch of BIND 9. It includes a
|
||||
number of changes from BIND 9.12 and earlier releases. New features
|
||||
include:
|
||||
|
||||
* A new "plugin" mechanism has been added to allow query functionality
|
||||
to be extended using dynamically loadable libraries. The "filter-aaaa"
|
||||
feature has been removed from named and is now implemented as a plugin.
|
||||
* Socket and task code has been refactored to improve performance.
|
||||
* QNAME minimization, as described in RFC 7816, is now supported.
|
||||
* "Root key sentinel" support, enabling validating resolvers to indicate
|
||||
via a special query which trust anchors are configured for the root zone.
|
||||
@@ -307,9 +311,10 @@ and will be skipped if these are not available. Some tests require Python
|
||||
and the 'dnspython' module and will be skipped if these are not available.
|
||||
See bin/tests/system/README for further details.
|
||||
|
||||
Unit tests are implemented using Automated Testing Framework (ATF).
|
||||
To run them, use `configure --with-atf`, then run `make test` or
|
||||
`make unit`.
|
||||
Unit tests are implemented using the CMocka unit testing framework.
|
||||
To build them, use `configure --with-cmocka`. Execution of tests is done
|
||||
by the Kyua test execution engine; if the `kyua` command is available,
|
||||
then unit tests can be run via `make test` or `make unit`.
|
||||
|
||||
### <a name="doc"/> Documentation
|
||||
|
||||
|
||||
Vendored
+11
-10
@@ -1,6 +1,6 @@
|
||||
# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
|
||||
# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
@@ -12,9 +12,9 @@
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
|
||||
dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
dnl serial 11 (pkg-config-0.29.1)
|
||||
dnl
|
||||
# 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
|
||||
@@ -55,7 +55,7 @@ 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.1])
|
||||
[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
|
||||
@@ -156,7 +156,7 @@ 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 $1])
|
||||
AC_MSG_CHECKING([for $2])
|
||||
|
||||
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
|
||||
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
|
||||
@@ -166,11 +166,11 @@ 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])
|
||||
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
|
||||
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
|
||||
@@ -187,7 +187,7 @@ installed software in a non-standard prefix.
|
||||
_PKG_TEXT])[]dnl
|
||||
])
|
||||
elif test $pkg_failed = untried; then
|
||||
AC_MSG_RESULT([no])
|
||||
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
|
||||
@@ -289,6 +289,7 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
||||
])dnl PKG_CHECK_VAR
|
||||
|
||||
m4_include([m4/ax_check_openssl.m4])
|
||||
m4_include([m4/ax_posix_shell.m4])
|
||||
m4_include([m4/ax_pthread.m4])
|
||||
m4_include([m4/libtool.m4])
|
||||
m4_include([m4/ltoptions.m4])
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ VPATH = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
SUBDIRS = named rndc dig delv dnssec tools nsupdate check confgen \
|
||||
@NZD_TOOLS@ @PYTHON_TOOLS@ @PKCS11_TOOLS@ tests
|
||||
@NZD_TOOLS@ @PYTHON_TOOLS@ @PKCS11_TOOLS@ plugins tests
|
||||
TARGETS =
|
||||
|
||||
@BIND9_MAKE_RULES@
|
||||
|
||||
@@ -66,7 +66,7 @@ named-checkzone.@O@: named-checkzone.c
|
||||
named-checkconf@EXEEXT@: named-checkconf.@O@ check-tool.@O@ ${ISCDEPLIBS} \
|
||||
${NSDEPENDLIBS} ${DNSDEPLIBS} ${ISCCFGDEPLIBS} ${BIND9DEPLIBS}
|
||||
export BASEOBJS="named-checkconf.@O@ check-tool.@O@"; \
|
||||
export LIBS0="${NSLIBS} ${BIND9LIBS} ${ISCCFGLIBS} ${DNSLIBS}"; \
|
||||
export LIBS0="${BIND9LIBS} ${NSLIBS} ${ISCCFGLIBS} ${DNSLIBS}"; \
|
||||
${FINALBUILDCMD}
|
||||
|
||||
named-checkzone@EXEEXT@: named-checkzone.@O@ check-tool.@O@ ${ISCDEPLIBS} \
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
named-checkconf \- named configuration file syntax checking tool
|
||||
.SH "SYNOPSIS"
|
||||
.HP \w'\fBnamed\-checkconf\fR\ 'u
|
||||
\fBnamed\-checkconf\fR [\fB\-hjlvz\fR] [\fB\-p\fR\ [\fB\-x\fR\ ]] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] {filename}
|
||||
\fBnamed\-checkconf\fR [\fB\-chjlvz\fR] [\fB\-p\fR\ [\fB\-x\fR\ ]] [\fB\-t\ \fR\fB\fIdirectory\fR\fR] {filename}
|
||||
.SH "DESCRIPTION"
|
||||
.PP
|
||||
\fBnamed\-checkconf\fR
|
||||
@@ -79,6 +79,13 @@ When loading a zonefile read the journal if it exists\&.
|
||||
List all the configured zones\&. Each line of output contains the zone name, class (e\&.g\&. IN), view, and type (e\&.g\&. master or slave)\&.
|
||||
.RE
|
||||
.PP
|
||||
\-c
|
||||
.RS 4
|
||||
Check "core" configuration only\&. This suppresses the loading of plugin modules, and causes all parameters to
|
||||
\fBplugin\fR
|
||||
statements to be ignored\&.
|
||||
.RE
|
||||
.PP
|
||||
\-p
|
||||
.RS 4
|
||||
Print out the
|
||||
|
||||
+34
-13
@@ -46,6 +46,8 @@
|
||||
|
||||
static const char *program = "named-checkconf";
|
||||
|
||||
static bool loadplugins = true;
|
||||
|
||||
isc_log_t *logc = NULL;
|
||||
|
||||
#define CHECK(r)\
|
||||
@@ -282,8 +284,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
@@ -300,8 +304,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMX;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMXFAIL;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKMX;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKMXFAIL;
|
||||
@@ -327,8 +333,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_WARNMXCNAME;
|
||||
zone_options |= DNS_ZONEOPT_IGNOREMXCNAME;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_WARNMXCNAME;
|
||||
zone_options &= ~DNS_ZONEOPT_IGNOREMXCNAME;
|
||||
@@ -345,8 +353,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_WARNSRVCNAME;
|
||||
zone_options |= DNS_ZONEOPT_IGNORESRVCNAME;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_WARNSRVCNAME;
|
||||
zone_options &= ~DNS_ZONEOPT_IGNORESRVCNAME;
|
||||
@@ -366,8 +376,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
zone_options |= DNS_ZONEOPT_CHECKSPF;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKSPF;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKSPF;
|
||||
}
|
||||
@@ -383,8 +395,10 @@ configure_zone(const char *vclass, const char *view,
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKNAMES;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKNAMESFAIL;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKNAMES;
|
||||
zone_options |= DNS_ZONEOPT_CHECKNAMESFAIL;
|
||||
@@ -394,14 +408,16 @@ configure_zone(const char *vclass, const char *view,
|
||||
fmtobj = NULL;
|
||||
if (get_maps(maps, "masterfile-format", &fmtobj)) {
|
||||
const char *masterformatstr = cfg_obj_asstring(fmtobj);
|
||||
if (strcasecmp(masterformatstr, "text") == 0)
|
||||
if (strcasecmp(masterformatstr, "text") == 0) {
|
||||
masterformat = dns_masterformat_text;
|
||||
else if (strcasecmp(masterformatstr, "raw") == 0)
|
||||
} else if (strcasecmp(masterformatstr, "raw") == 0) {
|
||||
masterformat = dns_masterformat_raw;
|
||||
else if (strcasecmp(masterformatstr, "map") == 0)
|
||||
} else if (strcasecmp(masterformatstr, "map") == 0) {
|
||||
masterformat = dns_masterformat_map;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -548,7 +564,7 @@ main(int argc, char **argv) {
|
||||
/*
|
||||
* Process memory debugging argument first.
|
||||
*/
|
||||
#define CMDLINE_FLAGS "dhjlm:t:pvxz"
|
||||
#define CMDLINE_FLAGS "cdhjlm:t:pvxz"
|
||||
while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
|
||||
switch (c) {
|
||||
case 'm':
|
||||
@@ -573,6 +589,10 @@ main(int argc, char **argv) {
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != EOF) {
|
||||
switch (c) {
|
||||
case 'c':
|
||||
loadplugins = false;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
debug++;
|
||||
break;
|
||||
@@ -663,9 +683,10 @@ main(int argc, char **argv) {
|
||||
ISC_R_SUCCESS)
|
||||
exit(1);
|
||||
|
||||
result = bind9_check_namedconf(config, logc, mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
result = bind9_check_namedconf(config, loadplugins, logc, mctx);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
exit_status = 1;
|
||||
}
|
||||
|
||||
if (result == ISC_R_SUCCESS && (load_zones || list_zones)) {
|
||||
result = load_zones_fromconfig(config, mctx, list_zones);
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis sepchar=" ">
|
||||
<command>named-checkconf</command>
|
||||
<arg choice="opt" rep="norepeat"><option>-hjlvz</option></arg>
|
||||
<arg choice="opt" rep="norepeat"><option>-chjlvz</option></arg>
|
||||
<arg choice="opt" rep="norepeat"><option>-p</option>
|
||||
<arg choice="opt" rep="norepeat"><option>-x</option>
|
||||
</arg></arg>
|
||||
@@ -114,6 +114,17 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-c</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check "core" configuration only. This suppresses the loading
|
||||
of plugin modules, and causes all parameters to
|
||||
<command>plugin</command> statements to be ignored.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-p</term>
|
||||
<listitem>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<h2>Synopsis</h2>
|
||||
<div class="cmdsynopsis"><p>
|
||||
<code class="command">named-checkconf</code>
|
||||
[<code class="option">-hjlvz</code>]
|
||||
[<code class="option">-chjlvz</code>]
|
||||
[<code class="option">-p</code>
|
||||
[<code class="option">-x</code>
|
||||
]]
|
||||
@@ -88,6 +88,14 @@
|
||||
(e.g. master or slave).
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-c</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Check "core" configuration only. This suppresses the loading
|
||||
of plugin modules, and causes all parameters to
|
||||
<span class="command"><strong>plugin</strong></span> statements to be ignored.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-p</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
|
||||
@@ -139,12 +139,14 @@ main(int argc, char **argv) {
|
||||
#define PROGCMP(X) \
|
||||
(strcasecmp(prog_name, X) == 0 || strcasecmp(prog_name, X ".exe") == 0)
|
||||
|
||||
if (PROGCMP("named-checkzone"))
|
||||
if (PROGCMP("named-checkzone")) {
|
||||
progmode = progmode_check;
|
||||
else if (PROGCMP("named-compilezone"))
|
||||
} else if (PROGCMP("named-compilezone")) {
|
||||
progmode = progmode_compile;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/* Compilation specific defaults */
|
||||
if (progmode == progmode_compile) {
|
||||
|
||||
@@ -125,10 +125,12 @@ main(int argc, char **argv) {
|
||||
if (PROGCMP("tsig-keygen")) {
|
||||
progmode = progmode_keygen;
|
||||
quiet = true;
|
||||
} else if (PROGCMP("ddns-confgen"))
|
||||
} else if (PROGCMP("ddns-confgen")) {
|
||||
progmode = progmode_confgen;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
isc_commandline_errprint = false;
|
||||
|
||||
|
||||
+34
-1
@@ -765,7 +765,14 @@ setup_dnsseckeys(dns_client_t *client) {
|
||||
if (dlv_validation)
|
||||
dns_client_setdlv(client, dns_rdataclass_in, dlv_anchor);
|
||||
|
||||
|
||||
cleanup:
|
||||
if (bindkeys != NULL) {
|
||||
cfg_obj_destroy(parser, &bindkeys);
|
||||
}
|
||||
if (parser != NULL) {
|
||||
cfg_parser_destroy(&parser);
|
||||
}
|
||||
if (result != ISC_R_SUCCESS)
|
||||
delv_log(ISC_LOG_ERROR, "setup_dnsseckeys: %s",
|
||||
isc_result_totext(result));
|
||||
@@ -1167,6 +1174,8 @@ plus_option(char *option) {
|
||||
* options: "46a:b:c:d:himp:q:t:vx:";
|
||||
*/
|
||||
static const char *single_dash_opts = "46himv";
|
||||
static const char *dash_opts = "46abcdhimpqtvx";
|
||||
|
||||
static bool
|
||||
dash_option(char *option, char *next, bool *open_type_class) {
|
||||
char opt, *value;
|
||||
@@ -1224,6 +1233,7 @@ dash_option(char *option, char *next, bool *open_type_class) {
|
||||
/* NOTREACHED */
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (strlen(option) > 1U)
|
||||
option = &option[1];
|
||||
@@ -1367,8 +1377,10 @@ preparse_args(int argc, char **argv) {
|
||||
char *option;
|
||||
|
||||
for (argc--, argv++; argc > 0; argc--, argv++) {
|
||||
if (argv[0][0] != '-')
|
||||
if (argv[0][0] != '-') {
|
||||
continue;
|
||||
}
|
||||
|
||||
option = &argv[0][1];
|
||||
while (strpbrk(option, single_dash_opts) == &option[0]) {
|
||||
switch (option[0]) {
|
||||
@@ -1391,6 +1403,27 @@ preparse_args(int argc, char **argv) {
|
||||
}
|
||||
option = &option[1];
|
||||
}
|
||||
|
||||
if (strlen(option) == 0U) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Look for dash value option. */
|
||||
if (strpbrk(option, dash_opts) != &option[0] ||
|
||||
strlen(option) > 1U)
|
||||
{
|
||||
/* Error or value in option. */
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Dash value is next argument so we need to skip it. */
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
/* Handle missing argument */
|
||||
if (argc == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+20
-12
@@ -74,7 +74,9 @@ will perform an NS query for "\&." (the root)\&.
|
||||
It is possible to set per\-user defaults for
|
||||
\fBdig\fR
|
||||
via
|
||||
${HOME}/\&.digrc\&. This file is read and any options in it are applied before the command line arguments\&.
|
||||
${HOME}/\&.digrc\&. This file is read and any options in it are applied before the command line arguments\&. The
|
||||
\fB\-r\fR
|
||||
option disables this feature, for scripts that need predictable behaviour\&.
|
||||
.PP
|
||||
The IN and CH class names overlap with the IN and CH top level domain names\&. Either use the
|
||||
\fB\-t\fR
|
||||
@@ -174,11 +176,6 @@ reads a list of lookup requests to process from the given
|
||||
using the command\-line interface\&.
|
||||
.RE
|
||||
.PP
|
||||
\-i
|
||||
.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\&.
|
||||
.RE
|
||||
.PP
|
||||
\-k \fIkeyfile\fR
|
||||
.RS 4
|
||||
Sign queries using TSIG using a key read from the given file\&. Key files can be generated using
|
||||
@@ -208,6 +205,12 @@ The domain name to query\&. This is useful to distinguish the
|
||||
from other arguments\&.
|
||||
.RE
|
||||
.PP
|
||||
\-r
|
||||
.RS 4
|
||||
Do not read options from
|
||||
${HOME}/\&.digrc\&. This is useful for scripts that need predictable behaviour\&.
|
||||
.RE
|
||||
.PP
|
||||
\-t \fItype\fR
|
||||
.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
|
||||
@@ -246,9 +249,7 @@ arguments\&.
|
||||
\fBdig\fR
|
||||
automatically performs a lookup for a name like
|
||||
94\&.2\&.0\&.192\&.in\-addr\&.arpa
|
||||
and sets the query type and class to PTR and IN respectively\&. IPv6 addresses are looked up using nibble format under the IP6\&.ARPA domain (but see also the
|
||||
\fB\-i\fR
|
||||
option)\&.
|
||||
and sets the query type and class to PTR and IN respectively\&. IPv6 addresses are looked up using nibble format under the IP6\&.ARPA domain\&.
|
||||
.RE
|
||||
.PP
|
||||
\-y \fI[hmac:]\fR\fIkeyname:secret\fR
|
||||
@@ -468,12 +469,16 @@ option is enabled\&. If short form answers are requested, the default is not to
|
||||
.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\&.
|
||||
Process [do not process] IDN domain names on input\&. This requires IDN SUPPORT to have been enabled at compile time\&.
|
||||
.sp
|
||||
The default is to process IDN input when standard output is a tty\&. The IDN processing on input is disabled when dig output is redirected to files, pipes, and other non\-tty file descriptors\&.
|
||||
.RE
|
||||
.PP
|
||||
\fB+[no]idnout\fR
|
||||
.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\&.
|
||||
.sp
|
||||
The default is to process puny code on output when standard output is a tty\&. The puny code processing on output is disabled when dig output is redirected to files, pipes, and other non\-tty file descriptors\&.
|
||||
.RE
|
||||
.PP
|
||||
\fB+[no]ignore\fR
|
||||
@@ -795,7 +800,10 @@ has been built with IDN (internationalized domain name) support, it can accept a
|
||||
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
|
||||
\fI+noidnin\fR
|
||||
and
|
||||
\fI+noidnout\fR\&.
|
||||
\fI+noidnout\fR
|
||||
or define the
|
||||
\fBIDN_DISABLE\fR
|
||||
environment variable\&.
|
||||
.SH "FILES"
|
||||
.PP
|
||||
/etc/resolv\&.conf
|
||||
|
||||
+36
-20
@@ -66,7 +66,7 @@ static char hexcookie[81];
|
||||
|
||||
static bool short_form = false, printcmd = true,
|
||||
plusquest = false, pluscomm = false,
|
||||
ipv4only = false, ipv6only = false;
|
||||
ipv4only = false, ipv6only = false, digrc = true;
|
||||
static uint32_t splitwidth = 0xffffffff;
|
||||
|
||||
/*% opcode text */
|
||||
@@ -157,6 +157,7 @@ help(void) {
|
||||
" -m (enable memory usage debugging)\n"
|
||||
" -p port (specify port number)\n"
|
||||
" -q name (specify query name)\n"
|
||||
" -r (do not read ~/.digrc)\n"
|
||||
" -t type (specify query type)\n"
|
||||
" -u (display times in usec instead of msec)\n"
|
||||
" -x dot-notation (shortcut for reverse lookups)\n"
|
||||
@@ -263,9 +264,6 @@ received(unsigned int bytes, isc_sockaddr_t *from, dig_query_t *query) {
|
||||
else
|
||||
printf(";; Query time: %ld msec\n", (long) diff / 1000);
|
||||
printf(";; SERVER: %s(%s)\n", fromtext, query->servname);
|
||||
if (query->servssldigest != NULL) {
|
||||
printf(";; DNSoTLS cert digest: %s\n", query->servssldigest);
|
||||
}
|
||||
time(&tnow);
|
||||
#if !defined(WIN32)
|
||||
(void)localtime_r(&tnow, &tmnow);
|
||||
@@ -923,18 +921,6 @@ plus_option(char *option, bool is_batchfile,
|
||||
case 'o': /* domain ... but treat "do" as synonym for dnssec */
|
||||
if (cmd[2] == '\0')
|
||||
goto dnssec;
|
||||
if (cmd[2] == 't') {
|
||||
FULLCHECK("dot");
|
||||
if (!is_batchfile) {
|
||||
lookup->tcp_mode = true;
|
||||
lookup->dot_mode = state;
|
||||
lookup->dot_mode_set = true;
|
||||
if (!explicit_port) {
|
||||
port = 853;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
FULLCHECK("domain");
|
||||
if (value == NULL)
|
||||
goto need_value;
|
||||
@@ -1558,8 +1544,8 @@ plus_option(char *option, bool is_batchfile,
|
||||
/*%
|
||||
* #true returned if value was used
|
||||
*/
|
||||
static const char *single_dash_opts = "46dhimnuv";
|
||||
static const char *dash_opts = "46bcdfhikmnptvyx";
|
||||
static const char *single_dash_opts = "46dhimnruv";
|
||||
static const char *dash_opts = "46bcdfhikmnpqrtvyx";
|
||||
static bool
|
||||
dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||
bool *open_type_class, bool *need_clone,
|
||||
@@ -1630,6 +1616,10 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||
case 'n':
|
||||
/* deprecated */
|
||||
break;
|
||||
case 'r':
|
||||
debug("digrc (late)");
|
||||
digrc = false;
|
||||
break;
|
||||
case 'u':
|
||||
(*lookup)->use_usec = true;
|
||||
break;
|
||||
@@ -1707,7 +1697,6 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||
result = parse_uint(&num, value, MAXPORT, "port number");
|
||||
if (result != ISC_R_SUCCESS)
|
||||
fatal("Couldn't parse port number");
|
||||
explicit_port = true;
|
||||
port = num;
|
||||
return (value_from_next);
|
||||
case 'q':
|
||||
@@ -1857,11 +1846,23 @@ preparse_args(int argc, char **argv) {
|
||||
option = &rv[0][1];
|
||||
while (strpbrk(option, single_dash_opts) == &option[0]) {
|
||||
switch (option[0]) {
|
||||
case 'd':
|
||||
/* For debugging early startup */
|
||||
debugging = true;
|
||||
break;
|
||||
case 'm':
|
||||
memdebugging = true;
|
||||
isc_mem_debugging = ISC_MEM_DEBUGTRACE |
|
||||
ISC_MEM_DEBUGRECORD;
|
||||
break;
|
||||
case 'r':
|
||||
/*
|
||||
* Must be done early, because ~/.digrc
|
||||
* is read before command line parsing
|
||||
*/
|
||||
debug("digrc (early)");
|
||||
digrc = false;
|
||||
break;
|
||||
case '4':
|
||||
if (ipv6only)
|
||||
fatal("only one of -4 and -6 allowed");
|
||||
@@ -1875,6 +1876,20 @@ preparse_args(int argc, char **argv) {
|
||||
}
|
||||
option = &option[1];
|
||||
}
|
||||
if (strlen(option) == 0U) {
|
||||
continue;
|
||||
}
|
||||
/* Look for dash value option. */
|
||||
if (strpbrk(option, dash_opts) != &option[0] ||
|
||||
strlen(option) > 1U) {
|
||||
/* Error or value in option. */
|
||||
continue;
|
||||
}
|
||||
/* Dash value is next argument so we need to skip it. */
|
||||
rc--, rv++;
|
||||
/* Handle missing argument */
|
||||
if (rc == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1941,8 +1956,9 @@ parse_args(bool is_batchfile, bool config_only,
|
||||
*/
|
||||
INSIST(batchfp == NULL);
|
||||
homedir = getenv("HOME");
|
||||
if (homedir != NULL) {
|
||||
if (homedir != NULL && digrc) {
|
||||
unsigned int n;
|
||||
debug("digrc (open)");
|
||||
n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc",
|
||||
homedir);
|
||||
if (n < sizeof(rcfile)) {
|
||||
|
||||
+14
-3
@@ -131,9 +131,10 @@
|
||||
|
||||
<para>
|
||||
It is possible to set per-user defaults for <command>dig</command> via
|
||||
<filename>${HOME}/.digrc</filename>. This file is read and
|
||||
any options in it
|
||||
are applied before the command line arguments.
|
||||
<filename>${HOME}/.digrc</filename>. This file is read and any
|
||||
options in it are applied before the command line arguments.
|
||||
The <option>-r</option> option disables this feature, for
|
||||
scripts that need predictable behaviour.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@@ -323,6 +324,16 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-r</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Do not read options from <filename>${HOME}/.digrc</filename>.
|
||||
This is useful for scripts that need predictable behaviour.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-t <replaceable class="parameter">type</replaceable></term>
|
||||
<listitem>
|
||||
|
||||
+29
-16
@@ -106,9 +106,10 @@
|
||||
|
||||
<p>
|
||||
It is possible to set per-user defaults for <span class="command"><strong>dig</strong></span> via
|
||||
<code class="filename">${HOME}/.digrc</code>. This file is read and
|
||||
any options in it
|
||||
are applied before the command line arguments.
|
||||
<code class="filename">${HOME}/.digrc</code>. This file is read and any
|
||||
options in it are applied before the command line arguments.
|
||||
The <code class="option">-r</code> option disables this feature, for
|
||||
scripts that need predictable behaviour.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -227,14 +228,6 @@
|
||||
<span class="command"><strong>dig</strong></span> using the command-line interface.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-i</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-k <em class="replaceable"><code>keyfile</code></em></span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
@@ -274,6 +267,13 @@
|
||||
the <em class="parameter"><code>name</code></em> from other arguments.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-r</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Do not read options from <code class="filename">${HOME}/.digrc</code>.
|
||||
This is useful for scripts that need predictable behaviour.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-t <em class="replaceable"><code>type</code></em></span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
@@ -324,8 +324,7 @@
|
||||
<code class="literal">94.2.0.192.in-addr.arpa</code> and sets the
|
||||
query type and class to PTR and IN respectively. IPv6
|
||||
addresses are looked up using nibble format under the
|
||||
IP6.ARPA domain (but see also the <code class="option">-i</code>
|
||||
option).
|
||||
IP6.ARPA domain.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></span></dt>
|
||||
@@ -631,7 +630,13 @@
|
||||
<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.
|
||||
compile time.
|
||||
</p>
|
||||
<p>
|
||||
The default is to process IDN input when standard output
|
||||
is a tty. The IDN processing on input is disabled when
|
||||
dig output is redirected to files, pipes, and other
|
||||
non-tty file descriptors.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><code class="option">+[no]idnout</code></span></dt>
|
||||
@@ -639,7 +644,13 @@
|
||||
<p>
|
||||
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.
|
||||
compile time.
|
||||
</p>
|
||||
<p>
|
||||
The default is to process puny code on output when
|
||||
standard output is a tty. The puny code processing on
|
||||
output is disabled when dig output is redirected to
|
||||
files, pipes, and other non-tty file descriptors.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><code class="option">+[no]ignore</code></span></dt>
|
||||
@@ -1061,7 +1072,9 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, use
|
||||
parameters <em class="parameter"><code>+noidnin</code></em> and
|
||||
<em class="parameter"><code>+noidnout</code></em>.
|
||||
<em class="parameter"><code>+noidnout</code></em> or define
|
||||
the <code class="envar">IDN_DISABLE</code> environment variable.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
+74
-34
@@ -114,8 +114,7 @@ bool
|
||||
showsearch = false,
|
||||
is_dst_up = false,
|
||||
keep_open = false,
|
||||
verbose = false,
|
||||
explicit_port = false;
|
||||
verbose = false;
|
||||
in_port_t port = 53;
|
||||
unsigned int timeout = 0;
|
||||
unsigned int extrabytes;
|
||||
@@ -650,8 +649,6 @@ make_empty_lookup(void) {
|
||||
looknew->nsfound = 0;
|
||||
looknew->tcp_mode = false;
|
||||
looknew->tcp_mode_set = false;
|
||||
looknew->dot_mode = false;
|
||||
looknew->dot_mode_set = false;
|
||||
looknew->comments = true;
|
||||
looknew->stats = true;
|
||||
looknew->section_question = true;
|
||||
@@ -790,8 +787,6 @@ clone_lookup(dig_lookup_t *lookold, bool servers) {
|
||||
looknew->ns_search_only = lookold->ns_search_only;
|
||||
looknew->tcp_mode = lookold->tcp_mode;
|
||||
looknew->tcp_mode_set = lookold->tcp_mode_set;
|
||||
looknew->dot_mode = lookold->dot_mode;
|
||||
looknew->dot_mode_set = lookold->dot_mode_set;
|
||||
looknew->comments = lookold->comments;
|
||||
looknew->stats = lookold->stats;
|
||||
looknew->section_question = lookold->section_question;
|
||||
@@ -1232,6 +1227,19 @@ create_search_list(irs_resconf_t *resconf) {
|
||||
}
|
||||
}
|
||||
|
||||
/*%
|
||||
* Append 'addr' to the list of servers to be queried. This function is only
|
||||
* called when no server addresses are explicitly specified and either libirs
|
||||
* returns an empty list of servers to use or none of the addresses returned by
|
||||
* libirs are usable due to the specified address family restrictions.
|
||||
*/
|
||||
static void
|
||||
add_fallback_nameserver(const char *addr) {
|
||||
dig_server_t *server = make_server(addr, addr);
|
||||
ISC_LINK_INIT(server, link);
|
||||
ISC_LIST_APPEND(server_list, server, link);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Setup the system as a whole, reading key information and resolv.conf
|
||||
* settings.
|
||||
@@ -1277,6 +1285,16 @@ setup_system(bool ipv4only, bool ipv6only) {
|
||||
get_server_list(resconf);
|
||||
}
|
||||
|
||||
/* If we don't find a nameserver fall back to localhost */
|
||||
if (ISC_LIST_EMPTY(server_list)) {
|
||||
if (have_ipv6) {
|
||||
add_fallback_nameserver("::1");
|
||||
}
|
||||
if (have_ipv4) {
|
||||
add_fallback_nameserver("127.0.0.1");
|
||||
}
|
||||
}
|
||||
|
||||
irs_resconf_destroy(&resconf);
|
||||
|
||||
#ifdef HAVE_SETLOCALE
|
||||
@@ -1372,8 +1390,7 @@ setup_libs(void) {
|
||||
isc_mempool_setfreemax(commctx, 6);
|
||||
isc_mempool_setfillcount(commctx, 2);
|
||||
|
||||
result = isc_mutex_init(&lookup_lock);
|
||||
check_result(result, "isc_mutex_init");
|
||||
isc_mutex_init(&lookup_lock);
|
||||
}
|
||||
|
||||
typedef struct dig_ednsoptname {
|
||||
@@ -1524,17 +1541,21 @@ clear_query(dig_query_t *query) {
|
||||
|
||||
debug("clear_query(%p)", query);
|
||||
|
||||
if (query->timer != NULL)
|
||||
if (query->timer != NULL) {
|
||||
isc_timer_detach(&query->timer);
|
||||
}
|
||||
lookup = query->lookup;
|
||||
|
||||
if (lookup->current_query == query)
|
||||
if (lookup->current_query == query) {
|
||||
lookup->current_query = NULL;
|
||||
}
|
||||
|
||||
if (ISC_LINK_LINKED(query, link))
|
||||
if (ISC_LINK_LINKED(query, link)) {
|
||||
ISC_LIST_UNLINK(lookup->q, query, link);
|
||||
if (ISC_LINK_LINKED(query, clink))
|
||||
}
|
||||
if (ISC_LINK_LINKED(query, clink)) {
|
||||
ISC_LIST_UNLINK(lookup->connecting, query, clink);
|
||||
}
|
||||
INSIST(query->recvspace != NULL);
|
||||
|
||||
if (query->sock != NULL) {
|
||||
@@ -1546,13 +1567,11 @@ clear_query(dig_query_t *query) {
|
||||
isc_mempool_put(commctx, query->tmpsendspace);
|
||||
isc_buffer_invalidate(&query->recvbuf);
|
||||
isc_buffer_invalidate(&query->lengthbuf);
|
||||
if (query->servssldigest != NULL) {
|
||||
isc_mem_free(mctx, query->servssldigest);
|
||||
}
|
||||
|
||||
if (query->waiting_senddone) {
|
||||
query->pending_free = true;
|
||||
} else {
|
||||
query->magic = 0;
|
||||
isc_mem_free(mctx, query);
|
||||
}
|
||||
}
|
||||
@@ -2294,7 +2313,7 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
|
||||
if (lookup->ecs_addr != NULL) {
|
||||
uint8_t addr[16];
|
||||
uint16_t family;
|
||||
uint16_t family = 0;
|
||||
uint32_t plen;
|
||||
struct sockaddr *sa;
|
||||
struct sockaddr_in *sin;
|
||||
@@ -2351,6 +2370,7 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
isc_buffer_init(&b, ecsbuf, sizeof(ecsbuf));
|
||||
@@ -2462,13 +2482,14 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
|
||||
for (serv = ISC_LIST_HEAD(lookup->my_server_list);
|
||||
serv != NULL;
|
||||
serv = ISC_LIST_NEXT(serv, link)) {
|
||||
serv = ISC_LIST_NEXT(serv, link))
|
||||
{
|
||||
query = isc_mem_allocate(mctx, sizeof(dig_query_t));
|
||||
if (query == NULL)
|
||||
if (query == NULL) {
|
||||
fatal("memory allocation failure in %s:%d",
|
||||
__FILE__, __LINE__);
|
||||
debug("create query %p linked to lookup %p",
|
||||
query, lookup);
|
||||
}
|
||||
debug("create query %p linked to lookup %p", query, lookup);
|
||||
query->lookup = lookup;
|
||||
query->timer = NULL;
|
||||
query->waiting_connect = false;
|
||||
@@ -2484,7 +2505,6 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
query->first_rr_serial = 0;
|
||||
query->second_rr_serial = 0;
|
||||
query->servname = serv->servername;
|
||||
query->servssldigest = NULL;
|
||||
query->userarg = serv->userarg;
|
||||
query->rr_count = 0;
|
||||
query->msg_count = 0;
|
||||
@@ -2493,16 +2513,21 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
query->sock = NULL;
|
||||
query->recvspace = isc_mempool_get(commctx);
|
||||
query->tmpsendspace = isc_mempool_get(commctx);
|
||||
if (query->recvspace == NULL)
|
||||
if (query->recvspace == NULL) {
|
||||
fatal("memory allocation failure");
|
||||
}
|
||||
|
||||
isc_buffer_init(&query->recvbuf, query->recvspace, COMMSIZE);
|
||||
isc_buffer_init(&query->lengthbuf, query->lengthspace, 2);
|
||||
isc_buffer_init(&query->tmpsendbuf, query->tmpsendspace, COMMSIZE);
|
||||
isc_buffer_init(&query->tmpsendbuf, query->tmpsendspace,
|
||||
COMMSIZE);
|
||||
query->sendbuf = lookup->renderbuf;
|
||||
|
||||
ISC_LINK_INIT(query, clink);
|
||||
ISC_LINK_INIT(query, link);
|
||||
|
||||
query->magic = DIG_QUERY_MAGIC;
|
||||
|
||||
ISC_LIST_ENQUEUE(lookup->q, query, link);
|
||||
}
|
||||
|
||||
@@ -2511,9 +2536,10 @@ setup_lookup(dig_lookup_t *lookup) {
|
||||
extrabytes = 0;
|
||||
dighost_printmessage(ISC_LIST_HEAD(lookup->q),
|
||||
lookup->sendmsg, true);
|
||||
if (lookup->stats)
|
||||
if (lookup->stats) {
|
||||
printf(";; QUERY SIZE: %u\n\n",
|
||||
isc_buffer_usedlength(&lookup->renderbuf));
|
||||
}
|
||||
}
|
||||
return (true);
|
||||
}
|
||||
@@ -2539,20 +2565,26 @@ send_done(isc_task_t *_task, isc_event_t *event) {
|
||||
INSIST(sendcount >= 0);
|
||||
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
query->waiting_senddone = false;
|
||||
l = query->lookup;
|
||||
|
||||
if (l->ns_search_only && !l->trace_root && !l->tcp_mode) {
|
||||
if (!query->pending_free && l->ns_search_only &&
|
||||
!l->trace_root && !l->tcp_mode)
|
||||
{
|
||||
debug("sending next, since searching");
|
||||
next = ISC_LIST_NEXT(query, link);
|
||||
if (next != NULL)
|
||||
if (next != NULL) {
|
||||
send_udp(next);
|
||||
}
|
||||
}
|
||||
|
||||
isc_event_free(&event);
|
||||
|
||||
if (query->pending_free)
|
||||
if (query->pending_free) {
|
||||
query->magic = 0;
|
||||
isc_mem_free(mctx, query);
|
||||
}
|
||||
|
||||
check_if_done();
|
||||
UNLOCK_LOOKUP;
|
||||
@@ -2570,6 +2602,7 @@ cancel_lookup(dig_lookup_t *lookup) {
|
||||
debug("cancel_lookup()");
|
||||
query = ISC_LIST_HEAD(lookup->q);
|
||||
while (query != NULL) {
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
next = ISC_LIST_NEXT(query, link);
|
||||
if (query->sock != NULL) {
|
||||
isc_socket_cancel(query->sock, global_task,
|
||||
@@ -2589,6 +2622,7 @@ bringup_timer(dig_query_t *query, unsigned int default_timeout) {
|
||||
dig_lookup_t *l;
|
||||
unsigned int local_timeout;
|
||||
isc_result_t result;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("bringup_timer()");
|
||||
/*
|
||||
@@ -2653,6 +2687,7 @@ send_tcp_connect(dig_query_t *query) {
|
||||
isc_result_t result;
|
||||
dig_query_t *next;
|
||||
dig_lookup_t *l;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("send_tcp_connect(%p)", query);
|
||||
|
||||
@@ -2728,7 +2763,6 @@ send_tcp_connect(dig_query_t *query) {
|
||||
|
||||
result = isc_socket_create(socketmgr,
|
||||
isc_sockaddr_pf(&query->sockaddr),
|
||||
query->lookup->dot_mode ? isc_sockettype_tls :
|
||||
isc_sockettype_tcp, &query->sock);
|
||||
check_result(result, "isc_socket_create");
|
||||
sockcount++;
|
||||
@@ -2782,6 +2816,7 @@ send_udp(dig_query_t *query) {
|
||||
dig_query_t *next;
|
||||
isc_region_t r;
|
||||
isc_socketevent_t *sevent;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
debug("send_udp(%p)", query);
|
||||
|
||||
@@ -2883,11 +2918,17 @@ connect_timeout(isc_task_t *task, isc_event_t *event) {
|
||||
|
||||
LOCK_LOOKUP;
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
l = query->lookup;
|
||||
isc_event_free(&event);
|
||||
|
||||
INSIST(!free_now);
|
||||
|
||||
if (cancel_now) {
|
||||
UNLOCK_LOOKUP;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((query != NULL) && (query->lookup->current_query != NULL) &&
|
||||
ISC_LINK_LINKED(query->lookup->current_query, link) &&
|
||||
(ISC_LIST_NEXT(query->lookup->current_query, link) != NULL)) {
|
||||
@@ -2969,6 +3010,7 @@ tcp_length_done(isc_task_t *task, isc_event_t *event) {
|
||||
LOCK_LOOKUP;
|
||||
sevent = (isc_socketevent_t *)event;
|
||||
query = event->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
recvcount--;
|
||||
INSIST(recvcount >= 0);
|
||||
@@ -3043,6 +3085,7 @@ launch_next_query(dig_query_t *query, bool include_question) {
|
||||
isc_result_t result;
|
||||
dig_lookup_t *l;
|
||||
isc_region_t r;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
INSIST(!free_now);
|
||||
|
||||
@@ -3115,6 +3158,7 @@ connect_done(isc_task_t *task, isc_event_t *event) {
|
||||
LOCK_LOOKUP;
|
||||
sevent = (isc_socketevent_t *)event;
|
||||
query = sevent->ev_arg;
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
|
||||
INSIST(query->waiting_connect);
|
||||
|
||||
@@ -3175,11 +3219,6 @@ connect_done(isc_task_t *task, isc_event_t *event) {
|
||||
return;
|
||||
}
|
||||
exitcode = 0;
|
||||
query->servssldigest = isc_mem_allocate(mctx, 4096);
|
||||
if (isc_socket_getsslhexdigest(query->sock, query->servssldigest, 4096) != ISC_R_SUCCESS) {
|
||||
isc_mem_free(mctx, query->servssldigest);
|
||||
query->servssldigest = NULL;
|
||||
}
|
||||
if (keep_open) {
|
||||
if (keep != NULL)
|
||||
isc_socket_detach(&keep);
|
||||
@@ -4011,6 +4050,7 @@ do_lookup(dig_lookup_t *lookup) {
|
||||
lookup->pending = true;
|
||||
query = ISC_LIST_HEAD(lookup->q);
|
||||
if (query != NULL) {
|
||||
REQUIRE(DIG_VALID_QUERY(query));
|
||||
if (lookup->tcp_mode)
|
||||
send_tcp_connect(query);
|
||||
else
|
||||
@@ -4158,7 +4198,7 @@ destroy_libs(void) {
|
||||
}
|
||||
|
||||
UNLOCK_LOOKUP;
|
||||
DESTROYLOCK(&lookup_lock);
|
||||
isc_mutex_destroy(&lookup_lock);
|
||||
debug("Removing log context");
|
||||
isc_log_destroy(&lctx);
|
||||
|
||||
|
||||
+1
-6
@@ -112,11 +112,6 @@ Print debugging traces\&. Equivalent to the
|
||||
verbose option\&.
|
||||
.RE
|
||||
.PP
|
||||
\-i
|
||||
.RS 4
|
||||
Obsolete\&. Use the IP6\&.INT domain for reverse lookups of IPv6 addresses as defined in RFC1886 and deprecated in RFC4159\&. The default is to use IP6\&.ARPA as specified in RFC3596\&.
|
||||
.RE
|
||||
.PP
|
||||
\-l
|
||||
.RS 4
|
||||
List zone: The
|
||||
@@ -257,7 +252,7 @@ If
|
||||
\fBhost\fR
|
||||
has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names\&.
|
||||
\fBhost\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, defines the
|
||||
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, define the
|
||||
\fBIDN_DISABLE\fR
|
||||
environment variable\&. The IDN support is disabled if the variable is set when
|
||||
\fBhost\fR
|
||||
|
||||
+11
-9
@@ -151,6 +151,7 @@ show_usage(void) {
|
||||
" -s a SERVFAIL response should stop query\n"
|
||||
" -t specifies the query type\n"
|
||||
" -T enables TCP/IP mode\n"
|
||||
" -U enables UDP mode\n"
|
||||
" -v enables verbose output\n"
|
||||
" -V print version number and exit\n"
|
||||
" -w specifies to wait forever for a reply\n"
|
||||
@@ -624,28 +625,29 @@ pre_parse_args(int argc, char **argv) {
|
||||
case 'a': break;
|
||||
case 'A': break;
|
||||
case 'c': break;
|
||||
case 'C': break;
|
||||
case 'd': break;
|
||||
case 'D':
|
||||
if (debugging)
|
||||
debugtiming = true;
|
||||
debugging = true;
|
||||
break;
|
||||
case 'i': break;
|
||||
case 'l': break;
|
||||
case 'n': break;
|
||||
case 'N': break;
|
||||
case 'r': break;
|
||||
case 'R': break;
|
||||
case 's': break;
|
||||
case 't': break;
|
||||
case 'T': break;
|
||||
case 'U': break;
|
||||
case 'v': break;
|
||||
case 'V':
|
||||
version();
|
||||
exit(0);
|
||||
break;
|
||||
case 'w': break;
|
||||
case 'C': break;
|
||||
case 'D':
|
||||
if (debugging)
|
||||
debugtiming = true;
|
||||
debugging = true;
|
||||
break;
|
||||
case 'N': break;
|
||||
case 'R': break;
|
||||
case 'T': break;
|
||||
case 'W': break;
|
||||
default:
|
||||
show_usage();
|
||||
|
||||
+1
-10
@@ -138,15 +138,6 @@
|
||||
Equivalent to the <code class="option">-v</code> verbose option.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-i</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Obsolete.
|
||||
Use the IP6.INT domain for reverse lookups of IPv6
|
||||
addresses as defined in RFC1886 and deprecated in RFC4159.
|
||||
The default is to use IP6.ARPA as specified in RFC3596.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term">-l</span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
@@ -311,7 +302,7 @@
|
||||
<span class="command"><strong>host</strong></span> appropriately converts character encoding of
|
||||
domain name before sending a request to DNS server or displaying a
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, defines
|
||||
If you'd like to turn off the IDN support for some reason, define
|
||||
the <code class="envar">IDN_DISABLE</code> environment variable.
|
||||
The IDN support is disabled if the variable is set when
|
||||
<span class="command"><strong>host</strong></span> runs.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <isc/formatcheck.h>
|
||||
#include <isc/lang.h>
|
||||
#include <isc/list.h>
|
||||
#include <isc/magic.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/print.h>
|
||||
#include <isc/sockaddr.h>
|
||||
@@ -81,6 +82,11 @@ typedef struct dig_server dig_server_t;
|
||||
typedef ISC_LIST(dig_server_t) dig_serverlist_t;
|
||||
typedef struct dig_searchlist dig_searchlist_t;
|
||||
|
||||
#define DIG_QUERY_MAGIC ISC_MAGIC('D','i','g','q')
|
||||
|
||||
#define DIG_VALID_QUERY(x) ISC_MAGIC_VALID((x), DIG_QUERY_MAGIC)
|
||||
|
||||
|
||||
/*% The dig_lookup structure */
|
||||
struct dig_lookup {
|
||||
bool
|
||||
@@ -101,8 +107,6 @@ struct dig_lookup {
|
||||
zflag,
|
||||
trace, /*% dig +trace */
|
||||
trace_root, /*% initial query for either +trace or +nssearch */
|
||||
dot_mode,
|
||||
dot_mode_set,
|
||||
tcp_mode,
|
||||
tcp_mode_set,
|
||||
comments,
|
||||
@@ -186,6 +190,7 @@ struct dig_lookup {
|
||||
|
||||
/*% The dig_query structure */
|
||||
struct dig_query {
|
||||
unsigned int magic;
|
||||
dig_lookup_t *lookup;
|
||||
bool waiting_connect,
|
||||
pending_free,
|
||||
@@ -203,7 +208,6 @@ struct dig_query {
|
||||
uint32_t rr_count;
|
||||
bool ixfr_axfr;
|
||||
char *servname;
|
||||
char *servssldigest;
|
||||
char *userarg;
|
||||
isc_buffer_t recvbuf,
|
||||
lengthbuf,
|
||||
@@ -245,7 +249,7 @@ extern dig_searchlistlist_t search_list;
|
||||
extern unsigned int extrabytes;
|
||||
|
||||
extern bool check_ra, have_ipv4, have_ipv6, specified_source,
|
||||
usesearch, showsearch, explicit_port;
|
||||
usesearch, showsearch;
|
||||
extern in_port_t port;
|
||||
extern unsigned int timeout;
|
||||
extern isc_mem_t *mctx;
|
||||
|
||||
@@ -277,6 +277,17 @@ Try the next nameserver if a nameserver responds with SERVFAIL or a referral (no
|
||||
.PP
|
||||
\fBnslookup\fR
|
||||
returns with an exit status of 1 if any query failed, and 0 otherwise\&.
|
||||
.SH "IDN SUPPORT"
|
||||
.PP
|
||||
If
|
||||
\fBnslookup\fR
|
||||
has been built with IDN (internationalized domain name) support, it can accept and display non\-ASCII domain names\&.
|
||||
\fBnslookup\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, define the
|
||||
\fBIDN_DISABLE\fR
|
||||
environment variable\&. The IDN support is disabled if the variable is set when
|
||||
\fBnslookup\fR
|
||||
runs or when the standard output is not a tty\&.
|
||||
.SH "FILES"
|
||||
.PP
|
||||
/etc/resolv\&.conf
|
||||
|
||||
+19
-2
@@ -362,14 +362,31 @@ nslookup -query=hinfo -timeout=10
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.11"></a><h2>FILES</h2>
|
||||
<a name="id-1.11"></a><h2>IDN SUPPORT</h2>
|
||||
|
||||
<p>
|
||||
If <span class="command"><strong>nslookup</strong></span> has been built with IDN (internationalized
|
||||
domain name) support, it can accept and display non-ASCII domain names.
|
||||
<span class="command"><strong>nslookup</strong></span> appropriately converts character encoding of
|
||||
domain name before sending a request to DNS server or displaying a
|
||||
reply from the server.
|
||||
If you'd like to turn off the IDN support for some reason, define
|
||||
the <code class="envar">IDN_DISABLE</code> environment variable.
|
||||
The IDN support is disabled if the variable is set when
|
||||
<span class="command"><strong>nslookup</strong></span> runs or when the standard output is not
|
||||
a tty.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.12"></a><h2>FILES</h2>
|
||||
|
||||
<p><code class="filename">/etc/resolv.conf</code>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.12"></a><h2>SEE ALSO</h2>
|
||||
<a name="id-1.13"></a><h2>SEE ALSO</h2>
|
||||
|
||||
<p><span class="citerefentry">
|
||||
<span class="refentrytitle">dig</span>(1)
|
||||
|
||||
@@ -163,8 +163,8 @@ verbose_time(int level, const char *msg, isc_stdtime_t time) {
|
||||
if (verbose < 3) {
|
||||
vbprintf(level, "%s %s\n", msg, timestr);
|
||||
} else {
|
||||
vbprintf(level, "%s %s (%lld)\n",
|
||||
msg, timestr, (long long)time);
|
||||
vbprintf(level, "%s %s (%" PRIu32 ")\n",
|
||||
msg, timestr, time);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -330,7 +330,7 @@ usage(void) {
|
||||
fprintf(stderr, " -K <directory>: directory in which to find "
|
||||
"key file or keyset file\n");
|
||||
fprintf(stderr, " -a algorithm: digest algorithm "
|
||||
"(SHA-1, SHA-256, GOST or SHA-384)\n");
|
||||
"(SHA-1, SHA-256 or SHA-384)\n");
|
||||
fprintf(stderr, " -1: use SHA-1\n");
|
||||
fprintf(stderr, " -2: use SHA-256\n");
|
||||
fprintf(stderr, " -C: print CDS record\n");
|
||||
|
||||
@@ -55,7 +55,7 @@ of the key is specified on the command line\&. This must match the name of the z
|
||||
.RS 4
|
||||
Selects the cryptographic algorithm\&. The value of
|
||||
\fBalgorithm\fR
|
||||
must be one of RSAMD5, RSASHA1, DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448\&.
|
||||
must be one of RSAMD5, RSASHA1, NSEC3RSASHA1, RSASHA256, RSASHA512, ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448\&.
|
||||
.sp
|
||||
If no algorithm is specified, then RSASHA1 will be used by default, unless the
|
||||
\fB\-3\fR
|
||||
@@ -63,9 +63,9 @@ option is specified, in which case NSEC3RSASHA1 will be used instead\&. (If
|
||||
\fB\-3\fR
|
||||
is used and an algorithm is specified, that algorithm will be checked for compatibility with NSEC3\&.)
|
||||
.sp
|
||||
These values are case insensitive\&. In some cases, abbreviations are supported, such as ECDSA256 for ECDSAP256SHA256 and ECDSA384 for ECDSAP384SHA384\&. If RSASHA1 or DSA is specified along with the
|
||||
These values are case insensitive\&. In some cases, abbreviations are supported, such as ECDSA256 for ECDSAP256SHA256 and ECDSA384 for ECDSAP384SHA384\&. If RSASHA1 is specified along with the
|
||||
\fB\-3\fR
|
||||
option, then NSEC3RSASHA1 or NSEC3DSA will be used instead\&.
|
||||
option, then NSEC3RSASHA1 will be used instead\&.
|
||||
.sp
|
||||
As of BIND 9\&.12\&.0, this option is mandatory except when using the
|
||||
\fB\-S\fR
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<p>
|
||||
Selects the cryptographic algorithm. The value of
|
||||
<code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
|
||||
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512,
|
||||
NSEC3RSASHA1, RSASHA256, RSASHA512,
|
||||
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448.
|
||||
</p>
|
||||
<p>
|
||||
@@ -103,9 +103,9 @@
|
||||
<p>
|
||||
These values are case insensitive. In some cases, abbreviations
|
||||
are supported, such as ECDSA256 for ECDSAP256SHA256 and
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 or DSA is specified
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 is specified
|
||||
along with the <code class="option">-3</code> option, then NSEC3RSASHA1
|
||||
or NSEC3DSA will be used instead.
|
||||
will be used instead.
|
||||
</p>
|
||||
<p>
|
||||
As of BIND 9.12.0, this option is mandatory except when using
|
||||
|
||||
@@ -62,13 +62,13 @@ may be preferable to direct use of
|
||||
.RS 4
|
||||
Selects the cryptographic algorithm\&. For DNSSEC keys, the value of
|
||||
\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, NSEC3RSASHA1, RSASHA256, RSASHA512, 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
|
||||
option as well\&.
|
||||
.sp
|
||||
These values are case insensitive\&. In some cases, abbreviations are supported, such as ECDSA256 for ECDSAP256SHA256 and ECDSA384 for ECDSAP384SHA384\&. If RSASHA1 or DSA is specified along with the
|
||||
These values are case insensitive\&. In some cases, abbreviations are supported, such as ECDSA256 for ECDSAP256SHA256 and ECDSA384 for ECDSAP384SHA384\&. If RSASHA1 is specified along with the
|
||||
\fB\-3\fR
|
||||
option, then NSEC3RSASHA1 or NSEC3DSA will be used instead\&.
|
||||
option, then NSEC3RSASHA1 will be used instead\&.
|
||||
.sp
|
||||
This parameter
|
||||
\fImust\fR
|
||||
@@ -327,21 +327,21 @@ and
|
||||
files are generated for symmetric cryptography algorithms such as HMAC\-MD5, even though the public and private key are equivalent\&.
|
||||
.SH "EXAMPLE"
|
||||
.PP
|
||||
To generate a 768\-bit DSA key for the domain
|
||||
To generate an ECDSAP256SHA256 key for the domain
|
||||
\fBexample\&.com\fR, the following command would be issued:
|
||||
.PP
|
||||
\fBdnssec\-keygen \-a DSA \-b 768 \-n ZONE example\&.com\fR
|
||||
\fBdnssec\-keygen \-a ECDSAP256SHA256 \-n ZONE example\&.com\fR
|
||||
.PP
|
||||
The command would print a string of the form:
|
||||
.PP
|
||||
\fBKexample\&.com\&.+003+26160\fR
|
||||
\fBKexample\&.com\&.+013+26160\fR
|
||||
.PP
|
||||
In this example,
|
||||
\fBdnssec\-keygen\fR
|
||||
creates the files
|
||||
Kexample\&.com\&.+003+26160\&.key
|
||||
Kexample\&.com\&.+013+26160\&.key
|
||||
and
|
||||
Kexample\&.com\&.+003+26160\&.private\&.
|
||||
Kexample\&.com\&.+013+26160\&.private\&.
|
||||
.SH "SEE ALSO"
|
||||
.PP
|
||||
\fBdnssec-signzone\fR(8),
|
||||
|
||||
@@ -605,22 +605,22 @@
|
||||
<refsection><info><title>EXAMPLE</title></info>
|
||||
|
||||
<para>
|
||||
To generate a 768-bit DSA key for the domain
|
||||
To generate an ECDSAP256SHA256 key for the domain
|
||||
<userinput>example.com</userinput>, the following command would be
|
||||
issued:
|
||||
</para>
|
||||
<para><userinput>dnssec-keygen -a DSA -b 768 -n ZONE example.com</userinput>
|
||||
<para><userinput>dnssec-keygen -a ECDSAP256SHA256 -n ZONE example.com</userinput>
|
||||
</para>
|
||||
<para>
|
||||
The command would print a string of the form:
|
||||
</para>
|
||||
<para><userinput>Kexample.com.+003+26160</userinput>
|
||||
<para><userinput>Kexample.com.+013+26160</userinput>
|
||||
</para>
|
||||
<para>
|
||||
In this example, <command>dnssec-keygen</command> creates
|
||||
the files <filename>Kexample.com.+003+26160.key</filename>
|
||||
the files <filename>Kexample.com.+013+26160.key</filename>
|
||||
and
|
||||
<filename>Kexample.com.+003+26160.private</filename>.
|
||||
<filename>Kexample.com.+013+26160.private</filename>.
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
<p>
|
||||
Selects the cryptographic algorithm. For DNSSEC keys, the value
|
||||
of <code class="option">algorithm</code> must be one of RSAMD5, RSASHA1,
|
||||
DSA, NSEC3RSASHA1, NSEC3DSA, RSASHA256, RSASHA512,
|
||||
NSEC3RSASHA1, RSASHA256, RSASHA512,
|
||||
ECDSAP256SHA256, ECDSAP384SHA384, ED25519 or ED448. For
|
||||
TKEY, the value must be DH (Diffie Hellman); specifying
|
||||
his value will automatically set the <code class="option">-T KEY</code>
|
||||
@@ -109,9 +109,9 @@
|
||||
<p>
|
||||
These values are case insensitive. In some cases, abbreviations
|
||||
are supported, such as ECDSA256 for ECDSAP256SHA256 and
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 or DSA is specified
|
||||
ECDSA384 for ECDSAP384SHA384. If RSASHA1 is specified
|
||||
along with the <code class="option">-3</code> option, then NSEC3RSASHA1
|
||||
or NSEC3DSA will be used instead.
|
||||
will be used instead.
|
||||
</p>
|
||||
<p>
|
||||
This parameter <span class="emphasis"><em>must</em></span> be specified except
|
||||
@@ -498,22 +498,22 @@
|
||||
<a name="id-1.11"></a><h2>EXAMPLE</h2>
|
||||
|
||||
<p>
|
||||
To generate a 768-bit DSA key for the domain
|
||||
To generate an ECDSAP256SHA256 key for the domain
|
||||
<strong class="userinput"><code>example.com</code></strong>, the following command would be
|
||||
issued:
|
||||
</p>
|
||||
<p><strong class="userinput"><code>dnssec-keygen -a DSA -b 768 -n ZONE example.com</code></strong>
|
||||
<p><strong class="userinput"><code>dnssec-keygen -a ECDSAP256SHA256 -n ZONE example.com</code></strong>
|
||||
</p>
|
||||
<p>
|
||||
The command would print a string of the form:
|
||||
</p>
|
||||
<p><strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
|
||||
<p><strong class="userinput"><code>Kexample.com.+013+26160</code></strong>
|
||||
</p>
|
||||
<p>
|
||||
In this example, <span class="command"><strong>dnssec-keygen</strong></span> creates
|
||||
the files <code class="filename">Kexample.com.+003+26160.key</code>
|
||||
the files <code class="filename">Kexample.com.+013+26160.key</code>
|
||||
and
|
||||
<code class="filename">Kexample.com.+003+26160.private</code>.
|
||||
<code class="filename">Kexample.com.+013+26160.private</code>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -415,9 +415,9 @@ Specify which keys should be used to sign the zone\&. If no keys are specified,
|
||||
.PP
|
||||
The following command signs the
|
||||
\fBexample\&.com\fR
|
||||
zone with the DSA key generated by
|
||||
zone with the ECDSAP256SHA256 key generated by key generated by
|
||||
\fBdnssec\-keygen\fR
|
||||
(Kexample\&.com\&.+003+17247)\&. Because the
|
||||
(Kexample\&.com\&.+013+17247)\&. Because the
|
||||
\fB\-S\fR
|
||||
option is not being used, the zone\*(Aqs keys must be in the master file (db\&.example\&.com)\&. This invocation looks for
|
||||
dsset
|
||||
@@ -428,7 +428,7 @@ files, in the current directory, so that DS records can be imported from them (\
|
||||
.\}
|
||||
.nf
|
||||
% dnssec\-signzone \-g \-o example\&.com db\&.example\&.com \e
|
||||
Kexample\&.com\&.+003+17247
|
||||
Kexample\&.com\&.+013+17247
|
||||
db\&.example\&.com\&.signed
|
||||
%
|
||||
.fi
|
||||
|
||||
@@ -533,8 +533,6 @@ signset(dns_diff_t *del, dns_diff_t *add, dns_dbnode_t *node, dns_name_t *name,
|
||||
arraysize += dns_rdataset_count(&sigset);
|
||||
wassignedby = isc_mem_get(mctx, arraysize * sizeof(bool));
|
||||
nowsignedby = isc_mem_get(mctx, arraysize * sizeof(bool));
|
||||
if (wassignedby == NULL || nowsignedby == NULL)
|
||||
fatal("out of memory");
|
||||
|
||||
for (i = 0; i < arraysize; i++)
|
||||
wassignedby[i] = nowsignedby[i] = false;
|
||||
@@ -3876,9 +3874,11 @@ main(int argc, char *argv[]) {
|
||||
isc_result_totext(result));
|
||||
}
|
||||
|
||||
RUNTIME_CHECK(isc_mutex_init(&namelock) == ISC_R_SUCCESS);
|
||||
if (printstats)
|
||||
RUNTIME_CHECK(isc_mutex_init(&statslock) == ISC_R_SUCCESS);
|
||||
isc_mutex_init(&namelock);
|
||||
|
||||
if (printstats) {
|
||||
isc_mutex_init(&statslock);
|
||||
}
|
||||
|
||||
presign();
|
||||
TIME_NOW(&sign_start);
|
||||
@@ -3936,9 +3936,9 @@ main(int argc, char *argv[]) {
|
||||
check_result(result, "dns_master_dumptostream3");
|
||||
}
|
||||
|
||||
DESTROYLOCK(&namelock);
|
||||
isc_mutex_destroy(&namelock);
|
||||
if (printstats)
|
||||
DESTROYLOCK(&statslock);
|
||||
isc_mutex_destroy(&statslock);
|
||||
|
||||
if (!output_stdout) {
|
||||
result = isc_stdio_close(outfp);
|
||||
|
||||
@@ -787,15 +787,16 @@
|
||||
|
||||
<para>
|
||||
The following command signs the <userinput>example.com</userinput>
|
||||
zone with the DSA key generated by <command>dnssec-keygen</command>
|
||||
(Kexample.com.+003+17247). Because the <command>-S</command> option
|
||||
is not being used, the zone's keys must be in the master file
|
||||
zone with the ECDSAP256SHA256 key generated by key generated by
|
||||
<command>dnssec-keygen</command> (Kexample.com.+013+17247).
|
||||
Because the <command>-S</command> option is not being used,
|
||||
the zone's keys must be in the master file
|
||||
(<filename>db.example.com</filename>). This invocation looks
|
||||
for <filename>dsset</filename> files, in the current directory,
|
||||
so that DS records can be imported from them (<command>-g</command>).
|
||||
</para>
|
||||
<programlisting>% dnssec-signzone -g -o example.com db.example.com \
|
||||
Kexample.com.+003+17247
|
||||
Kexample.com.+013+17247
|
||||
db.example.com.signed
|
||||
%</programlisting>
|
||||
<para>
|
||||
|
||||
@@ -624,15 +624,16 @@
|
||||
|
||||
<p>
|
||||
The following command signs the <strong class="userinput"><code>example.com</code></strong>
|
||||
zone with the DSA key generated by <span class="command"><strong>dnssec-keygen</strong></span>
|
||||
(Kexample.com.+003+17247). Because the <span class="command"><strong>-S</strong></span> option
|
||||
is not being used, the zone's keys must be in the master file
|
||||
zone with the ECDSAP256SHA256 key generated by key generated by
|
||||
<span class="command"><strong>dnssec-keygen</strong></span> (Kexample.com.+013+17247).
|
||||
Because the <span class="command"><strong>-S</strong></span> option is not being used,
|
||||
the zone's keys must be in the master file
|
||||
(<code class="filename">db.example.com</code>). This invocation looks
|
||||
for <code class="filename">dsset</code> files, in the current directory,
|
||||
so that DS records can be imported from them (<span class="command"><strong>-g</strong></span>).
|
||||
</p>
|
||||
<pre class="programlisting">% dnssec-signzone -g -o example.com db.example.com \
|
||||
Kexample.com.+003+17247
|
||||
Kexample.com.+013+17247
|
||||
db.example.com.signed
|
||||
%</pre>
|
||||
<p>
|
||||
|
||||
+5
-4
@@ -154,10 +154,7 @@ options {\n\
|
||||
# fetch-glue <obsolete>;\n\
|
||||
fetch-quota-params 100 0.1 0.3 0.7;\n\
|
||||
fetches-per-server 0;\n\
|
||||
fetches-per-zone 0;\n\
|
||||
filter-aaaa-on-v4 no;\n\
|
||||
filter-aaaa-on-v6 no;\n\
|
||||
filter-aaaa { any; };\n"
|
||||
fetches-per-zone 0;\n"
|
||||
#ifdef HAVE_GEOIP
|
||||
" geoip-use-ecs yes;\n"
|
||||
#endif
|
||||
@@ -174,6 +171,8 @@ options {\n\
|
||||
max-recursion-queries 75;\n\
|
||||
max-stale-ttl 604800; /* 1 week */\n\
|
||||
message-compression yes;\n\
|
||||
min-ncache-ttl 0; /* 0 hours */\n\
|
||||
min-cache-ttl 0; /* 0 seconds */\n\
|
||||
# min-roots <obsolete>;\n\
|
||||
minimal-any false;\n\
|
||||
minimal-responses no-auth-recursive;\n\
|
||||
@@ -457,6 +456,7 @@ named_config_getzonetype(const cfg_obj_t *zonetypeobj) {
|
||||
ztype = dns_zone_redirect;
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
return (ztype);
|
||||
}
|
||||
@@ -1029,6 +1029,7 @@ named_config_getkeyalgorithm2(const char *str, const dns_name_t **name,
|
||||
case hmacsha512: *name = dns_tsig_hmacsha512_name; break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
if (typep != NULL)
|
||||
|
||||
@@ -157,6 +157,7 @@ channel_fromconf(const cfg_obj_t *channel, isc_logconfig_t *logconfig) {
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
type = ISC_LOG_TOFILE;
|
||||
|
||||
+18
-11
@@ -821,7 +821,7 @@ create_managers(void) {
|
||||
}
|
||||
|
||||
result = isc_socketmgr_create2(named_g_mctx, &named_g_socketmgr,
|
||||
maxsocks, named_g_udpdisp);
|
||||
maxsocks, named_g_cpus);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"isc_socketmgr_create() failed: %s",
|
||||
@@ -1065,14 +1065,20 @@ setup(void) {
|
||||
/*
|
||||
* Get the initial resource limits.
|
||||
*/
|
||||
(void)isc_resource_getlimit(isc_resource_stacksize,
|
||||
&named_g_initstacksize);
|
||||
(void)isc_resource_getlimit(isc_resource_datasize,
|
||||
&named_g_initdatasize);
|
||||
(void)isc_resource_getlimit(isc_resource_coresize,
|
||||
&named_g_initcoresize);
|
||||
(void)isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles);
|
||||
#ifndef WIN32
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_stacksize,
|
||||
&named_g_initstacksize)
|
||||
== ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_datasize,
|
||||
&named_g_initdatasize)
|
||||
== ISC_R_SUCCESS);
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_coresize,
|
||||
&named_g_initcoresize)
|
||||
== ISC_R_SUCCESS);
|
||||
#endif
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles)
|
||||
== ISC_R_SUCCESS);
|
||||
|
||||
/*
|
||||
* System resources cannot effectively be tuned on some systems.
|
||||
@@ -1080,8 +1086,9 @@ setup(void) {
|
||||
*/
|
||||
old_openfiles = named_g_initopenfiles;
|
||||
named_os_adjustnofile();
|
||||
(void)isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles);
|
||||
RUNTIME_CHECK(isc_resource_getlimit(isc_resource_openfiles,
|
||||
&named_g_initopenfiles)
|
||||
== ISC_R_SUCCESS);
|
||||
if (old_openfiles != named_g_initopenfiles) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_MAIN, ISC_LOG_NOTICE,
|
||||
|
||||
+17
-13
@@ -10,12 +10,12 @@
|
||||
.\" Title: named.conf
|
||||
.\" Author:
|
||||
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
|
||||
.\" Date: 2018-06-21
|
||||
.\" Date: 2018-10-23
|
||||
.\" Manual: BIND9
|
||||
.\" Source: ISC
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "NAMED\&.CONF" "5" "2018\-06\-21" "ISC" "BIND9"
|
||||
.TH "NAMED\&.CONF" "5" "2018\-10\-23" "ISC" "BIND9"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -199,6 +199,7 @@ options {
|
||||
] [ dscp \fIinteger\fR ];
|
||||
alt\-transfer\-source\-v6 ( \fIipv6_address\fR | * ) [ port ( \fIinteger\fR |
|
||||
* ) ] [ dscp \fIinteger\fR ];
|
||||
answer\-cookie \fIboolean\fR;
|
||||
attach\-cache \fIstring\fR;
|
||||
auth\-nxdomain \fIboolean\fR; // default changed
|
||||
auto\-dnssec ( allow | maintain | off );
|
||||
@@ -264,8 +265,8 @@ options {
|
||||
dnssec\-secure\-to\-insecure \fIboolean\fR;
|
||||
dnssec\-update\-mode ( maintain | no\-resign );
|
||||
dnssec\-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; \&.\&.\&. };
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [
|
||||
( query | response ) ]; \&.\&.\&. };
|
||||
dnstap\-identity ( \fIquoted_string\fR | none | hostname );
|
||||
dnstap\-output ( file | unix ) \fIquoted_string\fR [ size ( unlimited |
|
||||
\fIsize\fR ) ] [ versions ( unlimited | \fIinteger\fR ) ] [ suffix (
|
||||
@@ -343,6 +344,8 @@ options {
|
||||
memstatistics \fIboolean\fR;
|
||||
memstatistics\-file \fIquoted_string\fR;
|
||||
message\-compression \fIboolean\fR;
|
||||
min\-cache\-ttl \fIttlval\fR;
|
||||
min\-ncache\-ttl \fIttlval\fR;
|
||||
min\-refresh\-time \fIinteger\fR;
|
||||
min\-retry\-time \fIinteger\fR;
|
||||
minimal\-any \fIboolean\fR;
|
||||
@@ -632,8 +635,8 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
dnssec\-secure\-to\-insecure \fIboolean\fR;
|
||||
dnssec\-update\-mode ( maintain | no\-resign );
|
||||
dnssec\-validation ( yes | no | auto );
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |
|
||||
response ) ]; \&.\&.\&. };
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [
|
||||
( query | response ) ]; \&.\&.\&. };
|
||||
dual\-stack\-servers [ port \fIinteger\fR ] { ( \fIquoted_string\fR [ port
|
||||
\fIinteger\fR ] [ dscp \fIinteger\fR ] | \fIipv4_address\fR [ port
|
||||
\fIinteger\fR ] [ dscp \fIinteger\fR ] | \fIipv6_address\fR [ port
|
||||
@@ -914,10 +917,10 @@ view \fIstring\fR [ \fIclass\fR ] {
|
||||
static\-stub | stub );
|
||||
update\-check\-ksk \fIboolean\fR;
|
||||
update\-policy ( local | { ( deny | grant ) \fIstring\fR (
|
||||
6to4\-self | external | krb5\-self | krb5\-subdomain |
|
||||
ms\-self | ms\-subdomain | name | self | selfsub |
|
||||
selfwild | subdomain | tcp\-self | wildcard | zonesub )
|
||||
[ \fIstring\fR ] \fIrrtypelist\fR; \&.\&.\&. };
|
||||
6to4\-self | external | krb5\-self | krb5\-selfsub |
|
||||
krb5\-subdomain | ms\-self | ms\-selfsub | ms\-subdomain |
|
||||
name | self | selfsub | selfwild | subdomain | tcp\-self
|
||||
| wildcard | zonesub ) [ \fIstring\fR ] \fIrrtypelist\fR; \&.\&.\&. };
|
||||
use\-alt\-transfer\-source \fIboolean\fR;
|
||||
zero\-no\-soa\-ttl \fIboolean\fR;
|
||||
zone\-statistics ( full | terse | none | \fIboolean\fR );
|
||||
@@ -1020,9 +1023,10 @@ zone \fIstring\fR [ \fIclass\fR ] {
|
||||
stub );
|
||||
update\-check\-ksk \fIboolean\fR;
|
||||
update\-policy ( local | { ( deny | grant ) \fIstring\fR ( 6to4\-self |
|
||||
external | krb5\-self | krb5\-subdomain | ms\-self | ms\-subdomain
|
||||
| name | self | selfsub | selfwild | subdomain | tcp\-self |
|
||||
wildcard | zonesub ) [ \fIstring\fR ] \fIrrtypelist\fR; \&.\&.\&. };
|
||||
external | krb5\-self | krb5\-selfsub | krb5\-subdomain | ms\-self
|
||||
| ms\-selfsub | ms\-subdomain | name | self | selfsub | selfwild
|
||||
| subdomain | tcp\-self | wildcard | zonesub ) [ \fIstring\fR ]
|
||||
\fIrrtypelist\fR; \&.\&.\&. };
|
||||
use\-alt\-transfer\-source \fIboolean\fR;
|
||||
zero\-no\-soa\-ttl \fIboolean\fR;
|
||||
zone\-statistics ( full | terse | none | \fIboolean\fR );
|
||||
|
||||
@@ -337,6 +337,8 @@ options {
|
||||
memstatistics <replaceable>boolean</replaceable>;
|
||||
memstatistics-file <replaceable>quoted_string</replaceable>;
|
||||
message-compression <replaceable>boolean</replaceable>;
|
||||
min-cache-ttl <replaceable>ttlval</replaceable>;
|
||||
min-ncache-ttl <replaceable>ttlval</replaceable>;
|
||||
min-refresh-time <replaceable>integer</replaceable>;
|
||||
min-retry-time <replaceable>integer</replaceable>;
|
||||
minimal-any <replaceable>boolean</replaceable>;
|
||||
|
||||
+15
-11
@@ -180,6 +180,7 @@ options
|
||||
] [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
alt-transfer-source-v6 ( <em class="replaceable"><code>ipv6_address</code></em> | * ) [ port ( <em class="replaceable"><code>integer</code></em> |<br>
|
||||
* ) ] [ dscp <em class="replaceable"><code>integer</code></em> ];<br>
|
||||
answer-cookie <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
attach-cache <em class="replaceable"><code>string</code></em>;<br>
|
||||
auth-nxdomain <em class="replaceable"><code>boolean</code></em>; // default changed<br>
|
||||
auto-dnssec ( allow | maintain | off );<br>
|
||||
@@ -245,8 +246,8 @@ options
|
||||
dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
dnssec-update-mode ( maintain | no-resign );<br>
|
||||
dnssec-validation ( yes | no | auto );<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |<br>
|
||||
response ) ]; ... };<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [<br>
|
||||
( query | response ) ]; ... };<br>
|
||||
dnstap-identity ( <em class="replaceable"><code>quoted_string</code></em> | none | hostname );<br>
|
||||
dnstap-output ( file | unix ) <em class="replaceable"><code>quoted_string</code></em> [ size ( unlimited |<br>
|
||||
<em class="replaceable"><code>size</code></em> ) ] [ versions ( unlimited | <em class="replaceable"><code>integer</code></em> ) ] [ suffix (<br>
|
||||
@@ -324,6 +325,8 @@ options
|
||||
memstatistics <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
memstatistics-file <em class="replaceable"><code>quoted_string</code></em>;<br>
|
||||
message-compression <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
min-cache-ttl <em class="replaceable"><code>ttlval</code></em>;<br>
|
||||
min-ncache-ttl <em class="replaceable"><code>ttlval</code></em>;<br>
|
||||
min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
min-retry-time <em class="replaceable"><code>integer</code></em>;<br>
|
||||
minimal-any <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
@@ -601,8 +604,8 @@ view
|
||||
dnssec-secure-to-insecure <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
dnssec-update-mode ( maintain | no-resign );<br>
|
||||
dnssec-validation ( yes | no | auto );<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver ) [ ( query |<br>
|
||||
response ) ]; ... };<br>
|
||||
dnstap { ( all | auth | client | forwarder | resolver | update ) [<br>
|
||||
( query | response ) ]; ... };<br>
|
||||
dual-stack-servers [ port <em class="replaceable"><code>integer</code></em> ] { ( <em class="replaceable"><code>quoted_string</code></em> [ port<br>
|
||||
<em class="replaceable"><code>integer</code></em> ] [ dscp <em class="replaceable"><code>integer</code></em> ] | <em class="replaceable"><code>ipv4_address</code></em> [ port<br>
|
||||
<em class="replaceable"><code>integer</code></em> ] [ dscp <em class="replaceable"><code>integer</code></em> ] | <em class="replaceable"><code>ipv6_address</code></em> [ port<br>
|
||||
@@ -883,10 +886,10 @@ view
|
||||
static-stub | stub );<br>
|
||||
update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
update-policy ( local | { ( deny | grant ) <em class="replaceable"><code>string</code></em> (<br>
|
||||
6to4-self | external | krb5-self | krb5-subdomain |<br>
|
||||
ms-self | ms-subdomain | name | self | selfsub |<br>
|
||||
selfwild | subdomain | tcp-self | wildcard | zonesub )<br>
|
||||
[ <em class="replaceable"><code>string</code></em> ] <em class="replaceable"><code>rrtypelist</code></em>; ... };<br>
|
||||
6to4-self | external | krb5-self | krb5-selfsub |<br>
|
||||
krb5-subdomain | ms-self | ms-selfsub | ms-subdomain |<br>
|
||||
name | self | selfsub | selfwild | subdomain | tcp-self<br>
|
||||
| wildcard | zonesub ) [ <em class="replaceable"><code>string</code></em> ] <em class="replaceable"><code>rrtypelist</code></em>; ... };<br>
|
||||
use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zone-statistics ( full | terse | none | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
@@ -986,9 +989,10 @@ zone
|
||||
stub );<br>
|
||||
update-check-ksk <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
update-policy ( local | { ( deny | grant ) <em class="replaceable"><code>string</code></em> ( 6to4-self |<br>
|
||||
external | krb5-self | krb5-subdomain | ms-self | ms-subdomain<br>
|
||||
| name | self | selfsub | selfwild | subdomain | tcp-self |<br>
|
||||
wildcard | zonesub ) [ <em class="replaceable"><code>string</code></em> ] <em class="replaceable"><code>rrtypelist</code></em>; ... };<br>
|
||||
external | krb5-self | krb5-selfsub | krb5-subdomain | ms-self<br>
|
||||
| ms-selfsub | ms-subdomain | name | self | selfsub | selfwild<br>
|
||||
| subdomain | tcp-self | wildcard | zonesub ) [ <em class="replaceable"><code>string</code></em> ]<br>
|
||||
<em class="replaceable"><code>rrtypelist</code></em>; ... };<br>
|
||||
use-alt-transfer-source <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zero-no-soa-ttl <em class="replaceable"><code>boolean</code></em>;<br>
|
||||
zone-statistics ( full | terse | none | <em class="replaceable"><code>boolean</code></em> );<br>
|
||||
|
||||
+238
-129
@@ -102,6 +102,7 @@
|
||||
#include <dst/result.h>
|
||||
|
||||
#include <ns/client.h>
|
||||
#include <ns/hooks.h>
|
||||
#include <ns/listenlist.h>
|
||||
#include <ns/interfacemgr.h>
|
||||
|
||||
@@ -305,6 +306,13 @@ typedef struct catz_chgzone_event {
|
||||
bool mod;
|
||||
} catz_chgzone_event_t;
|
||||
|
||||
typedef struct {
|
||||
unsigned int magic;
|
||||
#define DZARG_MAGIC ISC_MAGIC('D', 'z', 'a', 'r')
|
||||
isc_buffer_t **text;
|
||||
isc_result_t result;
|
||||
} ns_dzarg_t;
|
||||
|
||||
/*
|
||||
* These zones should not leak onto the Internet.
|
||||
*/
|
||||
@@ -1145,6 +1153,7 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
sa = *(cfg_obj_assockaddr(obj));
|
||||
@@ -1166,6 +1175,7 @@ get_view_querysource_dispatch(const cfg_obj_t **maps, int af,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_R_SUCCESS);
|
||||
@@ -1273,20 +1283,22 @@ configure_order(dns_order_t *order, const cfg_obj_t *ent) {
|
||||
obj = cfg_tuple_get(ent, "ordering");
|
||||
INSIST(cfg_obj_isstring(obj));
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (!strcasecmp(str, "fixed"))
|
||||
if (!strcasecmp(str, "fixed")) {
|
||||
#if DNS_RDATASET_FIXED
|
||||
mode = DNS_RDATASETATTR_FIXEDORDER;
|
||||
#else
|
||||
mode = DNS_RDATASETATTR_CYCLIC;
|
||||
#endif /* DNS_RDATASET_FIXED */
|
||||
else if (!strcasecmp(str, "random"))
|
||||
} else if (!strcasecmp(str, "random")) {
|
||||
mode = DNS_RDATASETATTR_RANDOMIZE;
|
||||
else if (!strcasecmp(str, "cyclic"))
|
||||
} else if (!strcasecmp(str, "cyclic")) {
|
||||
mode = DNS_RDATASETATTR_CYCLIC;
|
||||
else if (!strcasecmp(str, "none"))
|
||||
} else if (!strcasecmp(str, "none")) {
|
||||
mode = DNS_RDATASETATTR_NONE;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/*
|
||||
* "*" should match everything including the root (BIND 8 compat).
|
||||
@@ -1418,14 +1430,16 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) {
|
||||
(void)cfg_map_get(cpeer, "transfer-format", &obj);
|
||||
if (obj != NULL) {
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(str, "many-answers") == 0)
|
||||
if (strcasecmp(str, "many-answers") == 0) {
|
||||
CHECK(dns_peer_settransferformat(peer,
|
||||
dns_many_answers));
|
||||
else if (strcasecmp(str, "one-answer") == 0)
|
||||
} else if (strcasecmp(str, "one-answer") == 0) {
|
||||
CHECK(dns_peer_settransferformat(peer,
|
||||
dns_one_answer));
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -2538,7 +2552,15 @@ catz_addmodzone_taskaction(isc_task_t *task, isc_event_t *event0) {
|
||||
}
|
||||
|
||||
} else {
|
||||
if (result != ISC_R_NOTFOUND && result != DNS_R_PARTIALMATCH) {
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_INFO,
|
||||
"catz: zone \"%s\" is overridden "
|
||||
"by explicitly configured zone",
|
||||
nameb);
|
||||
goto cleanup;
|
||||
} else if (result != ISC_R_NOTFOUND &&
|
||||
result != DNS_R_PARTIALMATCH) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_WARNING,
|
||||
"catz: error \"%s\" while trying to "
|
||||
@@ -2718,7 +2740,7 @@ catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin,
|
||||
catz_chgzone_event_t *event;
|
||||
isc_task_t *task;
|
||||
isc_result_t result;
|
||||
isc_taskaction_t action;
|
||||
isc_taskaction_t action = NULL;
|
||||
|
||||
switch (type) {
|
||||
case DNS_EVENT_CATZADDZONE:
|
||||
@@ -3625,6 +3647,35 @@ create_mapped_acl(void) {
|
||||
return (result);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DLOPEN
|
||||
/*%
|
||||
* A callback for the cfg_pluginlist_foreach() call in configure_view() below.
|
||||
* If registering any plugin fails, registering subsequent ones is not
|
||||
* attempted.
|
||||
*/
|
||||
static isc_result_t
|
||||
register_one_plugin(const cfg_obj_t *config, const cfg_obj_t *obj,
|
||||
const char *plugin_path, const char *parameters,
|
||||
void *callback_data)
|
||||
{
|
||||
dns_view_t *view = callback_data;
|
||||
isc_result_t result;
|
||||
|
||||
result = ns_plugin_register(plugin_path, parameters, config,
|
||||
cfg_obj_file(obj), cfg_obj_line(obj),
|
||||
named_g_mctx, named_g_lctx,
|
||||
named_g_aclconfctx, view);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER, ISC_LOG_ERROR,
|
||||
"%s: plugin configuration failed: %s",
|
||||
plugin_path, isc_result_totext(result));
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Configure 'view' according to 'vconfig', taking defaults from 'config'
|
||||
* where values are missing in 'vconfig'.
|
||||
@@ -3653,7 +3704,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
const cfg_obj_t *dlvobj = NULL;
|
||||
unsigned int dlzargc;
|
||||
char **dlzargv;
|
||||
const cfg_obj_t *dyndb_list;
|
||||
const cfg_obj_t *dyndb_list, *plugin_list;
|
||||
const cfg_obj_t *disabled;
|
||||
const cfg_obj_t *obj, *obj2;
|
||||
const cfg_listelt_t *element;
|
||||
@@ -3943,8 +3994,10 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->checknames = false;
|
||||
} else if (strcasecmp(str, "ignore") == 0) {
|
||||
view->checknames = false;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "zero-no-soa-ttl-cache", &obj);
|
||||
@@ -4109,8 +4162,16 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
result = named_config_get(maps, "max-ncache-ttl", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->maxncachettl = cfg_obj_asuint32(obj);
|
||||
if (view->maxncachettl > 7 * 24 * 3600)
|
||||
view->maxncachettl = 7 * 24 * 3600;
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "min-cache-ttl", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->mincachettl = cfg_obj_asuint32(obj);
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "min-ncache-ttl", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
view->minncachettl = cfg_obj_asuint32(obj);
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "synth-from-dnssec", &obj);
|
||||
@@ -4356,14 +4417,16 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
obj2 = cfg_tuple_get(obj, "response");
|
||||
if (!cfg_obj_isvoid(obj2)) {
|
||||
const char *resp = cfg_obj_asstring(obj2);
|
||||
isc_result_t r;
|
||||
isc_result_t r = DNS_R_SERVFAIL;
|
||||
|
||||
if (strcasecmp(resp, "drop") == 0)
|
||||
if (strcasecmp(resp, "drop") == 0) {
|
||||
r = DNS_R_DROP;
|
||||
else if (strcasecmp(resp, "fail") == 0)
|
||||
} else if (strcasecmp(resp, "fail") == 0) {
|
||||
r = DNS_R_SERVFAIL;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
dns_resolver_setquotaresponse(view->resolver,
|
||||
dns_quotatype_server, r);
|
||||
@@ -4709,20 +4772,24 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
view->minimalresponses = dns_minimal_noauth;
|
||||
} else if (strcasecmp(str, "no-auth-recursive") == 0) {
|
||||
view->minimalresponses = dns_minimal_noauthrec;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "transfer-format", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
str = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(str, "many-answers") == 0)
|
||||
if (strcasecmp(str, "many-answers") == 0) {
|
||||
view->transfer_format = dns_many_answers;
|
||||
else if (strcasecmp(str, "one-answer") == 0)
|
||||
} else if (strcasecmp(str, "one-answer") == 0) {
|
||||
view->transfer_format = dns_one_answer;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "trust-anchor-telemetry", &obj);
|
||||
@@ -5036,55 +5103,21 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
obj2 = cfg_tuple_get(obj, "response");
|
||||
if (!cfg_obj_isvoid(obj2)) {
|
||||
const char *resp = cfg_obj_asstring(obj2);
|
||||
isc_result_t r;
|
||||
isc_result_t r = DNS_R_SERVFAIL;
|
||||
|
||||
if (strcasecmp(resp, "drop") == 0)
|
||||
if (strcasecmp(resp, "drop") == 0) {
|
||||
r = DNS_R_DROP;
|
||||
else if (strcasecmp(resp, "fail") == 0)
|
||||
} else if (strcasecmp(resp, "fail") == 0) {
|
||||
r = DNS_R_SERVFAIL;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
dns_resolver_setquotaresponse(view->resolver,
|
||||
dns_quotatype_zone, r);
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "filter-aaaa-on-v4", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
if (cfg_obj_isboolean(obj)) {
|
||||
if (cfg_obj_asboolean(obj))
|
||||
view->v4_aaaa = dns_aaaa_filter;
|
||||
else
|
||||
view->v4_aaaa = dns_aaaa_ok;
|
||||
} else {
|
||||
const char *v4_aaaastr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(v4_aaaastr, "break-dnssec") == 0)
|
||||
view->v4_aaaa = dns_aaaa_break_dnssec;
|
||||
else
|
||||
INSIST(0);
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "filter-aaaa-on-v6", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
if (cfg_obj_isboolean(obj)) {
|
||||
if (cfg_obj_asboolean(obj))
|
||||
view->v6_aaaa = dns_aaaa_filter;
|
||||
else
|
||||
view->v6_aaaa = dns_aaaa_ok;
|
||||
} else {
|
||||
const char *v6_aaaastr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(v6_aaaastr, "break-dnssec") == 0)
|
||||
view->v6_aaaa = dns_aaaa_break_dnssec;
|
||||
else
|
||||
INSIST(0);
|
||||
}
|
||||
|
||||
CHECK(configure_view_acl(vconfig, config, named_g_config,
|
||||
"filter-aaaa", NULL, actx,
|
||||
named_g_mctx, &view->aaaa_acl));
|
||||
|
||||
obj = NULL;
|
||||
result = named_config_get(maps, "prefetch", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
@@ -5226,10 +5259,11 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
* Load DynDB modules.
|
||||
*/
|
||||
dyndb_list = NULL;
|
||||
if (voptions != NULL)
|
||||
if (voptions != NULL) {
|
||||
(void)cfg_map_get(voptions, "dyndb", &dyndb_list);
|
||||
else
|
||||
} else {
|
||||
(void)cfg_map_get(config, "dyndb", &dyndb_list);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DLOPEN
|
||||
for (element = cfg_list_first(dyndb_list);
|
||||
@@ -5251,6 +5285,31 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Load plugins.
|
||||
*/
|
||||
plugin_list = NULL;
|
||||
if (voptions != NULL) {
|
||||
(void)cfg_map_get(voptions, "plugin", &plugin_list);
|
||||
} else {
|
||||
(void)cfg_map_get(config, "plugin", &plugin_list);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DLOPEN
|
||||
if (plugin_list != NULL) {
|
||||
INSIST(view->hooktable == NULL);
|
||||
CHECK(ns_hooktable_create(view->mctx,
|
||||
(ns_hooktable_t **) &view->hooktable));
|
||||
view->hooktable_free = ns_hooktable_free;
|
||||
|
||||
ns_plugins_create(view->mctx, (ns_plugins_t **)&view->plugins);
|
||||
view->plugins_free = ns_plugins_free;
|
||||
|
||||
CHECK(cfg_pluginlist_foreach(config, plugin_list, named_g_lctx,
|
||||
register_one_plugin, view));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Setup automatic empty zones. If recursion is off then
|
||||
* they are disabled by default.
|
||||
@@ -5281,7 +5340,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
const char *empty_dbtype[4] =
|
||||
{ "_builtin", "empty", NULL, NULL };
|
||||
int empty_dbtypec = 4;
|
||||
dns_zonestat_level_t statlevel;
|
||||
dns_zonestat_level_t statlevel = dns_zonestat_none;
|
||||
|
||||
name = dns_fixedname_initname(&fixed);
|
||||
|
||||
@@ -5319,14 +5378,16 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
const char *levelstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(levelstr, "full") == 0)
|
||||
if (strcasecmp(levelstr, "full") == 0) {
|
||||
statlevel = dns_zonestat_full;
|
||||
else if (strcasecmp(levelstr, "terse") == 0)
|
||||
} else if (strcasecmp(levelstr, "terse") == 0) {
|
||||
statlevel = dns_zonestat_terse;
|
||||
else if (strcasecmp(levelstr, "none") == 0)
|
||||
} else if (strcasecmp(levelstr, "none") == 0) {
|
||||
statlevel = dns_zonestat_none;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
for (empty = empty_zones[empty_zone];
|
||||
@@ -5686,16 +5747,18 @@ configure_forward(const cfg_obj_t *config, dns_view_t *view,
|
||||
"forwarding");
|
||||
fwdpolicy = dns_fwdpolicy_none;
|
||||
} else {
|
||||
if (forwardtype == NULL)
|
||||
if (forwardtype == NULL) {
|
||||
fwdpolicy = dns_fwdpolicy_first;
|
||||
else {
|
||||
} else {
|
||||
const char *forwardstr = cfg_obj_asstring(forwardtype);
|
||||
if (strcasecmp(forwardstr, "first") == 0)
|
||||
if (strcasecmp(forwardstr, "first") == 0) {
|
||||
fwdpolicy = dns_fwdpolicy_first;
|
||||
else if (strcasecmp(forwardstr, "only") == 0)
|
||||
} else if (strcasecmp(forwardstr, "only") == 0) {
|
||||
fwdpolicy = dns_fwdpolicy_only;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6423,8 +6486,7 @@ add_listenelt(isc_mem_t *mctx, ns_listenlist_t *list, isc_sockaddr_t *addr,
|
||||
goto clean;
|
||||
|
||||
result = ns_listenelt_create(mctx, isc_sockaddr_getport(addr),
|
||||
dscp, src_acl, NULL, NULL,
|
||||
&lelt);
|
||||
dscp, src_acl, &lelt);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto clean;
|
||||
ISC_LIST_APPEND(list->elts, lelt, link);
|
||||
@@ -7578,11 +7640,11 @@ data_to_cfg(dns_view_t *view, MDB_val *key, MDB_val *data,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
putstr(text, "zone ");
|
||||
putmem(text, (const void *) zone_name, zone_name_len);
|
||||
putstr(text, " ");
|
||||
putmem(text, (const void *) zone_config, zone_config_len);
|
||||
putstr(text, ";\n");
|
||||
CHECK(putstr(text, "zone "));
|
||||
CHECK(putmem(text, (const void *) zone_name, zone_name_len));
|
||||
CHECK(putstr(text, " "));
|
||||
CHECK(putmem(text, (const void *) zone_config, zone_config_len));
|
||||
CHECK(putstr(text, ";\n"));
|
||||
|
||||
cfg_parser_reset(named_g_addparser);
|
||||
result = cfg_parse_buffer3(named_g_addparser, *text, zone_name, 0,
|
||||
@@ -8018,8 +8080,12 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
|
||||
/*
|
||||
* Check the validity of the configuration.
|
||||
*
|
||||
* (Ignore plugin parameters for now; they will be
|
||||
* checked later when the modules are actually loaded and
|
||||
* registered.)
|
||||
*/
|
||||
CHECK(bind9_check_namedconf(config, named_g_lctx, named_g_mctx));
|
||||
CHECK(bind9_check_namedconf(config, false, named_g_lctx, named_g_mctx));
|
||||
|
||||
/*
|
||||
* Fill in the maps array, used for resolving defaults.
|
||||
@@ -8907,7 +8973,7 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
named_g_memstatistics = cfg_obj_asboolean(obj);
|
||||
} else {
|
||||
named_g_memstatistics =
|
||||
(isc_mem_debugging & ISC_MEM_DEBUGRECORD);
|
||||
((isc_mem_debugging & ISC_MEM_DEBUGRECORD) != 0);
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -9002,6 +9068,7 @@ load_configuration(const char *filename, named_server_t *server,
|
||||
server->sctx->cookiealg = ns_cookiealg_sha256;
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -9312,7 +9379,11 @@ load_zones(named_server_t *server, bool init, bool reconfig) {
|
||||
* zones.
|
||||
*/
|
||||
isc_refcount_increment(&zl->refs);
|
||||
CHECK(dns_view_asyncload(view, reconfig, view_loaded, zl));
|
||||
result = dns_view_asyncload(view, reconfig, view_loaded, zl);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_refcount_decrement(&zl->refs);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
@@ -9459,6 +9530,9 @@ shutdown_server(isc_task_t *task, isc_event_t *event) {
|
||||
dns_view_detach(&view);
|
||||
}
|
||||
|
||||
/*
|
||||
* Shut down all dyndb instances.
|
||||
*/
|
||||
dns_dyndb_cleanup(true);
|
||||
|
||||
while ((nsc = ISC_LIST_HEAD(server->cachelist)) != NULL) {
|
||||
@@ -9576,8 +9650,8 @@ named_server_create(isc_mem_t *mctx, named_server_t **serverp) {
|
||||
&server->in_roothints),
|
||||
"setting up root hints");
|
||||
|
||||
CHECKFATAL(isc_mutex_init(&server->reload_event_lock),
|
||||
"initializing reload event lock");
|
||||
isc_mutex_init(&server->reload_event_lock);
|
||||
|
||||
server->reload_event =
|
||||
isc_event_allocate(named_g_mctx, server,
|
||||
NAMED_EVENT_RELOAD,
|
||||
@@ -9921,7 +9995,7 @@ static void
|
||||
named_server_reload(isc_task_t *task, isc_event_t *event) {
|
||||
named_server_t *server = (named_server_t *)event->ev_arg;
|
||||
|
||||
INSIST(task = server->task);
|
||||
INSIST(task == server->task);
|
||||
UNUSED(task);
|
||||
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
@@ -10411,24 +10485,12 @@ ns_listenelt_fromconfig(const cfg_obj_t *listener, const cfg_obj_t *config,
|
||||
uint16_t family, ns_listenelt_t **target)
|
||||
{
|
||||
isc_result_t result;
|
||||
const cfg_obj_t *portobj, *dscpobj, *keyobj, *certobj;
|
||||
const char *cert = NULL, *key=NULL;
|
||||
const cfg_obj_t *portobj, *dscpobj;
|
||||
in_port_t port;
|
||||
isc_dscp_t dscp = -1;
|
||||
ns_listenelt_t *delt = NULL;
|
||||
REQUIRE(target != NULL && *target == NULL);
|
||||
|
||||
keyobj = cfg_tuple_get(listener, "key");
|
||||
if (cfg_obj_isstring(keyobj)) {
|
||||
key = cfg_obj_asstring(keyobj);
|
||||
}
|
||||
|
||||
certobj = cfg_tuple_get(listener, "cert");
|
||||
if (cfg_obj_isstring(certobj)) {
|
||||
cert = cfg_obj_asstring(certobj);
|
||||
}
|
||||
|
||||
|
||||
portobj = cfg_tuple_get(listener, "port");
|
||||
if (!cfg_obj_isuint32(portobj)) {
|
||||
if (named_g_port != 0) {
|
||||
@@ -10461,8 +10523,7 @@ ns_listenelt_fromconfig(const cfg_obj_t *listener, const cfg_obj_t *config,
|
||||
dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
|
||||
}
|
||||
|
||||
printf("Cert %s key %s port %d\n", cert, key, port);
|
||||
result = ns_listenelt_create(mctx, port, dscp, NULL, cert, key, &delt);
|
||||
result = ns_listenelt_create(mctx, port, dscp, NULL, &delt);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (result);
|
||||
|
||||
@@ -10804,10 +10865,10 @@ named_server_dumpdb(named_server_t *server, isc_lex_t *lex,
|
||||
}
|
||||
if (ptr != NULL) {
|
||||
if (!found) {
|
||||
putstr(text, "view '");
|
||||
putstr(text, ptr);
|
||||
putstr(text, "' not found");
|
||||
putnull(text);
|
||||
CHECK(putstr(text, "view '"));
|
||||
CHECK(putstr(text, ptr));
|
||||
CHECK(putstr(text, "' not found"));
|
||||
CHECK(putnull(text));
|
||||
result = ISC_R_NOTFOUND;
|
||||
dumpdone(dctx, result);
|
||||
return (result);
|
||||
@@ -12095,9 +12156,15 @@ nzd_setkey(MDB_val *key, dns_name_t *name, char *namebuf, size_t buflen) {
|
||||
|
||||
static void
|
||||
dumpzone(void *arg, const char *buf, int len) {
|
||||
isc_buffer_t **text = arg;
|
||||
ns_dzarg_t *dzarg = arg;
|
||||
isc_result_t result;
|
||||
|
||||
putmem(text, buf, len);
|
||||
REQUIRE(dzarg != NULL && ISC_MAGIC_VALID(dzarg, DZARG_MAGIC));
|
||||
|
||||
result = putmem(dzarg->text, buf, len);
|
||||
if (result != ISC_R_SUCCESS && dzarg->result == ISC_R_SUCCESS) {
|
||||
dzarg->result = result;
|
||||
}
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
@@ -12111,6 +12178,7 @@ nzd_save(MDB_txn **txnp, MDB_dbi dbi, dns_zone_t *zone,
|
||||
isc_buffer_t *text = NULL;
|
||||
char namebuf[1024];
|
||||
MDB_val key, data;
|
||||
ns_dzarg_t dzarg;
|
||||
|
||||
view = dns_zone_getview(zone);
|
||||
|
||||
@@ -12162,7 +12230,21 @@ nzd_save(MDB_txn **txnp, MDB_dbi dbi, dns_zone_t *zone,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &text);
|
||||
dzarg.magic = DZARG_MAGIC;
|
||||
dzarg.text = &text;
|
||||
dzarg.result = ISC_R_SUCCESS;
|
||||
cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &dzarg);
|
||||
if (dzarg.result != ISC_R_SUCCESS) {
|
||||
isc_log_write(named_g_lctx,
|
||||
NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER,
|
||||
ISC_LOG_ERROR,
|
||||
"Error writing zone config to "
|
||||
"buffer in nzd_save(): %s",
|
||||
isc_result_totext(result));
|
||||
result = dzarg.result;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
data.mv_data = isc_buffer_base(text);
|
||||
data.mv_size = isc_buffer_usedlength(text);
|
||||
@@ -12441,6 +12523,7 @@ migrate_nzf(dns_view_t *view) {
|
||||
MDB_txn *txn = NULL;
|
||||
MDB_dbi dbi;
|
||||
MDB_val key, data;
|
||||
ns_dzarg_t dzarg;
|
||||
|
||||
/*
|
||||
* If NZF file doesn't exist, or NZD DB exists and already
|
||||
@@ -12530,7 +12613,21 @@ migrate_nzf(dns_view_t *view) {
|
||||
}
|
||||
|
||||
isc_buffer_clear(text);
|
||||
cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &text);
|
||||
dzarg.magic = DZARG_MAGIC;
|
||||
dzarg.text = &text;
|
||||
dzarg.result = ISC_R_SUCCESS;
|
||||
cfg_printx(zoptions, CFG_PRINTER_ONELINE, dumpzone, &dzarg);
|
||||
if (dzarg.result != ISC_R_SUCCESS) {
|
||||
isc_log_write(named_g_lctx,
|
||||
NAMED_LOGCATEGORY_GENERAL,
|
||||
NAMED_LOGMODULE_SERVER,
|
||||
ISC_LOG_ERROR,
|
||||
"Error writing zone config to "
|
||||
"buffer in migrate_nzf(): %s",
|
||||
isc_result_totext(result));
|
||||
result = dzarg.result;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
data.mv_data = isc_buffer_base(text);
|
||||
data.mv_size = isc_buffer_usedlength(text);
|
||||
@@ -12600,7 +12697,7 @@ newzone_parse(named_server_t *server, char *command, dns_view_t **viewp,
|
||||
const char *viewname = NULL;
|
||||
dns_rdataclass_t rdclass;
|
||||
dns_view_t *view = NULL;
|
||||
const char *bn;
|
||||
const char *bn = NULL;
|
||||
|
||||
REQUIRE(viewp != NULL && *viewp == NULL);
|
||||
REQUIRE(zoneobjp != NULL && *zoneobjp == NULL);
|
||||
@@ -12611,12 +12708,14 @@ newzone_parse(named_server_t *server, char *command, dns_view_t **viewp,
|
||||
isc_buffer_init(&argbuf, command, (unsigned int) strlen(command));
|
||||
isc_buffer_add(&argbuf, strlen(command));
|
||||
|
||||
if (strncasecmp(command, "add", 3) == 0)
|
||||
if (strncasecmp(command, "add", 3) == 0) {
|
||||
bn = "addzone";
|
||||
else if (strncasecmp(command, "mod", 3) == 0)
|
||||
} else if (strncasecmp(command, "mod", 3) == 0) {
|
||||
bn = "modzone";
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the "addzone" or "modzone" to just "zone", for
|
||||
@@ -13632,8 +13731,14 @@ find_name_in_list_from_map(const cfg_obj_t *config,
|
||||
|
||||
static void
|
||||
emitzone(void *arg, const char *buf, int len) {
|
||||
isc_buffer_t **tpp = arg;
|
||||
putmem(tpp, buf, len);
|
||||
ns_dzarg_t *dzarg = arg;
|
||||
isc_result_t result;
|
||||
|
||||
REQUIRE(dzarg != NULL && ISC_MAGIC_VALID(dzarg, DZARG_MAGIC));
|
||||
result = putmem(dzarg->text, buf, len);
|
||||
if (result != ISC_R_SUCCESS && dzarg->result == ISC_R_SUCCESS) {
|
||||
dzarg->result = result;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -13655,6 +13760,7 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex,
|
||||
cfg_obj_t *nzconfig = NULL;
|
||||
#endif /* HAVE_LMDB */
|
||||
bool added, redirect;
|
||||
ns_dzarg_t dzarg;
|
||||
|
||||
/* Parse parameters */
|
||||
CHECK(zone_from_args(server, lex, NULL, &zone, zonename,
|
||||
@@ -13714,9 +13820,14 @@ named_server_showzone(named_server_t *server, isc_lex_t *lex,
|
||||
if (zconfig == NULL)
|
||||
CHECK(ISC_R_NOTFOUND);
|
||||
|
||||
putstr(text, "zone ");
|
||||
cfg_printx(zconfig, CFG_PRINTER_ONELINE, emitzone, text);
|
||||
putstr(text, ";");
|
||||
CHECK(putstr(text, "zone "));
|
||||
dzarg.magic = DZARG_MAGIC;
|
||||
dzarg.text = text;
|
||||
dzarg.result = ISC_R_SUCCESS;
|
||||
cfg_printx(zconfig, CFG_PRINTER_ONELINE, emitzone, &dzarg);
|
||||
CHECK(dzarg.result);
|
||||
|
||||
CHECK(putstr(text, ";"));
|
||||
|
||||
result = ISC_R_SUCCESS;
|
||||
|
||||
@@ -14110,8 +14221,8 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
|
||||
|
||||
/* Security */
|
||||
secure = dns_db_issecure(db);
|
||||
allow = (dns_zone_getkeyopts(zone) & DNS_ZONEKEY_ALLOW);
|
||||
maintain = (dns_zone_getkeyopts(zone) & DNS_ZONEKEY_MAINTAIN);
|
||||
allow = ((dns_zone_getkeyopts(zone) & DNS_ZONEKEY_ALLOW) != 0);
|
||||
maintain = ((dns_zone_getkeyopts(zone) & DNS_ZONEKEY_MAINTAIN) != 0);
|
||||
|
||||
/* Master files */
|
||||
file = dns_zone_getfile(mayberaw);
|
||||
@@ -14352,7 +14463,6 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
bool opts = true;
|
||||
|
||||
/* Check for options */
|
||||
ptr = next_token(lex, text);
|
||||
@@ -14360,16 +14470,14 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
}
|
||||
|
||||
if (!opts) {
|
||||
nametext = ptr;
|
||||
} else if (strcmp(ptr, "--") == 0) {
|
||||
opts = false;
|
||||
if (strcmp(ptr, "--") == 0) {
|
||||
break;
|
||||
} else if (argcheck(ptr, "dump")) {
|
||||
dump = true;
|
||||
} else if (argcheck(ptr, "remove")) {
|
||||
ntattl = 0;
|
||||
ttlset = true;
|
||||
} else if (opts && argcheck(ptr, "force")) {
|
||||
} else if (argcheck(ptr, "force")) {
|
||||
force = true;
|
||||
continue;
|
||||
} else if (argcheck(ptr, "lifetime")) {
|
||||
@@ -14450,7 +14558,7 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
|
||||
CHECK(ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
/* Get the NTA name. */
|
||||
/* Get the NTA name if not found above. */
|
||||
if (nametext == NULL) {
|
||||
nametext = next_token(lex, text);
|
||||
}
|
||||
@@ -14812,7 +14920,7 @@ mkey_dumpzone(dns_view_t *view, isc_buffer_t **text) {
|
||||
snprintf(buf, sizeof(buf), "\n\talgorithm: %s", alg);
|
||||
CHECK(putstr(text, buf));
|
||||
|
||||
revoked = (kd.flags & DNS_KEYFLAG_REVOKE);
|
||||
revoked = ((kd.flags & DNS_KEYFLAG_REVOKE) != 0);
|
||||
snprintf(buf, sizeof(buf), "\n\tflags:%s%s%s",
|
||||
revoked ? " REVOKE" : "",
|
||||
((kd.flags & DNS_KEYFLAG_KSK) != 0)
|
||||
@@ -15002,6 +15110,7 @@ named_server_mkeys(named_server_t *server, isc_lex_t *lex,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
if (viewtxt != NULL) {
|
||||
|
||||
@@ -3226,7 +3226,7 @@ destroy_listener(void *arg) {
|
||||
/* We don't have to acquire the lock here since it's already unlinked */
|
||||
dns_acl_detach(&listener->acl);
|
||||
|
||||
DESTROYLOCK(&listener->lock);
|
||||
isc_mutex_destroy(&listener->lock);
|
||||
isc_mem_putanddetach(&listener->mctx, listener, sizeof(*listener));
|
||||
}
|
||||
|
||||
@@ -3253,11 +3253,7 @@ add_listener(named_server_t *server, named_statschannel_t **listenerp,
|
||||
listener->mctx = NULL;
|
||||
ISC_LINK_INIT(listener, link);
|
||||
|
||||
result = isc_mutex_init(&listener->lock);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
isc_mem_put(server->mctx, listener, sizeof(*listener));
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
isc_mutex_init(&listener->lock);
|
||||
|
||||
isc_mem_attach(server->mctx, &listener->mctx);
|
||||
|
||||
@@ -3352,7 +3348,7 @@ cleanup:
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
if (listener->acl != NULL)
|
||||
dns_acl_detach(&listener->acl);
|
||||
DESTROYLOCK(&listener->lock);
|
||||
isc_mutex_destroy(&listener->lock);
|
||||
isc_mem_putanddetach(&listener->mctx, listener,
|
||||
sizeof(*listener));
|
||||
}
|
||||
|
||||
@@ -252,9 +252,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
}
|
||||
|
||||
/* Initialize the lock */
|
||||
result = isc_mutex_init(&cd->lock);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto failed;
|
||||
isc_mutex_init(&cd->lock);
|
||||
|
||||
/* Open the library */
|
||||
dlopen_flags = RTLD_NOW|RTLD_GLOBAL;
|
||||
@@ -364,15 +362,19 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
|
||||
failed:
|
||||
dlopen_log(ISC_LOG_ERROR, "dlz_dlopen of '%s' failed", dlzname);
|
||||
if (cd->dl_path != NULL)
|
||||
if (cd->dl_path != NULL) {
|
||||
isc_mem_free(mctx, cd->dl_path);
|
||||
if (cd->dlzname != NULL)
|
||||
}
|
||||
if (cd->dlzname != NULL) {
|
||||
isc_mem_free(mctx, cd->dlzname);
|
||||
if (dlopen_flags != 0)
|
||||
(void) isc_mutex_destroy(&cd->lock);
|
||||
}
|
||||
if (dlopen_flags != 0) {
|
||||
isc_mutex_destroy(&cd->lock);
|
||||
}
|
||||
#ifdef HAVE_DLCLOSE
|
||||
if (cd->dl_handle)
|
||||
if (cd->dl_handle) {
|
||||
dlclose(cd->dl_handle);
|
||||
}
|
||||
#endif
|
||||
isc_mem_put(mctx, cd, sizeof(*cd));
|
||||
isc_mem_destroy(&mctx);
|
||||
@@ -395,17 +397,20 @@ dlopen_dlz_destroy(void *driverarg, void *dbdata) {
|
||||
MAYBE_UNLOCK(cd);
|
||||
}
|
||||
|
||||
if (cd->dl_path)
|
||||
if (cd->dl_path) {
|
||||
isc_mem_free(cd->mctx, cd->dl_path);
|
||||
if (cd->dlzname)
|
||||
}
|
||||
if (cd->dlzname) {
|
||||
isc_mem_free(cd->mctx, cd->dlzname);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DLCLOSE
|
||||
if (cd->dl_handle)
|
||||
if (cd->dl_handle) {
|
||||
dlclose(cd->dl_handle);
|
||||
}
|
||||
#endif
|
||||
|
||||
(void) isc_mutex_destroy(&cd->lock);
|
||||
isc_mutex_destroy(&cd->lock);
|
||||
|
||||
mctx = cd->mctx;
|
||||
isc_mem_put(mctx, cd, sizeof(*cd));
|
||||
|
||||
@@ -253,9 +253,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
triedload = true;
|
||||
|
||||
/* Initialize the lock */
|
||||
result = isc_mutex_init(&cd->lock);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
goto failed;
|
||||
isc_mutex_init(&cd->lock);
|
||||
|
||||
/* Open the library */
|
||||
cd->dl_handle = LoadLibraryA(cd->dl_path);
|
||||
@@ -349,17 +347,21 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
cleanup_lock:
|
||||
DESTROYLOCK(&cd->lock);
|
||||
isc_mutex_destroy(&cd->lock);
|
||||
failed:
|
||||
dlopen_log(ISC_LOG_ERROR, "dlz_dlopen of '%s' failed", dlzname);
|
||||
if (cd->dl_path)
|
||||
if (cd->dl_path) {
|
||||
isc_mem_free(mctx, cd->dl_path);
|
||||
if (cd->dlzname)
|
||||
}
|
||||
if (cd->dlzname) {
|
||||
isc_mem_free(mctx, cd->dlzname);
|
||||
if (triedload)
|
||||
(void) isc_mutex_destroy(&cd->lock);
|
||||
if (cd->dl_handle)
|
||||
}
|
||||
if (triedload) {
|
||||
isc_mutex_destroy(&cd->lock);
|
||||
}
|
||||
if (cd->dl_handle) {
|
||||
FreeLibrary(cd->dl_handle);
|
||||
}
|
||||
isc_mem_put(mctx, cd, sizeof(*cd));
|
||||
isc_mem_destroy(&mctx);
|
||||
return (result);
|
||||
@@ -390,7 +392,7 @@ dlopen_dlz_destroy(void *driverarg, void *dbdata) {
|
||||
if (cd->dl_handle)
|
||||
FreeLibrary(cd->dl_handle);
|
||||
|
||||
DESTROYLOCK(&cd->lock);
|
||||
isc_mutex_destroy(&cd->lock);
|
||||
|
||||
mctx = cd->mctx;
|
||||
isc_mem_put(mctx, cd, sizeof(*cd));
|
||||
|
||||
+66
-37
@@ -125,7 +125,7 @@ configure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
return (ISC_R_FAILURE);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
/* First check to see if ACL is defined within the zone */
|
||||
@@ -231,12 +231,14 @@ configure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
|
||||
unsigned int i, n;
|
||||
|
||||
str = cfg_obj_asstring(mode);
|
||||
if (strcasecmp(str, "grant") == 0)
|
||||
if (strcasecmp(str, "grant") == 0) {
|
||||
grant = true;
|
||||
else if (strcasecmp(str, "deny") == 0)
|
||||
} else if (strcasecmp(str, "deny") == 0) {
|
||||
grant = false;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
str = cfg_obj_asstring(matchtype);
|
||||
CHECK(dns_ssu_mtypefromstring(str, &mtype));
|
||||
@@ -764,6 +766,7 @@ checknames(dns_zonetype_t ztype, const cfg_obj_t **maps,
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
result = named_checknames_get(maps, zone, objp);
|
||||
INSIST(result == ISC_R_SUCCESS && objp != NULL && *objp != NULL);
|
||||
@@ -903,7 +906,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
const dns_master_style_t *masterstyle = &dns_master_style_default;
|
||||
isc_stats_t *zoneqrystats;
|
||||
dns_stats_t *rcvquerystats;
|
||||
dns_zonestat_level_t statlevel;
|
||||
dns_zonestat_level_t statlevel = dns_zonestat_none;
|
||||
int seconds;
|
||||
dns_zone_t *mayberaw = (raw != NULL) ? raw : zone;
|
||||
isc_dscp_t dscp;
|
||||
@@ -1027,14 +1030,16 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *masterformatstr = cfg_obj_asstring(obj);
|
||||
|
||||
if (strcasecmp(masterformatstr, "text") == 0)
|
||||
if (strcasecmp(masterformatstr, "text") == 0) {
|
||||
masterformat = dns_masterformat_text;
|
||||
else if (strcasecmp(masterformatstr, "raw") == 0)
|
||||
} else if (strcasecmp(masterformatstr, "raw") == 0) {
|
||||
masterformat = dns_masterformat_raw;
|
||||
else if (strcasecmp(masterformatstr, "map") == 0)
|
||||
} else if (strcasecmp(masterformatstr, "map") == 0) {
|
||||
masterformat = dns_masterformat_map;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -1050,12 +1055,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
return (ISC_R_FAILURE);
|
||||
}
|
||||
|
||||
if (strcasecmp(masterstylestr, "full") == 0)
|
||||
if (strcasecmp(masterstylestr, "full") == 0) {
|
||||
masterstyle = &dns_master_style_full;
|
||||
else if (strcasecmp(masterstylestr, "relative") == 0)
|
||||
} else if (strcasecmp(masterstylestr, "relative") == 0) {
|
||||
masterstyle = &dns_master_style_default;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
@@ -1141,16 +1148,18 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
dialup = dns_dialuptype_no;
|
||||
} else {
|
||||
const char *dialupstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(dialupstr, "notify") == 0)
|
||||
if (strcasecmp(dialupstr, "notify") == 0) {
|
||||
dialup = dns_dialuptype_notify;
|
||||
else if (strcasecmp(dialupstr, "notify-passive") == 0)
|
||||
} else if (strcasecmp(dialupstr, "notify-passive") == 0) {
|
||||
dialup = dns_dialuptype_notifypassive;
|
||||
else if (strcasecmp(dialupstr, "refresh") == 0)
|
||||
} else if (strcasecmp(dialupstr, "refresh") == 0) {
|
||||
dialup = dns_dialuptype_refresh;
|
||||
else if (strcasecmp(dialupstr, "passive") == 0)
|
||||
} else if (strcasecmp(dialupstr, "passive") == 0) {
|
||||
dialup = dns_dialuptype_passive;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
if (raw != NULL)
|
||||
dns_zone_setdialup(raw, dialup);
|
||||
@@ -1166,14 +1175,16 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
statlevel = dns_zonestat_none;
|
||||
} else {
|
||||
const char *levelstr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(levelstr, "full") == 0)
|
||||
if (strcasecmp(levelstr, "full") == 0) {
|
||||
statlevel = dns_zonestat_full;
|
||||
else if (strcasecmp(levelstr, "terse") == 0)
|
||||
} else if (strcasecmp(levelstr, "terse") == 0) {
|
||||
statlevel = dns_zonestat_terse;
|
||||
else if (strcasecmp(levelstr, "none") == 0)
|
||||
} else if (strcasecmp(levelstr, "none") == 0) {
|
||||
statlevel = dns_zonestat_none;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
dns_zone_setstatlevel(zone, statlevel);
|
||||
|
||||
@@ -1211,12 +1222,14 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
notifytype = dns_notifytype_no;
|
||||
} else {
|
||||
const char *notifystr = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(notifystr, "explicit") == 0)
|
||||
if (strcasecmp(notifystr, "explicit") == 0) {
|
||||
notifytype = dns_notifytype_explicit;
|
||||
else if (strcasecmp(notifystr, "master-only") == 0)
|
||||
} else if (strcasecmp(notifystr, "master-only") == 0) {
|
||||
notifytype = dns_notifytype_masteronly;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
notifytype = process_notifytype(notifytype, ztype, zname,
|
||||
nodefault);
|
||||
@@ -1374,8 +1387,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
if (raw != NULL) {
|
||||
dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMES,
|
||||
check);
|
||||
@@ -1410,8 +1425,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
check = false;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(zone, DNS_ZONEOPT_CHECKSPF, check);
|
||||
|
||||
obj = NULL;
|
||||
@@ -1562,14 +1579,16 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
result = cfg_map_get(zoptions, "auto-dnssec", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *arg = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(arg, "allow") == 0)
|
||||
if (strcasecmp(arg, "allow") == 0) {
|
||||
allow = true;
|
||||
else if (strcasecmp(arg, "maintain") == 0)
|
||||
} else if (strcasecmp(arg, "maintain") == 0) {
|
||||
allow = maint = true;
|
||||
else if (strcasecmp(arg, "off") == 0)
|
||||
} else if (strcasecmp(arg, "off") == 0) {
|
||||
;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
|
||||
}
|
||||
@@ -1622,8 +1641,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(dupcheck, "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRR, check);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
|
||||
|
||||
@@ -1637,8 +1658,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
fail = check = true;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
fail = check = false;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMX, check);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMXFAIL, fail);
|
||||
|
||||
@@ -1674,8 +1697,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
warn = ignore = false;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
warn = ignore = true;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNMXCNAME, warn);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
|
||||
|
||||
@@ -1689,8 +1714,10 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
warn = ignore = false;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
warn = ignore = true;
|
||||
} else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNSRVCNAME, warn);
|
||||
dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNORESRVCNAME,
|
||||
ignore);
|
||||
@@ -1706,13 +1733,15 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
||||
result = cfg_map_get(zoptions, "dnssec-update-mode", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
const char *arg = cfg_obj_asstring(obj);
|
||||
if (strcasecmp(arg, "no-resign") == 0)
|
||||
if (strcasecmp(arg, "no-resign") == 0) {
|
||||
dns_zone_setkeyopt(zone, DNS_ZONEKEY_NORESIGN,
|
||||
true);
|
||||
else if (strcasecmp(arg, "maintain") == 0)
|
||||
} else if (strcasecmp(arg, "maintain") == 0) {
|
||||
;
|
||||
else
|
||||
} else {
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
|
||||
+12
-2
@@ -144,8 +144,8 @@ static dns_fixedname_t fuserzone;
|
||||
static dns_fixedname_t fzname;
|
||||
static dns_name_t *userzone = NULL;
|
||||
static dns_name_t *zname = NULL;
|
||||
static dns_name_t tmpzonename;
|
||||
static dns_name_t restart_master;
|
||||
static dns_name_t tmpzonename = DNS_NAME_INITEMPTY;
|
||||
static dns_name_t restart_master = DNS_NAME_INITEMPTY;
|
||||
static dns_tsig_keyring_t *gssring = NULL;
|
||||
static dns_tsigkey_t *tsigkey = NULL;
|
||||
static dst_key_t *sig0key = NULL;
|
||||
@@ -2354,6 +2354,8 @@ update_completed(isc_task_t *task, isc_event_t *event) {
|
||||
if (usegsstsig) {
|
||||
dns_name_free(&tmpzonename, gmctx);
|
||||
dns_name_free(&restart_master, gmctx);
|
||||
dns_name_init(&tmpzonename, 0);
|
||||
dns_name_init(&restart_master, 0);
|
||||
}
|
||||
isc_event_free(&event);
|
||||
done_update();
|
||||
@@ -2769,6 +2771,8 @@ failed_gssrequest() {
|
||||
|
||||
dns_name_free(&tmpzonename, gmctx);
|
||||
dns_name_free(&restart_master, gmctx);
|
||||
dns_name_init(&tmpzonename, NULL);
|
||||
dns_name_init(&restart_master, NULL);
|
||||
|
||||
done_update();
|
||||
}
|
||||
@@ -3178,6 +3182,12 @@ cleanup(void) {
|
||||
isc_mem_free(gmctx, realm);
|
||||
realm = NULL;
|
||||
}
|
||||
if (dns_name_dynamic(&tmpzonename)) {
|
||||
dns_name_free(&tmpzonename, gmctx);
|
||||
}
|
||||
if (dns_name_dynamic(&restart_master)) {
|
||||
dns_name_free(&restart_master, gmctx);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (sig0key != NULL)
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
# 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.
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
|
||||
@BIND9_MAKE_INCLUDES@
|
||||
|
||||
CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include -I. \
|
||||
${NS_INCLUDES} ${DNS_INCLUDES} \
|
||||
${ISCCFG_INCLUDES} ${ISC_INCLUDES}
|
||||
|
||||
DNSLIBS = ../../lib/dns/libdns.@A@ @DNS_CRYPTO_LIBS@
|
||||
ISCCFGLIBS = ../../lib/isccfg/libisccfg.@A@
|
||||
ISCLIBS = ../../lib/isc/libisc.@A@ @OPENSSL_LIBS@
|
||||
NSLIBS = ../../lib/ns/libns.@A@
|
||||
|
||||
LIBS =
|
||||
|
||||
SO_TARGETS = lib/filter-aaaa.@SO@
|
||||
TARGETS = @SO_TARGETS@
|
||||
|
||||
SO_OBJS = filter-aaaa.@O@
|
||||
SO_SRCS = filter-aaaa.c
|
||||
|
||||
CFLAGS = @CFLAGS@ @SO_CFLAGS@
|
||||
SO_LDFLAGS = @LDFLAGS@ @SO_LDFLAGS@
|
||||
|
||||
MANPAGES = filter-aaaa.8
|
||||
|
||||
HTMLPAGES = filter-aaaa.html
|
||||
|
||||
MANOBJS = ${MANPAGES} ${HTMLPAGES}
|
||||
|
||||
@BIND9_MAKE_RULES@
|
||||
|
||||
lib/filter-aaaa.@SO@: filter-aaaa.@SO@
|
||||
$(SHELL) ${top_srcdir}/mkinstalldirs `pwd`/lib
|
||||
${LIBTOOL_MODE_INSTALL} ${INSTALL} filter-aaaa.@SO@ `pwd`/lib
|
||||
|
||||
filter-aaaa.@SO@: filter-aaaa.@O@
|
||||
${LIBTOOL_MODE_LINK} @SO_LD@ ${SO_LDFLAGS} -o $@ \
|
||||
filter-aaaa.@O@ ${LIBS}
|
||||
|
||||
doc man:: ${MANOBJS}
|
||||
|
||||
docclean manclean maintainer-clean::
|
||||
rm -f ${MANOBJS}
|
||||
|
||||
clean distclean::
|
||||
rm -f filter-aaaa.so
|
||||
rm -f ${TARGETS} ${OBJS}
|
||||
|
||||
installdirs:
|
||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir}
|
||||
$(SHELL) ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man8
|
||||
|
||||
install:: filter-aaaa.@SO@ installdirs
|
||||
${LIBTOOL_MODE_INSTALL} ${INSTALL_LIBRARY} filter-aaaa.@SO@ \
|
||||
${DESTDIR}${libdir}
|
||||
${INSTALL_DATA} ${srcdir}/filter-aaaa.8 ${DESTDIR}${mandir}/man8
|
||||
|
||||
uninstall::
|
||||
${LIBTOOL_MODE_UNINSTALL} rm -f ${DESTDIR}${libdir}/filter-aaaa.@SO@
|
||||
rm -f ${DESTDIR}${mandir}/man8/filter-aaaa.8
|
||||
@@ -0,0 +1,116 @@
|
||||
.\" Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
|
||||
.\"
|
||||
.\" This Source Code Form is subject to the terms of the Mozilla Public
|
||||
.\" License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
.\" file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
.\"
|
||||
.hy 0
|
||||
.ad l
|
||||
'\" t
|
||||
.\" Title: filter-aaaa.so
|
||||
.\" Author:
|
||||
.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
|
||||
.\" Date: 2018-08-13
|
||||
.\" Manual: BIND9
|
||||
.\" Source: ISC
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "FILTER\-AAAA\&.SO" "8" "2018\-08\-13" "ISC" "BIND9"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
.\" http://bugs.debian.org/507673
|
||||
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
|
||||
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
.ie \n(.g .ds Aq \(aq
|
||||
.el .ds Aq '
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * set default formatting
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" disable hyphenation
|
||||
.nh
|
||||
.\" disable justification (adjust text to left margin only)
|
||||
.ad l
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * MAIN CONTENT STARTS HERE *
|
||||
.\" -----------------------------------------------------------------
|
||||
.SH "NAME"
|
||||
filter-aaaa.so \- filter AAAA in DNS responses when A is present
|
||||
.SH "SYNOPSIS"
|
||||
.HP \w'\fBplugin\ query\ "filter\-aaaa\&.so"\fR\ 'u
|
||||
\fBplugin query "filter\-aaaa\&.so"\fR [\fI{\ parameters\ }\fR];
|
||||
.SH "DESCRIPTION"
|
||||
.PP
|
||||
\fBfilter\-aaaa\&.so\fR
|
||||
is a query plugin module for
|
||||
\fBnamed\fR, enabling
|
||||
\fBnamed\fR
|
||||
to omit some IPv6 addresses when responding to clients\&.
|
||||
.PP
|
||||
Until BIND 9\&.12, this feature was implemented natively in
|
||||
\fBnamed\fR
|
||||
and enabled with the
|
||||
\fBfilter\-aaaa\fR
|
||||
ACL and the
|
||||
\fBfilter\-aaaa\-on\-v4\fR
|
||||
and
|
||||
\fBfilter\-aaaa\-on\-v6\fR
|
||||
options\&. These options are now deprecated in
|
||||
named\&.conf, but can be passed as parameters to the
|
||||
\fBfilter\-aaaa\&.so\fR
|
||||
plugin, for example:
|
||||
.sp
|
||||
.if n \{\
|
||||
.RS 4
|
||||
.\}
|
||||
.nf
|
||||
plugin query "/usr/local/lib/filter\-aaaa\&.so" {
|
||||
filter\-aaaa\-on\-v4 yes;
|
||||
filter\-aaaa\-on\-v6 yes;
|
||||
filter\-aaaa { 192\&.0\&.2\&.1; 2001:db8:2::1; };
|
||||
};
|
||||
.fi
|
||||
.if n \{\
|
||||
.RE
|
||||
.\}
|
||||
.PP
|
||||
This module is intended to aid transition from IPv4 to IPv6 by withholding IPv6 addresses from DNS clients which are not connected to the IPv6 Internet, when the name being looked up has an IPv4 address available\&. Use of this module is not recommended unless absolutely necessary\&.
|
||||
.PP
|
||||
Note: This mechanism can erroneously cause other servers not to give AAAA records to their clients\&. If a recursing server with both IPv6 and IPv4 network connections queries an authoritative server using this mechanism via IPv4, it will be denied AAAA records even if its client is using IPv6\&.
|
||||
.SH "OPTIONS"
|
||||
.PP
|
||||
\fBfilter\-aaaa\fR
|
||||
.RS 4
|
||||
Specifies a list of client addresses for which AAAA filtering is to be applied\&. The default is
|
||||
\fBany\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBfilter\-aaaa\-on\-v4\fR
|
||||
.RS 4
|
||||
If set to
|
||||
\fByes\fR, the DNS client is at an IPv4 address, in
|
||||
\fBfilter\-aaaa\fR, and if the response does not include DNSSEC signatures, then all AAAA records are deleted from the response\&. This filtering applies to all responses and not only authoritative responses\&.
|
||||
.sp
|
||||
If set to
|
||||
\fBbreak\-dnssec\fR, then AAAA records are deleted even when DNSSEC is enabled\&. As suggested by the name, this causes the response to fail to verify, because the DNSSEC protocol is designed to detect deletions\&.
|
||||
.sp
|
||||
This mechanism can erroneously cause other servers not to give AAAA records to their clients\&. A recursing server with both IPv6 and IPv4 network connections that queries an authoritative server using this mechanism via IPv4 will be denied AAAA records even if its client is using IPv6\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBfilter\-aaaa\-on\-v6\fR
|
||||
.RS 4
|
||||
Identical to
|
||||
\fBfilter\-aaaa\-on\-v4\fR, except it filters AAAA responses to queries from IPv6 clients instead of IPv4 clients\&. To filter all responses, set both options to
|
||||
\fByes\fR\&.
|
||||
.RE
|
||||
.SH "SEE ALSO"
|
||||
.PP
|
||||
BIND 9 Administrator Reference Manual\&.
|
||||
.SH "AUTHOR"
|
||||
.PP
|
||||
\fBInternet Systems Consortium, Inc\&.\fR
|
||||
.SH "COPYRIGHT"
|
||||
.br
|
||||
Copyright \(co 2018 Internet Systems Consortium, Inc. ("ISC")
|
||||
.br
|
||||
@@ -0,0 +1,925 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
/*! \file */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <isc/buffer.h>
|
||||
#include <isc/hash.h>
|
||||
#include <isc/ht.h>
|
||||
#include <isc/lib.h>
|
||||
#include <isc/log.h>
|
||||
#include <isc/mem.h>
|
||||
#include <isc/netaddr.h>
|
||||
#include <isc/result.h>
|
||||
#include <isc/types.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <isccfg/aclconf.h>
|
||||
#include <isccfg/cfg.h>
|
||||
#include <isccfg/grammar.h>
|
||||
|
||||
#include <ns/client.h>
|
||||
#include <ns/hooks.h>
|
||||
#include <ns/log.h>
|
||||
#include <ns/query.h>
|
||||
#include <ns/types.h>
|
||||
|
||||
#include <dns/acl.h>
|
||||
#include <dns/db.h>
|
||||
#include <dns/enumtype.h>
|
||||
#include <dns/log.h>
|
||||
#include <dns/message.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/result.h>
|
||||
#include <dns/types.h>
|
||||
#include <dns/view.h>
|
||||
|
||||
#define CHECK(op) \
|
||||
do { \
|
||||
result = (op); \
|
||||
if (result != ISC_R_SUCCESS) { \
|
||||
goto cleanup; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Possible values for the settings of filter-aaaa-on-v4 and
|
||||
* filter-aaaa-on-v6: "no" is NONE, "yes" is FILTER, "break-dnssec"
|
||||
* is BREAK_DNSSEC.
|
||||
*/
|
||||
typedef enum {
|
||||
NONE = 0,
|
||||
FILTER = 1,
|
||||
BREAK_DNSSEC = 2
|
||||
} filter_aaaa_t;
|
||||
|
||||
/*
|
||||
* Persistent data for use by this module. This will be associated
|
||||
* with client object address in the hash table, and will remain
|
||||
* accessible until the client object is detached.
|
||||
*/
|
||||
typedef struct filter_data {
|
||||
filter_aaaa_t mode;
|
||||
uint32_t flags;
|
||||
} filter_data_t;
|
||||
|
||||
typedef struct filter_instance {
|
||||
ns_plugin_t *module;
|
||||
isc_mem_t *mctx;
|
||||
|
||||
/*
|
||||
* Memory pool for use with persistent data.
|
||||
*/
|
||||
isc_mempool_t *datapool;
|
||||
|
||||
/*
|
||||
* Hash table associating a client object with its persistent data.
|
||||
*/
|
||||
isc_ht_t *ht;
|
||||
|
||||
/*
|
||||
* Values configured when the module is loaded.
|
||||
*/
|
||||
filter_aaaa_t v4_aaaa;
|
||||
filter_aaaa_t v6_aaaa;
|
||||
dns_acl_t *aaaa_acl;
|
||||
} filter_instance_t;
|
||||
|
||||
/*
|
||||
* Per-client flags set by this module
|
||||
*/
|
||||
#define FILTER_AAAA_RECURSING 0x0001 /* Recursing for A */
|
||||
#define FILTER_AAAA_FILTERED 0x0002 /* AAAA was removed from answer */
|
||||
|
||||
/*
|
||||
* Client attribute tests.
|
||||
*/
|
||||
#define WANTDNSSEC(c) (((c)->attributes & NS_CLIENTATTR_WANTDNSSEC) != 0)
|
||||
#define RECURSIONOK(c) (((c)->query.attributes & \
|
||||
NS_QUERYATTR_RECURSIONOK) != 0)
|
||||
|
||||
/*
|
||||
* Forward declarations of functions referenced in install_hooks().
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_qctx_initialize(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_prep_response_begin(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp);
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp);
|
||||
|
||||
/*%
|
||||
* Register the functions to be called at each hook point in 'hooktable', using
|
||||
* memory context 'mctx' for allocating copies of stack-allocated structures
|
||||
* passed to ns_hook_add(). Make sure 'inst' will be passed as the 'cbdata'
|
||||
* argument to every callback.
|
||||
*/
|
||||
static void
|
||||
install_hooks(ns_hooktable_t *hooktable, isc_mem_t *mctx,
|
||||
filter_instance_t *inst)
|
||||
{
|
||||
const ns_hook_t filter_init = {
|
||||
.action = filter_qctx_initialize,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_respbegin = {
|
||||
.action = filter_respond_begin,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_respanyfound = {
|
||||
.action = filter_respond_any_found,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_prepresp = {
|
||||
.action = filter_prep_response_begin,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_donesend = {
|
||||
.action = filter_query_done_send,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
const ns_hook_t filter_destroy = {
|
||||
.action = filter_qctx_destroy,
|
||||
.action_data = inst,
|
||||
};
|
||||
|
||||
ns_hook_add(hooktable, mctx, -
|
||||
NS_QUERY_QCTX_INITIALIZED, &filter_init);
|
||||
ns_hook_add(hooktable, mctx,
|
||||
NS_QUERY_RESPOND_BEGIN, &filter_respbegin);
|
||||
ns_hook_add(hooktable, mctx,
|
||||
NS_QUERY_RESPOND_ANY_FOUND, &filter_respanyfound);
|
||||
ns_hook_add(hooktable, mctx,
|
||||
NS_QUERY_PREP_RESPONSE_BEGIN, &filter_prepresp);
|
||||
ns_hook_add(hooktable, mctx,
|
||||
NS_QUERY_DONE_SEND, &filter_donesend);
|
||||
ns_hook_add(hooktable, mctx,
|
||||
NS_QUERY_QCTX_DESTROYED, &filter_destroy);
|
||||
}
|
||||
|
||||
/**
|
||||
** Support for parsing of parameters and configuration of the module.
|
||||
**/
|
||||
|
||||
/*
|
||||
* Support for parsing of parameters.
|
||||
*/
|
||||
static const char *filter_aaaa_enums[] = { "break-dnssec", NULL };
|
||||
|
||||
static isc_result_t
|
||||
parse_filter_aaaa(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret) {
|
||||
return (cfg_parse_enum_or_other(pctx, type, &cfg_type_boolean, ret));
|
||||
}
|
||||
|
||||
static void
|
||||
doc_filter_aaaa(cfg_printer_t *pctx, const cfg_type_t *type) {
|
||||
cfg_doc_enum_or_other(pctx, type, &cfg_type_boolean);
|
||||
}
|
||||
|
||||
static cfg_type_t cfg_type_filter_aaaa = {
|
||||
"filter_aaaa", parse_filter_aaaa, cfg_print_ustring,
|
||||
doc_filter_aaaa, &cfg_rep_string, filter_aaaa_enums,
|
||||
};
|
||||
|
||||
static cfg_clausedef_t param_clauses[] = {
|
||||
{ "filter-aaaa", &cfg_type_bracketed_aml, 0 },
|
||||
{ "filter-aaaa-on-v4", &cfg_type_filter_aaaa, 0 },
|
||||
{ "filter-aaaa-on-v6", &cfg_type_filter_aaaa, 0 },
|
||||
};
|
||||
|
||||
static cfg_clausedef_t *param_clausesets[] = {
|
||||
param_clauses,
|
||||
NULL
|
||||
};
|
||||
|
||||
static cfg_type_t cfg_type_parameters = {
|
||||
"filter-aaaa-params", cfg_parse_mapbody, cfg_print_mapbody,
|
||||
cfg_doc_mapbody, &cfg_rep_map, param_clausesets
|
||||
};
|
||||
|
||||
static isc_result_t
|
||||
parse_filter_aaaa_on(const cfg_obj_t *param_obj, const char *param_name,
|
||||
filter_aaaa_t *dstp)
|
||||
{
|
||||
const cfg_obj_t *obj = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
result = cfg_map_get(param_obj, param_name, &obj);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
if (cfg_obj_isboolean(obj)) {
|
||||
if (cfg_obj_asboolean(obj)) {
|
||||
*dstp = FILTER;
|
||||
} else {
|
||||
*dstp = NONE;
|
||||
}
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "break-dnssec") == 0) {
|
||||
*dstp = BREAK_DNSSEC;
|
||||
} else {
|
||||
result = ISC_R_UNEXPECTED;
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
check_syntax(cfg_obj_t *fmap, const void *cfg,
|
||||
isc_mem_t *mctx, isc_log_t *lctx, void *actx)
|
||||
{
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
const cfg_obj_t *aclobj = NULL;
|
||||
dns_acl_t *acl = NULL;
|
||||
filter_aaaa_t f4 = NONE, f6 = NONE;
|
||||
|
||||
cfg_map_get(fmap, "filter-aaaa", &aclobj);
|
||||
if (aclobj == NULL) {
|
||||
return (result);
|
||||
}
|
||||
|
||||
CHECK(cfg_acl_fromconfig(aclobj, (const cfg_obj_t *) cfg,
|
||||
lctx, (cfg_aclconfctx_t *) actx,
|
||||
mctx, 0, &acl));
|
||||
|
||||
CHECK(parse_filter_aaaa_on(fmap, "filter-aaaa-on-v4", &f4));
|
||||
CHECK(parse_filter_aaaa_on(fmap, "filter-aaaa-on-v6", &f6));
|
||||
|
||||
if ((f4 != NONE || f6 != NONE) && dns_acl_isnone(acl)) {
|
||||
cfg_obj_log(aclobj, lctx, ISC_LOG_WARNING,
|
||||
"\"filter-aaaa\" is 'none;' but "
|
||||
"either filter-aaaa-on-v4 or filter-aaaa-on-v6 "
|
||||
"is enabled");
|
||||
result = ISC_R_FAILURE;
|
||||
} else if (f4 == NONE && f6 == NONE && !dns_acl_isnone(acl)) {
|
||||
cfg_obj_log(aclobj, lctx, ISC_LOG_WARNING,
|
||||
"\"filter-aaaa\" is set but "
|
||||
"neither filter-aaaa-on-v4 or filter-aaaa-on-v6 "
|
||||
"is enabled");
|
||||
result = ISC_R_FAILURE;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (acl != NULL) {
|
||||
dns_acl_detach(&acl);
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
parse_parameters(filter_instance_t *inst, const char *parameters,
|
||||
const void *cfg, const char *cfg_file, unsigned long cfg_line,
|
||||
isc_mem_t *mctx, isc_log_t *lctx, void *actx)
|
||||
{
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
cfg_parser_t *parser = NULL;
|
||||
cfg_obj_t *param_obj = NULL;
|
||||
const cfg_obj_t *obj = NULL;
|
||||
isc_buffer_t b;
|
||||
|
||||
CHECK(cfg_parser_create(mctx, lctx, &parser));
|
||||
|
||||
isc_buffer_constinit(&b, parameters, strlen(parameters));
|
||||
isc_buffer_add(&b, strlen(parameters));
|
||||
CHECK(cfg_parse_buffer4(parser, &b, cfg_file, cfg_line,
|
||||
&cfg_type_parameters, 0, ¶m_obj));
|
||||
|
||||
CHECK(check_syntax(param_obj, cfg, mctx, lctx, actx));
|
||||
|
||||
CHECK(parse_filter_aaaa_on(param_obj, "filter-aaaa-on-v4",
|
||||
&inst->v4_aaaa));
|
||||
CHECK(parse_filter_aaaa_on(param_obj, "filter-aaaa-on-v6",
|
||||
&inst->v6_aaaa));
|
||||
|
||||
result = cfg_map_get(param_obj, "filter-aaaa", &obj);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
CHECK(cfg_acl_fromconfig(obj, (const cfg_obj_t *) cfg,
|
||||
lctx, (cfg_aclconfctx_t *) actx,
|
||||
mctx, 0, &inst->aaaa_acl));
|
||||
} else {
|
||||
CHECK(dns_acl_any(mctx, &inst->aaaa_acl));
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if (param_obj != NULL) {
|
||||
cfg_obj_destroy(parser, ¶m_obj);
|
||||
}
|
||||
if (parser != NULL) {
|
||||
cfg_parser_destroy(&parser);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/**
|
||||
** Mandatory plugin API functions:
|
||||
**
|
||||
** - plugin_destroy
|
||||
** - plugin_register
|
||||
** - plugin_version
|
||||
** - plugin_check
|
||||
**/
|
||||
|
||||
/*
|
||||
* Called by ns_plugin_register() to initialize the plugin and
|
||||
* register hook functions into the view hook table.
|
||||
*/
|
||||
isc_result_t
|
||||
plugin_register(const char *parameters,
|
||||
const void *cfg, const char *cfg_file, unsigned long cfg_line,
|
||||
isc_mem_t *mctx, isc_log_t *lctx, void *actx,
|
||||
ns_hooktable_t *hooktable, void **instp)
|
||||
{
|
||||
filter_instance_t *inst = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
|
||||
isc_log_write(lctx, NS_LOGCATEGORY_GENERAL,
|
||||
NS_LOGMODULE_HOOKS, ISC_LOG_INFO,
|
||||
"registering 'filter-aaaa' "
|
||||
"module from %s:%lu, %s parameters",
|
||||
cfg_file, cfg_line, parameters != NULL ? "with" : "no");
|
||||
|
||||
inst = isc_mem_get(mctx, sizeof(*inst));
|
||||
memset(inst, 0, sizeof(*inst));
|
||||
isc_mem_attach(mctx, &inst->mctx);
|
||||
|
||||
if (parameters != NULL) {
|
||||
CHECK(parse_parameters(inst, parameters, cfg, cfg_file,
|
||||
cfg_line, mctx, lctx, actx));
|
||||
}
|
||||
|
||||
CHECK(isc_mempool_create(mctx, sizeof(filter_data_t),
|
||||
&inst->datapool));
|
||||
CHECK(isc_ht_init(&inst->ht, mctx, 16));
|
||||
|
||||
/*
|
||||
* Fill the mempool with 1K filter_aaaa state objects at
|
||||
* a time; ideally after a single allocation, the mempool will
|
||||
* have enough to handle all the simultaneous queries the system
|
||||
* requires and it won't be necessary to allocate more.
|
||||
*
|
||||
* We don't set any limit on the number of free state objects
|
||||
* so that they'll always be returned to the pool and not
|
||||
* freed until the pool is destroyed on shutdown.
|
||||
*/
|
||||
isc_mempool_setfillcount(inst->datapool, 1024);
|
||||
isc_mempool_setfreemax(inst->datapool, UINT_MAX);
|
||||
|
||||
/*
|
||||
* Set hook points in the view's hooktable.
|
||||
*/
|
||||
install_hooks(hooktable, mctx, inst);
|
||||
|
||||
*instp = inst;
|
||||
|
||||
cleanup:
|
||||
if (result != ISC_R_SUCCESS && inst != NULL) {
|
||||
plugin_destroy((void **) &inst);
|
||||
}
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
plugin_check(const char *parameters,
|
||||
const void *cfg, const char *cfg_file, unsigned long cfg_line,
|
||||
isc_mem_t *mctx, isc_log_t *lctx, void *actx)
|
||||
{
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
cfg_parser_t *parser = NULL;
|
||||
cfg_obj_t *param_obj = NULL;
|
||||
isc_buffer_t b;
|
||||
|
||||
CHECK(cfg_parser_create(mctx, lctx, &parser));
|
||||
|
||||
isc_buffer_constinit(&b, parameters, strlen(parameters));
|
||||
isc_buffer_add(&b, strlen(parameters));
|
||||
CHECK(cfg_parse_buffer4(parser, &b, cfg_file, cfg_line,
|
||||
&cfg_type_parameters, 0, ¶m_obj));
|
||||
|
||||
CHECK(check_syntax(param_obj, cfg, mctx, lctx, actx));
|
||||
|
||||
cleanup:
|
||||
if (param_obj != NULL) {
|
||||
cfg_obj_destroy(parser, ¶m_obj);
|
||||
}
|
||||
if (parser != NULL) {
|
||||
cfg_parser_destroy(&parser);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Called by ns_plugins_free(); frees memory allocated by
|
||||
* the module when it was registered.
|
||||
*/
|
||||
void
|
||||
plugin_destroy(void **instp) {
|
||||
filter_instance_t *inst = (filter_instance_t *) *instp;
|
||||
|
||||
if (inst->ht != NULL) {
|
||||
isc_ht_destroy(&inst->ht);
|
||||
}
|
||||
if (inst->datapool != NULL) {
|
||||
isc_mempool_destroy(&inst->datapool);
|
||||
}
|
||||
if (inst->aaaa_acl != NULL) {
|
||||
dns_acl_detach(&inst->aaaa_acl);
|
||||
}
|
||||
|
||||
isc_mem_putanddetach(&inst->mctx, inst, sizeof(*inst));
|
||||
*instp = NULL;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns plugin API version for compatibility checks.
|
||||
*/
|
||||
int
|
||||
plugin_version(void) {
|
||||
return (NS_PLUGIN_VERSION);
|
||||
}
|
||||
|
||||
/**
|
||||
** "filter-aaaa" feature implementation begins here.
|
||||
**/
|
||||
|
||||
/*%
|
||||
* Structure describing the filtering to be applied by process_section().
|
||||
*/
|
||||
typedef struct section_filter {
|
||||
query_ctx_t * qctx;
|
||||
filter_aaaa_t mode;
|
||||
dns_section_t section;
|
||||
const dns_name_t * name;
|
||||
dns_rdatatype_t type;
|
||||
bool only_if_a_exists;
|
||||
} section_filter_t;
|
||||
|
||||
/*
|
||||
* Check whether this is an IPv4 client.
|
||||
*/
|
||||
static bool
|
||||
is_v4_client(ns_client_t *client) {
|
||||
if (isc_sockaddr_pf(&client->peeraddr) == AF_INET) {
|
||||
return (true);
|
||||
}
|
||||
if (isc_sockaddr_pf(&client->peeraddr) == AF_INET6 &&
|
||||
IN6_IS_ADDR_V4MAPPED(&client->peeraddr.type.sin6.sin6_addr))
|
||||
{
|
||||
return (true);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether this is an IPv6 client.
|
||||
*/
|
||||
static bool
|
||||
is_v6_client(ns_client_t *client) {
|
||||
if (isc_sockaddr_pf(&client->peeraddr) == AF_INET6 &&
|
||||
!IN6_IS_ADDR_V4MAPPED(&client->peeraddr.type.sin6.sin6_addr))
|
||||
{
|
||||
return (true);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
static filter_data_t *
|
||||
client_state_get(const query_ctx_t *qctx, filter_instance_t *inst) {
|
||||
filter_data_t *client_state = NULL;
|
||||
isc_result_t result;
|
||||
|
||||
result = isc_ht_find(inst->ht, (const unsigned char *)&qctx->client,
|
||||
sizeof(qctx->client), (void **)&client_state);
|
||||
|
||||
return (result == ISC_R_SUCCESS ? client_state : NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
client_state_create(const query_ctx_t *qctx, filter_instance_t *inst) {
|
||||
filter_data_t *client_state;
|
||||
isc_result_t result;
|
||||
|
||||
client_state = isc_mempool_get(inst->datapool);
|
||||
if (client_state == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
client_state->mode = NONE;
|
||||
client_state->flags = 0;
|
||||
|
||||
result = isc_ht_add(inst->ht, (const unsigned char *)&qctx->client,
|
||||
sizeof(qctx->client), client_state);
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
static void
|
||||
client_state_destroy(const query_ctx_t *qctx, filter_instance_t *inst) {
|
||||
filter_data_t *client_state = client_state_get(qctx, inst);
|
||||
isc_result_t result;
|
||||
|
||||
if (client_state == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
result = isc_ht_delete(inst->ht, (const unsigned char *)&qctx->client,
|
||||
sizeof(qctx->client));
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
|
||||
isc_mempool_put(inst->datapool, client_state);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Mark 'rdataset' and 'sigrdataset' as rendered, gracefully handling NULL
|
||||
* pointers and non-associated rdatasets.
|
||||
*/
|
||||
static void
|
||||
mark_as_rendered(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset) {
|
||||
if (rdataset != NULL && dns_rdataset_isassociated(rdataset)) {
|
||||
rdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
}
|
||||
if (sigrdataset != NULL && dns_rdataset_isassociated(sigrdataset)) {
|
||||
sigrdataset->attributes |= DNS_RDATASETATTR_RENDERED;
|
||||
}
|
||||
}
|
||||
|
||||
/*%
|
||||
* Check whether an RRset of given 'type' is present at given 'name'. If
|
||||
* it is found and either it is not signed or the combination of query
|
||||
* flags and configured processing 'mode' allows it, mark the RRset and its
|
||||
* associated signatures as already rendered to prevent them from appearing
|
||||
* in the response message stored in 'qctx'. If 'only_if_a_exists' is
|
||||
* true, an RRset of type A must also exist at 'name' in order for the
|
||||
* above processing to happen.
|
||||
*/
|
||||
static bool
|
||||
process_name(query_ctx_t *qctx, filter_aaaa_t mode, const dns_name_t *name,
|
||||
dns_rdatatype_t type, bool only_if_a_exists)
|
||||
{
|
||||
dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
|
||||
isc_result_t result;
|
||||
bool modified = false;
|
||||
|
||||
if (only_if_a_exists) {
|
||||
CHECK(dns_message_findtype(name, dns_rdatatype_a, 0, NULL));
|
||||
}
|
||||
|
||||
dns_message_findtype(name, type, 0, &rdataset);
|
||||
dns_message_findtype(name, dns_rdatatype_rrsig, type, &sigrdataset);
|
||||
|
||||
if (rdataset != NULL &&
|
||||
(sigrdataset == NULL || !WANTDNSSEC(qctx->client) ||
|
||||
mode == BREAK_DNSSEC))
|
||||
{
|
||||
/*
|
||||
* An RRset of given 'type' was found at 'name' and at least
|
||||
* one of the following is true:
|
||||
*
|
||||
* - the RRset is not signed,
|
||||
* - the client did not set the DO bit in its request,
|
||||
* - configuration allows us to tamper with signed responses.
|
||||
*
|
||||
* This means it is okay to filter out this RRset and its
|
||||
* signatures, if any, from the response.
|
||||
*/
|
||||
mark_as_rendered(rdataset, sigrdataset);
|
||||
modified = true;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
return (modified);
|
||||
}
|
||||
|
||||
/*%
|
||||
* Apply the requested section filter, i.e. prevent (when possible, as
|
||||
* determined by process_name()) RRsets of given 'type' from being rendered
|
||||
* in the given 'section' of the response message stored in 'qctx'. Clear
|
||||
* the AD bit if the answer and/or authority section was modified. If
|
||||
* 'name' is NULL, all names in the given 'section' are processed;
|
||||
* otherwise, only 'name' is. 'only_if_a_exists' is passed through to
|
||||
* process_name().
|
||||
*/
|
||||
static void
|
||||
process_section(const section_filter_t *filter) {
|
||||
query_ctx_t *qctx = filter->qctx;
|
||||
filter_aaaa_t mode = filter->mode;
|
||||
dns_section_t section = filter->section;
|
||||
const dns_name_t *name = filter->name;
|
||||
dns_rdatatype_t type = filter->type;
|
||||
bool only_if_a_exists = filter->only_if_a_exists;
|
||||
|
||||
dns_message_t *message = qctx->client->message;
|
||||
isc_result_t result;
|
||||
|
||||
for (result = dns_message_firstname(message, section);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_message_nextname(message, section))
|
||||
{
|
||||
dns_name_t *cur = NULL;
|
||||
dns_message_currentname(message, section, &cur);
|
||||
if (name != NULL && !dns_name_equal(name, cur)) {
|
||||
/*
|
||||
* We only want to process 'name' and this is not it.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!process_name(qctx, mode, cur, type, only_if_a_exists)) {
|
||||
/*
|
||||
* Response was not modified, do not touch the AD bit.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
if (section == DNS_SECTION_ANSWER ||
|
||||
section == DNS_SECTION_AUTHORITY)
|
||||
{
|
||||
message->flags &= ~DNS_MESSAGEFLAG_AD;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize filter state, fetching it from a memory pool and storing it
|
||||
* in a hash table keyed according to the client object; this enables us to
|
||||
* retrieve persistent data related to a client query for as long as the
|
||||
* object persists.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_qctx_initialize(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
filter_data_t *client_state;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
client_state = client_state_get(qctx, inst);
|
||||
if (client_state == NULL) {
|
||||
client_state_create(qctx, inst);
|
||||
}
|
||||
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine whether this client should have AAAA filtered or not, based on
|
||||
* the client address family and the settings of filter-aaaa-on-v4 and
|
||||
* filter-aaaa-on-v6.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_prep_response_begin(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
filter_data_t *client_state = client_state_get(qctx, inst);
|
||||
isc_result_t result;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (client_state == NULL) {
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
if (inst->v4_aaaa != NONE || inst->v6_aaaa != NONE) {
|
||||
result = ns_client_checkaclsilent(qctx->client, NULL,
|
||||
inst->aaaa_acl, true);
|
||||
if (result == ISC_R_SUCCESS &&
|
||||
inst->v4_aaaa != NONE &&
|
||||
is_v4_client(qctx->client))
|
||||
{
|
||||
client_state->mode = inst->v4_aaaa;
|
||||
} else if (result == ISC_R_SUCCESS &&
|
||||
inst->v6_aaaa != NONE &&
|
||||
is_v6_client(qctx->client))
|
||||
{
|
||||
client_state->mode = inst->v6_aaaa;
|
||||
}
|
||||
}
|
||||
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide AAAA rrsets if there is a matching A. Trigger recursion if
|
||||
* necessary to find out whether an A exists.
|
||||
*
|
||||
* (This version is for processing answers to explicit AAAA queries; ANY
|
||||
* queries are handled in filter_respond_any_found().)
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
filter_data_t *client_state = client_state_get(qctx, inst);
|
||||
isc_result_t result = ISC_R_UNSET;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (client_state == NULL) {
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
if (client_state->mode != BREAK_DNSSEC &&
|
||||
(client_state->mode != FILTER ||
|
||||
(WANTDNSSEC(qctx->client) && qctx->sigrdataset != NULL &&
|
||||
dns_rdataset_isassociated(qctx->sigrdataset))))
|
||||
{
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
if (qctx->qtype == dns_rdatatype_aaaa) {
|
||||
dns_rdataset_t *trdataset;
|
||||
trdataset = ns_client_newrdataset(qctx->client);
|
||||
result = dns_db_findrdataset(qctx->db, qctx->node,
|
||||
qctx->version,
|
||||
dns_rdatatype_a, 0,
|
||||
qctx->client->now,
|
||||
trdataset, NULL);
|
||||
if (dns_rdataset_isassociated(trdataset)) {
|
||||
dns_rdataset_disassociate(trdataset);
|
||||
}
|
||||
ns_client_putrdataset(qctx->client, &trdataset);
|
||||
|
||||
/*
|
||||
* We found an AAAA. If we also found an A, then the AAAA
|
||||
* must not be rendered.
|
||||
*
|
||||
* If the A is not in our cache, then any result other than
|
||||
* DNS_R_DELEGATION or ISC_R_NOTFOUND means there is no A,
|
||||
* and so AAAAs are okay.
|
||||
*
|
||||
* We assume there is no A if we can't recurse for this
|
||||
* client. That might be the wrong answer, but what else
|
||||
* can we do? Besides, the fact that we have the AAAA and
|
||||
* are using this mechanism in the first place suggests
|
||||
* that we care more about As than AAAAs, and would have
|
||||
* cached an A if it existed.
|
||||
*/
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
mark_as_rendered(qctx->rdataset, qctx->sigrdataset);
|
||||
qctx->client->message->flags &= ~DNS_MESSAGEFLAG_AD;
|
||||
client_state->flags |= FILTER_AAAA_FILTERED;
|
||||
} else if (!qctx->authoritative &&
|
||||
RECURSIONOK(qctx->client) &&
|
||||
(result == DNS_R_DELEGATION ||
|
||||
result == ISC_R_NOTFOUND))
|
||||
{
|
||||
/*
|
||||
* This is an ugly kludge to recurse
|
||||
* for the A and discard the result.
|
||||
*
|
||||
* Continue to add the AAAA now.
|
||||
* We'll make a note to not render it
|
||||
* if the recursion for the A succeeds.
|
||||
*/
|
||||
result = ns_query_recurse(qctx->client,
|
||||
dns_rdatatype_a,
|
||||
qctx->client->query.qname,
|
||||
NULL, NULL, qctx->resuming);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
client_state->flags |= FILTER_AAAA_RECURSING;
|
||||
qctx->client->query.attributes |=
|
||||
NS_QUERYATTR_RECURSING;
|
||||
}
|
||||
}
|
||||
} else if (qctx->qtype == dns_rdatatype_a &&
|
||||
(client_state->flags & FILTER_AAAA_RECURSING) != 0)
|
||||
{
|
||||
const section_filter_t filter_answer = {
|
||||
.qctx = qctx,
|
||||
.mode = client_state->mode,
|
||||
.section = DNS_SECTION_ANSWER,
|
||||
.name = qctx->fname,
|
||||
.type = dns_rdatatype_aaaa,
|
||||
};
|
||||
process_section(&filter_answer);
|
||||
|
||||
client_state->flags &= ~FILTER_AAAA_RECURSING;
|
||||
|
||||
result = ns_query_done(qctx);
|
||||
|
||||
*resp = result;
|
||||
|
||||
return (NS_HOOK_RETURN);
|
||||
}
|
||||
|
||||
*resp = result;
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* When answering an ANY query, remove AAAA if A is present.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
filter_data_t *client_state = client_state_get(qctx, inst);
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (client_state != NULL && client_state->mode != NONE) {
|
||||
/*
|
||||
* If we are authoritative, require an A record to be
|
||||
* present before filtering out AAAA records; otherwise,
|
||||
* just assume an A record exists even if it was not in the
|
||||
* cache (and therefore is not in the response message),
|
||||
* thus proceeding with filtering out AAAA records.
|
||||
*/
|
||||
const section_filter_t filter_answer = {
|
||||
.qctx = qctx,
|
||||
.mode = client_state->mode,
|
||||
.section = DNS_SECTION_ANSWER,
|
||||
.name = qctx->tname,
|
||||
.type = dns_rdatatype_aaaa,
|
||||
.only_if_a_exists = qctx->authoritative,
|
||||
};
|
||||
process_section(&filter_answer);
|
||||
}
|
||||
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Hide AAAA rrsets in the additional section if there is a matching A, and
|
||||
* hide NS in the authority section if AAAA was filtered in the answer
|
||||
* section.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_query_done_send(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
filter_data_t *client_state = client_state_get(qctx, inst);
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (client_state != NULL && client_state->mode != NONE) {
|
||||
const section_filter_t filter_additional = {
|
||||
.qctx = qctx,
|
||||
.mode = client_state->mode,
|
||||
.section = DNS_SECTION_ADDITIONAL,
|
||||
.type = dns_rdatatype_aaaa,
|
||||
.only_if_a_exists = true,
|
||||
};
|
||||
process_section(&filter_additional);
|
||||
|
||||
if ((client_state->flags & FILTER_AAAA_FILTERED) != 0) {
|
||||
const section_filter_t filter_authority = {
|
||||
.qctx = qctx,
|
||||
.mode = client_state->mode,
|
||||
.section = DNS_SECTION_AUTHORITY,
|
||||
.type = dns_rdatatype_ns,
|
||||
};
|
||||
process_section(&filter_authority);
|
||||
}
|
||||
}
|
||||
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the client is being detached, then we can delete our persistent data
|
||||
* from hash table and return it to the memory pool.
|
||||
*/
|
||||
static ns_hookresult_t
|
||||
filter_qctx_destroy(void *arg, void *cbdata, isc_result_t *resp) {
|
||||
query_ctx_t *qctx = (query_ctx_t *) arg;
|
||||
filter_instance_t *inst = (filter_instance_t *) cbdata;
|
||||
|
||||
*resp = ISC_R_UNSET;
|
||||
|
||||
if (!qctx->detach_client) {
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
|
||||
client_state_destroy(qctx, inst);
|
||||
|
||||
return (NS_HOOK_CONTINUE);
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
<!--
|
||||
- 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.
|
||||
-->
|
||||
|
||||
<!-- Converted by db4-upgrade version 1.0 -->
|
||||
<refentry xmlns:db="http://docbook.org/ns/docbook" version="5.0" xml:id="man.filter-aaaa">
|
||||
<info>
|
||||
<date>2018-08-13</date>
|
||||
</info>
|
||||
<refentryinfo>
|
||||
<corpname>ISC</corpname>
|
||||
<corpauthor>Internet Systems Consortium, Inc.</corpauthor>
|
||||
</refentryinfo>
|
||||
<refmeta>
|
||||
<refentrytitle><application>filter-aaaa.so</application></refentrytitle>
|
||||
<manvolnum>8</manvolnum>
|
||||
<refmiscinfo>BIND9</refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname><application>filter-aaaa.so</application></refname>
|
||||
<refpurpose>filter AAAA in DNS responses when A is present</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<docinfo>
|
||||
<copyright>
|
||||
<year>2018</year>
|
||||
<holder>Internet Systems Consortium, Inc. ("ISC")</holder>
|
||||
</copyright>
|
||||
</docinfo>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis sepchar=" ">
|
||||
<command>plugin query "filter-aaaa.so"</command>
|
||||
<arg choice="opt" rep="norepeat"><replaceable class="parameter">{ parameters }</replaceable></arg>;
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsection><info><title>DESCRIPTION</title></info>
|
||||
<para>
|
||||
<command>filter-aaaa.so</command> is a query plugin module for
|
||||
<command>named</command>, enabling <command>named</command>
|
||||
to omit some IPv6 addresses when responding to clients.
|
||||
</para>
|
||||
<para>
|
||||
Until BIND 9.12, this feature was implemented natively in
|
||||
<command>named</command> and enabled with the
|
||||
<command>filter-aaaa</command> ACL and the
|
||||
<command>filter-aaaa-on-v4</command> and
|
||||
<command>filter-aaaa-on-v6</command> options. These options are
|
||||
now deprecated in <filename>named.conf</filename>, but can be
|
||||
passed as parameters to the <command>filter-aaaa.so</command>
|
||||
plugin, for example:
|
||||
</para>
|
||||
<programlisting>
|
||||
plugin query "/usr/local/lib/filter-aaaa.so" {
|
||||
filter-aaaa-on-v4 yes;
|
||||
filter-aaaa-on-v6 yes;
|
||||
filter-aaaa { 192.0.2.1; 2001:db8:2::1; };
|
||||
};
|
||||
</programlisting>
|
||||
<para>
|
||||
This module is intended to aid transition from IPv4 to IPv6 by
|
||||
withholding IPv6 addresses from DNS clients which are not connected
|
||||
to the IPv6 Internet, when the name being looked up has an IPv4
|
||||
address available. Use of this module is not recommended unless
|
||||
absolutely necessary.
|
||||
</para>
|
||||
<para>
|
||||
Note: This mechanism can erroneously cause other servers not to
|
||||
give AAAA records to their clients. If a recursing server with
|
||||
both IPv6 and IPv4 network connections queries an authoritative
|
||||
server using this mechanism via IPv4, it will be denied AAAA
|
||||
records even if its client is using IPv6.
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
<refsection><info><title>OPTIONS</title></info>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><command>filter-aaaa</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Specifies a list of client addresses for which AAAA
|
||||
filtering is to be applied. The default is
|
||||
<userinput>any</userinput>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><command>filter-aaaa-on-v4</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
If set to <userinput>yes</userinput>, the DNS client is
|
||||
at an IPv4 address, in <command>filter-aaaa</command>,
|
||||
and if the response does not include DNSSEC signatures,
|
||||
then all AAAA records are deleted from the response.
|
||||
This filtering applies to all responses and not only
|
||||
authoritative responses.
|
||||
</para>
|
||||
<para>
|
||||
If set to <userinput>break-dnssec</userinput>,
|
||||
then AAAA records are deleted even when DNSSEC is
|
||||
enabled. As suggested by the name, this causes the
|
||||
response to fail to verify, because the DNSSEC protocol is
|
||||
designed to detect deletions.
|
||||
</para>
|
||||
<para>
|
||||
This mechanism can erroneously cause other servers not to
|
||||
give AAAA records to their clients. A recursing server with
|
||||
both IPv6 and IPv4 network connections that queries an
|
||||
authoritative server using this mechanism via IPv4 will be
|
||||
denied AAAA records even if its client is using IPv6.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><command>filter-aaaa-on-v6</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Identical to <command>filter-aaaa-on-v4</command>,
|
||||
except it filters AAAA responses to queries from IPv6
|
||||
clients instead of IPv4 clients. To filter all
|
||||
responses, set both options to <userinput>yes</userinput>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsection>
|
||||
|
||||
<refsection><info><title>SEE ALSO</title></info>
|
||||
<para>
|
||||
<citetitle>BIND 9 Administrator Reference Manual</citetitle>.
|
||||
</para>
|
||||
</refsection>
|
||||
|
||||
</refentry>
|
||||
@@ -0,0 +1,135 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!--
|
||||
- Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC")
|
||||
-
|
||||
- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
-->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>filter-aaaa.so</title>
|
||||
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
|
||||
</head>
|
||||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="refentry">
|
||||
<a name="man.filter-aaaa"></a><div class="titlepage"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="refnamediv">
|
||||
<h2>Name</h2>
|
||||
<p>
|
||||
<span class="application">filter-aaaa.so</span>
|
||||
— filter AAAA in DNS responses when A is present
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="refsynopsisdiv">
|
||||
<h2>Synopsis</h2>
|
||||
<div class="cmdsynopsis"><p>
|
||||
<code class="command">plugin query "filter-aaaa.so"</code>
|
||||
[<em class="replaceable"><code>{ parameters }</code></em>];
|
||||
</p></div>
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.7"></a><h2>DESCRIPTION</h2>
|
||||
<p>
|
||||
<span class="command"><strong>filter-aaaa.so</strong></span> is a query plugin module for
|
||||
<span class="command"><strong>named</strong></span>, enabling <span class="command"><strong>named</strong></span>
|
||||
to omit some IPv6 addresses when responding to clients.
|
||||
</p>
|
||||
<p>
|
||||
Until BIND 9.12, this feature was implemented natively in
|
||||
<span class="command"><strong>named</strong></span> and enabled with the
|
||||
<span class="command"><strong>filter-aaaa</strong></span> ACL and the
|
||||
<span class="command"><strong>filter-aaaa-on-v4</strong></span> and
|
||||
<span class="command"><strong>filter-aaaa-on-v6</strong></span> options. These options are
|
||||
now deprecated in <code class="filename">named.conf</code>, but can be
|
||||
passed as parameters to the <span class="command"><strong>filter-aaaa.so</strong></span>
|
||||
plugin, for example:
|
||||
</p>
|
||||
<pre class="programlisting">
|
||||
plugin query "/usr/local/lib/filter-aaaa.so" {
|
||||
filter-aaaa-on-v4 yes;
|
||||
filter-aaaa-on-v6 yes;
|
||||
filter-aaaa { 192.0.2.1; 2001:db8:2::1; };
|
||||
};
|
||||
</pre>
|
||||
<p>
|
||||
This module is intended to aid transition from IPv4 to IPv6 by
|
||||
withholding IPv6 addresses from DNS clients which are not connected
|
||||
to the IPv6 Internet, when the name being looked up has an IPv4
|
||||
address available. Use of this module is not recommended unless
|
||||
absolutely necessary.
|
||||
</p>
|
||||
<p>
|
||||
Note: This mechanism can erroneously cause other servers not to
|
||||
give AAAA records to their clients. If a recursing server with
|
||||
both IPv6 and IPv4 network connections queries an authoritative
|
||||
server using this mechanism via IPv4, it will be denied AAAA
|
||||
records even if its client is using IPv6.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.8"></a><h2>OPTIONS</h2>
|
||||
<div class="variablelist"><dl class="variablelist">
|
||||
<dt><span class="term"><span class="command"><strong>filter-aaaa</strong></span></span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Specifies a list of client addresses for which AAAA
|
||||
filtering is to be applied. The default is
|
||||
<strong class="userinput"><code>any</code></strong>.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><span class="command"><strong>filter-aaaa-on-v4</strong></span></span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
If set to <strong class="userinput"><code>yes</code></strong>, the DNS client is
|
||||
at an IPv4 address, in <span class="command"><strong>filter-aaaa</strong></span>,
|
||||
and if the response does not include DNSSEC signatures,
|
||||
then all AAAA records are deleted from the response.
|
||||
This filtering applies to all responses and not only
|
||||
authoritative responses.
|
||||
</p>
|
||||
<p>
|
||||
If set to <strong class="userinput"><code>break-dnssec</code></strong>,
|
||||
then AAAA records are deleted even when DNSSEC is
|
||||
enabled. As suggested by the name, this causes the
|
||||
response to fail to verify, because the DNSSEC protocol is
|
||||
designed to detect deletions.
|
||||
</p>
|
||||
<p>
|
||||
This mechanism can erroneously cause other servers not to
|
||||
give AAAA records to their clients. A recursing server with
|
||||
both IPv6 and IPv4 network connections that queries an
|
||||
authoritative server using this mechanism via IPv4 will be
|
||||
denied AAAA records even if its client is using IPv6.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><span class="command"><strong>filter-aaaa-on-v6</strong></span></span></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Identical to <span class="command"><strong>filter-aaaa-on-v4</strong></span>,
|
||||
except it filters AAAA responses to queries from IPv6
|
||||
clients instead of IPv4 clients. To filter all
|
||||
responses, set both options to <strong class="userinput"><code>yes</code></strong>.
|
||||
</p>
|
||||
</dd>
|
||||
</dl></div>
|
||||
</div>
|
||||
|
||||
<div class="refsection">
|
||||
<a name="id-1.9"></a><h2>SEE ALSO</h2>
|
||||
<p>
|
||||
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div></body>
|
||||
</html>
|
||||
@@ -215,7 +215,7 @@ Specifies the directory in which keys should be stored\&.
|
||||
.PP
|
||||
\fBkey\-size\fR
|
||||
.RS 4
|
||||
Specifies the number of bits to use in creating keys\&. Takes two arguments: keytype (eihter "zsk" or "ksk") and size\&. A default value for this option can be set in algorithm policies as well as in policy classes or zone policies\&. If no policy is configured, the default is 1024 bits for DSA keys and 2048 for RSA\&.
|
||||
Specifies the number of bits to use in creating keys\&. Takes two arguments: keytype (eihter "zsk" or "ksk") and size\&. A default value for this option can be set in algorithm policies as well as in policy classes or zone policies\&. If no policy is configured, the default is 2048 bits for RSA keys\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBkeyttl\fR
|
||||
|
||||
@@ -258,8 +258,7 @@
|
||||
Takes two arguments: keytype (eihter "zsk" or "ksk") and size.
|
||||
A default value for this option can be set in algorithm policies
|
||||
as well as in policy classes or zone policies. If no policy is
|
||||
configured, the default is 1024 bits for DSA keys and 2048 for
|
||||
RSA.
|
||||
configured, the default is 2048 bits for RSA keys.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><span class="command"><strong>keyttl</strong></span></span></dt>
|
||||
|
||||
@@ -452,6 +452,10 @@ class dnskey:
|
||||
if timespan is None:
|
||||
timespan = self.ttl
|
||||
|
||||
if timespan is None:
|
||||
output("WARNING: Key %s using default TTL." % repr(self))
|
||||
timespan = (60*60*24)
|
||||
|
||||
now = time.time()
|
||||
d = self.delete()
|
||||
i = self.inactive()
|
||||
|
||||
+17
-9
@@ -386,7 +386,7 @@ See also
|
||||
\fBrndc trace\fR\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBnta \fR\fB[( \-d | \-f | \-r | \-l \fIduration\fR)]\fR\fB \fR\fB\fIdomain\fR\fR\fB \fR\fB[\fIview\fR]\fR\fB \fR
|
||||
\fBnta \fR\fB[( \-class \fIclass\fR | \-dump | \-force | \-remove | \-lifetime \fIduration\fR)]\fR\fB \fR\fB\fIdomain\fR\fR\fB \fR\fB[\fIview\fR]\fR\fB \fR
|
||||
.RS 4
|
||||
Sets a DNSSEC negative trust anchor (NTA) for
|
||||
\fBdomain\fR, with a lifetime of
|
||||
@@ -418,7 +418,7 @@ option\&. TTL\-style suffixes can be used to specify the lifetime in seconds, mi
|
||||
to zero is equivalent to
|
||||
\fB\-remove\fR\&.
|
||||
.sp
|
||||
If
|
||||
If the
|
||||
\fB\-dump\fR
|
||||
is used, any other arguments are ignored, and a list of existing NTAs is printed (note that this may include NTAs that are expired but have not yet been cleaned up)\&.
|
||||
.sp
|
||||
@@ -430,11 +430,18 @@ option in the Administrator Reference Manual for details)\&. If data can be vali
|
||||
\fB\-force\fR
|
||||
overrides this behavior and forces an NTA to persist for its entire lifetime, regardless of whether data could be validated if the NTA were not present\&.
|
||||
.sp
|
||||
The view class can be specified with
|
||||
\fB\-class\fR\&. The default is class
|
||||
\fBIN\fR, which is the only class for which DNSSEC is currently supported\&.
|
||||
.sp
|
||||
All of these options can be shortened, i\&.e\&., to
|
||||
\fB\-l\fR,
|
||||
\fB\-r\fR,
|
||||
\fB\-d\fR, and
|
||||
\fB\-f\fR\&.
|
||||
\fB\-d\fR,
|
||||
\fB\-f\fR, and
|
||||
\fB\-c\fR\&.
|
||||
.sp
|
||||
Unrecognized options are treated as errors\&. To reference a domain or view name that begins with a hyphen, use a double\-hyphen on the command line to indicate the end of options\&.
|
||||
.RE
|
||||
.PP
|
||||
\fBquerylog\fR [ on | off ]
|
||||
@@ -695,13 +702,14 @@ in each view\&. The list both statically configured keys and dynamic TKEY\-negot
|
||||
.PP
|
||||
\fBvalidation ( on | off | status ) \fR\fB[\fIview \&.\&.\&.\fR]\fR\fB \fR
|
||||
.RS 4
|
||||
Enable, disable, or check the current status of DNSSEC validation\&. Note
|
||||
Enable, disable, or check the current status of DNSSEC validation\&. By default, validation is enabled\&. (Note that
|
||||
\fBdnssec\-enable\fR
|
||||
also needs to be set to
|
||||
must also be
|
||||
\fByes\fR
|
||||
or
|
||||
\fBauto\fR
|
||||
to be effective\&. It defaults to enabled\&.
|
||||
(the default value) for signatures to be returned along with validated data\&. If validation is enabled while
|
||||
\fBdnssec\-enable\fR
|
||||
is set to
|
||||
\fBno\fR, the server will validate internally, but will not supply clients with the necessary records to allow validity to be confirmed\&.)
|
||||
.RE
|
||||
.PP
|
||||
\fBzonestatus \fR\fB\fIzone\fR\fR\fB \fR\fB[\fIclass\fR [\fIview\fR]]\fR
|
||||
|
||||
+22
-8
@@ -484,7 +484,7 @@
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><strong class="userinput"><code>nta
|
||||
[<span class="optional">( -d | -f | -r | -l <em class="replaceable"><code>duration</code></em>)</span>]
|
||||
[<span class="optional">( -class <em class="replaceable"><code>class</code></em> | -dump | -force | -remove | -lifetime <em class="replaceable"><code>duration</code></em>)</span>]
|
||||
<em class="replaceable"><code>domain</code></em>
|
||||
[<span class="optional"><em class="replaceable"><code>view</code></em></span>]
|
||||
</code></strong></span></dt>
|
||||
@@ -532,7 +532,7 @@
|
||||
is equivalent to <code class="option">-remove</code>.
|
||||
</p>
|
||||
<p>
|
||||
If <code class="option">-dump</code> is used, any other arguments
|
||||
If the <code class="option">-dump</code> is used, any other arguments
|
||||
are ignored, and a list of existing NTAs is printed
|
||||
(note that this may include NTAs that are expired but
|
||||
have not yet been cleaned up).
|
||||
@@ -549,10 +549,21 @@
|
||||
lifetime, regardless of whether data could be
|
||||
validated if the NTA were not present.
|
||||
</p>
|
||||
<p>
|
||||
The view class can be specified with <code class="option">-class</code>.
|
||||
The default is class <strong class="userinput"><code>IN</code></strong>, which is
|
||||
the only class for which DNSSEC is currently supported.
|
||||
</p>
|
||||
<p>
|
||||
All of these options can be shortened, i.e., to
|
||||
<code class="option">-l</code>, <code class="option">-r</code>, <code class="option">-d</code>,
|
||||
and <code class="option">-f</code>.
|
||||
<code class="option">-f</code>, and <code class="option">-c</code>.
|
||||
</p>
|
||||
<p>
|
||||
Unrecognized options are treated as errors. To reference
|
||||
a domain or view name that begins with a hyphen,
|
||||
use a double-hyphen on the command line to indicate the
|
||||
end of options.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><strong class="userinput"><code>querylog</code></strong> [<span class="optional"> on | off </span>] </span></dt>
|
||||
@@ -902,11 +913,14 @@
|
||||
<dd>
|
||||
<p>
|
||||
Enable, disable, or check the current status of
|
||||
DNSSEC validation.
|
||||
Note <span class="command"><strong>dnssec-enable</strong></span> also needs to be
|
||||
set to <strong class="userinput"><code>yes</code></strong> or
|
||||
<strong class="userinput"><code>auto</code></strong> to be effective.
|
||||
It defaults to enabled.
|
||||
DNSSEC validation. By default, validation is enabled.
|
||||
(Note that <span class="command"><strong>dnssec-enable</strong></span> must also be
|
||||
<strong class="userinput"><code>yes</code></strong> (the default value) for signatures
|
||||
to be returned along with validated data. If validation is
|
||||
enabled while <span class="command"><strong>dnssec-enable</strong></span> is set to
|
||||
<strong class="userinput"><code>no</code></strong>, the server will validate internally,
|
||||
but will not supply clients with the necessary records to allow
|
||||
validity to be confirmed.)
|
||||
</p>
|
||||
</dd>
|
||||
<dt><span class="term"><strong class="userinput"><code>zonestatus <em class="replaceable"><code>zone</code></em> [<span class="optional"><em class="replaceable"><code>class</code></em> [<span class="optional"><em class="replaceable"><code>view</code></em></span>]</span>]</code></strong></span></dt>
|
||||
|
||||
@@ -46,6 +46,7 @@ options {
|
||||
memstatistics-file "named.memstats"; // _PATH_MEMSTATS
|
||||
|
||||
max-cache-ttl 999;
|
||||
min-cache-ttl 66;
|
||||
auth-nxdomain yes; // always set AA on NXDOMAIN.
|
||||
// don't set this to 'no' unless
|
||||
// you know what you're doing -- older
|
||||
@@ -148,6 +149,7 @@ options {
|
||||
min-refresh-time 777;
|
||||
|
||||
max-ncache-ttl 333;
|
||||
min-ncache-ttl 22;
|
||||
min-roots 15;
|
||||
serial-queries 34;
|
||||
|
||||
|
||||
@@ -290,8 +290,8 @@ main(int argc, char **argv) {
|
||||
|
||||
isc_stdtime_get(&now);
|
||||
|
||||
result = isc_mutex_init(&client_lock);
|
||||
check_result(result, "isc_mutex_init(&client_lock)");
|
||||
isc_mutex_init(&client_lock);
|
||||
|
||||
ISC_LIST_INIT(clients);
|
||||
|
||||
/*
|
||||
|
||||
@@ -359,7 +359,6 @@ main(int argc, char *argv[]) {
|
||||
dbinfo *dbi;
|
||||
dns_dbversion_t *version;
|
||||
const dns_name_t *origin;
|
||||
size_t memory_quota = 0;
|
||||
dns_trust_t trust = 0;
|
||||
unsigned int addopts;
|
||||
isc_log_t *lctx = NULL;
|
||||
@@ -411,10 +410,6 @@ main(int argc, char *argv[]) {
|
||||
case 'P':
|
||||
pause_every = atoi(isc_commandline_argument);
|
||||
break;
|
||||
case 'Q':
|
||||
memory_quota = atoi(isc_commandline_argument);
|
||||
isc_mem_setquota(mctx, memory_quota);
|
||||
break;
|
||||
case 't':
|
||||
type = atoi(isc_commandline_argument);
|
||||
break;
|
||||
|
||||
@@ -30,7 +30,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
isc_mem_debugging = ISC_MEM_DEBUGRECORD;
|
||||
|
||||
RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS);
|
||||
isc_mutex_init(&lock);
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
@@ -114,7 +114,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
isc_mem_destroy(&mctx);
|
||||
|
||||
DESTROYLOCK(&lock);
|
||||
isc_mutex_destroy(&lock);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ main(int argc, char *argv[]) {
|
||||
|
||||
RUNTIME_CHECK(isc_app_start() == ISC_R_SUCCESS);
|
||||
|
||||
RUNTIME_CHECK(isc_mutex_init(&lock) == ISC_R_SUCCESS);
|
||||
isc_mutex_init(&lock);
|
||||
|
||||
mctx = NULL;
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
@@ -282,7 +282,7 @@ main(int argc, char *argv[]) {
|
||||
isc_mem_stats(mctx, stdout);
|
||||
isc_mem_destroy(&mctx);
|
||||
|
||||
DESTROYLOCK(&lock);
|
||||
isc_mutex_destroy(&lock);
|
||||
|
||||
isc_app_finish();
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ PARALLEL = rpzrecurse serve-stale dnssec \
|
||||
rrchecker rrl rrsetorder rsabigexponent runtime \
|
||||
sfcache smartsign sortlist \
|
||||
spf staticstub statistics statschannel stub synthfromdnssec \
|
||||
tcp tools tsig tsiggss \
|
||||
tcp tools tsig tsiggss ttl \
|
||||
unknown upforwd verify views wildcard \
|
||||
xfer xferquota zero zonechecks
|
||||
|
||||
|
||||
@@ -467,7 +467,7 @@ if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "reconfiguring server with multiple views"
|
||||
rm -f ns2/named.conf
|
||||
rm -f ns2/named.conf
|
||||
copy_setports ns2/named2.conf.in ns2/named.conf
|
||||
$RNDCCMD 10.53.0.2 reconfig 2>&1 | sed 's/^/I:ns2 /'
|
||||
sleep 5
|
||||
@@ -695,8 +695,8 @@ echo_i "check that named restarts with multiple added zones ($n)"
|
||||
ret=0
|
||||
$RNDCCMD 10.53.0.3 addzone "test4.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1
|
||||
$RNDCCMD 10.53.0.3 addzone "test5.baz" '{ type master; file "e.db"; };' > /dev/null 2>&1 || ret=1
|
||||
$PERL $SYSTEMTESTTOP/stop.pl . ns3
|
||||
$PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} . ns3 || ret=1
|
||||
$PERL $SYSTEMTESTTOP/stop.pl addzone ns3
|
||||
$PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} addzone ns3 || ret=1
|
||||
$DIG $DIGOPTS @10.53.0.3 version.bind txt ch > dig.out.test$n || ret=1
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
n=`expr $n + 1`
|
||||
|
||||
@@ -12,18 +12,19 @@
|
||||
rm -f */K* */dsset-* */*.signed */tmp* */*.jnl */*.bk
|
||||
rm -f */core
|
||||
rm -f */example.bk
|
||||
rm -f */named.conf
|
||||
rm -f */named.memstats
|
||||
rm -f */named.run
|
||||
rm -f */named.conf
|
||||
rm -f */trusted.conf */private.conf
|
||||
rm -f activate-now-publish-1day.key
|
||||
rm -f active.key inact.key del.key unpub.key standby.key rev.key
|
||||
rm -f active.key inact.key del.key delzsk.key unpub.key standby.key rev.key
|
||||
rm -f delayksk.key delayzsk.key autoksk.key autozsk.key
|
||||
rm -f dig.out.*
|
||||
rm -f digcomp.out.test*
|
||||
rm -f digcomp.out.test*
|
||||
rm -f missingzsk.key inactivezsk.key
|
||||
rm -f nopriv.key vanishing.key del1.key del2.key
|
||||
rm -f ns*/managed-keys.bind*
|
||||
rm -f ns*/named.lock
|
||||
rm -f ns*/named.lock
|
||||
rm -f ns1/root.db
|
||||
@@ -32,6 +33,8 @@ rm -f ns2/private.secure.example.db ns2/bar.db
|
||||
rm -f ns3/*.nzd ns3/*.nzd-lock ns3/*.nzf
|
||||
rm -f ns3/*.nzf
|
||||
rm -f ns3/autonsec3.example.db
|
||||
rm -f ns3/delzsk.example.db
|
||||
rm -f ns3/dname-at-apex-nsec3.example.db
|
||||
rm -f ns3/inacksk2.example.db
|
||||
rm -f ns3/inacksk3.example.db
|
||||
rm -f ns3/inaczsk2.example.db
|
||||
@@ -63,4 +66,3 @@ rm -f nsupdate.out
|
||||
rm -f settime.out.*
|
||||
rm -f signing.out.*
|
||||
rm -f sync.key
|
||||
rm -f ns*/managed-keys.bind*
|
||||
|
||||
@@ -82,3 +82,5 @@ ns.nsec3-to-nsec A 10.53.0.3
|
||||
|
||||
oldsigs NS ns.oldsigs
|
||||
ns.oldsigs A 10.53.0.3
|
||||
|
||||
dname-at-apex-nsec3 NS ns3
|
||||
|
||||
@@ -15,7 +15,8 @@ SYSTEMTESTTOP=../..
|
||||
# Have the child generate subdomain keys and pass DS sets to us.
|
||||
( cd ../ns3 && $SHELL keygen.sh )
|
||||
|
||||
for subdomain in secure nsec3 autonsec3 optout rsasha256 rsasha512 nsec3-to-nsec oldsigs sync
|
||||
for subdomain in secure nsec3 autonsec3 optout rsasha256 rsasha512 nsec3-to-nsec oldsigs sync \
|
||||
dname-at-apex-nsec3
|
||||
do
|
||||
cp ../ns3/dsset-$subdomain.example$TP .
|
||||
done
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
; 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.
|
||||
|
||||
$TTL 300 ; 5 minutes
|
||||
@ IN SOA mname1. . (
|
||||
2000010101 ; serial
|
||||
20 ; refresh (20 seconds)
|
||||
20 ; retry (20 seconds)
|
||||
1814400 ; expire (3 weeks)
|
||||
3600 ; minimum (1 hour)
|
||||
)
|
||||
NS ns
|
||||
ns A 10.53.0.3
|
||||
|
||||
sub NS ns.sub
|
||||
DS 12345 8 1 0000000000000000000000000000000000000000
|
||||
ns.sub A 10.53.0.3
|
||||
@@ -0,0 +1,5 @@
|
||||
$TTL 600
|
||||
@ SOA ns3.example. . 1 1200 1200 1814400 3600
|
||||
@ NS ns3.example.
|
||||
@ DNAME example.
|
||||
@ NSEC3PARAM 1 0 0 -
|
||||
@@ -15,8 +15,8 @@ SYSTEMTESTTOP=../..
|
||||
SYSTESTDIR=autosign
|
||||
|
||||
dumpit () {
|
||||
echo "D:${debug}: dumping ${1}"
|
||||
cat "${1}" | sed 's/^/D:/'
|
||||
echo_d "${debug}: dumping ${1}"
|
||||
cat "${1}" | cat_d
|
||||
}
|
||||
|
||||
setup () {
|
||||
@@ -314,3 +314,23 @@ ksk=`$KEYGEN -a NSEC3RSASHA1 -3 -q -fk $zone 2> kg.out` || dumpit kg.out
|
||||
$KEYGEN -a NSEC3RSASHA1 -3 -q $zone > kg.out 2>&1 || dumpit kg.out
|
||||
$KEYGEN -a NSEC3RSASHA1 -3 -q -P now -A now+3600 $zone > kg.out 2>&1 || dumpit kg.out
|
||||
$DSFROMKEY $ksk.key > dsset-${zone}$TP
|
||||
|
||||
#
|
||||
# A zone that starts with an active KSK + ZSK and an inactive ZSK, with the
|
||||
# latter getting deleted during the test.
|
||||
#
|
||||
setup delzsk.example
|
||||
cp $infile $zonefile
|
||||
ksk=`$KEYGEN -a NSEC3RSASHA1 -3 -q -fk $zone 2> kg.out` || dumpit kg.out
|
||||
$KEYGEN -a NSEC3RSASHA1 -3 -q $zone > kg.out 2>&1 || dumpit kg.out
|
||||
zsk=`$KEYGEN -a NSEC3RSASHA1 -3 -q -I now-1w $zone 2>kg.out` || dumpit kg.out
|
||||
echo $zsk > ../delzsk.key
|
||||
|
||||
#
|
||||
# Check that NSEC3 are correctly signed and returned from below a DNAME
|
||||
#
|
||||
setup dname-at-apex-nsec3.example
|
||||
cp $infile $zonefile
|
||||
ksk=`$KEYGEN -q -a RSASHA1 -3 -fk $zone 2> kg.out` || dumpit kg.out
|
||||
$KEYGEN -q -a RSASHA1 -3 $zone > kg.out 2>&1 || dumpit kg.out
|
||||
$DSFROMKEY $ksk.key > dsset-${zone}$TP
|
||||
|
||||
@@ -282,4 +282,18 @@ zone "inaczsk3.example" {
|
||||
auto-dnssec maintain;
|
||||
};
|
||||
|
||||
zone "delzsk.example." {
|
||||
type master;
|
||||
file "delzsk.example.db";
|
||||
allow-update { any; };
|
||||
auto-dnssec maintain;
|
||||
};
|
||||
|
||||
zone "dname-at-apex-nsec3.example" {
|
||||
type master;
|
||||
file "dname-at-apex-nsec3.example.db";
|
||||
allow-update { any; };
|
||||
auto-dnssec maintain;
|
||||
};
|
||||
|
||||
include "trusted.conf";
|
||||
|
||||
@@ -31,3 +31,5 @@ ns.private A 10.53.0.2
|
||||
insecure NS ns.insecure
|
||||
ns.insecure A 10.53.0.2
|
||||
|
||||
dname-and-txt DNAME @
|
||||
TXT "DNAME and TXT"
|
||||
|
||||
@@ -236,7 +236,7 @@ status=`expr $status + $ret`
|
||||
|
||||
echo_i "checking for nsec3param signing record ($n)"
|
||||
ret=0
|
||||
$RNDCCMD 10.53.0.3 signing -list autonsec3.example. > signing.out.test$n 2>&1 | sed 's/^/ns3 /' | cat_i
|
||||
$RNDCCMD 10.53.0.3 signing -list autonsec3.example. > signing.out.test$n 2>&1
|
||||
grep "Pending NSEC3 chain 1 0 20 DEAF" signing.out.test$n > /dev/null || ret=1
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
@@ -1395,5 +1395,77 @@ n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "checking for out-of-zone NSEC3 records after ZSK removal ($n)"
|
||||
ret=0
|
||||
# Switch the zone over to NSEC3 and wait until the transition is complete.
|
||||
$RNDCCMD 10.53.0.3 signing -nsec3param 1 1 10 12345678 delzsk.example. > signing.out.1.test$n 2>&1 || ret=1
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
_ret=1
|
||||
$DIG $DIGOPTS delzsk.example NSEC3PARAM @10.53.0.3 > dig.out.ns3.1.test$n 2>&1 || ret=1
|
||||
grep "NSEC3PARAM.*12345678" dig.out.ns3.1.test$n > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
_ret=0
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
if [ $_ret -ne 0 ]; then
|
||||
echo_i "timed out waiting for NSEC3 chain creation"
|
||||
ret=1
|
||||
fi
|
||||
# Mark the inactive ZSK as pending removal.
|
||||
file="ns3/`cat delzsk.key`.key"
|
||||
$SETTIME -D now-1h $file > settime.out.test$n 2>&1 || ret=1
|
||||
# Trigger removal of the inactive ZSK and wait until its completion.
|
||||
$RNDCCMD 10.53.0.3 loadkeys delzsk.example 2>&1 | sed 's/^/ns3 /' | cat_i
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
_ret=1
|
||||
$RNDCCMD 10.53.0.3 signing -list delzsk.example > signing.out.2.test$n 2>&1
|
||||
grep "Signing " signing.out.2.test$n > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
if [ `cat signing.out.2.test$n | wc -l` -eq 2 ]; then
|
||||
_ret=0
|
||||
break
|
||||
fi
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
if [ $_ret -ne 0 ]; then
|
||||
echo_i "timed out waiting for key removal"
|
||||
ret=1
|
||||
fi
|
||||
# Check whether key removal caused NSEC3 records to be erroneously created for
|
||||
# glue records due to a secure delegation already being signed by the active key
|
||||
# (i.e. a key other than the one being removed but using the same algorithm).
|
||||
#
|
||||
# For reference:
|
||||
#
|
||||
# $ nsec3hash 12345678 1 10 ns.sub.delzsk.example.
|
||||
# 589R358VSPJUFVAJU949JPVF74D9PTGH (salt=12345678, hash=1, iterations=10)
|
||||
#
|
||||
$DIG $DIGOPTS delzsk.example AXFR @10.53.0.3 > dig.out.ns3.3.test$n || ret=1
|
||||
grep "589R358VSPJUFVAJU949JPVF74D9PTGH" dig.out.ns3.3.test$n > /dev/null 2>&1 && ret=1
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "check that DNAME at apex with NSEC3 is correctly signed (auto-dnssec maintain) ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS txt dname-at-apex-nsec3.example @10.53.0.3 > dig.out.ns3.test$n || ret=1
|
||||
grep "RRSIG NSEC3 7 3 3600" dig.out.ns3.test$n > /dev/null || ret=1
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "checking that DNAME is not treated as a delegation when signing ($n)"
|
||||
ret=0
|
||||
$DIG $DIGOPTS dname-and-txt.secure.example. DNAME @10.53.0.3 > dig.out.ns3.1.test$n || ret=1
|
||||
grep "dname-and-txt.secure.example.*RRSIG.*DNAME" dig.out.ns3.1.test$n > /dev/null 2>&1 || ret=1
|
||||
$DIG $DIGOPTS dname-and-txt.secure.example. TXT @10.53.0.3 > dig.out.ns3.2.test$n || ret=1
|
||||
grep "dname-and-txt.secure.example.*RRSIG.*TXT" dig.out.ns3.2.test$n > /dev/null 2>&1 || ret=1
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
||||
@@ -42,7 +42,8 @@ tac() {
|
||||
}
|
||||
|
||||
convert() {
|
||||
local key=$1 n=$2
|
||||
key=$1
|
||||
n=$2
|
||||
$DSFROMKEY $key >DS.$n
|
||||
grep ' 8 1 ' DS.$n >DS.$n-1
|
||||
grep ' 8 2 ' DS.$n >DS.$n-2
|
||||
|
||||
@@ -33,7 +33,7 @@ testcase() {
|
||||
check_stdout
|
||||
check_stderr
|
||||
if [ "$expect" -ne "$result" ]; then
|
||||
echo "D:exit status does not match $expect"
|
||||
echo_d "exit status does not match $expect"
|
||||
fail
|
||||
fi
|
||||
unset name err out
|
||||
@@ -45,19 +45,19 @@ check_stderr() {
|
||||
else
|
||||
[ -s err.$n ] || return 0
|
||||
fi
|
||||
echo "D:stderr did not match '$err'"
|
||||
sed 's/^/D:/' err.$n
|
||||
echo_d "stderr did not match '$err'"
|
||||
cat err.$n | cat_d
|
||||
fail
|
||||
}
|
||||
|
||||
check_stdout() {
|
||||
cmp out.$n "${out:-empty}" >/dev/null && return
|
||||
echo "D:stdout did not match '$out'"
|
||||
echo_d "stdout did not match '$out'"
|
||||
( echo "wanted"
|
||||
cat "$out"
|
||||
echo "got"
|
||||
cat out.$n
|
||||
) | sed 's/^/D:/'
|
||||
) | cat_d
|
||||
fail
|
||||
}
|
||||
|
||||
|
||||
+2
-6
@@ -9,10 +9,6 @@
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
filter-aaaa { 1.0.0.0/8; };
|
||||
};
|
||||
|
||||
view myview {
|
||||
filter-aaaa-on-v4 yes;
|
||||
view two {
|
||||
max-ncache-ttl 604801;
|
||||
};
|
||||
+4
-5
@@ -9,10 +9,9 @@
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
filter-aaaa-on-v4 yes;
|
||||
view three {
|
||||
max-ncache-ttl 4000000000;
|
||||
};
|
||||
|
||||
view myview {
|
||||
filter-aaaa { none; };
|
||||
view four {
|
||||
max-ncache-ttl -1;
|
||||
};
|
||||
+2
-6
@@ -9,10 +9,6 @@
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
};
|
||||
|
||||
view myview {
|
||||
filter-aaaa { 1.0.0.0/8; };
|
||||
filter-aaaa-on-v4 yes;
|
||||
view four {
|
||||
max-ncache-ttl -1;
|
||||
};
|
||||
+2
-7
@@ -9,11 +9,6 @@
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
filter-aaaa-on-v4 no;
|
||||
};
|
||||
|
||||
view myview {
|
||||
filter-aaaa { 1.0.0.0/8; };
|
||||
filter-aaaa-on-v4 yes;
|
||||
view one {
|
||||
min-cache-ttl 1x;
|
||||
};
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
view one {
|
||||
min-ncache-ttl 1x;
|
||||
};
|
||||
@@ -16,7 +16,7 @@ view two {
|
||||
max-ncache-ttl 86400;
|
||||
};
|
||||
view three {
|
||||
max-ncache-ttl 4000000000;
|
||||
max-ncache-ttl 604800;
|
||||
};
|
||||
view four {
|
||||
max-ncache-ttl 3600s;
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
view one {
|
||||
min-cache-ttl 0;
|
||||
};
|
||||
view two {
|
||||
min-cache-ttl 30;
|
||||
};
|
||||
view three {
|
||||
min-cache-ttl 60;
|
||||
};
|
||||
view four {
|
||||
min-cache-ttl 90s;
|
||||
};
|
||||
view five {
|
||||
min-cache-ttl 1m;
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
view one {
|
||||
min-ncache-ttl 0;
|
||||
};
|
||||
view two {
|
||||
min-ncache-ttl 30;
|
||||
};
|
||||
view three {
|
||||
min-ncache-ttl 60;
|
||||
};
|
||||
view four {
|
||||
min-ncache-ttl 90s;
|
||||
};
|
||||
view five {
|
||||
min-ncache-ttl 1m;
|
||||
};
|
||||
+29
-11
@@ -15,16 +15,18 @@
|
||||
#
|
||||
|
||||
# Find the top of the BIND9 tree.
|
||||
TOP=${SYSTEMTESTTOP:=.}/../../..
|
||||
|
||||
# Make it absolute so that it continues to work after we cd.
|
||||
TOP=`cd $TOP && pwd`
|
||||
TOP=@abs_top_builddir@
|
||||
|
||||
# Default algorithm for testing
|
||||
DEFAULT_ALGORITHM=ECDSAP256SHA256
|
||||
DEFAULT_ALGORITHM_NUMBER=13
|
||||
DEFAULT_BITS=256
|
||||
|
||||
# must be different from DEFAULT_ALGORITHM
|
||||
ALTERNATIVE_ALGORITHM=RSASHA256
|
||||
ALTERNATIVE_ALGORITHM_NUMBER=8
|
||||
ALTERNATIVE_BITS=1280
|
||||
|
||||
ARPANAME=$TOP/bin/tools/arpaname
|
||||
CDS=$TOP/bin/dnssec/dnssec-cds
|
||||
CHECKCONF=$TOP/bin/check/named-checkconf
|
||||
@@ -105,7 +107,7 @@ PARALLELDIRS="acl additional addzone allow-query auth autosign \
|
||||
rrchecker rrl rrsetorder rsabigexponent runtime \
|
||||
serve-stale sfcache smartsign sortlist \
|
||||
spf staticstub statistics statschannel stub synthfromdnssec \
|
||||
tcp tools tsig tsiggss \
|
||||
tcp tools tsig tsiggss ttl \
|
||||
unknown upforwd verify views wildcard \
|
||||
xfer xferquota zero zonechecks"
|
||||
|
||||
@@ -226,23 +228,36 @@ fi
|
||||
SYSTESTDIR="`basename $PWD`"
|
||||
|
||||
echo_i() {
|
||||
echo "$@" | while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$LINE"
|
||||
echo "$@" | while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
echo_ic() {
|
||||
echo "$@" | while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR: $LINE"
|
||||
echo "$@" | while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR: $__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
cat_i() {
|
||||
while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$LINE"
|
||||
while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
echo_d() {
|
||||
echo "$@" | while read __LINE ; do
|
||||
echoinfo "D:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
cat_d() {
|
||||
while read __LINE ; do
|
||||
echoinfo "D:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
digcomp() {
|
||||
output=`$PERL $SYSTEMTESTTOP/digcomp.pl "$@"`
|
||||
result=$?
|
||||
@@ -387,6 +402,9 @@ copy_setports() {
|
||||
-e "s/@DEFAULT_ALGORITHM@/${DEFAULT_ALGORITHM}/g" \
|
||||
-e "s/@DEFAULT_ALGORITHM_NUMBER@/${DEFAULT_ALGORITHM_NUMBER}/g" \
|
||||
-e "s/@DEFAULT_BITS@/${DEFAULT_BITS}/g" \
|
||||
-e "s/@ALTERNATIVE_ALGORITHM@/${ALTERNATIVE_ALGORITHM}/g" \
|
||||
-e "s/@ALTERNATIVE_ALGORITHM_NUMBER@/${ALTERNATIVE_ALGORITHM_NUMBER}/g" \
|
||||
-e "s/@ALTERNATIVE_BITS@/${ALTERNATIVE_BITS}/g" \
|
||||
$1 > $2
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,11 @@ DEFAULT_ALGORITHM=ECDSAP256SHA256
|
||||
DEFAULT_ALGORITHM_NUMBER=13
|
||||
DEFAULT_BITS=256
|
||||
|
||||
# must be different from DEFAULT_ALGORITHM
|
||||
ALTERNATIVE_ALGORITHM=RSASHA256
|
||||
ALTERNATIVE_ALGORITHM_NUMBER=8
|
||||
ALTERNATIVE_BITS=1280
|
||||
|
||||
ARPANAME=$TOP/Build/$VSCONF/arpaname@EXEEXT@
|
||||
CHECKCONF=$TOP/Build/$VSCONF/named-checkconf@EXEEXT@
|
||||
CHECKDS="$PYTHON `cygpath -w $TOP/bin/python/dnssec-checkds.py`"
|
||||
@@ -100,7 +105,7 @@ SEQUENTIALDIRS="acl additional addzone autosign builtin \
|
||||
reclimit redirect resolver rndc rpz rrchecker rrl \
|
||||
rrsetorder rsabigexponent runtime sfcache smartsign sortlist \
|
||||
spf staticstub statistics statschannel stub tcp tkey tsig \
|
||||
tsiggss unknown upforwd verify views wildcard xfer xferquota \
|
||||
tsiggss ttl unknown upforwd verify views wildcard xfer xferquota \
|
||||
zero zonechecks"
|
||||
|
||||
# List of tests that use unique ports (other than 5300 and 9953). These
|
||||
@@ -203,20 +208,20 @@ echoend () {
|
||||
SYSTESTDIR="`basename $PWD`"
|
||||
|
||||
echo_i() {
|
||||
echo "$@" | while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$LINE"
|
||||
echo "$@" | while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
echo_ic() {
|
||||
echo "$@" | while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR: $LINE"
|
||||
echo "$@" | while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR: $__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
cat_i() {
|
||||
while read LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$LINE"
|
||||
while read __LINE ; do
|
||||
echoinfo "I:$SYSTESTDIR:$__LINE"
|
||||
done
|
||||
}
|
||||
|
||||
@@ -367,9 +372,12 @@ copy_setports() {
|
||||
-e "s/${atsign}EXTRAPORT7${atsign}/${EXTRAPORT7}/g" \
|
||||
-e "s/${atsign}EXTRAPORT8${atsign}/${EXTRAPORT8}/g" \
|
||||
-e "s/${atsign}CONTROLPORT${atsign}/${CONTROLPORT}/g" \
|
||||
-e "s/${atsign}DEFAULT_ALGORITM${atsign}/${DEFAULT_ALGORITHM}/g" \
|
||||
-e "s/${atsign}DEFAULT_ALGORITHM${atsign}/${DEFAULT_ALGORITHM}/g" \
|
||||
-e "s/${atsign}DEFAULT_ALGORITHM_NUMBER${atsign}/${DEFAULT_ALGORITHM_NUMBER}/g" \
|
||||
-e "s/${atsign}DEFAULT_BITS${atsign}/${DEFAULT_BITS}/g" \
|
||||
-e "s/${atsign}ALTERNATIVE_ALGORITHM${atsign}/${ALTERNATIVE_ALGORITHM}/g" \
|
||||
-e "s/${atsign}ALTERNATIVE_ALGORITHM_NUMBER${atsign}/${ALTERNATIVE_ALGORITHM_NUMBER}/g" \
|
||||
-e "s/${atsign}ALTERNATIVE_BITS${atsign}/${ALTERNATIVE_BITS}/g" \
|
||||
$1 > $2
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
args=
|
||||
warn=4
|
||||
error=1
|
||||
ok=1
|
||||
retcode=1
|
||||
match=0
|
||||
@@ -127,3 +127,8 @@ $SETTIME -K $dir -I +18mo -D +2y $zsk1 > /dev/null 2>&1
|
||||
zsk2=`$KEYGEN -K $dir -S $zsk1`
|
||||
$SETTIME -K $dir -I +16mo $zsk1 > /dev/null 2>&1
|
||||
ksk1=`$KEYGEN -K $dir -a rsasha1 -3fk example.com`
|
||||
|
||||
# Test 12: Too early KSK deletion
|
||||
dir=12-ksk-deletion
|
||||
ksk1=`$KEYGEN -K $dir -f KSK -a 8 -b 2048 -I +40d -D +40d example.com`
|
||||
ksk2=`$KEYGEN -K $dir -S $ksk1.key example.com`
|
||||
|
||||
@@ -70,6 +70,12 @@ for dir in [0-9][0-9]-*; do
|
||||
ret=1
|
||||
fi
|
||||
|
||||
found=`grep Traceback coverage.$n | wc -l`
|
||||
if [ $found -ne 0 ]; then
|
||||
echo "python exception detected"
|
||||
ret=1
|
||||
fi
|
||||
|
||||
n=`expr $n + 1`
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
@@ -9,14 +9,17 @@
|
||||
# See the COPYRIGHT file distributed with this work for additional
|
||||
# information regarding copyright ownership.
|
||||
|
||||
rm -f */named.memstats
|
||||
rm -f */named.run
|
||||
rm -f */named.conf
|
||||
rm -f delv.out.test*
|
||||
rm -f dig.out.*test*
|
||||
rm -f dig.out.mm.*
|
||||
rm -f dig.out.mn.*
|
||||
rm -f dig.out.nm.*
|
||||
rm -f dig.out.nn.*
|
||||
rm -f ns*/named.lock
|
||||
rm -f ns*/managed-keys.bind*
|
||||
set -e
|
||||
|
||||
rm -f ./*/named.memstats
|
||||
rm -f ./*/named.run
|
||||
rm -f ./*/named.conf
|
||||
rm -f ./delv.out.test*
|
||||
rm -f ./dig.out.*test*
|
||||
rm -f ./dig.out.mm.*
|
||||
rm -f ./dig.out.mn.*
|
||||
rm -f ./dig.out.nm.*
|
||||
rm -f ./dig.out.nn.*
|
||||
rm -f ./ns*/named.lock
|
||||
rm -f ./ns*/managed-keys.bind*
|
||||
rm -f ./ns2/example.db ./ns2/K* ./ns2/keyid ./ns2/keydata
|
||||
|
||||
@@ -35,16 +35,6 @@ foo TXT "testing"
|
||||
foo A 10.0.1.0
|
||||
foo SSHFP 2 1 123456789abcdef67890123456789abcdef67890
|
||||
|
||||
;;
|
||||
;; we are not testing DNSSEC behavior, so we don't care about the semantics
|
||||
;; of the following records.
|
||||
dnskey 300 DNSKEY 256 3 1 (
|
||||
AQPTpWyReB/e9Ii6mVGnakS8hX2zkh/iUYAg
|
||||
+Ge4noWROpTWOIBvm76zeJPWs4Zfqa1IsswD
|
||||
Ix5Mqeg0zwclz59uecKsKyx5w9IhtZ8plc4R
|
||||
b9VIE5x7KNHAYTvTO5d4S8M=
|
||||
)
|
||||
|
||||
; TTL of 3 weeks
|
||||
weeks 1814400 A 10.53.0.2
|
||||
; TTL of 3 days
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# 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.
|
||||
|
||||
# shellcheck source=conf.sh
|
||||
. "$SYSTEMTESTTOP/conf.sh"
|
||||
|
||||
set -e
|
||||
|
||||
keyname=$("$KEYGEN" -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -n zone "dnskey.example.")
|
||||
|
||||
cp example.db.in example.db
|
||||
|
||||
cat "$keyname.key" >> example.db
|
||||
|
||||
echo "$keyname" | sed -e 's/.*[+]//' -e 's/^0*//' > keyid
|
||||
< "$keyname.key" grep -Ev '^;' | cut -f 7- -d ' ' > keydata
|
||||
@@ -9,8 +9,10 @@
|
||||
# See the COPYRIGHT file distributed with this work for additional
|
||||
# information regarding copyright ownership.
|
||||
|
||||
SYSTEMTESTTOP=..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
# shellcheck source=conf.sh
|
||||
. "$SYSTEMTESTTOP/conf.sh"
|
||||
|
||||
set -e
|
||||
|
||||
if $PERL -e 'use Net::DNS;' 2>/dev/null
|
||||
then
|
||||
|
||||
@@ -9,10 +9,14 @@
|
||||
# See the COPYRIGHT file distributed with this work for additional
|
||||
# information regarding copyright ownership.
|
||||
|
||||
SYSTEMTESTTOP=..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
# shellcheck source=conf.sh
|
||||
. "$SYSTEMTESTTOP/conf.sh"
|
||||
|
||||
set -e
|
||||
|
||||
$SHELL clean.sh
|
||||
copy_setports ns1/named.conf.in ns1/named.conf
|
||||
copy_setports ns2/named.conf.in ns2/named.conf
|
||||
copy_setports ns3/named.conf.in ns3/named.conf
|
||||
|
||||
cd ns2 && $SHELL sign.sh
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user