From a6c5280ea59f940be13fd6eb0f94ab8360d3d6c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dag-Erling=20Sm=C3=B8rgrav?= Date: Sat, 12 May 2018 11:55:17 +0000 Subject: [PATCH] Vendor import of Unbound 1.6.6. --- Makefile.in | 91 +- acx_nlnetlabs.m4 | 10 +- cachedb/cachedb.c | 44 +- config.h.in | 3 + configure | 100 +- configure.ac | 46 +- contrib/fastrpz.patch | 6 +- daemon/daemon.c | 9 +- daemon/remote.c | 85 +- daemon/stats.c | 64 +- daemon/unbound.c | 28 +- daemon/worker.c | 20 +- dns64/dns64.c | 1 + dnscrypt/dnscrypt.c | 305 +- dnscrypt/dnscrypt.h | 38 +- dnscrypt/testdata/gencert.sh | 38 + dnscrypt/testdata/keys1/public.key | 1 + dnscrypt/testdata/keys1/secret.key | 1 + dnscrypt/testdata/keys2/public.key | 1 + dnscrypt/testdata/keys2/secret.key | 1 + doc/Changelog | 150 +- doc/README | 2 +- doc/example.conf.in | 16 +- doc/libunbound.3.in | 4 +- doc/unbound-anchor.8.in | 2 +- doc/unbound-checkconf.8.in | 2 +- doc/unbound-control.8.in | 6 +- doc/unbound-host.1.in | 2 +- doc/unbound.8.in | 10 +- doc/unbound.conf.5.in | 82 +- iterator/iterator.c | 20 +- iterator/iterator.h | 6 +- libunbound/libworker.c | 3 +- libunbound/unbound.h | 7 + pythonmod/doc/examples/example0-1.py | 2 +- pythonmod/doc/examples/example0.rst | 2 +- services/authzone.c | 2 +- services/cache/dns.c | 3 + services/cache/infra.c | 2 +- services/listen_dnsport.c | 7 +- services/localzone.c | 111 +- services/localzone.h | 7 +- services/outside_network.c | 11 + sldns/parseutil.c | 9 + sldns/str2wire.c | 11 + sldns/wire2str.c | 10 + smallapp/unbound-anchor.c | 4 +- smallapp/unbound-checkconf.c | 29 +- smallapp/unbound-control.c | 20 +- testcode/do-tests.sh | 26 +- testcode/fake_event.c | 2 +- testcode/mini_tdir.sh | 171 + testcode/petal.c | 4 +- testcode/run_vm.sh | 26 +- testcode/streamtcp.c | 4 +- testcode/unitverify.c | 3 + testdata/00-lint.tdir/00-lint.dsc | 16 + testdata/00-lint.tdir/00-lint.test | 11 + testdata/00-lint.tpkg | Bin 530 -> 0 bytes testdata/01-doc.tdir/01-doc.dsc | 16 + testdata/01-doc.tdir/01-doc.test | 47 + testdata/01-doc.tpkg | Bin 901 -> 0 bytes testdata/02-unittest.tdir/02-unittest.dsc | 16 + testdata/02-unittest.tdir/02-unittest.test | 26 + testdata/02-unittest.tpkg | Bin 640 -> 0 bytes testdata/03-testbound.tdir/03-testbound.dsc | 16 + testdata/03-testbound.tdir/03-testbound.test | 123 + testdata/03-testbound.tpkg | Bin 1345 -> 0 bytes testdata/04-checkconf.tdir/04-checkconf.dsc | 16 + testdata/04-checkconf.tdir/04-checkconf.test | 72 + testdata/04-checkconf.tdir/bad.badfwd | 8 + testdata/04-checkconf.tdir/bad.badif | 17 + testdata/04-checkconf.tdir/bad.badip | 2 + testdata/04-checkconf.tdir/bad.bind | 35 + testdata/04-checkconf.tdir/bad.user | 2 + testdata/04-checkconf.tdir/good.all | 246 + testdata/04-checkconf.tdir/good.ifport | 23 + testdata/04-checkconf.tdir/good.include | 6 + testdata/04-checkconf.tdir/warn.algo | 9 + testdata/04-checkconf.tpkg | Bin 5169 -> 0 bytes testdata/05-asynclook.tdir/05-asynclook.dsc | 16 + testdata/05-asynclook.tdir/05-asynclook.hosts | 12 + testdata/05-asynclook.tdir/05-asynclook.post | 10 + testdata/05-asynclook.tdir/05-asynclook.pre | 20 + testdata/05-asynclook.tdir/05-asynclook.test | 198 + .../05-asynclook.tdir/05-asynclook.testns | 35 + testdata/05-asynclook.tpkg | Bin 1843 -> 0 bytes testdata/06-ianaports.tdir/06-ianaports.dsc | 16 + testdata/06-ianaports.tdir/06-ianaports.test | 27 + testdata/06-ianaports.tpkg | Bin 671 -> 0 bytes testdata/07-confroot.tdir/07-confroot.dsc | 16 + testdata/07-confroot.tdir/07-confroot.test | 287 ++ testdata/07-confroot.tpkg | Bin 1189 -> 0 bytes testdata/08-host-lib.tdir/08-host-lib.dsc | 16 + testdata/08-host-lib.tdir/08-host-lib.hosts | 12 + testdata/08-host-lib.tdir/08-host-lib.post | 10 + testdata/08-host-lib.tdir/08-host-lib.pre | 19 + testdata/08-host-lib.tdir/08-host-lib.test | 194 + testdata/08-host-lib.tdir/08-host-lib.testns | 35 + testdata/08-host-lib.tpkg | Bin 1816 -> 0 bytes .../09-unbound-control.conf | 24 + .../09-unbound-control.dsc | 16 + .../09-unbound-control.post | 13 + .../09-unbound-control.pre | 33 + .../09-unbound-control.test | 406 ++ .../09-unbound-control.testns | 22 + .../09-unbound-control.tdir/bad_control.key | 15 + .../09-unbound-control.tdir/bad_control.pem | 11 + .../09-unbound-control.tdir/bad_server.key | 15 + .../09-unbound-control.tdir/bad_server.pem | 11 + testdata/09-unbound-control.tdir/local_data | 1 + .../09-unbound-control.tdir/local_data_remove | 1 + testdata/09-unbound-control.tdir/local_zones | 2 + .../local_zones_remove | 1 + .../unbound_control.key | 15 + .../unbound_control.pem | 11 + .../unbound_server.key | 15 + .../unbound_server.pem | 11 + testdata/09-unbound-control.tpkg | Bin 7433 -> 0 bytes .../10-unbound-anchor.conf | 8 + .../10-unbound-anchor.dsc | 16 + .../10-unbound-anchor.post | 10 + .../10-unbound-anchor.pre | 33 + .../10-unbound-anchor.test | 162 + .../10-unbound-anchor.testns | 17 + .../10-unbound-anchor.tdir/127.0.0.1/bad.p7s | Bin 0 -> 1165 bytes .../10-unbound-anchor.tdir/127.0.0.1/bad.xml | 10 + .../127.0.0.1/no_more_keys.p7s | Bin 0 -> 1165 bytes .../127.0.0.1/no_more_keys.xml | 16 + .../10-unbound-anchor.tdir/127.0.0.1/root.p7s | Bin 0 -> 1165 bytes .../10-unbound-anchor.tdir/127.0.0.1/root.xml | 10 + .../10-unbound-anchor.tdir/K.+005+37348.ds | 1 + .../10-unbound-anchor.tdir/K.+005+37348.key | 1 + .../K.+005+37348.private | 10 + .../10-unbound-anchor.tdir/keys/test_cert.key | 21 + .../10-unbound-anchor.tdir/keys/test_cert.pem | 15 + .../keys/unbound-control-setup | 167 + .../keys/unbound_control.key | 21 + .../keys/unbound_control.pem | 14 + .../keys/unbound_server.key | 21 + .../keys/unbound_server.pem | 14 + testdata/10-unbound-anchor.tdir/petal.key | 21 + testdata/10-unbound-anchor.tdir/petal.pem | 14 + testdata/10-unbound-anchor.tdir/signit | 10 + testdata/10-unbound-anchor.tdir/test_cert.key | 21 + testdata/10-unbound-anchor.tdir/test_cert.pem | 15 + testdata/10-unbound-anchor.tpkg | Bin 13133 -> 0 bytes testdata/common.sh | 2 +- testdata/ctrl_itr.tdir/bad_control.key | 15 + testdata/ctrl_itr.tdir/bad_control.pem | 11 + testdata/ctrl_itr.tdir/bad_server.key | 15 + testdata/ctrl_itr.tdir/bad_server.pem | 11 + testdata/ctrl_itr.tdir/ctrl_itr.conf | 26 + testdata/ctrl_itr.tdir/ctrl_itr.dsc | 16 + testdata/ctrl_itr.tdir/ctrl_itr.post | 13 + testdata/ctrl_itr.tdir/ctrl_itr.pre | 33 + testdata/ctrl_itr.tdir/ctrl_itr.test | 39 + testdata/ctrl_itr.tdir/ctrl_itr.testns | 22 + testdata/ctrl_itr.tdir/unbound_control.key | 15 + testdata/ctrl_itr.tdir/unbound_control.pem | 11 + testdata/ctrl_itr.tdir/unbound_server.key | 15 + testdata/ctrl_itr.tdir/unbound_server.pem | 11 + testdata/ctrl_itr.tpkg | Bin 5755 -> 0 bytes testdata/ctrl_pipe.tdir/._bad_control.key | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._bad_control.pem | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._bad_server.key | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._bad_server.pem | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.conf | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.dsc | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.post | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.pre | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.test | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._ctrl_pipe.testns | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._unbound_control.key | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._unbound_control.pem | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._unbound_server.key | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/._unbound_server.pem | Bin 0 -> 246 bytes testdata/ctrl_pipe.tdir/bad_control.key | 15 + testdata/ctrl_pipe.tdir/bad_control.pem | 11 + testdata/ctrl_pipe.tdir/bad_server.key | 15 + testdata/ctrl_pipe.tdir/bad_server.pem | 11 + testdata/ctrl_pipe.tdir/ctrl_pipe.conf | 23 + testdata/ctrl_pipe.tdir/ctrl_pipe.dsc | 16 + testdata/ctrl_pipe.tdir/ctrl_pipe.post | 15 + testdata/ctrl_pipe.tdir/ctrl_pipe.pre | 35 + testdata/ctrl_pipe.tdir/ctrl_pipe.test | 61 + testdata/ctrl_pipe.tdir/ctrl_pipe.testns | 22 + testdata/ctrl_pipe.tdir/unbound_control.key | 15 + testdata/ctrl_pipe.tdir/unbound_control.pem | 11 + testdata/ctrl_pipe.tdir/unbound_server.key | 15 + testdata/ctrl_pipe.tdir/unbound_server.pem | 11 + testdata/ctrl_pipe.tpkg | Bin 6451 -> 0 bytes testdata/dnscrypt_cert.tdir/1.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert.tdir/1.key | 1 + testdata/dnscrypt_cert.tdir/1_chacha.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert.tdir/1_salsa.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert.tdir/2.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert.tdir/2.key | 1 + testdata/dnscrypt_cert.tdir/2_chacha.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert.tdir/2_salsa.cert | Bin 0 -> 124 bytes .../dnscrypt_cert.tdir/dnscrypt_cert.conf | 26 + testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc | 16 + .../dnscrypt_cert.tdir/dnscrypt_cert.post | 16 + testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre | 38 + .../dnscrypt_cert.tdir/dnscrypt_cert.test | 108 + .../dnscrypt_cert.tdir/dnscrypt_cert.testns | 26 + testdata/dnscrypt_cert.tdir/precheck.sh | 16 + testdata/dnscrypt_cert.tpkg | Bin 2966 -> 0 bytes testdata/dnscrypt_cert_chacha.tdir/1.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert_chacha.tdir/1.key | 1 + .../dnscrypt_cert_chacha.tdir/1_chacha.cert | Bin 0 -> 124 bytes .../dnscrypt_cert_chacha.tdir/1_salsa.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert_chacha.tdir/2.cert | Bin 0 -> 124 bytes testdata/dnscrypt_cert_chacha.tdir/2.key | 1 + .../dnscrypt_cert_chacha.tdir/2_chacha.cert | Bin 0 -> 124 bytes .../dnscrypt_cert_chacha.tdir/2_salsa.cert | Bin 0 -> 124 bytes .../dnscrypt_cert_chacha.conf | 27 + .../dnscrypt_cert_chacha.dsc | 16 + .../dnscrypt_cert_chacha.post | 17 + .../dnscrypt_cert_chacha.pre | 43 + .../dnscrypt_cert_chacha.test | 130 + .../dnscrypt_cert_chacha.testns | 26 + .../dnscrypt_cert_chacha.tdir/precheck.sh | 16 + testdata/dnscrypt_cert_chacha.tpkg | Bin 3413 -> 0 bytes testdata/dnscrypt_queries.tdir/1.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries.tdir/1.key | 1 + testdata/dnscrypt_queries.tdir/1_chacha.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries.tdir/1_salsa.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries.tdir/2.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries.tdir/2.key | 1 + testdata/dnscrypt_queries.tdir/2_chacha.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries.tdir/2_salsa.cert | Bin 0 -> 124 bytes .../dnscrypt_queries.conf | 26 + .../dnscrypt_queries.dsc | 16 + .../dnscrypt_queries.post | 20 + .../dnscrypt_queries.pre | 53 + .../dnscrypt_queries.test | 107 + .../dnscrypt_queries.testns | 63 + testdata/dnscrypt_queries.tpkg | Bin 2667 -> 0 bytes testdata/dnscrypt_queries_chacha.tdir/1.key | 1 + .../1_chacha.cert | Bin 0 -> 124 bytes .../dnscrypt_queries_chacha.tdir/1_salsa.cert | Bin 0 -> 124 bytes testdata/dnscrypt_queries_chacha.tdir/2.key | 1 + .../2_chacha.cert | Bin 0 -> 124 bytes .../dnscrypt_queries_chacha.tdir/2_salsa.cert | Bin 0 -> 124 bytes .../dnscrypt_queries_chacha.conf | 24 + .../dnscrypt_queries_chacha.dsc | 16 + .../dnscrypt_queries_chacha.post | 17 + .../dnscrypt_queries_chacha.pre | 52 + .../dnscrypt_queries_chacha.test | 101 + .../dnscrypt_queries_chacha.testns | 63 + .../dnscrypt_queries_chacha.tdir/precheck.sh | 27 + testdata/dnscrypt_queries_chacha.tpkg | Bin 2884 -> 0 bytes testdata/edns_cache.tdir/edns_cache.conf | 21 + testdata/edns_cache.tdir/edns_cache.dsc | 16 + testdata/edns_cache.tdir/edns_cache.post | 11 + testdata/edns_cache.tdir/edns_cache.pre | 43 + testdata/edns_cache.tdir/edns_cache.stub1 | 43 + testdata/edns_cache.tdir/edns_cache.stub2 | 33 + testdata/edns_cache.tdir/edns_cache.test | 30 + testdata/edns_cache.tpkg | Bin 1830 -> 0 bytes testdata/edns_lame.tdir/edns_lame.conf | 15 + testdata/edns_lame.tdir/edns_lame.dsc | 16 + testdata/edns_lame.tdir/edns_lame.post | 10 + testdata/edns_lame.tdir/edns_lame.pre | 30 + testdata/edns_lame.tdir/edns_lame.test | 24 + testdata/edns_lame.tdir/edns_lame.testns | 14 + testdata/edns_lame.tpkg | Bin 1374 -> 0 bytes testdata/fwd_ancil.tdir/fwd_ancil.conf | 17 + testdata/fwd_ancil.tdir/fwd_ancil.dsc | 16 + testdata/fwd_ancil.tdir/fwd_ancil.post | 18 + testdata/fwd_ancil.tdir/fwd_ancil.pre | 44 + testdata/fwd_ancil.tdir/fwd_ancil.test | 101 + testdata/fwd_ancil.tdir/fwd_ancil.testns | 14 + testdata/fwd_ancil.tpkg | Bin 1758 -> 0 bytes testdata/fwd_bogus.tdir/fwd_bogus.conf | 26 + testdata/fwd_bogus.tdir/fwd_bogus.dsc | 16 + testdata/fwd_bogus.tdir/fwd_bogus.post | 10 + testdata/fwd_bogus.tdir/fwd_bogus.pre | 32 + testdata/fwd_bogus.tdir/fwd_bogus.test | 48 + testdata/fwd_bogus.tdir/fwd_bogus.testns | 25 + testdata/fwd_bogus.tdir/unbound_control.key | 15 + testdata/fwd_bogus.tdir/unbound_control.pem | 11 + testdata/fwd_bogus.tdir/unbound_server.key | 15 + testdata/fwd_bogus.tdir/unbound_server.pem | 11 + testdata/fwd_bogus.tpkg | Bin 4091 -> 0 bytes testdata/fwd_capsid.tdir/fwd_capsid.conf | 16 + testdata/fwd_capsid.tdir/fwd_capsid.dsc | 16 + testdata/fwd_capsid.tdir/fwd_capsid.post | 10 + testdata/fwd_capsid.tdir/fwd_capsid.pre | 31 + testdata/fwd_capsid.tdir/fwd_capsid.test | 22 + testdata/fwd_capsid.tdir/fwd_capsid.testns | 14 + testdata/fwd_capsid.tpkg | Bin 1373 -> 0 bytes .../fwd_capsid_fallback.conf | 16 + .../fwd_capsid_fallback.dsc | 16 + .../fwd_capsid_fallback.post | 10 + .../fwd_capsid_fallback.pre | 30 + .../fwd_capsid_fallback.test | 22 + .../fwd_capsid_fallback.testns | 15 + testdata/fwd_capsid_fallback.tpkg | Bin 1484 -> 0 bytes .../fwd_capsid_strip.conf | 17 + .../fwd_capsid_strip.dsc | 16 + .../fwd_capsid_strip.post | 11 + .../fwd_capsid_strip.pre | 38 + .../fwd_capsid_strip.test | 23 + .../fwd_capsid_strip.testns | 20 + .../fwd_capsid_strip.testns2 | 18 + testdata/fwd_capsid_strip.tpkg | Bin 1603 -> 0 bytes .../fwd_capsid_white.conf | 18 + .../fwd_capsid_white.dsc | 16 + .../fwd_capsid_white.post | 11 + .../fwd_capsid_white.pre | 38 + .../fwd_capsid_white.test | 23 + .../fwd_capsid_white.testns | 15 + .../fwd_capsid_white.testns2 | 17 + testdata/fwd_capsid_white.tpkg | Bin 1567 -> 0 bytes .../fwd_compress_c00c.conf | 15 + .../fwd_compress_c00c.dsc | 16 + .../fwd_compress_c00c.good | 7 + .../fwd_compress_c00c.post | 10 + .../fwd_compress_c00c.pre | 31 + .../fwd_compress_c00c.test | 49 + .../fwd_compress_c00c.testns | 18 + testdata/fwd_compress_c00c.tpkg | Bin 1858 -> 0 bytes .../fwd_edns_bksec.tdir/fwd_edns_bksec.conf | 23 + .../fwd_edns_bksec.tdir/fwd_edns_bksec.dsc | 16 + .../fwd_edns_bksec.tdir/fwd_edns_bksec.post | 10 + .../fwd_edns_bksec.tdir/fwd_edns_bksec.pre | 31 + .../fwd_edns_bksec.tdir/fwd_edns_bksec.test | 42 + .../fwd_edns_bksec.tdir/fwd_edns_bksec.testns | 73 + testdata/fwd_edns_bksec.tpkg | Bin 2303 -> 0 bytes .../fwd_edns_probe.tdir/fwd_edns_probe.conf | 14 + .../fwd_edns_probe.tdir/fwd_edns_probe.dsc | 16 + .../fwd_edns_probe.tdir/fwd_edns_probe.post | 10 + .../fwd_edns_probe.tdir/fwd_edns_probe.pre | 31 + .../fwd_edns_probe.tdir/fwd_edns_probe.test | 42 + .../fwd_edns_probe.tdir/fwd_edns_probe.testns | 42 + testdata/fwd_edns_probe.tpkg | Bin 1537 -> 0 bytes .../fwd_malformed.tdir/fwd_malformed.conf | 16 + testdata/fwd_malformed.tdir/fwd_malformed.dsc | 16 + .../fwd_malformed.tdir/fwd_malformed.post | 10 + testdata/fwd_malformed.tdir/fwd_malformed.pre | 31 + .../fwd_malformed.tdir/fwd_malformed.test | 22 + .../fwd_malformed.tdir/fwd_malformed.testns | 23 + testdata/fwd_malformed.tpkg | Bin 1481 -> 0 bytes testdata/fwd_no_edns.tdir/fwd_no_edns.conf | 14 + testdata/fwd_no_edns.tdir/fwd_no_edns.dsc | 16 + testdata/fwd_no_edns.tdir/fwd_no_edns.post | 11 + testdata/fwd_no_edns.tdir/fwd_no_edns.pre | 31 + testdata/fwd_no_edns.tdir/fwd_no_edns.test | 22 + testdata/fwd_no_edns.tdir/fwd_no_edns.testns | 26 + testdata/fwd_no_edns.tpkg | Bin 1383 -> 0 bytes testdata/fwd_oneport.tdir/fwd_oneport.conf | 18 + testdata/fwd_oneport.tdir/fwd_oneport.dsc | 16 + testdata/fwd_oneport.tdir/fwd_oneport.post | 18 + testdata/fwd_oneport.tdir/fwd_oneport.pre | 31 + testdata/fwd_oneport.tdir/fwd_oneport.test | 111 + testdata/fwd_oneport.tdir/fwd_oneport.testns | 64 + testdata/fwd_oneport.tpkg | Bin 2039 -> 0 bytes testdata/fwd_tcp.tdir/fwd_tcp.conf | 14 + testdata/fwd_tcp.tdir/fwd_tcp.dsc | 16 + testdata/fwd_tcp.tdir/fwd_tcp.post | 10 + testdata/fwd_tcp.tdir/fwd_tcp.pre | 31 + testdata/fwd_tcp.tdir/fwd_tcp.test | 22 + testdata/fwd_tcp.tdir/fwd_tcp.testns | 14 + testdata/fwd_tcp.tpkg | Bin 1374 -> 0 bytes testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf | 16 + testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc | 16 + testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post | 11 + testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre | 31 + testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test | 22 + testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns | 26 + testdata/fwd_tcp_tc.tpkg | Bin 1371 -> 0 bytes testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.conf | 17 + testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.dsc | 16 + testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.post | 11 + testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.pre | 31 + testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test | 26 + testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns | 26 + testdata/fwd_tcp_tc6.tpkg | Bin 1415 -> 0 bytes testdata/fwd_three.tdir/fwd_three.conf | 17 + testdata/fwd_three.tdir/fwd_three.dsc | 16 + testdata/fwd_three.tdir/fwd_three.post | 21 + testdata/fwd_three.tdir/fwd_three.pre | 31 + testdata/fwd_three.tdir/fwd_three.test | 63 + testdata/fwd_three.tdir/fwd_three.testns | 34 + testdata/fwd_three.tpkg | Bin 1675 -> 0 bytes .../fwd_three_service.conf | 16 + .../fwd_three_service.dsc | 16 + .../fwd_three_service.post | 20 + .../fwd_three_service.pre | 31 + .../fwd_three_service.test | 63 + .../fwd_three_service.testns | 34 + testdata/fwd_three_service.tpkg | Bin 1654 -> 0 bytes .../fwd_ttlexpire.tdir/fwd_ttlexpire.conf | 15 + testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc | 16 + .../fwd_ttlexpire.tdir/fwd_ttlexpire.post | 11 + testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre | 31 + .../fwd_ttlexpire.tdir/fwd_ttlexpire.test | 35 + .../fwd_ttlexpire.tdir/fwd_ttlexpire.testns | 14 + testdata/fwd_ttlexpire.tpkg | Bin 1403 -> 0 bytes testdata/fwd_udp.tdir/fwd_udp.conf | 15 + testdata/fwd_udp.tdir/fwd_udp.dsc | 16 + testdata/fwd_udp.tdir/fwd_udp.post | 10 + testdata/fwd_udp.tdir/fwd_udp.pre | 31 + testdata/fwd_udp.tdir/fwd_udp.test | 22 + testdata/fwd_udp.tdir/fwd_udp.testns | 14 + testdata/fwd_udp.tpkg | Bin 1359 -> 0 bytes testdata/fwd_udptmout.tdir/fwd_udptmout.conf | 16 + testdata/fwd_udptmout.tdir/fwd_udptmout.dsc | 16 + testdata/fwd_udptmout.tdir/fwd_udptmout.post | 19 + testdata/fwd_udptmout.tdir/fwd_udptmout.pre | 31 + testdata/fwd_udptmout.tdir/fwd_udptmout.test | 110 + .../fwd_udptmout.tdir/fwd_udptmout.testns | 64 + testdata/fwd_udptmout.tpkg | Bin 1971 -> 0 bytes testdata/fwd_waitudp.tdir/fwd_waitudp.conf | 16 + testdata/fwd_waitudp.tdir/fwd_waitudp.dsc | 16 + testdata/fwd_waitudp.tdir/fwd_waitudp.post | 21 + testdata/fwd_waitudp.tdir/fwd_waitudp.pre | 31 + testdata/fwd_waitudp.tdir/fwd_waitudp.test | 67 + testdata/fwd_waitudp.tdir/fwd_waitudp.testns | 34 + testdata/fwd_waitudp.tpkg | Bin 1724 -> 0 bytes testdata/fwd_zero.tdir/fwd_zero.conf | 15 + testdata/fwd_zero.tdir/fwd_zero.dsc | 16 + testdata/fwd_zero.tdir/fwd_zero.post | 10 + testdata/fwd_zero.tdir/fwd_zero.pre | 31 + testdata/fwd_zero.tdir/fwd_zero.test | 32 + testdata/fwd_zero.tdir/fwd_zero.testns | 14 + testdata/fwd_zero.tpkg | Bin 1545 -> 0 bytes testdata/hostsfileosx.tdir/hostsfileosx.dsc | 16 + testdata/hostsfileosx.tdir/hostsfileosx.hosts | 15 + testdata/hostsfileosx.tdir/hostsfileosx.post | 9 + testdata/hostsfileosx.tdir/hostsfileosx.pre | 20 + testdata/hostsfileosx.tdir/hostsfileosx.test | 63 + .../hostsfileosx.tdir/hostsfileosx.testns | 35 + testdata/hostsfileosx.tpkg | Bin 1642 -> 0 bytes testdata/local_ds.rpl | 103 + testdata/local_nodefault.rpl | 6 +- .../local_nodefault.tdir/local_nodefault.conf | 27 + .../local_nodefault.tdir/local_nodefault.dsc | 16 + .../local_nodefault.tdir/local_nodefault.post | 11 + .../local_nodefault.tdir/local_nodefault.pre | 31 + .../local_nodefault.tdir/local_nodefault.test | 53 + .../local_nodefault.testns | 24 + testdata/local_nodefault.tpkg | Bin 1598 -> 0 bytes testdata/local_norec.tdir/local_norec.conf | 24 + testdata/local_norec.tdir/local_norec.dsc | 16 + testdata/local_norec.tdir/local_norec.post | 10 + testdata/local_norec.tdir/local_norec.pre | 31 + testdata/local_norec.tdir/local_norec.test | 65 + testdata/local_norec.tdir/local_norec.testns | 24 + testdata/local_norec.tpkg | Bin 1522 -> 0 bytes .../local_nosnoop.tdir/local_nosnoop.conf | 24 + testdata/local_nosnoop.tdir/local_nosnoop.dsc | 16 + .../local_nosnoop.tdir/local_nosnoop.post | 10 + testdata/local_nosnoop.tdir/local_nosnoop.pre | 31 + .../local_nosnoop.tdir/local_nosnoop.test | 75 + .../local_nosnoop.tdir/local_nosnoop.testns | 24 + testdata/local_nosnoop.tpkg | Bin 1620 -> 0 bytes testdata/nss_compile.tdir/nss_compile.dsc | 16 + testdata/nss_compile.tdir/nss_compile.test | 38 + testdata/nss_compile.tpkg | Bin 866 -> 0 bytes testdata/pylib.tdir/pylib.conf | 19 + testdata/pylib.tdir/pylib.dsc | 16 + testdata/pylib.tdir/pylib.lookup.py | 24 + testdata/pylib.tdir/pylib.post | 20 + testdata/pylib.tdir/pylib.pre | 36 + testdata/pylib.tdir/pylib.py | 159 + testdata/pylib.tdir/pylib.test | 40 + testdata/pylib.tdir/pylib.testns | 14 + testdata/pylib.tpkg | Bin 4189 -> 0 bytes testdata/pymod.tdir/pymod.conf | 19 + testdata/pymod.tdir/pymod.dsc | 16 + testdata/pymod.tdir/pymod.post | 20 + testdata/pymod.tdir/pymod.pre | 56 + testdata/pymod.tdir/pymod.py | 159 + testdata/pymod.tdir/pymod.test | 56 + testdata/pymod.tdir/pymod.testns | 24 + testdata/pymod.tpkg | Bin 4072 -> 0 bytes testdata/pymod_thread.tdir/pymod_thread.conf | 19 + testdata/pymod_thread.tdir/pymod_thread.dsc | 16 + testdata/pymod_thread.tdir/pymod_thread.post | 21 + testdata/pymod_thread.tdir/pymod_thread.pre | 56 + testdata/pymod_thread.tdir/pymod_thread.py | 165 + testdata/pymod_thread.tdir/pymod_thread.test | 67 + .../pymod_thread.tdir/pymod_thread.testns | 24 + testdata/pymod_thread.tpkg | Bin 4248 -> 0 bytes testdata/remote-threaded.tdir/bad_control.key | 15 + testdata/remote-threaded.tdir/bad_control.pem | 11 + testdata/remote-threaded.tdir/bad_server.key | 15 + testdata/remote-threaded.tdir/bad_server.pem | 11 + .../remote-threaded.tdir/remote-threaded.conf | 25 + .../remote-threaded.tdir/remote-threaded.dsc | 16 + .../remote-threaded.tdir/remote-threaded.post | 13 + .../remote-threaded.tdir/remote-threaded.pre | 33 + .../remote-threaded.tdir/remote-threaded.test | 308 ++ .../remote-threaded.testns | 22 + .../remote-threaded.tdir/unbound_control.key | 15 + .../remote-threaded.tdir/unbound_control.pem | 11 + .../remote-threaded.tdir/unbound_server.key | 15 + .../remote-threaded.tdir/unbound_server.pem | 11 + testdata/remote-threaded.tpkg | Bin 7038 -> 0 bytes testdata/root_anchor.tdir/root_anchor.dsc | 16 + testdata/root_anchor.tdir/root_anchor.test | 51 + testdata/root_anchor.tpkg | Bin 998 -> 0 bytes testdata/root_hints.tdir/root_hints.dsc | 16 + testdata/root_hints.tdir/root_hints.test | 62 + testdata/root_hints.tpkg | Bin 1036 -> 0 bytes testdata/speed_cache.tdir/makeqs.c | 14 + testdata/speed_cache.tdir/makeqs.sh | 33 + testdata/speed_cache.tdir/speed_cache.conf | 17 + testdata/speed_cache.tdir/speed_cache.dsc | 16 + testdata/speed_cache.tdir/speed_cache.post | 10 + testdata/speed_cache.tdir/speed_cache.pre | 31 + testdata/speed_cache.tdir/speed_cache.test | 79 + testdata/speed_cache.tdir/speed_cache.testns | 14 + testdata/speed_cache.tpkg | Bin 2178 -> 0 bytes testdata/speed_local.tdir/speed_local.conf | 15 + testdata/speed_local.tdir/speed_local.dsc | 16 + testdata/speed_local.tdir/speed_local.post | 9 + testdata/speed_local.tdir/speed_local.pre | 23 + testdata/speed_local.tdir/speed_local.test | 43 + testdata/speed_local.tdir/speed_local.testns | 14 + testdata/speed_local.tpkg | Bin 1367 -> 0 bytes testdata/stat_timer.tdir/stat_timer.conf | 16 + testdata/stat_timer.tdir/stat_timer.dsc | 16 + testdata/stat_timer.tdir/stat_timer.post | 11 + testdata/stat_timer.tdir/stat_timer.pre | 31 + testdata/stat_timer.tdir/stat_timer.test | 40 + testdata/stat_timer.tdir/stat_timer.testns | 14 + testdata/stat_timer.tpkg | Bin 1481 -> 0 bytes testdata/stream_ssl.tdir/stream_ssl.clie.conf | 17 + testdata/stream_ssl.tdir/stream_ssl.dsc | 16 + testdata/stream_ssl.tdir/stream_ssl.post | 10 + testdata/stream_ssl.tdir/stream_ssl.pre | 29 + testdata/stream_ssl.tdir/stream_ssl.serv.conf | 20 + testdata/stream_ssl.tdir/stream_ssl.test | 74 + testdata/stream_ssl.tdir/unbound_control.key | 15 + testdata/stream_ssl.tdir/unbound_control.pem | 11 + testdata/stream_ssl.tdir/unbound_server.key | 15 + testdata/stream_ssl.tdir/unbound_server.pem | 11 + testdata/stream_ssl.tpkg | Bin 3733 -> 0 bytes testdata/stream_tcp.tdir/stream_tcp.conf | 14 + testdata/stream_tcp.tdir/stream_tcp.dsc | 16 + testdata/stream_tcp.tdir/stream_tcp.post | 10 + testdata/stream_tcp.tdir/stream_tcp.pre | 30 + testdata/stream_tcp.tdir/stream_tcp.test | 79 + testdata/stream_tcp.tdir/stream_tcp.testns | 34 + testdata/stream_tcp.tpkg | Bin 1520 -> 0 bytes testdata/stub_udp.tdir/stub_udp.conf | 18 + testdata/stub_udp.tdir/stub_udp.dsc | 16 + testdata/stub_udp.tdir/stub_udp.post | 10 + testdata/stub_udp.tdir/stub_udp.pre | 35 + testdata/stub_udp.tdir/stub_udp.test | 37 + testdata/stub_udp.tdir/stub_udp.testns | 46 + testdata/stub_udp.tpkg | Bin 1540 -> 0 bytes testdata/stub_udp6.tdir/stub_udp6.conf | 19 + testdata/stub_udp6.tdir/stub_udp6.dsc | 16 + testdata/stub_udp6.tdir/stub_udp6.post | 10 + testdata/stub_udp6.tdir/stub_udp6.pre | 31 + testdata/stub_udp6.tdir/stub_udp6.test | 37 + testdata/stub_udp6.tdir/stub_udp6.testns | 46 + testdata/stub_udp6.tpkg | Bin 1529 -> 0 bytes testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf | 15 + testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc | 16 + testdata/tcp_sigpipe.tdir/tcp_sigpipe.post | 10 + testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre | 31 + testdata/tcp_sigpipe.tdir/tcp_sigpipe.test | 45 + testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns | 42 + testdata/tcp_sigpipe.tpkg | Bin 1584 -> 0 bytes util/config_file.c | 22 + util/config_file.h | 12 + util/configlexer.c | 4164 +++++++++-------- util/configlexer.lex | 7 + util/configparser.c | 2265 ++++----- util/configparser.h | 36 +- util/configparser.y | 69 +- util/data/msgreply.c | 4 +- util/fptr_wlist.c | 12 + util/iana_ports.inc | 3 +- util/net_help.c | 117 +- util/net_help.h | 13 + util/netevent.c | 7 + util/shm_side/shm_main.c | 7 + util/storage/lookup3.c | 14 + validator/val_secalgo.c | 45 + validator/val_utils.c | 15 +- 587 files changed, 17136 insertions(+), 3503 deletions(-) create mode 100755 dnscrypt/testdata/gencert.sh create mode 100644 dnscrypt/testdata/keys1/public.key create mode 100644 dnscrypt/testdata/keys1/secret.key create mode 100644 dnscrypt/testdata/keys2/public.key create mode 100644 dnscrypt/testdata/keys2/secret.key create mode 100755 testcode/mini_tdir.sh create mode 100644 testdata/00-lint.tdir/00-lint.dsc create mode 100644 testdata/00-lint.tdir/00-lint.test delete mode 100644 testdata/00-lint.tpkg create mode 100644 testdata/01-doc.tdir/01-doc.dsc create mode 100644 testdata/01-doc.tdir/01-doc.test delete mode 100644 testdata/01-doc.tpkg create mode 100644 testdata/02-unittest.tdir/02-unittest.dsc create mode 100644 testdata/02-unittest.tdir/02-unittest.test delete mode 100644 testdata/02-unittest.tpkg create mode 100644 testdata/03-testbound.tdir/03-testbound.dsc create mode 100644 testdata/03-testbound.tdir/03-testbound.test delete mode 100644 testdata/03-testbound.tpkg create mode 100644 testdata/04-checkconf.tdir/04-checkconf.dsc create mode 100644 testdata/04-checkconf.tdir/04-checkconf.test create mode 100644 testdata/04-checkconf.tdir/bad.badfwd create mode 100644 testdata/04-checkconf.tdir/bad.badif create mode 100644 testdata/04-checkconf.tdir/bad.badip create mode 100644 testdata/04-checkconf.tdir/bad.bind create mode 100644 testdata/04-checkconf.tdir/bad.user create mode 100644 testdata/04-checkconf.tdir/good.all create mode 100644 testdata/04-checkconf.tdir/good.ifport create mode 100644 testdata/04-checkconf.tdir/good.include create mode 100644 testdata/04-checkconf.tdir/warn.algo delete mode 100644 testdata/04-checkconf.tpkg create mode 100644 testdata/05-asynclook.tdir/05-asynclook.dsc create mode 100644 testdata/05-asynclook.tdir/05-asynclook.hosts create mode 100644 testdata/05-asynclook.tdir/05-asynclook.post create mode 100644 testdata/05-asynclook.tdir/05-asynclook.pre create mode 100644 testdata/05-asynclook.tdir/05-asynclook.test create mode 100644 testdata/05-asynclook.tdir/05-asynclook.testns delete mode 100644 testdata/05-asynclook.tpkg create mode 100644 testdata/06-ianaports.tdir/06-ianaports.dsc create mode 100644 testdata/06-ianaports.tdir/06-ianaports.test delete mode 100644 testdata/06-ianaports.tpkg create mode 100644 testdata/07-confroot.tdir/07-confroot.dsc create mode 100644 testdata/07-confroot.tdir/07-confroot.test delete mode 100644 testdata/07-confroot.tpkg create mode 100644 testdata/08-host-lib.tdir/08-host-lib.dsc create mode 100644 testdata/08-host-lib.tdir/08-host-lib.hosts create mode 100644 testdata/08-host-lib.tdir/08-host-lib.post create mode 100644 testdata/08-host-lib.tdir/08-host-lib.pre create mode 100644 testdata/08-host-lib.tdir/08-host-lib.test create mode 100644 testdata/08-host-lib.tdir/08-host-lib.testns delete mode 100644 testdata/08-host-lib.tpkg create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.conf create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.dsc create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.post create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.pre create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.test create mode 100644 testdata/09-unbound-control.tdir/09-unbound-control.testns create mode 100644 testdata/09-unbound-control.tdir/bad_control.key create mode 100644 testdata/09-unbound-control.tdir/bad_control.pem create mode 100644 testdata/09-unbound-control.tdir/bad_server.key create mode 100644 testdata/09-unbound-control.tdir/bad_server.pem create mode 100644 testdata/09-unbound-control.tdir/local_data create mode 100644 testdata/09-unbound-control.tdir/local_data_remove create mode 100644 testdata/09-unbound-control.tdir/local_zones create mode 100644 testdata/09-unbound-control.tdir/local_zones_remove create mode 100644 testdata/09-unbound-control.tdir/unbound_control.key create mode 100644 testdata/09-unbound-control.tdir/unbound_control.pem create mode 100644 testdata/09-unbound-control.tdir/unbound_server.key create mode 100644 testdata/09-unbound-control.tdir/unbound_server.pem delete mode 100644 testdata/09-unbound-control.tpkg create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.dsc create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.post create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.pre create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.test create mode 100644 testdata/10-unbound-anchor.tdir/10-unbound-anchor.testns create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/bad.p7s create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/bad.xml create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.xml create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s create mode 100644 testdata/10-unbound-anchor.tdir/127.0.0.1/root.xml create mode 100644 testdata/10-unbound-anchor.tdir/K.+005+37348.ds create mode 100644 testdata/10-unbound-anchor.tdir/K.+005+37348.key create mode 100644 testdata/10-unbound-anchor.tdir/K.+005+37348.private create mode 100644 testdata/10-unbound-anchor.tdir/keys/test_cert.key create mode 100644 testdata/10-unbound-anchor.tdir/keys/test_cert.pem create mode 100755 testdata/10-unbound-anchor.tdir/keys/unbound-control-setup create mode 100644 testdata/10-unbound-anchor.tdir/keys/unbound_control.key create mode 100644 testdata/10-unbound-anchor.tdir/keys/unbound_control.pem create mode 100644 testdata/10-unbound-anchor.tdir/keys/unbound_server.key create mode 100644 testdata/10-unbound-anchor.tdir/keys/unbound_server.pem create mode 100644 testdata/10-unbound-anchor.tdir/petal.key create mode 100644 testdata/10-unbound-anchor.tdir/petal.pem create mode 100644 testdata/10-unbound-anchor.tdir/signit create mode 100644 testdata/10-unbound-anchor.tdir/test_cert.key create mode 100644 testdata/10-unbound-anchor.tdir/test_cert.pem delete mode 100644 testdata/10-unbound-anchor.tpkg create mode 100644 testdata/ctrl_itr.tdir/bad_control.key create mode 100644 testdata/ctrl_itr.tdir/bad_control.pem create mode 100644 testdata/ctrl_itr.tdir/bad_server.key create mode 100644 testdata/ctrl_itr.tdir/bad_server.pem create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.conf create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.dsc create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.post create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.pre create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.test create mode 100644 testdata/ctrl_itr.tdir/ctrl_itr.testns create mode 100644 testdata/ctrl_itr.tdir/unbound_control.key create mode 100644 testdata/ctrl_itr.tdir/unbound_control.pem create mode 100644 testdata/ctrl_itr.tdir/unbound_server.key create mode 100644 testdata/ctrl_itr.tdir/unbound_server.pem delete mode 100644 testdata/ctrl_itr.tpkg create mode 100644 testdata/ctrl_pipe.tdir/._bad_control.key create mode 100644 testdata/ctrl_pipe.tdir/._bad_control.pem create mode 100644 testdata/ctrl_pipe.tdir/._bad_server.key create mode 100644 testdata/ctrl_pipe.tdir/._bad_server.pem create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.conf create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.dsc create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.post create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.pre create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.test create mode 100644 testdata/ctrl_pipe.tdir/._ctrl_pipe.testns create mode 100644 testdata/ctrl_pipe.tdir/._unbound_control.key create mode 100644 testdata/ctrl_pipe.tdir/._unbound_control.pem create mode 100644 testdata/ctrl_pipe.tdir/._unbound_server.key create mode 100644 testdata/ctrl_pipe.tdir/._unbound_server.pem create mode 100644 testdata/ctrl_pipe.tdir/bad_control.key create mode 100644 testdata/ctrl_pipe.tdir/bad_control.pem create mode 100644 testdata/ctrl_pipe.tdir/bad_server.key create mode 100644 testdata/ctrl_pipe.tdir/bad_server.pem create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.conf create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.dsc create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.post create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.pre create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.test create mode 100644 testdata/ctrl_pipe.tdir/ctrl_pipe.testns create mode 100644 testdata/ctrl_pipe.tdir/unbound_control.key create mode 100644 testdata/ctrl_pipe.tdir/unbound_control.pem create mode 100644 testdata/ctrl_pipe.tdir/unbound_server.key create mode 100644 testdata/ctrl_pipe.tdir/unbound_server.pem delete mode 100644 testdata/ctrl_pipe.tpkg create mode 100644 testdata/dnscrypt_cert.tdir/1.cert create mode 100644 testdata/dnscrypt_cert.tdir/1.key create mode 100644 testdata/dnscrypt_cert.tdir/1_chacha.cert create mode 100644 testdata/dnscrypt_cert.tdir/1_salsa.cert create mode 100644 testdata/dnscrypt_cert.tdir/2.cert create mode 100644 testdata/dnscrypt_cert.tdir/2.key create mode 100644 testdata/dnscrypt_cert.tdir/2_chacha.cert create mode 100644 testdata/dnscrypt_cert.tdir/2_salsa.cert create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.conf create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.post create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.test create mode 100644 testdata/dnscrypt_cert.tdir/dnscrypt_cert.testns create mode 100644 testdata/dnscrypt_cert.tdir/precheck.sh delete mode 100644 testdata/dnscrypt_cert.tpkg create mode 100644 testdata/dnscrypt_cert_chacha.tdir/1.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/1.key create mode 100644 testdata/dnscrypt_cert_chacha.tdir/1_chacha.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/1_salsa.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/2.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/2.key create mode 100644 testdata/dnscrypt_cert_chacha.tdir/2_chacha.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/2_salsa.cert create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.conf create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.dsc create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test create mode 100644 testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.testns create mode 100644 testdata/dnscrypt_cert_chacha.tdir/precheck.sh delete mode 100644 testdata/dnscrypt_cert_chacha.tpkg create mode 100644 testdata/dnscrypt_queries.tdir/1.cert create mode 100644 testdata/dnscrypt_queries.tdir/1.key create mode 100644 testdata/dnscrypt_queries.tdir/1_chacha.cert create mode 100644 testdata/dnscrypt_queries.tdir/1_salsa.cert create mode 100644 testdata/dnscrypt_queries.tdir/2.cert create mode 100644 testdata/dnscrypt_queries.tdir/2.key create mode 100644 testdata/dnscrypt_queries.tdir/2_chacha.cert create mode 100644 testdata/dnscrypt_queries.tdir/2_salsa.cert create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.conf create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.dsc create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.post create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.pre create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.test create mode 100644 testdata/dnscrypt_queries.tdir/dnscrypt_queries.testns delete mode 100644 testdata/dnscrypt_queries.tpkg create mode 100644 testdata/dnscrypt_queries_chacha.tdir/1.key create mode 100644 testdata/dnscrypt_queries_chacha.tdir/1_chacha.cert create mode 100644 testdata/dnscrypt_queries_chacha.tdir/1_salsa.cert create mode 100644 testdata/dnscrypt_queries_chacha.tdir/2.key create mode 100644 testdata/dnscrypt_queries_chacha.tdir/2_chacha.cert create mode 100644 testdata/dnscrypt_queries_chacha.tdir/2_salsa.cert create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.conf create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.dsc create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.post create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.pre create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.test create mode 100644 testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.testns create mode 100644 testdata/dnscrypt_queries_chacha.tdir/precheck.sh delete mode 100644 testdata/dnscrypt_queries_chacha.tpkg create mode 100644 testdata/edns_cache.tdir/edns_cache.conf create mode 100644 testdata/edns_cache.tdir/edns_cache.dsc create mode 100644 testdata/edns_cache.tdir/edns_cache.post create mode 100644 testdata/edns_cache.tdir/edns_cache.pre create mode 100644 testdata/edns_cache.tdir/edns_cache.stub1 create mode 100644 testdata/edns_cache.tdir/edns_cache.stub2 create mode 100644 testdata/edns_cache.tdir/edns_cache.test delete mode 100644 testdata/edns_cache.tpkg create mode 100644 testdata/edns_lame.tdir/edns_lame.conf create mode 100644 testdata/edns_lame.tdir/edns_lame.dsc create mode 100644 testdata/edns_lame.tdir/edns_lame.post create mode 100644 testdata/edns_lame.tdir/edns_lame.pre create mode 100644 testdata/edns_lame.tdir/edns_lame.test create mode 100644 testdata/edns_lame.tdir/edns_lame.testns delete mode 100644 testdata/edns_lame.tpkg create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.conf create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.dsc create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.post create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.pre create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.test create mode 100644 testdata/fwd_ancil.tdir/fwd_ancil.testns delete mode 100644 testdata/fwd_ancil.tpkg create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.conf create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.dsc create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.post create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.pre create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.test create mode 100644 testdata/fwd_bogus.tdir/fwd_bogus.testns create mode 100644 testdata/fwd_bogus.tdir/unbound_control.key create mode 100644 testdata/fwd_bogus.tdir/unbound_control.pem create mode 100644 testdata/fwd_bogus.tdir/unbound_server.key create mode 100644 testdata/fwd_bogus.tdir/unbound_server.pem delete mode 100644 testdata/fwd_bogus.tpkg create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.conf create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.dsc create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.post create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.pre create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.test create mode 100644 testdata/fwd_capsid.tdir/fwd_capsid.testns delete mode 100644 testdata/fwd_capsid.tpkg create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.conf create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.dsc create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.post create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.pre create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.test create mode 100644 testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.testns delete mode 100644 testdata/fwd_capsid_fallback.tpkg create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.conf create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.dsc create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.post create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.pre create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.test create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns create mode 100644 testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns2 delete mode 100644 testdata/fwd_capsid_strip.tpkg create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.conf create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.dsc create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.post create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.pre create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.test create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns create mode 100644 testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns2 delete mode 100644 testdata/fwd_capsid_white.tpkg create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.conf create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.dsc create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.good create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.pre create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test create mode 100644 testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.testns delete mode 100644 testdata/fwd_compress_c00c.tpkg create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.conf create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.dsc create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.post create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.pre create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.test create mode 100644 testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.testns delete mode 100644 testdata/fwd_edns_bksec.tpkg create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.conf create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.dsc create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.post create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.pre create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.test create mode 100644 testdata/fwd_edns_probe.tdir/fwd_edns_probe.testns delete mode 100644 testdata/fwd_edns_probe.tpkg create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.conf create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.dsc create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.post create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.pre create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.test create mode 100644 testdata/fwd_malformed.tdir/fwd_malformed.testns delete mode 100644 testdata/fwd_malformed.tpkg create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.conf create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.dsc create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.post create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.pre create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.test create mode 100644 testdata/fwd_no_edns.tdir/fwd_no_edns.testns delete mode 100644 testdata/fwd_no_edns.tpkg create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.conf create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.dsc create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.post create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.pre create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.test create mode 100644 testdata/fwd_oneport.tdir/fwd_oneport.testns delete mode 100644 testdata/fwd_oneport.tpkg create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.conf create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.dsc create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.post create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.pre create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.test create mode 100644 testdata/fwd_tcp.tdir/fwd_tcp.testns delete mode 100644 testdata/fwd_tcp.tpkg create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test create mode 100644 testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns delete mode 100644 testdata/fwd_tcp_tc.tpkg create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.conf create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.dsc create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.post create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.pre create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test create mode 100644 testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns delete mode 100644 testdata/fwd_tcp_tc6.tpkg create mode 100644 testdata/fwd_three.tdir/fwd_three.conf create mode 100644 testdata/fwd_three.tdir/fwd_three.dsc create mode 100644 testdata/fwd_three.tdir/fwd_three.post create mode 100644 testdata/fwd_three.tdir/fwd_three.pre create mode 100644 testdata/fwd_three.tdir/fwd_three.test create mode 100644 testdata/fwd_three.tdir/fwd_three.testns delete mode 100644 testdata/fwd_three.tpkg create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.conf create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.dsc create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.post create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.pre create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.test create mode 100644 testdata/fwd_three_service.tdir/fwd_three_service.testns delete mode 100644 testdata/fwd_three_service.tpkg create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.conf create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.post create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.test create mode 100644 testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.testns delete mode 100644 testdata/fwd_ttlexpire.tpkg create mode 100644 testdata/fwd_udp.tdir/fwd_udp.conf create mode 100644 testdata/fwd_udp.tdir/fwd_udp.dsc create mode 100644 testdata/fwd_udp.tdir/fwd_udp.post create mode 100644 testdata/fwd_udp.tdir/fwd_udp.pre create mode 100644 testdata/fwd_udp.tdir/fwd_udp.test create mode 100644 testdata/fwd_udp.tdir/fwd_udp.testns delete mode 100644 testdata/fwd_udp.tpkg create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.conf create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.dsc create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.post create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.pre create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.test create mode 100644 testdata/fwd_udptmout.tdir/fwd_udptmout.testns delete mode 100644 testdata/fwd_udptmout.tpkg create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.conf create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.dsc create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.post create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.pre create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.test create mode 100644 testdata/fwd_waitudp.tdir/fwd_waitudp.testns delete mode 100644 testdata/fwd_waitudp.tpkg create mode 100644 testdata/fwd_zero.tdir/fwd_zero.conf create mode 100644 testdata/fwd_zero.tdir/fwd_zero.dsc create mode 100644 testdata/fwd_zero.tdir/fwd_zero.post create mode 100644 testdata/fwd_zero.tdir/fwd_zero.pre create mode 100644 testdata/fwd_zero.tdir/fwd_zero.test create mode 100644 testdata/fwd_zero.tdir/fwd_zero.testns delete mode 100644 testdata/fwd_zero.tpkg create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.dsc create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.hosts create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.post create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.pre create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.test create mode 100644 testdata/hostsfileosx.tdir/hostsfileosx.testns delete mode 100644 testdata/hostsfileosx.tpkg create mode 100644 testdata/local_ds.rpl create mode 100644 testdata/local_nodefault.tdir/local_nodefault.conf create mode 100644 testdata/local_nodefault.tdir/local_nodefault.dsc create mode 100644 testdata/local_nodefault.tdir/local_nodefault.post create mode 100644 testdata/local_nodefault.tdir/local_nodefault.pre create mode 100644 testdata/local_nodefault.tdir/local_nodefault.test create mode 100644 testdata/local_nodefault.tdir/local_nodefault.testns delete mode 100644 testdata/local_nodefault.tpkg create mode 100644 testdata/local_norec.tdir/local_norec.conf create mode 100644 testdata/local_norec.tdir/local_norec.dsc create mode 100644 testdata/local_norec.tdir/local_norec.post create mode 100644 testdata/local_norec.tdir/local_norec.pre create mode 100644 testdata/local_norec.tdir/local_norec.test create mode 100644 testdata/local_norec.tdir/local_norec.testns delete mode 100644 testdata/local_norec.tpkg create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.conf create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.dsc create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.post create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.pre create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.test create mode 100644 testdata/local_nosnoop.tdir/local_nosnoop.testns delete mode 100644 testdata/local_nosnoop.tpkg create mode 100644 testdata/nss_compile.tdir/nss_compile.dsc create mode 100644 testdata/nss_compile.tdir/nss_compile.test delete mode 100644 testdata/nss_compile.tpkg create mode 100644 testdata/pylib.tdir/pylib.conf create mode 100644 testdata/pylib.tdir/pylib.dsc create mode 100755 testdata/pylib.tdir/pylib.lookup.py create mode 100644 testdata/pylib.tdir/pylib.post create mode 100644 testdata/pylib.tdir/pylib.pre create mode 100644 testdata/pylib.tdir/pylib.py create mode 100644 testdata/pylib.tdir/pylib.test create mode 100644 testdata/pylib.tdir/pylib.testns delete mode 100644 testdata/pylib.tpkg create mode 100644 testdata/pymod.tdir/pymod.conf create mode 100644 testdata/pymod.tdir/pymod.dsc create mode 100644 testdata/pymod.tdir/pymod.post create mode 100644 testdata/pymod.tdir/pymod.pre create mode 100644 testdata/pymod.tdir/pymod.py create mode 100644 testdata/pymod.tdir/pymod.test create mode 100644 testdata/pymod.tdir/pymod.testns delete mode 100644 testdata/pymod.tpkg create mode 100644 testdata/pymod_thread.tdir/pymod_thread.conf create mode 100644 testdata/pymod_thread.tdir/pymod_thread.dsc create mode 100644 testdata/pymod_thread.tdir/pymod_thread.post create mode 100644 testdata/pymod_thread.tdir/pymod_thread.pre create mode 100644 testdata/pymod_thread.tdir/pymod_thread.py create mode 100644 testdata/pymod_thread.tdir/pymod_thread.test create mode 100644 testdata/pymod_thread.tdir/pymod_thread.testns delete mode 100644 testdata/pymod_thread.tpkg create mode 100644 testdata/remote-threaded.tdir/bad_control.key create mode 100644 testdata/remote-threaded.tdir/bad_control.pem create mode 100644 testdata/remote-threaded.tdir/bad_server.key create mode 100644 testdata/remote-threaded.tdir/bad_server.pem create mode 100644 testdata/remote-threaded.tdir/remote-threaded.conf create mode 100644 testdata/remote-threaded.tdir/remote-threaded.dsc create mode 100644 testdata/remote-threaded.tdir/remote-threaded.post create mode 100644 testdata/remote-threaded.tdir/remote-threaded.pre create mode 100644 testdata/remote-threaded.tdir/remote-threaded.test create mode 100644 testdata/remote-threaded.tdir/remote-threaded.testns create mode 100644 testdata/remote-threaded.tdir/unbound_control.key create mode 100644 testdata/remote-threaded.tdir/unbound_control.pem create mode 100644 testdata/remote-threaded.tdir/unbound_server.key create mode 100644 testdata/remote-threaded.tdir/unbound_server.pem delete mode 100644 testdata/remote-threaded.tpkg create mode 100644 testdata/root_anchor.tdir/root_anchor.dsc create mode 100644 testdata/root_anchor.tdir/root_anchor.test delete mode 100644 testdata/root_anchor.tpkg create mode 100644 testdata/root_hints.tdir/root_hints.dsc create mode 100644 testdata/root_hints.tdir/root_hints.test delete mode 100644 testdata/root_hints.tpkg create mode 100644 testdata/speed_cache.tdir/makeqs.c create mode 100644 testdata/speed_cache.tdir/makeqs.sh create mode 100644 testdata/speed_cache.tdir/speed_cache.conf create mode 100644 testdata/speed_cache.tdir/speed_cache.dsc create mode 100644 testdata/speed_cache.tdir/speed_cache.post create mode 100644 testdata/speed_cache.tdir/speed_cache.pre create mode 100644 testdata/speed_cache.tdir/speed_cache.test create mode 100644 testdata/speed_cache.tdir/speed_cache.testns delete mode 100644 testdata/speed_cache.tpkg create mode 100644 testdata/speed_local.tdir/speed_local.conf create mode 100644 testdata/speed_local.tdir/speed_local.dsc create mode 100644 testdata/speed_local.tdir/speed_local.post create mode 100644 testdata/speed_local.tdir/speed_local.pre create mode 100644 testdata/speed_local.tdir/speed_local.test create mode 100644 testdata/speed_local.tdir/speed_local.testns delete mode 100644 testdata/speed_local.tpkg create mode 100644 testdata/stat_timer.tdir/stat_timer.conf create mode 100644 testdata/stat_timer.tdir/stat_timer.dsc create mode 100644 testdata/stat_timer.tdir/stat_timer.post create mode 100644 testdata/stat_timer.tdir/stat_timer.pre create mode 100644 testdata/stat_timer.tdir/stat_timer.test create mode 100644 testdata/stat_timer.tdir/stat_timer.testns delete mode 100644 testdata/stat_timer.tpkg create mode 100644 testdata/stream_ssl.tdir/stream_ssl.clie.conf create mode 100644 testdata/stream_ssl.tdir/stream_ssl.dsc create mode 100644 testdata/stream_ssl.tdir/stream_ssl.post create mode 100644 testdata/stream_ssl.tdir/stream_ssl.pre create mode 100644 testdata/stream_ssl.tdir/stream_ssl.serv.conf create mode 100644 testdata/stream_ssl.tdir/stream_ssl.test create mode 100644 testdata/stream_ssl.tdir/unbound_control.key create mode 100644 testdata/stream_ssl.tdir/unbound_control.pem create mode 100644 testdata/stream_ssl.tdir/unbound_server.key create mode 100644 testdata/stream_ssl.tdir/unbound_server.pem delete mode 100644 testdata/stream_ssl.tpkg create mode 100644 testdata/stream_tcp.tdir/stream_tcp.conf create mode 100644 testdata/stream_tcp.tdir/stream_tcp.dsc create mode 100644 testdata/stream_tcp.tdir/stream_tcp.post create mode 100644 testdata/stream_tcp.tdir/stream_tcp.pre create mode 100644 testdata/stream_tcp.tdir/stream_tcp.test create mode 100644 testdata/stream_tcp.tdir/stream_tcp.testns delete mode 100644 testdata/stream_tcp.tpkg create mode 100644 testdata/stub_udp.tdir/stub_udp.conf create mode 100644 testdata/stub_udp.tdir/stub_udp.dsc create mode 100644 testdata/stub_udp.tdir/stub_udp.post create mode 100644 testdata/stub_udp.tdir/stub_udp.pre create mode 100644 testdata/stub_udp.tdir/stub_udp.test create mode 100644 testdata/stub_udp.tdir/stub_udp.testns delete mode 100644 testdata/stub_udp.tpkg create mode 100644 testdata/stub_udp6.tdir/stub_udp6.conf create mode 100644 testdata/stub_udp6.tdir/stub_udp6.dsc create mode 100644 testdata/stub_udp6.tdir/stub_udp6.post create mode 100644 testdata/stub_udp6.tdir/stub_udp6.pre create mode 100644 testdata/stub_udp6.tdir/stub_udp6.test create mode 100644 testdata/stub_udp6.tdir/stub_udp6.testns delete mode 100644 testdata/stub_udp6.tpkg create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.post create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.test create mode 100644 testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns delete mode 100644 testdata/tcp_sigpipe.tpkg diff --git a/Makefile.in b/Makefile.in index 033b026cc911..1c33070336ef 100644 --- a/Makefile.in +++ b/Makefile.in @@ -426,7 +426,7 @@ libunbound/python/libunbound_wrap.c: $(srcdir)/libunbound/python/libunbound.i un # Pyunbound python unbound wrapper _unbound.la: libunbound_wrap.lo libunbound.la - $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) L. -L.libs -lunbound + $(LIBTOOL) --tag=CC --mode=link $(CC) $(RUNTIME_PATH) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -module -avoid-version -no-undefined -shared -o $@ libunbound_wrap.lo -rpath $(PYTHON_SITE_PKG) -L. -L.libs -lunbound util/config_file.c: util/configparser.h util/configlexer.c: $(srcdir)/util/configlexer.lex util/configparser.h @@ -735,9 +735,9 @@ iter_utils.lo iter_utils.o: $(srcdir)/iterator/iter_utils.c config.h $(srcdir)/i $(srcdir)/sldns/str2wire.h listen_dnsport.lo listen_dnsport.o: $(srcdir)/services/listen_dnsport.c config.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/services/outside_network.h \ - $(srcdir)/util/rbtree.h $(srcdir)/util/log.h $(srcdir)/util/config_file.h \ - $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ + $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/sldns/sbuffer.h localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/services/localzone.h \ $(srcdir)/util/rbtree.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/data/msgreply.h \ @@ -749,8 +749,8 @@ localzone.lo localzone.o: $(srcdir)/services/localzone.c config.h $(srcdir)/serv $(srcdir)/util/as112.h mesh.lo mesh.o: $(srcdir)/services/mesh.c config.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ - $(srcdir)/util/log.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/module.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/modstack.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/dns.h $(srcdir)/util/net_help.h \ $(srcdir)/util/regional.h $(srcdir)/util/data/msgencode.h $(srcdir)/util/timehist.h $(srcdir)/util/fptr_wlist.h \ @@ -777,12 +777,12 @@ view.lo view.o: $(srcdir)/services/view.c config.h $(srcdir)/services/view.h $(s outbound_list.lo outbound_list.o: $(srcdir)/services/outbound_list.c config.h \ $(srcdir)/services/outbound_list.h $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h outside_network.lo outside_network.o: $(srcdir)/services/outside_network.c config.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h $(srcdir)/util/netevent.h \ $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/infra.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/dnstree.h \ + $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/net_help.h $(srcdir)/util/random.h $(srcdir)/util/fptr_wlist.h \ @@ -830,7 +830,7 @@ authzone.lo authzone.o: $(srcdir)/services/authzone.c config.h $(srcdir)/service $(srcdir)/validator/val_secalgo.h fptr_wlist.lo fptr_wlist.o: $(srcdir)/util/fptr_wlist.c config.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h \ @@ -851,8 +851,8 @@ locks.lo locks.o: $(srcdir)/util/locks.c config.h $(srcdir)/util/locks.h $(srcdi log.lo log.o: $(srcdir)/util/log.c config.h $(srcdir)/util/log.h $(srcdir)/util/locks.h $(srcdir)/sldns/sbuffer.h mini_event.lo mini_event.o: $(srcdir)/util/mini_event.c config.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h \ $(srcdir)/util/fptr_wlist.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h @@ -860,8 +860,8 @@ module.lo module.o: $(srcdir)/util/module.c config.h $(srcdir)/util/module.h $(s $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/wire2str.h netevent.lo netevent.o: $(srcdir)/util/netevent.c config.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ - $(srcdir)/util/net_help.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/ub_event.h $(srcdir)/util/net_help.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/sldns/sbuffer.h \ @@ -876,7 +876,7 @@ net_help.lo net_help.o: $(srcdir)/util/net_help.c config.h $(srcdir)/util/net_he random.lo random.o: $(srcdir)/util/random.c config.h $(srcdir)/util/random.h $(srcdir)/util/log.h rbtree.lo rbtree.o: $(srcdir)/util/rbtree.c config.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h @@ -897,19 +897,19 @@ slabhash.lo slabhash.o: $(srcdir)/util/storage/slabhash.c config.h $(srcdir)/uti timehist.lo timehist.o: $(srcdir)/util/timehist.c config.h $(srcdir)/util/timehist.h $(srcdir)/util/log.h tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h \ $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \ $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \ $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \ $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \ - $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/module.h \ + $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ + $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \ $(srcdir)/services/modstack.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h winsock_event.lo winsock_event.o: $(srcdir)/util/winsock_event.c config.h autotrust.lo autotrust.o: $(srcdir)/validator/autotrust.c config.h $(srcdir)/validator/autotrust.h \ @@ -1040,7 +1040,9 @@ checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/u $(srcdir)/testcode/checklocks.h dnscrypt.lo dnscrypt.o: $(srcdir)/dnscrypt/dnscrypt.c config.h $(srcdir)/sldns/sbuffer.h \ $(srcdir)/util/config_file.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/netevent.h \ - $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h + $(srcdir)/dnscrypt/dnscrypt.h $(srcdir)/dnscrypt/cert.h \ + $(srcdir)/util/locks.h $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ + $(srcdir)/util/storage/lookup3.h ipsecmod.lo ipsecmod.o: $(srcdir)/ipsecmod/ipsecmod.c config.h $(srcdir)/ipsecmod/ipsecmod.h \ $(srcdir)/util/module.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h \ @@ -1174,9 +1176,10 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/validator/val_kcache.h + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h unbound.lo unbound.o: $(srcdir)/daemon/unbound.c config.h $(srcdir)/util/log.h $(srcdir)/daemon/daemon.h \ $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ $(srcdir)/daemon/remote.h \ @@ -1207,16 +1210,15 @@ worker.lo worker.o: $(srcdir)/daemon/worker.c config.h $(srcdir)/util/log.h $(sr $(srcdir)/libunbound/libworker.h $(srcdir)/sldns/wire2str.h $(srcdir)/util/shm_side/shm_main.h testbound.lo testbound.o: $(srcdir)/testcode/testbound.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/rbtree.h \ - $(srcdir)/testcode/fake_event.h $(srcdir)/daemon/remote.h \ - $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/util/log.h \ - $(srcdir)/daemon/daemon.h $(srcdir)/util/locks.h $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h \ - $(srcdir)/services/listen_dnsport.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/module.h \ - $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/util/tube.h \ - $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \ + $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/daemon/remote.h \ + $(srcdir)/util/config_file.h $(srcdir)/sldns/keyraw.h $(srcdir)/daemon/unbound.c $(srcdir)/daemon/daemon.h \ + $(srcdir)/util/alloc.h $(srcdir)/services/modstack.h \ + $(srcdir)/util/storage/slabhash.h $(srcdir)/util/storage/lruhash.h $(srcdir)/services/listen_dnsport.h \ + $(srcdir)/services/cache/rrset.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/services/cache/infra.h \ + $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/fptr_wlist.h \ + $(srcdir)/util/module.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/net_help.h $(srcdir)/util/ub_event.h testpkts.lo testpkts.o: $(srcdir)/testcode/testpkts.c config.h $(srcdir)/testcode/testpkts.h \ $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/sldns/sbuffer.h $(srcdir)/sldns/rrdef.h $(srcdir)/sldns/pkthdr.h \ $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/wire2str.h @@ -1266,17 +1268,19 @@ stats.lo stats.o: $(srcdir)/daemon/stats.c config.h $(srcdir)/daemon/stats.h $(s $(srcdir)/daemon/daemon.h $(srcdir)/services/modstack.h \ $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h $(srcdir)/services/outside_network.h \ $(srcdir)/services/listen_dnsport.h $(srcdir)/util/config_file.h $(srcdir)/util/tube.h $(srcdir)/util/net_help.h \ - $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/cache/rrset.h \ - $(srcdir)/util/storage/slabhash.h $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h \ - $(srcdir)/util/rtt.h $(srcdir)/validator/val_kcache.h + $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/iterator/iterator.h \ + $(srcdir)/services/outbound_list.h $(srcdir)/services/cache/rrset.h $(srcdir)/util/storage/slabhash.h \ + $(srcdir)/services/cache/infra.h $(srcdir)/util/storage/dnstree.h $(srcdir)/util/rtt.h \ + $(srcdir)/validator/val_kcache.h replay.lo replay.o: $(srcdir)/testcode/replay.c config.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ $(srcdir)/util/config_file.h $(srcdir)/testcode/replay.h $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/testcode/testpkts.h \ - $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h $(srcdir)/sldns/rrdef.h + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h \ + $(srcdir)/testcode/testpkts.h $(srcdir)/util/rbtree.h $(srcdir)/testcode/fake_event.h $(srcdir)/sldns/str2wire.h \ + $(srcdir)/sldns/rrdef.h fake_event.lo fake_event.o: $(srcdir)/testcode/fake_event.c config.h $(srcdir)/testcode/fake_event.h \ $(srcdir)/util/netevent.h $(srcdir)/dnscrypt/dnscrypt.h \ - $(srcdir)/dnscrypt/cert.h $(srcdir)/util/net_help.h $(srcdir)/util/log.h $(srcdir)/util/data/msgparse.h \ - $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ + $(srcdir)/dnscrypt/cert.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/net_help.h \ + $(srcdir)/util/data/msgparse.h $(srcdir)/util/storage/lruhash.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h \ $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgencode.h \ $(srcdir)/util/data/dname.h $(srcdir)/util/config_file.h $(srcdir)/services/listen_dnsport.h \ $(srcdir)/services/outside_network.h $(srcdir)/util/rbtree.h \ @@ -1309,7 +1313,8 @@ unbound-checkconf.lo unbound-checkconf.o: $(srcdir)/smallapp/unbound-checkconf.c $(srcdir)/iterator/iterator.h $(srcdir)/services/outbound_list.h $(srcdir)/iterator/iter_fwd.h \ $(srcdir)/util/rbtree.h $(srcdir)/iterator/iter_hints.h $(srcdir)/util/storage/dnstree.h \ $(srcdir)/validator/validator.h $(srcdir)/validator/val_utils.h $(srcdir)/services/localzone.h \ - $(srcdir)/services/view.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER) + $(srcdir)/services/view.h $(srcdir)/respip/respip.h $(srcdir)/sldns/sbuffer.h $(PYTHONMOD_HEADER) \ + $(srcdir)/edns-subnet/subnet-whitelist.h worker_cb.lo worker_cb.o: $(srcdir)/smallapp/worker_cb.c config.h $(srcdir)/libunbound/context.h \ $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/alloc.h $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h \ $(srcdir)/libunbound/unbound.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \ diff --git a/acx_nlnetlabs.m4 b/acx_nlnetlabs.m4 index a6c174f1c421..8eccc15b0d80 100644 --- a/acx_nlnetlabs.m4 +++ b/acx_nlnetlabs.m4 @@ -688,8 +688,8 @@ AC_DEFUN([ACX_SSL_CHECKS], [ # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" BAKSSLLIBS="$LIBSSL_LIBS" - LIBS="$LIBS -lgdi32" - LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32" + LIBS="$LIBS -lgdi32 -lws2_32" + LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" AC_MSG_CHECKING([if -lcrypto needs -lgdi32]) AC_TRY_LINK([], [ int HMAC_Update(void); @@ -839,7 +839,11 @@ dnl see if on windows if test "$ac_cv_header_windows_h" = "yes"; then AC_DEFINE(USE_WINSOCK, 1, [Whether the windows socket API is used]) USE_WINSOCK="1" - LIBS="$LIBS -lws2_32" + if echo $LIBS | grep 'lws2_32' >/dev/null; then + : + else + LIBS="$LIBS -lws2_32" + fi fi ], dnl no quick getaddrinfo, try mingw32 and winsock2 library. diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c index 9a63101edee3..f5f6937eeeed 100644 --- a/cachedb/cachedb.c +++ b/cachedb/cachedb.c @@ -61,6 +61,8 @@ /** the unit test testframe for cachedb, its module state contains * a cache for a couple queries (in memory). */ struct testframe_moddata { + /** lock for mutex */ + lock_basic_type lock; /** key for single stored data element, NULL if none */ char* stored_key; /** data for single stored data element, NULL if none */ @@ -72,14 +74,18 @@ struct testframe_moddata { static int testframe_init(struct module_env* env, struct cachedb_env* cachedb_env) { + struct testframe_moddata* d; (void)env; verbose(VERB_ALGO, "testframe_init"); - cachedb_env->backend_data = (void*)calloc(1, + d = (struct testframe_moddata*)calloc(1, sizeof(struct testframe_moddata)); + cachedb_env->backend_data = (void*)d; if(!cachedb_env->backend_data) { log_err("out of memory"); return 0; } + lock_basic_init(&d->lock); + lock_protect(&d->lock, d, sizeof(*d)); return 1; } @@ -92,6 +98,7 @@ testframe_deinit(struct module_env* env, struct cachedb_env* cachedb_env) verbose(VERB_ALGO, "testframe_deinit"); if(!d) return; + lock_basic_destroy(&d->lock); free(d->stored_key); free(d->stored_data); free(d); @@ -105,17 +112,22 @@ testframe_lookup(struct module_env* env, struct cachedb_env* cachedb_env, cachedb_env->backend_data; (void)env; verbose(VERB_ALGO, "testframe_lookup of %s", key); + lock_basic_lock(&d->lock); if(d->stored_key && strcmp(d->stored_key, key) == 0) { - if(d->stored_datalen > sldns_buffer_capacity(result_buffer)) + if(d->stored_datalen > sldns_buffer_capacity(result_buffer)) { + lock_basic_unlock(&d->lock); return 0; /* too large */ + } verbose(VERB_ALGO, "testframe_lookup found %d bytes", (int)d->stored_datalen); sldns_buffer_clear(result_buffer); sldns_buffer_write(result_buffer, d->stored_data, d->stored_datalen); sldns_buffer_flip(result_buffer); + lock_basic_unlock(&d->lock); return 1; } + lock_basic_unlock(&d->lock); return 0; } @@ -126,6 +138,7 @@ testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, struct testframe_moddata* d = (struct testframe_moddata*) cachedb_env->backend_data; (void)env; + lock_basic_lock(&d->lock); verbose(VERB_ALGO, "testframe_store %s (%d bytes)", key, (int)data_len); /* free old data element (if any) */ @@ -137,6 +150,7 @@ testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, d->stored_data = memdup(data, data_len); if(!d->stored_data) { + lock_basic_unlock(&d->lock); log_err("out of memory"); return; } @@ -146,8 +160,10 @@ testframe_store(struct module_env* env, struct cachedb_env* cachedb_env, free(d->stored_data); d->stored_data = NULL; d->stored_datalen = 0; + lock_basic_unlock(&d->lock); return; } + lock_basic_unlock(&d->lock); /* (key,data) successfully stored */ } @@ -170,16 +186,17 @@ cachedb_find_backend(const char* str) static int cachedb_apply_cfg(struct cachedb_env* cachedb_env, struct config_file* cfg) { - const char* backend_str = "testframe"; /* TODO get from cfg */ - (void)cfg; /* need this until the TODO is implemented */ - if(backend_str && backend_str[0]) { - cachedb_env->backend = cachedb_find_backend(backend_str); - if(!cachedb_env->backend) { - log_err("cachedb: cannot find backend name '%s", - backend_str); - return 0; - } + const char* backend_str = cfg->cachedb_backend; + + /* If unspecified we use the in-memory test DB. */ + if(!backend_str) + backend_str = "testframe"; + cachedb_env->backend = cachedb_find_backend(backend_str); + if(!cachedb_env->backend) { + log_err("cachedb: cannot find backend name '%s'", backend_str); + return 0; } + /* TODO see if more configuration needs to be applied or not */ return 1; } @@ -277,9 +294,10 @@ calc_hash(struct module_qstate* qstate, char* buf, size_t len) size_t clen = 0; uint8_t hash[CACHEDB_HASHSIZE/8]; const char* hex = "0123456789ABCDEF"; - const char* secret = "default"; /* TODO: from qstate->env->cfg */ + const char* secret = qstate->env->cfg->cachedb_secret ? + qstate->env->cfg->cachedb_secret : "default"; size_t i; - + /* copy the hash info into the clear buffer */ if(clen + qstate->qinfo.qname_len < sizeof(clear)) { memmove(clear+clen, qstate->qinfo.qname, diff --git a/config.h.in b/config.h.in index 04aa762c58a9..16a7b0281a1f 100644 --- a/config.h.in +++ b/config.h.in @@ -296,6 +296,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_NETTLE_DSA_COMPAT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_NETTLE_EDDSA_H + /* Use libnss for crypto */ #undef HAVE_NSS diff --git a/configure b/configure index 9b8496c4b859..2821d3209fbd 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for unbound 1.6.5. +# Generated by GNU Autoconf 2.69 for unbound 1.6.6. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='unbound' PACKAGE_TARNAME='unbound' -PACKAGE_VERSION='1.6.5' -PACKAGE_STRING='unbound 1.6.5' +PACKAGE_VERSION='1.6.6' +PACKAGE_STRING='unbound 1.6.6' PACKAGE_BUGREPORT='unbound-bugs@nlnetlabs.nl' PACKAGE_URL='' @@ -1437,7 +1437,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures unbound 1.6.5 to adapt to many kinds of systems. +\`configure' configures unbound 1.6.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1502,7 +1502,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of unbound 1.6.5:";; + short | recursive ) echo "Configuration of unbound 1.6.6:";; esac cat <<\_ACEOF @@ -1714,7 +1714,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -unbound configure 1.6.5 +unbound configure 1.6.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2423,7 +2423,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by unbound $as_me 1.6.5, which was +It was created by unbound $as_me 1.6.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2775,11 +2775,11 @@ UNBOUND_VERSION_MAJOR=1 UNBOUND_VERSION_MINOR=6 -UNBOUND_VERSION_MICRO=5 +UNBOUND_VERSION_MICRO=6 LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=4 +LIBUNBOUND_REVISION=5 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -2835,6 +2835,7 @@ LIBUNBOUND_AGE=5 # 1.6.3 had 7:2:5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 +# 1.6.6 had 7:5:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -16464,7 +16465,9 @@ if test x"$ax_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - LIBS="$PTHREAD_LIBS $LIBS" + if test -n "$PTHREAD_LIBS"; then + LIBS="$PTHREAD_LIBS $LIBS" + fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" ub_have_pthreads=yes @@ -16894,8 +16897,16 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu $as_echo "#define HAVE_PYTHON 1" >>confdefs.h - LIBS="$PYTHON_LDFLAGS $LIBS" - CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + if test -n "$LIBS"; then + LIBS="$PYTHON_LDFLAGS $LIBS" + else + LIBS="$PYTHON_LDFLAGS" + fi + if test -n "$CPPFLAGS"; then + CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + else + CPPFLAGS="$PYTHON_CPPFLAGS" + fi ub_have_python=yes PC_PY_DEPENDENCY="python" @@ -17250,8 +17261,8 @@ $as_echo "no" >&6; } # check if -lwsock32 or -lgdi32 are needed. BAKLIBS="$LIBS" BAKSSLLIBS="$LIBSSL_LIBS" - LIBS="$LIBS -lgdi32" - LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32" + LIBS="$LIBS -lgdi32 -lws2_32" + LIBSSL_LIBS="$LIBSSL_LIBS -lgdi32 -lws2_32" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -lcrypto needs -lgdi32" >&5 $as_echo_n "checking if -lcrypto needs -lgdi32... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18053,6 +18064,7 @@ case "$enable_dsa" in ;; *) # detect if DSA is supported, and turn it off if not. + if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then ac_fn_c_check_func "$LINENO" "DSA_SIG_new" "ac_cv_func_DSA_SIG_new" if test "x$ac_cv_func_DSA_SIG_new" = xyes; then : @@ -18067,6 +18079,13 @@ else fi fi + else + +cat >>confdefs.h <<_ACEOF +#define USE_DSA 1 +_ACEOF + + fi ;; esac @@ -18096,11 +18115,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF if test $ac_have_decl = 1; then : - -cat >>confdefs.h <<_ACEOF -#define USE_ED25519 1 -_ACEOF - use_ed25519="yes" else @@ -18108,6 +18122,28 @@ else fi fi + fi + if test $USE_NETTLE = "yes"; then + for ac_header in nettle/eddsa.h +do : + ac_fn_c_check_header_compile "$LINENO" "nettle/eddsa.h" "ac_cv_header_nettle_eddsa_h" "$ac_includes_default +" +if test "x$ac_cv_header_nettle_eddsa_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NETTLE_EDDSA_H 1 +_ACEOF + use_ed25519="yes" +fi + +done + + fi + if test $use_ed25519 = "yes"; then + +cat >>confdefs.h <<_ACEOF +#define USE_ED25519 1 +_ACEOF + fi ;; esac @@ -18621,7 +18657,12 @@ if test x_$enable_static_exe = x_yes; then if test "$on_mingw" = yes; then staticexe="-all-static" # for static compile, include gdi32 and zlib here. - LIBS="$LIBS -lgdi32 -lz" + if echo $LIBS | grep 'lgdi32' >/dev/null; then + : + else + LIBS="$LIBS -lgdi32" + fi + LIBS="$LIBS -lz" fi fi @@ -18979,7 +19020,11 @@ if test "$ac_cv_header_windows_h" = "yes"; then $as_echo "#define USE_WINSOCK 1" >>confdefs.h USE_WINSOCK="1" - LIBS="$LIBS -lws2_32" + if echo $LIBS | grep 'lws2_32' >/dev/null; then + : + else + LIBS="$LIBS -lws2_32" + fi fi else @@ -20633,7 +20678,12 @@ $as_echo "#define OMITTED__D_LARGEFILE_SOURCE_1 1" >>confdefs.h fi -LDFLAGS="$LATE_LDFLAGS $LDFLAGS" +if test -n "$LATE_LDFLAGS"; then + LDFLAGS="$LATE_LDFLAGS $LDFLAGS" +fi +# remove start spaces +LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'` +LIBS=`echo "$LIBS"|sed -e 's/^ *//'` cat >>confdefs.h <<_ACEOF @@ -20643,7 +20693,7 @@ _ACEOF -version=1.6.5 +version=1.6.6 date=`date +'%b %e, %Y'` @@ -21162,7 +21212,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by unbound $as_me 1.6.5, which was +This file was extended by unbound $as_me 1.6.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21228,7 +21278,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -unbound config.status 1.6.5 +unbound config.status 1.6.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index ccbb33d49c41..23a318ee5b77 100644 --- a/configure.ac +++ b/configure.ac @@ -11,14 +11,14 @@ sinclude(dnscrypt/dnscrypt.m4) # must be numbers. ac_defun because of later processing m4_define([VERSION_MAJOR],[1]) m4_define([VERSION_MINOR],[6]) -m4_define([VERSION_MICRO],[5]) +m4_define([VERSION_MICRO],[6]) AC_INIT(unbound, m4_defn([VERSION_MAJOR]).m4_defn([VERSION_MINOR]).m4_defn([VERSION_MICRO]), unbound-bugs@nlnetlabs.nl, unbound) AC_SUBST(UNBOUND_VERSION_MAJOR, [VERSION_MAJOR]) AC_SUBST(UNBOUND_VERSION_MINOR, [VERSION_MINOR]) AC_SUBST(UNBOUND_VERSION_MICRO, [VERSION_MICRO]) LIBUNBOUND_CURRENT=7 -LIBUNBOUND_REVISION=4 +LIBUNBOUND_REVISION=5 LIBUNBOUND_AGE=5 # 1.0.0 had 0:12:0 # 1.0.1 had 0:13:0 @@ -74,6 +74,7 @@ LIBUNBOUND_AGE=5 # 1.6.3 had 7:2:5 # 1.6.4 had 7:3:5 # 1.6.5 had 7:4:5 +# 1.6.6 had 7:5:5 # Current -- the number of the binary API that we're implementing # Revision -- which iteration of the implementation of the binary @@ -456,7 +457,9 @@ ub_have_pthreads=no if test x_$withval != x_no; then AX_PTHREAD([ AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]) - LIBS="$PTHREAD_LIBS $LIBS" + if test -n "$PTHREAD_LIBS"; then + LIBS="$PTHREAD_LIBS $LIBS" + fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" CC="$PTHREAD_CC" ub_have_pthreads=yes @@ -558,8 +561,16 @@ if test x_$ub_test_python != x_no; then AC_SUBST(PY_MAJOR_VERSION) # Have Python AC_DEFINE(HAVE_PYTHON,1,[Define if you have Python libraries and header files.]) - LIBS="$PYTHON_LDFLAGS $LIBS" - CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + if test -n "$LIBS"; then + LIBS="$PYTHON_LDFLAGS $LIBS" + else + LIBS="$PYTHON_LDFLAGS" + fi + if test -n "$CPPFLAGS"; then + CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" + else + CPPFLAGS="$PYTHON_CPPFLAGS" + fi ub_have_python=yes PC_PY_DEPENDENCY="python" AC_SUBST(PC_PY_DEPENDENCY) @@ -912,10 +923,14 @@ case "$enable_dsa" in ;; *) # detect if DSA is supported, and turn it off if not. + if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_FUNC(DSA_SIG_new, [ AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) ], [if test "x$enable_dsa" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support DSA and you used --enable-dsa.]) fi ]) + else + AC_DEFINE_UNQUOTED([USE_DSA], [1], [Define this to enable DSA support.]) + fi ;; esac @@ -927,13 +942,18 @@ case "$enable_ed25519" in *) if test $USE_NSS = "no" -a $USE_NETTLE = "no"; then AC_CHECK_DECLS([NID_ED25519], [ - AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.]) use_ed25519="yes" ], [ if test "x$enable_ed25519" = "xyes"; then AC_MSG_ERROR([OpenSSL does not support ED25519 and you used --enable-ed25519.]) fi ], [AC_INCLUDES_DEFAULT #include ]) fi + if test $USE_NETTLE = "yes"; then + AC_CHECK_HEADERS([nettle/eddsa.h], use_ed25519="yes",, [AC_INCLUDES_DEFAULT]) + fi + if test $use_ed25519 = "yes"; then + AC_DEFINE_UNQUOTED([USE_ED25519], [1], [Define this to enable ED25519 support.]) + fi ;; esac @@ -1106,7 +1126,12 @@ if test x_$enable_static_exe = x_yes; then if test "$on_mingw" = yes; then staticexe="-all-static" # for static compile, include gdi32 and zlib here. - LIBS="$LIBS -lgdi32 -lz" + if echo $LIBS | grep 'lgdi32' >/dev/null; then + : + else + LIBS="$LIBS -lgdi32" + fi + LIBS="$LIBS -lz" fi fi @@ -1448,7 +1473,12 @@ AC_SUBST(ALLTARGET) AC_SUBST(INSTALLTARGET) ACX_STRIP_EXT_FLAGS -LDFLAGS="$LATE_LDFLAGS $LDFLAGS" +if test -n "$LATE_LDFLAGS"; then + LDFLAGS="$LATE_LDFLAGS $LDFLAGS" +fi +# remove start spaces +LDFLAGS=`echo "$LDFLAGS"|sed -e 's/^ *//'` +LIBS=`echo "$LIBS"|sed -e 's/^ *//'` AC_DEFINE_UNQUOTED([MAXSYSLOGMSGLEN], [10240], [Define to the maximum message length to pass to syslog.]) diff --git a/contrib/fastrpz.patch b/contrib/fastrpz.patch index aa8c1ece0e20..362e07cc6a8d 100644 --- a/contrib/fastrpz.patch +++ b/contrib/fastrpz.patch @@ -3263,15 +3263,15 @@ diff -u --unidirectional-new-file -r1.1 ./util/configparser.y %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT %token VAR_DISABLE_DNSSEC_LAME_CHECK -@@ -150,7 +151,7 @@ +@@ -153,7 +154,7 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart - contents_view | + contents_view | rpzstart contents_rpz | - dnscstart contents_dnsc + dnscstart contents_dnsc | + cachedbstart contents_cachedb ; - @@ -2160,6 +2161,50 @@ (strcmp($2, "yes")==0); } diff --git a/daemon/daemon.c b/daemon/daemon.c index dad9f86b344e..7411fabe7573 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -221,7 +221,9 @@ daemon_init(void) # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); # endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); +#endif # ifdef USE_GOST (void)sldns_key_EVP_load_gost_id(); # endif @@ -239,7 +241,7 @@ daemon_init(void) # if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); # else - (void)OPENSSL_init_ssl(0, NULL); + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); # endif # if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED) if(!ub_openssl_lock_init()) @@ -421,8 +423,8 @@ daemon_create_workers(struct daemon* daemon) daemon->rand = ub_initstate(seed, NULL); if(!daemon->rand) fatal_exit("could not init random generator"); + hash_set_raninit((uint32_t)ub_random(daemon->rand)); } - hash_set_raninit((uint32_t)ub_random(daemon->rand)); shufport = (int*)calloc(65536, sizeof(int)); if(!shufport) fatal_exit("out of memory during daemon init"); @@ -690,6 +692,9 @@ daemon_cleanup(struct daemon* daemon) daemon->num = 0; #ifdef USE_DNSTAP dt_delete(daemon->dtenv); +#endif +#ifdef USE_DNSCRYPT + dnsc_delete(daemon->dnscenv); #endif daemon->cfg = NULL; } diff --git a/daemon/remote.c b/daemon/remote.c index bb41cc5df2db..243d94c49aa1 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -229,42 +229,10 @@ daemon_remote_create(struct config_file* cfg) free(rc); return NULL; } - /* no SSLv2, SSLv3 because has defects */ - if((SSL_CTX_set_options(rc->ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) - != SSL_OP_NO_SSLv2){ - log_crypto_err("could not set SSL_OP_NO_SSLv2"); + if(!listen_sslctx_setup(rc->ctx)) { daemon_remote_delete(rc); return NULL; } - if((SSL_CTX_set_options(rc->ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) - != SSL_OP_NO_SSLv3){ - log_crypto_err("could not set SSL_OP_NO_SSLv3"); - daemon_remote_delete(rc); - return NULL; - } -#if defined(SSL_OP_NO_TLSv1) && defined(SSL_OP_NO_TLSv1_1) - /* if we have tls 1.1 disable 1.0 */ - if((SSL_CTX_set_options(rc->ctx, SSL_OP_NO_TLSv1) & SSL_OP_NO_TLSv1) - != SSL_OP_NO_TLSv1){ - log_crypto_err("could not set SSL_OP_NO_TLSv1"); - daemon_remote_delete(rc); - return NULL; - } -#endif -#if defined(SSL_OP_NO_TLSv1_1) && defined(SSL_OP_NO_TLSv1_2) - /* if we have tls 1.2 disable 1.1 */ - if((SSL_CTX_set_options(rc->ctx, SSL_OP_NO_TLSv1_1) & SSL_OP_NO_TLSv1_1) - != SSL_OP_NO_TLSv1_1){ - log_crypto_err("could not set SSL_OP_NO_TLSv1_1"); - daemon_remote_delete(rc); - return NULL; - } -#endif -#if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA) - /* if we have sha256, set the cipher list to have no known vulns */ - if(!SSL_CTX_set_cipher_list(rc->ctx, "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256")) - log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list"); -#endif if (cfg->remote_control_use_cert == 0) { /* No certificates are requested */ @@ -314,23 +282,7 @@ daemon_remote_create(struct config_file* cfg) log_crypto_err("Error in SSL_CTX check_private_key"); goto setup_error; } -#if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO - if(!SSL_CTX_set_ecdh_auto(rc->ctx,1)) { - log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE"); - } -#elif defined(USE_ECDSA) - if(1) { - EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1); - if (!ecdh) { - log_crypto_err("could not find p256, not enabling ECDHE"); - } else { - if (1 != SSL_CTX_set_tmp_ecdh (rc->ctx, ecdh)) { - log_crypto_err("Error in SSL_CTX_set_tmp_ecdh, not enabling ECDHE"); - } - EC_KEY_free (ecdh); - } - } -#endif + listen_sslctx_setup_2(rc->ctx); if(!SSL_CTX_load_verify_locations(rc->ctx, s_cert, NULL)) { log_crypto_err("Error setting up SSL_CTX verify locations"); setup_error: @@ -415,7 +367,7 @@ add_open(const char* ip, int nr, struct listen_port** list, int noproto_is_err, if (cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1) { if(chown(ip, cfg_uid, cfg_gid) == -1) - log_err("cannot chown %u.%u %s: %s", + verbose(VERB_QUERY, "cannot chown %u.%u %s: %s", (unsigned)cfg_uid, (unsigned)cfg_gid, ip, strerror(errno)); } @@ -841,7 +793,7 @@ print_stats(SSL* ssl, const char* nm, struct ub_stats_info* s) static int print_thread_stats(SSL* ssl, int i, struct ub_stats_info* s) { - char nm[16]; + char nm[32]; snprintf(nm, sizeof(nm), "thread%d", i); nm[sizeof(nm)-1]=0; return print_stats(ssl, nm, s); @@ -873,6 +825,9 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) #ifdef USE_IPSECMOD size_t ipsecmod = 0; #endif /* USE_IPSECMOD */ +#ifdef USE_DNSCRYPT + size_t dnscrypt_shared_secret = 0; +#endif /* USE_DNSCRYPT */ msg = slabhash_get_mem(daemon->env->msg_cache); rrset = slabhash_get_mem(&daemon->env->rrset_cache->table); val = mod_get_mem(&worker->env, "validator"); @@ -884,6 +839,12 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) #ifdef USE_IPSECMOD ipsecmod = mod_get_mem(&worker->env, "ipsecmod"); #endif /* USE_IPSECMOD */ +#ifdef USE_DNSCRYPT + if(daemon->dnscenv) { + dnscrypt_shared_secret = slabhash_get_mem( + daemon->dnscenv->shared_secrets_cache); + } +#endif /* USE_DNSCRYPT */ if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset)) return 0; @@ -903,6 +864,11 @@ print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon) if(!print_longnum(ssl, "mem.mod.ipsecmod"SQ, ipsecmod)) return 0; #endif /* USE_IPSECMOD */ +#ifdef USE_DNSCRYPT + if(!print_longnum(ssl, "mem.cache.dnscrypt_shared_secret"SQ, + dnscrypt_shared_secret)) + return 0; +#endif /* USE_DNSCRYPT */ return 1; } @@ -1065,6 +1031,9 @@ print_ext(SSL* ssl, struct ub_stats_info* s) if(!ssl_printf(ssl, "num.answer.rcode.nodata"SQ"%lu\n", (unsigned long)s->svr.ans_rcode_nodata)) return 0; } + /* iteration */ + if(!ssl_printf(ssl, "num.query.ratelimited"SQ"%lu\n", + (unsigned long)s->svr.queries_ratelimited)) return 0; /* validation */ if(!ssl_printf(ssl, "num.answer.secure"SQ"%lu\n", (unsigned long)s->svr.ans_secure)) return 0; @@ -1086,6 +1055,12 @@ print_ext(SSL* ssl, struct ub_stats_info* s) (unsigned)s->svr.infra_cache_count)) return 0; if(!ssl_printf(ssl, "key.cache.count"SQ"%u\n", (unsigned)s->svr.key_cache_count)) return 0; +#ifdef USE_DNSCRYPT + if(!ssl_printf(ssl, "dnscrypt_shared_secret.cache.count"SQ"%u\n", + (unsigned)s->svr.shared_secret_cache_count)) return 0; + if(!ssl_printf(ssl, "num.query.dnscrypt.shared_secret.cachemiss"SQ"%lu\n", + (unsigned long)s->svr.num_query_dnscrypt_secret_missed_cache)) return 0; +#endif /* USE_DNSCRYPT */ return 1; } @@ -2389,10 +2364,16 @@ dump_infra_host(struct lruhash_entry* e, void* arg) struct infra_data* d = (struct infra_data*)e->data; char ip_str[1024]; char name[257]; + int port; if(a->ssl_failed) return; addr_to_str(&k->addr, k->addrlen, ip_str, sizeof(ip_str)); dname_str(k->zonename, name); + port = (int)ntohs(((struct sockaddr_in*)&k->addr)->sin_port); + if(port != UNBOUND_DNS_PORT) { + snprintf(ip_str+strlen(ip_str), sizeof(ip_str)-strlen(ip_str), + "@%d", port); + } /* skip expired stuff (only backed off) */ if(d->ttl < a->now) { if(d->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) { diff --git a/daemon/stats.c b/daemon/stats.c index 599f39bcddda..1058556be7c2 100644 --- a/daemon/stats.c +++ b/daemon/stats.c @@ -56,6 +56,7 @@ #include "util/timehist.h" #include "util/net_help.h" #include "validator/validator.h" +#include "iterator/iterator.h" #include "sldns/sbuffer.h" #include "services/cache/rrset.h" #include "services/cache/infra.h" @@ -123,7 +124,7 @@ void server_stats_log(struct ub_server_stats* stats, struct worker* worker, /** get rrsets bogus number from validator */ static size_t -get_rrset_bogus(struct worker* worker) +get_rrset_bogus(struct worker* worker, int reset) { int m = modstack_find(&worker->env.mesh->mods, "validator"); struct val_env* ve; @@ -133,12 +134,48 @@ get_rrset_bogus(struct worker* worker) ve = (struct val_env*)worker->env.modinfo[m]; lock_basic_lock(&ve->bogus_lock); r = ve->num_rrset_bogus; - if(!worker->env.cfg->stat_cumulative) + if(reset && !worker->env.cfg->stat_cumulative) ve->num_rrset_bogus = 0; lock_basic_unlock(&ve->bogus_lock); return r; } +/** get number of ratelimited queries from iterator */ +static size_t +get_queries_ratelimit(struct worker* worker, int reset) +{ + int m = modstack_find(&worker->env.mesh->mods, "iterator"); + struct iter_env* ie; + size_t r; + if(m == -1) + return 0; + ie = (struct iter_env*)worker->env.modinfo[m]; + lock_basic_lock(&ie->queries_ratelimit_lock); + r = ie->num_queries_ratelimited; + if(reset && !worker->env.cfg->stat_cumulative) + ie->num_queries_ratelimited = 0; + lock_basic_unlock(&ie->queries_ratelimit_lock); + return r; +} + +#ifdef USE_DNSCRYPT +/** get the number of shared secret cache miss */ +static size_t +get_dnscrypt_cache_miss(struct worker* worker, int reset) +{ + size_t r; + struct dnsc_env* de = worker->daemon->dnscenv; + if(!de) return 0; + + lock_basic_lock(&de->shared_secrets_cache_lock); + r = de->num_query_dnscrypt_secret_missed_cache; + if(reset && !worker->env.cfg->stat_cumulative) + de->num_query_dnscrypt_secret_missed_cache = 0; + lock_basic_unlock(&de->shared_secrets_cache_lock); + return r; +} +#endif /* USE_DNSCRYPT */ + void server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) { @@ -169,7 +206,10 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) s->svr.qtcp_outgoing = (long long)worker->back->num_tcp_outgoing; /* get and reset validator rrset bogus number */ - s->svr.rrset_bogus = (long long)get_rrset_bogus(worker); + s->svr.rrset_bogus = (long long)get_rrset_bogus(worker, reset); + + /* get and reset iterator query ratelimit number */ + s->svr.queries_ratelimited = (long long)get_queries_ratelimit(worker, reset); /* get cache sizes */ s->svr.msg_cache_count = (long long)count_slabhash_entries(worker->env.msg_cache); @@ -179,6 +219,21 @@ server_stats_compile(struct worker* worker, struct ub_stats_info* s, int reset) s->svr.key_cache_count = (long long)count_slabhash_entries(worker->env.key_cache->slab); else s->svr.key_cache_count = 0; +#ifdef USE_DNSCRYPT + if(worker->daemon->dnscenv) { + s->svr.num_query_dnscrypt_secret_missed_cache = + (long long)get_dnscrypt_cache_miss(worker, reset); + s->svr.shared_secret_cache_count = (long long)count_slabhash_entries( + worker->daemon->dnscenv->shared_secrets_cache); + } else { + s->svr.num_query_dnscrypt_secret_missed_cache = 0; + s->svr.shared_secret_cache_count = 0; + } +#else + s->svr.num_query_dnscrypt_secret_missed_cache = 0; + s->svr.shared_secret_cache_count = 0; +#endif /* USE_DNSCRYPT */ + /* get tcp accept usage */ s->svr.tcp_accept_usage = 0; for(lp = worker->front->cps; lp; lp = lp->next) { @@ -240,7 +295,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) a->svr.num_query_dnscrypt_cleartext; total->svr.num_query_dnscrypt_crypted_malformed += \ a->svr.num_query_dnscrypt_crypted_malformed; -#endif +#endif /* USE_DNSCRYPT */ /* the max size reached is upped to higher of both */ if(a->svr.max_query_list_size > total->svr.max_query_list_size) total->svr.max_query_list_size = a->svr.max_query_list_size; @@ -266,7 +321,6 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a) total->svr.zero_ttl_responses += a->svr.zero_ttl_responses; total->svr.ans_secure += a->svr.ans_secure; total->svr.ans_bogus += a->svr.ans_bogus; - total->svr.rrset_bogus += a->svr.rrset_bogus; total->svr.unwanted_replies += a->svr.unwanted_replies; total->svr.unwanted_queries += a->svr.unwanted_queries; total->svr.tcp_accept_usage += a->svr.tcp_accept_usage; diff --git a/daemon/unbound.c b/daemon/unbound.c index ba7337d8907a..070a824d6734 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -128,6 +128,9 @@ static void usage(void) for(m = module_list_avail(); *m; m++) printf(" %s", *m); printf("\n"); +#ifdef USE_DNSCRYPT + printf("DNSCrypt feature available\n"); +#endif printf("BSD licensed, see LICENSE in source package for details.\n"); printf("Report bugs to %s\n", PACKAGE_BUGREPORT); ub_event_base_free(base); @@ -400,7 +403,7 @@ detach(void) /** daemonize, drop user priviliges and chroot if needed */ static void perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, - const char** cfgfile) + const char** cfgfile, int need_pidfile) { #ifdef HAVE_KILL int pidinchroot; @@ -444,13 +447,13 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, #ifdef HAVE_KILL /* true if pidfile is inside chrootdir, or nochroot */ - pidinchroot = !(cfg->chrootdir && cfg->chrootdir[0]) || + pidinchroot = need_pidfile && (!(cfg->chrootdir && cfg->chrootdir[0]) || (cfg->chrootdir && cfg->chrootdir[0] && strncmp(cfg->pidfile, cfg->chrootdir, - strlen(cfg->chrootdir))==0); + strlen(cfg->chrootdir))==0)); /* check old pid file before forking */ - if(cfg->pidfile && cfg->pidfile[0]) { + if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) { /* calculate position of pidfile */ if(cfg->pidfile[0] == '/') daemon->pidfile = strdup(cfg->pidfile); @@ -469,7 +472,7 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, /* write new pidfile (while still root, so can be outside chroot) */ #ifdef HAVE_KILL - if(cfg->pidfile && cfg->pidfile[0]) { + if(cfg->pidfile && cfg->pidfile[0] && need_pidfile) { writepid(daemon->pidfile, getpid()); if(cfg->username && cfg->username[0] && cfg_uid != (uid_t)-1 && pidinchroot) { @@ -484,6 +487,7 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, } #else (void)daemon; + (void)need_pidfile; #endif /* HAVE_KILL */ /* Set user context */ @@ -600,9 +604,10 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode, * These increase verbosity as specified in the config file. * @param debug_mode: if set, do not daemonize. * @param log_default_identity: Default identity to report in logs + * @param need_pidfile: if false, no pidfile is checked or created. */ static void -run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode, const char* log_default_identity) +run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode, const char* log_default_identity, int need_pidfile) { struct config_file* cfg = NULL; struct daemon* daemon = NULL; @@ -632,7 +637,7 @@ run_daemon(const char* cfgfile, int cmdline_verbose, int debug_mode, const char* if(!daemon_open_shared_ports(daemon)) fatal_exit("could not open ports"); if(!done_setup) { - perform_setup(daemon, cfg, debug_mode, &cfgfile); + perform_setup(daemon, cfg, debug_mode, &cfgfile, need_pidfile); done_setup = 1; } else { /* reopen log after HUP to facilitate log rotation */ @@ -682,6 +687,8 @@ main(int argc, char* argv[]) const char* log_ident_default; int cmdline_verbose = 0; int debug_mode = 0; + int need_pidfile = 1; + #ifdef UB_ON_WINDOWS int cmdline_cfg = 0; #endif @@ -690,7 +697,7 @@ main(int argc, char* argv[]) log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0]; log_ident_set(log_ident_default); /* parse the options */ - while( (c=getopt(argc, argv, "c:dhvw:")) != -1) { + while( (c=getopt(argc, argv, "c:dhpvw:")) != -1) { switch(c) { case 'c': cfgfile = optarg; @@ -702,6 +709,9 @@ main(int argc, char* argv[]) cmdline_verbose++; verbosity++; break; + case 'p': + need_pidfile = 0; + break; case 'd': debug_mode++; break; @@ -732,7 +742,7 @@ main(int argc, char* argv[]) return 1; } - run_daemon(cfgfile, cmdline_verbose, debug_mode, log_ident_default); + run_daemon(cfgfile, cmdline_verbose, debug_mode, log_ident_default, need_pidfile); log_init(NULL, 0, NULL); /* close logfile */ return 0; } diff --git a/daemon/worker.c b/daemon/worker.c index 2c4cf5ba6c0a..683f93169117 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1009,6 +1009,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, struct query_info* lookup_qinfo = &qinfo; struct query_info qinfo_tmp; /* placeholdoer for lookup_qinfo */ struct respip_client_info* cinfo = NULL, cinfo_tmp; + memset(&qinfo, 0, sizeof(qinfo)); if(error != NETEVENT_NOERROR) { /* some bad tcp query DNS formats give these error calls */ @@ -1111,6 +1112,7 @@ worker_handle_request(struct comm_point* c, void* arg, int error, if(!query_info_parse(&qinfo, c->buffer)) { verbose(VERB_ALGO, "worker parse request: formerror."); log_addr(VERB_CLIENT,"from",&repinfo->addr, repinfo->addrlen); + memset(&qinfo, 0, sizeof(qinfo)); /* zero qinfo.qname */ if(worker_err_ratelimit(worker, LDNS_RCODE_FORMERR) == -1) { comm_point_drop_reply(repinfo); return 0; @@ -1355,6 +1357,10 @@ lookup_cache: lock_rw_unlock(&e->lock); regional_free_all(worker->scratchpad); goto send_reply; + } else { + /* Note that we've already released the + * lock if we're here after prefetch. */ + lock_rw_unlock(&e->lock); } /* We've found a partial reply ending with an * alias. Replace the lookup qinfo for the @@ -1362,7 +1368,6 @@ lookup_cache: * (possibly) complete the reply. As we're * passing the "base" reply, there will be no * more alias chasing. */ - lock_rw_unlock(&e->lock); memset(&qinfo_tmp, 0, sizeof(qinfo_tmp)); get_cname_target(alias_rrset, &qinfo_tmp.qname, &qinfo_tmp.qname_len); @@ -1669,7 +1674,17 @@ worker_init(struct worker* worker, struct config_file *cfg, worker->env.send_query = &worker_send_query; worker->env.alloc = &worker->alloc; worker->env.rnd = worker->rndstate; - worker->env.scratch = worker->scratchpad; + /* If case prefetch is triggered, the corresponding mesh will clear + * the scratchpad for the module env in the middle of request handling. + * It would be prone to a use-after-free kind of bug, so we avoid + * sharing it with worker's own scratchpad at the cost of having + * one more pad per worker. */ + worker->env.scratch = regional_create_custom(cfg->msg_buffer_size); + if(!worker->env.scratch) { + log_err("malloc failure"); + worker_delete(worker); + return 0; + } worker->env.mesh = mesh_create(&worker->daemon->mods, &worker->env); worker->env.detach_subs = &mesh_detach_subs; worker->env.attach_sub = &mesh_attach_sub; @@ -1758,6 +1773,7 @@ worker_delete(struct worker* worker) comm_base_delete(worker->base); ub_randfree(worker->rndstate); alloc_clear(&worker->alloc); + regional_destroy(worker->env.scratch); regional_destroy(worker->scratchpad); free(worker); } diff --git a/dns64/dns64.c b/dns64/dns64.c index b3e3ab852bca..2f2d1255d6ff 100644 --- a/dns64/dns64.c +++ b/dns64/dns64.c @@ -540,6 +540,7 @@ dns64_operate(struct module_qstate* qstate, enum module_ev event, int id, case module_event_new: /* Tag this query as being new and fall through. */ qstate->minfo[id] = (void*)DNS64_NEW_QUERY; + /* fallthrough */ case module_event_pass: qstate->ext_state[id] = handle_event_pass(qstate, id); break; diff --git a/dnscrypt/dnscrypt.c b/dnscrypt/dnscrypt.c index 9e858c3fb061..db054df9d680 100644 --- a/dnscrypt/dnscrypt.c +++ b/dnscrypt/dnscrypt.c @@ -12,6 +12,8 @@ #include "util/net_help.h" #include "util/netevent.h" #include "util/log.h" +#include "util/storage/slabhash.h" +#include "util/storage/lookup3.h" #include "dnscrypt/cert.h" #include "dnscrypt/dnscrypt.h" @@ -19,13 +21,15 @@ #include + /** * \file * dnscrypt functions for encrypting DNS packets. */ #define DNSCRYPT_QUERY_BOX_OFFSET \ - (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_PUBLICKEYBYTES + crypto_box_HALF_NONCEBYTES) + (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_PUBLICKEYBYTES + \ + crypto_box_HALF_NONCEBYTES) // 8 bytes: magic header (CERT_MAGIC_HEADER) // 12 bytes: the client's nonce @@ -33,13 +37,110 @@ // 16 bytes: Poly1305 MAC (crypto_box_ZEROBYTES - crypto_box_BOXZEROBYTES) #define DNSCRYPT_REPLY_BOX_OFFSET \ - (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_HALF_NONCEBYTES + crypto_box_HALF_NONCEBYTES) + (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_HALF_NONCEBYTES + \ + crypto_box_HALF_NONCEBYTES) + + +/** + * Shared secret cache key length. + * secret key. + * 1 byte: ES_VERSION[1] + * 32 bytes: client crypto_box_PUBLICKEYBYTES + * 32 bytes: server crypto_box_SECRETKEYBYTES + */ +#define DNSCRYPT_SHARED_SECRET_KEY_LENGTH \ + (1 + crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES) + + +struct shared_secret_cache_key { + /** the hash table key */ + uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH]; + /** the hash table entry, data is uint8_t pointer of size crypto_box_BEFORENMBYTES which contains the shared secret. */ + struct lruhash_entry entry; +}; + + +/** + * Generate a key suitable to find shared secret in slabhash. + * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH + * \param[in] esversion: The es version least significant byte. + * \param[in] pk: The public key of the client. uint8_t pointer of size + * crypto_box_PUBLICKEYBYTES. + * \param[in] sk: The secret key of the server matching the magic query number. + * uint8_t pointer of size crypto_box_SECRETKEYBYTES. + * \return the hash of the key. + */ +static uint32_t +dnsc_shared_secrets_cache_key(uint8_t* key, + uint8_t esversion, + uint8_t* pk, + uint8_t* sk) +{ + key[0] = esversion; + memcpy(key + 1, pk, crypto_box_PUBLICKEYBYTES); + memcpy(key + 1 + crypto_box_PUBLICKEYBYTES, sk, crypto_box_SECRETKEYBYTES); + return hashlittle(key, DNSCRYPT_SHARED_SECRET_KEY_LENGTH, 0); +} + +/** + * Inserts a shared secret into the shared_secrets_cache slabhash. + * The shared secret is copied so the caller can use it freely without caring + * about the cache entry being evicted or not. + * \param[in] cache: the slabhash in which to look for the key. + * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH + * which contains the key of the shared secret. + * \param[in] hash: the hash of the key. + * \param[in] nmkey: a uint8_t pointer of size crypto_box_BEFORENMBYTES which + * contains the shared secret. + */ +static void +dnsc_shared_secret_cache_insert(struct slabhash *cache, + uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH], + uint32_t hash, + uint8_t nmkey[crypto_box_BEFORENMBYTES]) +{ + struct shared_secret_cache_key* k = + (struct shared_secret_cache_key*)calloc(1, sizeof(*k)); + uint8_t* d = malloc(crypto_box_BEFORENMBYTES); + if(!k || !d) { + free(k); + free(d); + return; + } + memcpy(d, nmkey, crypto_box_BEFORENMBYTES); + lock_rw_init(&k->entry.lock); + memcpy(k->key, key, DNSCRYPT_SHARED_SECRET_KEY_LENGTH); + k->entry.hash = hash; + k->entry.key = k; + k->entry.data = d; + slabhash_insert(cache, + hash, &k->entry, + d, + NULL); +} + +/** + * Lookup a record in shared_secrets_cache. + * \param[in] cache: a pointer to shared_secrets_cache slabhash. + * \param[in] key: a uint8_t pointer of size DNSCRYPT_SHARED_SECRET_KEY_LENGTH + * containing the key to look for. + * \param[in] hash: a hash of the key. + * \return a pointer to the locked cache entry or NULL on failure. + */ +static struct lruhash_entry* +dnsc_shared_secrets_lookup(struct slabhash* cache, + uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH], + uint32_t hash) +{ + return slabhash_lookup(cache, hash, key, 0); +} /** * Decrypt a query using the dnsccert that was found using dnsc_find_cert. * The client nonce will be extracted from the encrypted query and stored in * client_nonce, a shared secret will be computed and stored in nmkey and the * buffer will be decrypted inplace. + * \param[in] env the dnscrypt environment. * \param[in] cert the cert that matches this encrypted query. * \param[in] client_nonce where the client nonce will be stored. * \param[in] nmkey where the shared secret key will be written. @@ -47,7 +148,8 @@ * \return 0 on success. */ static int -dnscrypt_server_uncurve(const dnsccert *cert, +dnscrypt_server_uncurve(struct dnsc_env* env, + const dnsccert *cert, uint8_t client_nonce[crypto_box_HALF_NONCEBYTES], uint8_t nmkey[crypto_box_BEFORENMBYTES], struct sldns_buffer* buffer) @@ -56,27 +158,55 @@ dnscrypt_server_uncurve(const dnsccert *cert, uint8_t *const buf = sldns_buffer_begin(buffer); uint8_t nonce[crypto_box_NONCEBYTES]; struct dnscrypt_query_header *query_header; + // shared secret cache + uint8_t key[DNSCRYPT_SHARED_SECRET_KEY_LENGTH]; + struct lruhash_entry* entry; + uint32_t hash; if (len <= DNSCRYPT_QUERY_HEADER_SIZE) { return -1; } query_header = (struct dnscrypt_query_header *)buf; - memcpy(nmkey, query_header->publickey, crypto_box_PUBLICKEYBYTES); - if(cert->es_version[1] == 2) { + hash = dnsc_shared_secrets_cache_key(key, + cert->es_version[1], + query_header->publickey, + cert->keypair->crypt_secretkey); + entry = dnsc_shared_secrets_lookup(env->shared_secrets_cache, + key, + hash); + + if(!entry) { + lock_basic_lock(&env->shared_secrets_cache_lock); + env->num_query_dnscrypt_secret_missed_cache++; + lock_basic_unlock(&env->shared_secrets_cache_lock); + if(cert->es_version[1] == 2) { #ifdef USE_DNSCRYPT_XCHACHA20 - if (crypto_box_curve25519xchacha20poly1305_beforenm( - nmkey, nmkey, cert->keypair->crypt_secretkey) != 0) { - return -1; - } + if (crypto_box_curve25519xchacha20poly1305_beforenm( + nmkey, query_header->publickey, + cert->keypair->crypt_secretkey) != 0) { + return -1; + } #else - return -1; + return -1; #endif } else { - if (crypto_box_beforenm(nmkey, nmkey, cert->keypair->crypt_secretkey) != 0) { + if (crypto_box_beforenm(nmkey, + query_header->publickey, + cert->keypair->crypt_secretkey) != 0) { return -1; } } + // Cache the shared secret we just computed. + dnsc_shared_secret_cache_insert(env->shared_secrets_cache, + key, + hash, + nmkey); + } else { + /* copy shared secret and unlock entry */ + memcpy(nmkey, entry->data, crypto_box_BEFORENMBYTES); + lock_rw_unlock(&entry->lock); + } memcpy(nonce, query_header->nonce, crypto_box_HALF_NONCEBYTES); memset(nonce + crypto_box_HALF_NONCEBYTES, 0, crypto_box_HALF_NONCEBYTES); @@ -106,7 +236,7 @@ dnscrypt_server_uncurve(const dnsccert *cert, len -= DNSCRYPT_QUERY_HEADER_SIZE; while (*sldns_buffer_at(buffer, --len) == 0) - ; + ; if (*sldns_buffer_at(buffer, len) != 0x80) { return -1; @@ -172,7 +302,7 @@ dnscrypt_hrtime(void) if (ret == 0) { ts = (uint64_t)tv.tv_sec * 1000000U + (uint64_t)tv.tv_usec; } else { - log_err("gettimeofday: %s", strerror(errno)); + log_err("gettimeofday: %s", strerror(errno)); } return ts; } @@ -223,7 +353,8 @@ dnscrypt_server_curve(const dnsccert *cert, size_t max_udp_size) { size_t dns_reply_len = sldns_buffer_limit(buffer); - size_t max_len = dns_reply_len + DNSCRYPT_MAX_PADDING + DNSCRYPT_REPLY_HEADER_SIZE; + size_t max_len = dns_reply_len + DNSCRYPT_MAX_PADDING \ + + DNSCRYPT_REPLY_HEADER_SIZE; size_t max_reply_size = max_udp_size - 20U - 8U; uint8_t nonce[crypto_box_NONCEBYTES]; uint8_t *boxed; @@ -268,8 +399,14 @@ dnscrypt_server_curve(const dnsccert *cert, } } - sldns_buffer_write_at(buffer, 0, DNSCRYPT_MAGIC_RESPONSE, DNSCRYPT_MAGIC_HEADER_LEN); - sldns_buffer_write_at(buffer, DNSCRYPT_MAGIC_HEADER_LEN, nonce, crypto_box_NONCEBYTES); + sldns_buffer_write_at(buffer, + 0, + DNSCRYPT_MAGIC_RESPONSE, + DNSCRYPT_MAGIC_HEADER_LEN); + sldns_buffer_write_at(buffer, + DNSCRYPT_MAGIC_HEADER_LEN, + nonce, + crypto_box_NONCEBYTES); sldns_buffer_set_limit(buffer, len + DNSCRYPT_REPLY_HEADER_SIZE); return 0; } @@ -284,17 +421,17 @@ dnscrypt_server_curve(const dnsccert *cert, static int dnsc_read_from_file(char *fname, char *buf, size_t count) { - int fd; - fd = open(fname, O_RDONLY); - if (fd == -1) { - return -1; - } - if (read(fd, buf, count) != (ssize_t)count) { - close(fd); - return -2; - } - close(fd); - return 0; + int fd; + fd = open(fname, O_RDONLY); + if (fd == -1) { + return -1; + } + if (read(fd, buf, count) != (ssize_t)count) { + close(fd); + return -2; + } + close(fd); + return 0; } /** @@ -308,12 +445,12 @@ dnsc_read_from_file(char *fname, char *buf, size_t count) static char * dnsc_chroot_path(struct config_file *cfg, char *path) { - char *nm; - nm = path; - if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, - cfg->chrootdir, strlen(cfg->chrootdir)) == 0) - nm += strlen(cfg->chrootdir); - return nm; + char *nm; + nm = path; + if(cfg->chrootdir && cfg->chrootdir[0] && strncmp(nm, + cfg->chrootdir, strlen(cfg->chrootdir)) == 0) + nm += strlen(cfg->chrootdir); + return nm; } /** @@ -379,7 +516,7 @@ dnsc_key_to_fingerprint(char fingerprint[80U], const uint8_t * const key) /** * Find the cert matching a DNSCrypt query. - * \param[in] dnscenv The DNSCrypt enviroment, which contains the list of certs + * \param[in] dnscenv The DNSCrypt environment, which contains the list of certs * supported by the server. * \param[in] buffer The encrypted DNS query. * \return a dnsccert * if we found a cert matching the magic_number of the @@ -450,6 +587,7 @@ dnsc_load_local_data(struct dnsc_env* dnscenv, struct config_file *cfg) snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\\%03d", c); } } + verbose(VERB_OPS, "DNSCrypt: adding local data to config: %s", rr); snprintf(rr + strlen(rr), rrlen - 1 - strlen(rr), "\""); cfg_strlist_insert(&cfg->local_data, strdup(rr)); free(rr); @@ -502,7 +640,7 @@ dnsc_parse_keys(struct dnsc_env *env, struct config_file *cfg) env->keypairs = sodium_allocarray(env->keypairs_count, sizeof *env->keypairs); - env->certs = sodium_allocarray(env->signed_certs_count, + env->certs = sodium_allocarray(env->signed_certs_count, sizeof *env->certs); cert_id = 0U; @@ -584,7 +722,8 @@ dnsc_handle_curved_request(struct dnsc_env* dnscenv, // to serve the certificate. verbose(VERB_ALGO, "handle request called on DNSCrypt socket"); if ((repinfo->dnsc_cert = dnsc_find_cert(dnscenv, c->buffer)) != NULL) { - if(dnscrypt_server_uncurve(repinfo->dnsc_cert, + if(dnscrypt_server_uncurve(dnscenv, + repinfo->dnsc_cert, repinfo->client_nonce, repinfo->nmkey, c->buffer) != 0){ @@ -629,23 +768,93 @@ dnsc_create(void) fatal_exit("dnsc_create: could not initialize libsodium."); } env = (struct dnsc_env *) calloc(1, sizeof(struct dnsc_env)); + lock_basic_init(&env->shared_secrets_cache_lock); + lock_protect(&env->shared_secrets_cache_lock, + &env->num_query_dnscrypt_secret_missed_cache, + sizeof(env->num_query_dnscrypt_secret_missed_cache)); return env; } int dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg) { - if(dnsc_parse_certs(env, cfg) <= 0) { - fatal_exit("dnsc_apply_cfg: no cert file loaded"); - } - if(dnsc_parse_keys(env, cfg) <= 0) { - fatal_exit("dnsc_apply_cfg: no key file loaded"); - } - randombytes_buf(env->hash_key, sizeof env->hash_key); - env->provider_name = cfg->dnscrypt_provider; + if(dnsc_parse_certs(env, cfg) <= 0) { + fatal_exit("dnsc_apply_cfg: no cert file loaded"); + } + if(dnsc_parse_keys(env, cfg) <= 0) { + fatal_exit("dnsc_apply_cfg: no key file loaded"); + } + randombytes_buf(env->hash_key, sizeof env->hash_key); + env->provider_name = cfg->dnscrypt_provider; - if(dnsc_load_local_data(env, cfg) <= 0) { - fatal_exit("dnsc_apply_cfg: could not load local data"); - } - return 0; + if(dnsc_load_local_data(env, cfg) <= 0) { + fatal_exit("dnsc_apply_cfg: could not load local data"); + } + env->shared_secrets_cache = slabhash_create( + cfg->dnscrypt_shared_secret_cache_slabs, + HASH_DEFAULT_STARTARRAY, + cfg->dnscrypt_shared_secret_cache_size, + dnsc_shared_secrets_sizefunc, + dnsc_shared_secrets_compfunc, + dnsc_shared_secrets_delkeyfunc, + dnsc_shared_secrets_deldatafunc, + NULL + ); + if(!env->shared_secrets_cache){ + fatal_exit("dnsc_apply_cfg: could not create shared secrets cache."); + } + return 0; +} + +void +dnsc_delete(struct dnsc_env *env) +{ + if(!env) { + return; + } + verbose(VERB_OPS, "DNSCrypt: Freeing environment."); + sodium_free(env->signed_certs); + sodium_free(env->certs); + sodium_free(env->keypairs); + slabhash_delete(env->shared_secrets_cache); + lock_basic_destroy(&env->shared_secrets_cache_lock); + free(env); +} + +/** + * ######################################################### + * ############# Shared secrets cache functions ############ + * ######################################################### + */ + +size_t +dnsc_shared_secrets_sizefunc(void *k, void* ATTR_UNUSED(d)) +{ + struct shared_secret_cache_key* ssk = (struct shared_secret_cache_key*)k; + size_t key_size = sizeof(struct shared_secret_cache_key) + + lock_get_mem(&ssk->entry.lock); + size_t data_size = crypto_box_BEFORENMBYTES; + (void)ssk; /* otherwise ssk is unused if no threading, or fixed locksize */ + return key_size + data_size; +} + +int +dnsc_shared_secrets_compfunc(void *m1, void *m2) +{ + return sodium_memcmp(m1, m2, DNSCRYPT_SHARED_SECRET_KEY_LENGTH); +} + +void +dnsc_shared_secrets_delkeyfunc(void *k, void* ATTR_UNUSED(arg)) +{ + struct shared_secret_cache_key* ssk = (struct shared_secret_cache_key*)k; + lock_rw_destroy(&ssk->entry.lock); + free(ssk); +} + +void +dnsc_shared_secrets_deldatafunc(void* d, void* ATTR_UNUSED(arg)) +{ + uint8_t* data = (uint8_t*)d; + free(data); } diff --git a/dnscrypt/dnscrypt.h b/dnscrypt/dnscrypt.h index 26c2bb21d6b6..dde36d6675d1 100644 --- a/dnscrypt/dnscrypt.h +++ b/dnscrypt/dnscrypt.h @@ -26,6 +26,7 @@ #include "config.h" #include "dnscrypt/cert.h" +#include "util/locks.h" #define DNSCRYPT_QUERY_HEADER_SIZE \ (DNSCRYPT_MAGIC_HEADER_LEN + crypto_box_PUBLICKEYBYTES + crypto_box_HALF_NONCEBYTES + crypto_box_MACBYTES) @@ -38,6 +39,7 @@ struct sldns_buffer; struct config_file; struct comm_reply; +struct slabhash; typedef struct KeyPair_ { uint8_t crypt_publickey[crypto_box_PUBLICKEYBYTES]; @@ -52,7 +54,7 @@ typedef struct cert_ { struct dnsc_env { struct SignedCert *signed_certs; - dnsccert *certs; + dnsccert *certs; size_t signed_certs_count; uint8_t provider_publickey[crypto_sign_ed25519_PUBLICKEYBYTES]; uint8_t provider_secretkey[crypto_sign_ed25519_SECRETKEYBYTES]; @@ -61,6 +63,11 @@ struct dnsc_env { uint64_t nonce_ts_last; unsigned char hash_key[crypto_shorthash_KEYBYTES]; char * provider_name; + struct slabhash *shared_secrets_cache; + /** lock on shared secret cache counters */ + lock_basic_type shared_secrets_cache_lock; + /** number of misses from shared_secrets_cache */ + size_t num_query_dnscrypt_secret_missed_cache; }; struct dnscrypt_query_header { @@ -71,7 +78,7 @@ struct dnscrypt_query_header { }; /** - * Initialize DNSCrypt enviroment. + * Initialize DNSCrypt environment. * Initialize sodium library and allocate the dnsc_env structure. * \return an uninitialized struct dnsc_env. */ @@ -88,6 +95,12 @@ struct dnsc_env * dnsc_create(void); */ int dnsc_apply_cfg(struct dnsc_env *env, struct config_file *cfg); +/** + * Delete DNSCrypt environment + * + */ +void dnsc_delete(struct dnsc_env *env); + /** * handle a crypted dnscrypt request. * Determine wether or not a query is coming over the dnscrypt listener and @@ -105,5 +118,26 @@ int dnsc_handle_curved_request(struct dnsc_env* dnscenv, */ int dnsc_handle_uncurved_request(struct comm_reply *repinfo); + +/** + * Computes the size of the shared secret cache entry. + */ +size_t dnsc_shared_secrets_sizefunc(void *k, void *d); + +/** + * Compares two shared secret cache keys. + */ +int dnsc_shared_secrets_compfunc(void *m1, void *m2); + +/** + * Function to delete a shared secret cache key. + */ +void dnsc_shared_secrets_delkeyfunc(void *k, void* arg); + +/** + * Function to delete a share secret cache value. + */ +void dnsc_shared_secrets_deldatafunc(void* d, void* arg); + #endif /* USE_DNSCRYPT */ #endif diff --git a/dnscrypt/testdata/gencert.sh b/dnscrypt/testdata/gencert.sh new file mode 100755 index 000000000000..ae0b2311e428 --- /dev/null +++ b/dnscrypt/testdata/gencert.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +CERT_EXPIRE_DAYS="$(( 365 * 15 ))" +DIR="$(dirname "$0")" + + +if [[ "$PWD" != *tdir ]] +then + echo "You should run this script with a .tdir directory" + exit 1 +fi + +for i in 1 2 +do + # Ephemeral key + rm -f "${i}.key" + dnscrypt-wrapper --gen-crypt-keypair \ + --crypt-secretkey-file="${i}.key" \ + --provider-publickey-file="${DIR}/keys${i}/public.key" \ + --provider-secretkey-file="${DIR}/keys${i}/secret.key" + # Cert file + for cipher in salsa chacha + do + rm -f "${i}_${cipher}.cert" + extraarg="" + if [ "${cipher}" == "chacha" ] + then + extraarg="-x" + fi + + dnscrypt-wrapper ${extraarg} --gen-cert-file \ + --provider-cert-file="${i}_${cipher}.cert" \ + --crypt-secretkey-file="${i}.key" \ + --provider-publickey-file="${DIR}/keys${i}/public.key" \ + --provider-secretkey-file="${DIR}/keys${i}/secret.key" \ + --cert-file-expire-days="${CERT_EXPIRE_DAYS}" + done +done diff --git a/dnscrypt/testdata/keys1/public.key b/dnscrypt/testdata/keys1/public.key new file mode 100644 index 000000000000..45e6aadc3076 --- /dev/null +++ b/dnscrypt/testdata/keys1/public.key @@ -0,0 +1 @@ +¸_A¡O#÷ÛÈfó—ÌoD¶_eŶ)|'T¦éÜòO \ No newline at end of file diff --git a/dnscrypt/testdata/keys1/secret.key b/dnscrypt/testdata/keys1/secret.key new file mode 100644 index 000000000000..7672c979bbe1 --- /dev/null +++ b/dnscrypt/testdata/keys1/secret.key @@ -0,0 +1 @@ +-&ç6\Uùõñh`^"…ºz/C9‚ óˆ¸_A¡O#÷ÛÈfó—ÌoD¶_eŶ)|'T¦éÜòO \ No newline at end of file diff --git a/dnscrypt/testdata/keys2/public.key b/dnscrypt/testdata/keys2/public.key new file mode 100644 index 000000000000..036b04aab23b --- /dev/null +++ b/dnscrypt/testdata/keys2/public.key @@ -0,0 +1 @@ +ÃR òÒýeµô{ölˆÁKË€Î:5r\±}KÓçƒ \ No newline at end of file diff --git a/dnscrypt/testdata/keys2/secret.key b/dnscrypt/testdata/keys2/secret.key new file mode 100644 index 000000000000..687302956fca --- /dev/null +++ b/dnscrypt/testdata/keys2/secret.key @@ -0,0 +1 @@ +çi%‚ 5 fÍ™–í ÉûŒí Bnêͯ.º“ÃR òÒýeµô{ölˆÁKË€Î:5r\±}KÓçƒ \ No newline at end of file diff --git a/doc/Changelog b/doc/Changelog index a72f99606e13..39a3a2b7f4aa 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,8 +1,150 @@ -21 Aug 2017: Wouter +13 September 2017: Wouter + - tag 1.6.6rc2 + +12 September 2017: Wouter + - Add dns64 for client-subnet in unbound-checkconf. + +4 September 2017: Ralph + - Fix #1412: QNAME minimisation strict mode not honored + - Fix #1434: Fix windows openssl 1.1.0 linking. + +4 September 2017: Wouter + - tag 1.6.6rc1 + - makedist fix for windows binaries, with openssl 1.1.0 windres fix, + and expat 2.2.4 install target fix. + +1 September 2017: Wouter + - Recommend 1472 buffer size in unbound.conf + +31 August 2017: Wouter + - Fix #1424: cachedb:testframe is not thread safe. + - For #1417: escape ; in dnscrypt tests. + - but reverted that, tests fails with that escape. + - Fix #1417: [dnscrypt] shared secret cache counters, and works when + dnscrypt is not enabled. And cache size configuration option. + - make depend + - Fix #1418: [ip ratelimit] initialize slabhash using + ip-ratelimit-slabs. + +30 August 2017: Wouter + - updated contrib/fastrpz.patch to apply with configparser changes. + - Fix 1416: qname-minimisation breaks TLSA lookups with CNAMEs. + +29 August 2017: Wouter + - Fix #1414: fix segfault on parse failure and log_replies. + - zero qinfo in handle_request, this zeroes local_alias and also the + qname member. + - new keys and certs for dnscrypt tests. + - fixup WKS test on buildhost without servicebyname. + +28 August 2017: Wouter + - Fix #1415: patch to free dnscrypt environment on reload. + - iana portlist update + - Fix #1415: [dnscrypt] shared secret cache, patch from + Manu Bretelle. + - Small fixes for the shared secret cache patch. + - Fix WKS records on kvm autobuild host, with default protobyname + entries for udp and tcp. + +23 August 2017: Wouter + - Fix #1407: Add ECS options check to unbound-checkconf. + - make depend + - Fix to reclaim tcp handler when it is closed due to dnscrypt buffer + allocation failure. + +22 August 2017: Wouter - Fix install of trust anchor when two anchors are present, makes both - valid. Checks hash of DS but not signature of new key. This fixes - installs between sep11 and oct11 2017. - - Tag 1.6.5 + valid. Checks hash of DS but not signature of new key. This fixes + the root.key file if created when unbound is installed between + sep11 and oct11 2017. + - tag 1.6.5 with pointrelease 1.6.5 (1.6.4 plus 5011 fix). + - trunk version 1.6.6 in development. + - Fix issue on macOX 10.10 where TCP fast open is detected but not + implemented causing TCP to fail. The fix allows fallback to regular + TCP in this case and is also more robust for cases where connectx() + fails for some reason. + - Fix #1402: squelch invalid argument error for fd_set_block on windows. + +10 August 2017: Wouter + - Patch to show DNSCrypt status in help output, from Carsten + Strotmann. + +8 August 2017: Wouter + - Fix #1398: make cachedb secret configurable. + - Remove spaces from Makefile. + +7 August 2017: Wouter + - Fix #1397: Recursive DS lookups for AS112 zones names should recurse. + +3 August 2017: Ralph + - Remove unused iter_env member (ip6arpa_dname) + - Do not reset rrset.bogus stats when called using stats_noreset. + - Added stats for queries that have been ratelimited by domain + recursion. + - Do not add rrset_bogus and query ratelimiting stats per thread, these + module stats are global. + +3 August 2017: Wouter + - Fix #1394: mix of serve-expired and response-ip could cause a crash. + +24 July 2017: Wouter + - upgrade aclocal(pkg.m4 0.29.1), config.guess(2016-10-02), + config.sub(2016-09-05). + - annotate case statement fallthrough for gcc 7.1.1. + - flex output from flex 2.6.1. + - snprintf of thread number does not warn about truncated string. + - squelch TCP fast open error on FreeBSD when kernel has it disabled, + unless verbosity is high. + - remove warning from windows compile. + - Fix compile with libnettle + - Fix DSA configure switch (--disable dsa) for libnettle and libnss. + - Fix #1365: Add Ed25519 support using libnettle. + - iana portlist update + +17 July 2017: Wouter + - Fix #1350: make cachedb backend configurable (from JINMEI Tatuya). + - Fix #1349: allow suppression of pidfiles (from Daniel Kahn Gillmor). + With the -p option unbound does not create a pidfile. + +11 July 2017: Wouter + - Fix #1344: RFC6761-reserved domains: test. and invalid. + - Redirect all localhost names to localhost address for RFC6761. + +6 July 2017: Wouter + - Fix tests to use .tdir (from Manu Bretelle) instead of .tpkg. + - Fix svn hooks for tdir (selected if testcode/mini_tdir.sh exists).. + +4 July 2017: Wouter + - Fix 1332: Bump verbosity of failed chown'ing of the control socket. + +3 July 2017: Wouter + - Fix for unbound-checkconf, check ipsecmod-hook if ipsecmod is turned + on. + - Fix #1331: libunbound segfault in threaded mode when context is + deleted. + - Fix pythonmod link line option flag. + - Fix openssl 1.1.0 load of ssl error strings from ssl init. + +29 June 2017: Wouter + - Fix python example0 return module wait instead of error for pass. + - iana portlist update + - enhancement for hardened-tls for DNS over TLS. Removed duplicated + security settings. + +27 June 2017: Wouter + - Tag 1.6.4 is created with the 1.6.4rc2 contents. + - Trunk contains 1.6.5, with changes from 26, 27 june. + - Remove signed unsigned warning from authzone. + - Fix that infra cache host hash does not change after reconfig. + +26 June 2017: Wouter + - (for 1.6.5) + Better fixup of dnscrypt_cert_chacha test for different escapes. + - First fix for zero b64 and hex text zone format in sldns. + - unbound-control dump_infra prints port number for address if not 53. + +23 June 2017: Wouter + - (for 1.6.5): fixup of dnscrypt_cert_chacha test (from Manu Bretelle). 22 June 2017: Wouter - Tag 1.6.4rc2 diff --git a/doc/README b/doc/README index 6c4b28537703..d0c0bf34f3fb 100644 --- a/doc/README +++ b/doc/README @@ -1,4 +1,4 @@ -README for Unbound 1.6.5 +README for Unbound 1.6.6 Copyright 2007 NLnet Labs http://unbound.net diff --git a/doc/example.conf.in b/doc/example.conf.in index 481f2e0c214b..e7978b79c898 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -1,7 +1,7 @@ # # Example configuration file. # -# See unbound.conf(5) man page, version 1.6.5. +# See unbound.conf(5) man page, version 1.6.6. # # this is a comment. @@ -116,7 +116,7 @@ server: # ip-freebind: no # EDNS reassembly buffer to advertise to UDP peers (the actual buffer - # is set with msg-buffer-size). 1480 can solve fragmentation (timeouts). + # is set with msg-buffer-size). 1472 can solve fragmentation (timeouts) # edns-buffer-size: 4096 # Maximum UDP response size (not applied to TCP response). @@ -563,6 +563,8 @@ server: # local-zone: "127.in-addr.arpa." nodefault # local-zone: "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." nodefault # local-zone: "onion." nodefault + # local-zone: "test." nodefault + # local-zone: "invalid." nodefault # local-zone: "10.in-addr.arpa." nodefault # local-zone: "16.172.in-addr.arpa." nodefault # local-zone: "17.172.in-addr.arpa." nodefault @@ -838,3 +840,13 @@ remote-control: # dnscrypt-secret-key: /path/unbound-conf/keys2/1.key # dnscrypt-provider-cert: /path/unbound-conf/keys1/1.cert # dnscrypt-provider-cert: /path/unbound-conf/keys2/1.cert + +# CacheDB +# Enable external backend DB as auxiliary cache. Specify the backend name +# (default is "testframe", which has no use other than for debugging and +# testing) and backend-specific options. The 'cachedb' module must be +# included in module-config. +# cachedb: +# backend: "testframe" +# # secret seed string to calculate hashed keys +# secret-seed: "default" diff --git a/doc/libunbound.3.in b/doc/libunbound.3.in index 40f3ba20def5..fbf3cd832af6 100644 --- a/doc/libunbound.3.in +++ b/doc/libunbound.3.in @@ -1,4 +1,4 @@ -.TH "libunbound" "3" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "libunbound" "3" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" libunbound.3 -- unbound library functions manual .\" @@ -43,7 +43,7 @@ .B ub_ctx_zone_remove, .B ub_ctx_data_add, .B ub_ctx_data_remove -\- Unbound DNS validating resolver 1.6.5 functions. +\- Unbound DNS validating resolver 1.6.6 functions. .SH "SYNOPSIS" .B #include .LP diff --git a/doc/unbound-anchor.8.in b/doc/unbound-anchor.8.in index 8436c3cd5f5e..a008e0c0e262 100644 --- a/doc/unbound-anchor.8.in +++ b/doc/unbound-anchor.8.in @@ -1,4 +1,4 @@ -.TH "unbound-anchor" "8" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound-anchor" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound-anchor.8 -- unbound anchor maintenance utility manual .\" diff --git a/doc/unbound-checkconf.8.in b/doc/unbound-checkconf.8.in index 9778ebddee16..2e38e76b9979 100644 --- a/doc/unbound-checkconf.8.in +++ b/doc/unbound-checkconf.8.in @@ -1,4 +1,4 @@ -.TH "unbound-checkconf" "8" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound-checkconf" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound-checkconf.8 -- unbound configuration checker manual .\" diff --git a/doc/unbound-control.8.in b/doc/unbound-control.8.in index 5b220d664dd0..66ea690390a0 100644 --- a/doc/unbound-control.8.in +++ b/doc/unbound-control.8.in @@ -1,4 +1,4 @@ -.TH "unbound-control" "8" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound-control" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound-control.8 -- unbound remote control manual .\" @@ -493,6 +493,10 @@ number of queries that had an EDNS OPT record present. number of queries that had an EDNS OPT record with the DO (DNSSEC OK) bit set. These queries are also included in the num.query.edns.present number. .TP +.I num.query.ratelimited +The number of queries that are turned away from being send to nameserver due to +ratelimiting. +.TP .I num.answer.rcode.NXDOMAIN The number of answers to queries, from cache or from recursion, that had the return code NXDOMAIN. Also printed for the other return codes. diff --git a/doc/unbound-host.1.in b/doc/unbound-host.1.in index 5a088b606f78..de8f0bdd052c 100644 --- a/doc/unbound-host.1.in +++ b/doc/unbound-host.1.in @@ -1,4 +1,4 @@ -.TH "unbound\-host" "1" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound\-host" "1" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound-host.1 -- unbound DNS lookup utility .\" diff --git a/doc/unbound.8.in b/doc/unbound.8.in index 87f1b6ef0123..24959ba26cec 100644 --- a/doc/unbound.8.in +++ b/doc/unbound.8.in @@ -1,4 +1,4 @@ -.TH "unbound" "8" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound" "8" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound.8 -- unbound manual .\" @@ -9,11 +9,12 @@ .\" .SH "NAME" .B unbound -\- Unbound DNS validating resolver 1.6.5. +\- Unbound DNS validating resolver 1.6.6. .SH "SYNOPSIS" .B unbound .RB [ \-h ] .RB [ \-d ] +.RB [ \-p ] .RB [ \-v ] .RB [ \-c .IR cfgfile ] @@ -67,6 +68,11 @@ the thread\-spawn time, so that most config and setup errors appear on stderr. If given twice or more, logging does not switch to the log file or to syslog, but the log messages are printed to stderr all the time. .TP +.B \-p +Don't use a pidfile. This argument should only be used by supervision +systems which can ensure that only one instance of unbound will run +concurrently. +.TP .B \-v Increase verbosity. If given multiple times, more information is logged. This is in addition to the verbosity (if any) from the config file. diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index 2acf2622c5da..f48ef9214afa 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1,4 +1,4 @@ -.TH "unbound.conf" "5" "Aug 21, 2017" "NLnet Labs" "unbound 1.6.5" +.TH "unbound.conf" "5" "Sep 18, 2017" "NLnet Labs" "unbound 1.6.6" .\" .\" unbound.conf.5 -- unbound.conf manual .\" @@ -197,7 +197,7 @@ This is the value put into datagrams over UDP towards peers. The actual buffer size is determined by msg\-buffer\-size (both for TCP and UDP). Do not set higher than that value. Default is 4096 which is RFC recommended. If you have fragmentation reassembly problems, usually seen as timeouts, -then a value of 1480 can fix it. Setting to 512 bypasses even the most +then a value of 1472 can fix it. Setting to 512 bypasses even the most stringent path MTU problems, but is seen as extreme, since the amount of TCP fallback generated is excessive (probably also for this resolver, consider tuning the outgoing tcp number). @@ -1048,19 +1048,19 @@ has no other effect than turning off default contents for the given zone. Use \fInodefault\fR if you use exactly that zone, if you want to use a subzone, use \fItransparent\fR. .P -The default zones are localhost, reverse 127.0.0.1 and ::1, the onion and -the AS112 zones. The AS112 zones are reverse DNS zones for private use and -reserved IP addresses for which the servers on the internet cannot provide -correct answers. They are configured by default to give nxdomain (no reverse -information) answers. The defaults can be turned off by specifying your -own local\-zone of that name, or using the 'nodefault' type. Below is a -list of the default zone contents. +The default zones are localhost, reverse 127.0.0.1 and ::1, the onion, test, +invalid and the AS112 zones. The AS112 zones are reverse DNS zones for +private use and reserved IP addresses for which the servers on the internet +cannot provide correct answers. They are configured by default to give +nxdomain (no reverse information) answers. The defaults can be turned off +by specifying your own local\-zone of that name, or using the 'nodefault' +type. Below is a list of the default zone contents. .TP 10 \h'5'\fIlocalhost\fR The IP4 and IP6 localhost information is given. NS and SOA records are provided for completeness and to satisfy some DNS update tools. Default content: .nf -local\-zone: "localhost." static +local\-zone: "localhost." redirect local\-data: "localhost. 10800 IN NS localhost." local\-data: "localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" @@ -1104,6 +1104,24 @@ local\-data: "onion. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" .fi .TP 10 +\h'5'\fItest (RFC 7686)\fR +Default content: +.nf +local\-zone: "test." static +local\-data: "test. 10800 IN NS localhost." +local\-data: "test. 10800 IN + SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" +.fi +.TP 10 +\h'5'\fIinvalid (RFC 7686)\fR +Default content: +.nf +local\-zone: "invalid." static +local\-data: "invalid. 10800 IN NS localhost." +local\-data: "invalid. 10800 IN + SOA localhost. nobody.invalid. 1 3600 1200 604800 10800" +.fi +.TP 10 \h'5'\fIreverse RFC1918 local use zones\fR Reverse data for zones 10.in\-addr.arpa, 16.172.in\-addr.arpa to 31.172.in\-addr.arpa, 168.192.in\-addr.arpa. @@ -1461,7 +1479,7 @@ despite the presence of actual AAAA records. .LP The .B dnscrypt: -clause give the settings of the dnscrypt channel. While those options are +clause gives the settings of the dnscrypt channel. While those options are available, they are only meaningful if unbound was compiled with \fB\-\-enable\-dnscrypt\fR. Currently certificate and secret/public keys cannot be generated by unbound. @@ -1489,6 +1507,17 @@ times. .B dnscrypt\-provider\-cert: \fI\fR Path to the certificate related to the \fBdnscrypt\-secret\-key\fRs. This option may be specified multiple times. +.TP +.B dnscrypt\-shared\-secret\-cache\-size: \fI +Give the size of the data structure in which the shared secret keys are kept +in. Default 4m. In bytes or use m(mega), k(kilo), g(giga). +The shared secret cache is used when a same client is making multiple queries +using the same public key. It saves a substantial amount of CPU. +.TP +.B dnscrypt\-shared\-secret\-cache\-slabs: \fI +Give power of 2 number of slabs, this is used to reduce lock contention +in the dnscrypt shared secrets cache. Close to the number of cpus is +a fairly good setting. .SS "EDNS Client Subnet Module Options" .LP The ECS module must be configured in the \fBmodule\-config:\fR "subnetcache @@ -1603,6 +1632,37 @@ A/AAAA query will be SERVFAIL. Mainly used for testing. Defaults to no. Whitelist the domain so that the module logic will be executed. Can be given multiple times, for different domains. If the option is not specified, all domains are treated as being whitelisted (default). +.SS "Cache DB Module Options" +.LP +The Cache DB module must be configured in the \fBmodule\-config:\fR +"validator cachedb iterator" directive and be compiled into the daemon +with \fB\-\-enable\-cachedb\fR. +If this module is enabled and configured, the specified backend database +works as a second level cache: +When Unbound cannot find an answer to a query in its built-in in-memory +cache, it consults the specified backend. +If it finds a valid answer in the backend, Unbound uses it to respond +to the query without performing iterative DNS resolution. +If Unbound cannot even find an answer in the backend, it resolves the +query as usual, and stores the answer in the backend. +The +.B cachedb: +clause gives custom settings of the cache DB module. +.TP +.B backend: \fI\fR +Specify the backend database name. +Currently, only the in-memory "testframe" backend is supported. +As the name suggests this backend is not of any practical use. +This option defaults to "testframe". +.TP +.B secret-seed: \fI<"secret string">\fR +Specify a seed to calculate a hash value from query information. +This value will be used as the key of the corresponding answer for the +backend database and can be customized if the hash should not be predictable +operationally. +If the backend database is shared by multiple Unbound instances, +all instances must use the same secret seed. +This option defaults to "default". .SH "MEMORY CONTROL EXAMPLE" In the example config settings below memory usage is reduced. Some service levels are lower, notable very large data and a high TCP load are no longer diff --git a/iterator/iterator.c b/iterator/iterator.c index 205ab0d15407..01ac883e81e8 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -78,6 +78,12 @@ iter_init(struct module_env* env, int id) return 0; } env->modinfo[id] = (void*)iter_env; + + lock_basic_init(&iter_env->queries_ratelimit_lock); + lock_protect(&iter_env->queries_ratelimit_lock, + &iter_env->num_queries_ratelimited, + sizeof(iter_env->num_queries_ratelimited)); + if(!iter_apply_cfg(iter_env, env->cfg)) { log_err("iterator: could not apply configuration settings."); return 0; @@ -103,6 +109,7 @@ iter_deinit(struct module_env* env, int id) if(!env || !env->modinfo[id]) return; iter_env = (struct iter_env*)env->modinfo[id]; + lock_basic_destroy(&iter_env->queries_ratelimit_lock); free(iter_env->target_fetch_policy); priv_delete(iter_env->priv); donotq_delete(iter_env->donotq); @@ -1276,6 +1283,9 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq, "delegation point", iq->dp->name, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); } else { + lock_basic_lock(&ie->queries_ratelimit_lock); + ie->num_queries_ratelimited++; + lock_basic_unlock(&ie->queries_ratelimit_lock); log_nametypeclass(VERB_ALGO, "ratelimit exceeded with " "delegation point", iq->dp->name, LDNS_RR_TYPE_NS, LDNS_RR_CLASS_IN); @@ -2064,6 +2074,9 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) { if(!infra_ratelimit_inc(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now)) { + lock_basic_lock(&ie->queries_ratelimit_lock); + ie->num_queries_ratelimited++; + lock_basic_unlock(&ie->queries_ratelimit_lock); verbose(VERB_ALGO, "query exceeded ratelimits"); return error_response(qstate, id, LDNS_RCODE_SERVFAIL); } @@ -2156,7 +2169,6 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, } } if(iq->minimisation_state == SKIP_MINIMISE_STATE) { - iq->minimise_timeout_count++; if(iq->minimise_timeout_count < MAX_MINIMISE_TIMEOUT_COUNT) /* Do not increment qname, continue incrementing next * iteration */ @@ -2197,6 +2209,8 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq, if(!(iq->chase_flags & BIT_RD) && !iq->ratelimit_ok) infra_ratelimit_dec(qstate->env->infra_cache, iq->dp->name, iq->dp->namelen, *qstate->env->now); + if(qstate->env->cfg->qname_minimisation) + iq->minimisation_state = SKIP_MINIMISE_STATE; return next_state(iq, QUERYTARGETS_STATE); } outbound_list_insert(&iq->outlist, outq); @@ -2246,8 +2260,10 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq, if(iq->response == NULL) { /* Don't increment qname when QNAME minimisation is enabled */ - if(qstate->env->cfg->qname_minimisation) + if(qstate->env->cfg->qname_minimisation) { + iq->minimise_timeout_count++; iq->minimisation_state = SKIP_MINIMISE_STATE; + } iq->chase_to_rd = 0; iq->dnssec_lame_query = 0; verbose(VERB_ALGO, "query response was timeout"); diff --git a/iterator/iterator.h b/iterator/iterator.h index 37b0ab0dc24a..75aafee475e2 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -130,8 +130,10 @@ struct iter_env { */ int* target_fetch_policy; - /** ip6.arpa dname in wireformat, used for qname-minimisation */ - uint8_t* ip6arpa_dname; + /** lock on ratelimit counter */ + lock_basic_type queries_ratelimit_lock; + /** number of queries that have been ratelimited */ + size_t num_queries_ratelimited; }; /** diff --git a/libunbound/libworker.c b/libunbound/libworker.c index b42ba0bd8e78..f6a1d1d1c47b 100644 --- a/libunbound/libworker.c +++ b/libunbound/libworker.c @@ -294,6 +294,7 @@ libworker_do_cmd(struct libworker* w, uint8_t* msg, uint32_t len) log_err("unknown command for bg worker %d", (int)context_serial_getcmd(msg, len)); /* and fall through to quit */ + /* fallthrough */ case UB_LIBCMD_QUIT: free(msg); comm_base_exit(w->base); @@ -749,7 +750,7 @@ libworker_bg_done_cb(void* arg, int rcode, sldns_buffer* buf, enum sec_status s, { struct ctx_query* q = (struct ctx_query*)arg; - if(q->cancelled) { + if(q->cancelled || q->w->back->want_to_quit) { if(q->w->is_bg_thread) { /* delete it now */ struct ub_ctx* ctx = q->w->ctx; diff --git a/libunbound/unbound.h b/libunbound/unbound.h index d7667d104a0e..ac747a7cc6cc 100644 --- a/libunbound/unbound.h +++ b/libunbound/unbound.h @@ -622,6 +622,7 @@ struct ub_shm_stat_info { long long subnet; long long ipsecmod; long long respip; + long long dnscrypt_shared_secret; } mem; }; @@ -704,6 +705,8 @@ struct ub_server_stats { long long ans_bogus; /** rrsets marked bogus by validator */ long long rrset_bogus; + /** number of queries that have been ratelimited by domain recursion. */ + long long queries_ratelimited; /** unwanted traffic received on server-facing ports */ long long unwanted_replies; /** unwanted traffic received on client-facing ports */ @@ -735,6 +738,10 @@ struct ub_server_stats { long long num_query_dnscrypt_cleartext; /** number of malformed encrypted queries */ long long num_query_dnscrypt_crypted_malformed; + /** number of queries which did not have a shared secret in cache */ + long long num_query_dnscrypt_secret_missed_cache; + /** number of dnscrypt shared secret cache entries */ + long long shared_secret_cache_count; }; /** diff --git a/pythonmod/doc/examples/example0-1.py b/pythonmod/doc/examples/example0-1.py index 3b234f1e099c..5ae48d16674a 100644 --- a/pythonmod/doc/examples/example0-1.py +++ b/pythonmod/doc/examples/example0-1.py @@ -24,7 +24,7 @@ def operate(id, event, qstate, qdata): if event == MODULE_EVENT_PASS: log_info("pythonmod: event_pass") - qstate.ext_state[id] = MODULE_ERROR + qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") diff --git a/pythonmod/doc/examples/example0.rst b/pythonmod/doc/examples/example0.rst index 80eca5ea6ebb..8fff41f33c72 100644 --- a/pythonmod/doc/examples/example0.rst +++ b/pythonmod/doc/examples/example0.rst @@ -109,7 +109,7 @@ Script file must contain four compulsory functions: return True if event == MODULE_EVENT_PASS: - qstate.ext_state[id] = MODULE_ERROR + qstate.ext_state[id] = MODULE_WAIT_MODULE return True log_err("pythonmod: BAD event") diff --git a/services/authzone.c b/services/authzone.c index 75dd4fc60736..88beddbf9229 100644 --- a/services/authzone.c +++ b/services/authzone.c @@ -628,7 +628,7 @@ rrset_add_rr(struct auth_rrset* rrset, uint32_t rr_ttl, uint8_t* rdata, d->rr_len[d->count-1] = rdatalen; else d->rr_len[total-1] = rdatalen; packed_rrset_ptr_fixup(d); - if(rr_ttl < d->ttl) + if((time_t)rr_ttl < d->ttl) d->ttl = rr_ttl; /* copy old values into new array */ diff --git a/services/cache/dns.c b/services/cache/dns.c index 764205e53cbe..da43c504dfa3 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -99,6 +99,9 @@ store_rrsets(struct module_env* env, struct reply_info* rep, time_t now, } } /* no break: also copy key item */ + /* the line below is matched by gcc regex and silences + * the fallthrough warning */ + /* fallthrough */ case 1: /* ref updated, item inserted */ rep->rrsets[i] = rep->ref[i].key; } diff --git a/services/cache/infra.c b/services/cache/infra.c index ca1102ef5f7f..734b7969e7a2 100644 --- a/services/cache/infra.c +++ b/services/cache/infra.c @@ -249,7 +249,7 @@ infra_create(struct config_file* cfg) name_tree_init_parents(&infra->domain_limits); } infra_ip_ratelimit = cfg->ip_ratelimit; - infra->client_ip_rates = slabhash_create(cfg->ratelimit_slabs, + infra->client_ip_rates = slabhash_create(cfg->ip_ratelimit_slabs, INFRA_HOST_STARTSIZE, cfg->ip_ratelimit_size, &ip_rate_sizefunc, &ip_rate_compfunc, &ip_rate_delkeyfunc, &ip_rate_deldatafunc, NULL); if(!infra->client_ip_rates) { diff --git a/services/listen_dnsport.c b/services/listen_dnsport.c index 0341f3067489..3b53676d0e06 100644 --- a/services/listen_dnsport.c +++ b/services/listen_dnsport.c @@ -792,7 +792,12 @@ create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto, #endif if ((setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN, &qlen, sizeof(qlen))) == -1 ) { - log_err("Setting TCP Fast Open as server failed: %s", strerror(errno)); +#ifdef ENOPROTOOPT + /* squelch ENOPROTOOPT: freebsd server mode with kernel support + disabled, except when verbosity enabled for debugging */ + if(errno != ENOPROTOOPT || verbosity >= 3) +#endif + log_err("Setting TCP Fast Open as server failed: %s", strerror(errno)); } #endif return s; diff --git a/services/localzone.c b/services/localzone.c index a19b5252643f..6bde432e8d09 100644 --- a/services/localzone.c +++ b/services/localzone.c @@ -260,7 +260,8 @@ rrstr_get_rr_content(const char* str, uint8_t** nm, uint16_t* type, /** return name and class of rr; parses string */ static int -get_rr_nameclass(const char* str, uint8_t** nm, uint16_t* dclass) +get_rr_nameclass(const char* str, uint8_t** nm, uint16_t* dclass, + uint16_t* dtype) { uint8_t rr[LDNS_RR_BUF_SIZE]; size_t len = sizeof(rr), dname_len = 0; @@ -274,6 +275,7 @@ get_rr_nameclass(const char* str, uint8_t** nm, uint16_t* dclass) } *nm = memdup(rr, dname_len); *dclass = sldns_wirerr_get_class(rr, len, dname_len); + *dtype = sldns_wirerr_get_type(rr, len, dname_len); if(!*nm) { log_err("out of memory"); return 0; @@ -522,18 +524,18 @@ static int lz_enter_rr_str(struct local_zones* zones, const char* rr) { uint8_t* rr_name; - uint16_t rr_class; + uint16_t rr_class, rr_type; size_t len; int labs; struct local_zone* z; int r; - if(!get_rr_nameclass(rr, &rr_name, &rr_class)) { + if(!get_rr_nameclass(rr, &rr_name, &rr_class, &rr_type)) { log_err("bad rr %s", rr); return 0; } labs = dname_count_size_labels(rr_name, &len); lock_rw_rdlock(&zones->lock); - z = local_zones_lookup(zones, rr_name, len, labs, rr_class); + z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); if(!z) { lock_rw_unlock(&zones->lock); fatal_exit("internal error: no zone for rr %s", rr); @@ -719,9 +721,9 @@ lz_nodefault(struct config_file* cfg, const char* name) return 0; } -/** enter AS112 default zone */ +/** enter (AS112) empty default zone */ static int -add_as112_default(struct local_zones* zones, struct config_file* cfg, +add_empty_default(struct local_zones* zones, struct config_file* cfg, const char* name) { struct local_zone* z; @@ -762,7 +764,7 @@ int local_zone_enter_defaults(struct local_zones* zones, struct config_file* cfg /* localhost. zone */ if(!lz_exists(zones, "localhost.") && !lz_nodefault(cfg, "localhost.")) { - if(!(z=lz_enter_zone(zones, "localhost.", "static", + if(!(z=lz_enter_zone(zones, "localhost.", "redirect", LDNS_RR_CLASS_IN)) || !lz_enter_rr_into_zone(z, "localhost. 10800 IN NS localhost.") || @@ -816,26 +818,24 @@ int local_zone_enter_defaults(struct local_zones* zones, struct config_file* cfg lock_rw_unlock(&z->lock); } /* onion. zone (RFC 7686) */ - if(!lz_exists(zones, "onion.") && - !lz_nodefault(cfg, "onion.")) { - if(!(z=lz_enter_zone(zones, "onion.", "static", - LDNS_RR_CLASS_IN)) || - !lz_enter_rr_into_zone(z, - "onion. 10800 IN NS localhost.") || - !lz_enter_rr_into_zone(z, - "onion. 10800 IN SOA localhost. nobody.invalid. " - "1 3600 1200 604800 10800")) { - log_err("out of memory adding default zone"); - if(z) { lock_rw_unlock(&z->lock); } - return 0; - } - lock_rw_unlock(&z->lock); + if(!add_empty_default(zones, cfg, "onion.")) { + log_err("out of memory adding default zone"); + return 0; + } + /* test. zone (RFC 7686) */ + if(!add_empty_default(zones, cfg, "test.")) { + log_err("out of memory adding default zone"); + return 0; + } + /* invalid. zone (RFC 7686) */ + if(!add_empty_default(zones, cfg, "invalid.")) { + log_err("out of memory adding default zone"); + return 0; } - /* block AS112 zones, unless asked not to */ if(!cfg->unblock_lan_zones) { for(zstr = as112_zones; *zstr; zstr++) { - if(!add_as112_default(zones, cfg, *zstr)) { + if(!add_empty_default(zones, cfg, *zstr)) { log_err("out of memory adding default zone"); return 0; } @@ -913,16 +913,17 @@ lz_setup_implicit(struct local_zones* zones, struct config_file* cfg) init_parents(zones); /* to enable local_zones_lookup() */ for(p = cfg->local_data; p; p = p->next) { uint8_t* rr_name; - uint16_t rr_class; + uint16_t rr_class, rr_type; size_t len; int labs; - if(!get_rr_nameclass(p->str, &rr_name, &rr_class)) { + if(!get_rr_nameclass(p->str, &rr_name, &rr_class, &rr_type)) { log_err("Bad local-data RR %s", p->str); return 0; } labs = dname_count_size_labels(rr_name, &len); lock_rw_rdlock(&zones->lock); - if(!local_zones_lookup(zones, rr_name, len, labs, rr_class)) { + if(!local_zones_lookup(zones, rr_name, len, labs, rr_class, + rr_type)) { if(!have_name) { dclass = rr_class; nm = rr_name; @@ -1053,21 +1054,26 @@ local_zones_apply_cfg(struct local_zones* zones, struct config_file* cfg) struct local_zone* local_zones_lookup(struct local_zones* zones, - uint8_t* name, size_t len, int labs, uint16_t dclass) + uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype) { return local_zones_tags_lookup(zones, name, len, labs, - dclass, NULL, 0, 1); + dclass, dtype, NULL, 0, 1); } struct local_zone* local_zones_tags_lookup(struct local_zones* zones, - uint8_t* name, size_t len, int labs, uint16_t dclass, + uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype, uint8_t* taglist, size_t taglen, int ignoretags) { rbnode_type* res = NULL; struct local_zone *result; struct local_zone key; int m; + /* for type DS use a zone higher when on a zonecut */ + if(dtype == LDNS_RR_TYPE_DS && !dname_is_root(name)) { + dname_remove_label(&name, &len); + labs--; + } key.node.key = &key; key.dclass = dclass; key.name = name; @@ -1583,7 +1589,7 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, if(view->local_zones && (z = local_zones_lookup(view->local_zones, qinfo->qname, qinfo->qname_len, labs, - qinfo->qclass))) { + qinfo->qclass, qinfo->qtype))) { verbose(VERB_ALGO, "using localzone from view: %s", view->name); @@ -1600,8 +1606,8 @@ local_zones_answer(struct local_zones* zones, struct module_env* env, /* try global local_zones tree */ lock_rw_rdlock(&zones->lock); if(!(z = local_zones_tags_lookup(zones, qinfo->qname, - qinfo->qname_len, labs, qinfo->qclass, taglist, - taglen, 0))) { + qinfo->qname_len, labs, qinfo->qclass, qinfo->qtype, + taglist, taglen, 0))) { lock_rw_unlock(&zones->lock); return 0; } @@ -1756,19 +1762,19 @@ int local_zones_add_RR(struct local_zones* zones, const char* rr) { uint8_t* rr_name; - uint16_t rr_class; + uint16_t rr_class, rr_type; size_t len; int labs; struct local_zone* z; int r; - if(!get_rr_nameclass(rr, &rr_name, &rr_class)) { + if(!get_rr_nameclass(rr, &rr_name, &rr_class, &rr_type)) { return 0; } labs = dname_count_size_labels(rr_name, &len); /* could first try readlock then get writelock if zone does not exist, * but we do not add enough RRs (from multiple threads) to optimize */ lock_rw_wrlock(&zones->lock); - z = local_zones_lookup(zones, rr_name, len, labs, rr_class); + z = local_zones_lookup(zones, rr_name, len, labs, rr_class, rr_type); if(!z) { z = local_zones_add_zone(zones, rr_name, len, labs, rr_class, local_zone_transparent); @@ -1820,14 +1826,47 @@ del_empty_term(struct local_zone* z, struct local_data* d, } } +/** find and remove type from list in domain struct */ +static void +del_local_rrset(struct local_data* d, uint16_t dtype) +{ + struct local_rrset* prev=NULL, *p=d->rrsets; + while(p && ntohs(p->rrset->rk.type) != dtype) { + prev = p; + p = p->next; + } + if(!p) + return; /* rrset type not found */ + /* unlink it */ + if(prev) prev->next = p->next; + else d->rrsets = p->next; + /* no memory recycling for zone deletions ... */ +} + void local_zones_del_data(struct local_zones* zones, uint8_t* name, size_t len, int labs, uint16_t dclass) { /* find zone */ struct local_zone* z; struct local_data* d; + + /* remove DS */ lock_rw_rdlock(&zones->lock); - z = local_zones_lookup(zones, name, len, labs, dclass); + z = local_zones_lookup(zones, name, len, labs, dclass, LDNS_RR_TYPE_DS); + if(z) { + lock_rw_wrlock(&z->lock); + d = lz_find_node(z, name, len, labs); + if(d) { + del_local_rrset(d, LDNS_RR_TYPE_DS); + del_empty_term(z, d, name, len, labs); + } + lock_rw_unlock(&z->lock); + } + lock_rw_unlock(&zones->lock); + + /* remove other types */ + lock_rw_rdlock(&zones->lock); + z = local_zones_lookup(zones, name, len, labs, dclass, 0); if(!z) { /* no such zone, we're done */ lock_rw_unlock(&zones->lock); diff --git a/services/localzone.h b/services/localzone.h index fcdad41666d2..0a8759268bb2 100644 --- a/services/localzone.h +++ b/services/localzone.h @@ -235,6 +235,7 @@ void local_zone_delete(struct local_zone* z); * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. + * @param dtype: type to lookup, if type DS a zone higher is used for zonecuts. * @param taglist: taglist to lookup. * @param taglen: lenth of taglist. * @param ignoretags: lookup zone by name and class, regardless the @@ -242,7 +243,7 @@ void local_zone_delete(struct local_zone* z); * @return closest local_zone or NULL if no covering zone is found. */ struct local_zone* local_zones_tags_lookup(struct local_zones* zones, - uint8_t* name, size_t len, int labs, uint16_t dclass, + uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype, uint8_t* taglist, size_t taglen, int ignoretags); /** @@ -253,10 +254,12 @@ struct local_zone* local_zones_tags_lookup(struct local_zones* zones, * @param len: length of name. * @param labs: labelcount of name. * @param dclass: class to lookup. + * @param dtype: type of the record, if type DS then a zone higher up is found + * pass 0 to just plain find a zone for a name. * @return closest local_zone or NULL if no covering zone is found. */ struct local_zone* local_zones_lookup(struct local_zones* zones, - uint8_t* name, size_t len, int labs, uint16_t dclass); + uint8_t* name, size_t len, int labs, uint16_t dclass, uint16_t dtype); /** * Debug helper. Print all zones diff --git a/services/outside_network.c b/services/outside_network.c index 9b1490e643f8..fe2b55b1ac17 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -268,6 +268,13 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) if (connectx(s, &endpoints, SAE_ASSOCID_ANY, CONNECT_DATA_IDEMPOTENT | CONNECT_RESUME_ON_READ_WRITE, NULL, 0, NULL, NULL) == -1) { + /* if fails, failover to connect for OSX 10.10 */ +#ifdef EINPROGRESS + if(errno != EINPROGRESS) { +#else + if(1) { +#endif + if(connect(s, (struct sockaddr*)&w->addr, w->addrlen) == -1) { #else /* USE_OSX_MSG_FASTOPEN*/ #ifdef USE_MSG_FASTOPEN pend->c->tcp_do_fastopen = 1; @@ -302,6 +309,10 @@ outnet_tcp_take_into_use(struct waiting_tcp* w, uint8_t* pkt, size_t pkt_len) #ifdef USE_MSG_FASTOPEN } #endif /* USE_MSG_FASTOPEN */ +#ifdef USE_OSX_MSG_FASTOPEN + } + } +#endif /* USE_OSX_MSG_FASTOPEN */ if(w->outnet->sslctx && w->ssl_upstream) { pend->c->ssl = outgoing_ssl_fd(w->outnet->sslctx, s); if(!pend->c->ssl) { diff --git a/sldns/parseutil.c b/sldns/parseutil.c index 32717616aa4a..769987c64777 100644 --- a/sldns/parseutil.c +++ b/sldns/parseutil.c @@ -402,10 +402,12 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz, /* ........ ........ ....4444 4....... ........ */ c = src[3] >> 7 ; + /* fallthrough */ case 3: dst[4] = b32[(src[2] & 0x0f) << 1 | c]; /* ........ .......3 3333.... ........ ........ */ c = src[2] >> 4 ; + /* fallthrough */ case 2: dst[3] = b32[(src[1] & 0x01) << 4 | c]; /* ........ ..22222. ........ ........ ........ */ @@ -413,6 +415,7 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz, /* .....111 11...... ........ ........ ........ */ c = src[1] >> 6 ; + /* fallthrough */ case 1: dst[1] = b32[(src[0] & 0x07) << 2 | c]; /* 00000... ........ ........ ........ ........ */ @@ -423,9 +426,12 @@ sldns_b32_ntop_base(const uint8_t* src, size_t src_sz, char* dst, size_t dst_sz, switch (src_sz) { case 1: dst[2] = '='; dst[3] = '='; + /* fallthrough */ case 2: dst[4] = '='; + /* fallthrough */ case 3: dst[5] = '='; dst[6] = '='; + /* fallthrough */ case 4: dst[7] = '='; } } @@ -537,15 +543,18 @@ sldns_b32_pton_base(const char* src, size_t src_sz, uint8_t* dst, size_t dst_sz, /* ........ ........ ........ .55555.. ........ */ /* ........ ........ ....4444 4....... ........ */ dst[3] = buf[4] << 7 | buf[5] << 2 | buf[6] >> 3; + /* fallthrough */ case 5: /* ........ ........ ....4444 4....... ........ */ /* ........ .......3 3333.... ........ ........ */ dst[2] = buf[3] << 4 | buf[4] >> 1; + /* fallthrough */ case 4: /* ........ .......3 3333.... ........ ........ */ /* ........ ..22222. ........ ........ ........ */ /* .....111 11...... ........ ........ ........ */ dst[1] = buf[1] << 6 | buf[2] << 1 | buf[3] >> 4; + /* fallthrough */ case 2: /* .....111 11...... ........ ........ ........ */ /* 00000... ........ ........ ........ ........ */ diff --git a/sldns/str2wire.c b/sldns/str2wire.c index b4f84faf9b3b..f84d7d6b823b 100644 --- a/sldns/str2wire.c +++ b/sldns/str2wire.c @@ -1190,6 +1190,10 @@ int sldns_str2wire_b64_buf(const char* str, uint8_t* rd, size_t* len) { size_t sz = sldns_b64_pton_calculate_size(strlen(str)); int n; + if(strcmp(str, "0") == 0) { + *len = 0; + return LDNS_WIREPARSE_ERR_OK; + } if(*len < sz) return LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL; n = sldns_b64_pton(str, rd, *len); @@ -1223,6 +1227,10 @@ int sldns_str2wire_hex_buf(const char* str, uint8_t* rd, size_t* len) s++; continue; } + if(dlen == 0 && *s == '0' && *(s+1) == 0) { + *len = 0; + return LDNS_WIREPARSE_ERR_OK; + } if(!isxdigit((unsigned char)*s)) return RET_ERR(LDNS_WIREPARSE_ERR_SYNTAX_HEX, s-str); if(*len < dlen/2 + 1) @@ -1685,12 +1693,15 @@ int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len) struct protoent *p = getprotobyname(token); have_proto = 1; if(p) rd[0] = (uint8_t)p->p_proto; + else if(strcasecmp(token, "tcp")==0) rd[0]=6; + else if(strcasecmp(token, "udp")==0) rd[0]=17; else rd[0] = (uint8_t)atoi(token); (void)strlcpy(proto_str, token, sizeof(proto_str)); } else { int serv_port; struct servent *serv = getservbyname(token, proto_str); if(serv) serv_port=(int)ntohs((uint16_t)serv->s_port); + else if(strcasecmp(token, "domain")==0) serv_port=53; else { serv_port = atoi(token); if(serv_port == 0 && strcmp(token, "0") != 0) { diff --git a/sldns/wire2str.c b/sldns/wire2str.c index ef505780f454..52b1ed0c2aa9 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -1220,11 +1220,17 @@ static int sldns_wire2str_b64_scan_num(uint8_t** d, size_t* dl, char** s, int sldns_wire2str_b64_scan(uint8_t** d, size_t* dl, char** s, size_t* sl) { + if(*dl == 0) { + return sldns_str_print(s, sl, "0"); + } return sldns_wire2str_b64_scan_num(d, dl, s, sl, *dl); } int sldns_wire2str_hex_scan(uint8_t** d, size_t* dl, char** s, size_t* sl) { + if(*dl == 0) { + return sldns_str_print(s, sl, "0"); + } return print_remainder_hex("", d, dl, s, sl); } @@ -1465,6 +1471,10 @@ int sldns_wire2str_wks_scan(uint8_t** d, size_t* dl, char** s, size_t* sl) if(protocol && (protocol->p_name != NULL)) { w += sldns_str_print(s, sl, "%s", protocol->p_name); proto_name = protocol->p_name; + } else if(protocol_nr == 6) { + w += sldns_str_print(s, sl, "tcp"); + } else if(protocol_nr == 17) { + w += sldns_str_print(s, sl, "udp"); } else { w += sldns_str_print(s, sl, "%u", (unsigned)protocol_nr); } diff --git a/smallapp/unbound-anchor.c b/smallapp/unbound-anchor.c index 19ee85b1aaaa..c060ad394c1d 100644 --- a/smallapp/unbound-anchor.c +++ b/smallapp/unbound-anchor.c @@ -2326,7 +2326,9 @@ int main(int argc, char* argv[]) #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); +#endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) OpenSSL_add_all_algorithms(); #else @@ -2337,7 +2339,7 @@ int main(int argc, char* argv[]) #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else - (void)OPENSSL_init_ssl(0, NULL); + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif if(dolist) do_list_builtin(); diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 11df4415c5c5..7e9cb4740ae3 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -71,6 +71,9 @@ #ifdef WITH_PYTHONMODULE #include "pythonmod/pythonmod.h" #endif +#ifdef CLIENT_SUBNET +#include "edns-subnet/subnet-whitelist.h" +#endif /** Give checkconf usage, and exit (1). */ static void @@ -345,6 +348,20 @@ check_chroot_filelist_wild(const char* desc, struct config_strlist* list, } } +#ifdef CLIENT_SUBNET +/** check ECS configuration */ +static void +ecs_conf_checks(struct config_file* cfg) +{ + struct ecs_whitelist* whitelist = NULL; + if(!(whitelist = ecs_whitelist_create())) + fatal_exit("Could not create ednssubnet whitelist: out of memory"); + if(!ecs_whitelist_apply_cfg(whitelist, cfg)) + fatal_exit("Could not setup ednssubnet whitelist"); + ecs_whitelist_delete(whitelist); +} +#endif /* CLIENT_SUBNET */ + /** check configuration for errors */ static void morechecks(struct config_file* cfg, const char* fname) @@ -427,8 +444,11 @@ morechecks(struct config_file* cfg, const char* fname) check_chroot_string("dlv-anchor-file", &cfg->dlv_anchor_file, cfg->chrootdir, cfg); #ifdef USE_IPSECMOD - check_chroot_string("ipsecmod-hook", &cfg->ipsecmod_hook, cfg->chrootdir, - cfg); + if(cfg->ipsecmod_enabled && strstr(cfg->module_conf, "ipsecmod")) { + /* only check hook if enabled */ + check_chroot_string("ipsecmod-hook", &cfg->ipsecmod_hook, + cfg->chrootdir, cfg); + } #endif /* remove chroot setting so that modules are not stripping pathnames*/ free(cfg->chrootdir); @@ -474,6 +494,8 @@ morechecks(struct config_file* cfg, const char* fname) #ifdef CLIENT_SUBNET && strcmp(cfg->module_conf, "subnetcache iterator") != 0 && strcmp(cfg->module_conf, "subnetcache validator iterator") != 0 + && strcmp(cfg->module_conf, "dns64 subnetcache iterator") != 0 + && strcmp(cfg->module_conf, "dns64 subnetcache validator iterator") != 0 #endif #if defined(WITH_PYTHONMODULE) && defined(CLIENT_SUBNET) && strcmp(cfg->module_conf, "python subnetcache iterator") != 0 @@ -524,6 +546,9 @@ morechecks(struct config_file* cfg, const char* fname) localzonechecks(cfg); view_and_respipchecks(cfg); +#ifdef CLIENT_SUBNET + ecs_conf_checks(cfg); +#endif } /** check forwards */ diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index aa2db4a61dfb..4b3efc134dc0 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -207,7 +207,7 @@ static void pr_stats(const char* nm, struct ub_stats_info* s) PR_UL_NM("num.dnscrypt.cleartext", s->svr.num_query_dnscrypt_cleartext); PR_UL_NM("num.dnscrypt.malformed", s->svr.num_query_dnscrypt_crypted_malformed); -#endif +#endif /* USE_DNSCRYPT */ printf("%s.requestlist.avg"SQ"%g\n", nm, (s->svr.num_queries_missed_cache+s->svr.num_queries_prefetch)? (double)s->svr.sum_query_list_size/ @@ -251,6 +251,10 @@ static void print_mem(struct ub_shm_stat_info* shm_stat) #ifdef USE_IPSECMOD PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod); #endif +#ifdef USE_DNSCRYPT + PR_LL("mem.cache.dnscrypt_shared_secret", + shm_stat->mem.dnscrypt_shared_secret); +#endif } /** print histogram */ @@ -337,6 +341,8 @@ static void print_extended(struct ub_stats_info* s) if(!inhibit_zero || s->svr.ans_rcode_nodata) { PR_UL("num.answer.rcode.nodata", s->svr.ans_rcode_nodata); } + /* iteration */ + PR_UL("num.query.ratelimited", s->svr.queries_ratelimited); /* validation */ PR_UL("num.answer.secure", s->svr.ans_secure); PR_UL("num.answer.bogus", s->svr.ans_bogus); @@ -349,6 +355,12 @@ static void print_extended(struct ub_stats_info* s) PR_UL("rrset.cache.count", s->svr.rrset_cache_count); PR_UL("infra.cache.count", s->svr.infra_cache_count); PR_UL("key.cache.count", s->svr.key_cache_count); +#ifdef USE_DNSCRYPT + PR_UL("dnscrypt_shared_secret.cache.count", + s->svr.shared_secret_cache_count); + PR_UL("num.query.dnscrypt.shared_secret.cachemiss", + s->svr.num_query_dnscrypt_secret_missed_cache); +#endif /* USE_DNSCRYPT */ } /** print statistics out of memory structures */ @@ -356,7 +368,7 @@ static void do_stats_shm(struct config_file* cfg, struct ub_stats_info* stats, struct ub_shm_stat_info* shm_stat) { int i; - char nm[16]; + char nm[32]; for(i=0; inum_threads; i++) { snprintf(nm, sizeof(nm), "thread%d", i); pr_stats(nm, &stats[i+1]); @@ -763,7 +775,9 @@ int main(int argc, char* argv[]) #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); +#endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) OpenSSL_add_all_algorithms(); #else @@ -774,7 +788,7 @@ int main(int argc, char* argv[]) #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else - (void)OPENSSL_init_ssl(0, NULL); + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif if(!RAND_status()) { diff --git a/testcode/do-tests.sh b/testcode/do-tests.sh index dcf93907e388..5439f0f285e6 100755 --- a/testcode/do-tests.sh +++ b/testcode/do-tests.sh @@ -1,15 +1,15 @@ #!/usr/bin/env bash . testdata/common.sh -NEED_SPLINT='00-lint.tpkg' -NEED_DOXYGEN='01-doc.tpkg' -NEED_XXD='fwd_compress_c00c.tpkg fwd_zero.tpkg' -NEED_NC='fwd_compress_c00c.tpkg fwd_zero.tpkg' -NEED_CURL='06-ianaports.tpkg root_anchor.tpkg' -NEED_WHOAMI='07-confroot.tpkg' -NEED_IPV6='fwd_ancil.tpkg fwd_tcp_tc6.tpkg stub_udp6.tpkg edns_cache.tpkg' -NEED_NOMINGW='tcp_sigpipe.tpkg 07-confroot.tpkg 08-host-lib.tpkg fwd_ancil.tpkg' -NEED_DNSCRYPT_PROXY='dnscrypt_queries.tpkg dnscrypt_queries_chacha.tpkg' +NEED_SPLINT='00-lint.tdir' +NEED_DOXYGEN='01-doc.tdir' +NEED_XXD='fwd_compress_c00c.tdir fwd_zero.tdir' +NEED_NC='fwd_compress_c00c.tdir fwd_zero.tdir' +NEED_CURL='06-ianaports.tdir root_anchor.tdir' +NEED_WHOAMI='07-confroot.tdir' +NEED_IPV6='fwd_ancil.tdir fwd_tcp_tc6.tdir stub_udp6.tdir edns_cache.tdir' +NEED_NOMINGW='tcp_sigpipe.tdir 07-confroot.tdir 08-host-lib.tdir fwd_ancil.tdir' +NEED_DNSCRYPT_PROXY='dnscrypt_queries.tdir dnscrypt_queries_chacha.tdir' # test if dig and ldns-testns are available. test_tool_avail "dig" @@ -30,9 +30,9 @@ else fi cd testdata; -sh ../testcode/mini_tpkg.sh clean +sh ../testcode/mini_tdir.sh clean rm -f .perfstats.txt -for test in `ls *.tpkg`; do +for test in `ls -d *.tdir`; do SKIP=0 skip_if_in_list $test "$NEED_SPLINT" "splint" skip_if_in_list $test "$NEED_DOXYGEN" "doxygen" @@ -54,10 +54,10 @@ for test in `ls *.tpkg`; do fi if test $SKIP -eq 0; then echo $test - sh ../testcode/mini_tpkg.sh -a ../.. exe $test + sh ../testcode/mini_tdir.sh -a ../.. exe $test else echo "skip $test" fi done -sh ../testcode/mini_tpkg.sh report +sh ../testcode/mini_tdir.sh report cat .perfstats.txt diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 154013a8c8e3..cd23b8feb49a 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -1331,7 +1331,7 @@ int serviced_cmp(const void* ATTR_UNUSED(a), const void* ATTR_UNUSED(b)) return 0; } -/* timers in testbound for autotrust. statistics tested in tpkg. */ +/* timers in testbound for autotrust. statistics tested in tdir. */ struct comm_timer* comm_timer_create(struct comm_base* base, void (*cb)(void*), void* cb_arg) { diff --git a/testcode/mini_tdir.sh b/testcode/mini_tdir.sh new file mode 100755 index 000000000000..96745515e3e4 --- /dev/null +++ b/testcode/mini_tdir.sh @@ -0,0 +1,171 @@ +# tdir that only exes the files. +args="../.." +if test "$1" = "-a"; then + args=$2 + shift + shift +fi + +if test "$1" = "clean"; then + echo "rm -f result.* .done* .tdir.var.master .tdir.var.test" + rm -f result.* .done* .tdir.var.master .tdir.var.test + exit 0 +fi +if test "$1" = "fake"; then + echo "minitdir fake $2" + echo "fake" > .done-`basename $2 .tdir` + exit 0 +fi +if test "$1" = "-f" && test "$2" = "report"; then + echo "Minitdir Long Report" + pass=0 + fail=0 + skip=0 + echo " STATUS ELAPSED TESTNAME TESTDESCRIPTION" + for result in *.tdir; do + name=`basename $result .tdir` + timelen=" " + desc="" + if test -f "result.$name"; then + timestart=`grep ^DateRunStart: "result.$name" | sed -e 's/DateRunStart: //'` + timeend=`grep ^DateRunEnd: "result.$name" | sed -e 's/DateRunEnd: //'` + timesec=`expr $timeend - $timestart` + timelen=`printf %4ds $timesec` + if test $? -ne 0; then + timelen="$timesec""s" + fi + desc=`grep ^Description: "result.$name" | sed -e 's/Description: //'` + fi + if test -f ".done-$name"; then + if test "$1" != "-q"; then + echo "** PASSED ** $timelen $name: $desc" + pass=`expr $pass + 1` + fi + else + if test -f "result.$name"; then + echo "!! FAILED !! $timelen $name: $desc" + fail=`expr $fail + 1` + else + echo ".> SKIPPED<< $timelen $name: $desc" + skip=`expr $skip + 1` + fi + fi + done + echo "" + if test "$skip" = "0"; then + echo "$pass pass, $fail fail" + else + echo "$pass pass, $fail fail, $skip skip" + fi + echo "" + exit 0 +fi +if test "$1" = "report" || test "$2" = "report"; then + echo "Minitdir Report" + for result in *.tdir; do + name=`basename $result .tdir` + if test -f ".done-$name"; then + if test "$1" != "-q"; then + echo "** PASSED ** : $name" + fi + else + if test -f "result.$name"; then + echo "!! FAILED !! : $name" + else + echo ">> SKIPPED<< : $name" + fi + fi + done + exit 0 +fi + +if test "$1" != 'exe'; then + # usage + echo "mini tdir. Reduced functionality for old shells." + echo " tdir exe " + echo " tdir fake " + echo " tdir clean" + echo " tdir [-q|-f] report" + exit 1 +fi +shift + +# do not execute if the disk is too full +#DISKLIMIT=100000 +# This check is not portable (to Solaris 10). +#avail=`df . | tail -1 | awk '{print $4}'` +#if test "$avail" -lt "$DISKLIMIT"; then + #echo "minitdir: The disk is too full! Only $avail." + #exit 1 +#fi + +name=`basename $1 .tdir` +dir=$name.$$ +result=result.$name +done=.done-$name +success="no" +if test -x "`which bash`"; then + shell="bash" +else + shell="sh" +fi + +# check already done +if test -f .done-$name; then + echo "minitdir .done-$name exists. skip test." + exit 0 +fi + +# Copy +echo "minitdir copy $1 to $dir" +mkdir $dir +cp -a $name.tdir/* $dir/ +cd $dir + +# EXE +echo "minitdir exe $name" > $result +grep "Description:" $name.dsc >> $result 2>&1 +echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result +if test -f $name.pre; then + echo "minitdir exe $name.pre" + echo "minitdir exe $name.pre" >> $result + $shell $name.pre $args >> $result + if test $? -ne 0; then + echo "Warning: $name.pre did not exit successfully" + fi +fi +if test -f $name.test; then + echo "minitdir exe $name.test" + echo "minitdir exe $name.test" >> $result + $shell $name.test $args >>$result 2>&1 + if test $? -ne 0; then + echo "$name: FAILED" >> $result + echo "$name: FAILED" + success="no" + else + echo "$name: PASSED" >> $result + echo "$name: PASSED" > ../.done-$name + echo "$name: PASSED" + success="yes" + fi +fi +if test -f $name.post; then + echo "minitdir exe $name.post" + echo "minitdir exe $name.post" >> $result + $shell $name.post $args >> $result + if test $? -ne 0; then + echo "Warning: $name.post did not exit successfully" + fi +fi +echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result + +mv $result .. +cd .. +rm -rf $dir +# compat for windows where deletion may not succeed initially (files locked +# by processes that still have to exit). +if test $? -eq 1; then + echo "minitdir waiting for processes to terminate" + sleep 2 # some time to exit, and try again + rm -rf $dir +fi diff --git a/testcode/petal.c b/testcode/petal.c index b30549365f51..1c26fa700346 100644 --- a/testcode/petal.c +++ b/testcode/petal.c @@ -643,7 +643,9 @@ int main(int argc, char* argv[]) #ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); #endif +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); +#endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) OpenSSL_add_all_algorithms(); #else @@ -654,7 +656,7 @@ int main(int argc, char* argv[]) #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else - (void)OPENSSL_init_ssl(0, NULL); + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif do_service(addr, port, key, cert); diff --git a/testcode/run_vm.sh b/testcode/run_vm.sh index 78649f07a941..d4c2a2e11dda 100755 --- a/testcode/run_vm.sh +++ b/testcode/run_vm.sh @@ -1,7 +1,7 @@ #!/usr/local/bin/bash -# run tpkg tests from within a VM. Looks for loopback addr. +# run tdir tests from within a VM. Looks for loopback addr. # if run not from within a VM, runs the tests as usual. -# with one argument: run that tpkg, otherwise, run all tpkgs. +# with one argument: run that tdir, otherwise, run all tdirs. get_lo0_ip4() { if test -x /sbin/ifconfig @@ -23,12 +23,12 @@ else ALT_LOOPBACK=true fi cd testdata -TPKG=../testcode/mini_tpkg.sh -#RUNLIST=`(ls -1 *.tpkg|grep -v '^0[016]')` -RUNLIST=`(ls -1 *.tpkg)` +TPKG=../testcode/mini_tdir.sh +#RUNLIST=`(ls -1d *.tdir|grep -v '^0[016]')` +RUNLIST=`(ls -1d *.tdir)` if test "$#" = "1"; then RUNLIST="$1"; fi -# fix up tpkg that was edited on keyboard interrupt. +# fix up tdir that was edited on keyboard interrupt. cleanup() { echo cleanup if test -f "$t.bak"; then mv "$t.bak" "$t"; fi @@ -44,16 +44,15 @@ do continue fi # We have alternative 127.0.0.1 number - if ( echo $t | grep '6\.tpkg$' ) # skip IPv6 tests + if ( echo $t | grep '6\.tdir$' ) # skip IPv6 tests then continue - elif test "$t" = "edns_cache.tpkg" # This one is IPv6 too! + elif test "$t" = "edns_cache.tdir" # This one is IPv6 too! then continue fi - cp -p "$t" "$t.bak" - tar xzf $t - find "${t%.tpkg}.dir" -type f \ + cp -ap "$t" "$t.bak" + find "${t}" -type f \ -exec grep -q -e '127\.0\.0\.1' -e '@localhost' {} \; -print | { while read f do @@ -63,15 +62,14 @@ do mv "$f._" "$f" done } - find "${t%.tpkg}.dir" -type d -name "127.0.0.1" -print | { + find "${t}" -type d -name "127.0.0.1" -print | { while read d do mv -v "$d" "${d%127.0.0.1}${LO0_IP4}" done } - tar czf $t "${t%.tpkg}.dir" - rm -fr "${t%.tpkg}.dir" $TPKG exe $t + rm -fr "${t}" mv "$t.bak" "$t" done # get out of testdata/ diff --git a/testcode/streamtcp.c b/testcode/streamtcp.c index f5eb8fc48b1d..b494507def26 100644 --- a/testcode/streamtcp.c +++ b/testcode/streamtcp.c @@ -410,7 +410,9 @@ int main(int argc, char** argv) return 1; } if(usessl) { +#if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) ERR_load_SSL_strings(); +#endif #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_CRYPTO) OpenSSL_add_all_algorithms(); #else @@ -421,7 +423,7 @@ int main(int argc, char** argv) #if OPENSSL_VERSION_NUMBER < 0x10100000 || !defined(HAVE_OPENSSL_INIT_SSL) (void)SSL_library_init(); #else - (void)OPENSSL_init_ssl(0, NULL); + (void)OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL); #endif } send_em(svr, udp, usessl, noanswer, argc, argv); diff --git a/testcode/unitverify.c b/testcode/unitverify.c index e5e5b0f7bacb..e421d90bca56 100644 --- a/testcode/unitverify.c +++ b/testcode/unitverify.c @@ -299,6 +299,7 @@ verifytest_file(const char* fname, const char* at_date) struct module_env env; struct val_env ve; time_t now = time(NULL); + unit_show_func("signature verify", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); @@ -341,6 +342,7 @@ dstest_file(const char* fname) struct entry* e; struct entry* list = read_datafile(fname, 1); struct module_env env; + unit_show_func("DS verify", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); @@ -474,6 +476,7 @@ nsec3_hash_test(const char* fname) sldns_buffer* buf = sldns_buffer_new(65535); struct entry* e; struct entry* list = read_datafile(fname, 1); + unit_show_func("NSEC3 hash", fname); if(!list) fatal_exit("could not read %s: %s", fname, strerror(errno)); diff --git a/testdata/00-lint.tdir/00-lint.dsc b/testdata/00-lint.tdir/00-lint.dsc new file mode 100644 index 000000000000..4778f7a81ba5 --- /dev/null +++ b/testdata/00-lint.tdir/00-lint.dsc @@ -0,0 +1,16 @@ +BaseName: 00-lint +Version: 1.0 +Description: Put source into lint. +CreationDate: Wed Jan 3 14:12:02 CET 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: 00-lint.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/00-lint.tdir/00-lint.test b/testdata/00-lint.tdir/00-lint.test new file mode 100644 index 000000000000..e40dce7d6234 --- /dev/null +++ b/testdata/00-lint.tdir/00-lint.test @@ -0,0 +1,11 @@ +# #-- 00-lint.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test +. ../common.sh +PRE="../.." +get_make + +(cd $PRE ; $MAKE lint) + diff --git a/testdata/00-lint.tpkg b/testdata/00-lint.tpkg deleted file mode 100644 index 89e44966d8b6cb4dfb066725bba8ae06133104dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmV+t0`2`DiwFQY_*6{*1MQUEZ__Xk!1L_C;gXrv$>O4)`FDgL^%&%Vo@5dNyD9M21L>OBzxN#eNcWfF^iE~BXL z*LYIKK`fI<3{ftFU>JH3Kh=dE(psksfOlKBPMgQ{w6TY{&|wh|;{S7OXM46G#PCPF zcg89$=(7*_&Z4eTkX*2_wlh;S zu3wn84s6|;nFds>q5oM}X0+<$W99IaE1knzRRM$`qf`c|2q2qWLVzWJoh#gdpEfDv zhQk%l_z1h=Yqe0y?+@5uljv@#p;Q)K12^cWIpz}FE_DTkduBVS(d;AmbKv}xyXJbqQH`&6 ze1emc%|SclXa&6r_shNcd2O(~KtIOCLVZD#4d!l9E!L*CH*8ti5;5MHoz-PoSKKby z^!?=3QFjr3#1`6pF4eVW?D;H*V-&$lI6fb}oAh<<1*7sn5ClOG1VIo4K@bE%5ClOG U1VIo4LHs-10Y%}2l>jIJ0Oq#{IsgCw diff --git a/testdata/01-doc.tdir/01-doc.dsc b/testdata/01-doc.tdir/01-doc.dsc new file mode 100644 index 000000000000..a9282c70171d --- /dev/null +++ b/testdata/01-doc.tdir/01-doc.dsc @@ -0,0 +1,16 @@ +BaseName: 01-doc +Version: 1.0 +Description: Check documentation +CreationDate: Wed Jan 3 15:15:01 CET 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: 01-doc.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/01-doc.tdir/01-doc.test b/testdata/01-doc.tdir/01-doc.test new file mode 100644 index 000000000000..6a78a9cd356d --- /dev/null +++ b/testdata/01-doc.tdir/01-doc.test @@ -0,0 +1,47 @@ +# #-- 01-doc.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test +. ../common.sh + +set_doxygen_path + +PRE="../.." +get_make +(cd $PRE ; $MAKE doc) > mylog 2>&1 + +bad=0 +if grep -e "Warning" -e "warning" -e "Error" -e "error" mylog >/dev/null 2>&1; +then + cat mylog + bad=1 +else + # "doxygen ok" + cat mylog +fi + +(cd $PRE; find . -name "*.h" -print) >hlist +(cd $PRE; find . -name "*.c" -print) >>hlist +# filter out config.h +fgrep -v -e "config.h" hlist > ilist; mv ilist hlist +fgrep -v -e "util/configparser" hlist > ilist; mv ilist hlist +fgrep -v -e "util/configlexer" hlist > ilist; mv ilist hlist +fgrep -v -e "util/configyyrename" hlist > ilist; mv ilist hlist +fgrep -v -e "util/locks.h" hlist > ilist; mv ilist hlist +fgrep -v -e "util/storage/lookup3.c" hlist > ilist; mv ilist hlist +fgrep -v -e "ldns-src/" hlist > ilist; mv ilist hlist +fgrep -v -e "libunbound/python/libunbound_wrap.c" hlist > ilist; mv ilist hlist +fgrep -v -e "pythonmod/interface.h" hlist > ilist; mv ilist hlist +fgrep -v -e "dnstap" hlist > ilist; mv ilist hlist +# filter out compat +fgrep -v -e "compat/" hlist > ilist; mv ilist hlist +for h in `cat hlist`; do + if fgrep "`basename $h`" $PRE/doc/html/files.html >/dev/null; then + : # ok + else + echo "Warning: $h has no documentation." + bad=1 + fi +done +exit $bad diff --git a/testdata/01-doc.tpkg b/testdata/01-doc.tpkg deleted file mode 100644 index 6502bdc14e255961cef546151d696e9b4d0f297e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 zcmV;01A6=)iwFRFu<=s>1MOB>Z{s!)_N)0T26B)dfOYr;WNd)c$)aenMNll7hoVRr zX)LjpNP(1+_}_OZIf=d9G;omZf%1c4Qo}jO8GZwX(J)nsp9&rHz7#^jd^)vbG@pjM z;{$rpXgr^c$6+)Z^}=X0nvQ!g{bD=XL1SvJ0eW|;sZl?#_tN@*6ya0-AEqXG>llRD zWb$nN$8)NGIGxPq<7qUbdlJ!InDiig<9&P<|MU8P#|{3(ON^l_Kl=r>5lY4o`5`+) zlW0-ZtzemBvIf#=N|ZIXLblY{PR@8uE-o>JAGibm??Pv`yLf8n zb+yiXQuDVKzrpeGgQL%^Qdqzfu~6gmz9s!EY#JMf4Ri+lJaV*o(5a#C#hz zQDv#5Z*s;A)>o;z-()DSDqfT1;^*^sp52@8v5ZzrzDD+SlEM+Kzygjwoc?%jd)_y2 z0_CPq8H`SjBgSrc`YvQ*1)0VQh6vsz*OK<=wI6r8ALm*t-A%EZcAidx6mJ9B6h-TF z!6=`S^%Guq3aoFVL<|dqtUmy6yLV7)Z&z(4*yElTR3n*!4?{^^9lUS-oFZ46dM_Oz zF9fCKdEI13cdI!uppoFCw#NTnGXodkzjiJL~= zs79tiwW)I@gD1(=o#xenyXc&hDh=qapkDC=4@?Ceqvq91CZAlsl1TgM)w8mflR-@- zw{7LxvZj??FNoHxPYmuHde=Af6l#fZlwW%-K>{Lvkk@4q*v3cIrs)oA7tj&5AH#q+ z$@(2p`jNIyJNqr04M+eg~-KP diff --git a/testdata/02-unittest.tdir/02-unittest.dsc b/testdata/02-unittest.tdir/02-unittest.dsc new file mode 100644 index 000000000000..b30695a2a846 --- /dev/null +++ b/testdata/02-unittest.tdir/02-unittest.dsc @@ -0,0 +1,16 @@ +BaseName: 02-unittest +Version: 1.0 +Description: Unit tests. +CreationDate: Thu Jan 4 16:32:42 CET 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: 02-unittest.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/02-unittest.tdir/02-unittest.test b/testdata/02-unittest.tdir/02-unittest.test new file mode 100644 index 000000000000..898cd3dcc124 --- /dev/null +++ b/testdata/02-unittest.tdir/02-unittest.test @@ -0,0 +1,26 @@ +# #-- 02-unittest.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +get_make +(cd $PRE ; $MAKE unittest; $MAKE lock-verify) + +if (cd $PRE; ./unittest); then + echo "unit test worked." +else + echo "unit test failed." + exit 1 +fi +if test -f $PRE/ublocktrace.0; then + if (cd $PRE; ./lock-verify ublocktrace.*); then + echo "lock-verify test worked." + else + echo "lock-verify test failed." + exit 1 + fi +fi +exit 0 diff --git a/testdata/02-unittest.tpkg b/testdata/02-unittest.tpkg deleted file mode 100644 index 4618ae30e6a168d4c2d8ad934891a8d4c92f1da0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PDo>l19qJ#ppI6(9nbiTp)zJ z#A!{Nq_UlT{CiHahPB-oH~T>1JZj_m_&D!tyT^Xu)unb$S;sSNhP_9?N8%`IS`kNn z+ZSQjwo7_KL_s9tFpMxRb^|}^LG&1AHmR+X2B3FQ)lQlF@|3YpVd!b`H_m^pZ_|g- zKt|W+edqb_#z9Z`Q5Xjz_M88Sh~jwE1OGwP|H6NM{%@sKA7!BuSUGw21=p&pG6BJT zcA#u(^uo1)&zJ&Dj^%7@lx(60(&7BmX$|jX2@rx9CA&cq1~5K6g#e469ZOw0{3??` zW;lH1W4@1#{#j0>G?`^%e95FTR|&9jRV=Dfl`di9B0EqERc03BH^1Jg`66K_M&YBf zn0Jbf)|SBAb?n!dM|!TBDJRlel_l&*>UrHveD0n9H@L6Aq!HeVl4~NigN7tWM>C8JJOm z8VkMq5?1qH|2DRiUQJv#*uQr8r@R}doz*^i#ZTMw=~5*Kf*=TjAP9mW a2!bF8f*=TjAP9nZE`9-~mq/dev/null 2>&1; then +# if test -x "`which valgrind`"; then +# do_valgrind=yes +# fi +#fi + +# self-test (unit test of testbound) +if test $do_valgrind = "yes"; then + if (valgrind $PRE/testbound -s >tmpout 2>&1;); then + echo "selftest OK " + else + echo "selftest FAILED" + exit 1 + fi + if grep "All heap blocks were freed -- no leaks are possible." tmpout >/dev/null 2>&1; then + : # clean + else + echo "Memory leaked in selftest" + grep "in use at exit" tmpout + exit 1 + fi +else + if ($PRE/testbound -s >/dev/null 2>&1;); then + echo "selftest OK " + else + echo "selftest FAILED" + exit 1 + fi +fi + + +# the .crpl are not always supported and need checking for SHA256 and GOST +# support. +# the .rpl should work on any system (portable). +for input in $PRE/testdata/*.rpl $PRE/testdata/*.crpl; do + header=`grep SCENARIO_BEGIN $input | head -1 | sed -e 's/SCENARIO_BEGIN //'` + cleaninput=`echo $input | sed -e "s?$PRE/testdata/??"` + + # detect if SHA256 is needed + if echo $cleaninput | grep sha2 >/dev/null 2>&1; then + if $PRE/testbound -2 >/dev/null 2>&1; then + : # the SHA256 is supported + else + continue + fi + fi + + # detect if GOST is needed + if echo $cleaninput | grep gost >/dev/null 2>&1; then + if $PRE/testbound -g >/dev/null 2>&1; then + : # GOST is supported + else + continue + fi + fi + + # detect if CLIENT_SUBNET is needed + if echo $cleaninput | grep subnet >/dev/null 2>&1; then + if $PRE/testbound -c >/dev/null 2>&1; then + : # CLIENT_SUBNET is supported + else + continue + fi + fi + + # detect if IPSECMOD is needed + if echo $cleaninput | grep ipsecmod >/dev/null 2>&1; then + if $PRE/testbound -i >/dev/null 2>&1; then + : # IPSECMOD is supported + else + continue + fi + fi + + if test $do_valgrind = "yes"; then + if (valgrind $PRE/testbound -p $input >tmpout 2>&1;); then + echo " OK $cleaninput: $header" + else + echo "FAILED $cleaninput: $header" + exitval=1 + fi + if grep "All heap blocks were freed -- no leaks are possible." tmpout >/dev/null 2>&1; then + : # clean + else + echo "Memory leaked in $cleaninput" + grep "in use at exit" tmpout + exitval=1 + fi + else + # do valgrind=no + if ($PRE/testbound -p $input >/dev/null 2>&1;); then + echo " OK $cleaninput: $header" + else + echo "FAILED $cleaninput: $header" + exitval=1 + fi + fi + if test -f ublocktrace.0; then + if $PRE/lock-verify ublocktrace.*; then + #echo "lock-verify test $input worked." + i=i + else + echo "lock-verify test $input failed." + exitval=1 + fi + fi +done +exit $exitval diff --git a/testdata/03-testbound.tpkg b/testdata/03-testbound.tpkg deleted file mode 100644 index 5db2b7731336ed53cce846afb77791bed89cd7f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1345 zcmV-H1-|+piwFol(h*qz128i!bY*jNVsCYBWB~0~S#R4$5Z0^qR}3h_aRP`Ub-7TW z1d1#tM&bjp+ddS9y&^}_))bfJE`0#~@tq|_ownixPKqM@09o|z?94aU4&^ke8kHW( zB=l`x#I@4%!y)XqTISo`Z#m1~IZAHBX*rGh{{DWuFyyvh%Xg8aW=D%5Qmt3dSZZ=x2X1ziAZ#CO)37luJ{YCub`G3b1 zp71GlU^(&ZH;k2#VFz5>VF#$ZSVTHq_?(0=mjk@PP(zGS!0$nM81h(1WwU;a+{hnr zO{y;vghL#H+W@!SX|y};FVG)cK%MRdcFaYn>4R|x{Md%y?Y`ZkFY#A6<~;Tl>ywhP zjPEg3Ppp^R9f|zD7tgLJ?W*fVnoK9tEs|h>%Jm^}6 ziEXhl>dPs=Mz-hqutPiW8g`C*9|wy&?j^%Jp>KH5b%^WVi9p@8EYK3nLAb$qC>1j1 z%S#d($0GE*p(N4#KbT4%Q;&QcCSz6+BN)?_2^N)}79QSVx0*d#DTmrIDNcj@rsm^K zElh#{>Th=4*Cy5>tCUGYmZdweu5Ks7o6N0US#zoKGNpS|v@{Z|LLZY_3`S|vVJ``V z&h*LAvfsItoh3cc1&dVWMhug^`CdwXF&wH2-e|h76P>YtnI9^nH<9E%QAiB{oPGqb zSQ!I~QlqdbpdkD@a{9>Fk>-nD{TDn}T_h{T`@p@aZAEpu9p zBvlZVl1=%`h&>$Pa=8Og0gq0GYpjlON~0*%Nd~A!bDD-gO-tKe90h4yLaBiVxBOm#N}@={ntbELCNxp>Cg@#L{c^rJM zdF@rIW_`^Neht24WlFe@arY{X_<4VD())aLdiief{^$gDGM)dJs-S?n^rTENAiPku zHQ8G2#T6^3iB3;-uhJmSRm=`r>g_6*w{NX0#>y4yX^kE^Fv=q%R2nt()AVNA7WzqL zN?A>K{n6s1bL&;{xGmEz-*pp?=&Mw(&+1$duTf| zA~3_eu#HHS-oC`>e&xWcwFC2mm5kf+xvX}x2$)%gzMb+DU9m8jy0)QhyRs4elFXGY zoSh$@`RvnA+4Suac4k69(J#*e1qu`>P@q780tE^bC{Un4fdT~zd~f^/dev/null +if test $? != 1; then + echo "exit code for usage wrong" + exit 1 +fi +$PRE/unbound-checkconf -h >/dev/null +if test $? != 1; then + echo "exit code for usage wrong" + exit 1 +fi +$PRE/unbound-checkconf notexist_file +if test $? != 1; then + echo "exit code for nofile wrong" + exit 1 +fi + +# detect windows +if grep "define UB_ON_WINDOWS 1" ../../config.h; then + onwin=1 +else + onwin=0 +fi + +# test check of config files. +for f in bad.*; do + echo + echo $PRE/unbound-checkconf $f + if test $f = "bad.user" -a $onwin -eq 1; then + echo "skipped on windows" + continue + fi + + $PRE/unbound-checkconf $f + if test $? != 1; then + echo "exit code case $f wrong" + exit 1 + fi +done +for f in good.*; do + echo + echo $PRE/unbound-checkconf $f + $PRE/unbound-checkconf $f + if test $? != 0; then + echo "exit code case $f wrong" + exit 1 + fi +done + +echo $PRE/unbound-checkconf warn.algo +$PRE/unbound-checkconf warn.algo > outfile 2>&1 +if test $? != 0; then + cat outfile + echo "wrong exit code, warning should not fail with error" + exit 1 +fi +cat outfile +if grep "unsupported algo" outfile; then + echo "OK" +else + echo "Failed, should print warning" + exit 1 +fi + +exit 0 diff --git a/testdata/04-checkconf.tdir/bad.badfwd b/testdata/04-checkconf.tdir/bad.badfwd new file mode 100644 index 000000000000..27d58c5ea048 --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.badfwd @@ -0,0 +1,8 @@ +server: + # to make sure the check doesn't fail on username or chrootdir. + username: "" + chroot: "" + +forward-zone: + name: "example.com" + forward-addr: 123.123.AAAA.123 diff --git a/testdata/04-checkconf.tdir/bad.badif b/testdata/04-checkconf.tdir/bad.badif new file mode 100644 index 000000000000..ea261fc2dbdb --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.badif @@ -0,0 +1,17 @@ +# bad host and interface lines. +server: + username: "" + interface: 127.0.0.1 + interface: 127.0.0.1 + interface: 127.0.0.1 + outgoing-interface: ::1 + outgoing-interface: ::1 + outgoing-interface: ::1 + +forward-zone: + name: root. + forward-host: 127.0.0.1 + +stub-zone: + name: com. + stub-host: ::3 diff --git a/testdata/04-checkconf.tdir/bad.badip b/testdata/04-checkconf.tdir/bad.badip new file mode 100644 index 000000000000..74b2b7eb27a7 --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.badip @@ -0,0 +1,2 @@ +server: + interface: 123.AAAA.123.123 diff --git a/testdata/04-checkconf.tdir/bad.bind b/testdata/04-checkconf.tdir/bad.bind new file mode 100644 index 000000000000..863d566e9ef8 --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.bind @@ -0,0 +1,35 @@ +# test daemon +options { + directory "/home/wouter/bla"; + version "test BIND 24"; + pid-file "/home/wouter/named_24.pid"; + dnssec-enable yes; + listen-on-v6 { any; }; +}; + +// logging clause +logging { + channel mainlog { + file "named_24.log" size 10m; + severity info; + }; + category default { + mainlog; + }; +}; + +zone "." IN { + type hint; + file "root.servers"; +}; + +zone "localhost" IN { + type master; + file "localhost.zone"; + allow-update { none; }; +}; +zone "0.0.127.in-addr.arpa" IN { + type master; + file "localhost.rev"; + allow-update { none; }; +}; diff --git a/testdata/04-checkconf.tdir/bad.user b/testdata/04-checkconf.tdir/bad.user new file mode 100644 index 000000000000..40631abb4f79 --- /dev/null +++ b/testdata/04-checkconf.tdir/bad.user @@ -0,0 +1,2 @@ +server: + username: blabla_noexist_user diff --git a/testdata/04-checkconf.tdir/good.all b/testdata/04-checkconf.tdir/good.all new file mode 100644 index 000000000000..33ebaf014abf --- /dev/null +++ b/testdata/04-checkconf.tdir/good.all @@ -0,0 +1,246 @@ +# To test, all options are used. +# +# Example configuration file. +# +# See unbound.conf(5) man page. +# +# this is a comment. + +#Use this to include other text into the file. +#include: "otherfile.conf" + +# The server clause sets the main parameters. +server: + # whitespace is not necessary, but looks cleaner. + + # verbosity number, 0 is least verbose. 1 is default. + verbosity: 2 + + # number of threads to create. 1 disables threading. + num-threads: 1 + + # specify the interfaces to answer queries from by ip-address. + # If you give none the default (all) interface is used. + # specify every interface on a new 'interface:' labelled line. + interface: 192.0.2.153 + interface: 192.0.2.154 + interface: 2001:DB8::5 + + # port to answer queries from + port: 53 + + # number of port to allocate per thread, determines the size of the + # port range. A larger port range gives more resistance to certain + # spoof attacks, as it gets harder to guess which port is used. + # But also takes more system resources (for open sockets). + outgoing-range: 16 + + outgoing-port-permit: 1000-1020 + outgoing-port-avoid: 2000-2048 + outgoing-port-avoid: 3000 + + # number of outgoing simultaneous tcp buffers to hold per thread. + outgoing-num-tcp: 10 + + # number of incoming simultaneous tcp buffers to hold per thread. + incoming-num-tcp: 10 + + # buffer size for handling DNS data. No messages larger than this + # size can be sent or received, by UDP or TCP. In bytes. + msg-buffer-size: 65552 + + # the amount of memory to use for the message cache. + # in bytes. default is 4 Mb + msg-cache-size: 4194304 + + # the number of slabs to use for the message cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + msg-cache-slabs: 4 + + # the number of queries that a thread gets to service. + num-queries-per-thread: 1024 + + # the amount of memory to use for the RRset cache. + # in bytes. default is 4 Mb + rrset-cache-size: 4194304 + + # the number of slabs to use for the RRset cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + rrset-cache-slabs: 4 + + # the time to live (TTL) value for cached roundtrip times and + # EDNS version information for hosts. In seconds. + infra-host-ttl: 900 + + # the time to live (TTL) value for cached lame delegations. In sec. + infra-lame-ttl: 900 + + # the number of slabs to use for the Infrastructure cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + infra-cache-slabs: 4 + + # the maximum number of hosts that are cached (roundtrip times, EDNS). + infra-cache-numhosts: 10000 + + # the maximum size of the lame zones cached per host. in bytes. + infra-cache-lame-size: 10240 + + # Enable IPv4, "yes" or "no". + do-ip4: yes + + # Enable IPv6, "yes" or "no". + do-ip6: yes + + # Enable UDP, "yes" or "no". + do-udp: yes + + # Enable TCP, "yes" or "no". + do-tcp: yes + + # if given, a chroot(2) is done to the given directory. + # i.e. you can chroot to the working directory, for example, + # for extra security, but make sure all files are in that directory. + chroot: "" + + # if given, user privileges are dropped (after binding port), + # and the given username is assumed. Default is nothing "". + username: "nobody" + + # the working directory. + directory: "." + + # the log file, "" means log to stderr. + # Use of this option sets use-syslog to "no". + logfile: "" + + # Log to syslog(3) if yes. The log facility LOG_DAEMON is used to + # log to, with identity "unbound". If yes, it overrides the logfile. + use-syslog: no + + # the pid file. + pidfile: "unbound.pid" + + # enable to not answer id.server and hostname.bind queries. + hide-identity: no + + # enable to not answer version.server and version.bind queries. + hide-version: no + + # the identity to report. Leave "" or default to return hostname. + identity: "" + + # the version to report. Leave "" or default to return package version. + version: "" + + # the target fetch policy. + # series of integers describing the policy per dependency depth. + # The number of values in the list determines the maximum dependency + # depth the recursor will pursue before giving up. Each integer means: + # -1 : fetch all targets opportunistically, + # 0: fetch on demand, + # positive value: fetch that many targets opportunistically. + # Enclose the list of numbers between quotes (""). + target-fetch-policy: "3 2 1 0 0" + + # Harden against very small EDNS buffer sizes. + harden-short-bufsize: yes + + # Harden against unseemly large queries. + harden-large-queries: yes + + # Harden against out of zone rrsets, to avoid spoofing attempts. + harden-glue: yes + + # Do not query the following addresses. No DNS queries are sent there. + # List one address per entry. To block other ports than the default + # DNS port, use "1.2.3.4@123" to block port 123 for 1.2.3.4. + do-not-query-address: 127.0.0.1 + do-not-query-address: 127.0.0.2 + do-not-query-address: 127.255.255.255 + do-not-query-address: ::1 + + # module configuration of the server. A string with identifiers + # separated by spaces. "iterator" or "validator iterator" + module-config: "validator iterator" + + # File with trusted keys for validation. Specify more than one file + # with several entries, one file per entry. + # Zone file format, with DS and DNSKEY entries. + trust-anchor-file: "" + + # Trusted key for validation. DS or DNSKEY. specify the RR on a + # single line, surrounded by "". TTL is ignored. class is IN default. + # (These examples are from August 2007 and may not be valid anymore). + trust-anchor: "nlnetlabs.nl. DNSKEY 257 3 5 AQPzzTWMz8qSWIQlfRnPckx2BiVmkVN6LPupO3mbz7FhLSnm26n6iG9N Lby97Ji453aWZY3M5/xJBSOS2vWtco2t8C0+xeO1bc/d6ZTy32DHchpW 6rDH1vp86Ll+ha0tmwyy9QP7y2bVw5zSbFCrefk8qCUBgfHm9bHzMG1U BYtEIQ==" + trust-anchor: "jelte.nlnetlabs.nl. DS 42860 5 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A" + + # File with trusted keys for validation. Specify more than one file + # with several entries, one file per entry. Like trust-anchor-file + # but has a different file format. Format is BIND-9 style format, + # the trusted-keys { name flag proto algo "key"; }; clauses are read. + trusted-keys-file: "" + + # Override the date for validation with a specific fixed date. + # Do not set this unless you are debugging signature inception + # and expiration. "" or "0" turns the feature off. + val-override-date: "" + + # The time to live for bogus data, rrsets and messages. This avoids + # some of the revalidation, until the time interval expires. in secs. + val-bogus-ttl: 900 + + # Should additional section of secure message also be kept clean of + # unsecure data. Useful to shield the users of this validator from + # potential bogus data in the additional section. All unsigned data + # in the additional section is removed from secure messages. + val-clean-additional: yes + + # Turn permissive mode on to permit bogus messages. Thus, messages + # for which security checks failed will be returned to clients, + # instead of SERVFAIL. It still performs the security checks, which + # result in interesting log files and possibly the AD bit in + # replies if the message is found secure. The default is off. + val-permissive-mode: no + + # It is possible to configure NSEC3 maximum iteration counts per + # keysize. Keep this table very short, as linear search is done. + # A message with an NSEC3 with larger count is marked insecure. + # List in ascending order the keysize and count values. + val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500" + + # the amount of memory to use for the key cache. + # in bytes. default is 4 Mb + key-cache-size: 4194304 + + # the number of slabs to use for the key cache. + # the number of slabs must be a power of 2. + # more slabs reduce lock contention, but fragment memory usage. + key-cache-slabs: 4 + + +# Stub zones. +# Create entries like below, to make all queries for 'example.com' and +# 'example.org' go to the given list of nameservers. list zero or more +# nameservers by hostname or by ipaddress. +stub-zone: + name: "example.com" + stub-addr: 192.0.2.68 +stub-zone: + name: "example.org" + stub-host: ns.example.com. + +# Forward zones +# Create entries like below, to make all queries for 'example.com' and +# 'example.org' go to the given list of servers. These servers have to handle +# recursion to other nameservers. List zero or more nameservers by hostname +# or by ipaddress. Use an entry with name "." to forward all queries. +forward-zone: + name: "example.com" + forward-addr: 192.0.2.68 + forward-addr: 192.0.2.73@5355 # forward to port 5355. +forward-zone: + name: "example.org" + forward-host: fwd.example.com diff --git a/testdata/04-checkconf.tdir/good.ifport b/testdata/04-checkconf.tdir/good.ifport new file mode 100644 index 000000000000..1aa59d1b701f --- /dev/null +++ b/testdata/04-checkconf.tdir/good.ifport @@ -0,0 +1,23 @@ +# +# bug301 : unbound-checkconf cannot parse interface '0.0.0.0@5353' + +#Use this to include other text into the file. +#include: "otherfile.conf" + +# The server clause sets the main parameters. +server: + # specify the interfaces to answer queries from by ip-address. + # If you give none the default (all) interface is used. + # specify every interface on a new 'interface:' labelled line. + interface: 192.0.2.153 + interface: 192.0.2.154 + interface: 2001:DB8::5 + interface: 0.0.0.0@5353 + + # config + chroot: "" + username: "nobody" + directory: "." + logfile: "" + use-syslog: no + pidfile: "unbound.pid" diff --git a/testdata/04-checkconf.tdir/good.include b/testdata/04-checkconf.tdir/good.include new file mode 100644 index 000000000000..49e742d75d81 --- /dev/null +++ b/testdata/04-checkconf.tdir/good.include @@ -0,0 +1,6 @@ +# include some file to test include functionality. + +include: "good.all" + +server: + identity: "my identity" diff --git a/testdata/04-checkconf.tdir/warn.algo b/testdata/04-checkconf.tdir/warn.algo new file mode 100644 index 000000000000..dcd1a9073366 --- /dev/null +++ b/testdata/04-checkconf.tdir/warn.algo @@ -0,0 +1,9 @@ +server: + chroot: "" + directory: "" + pidfile: "" + username: "" + logfile: "" + + trust-anchor: "jelte.nlnetlabs.nl. DS 42860 2000 1 14D739EB566D2B1A5E216A0BA4D17FA9B038BE4A" + diff --git a/testdata/04-checkconf.tpkg b/testdata/04-checkconf.tpkg deleted file mode 100644 index c100355de7ba571c74931dbb2e2ac8955ee98487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5169 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 .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT 05-asynclook.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +cat .tpkg.var.test + +wait_ldns_testns_up fwd.log diff --git a/testdata/05-asynclook.tdir/05-asynclook.test b/testdata/05-asynclook.tdir/05-asynclook.test new file mode 100644 index 000000000000..28a054d1aba3 --- /dev/null +++ b/testdata/05-asynclook.tdir/05-asynclook.test @@ -0,0 +1,198 @@ +# #-- 05-asynclook.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# test if fwder is up +echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" +dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile +if grep "10.20.30.40" outfile; then + echo "fwder is up" +else + cat fwd.log + echo "fwder not up" + exit 1 +fi +rm outfile + +# create asynclook +get_make +echo "> (cd $PRE ; $MAKE asynclook)" +(cd $PRE ; $MAKE asynclook) +if test ! -x $PRE/asynclook; then + echo "cannot build asynclook test program" + exit 1 +fi +(cd $PRE ; $MAKE lock-verify) + +# check the locks. +function locktest() { + if test -x $PRE/lock-verify -a -f ublocktrace.0; then + $PRE/lock-verify ublocktrace.* + if test $? -ne 0; then + echo "lock-verify error" + exit 1 + fi + fi +} + +# detect if there is forking on this system. +HAVE_FORK=yes +if grep "undef HAVE_FORK" $PRE/config.h >/dev/null 2>&1; then + HAVE_FORK=no +fi + +if test $HAVE_FORK = yes; then +# test hosts reading (directed at local auth info) +echo '> $PRE/asynclook -H 05-asynclook.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' +$PRE/asynclook -H 05-asynclook.hosts virtual.virtual.virtual.local 2>&1 | tee outfile +if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +# test async lookups (directed at testns) +echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile' +$PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +fi #HAVE_FORK + +echo '> $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +if test $HAVE_FORK = yes; then +# test cancellation +echo '> $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile +fi #HAVE_FORK + +echo '> $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +if test $HAVE_FORK = yes; then +# test blocking mode +echo '> $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile +fi #HAVE_FORK + +echo '> $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo "> cat logfiles" +cat fwd.log +exit 0 diff --git a/testdata/05-asynclook.tdir/05-asynclook.testns b/testdata/05-asynclook.tdir/05-asynclook.testns new file mode 100644 index 000000000000..6245ae164172 --- /dev/null +++ b/testdata/05-asynclook.tdir/05-asynclook.testns @@ -0,0 +1,35 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +; for priming query +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +@ IN NS +SECTION ANSWER +@ IN NS 127.0.0.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/05-asynclook.tpkg b/testdata/05-asynclook.tpkg deleted file mode 100644 index e13476ab297cb25732762072a9bbb01648feed14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmV-32h8{%iwFQGkV9Dj1MOOEbK*D>&R6s+dI>d2?h3~?Z+A>3J8VKO*_k0(!tT`8 z)fJ`K0(`M8uWW~*cJIGmOJLp-NNxk{-9^vT45lS@x4PAjggj=YNaIoH_?+Jxt|yN7 zHV+d~t5oEtRjZiupBeV7l4YAUvsSBNKdV%+%X?7Sf-jGd#t9VwdqbWkOswwrT>Jkh z%;o$q3SwsyHW1Zvd1d~~)#{#Q*2>kAZI!Au%zw39vG%~+fbD1T#`FIjjaiEZtPb;u zCqFR}dpxXzWtilg#g6czLQ741hL^eCjYb2u6m>1Jrr|cg*KQ7<$P-Ss05$BqiWI81Yn~rhqyF zqzMBZtk*4g3d+7TKYKE!R)}TS3={t>k6k}%AFcx0_d+U05VB;*#l1l+Q)#l7GzBB+ z^K9@$kaaIT>fRF`^47wDu}BWFafE4<&0Oxm6G=*aWBF70`&uemU;mN_U%$rI*S{qX zeM{%RYPDL?^}h@3!+x>&c=v;1Q8Gb{#pf_pl>v=${_udoQq(XUun@fDK-N0L?e*_a z?15n%8%cEEH?W&A8SxKz_byZPL_1nZV{Dmh_%I`mVg!YY zFX!Ex>vji*!=b^x(jY=wLw)cYYC^(F6B(U6`Q1Ya`qCFHg8Uo_E+pjy#*H?^5sK5&TMWnTMHwb9$gi<$6o+)Chr_ zmtkgJ=N@&Q@AfC`kSQ*F3&oJZY~*Cd^JAG1T;x^Tc!s$g&QbpTmz;~s66UD2swz(A z9n0ii9=>@v-eltumQ-Mn%f?U5?!|TcP5=!}225&dd=S7zn-dez3 zpnRthoVR7KGG=cxT|E!>r{uFbd&!m)xLN&gEQc@KMes!6FyB}ANh|a0Y&p-H)xRds zli4zN`&r(!si$)M@-p3a1~+cv?IiJqg{scI@}w7Vm#s|o-InvbS^aN|kzZb|+s@*~ zO}wo{PJggF>bF*33gbMPQwT(9Fv$z<|H4 zJnLLtx8R2#o44|Te8^q3a;@8GL!)*3rPnq2J2{YZK#vi>RHFk+-_@8h8{Vy_p$(-?jsjA-pVzcJ|9pEYc=R1D?J7*=M z{B<^7O#N~OE?5791QjDA^I-@|(ekEn@A-Z=@?6N6RI{LlhK7cQhK7cQhK7cQhK7cQ hhK7cQhK7cQhK7cQhK7cQhQ@zA{te?h`{V#n0000By0icQ diff --git a/testdata/06-ianaports.tdir/06-ianaports.dsc b/testdata/06-ianaports.tdir/06-ianaports.dsc new file mode 100644 index 000000000000..6eb91e3e668d --- /dev/null +++ b/testdata/06-ianaports.tdir/06-ianaports.dsc @@ -0,0 +1,16 @@ +BaseName: 06-ianaports +Version: 1.0 +Description: check if iana assigned ports have changed. +CreationDate: Thu Apr 10 12:42:40 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: 06-ianaports.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/06-ianaports.tdir/06-ianaports.test b/testdata/06-ianaports.tdir/06-ianaports.test new file mode 100644 index 000000000000..1c51218a853b --- /dev/null +++ b/testdata/06-ianaports.tdir/06-ianaports.test @@ -0,0 +1,27 @@ +# #-- 06-ianaports.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +mkdir util +get_make +echo "> $MAKE -f $PRE/Makefile iana_update" +$MAKE -f $PRE/Makefile iana_update +if test $? -ne 0; then + echo "cannot iana update" + exit 1 +fi + +diff -u $PRE/util/iana_ports.inc util/iana_ports.inc +if test $? -ne 0; then + echo "IANA assigned ports have updated, make iana_update and commit" + echo "cp util/iana_ports.inc $PRE/util/iana_ports.inc" + cp util/iana_ports.inc $PRE/util/iana_ports.inc + exit 1 +fi + +exit 0 diff --git a/testdata/06-ianaports.tpkg b/testdata/06-ianaports.tpkg deleted file mode 100644 index 98020a0a5eb188b6570d5ec7e2908cce0608f4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}|giwFQ;g6C2I1MQS;Z__Xk$NP5v6sL9?Z-{HRO@o2}m2MLVZJJ<$7YI!z zaa+^HiEL*Z-=1^2r?PGps0<yFx_tF9W7>xHm z97B(>XXHRA?eH&63b~>1iH_+A2lY))g)q4#W6Uxw&G!_@xGbttOYKrJF7jPjNu67? z-@Lt%r&UUhjKoK2ao(}S=h7ajLlYU*7yIf|`j{i!jLcKAFVt!6Bmef4c9q2^S-FpF1)FBMF;6)F$ia5bTxB61QJLq$RNDzG9keEo3sGb?Fw}^eX9= zyig7}nJ7YXHJLzEFY^0!cAMObqf$D96}B~!Z%2otm7RN`pFag(hTD4pp>yz6Q?7lz z@M@Lxz3ardUyN8PL-Wf1i/dev/null; then + # no chroot, no need to test. + # (test fails on / en \ comparisons, by the way). + echo "no chroot on windows, end test" + exit 0 +fi + +# create config file +cwd=`pwd -P` +subdir=$cwd/subdir +user=`whoami` +mkdir subdir +if test $? -ne 0; then + echo "could not create subdir" + exit 1 +fi + +cat > test.conf < subdir/root.ca +echo "a.root-servers.net. IN A 127.0.0.1" >> subdir/root.ca +echo ". CH NS b.root-servers.net." > subdir/root.cb +echo "b.root-servers.net. CH A 127.0.0.1" >> subdir/root.cb +echo ". HS NS c.root-servers.net." > subdir/root.cc +echo "c.root-servers.net. HS A 127.0.0.1" >> subdir/root.cc +echo "" > subdir/trustkeys.conf +echo "" > subdir/trustkeys2.conf +echo "" > subdir/trustkeys3.conf +echo "" > subdir/trustanchor.conf +echo "" > subdir/trustanchor2.conf +echo "" > subdir/trustanchor3.conf + +$PRE/unbound-checkconf test.conf +if test $? -ne 0; then + echo "Checkconf of config with chroot inside it failed" + exit 1 +fi +echo "OK 1" + +### NEXT TEST + +cat > test.conf < test.conf < test.conf < test.conf < test.conf < test.conf < test.conf <S#+5gIC6|E+Q?|FNT#=ZOB@LRb5c(d0G@QU_`mfae7D~bMq{LlCQ zmr${@aKzehXXnWuELB{JHu%&dhfGB&Pjo(@nbHsqSafZSVa)XaKN=@M_)yYGS!gT| zLydEuN&yE+3Vs7$?Iyl{gwD~$B?O-LhMb06XneD@4RK20Bkj-wyzoz=ABJhHNC#)> z%k;Jlq$5X(6inzg>5Sq-mM{@39RG56!iGtkoTm(bNriTom}_NS)MQT%vd_nS$c)Q* zs1%Fa;MJ?iM04~Q zB~z%G4(H)}G6gOQvcW+fb}?jvhn0(d8LH|~iBeG!a{l|#zGXsFixA#}Od#LEztB%v z0@msKvtK`2@Xn3djVrR@@F%k(LFzULSyJ0;b1N8&LCZWTYSiBssUmeKK%R2}EAlr) z$WxfHl0vWngxP z_w&+|XdLffCF2;J^DCmVE*{(c9UOFvdxG^$_pinS8IJfB8C~NTlqy_(p7hSo;0OlZ zWUWPJk<5lME>%yW7G9H-{5+*7)bOq-Lf!%1zCHSIOfcjP(m1IXOKXEkh}6-WMLH+& zoic^GNl)Y*XUE(UQcrkn7S;yK%|usbBBnTmVa-&|0GkAIwUvW23TKDQdEG+YomIOP zb%Y404`sg$hetliG{pfku2bX!ClpwV)F~|{v*)@(l`q?xZ|*K<{E2Ban}p48RRIn#OppHUbpm_V{2wv7_U2xcXDCkMURLVl|FN9%`6M! zO?>Z6THW6T`rsjh-9-j>khaibVU)t8j6-&iTqlRt`SMserH2O?r!)1Cy$Q$NeWc_< z@t9$s$!V6w6)GyG`0yL}cy4UlhO?tTFX0j&FQ3j*)|B$LG`0COwGrqGR){`#3%@P= zmV@8!li_FK^Kb=ybd~V4p9z2VHv~X?(-7!C2Lc;UN1*jm&DUNN{mn(|X7b-$uzmvs z*jyR>mII!>g1)=fw!0)s=fQ3+MxLSXZa(VvR@ZhPf}N0MIUa|}{r@oE(%CT|e_YL&iH&_o+{+;@z|AVoWt!!m0TiME1mX-ei2Z!f004M+e D{y9+e diff --git a/testdata/08-host-lib.tdir/08-host-lib.dsc b/testdata/08-host-lib.tdir/08-host-lib.dsc new file mode 100644 index 000000000000..c7c18b41bcaf --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.dsc @@ -0,0 +1,16 @@ +BaseName: 08-host-lib +Version: 1.0 +Description: Test async lookup using libunbound +CreationDate: Fri May 16 13:21:58 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: 08-host-lib.pre +Post: 08-host-lib.post +Test: 08-host-lib.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/08-host-lib.tdir/08-host-lib.hosts b/testdata/08-host-lib.tdir/08-host-lib.hosts new file mode 100644 index 000000000000..fa5e5482e72f --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.hosts @@ -0,0 +1,12 @@ +# Host Database +# +# This file should contain the addresses and aliases for local hosts that +# share this file. Replace 'my.domain' below with the domainname of your +# machine. +# +::1 localhost localhost.my.domain +127.0.0.1 localhost localhost.my.domain +# Imaginary network. +10.0.0.2 myname.my.domain myname +10.0.0.3 myfriend.my.domain myfriend +10.20.30.40 virtual.virtual.virtual.local diff --git a/testdata/08-host-lib.tdir/08-host-lib.post b/testdata/08-host-lib.tdir/08-host-lib.post new file mode 100644 index 000000000000..26b046ada5d2 --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.post @@ -0,0 +1,10 @@ +# #-- 08-host-lib.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here + +. ../common.sh +kill_pid $FWD_PID diff --git a/testdata/08-host-lib.tdir/08-host-lib.pre b/testdata/08-host-lib.tdir/08-host-lib.pre new file mode 100644 index 000000000000..84817891ff93 --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.pre @@ -0,0 +1,19 @@ +# #-- 08-host-lib.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +FWD_PORT=$(($RND_PORT + 1)) +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT 08-host-lib.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log diff --git a/testdata/08-host-lib.tdir/08-host-lib.test b/testdata/08-host-lib.tdir/08-host-lib.test new file mode 100644 index 000000000000..8de897776209 --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.test @@ -0,0 +1,194 @@ +# #-- 08-host-lib.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +if grep FORK $PRE/config.h | grep "define" >/dev/null 2>&1; then + # nothing + : +else + echo "forking is not available; test skipped." + exit 0 +fi + +# test if fwder is up +echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" +dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile +if grep "10.20.30.40" outfile; then + echo "fwder is up" +else + cat fwd.log + echo "fwder not up" + exit 1 +fi +rm outfile + +# create asynclook +get_make +echo "> (cd $PRE ; $MAKE asynclook)" +(cd $PRE ; $MAKE asynclook) +if test ! -x $PRE/asynclook; then + echo "cannot build asynclook test program" + exit 1 +fi +(cd $PRE ; $MAKE lock-verify) + +# check the locks. +function locktest() { + if test -x $PRE/lock-verify -a -f ublocktrace.0; then + $PRE/lock-verify ublocktrace.* + if test $? -ne 0; then + echo "lock-verify error" + exit 1 + fi + fi +} + +# test hosts reading (directed at local auth info) +echo '> $PRE/asynclook -H 08-host-lib.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' +$PRE/asynclook -H 08-host-lib.hosts virtual.virtual.virtual.local 2>&1 | tee outfile +if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +# test async lookups (directed at testns) +echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile' +$PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo '> $PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo '> $PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +# test cancellation +echo '> $PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo '> $PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -c -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: cancelled" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +# test blocking mode +echo '> $PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo '> $PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile' +$PRE/asynclook -t -b -f "127.0.0.1@"$FWD_PORT www.example.com www2.example.com 2>&1 | tee outfile +if grep "www.example.com: 10.20.30.40" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +if grep "www2.example.com: 10.20.30.42" outfile; then + echo "OK" +else + cat fwd.log + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo "> cat logfiles" +cat fwd.log +exit 0 diff --git a/testdata/08-host-lib.tdir/08-host-lib.testns b/testdata/08-host-lib.tdir/08-host-lib.testns new file mode 100644 index 000000000000..6245ae164172 --- /dev/null +++ b/testdata/08-host-lib.tdir/08-host-lib.testns @@ -0,0 +1,35 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +; for priming query +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +@ IN NS +SECTION ANSWER +@ IN NS 127.0.0.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/08-host-lib.tpkg b/testdata/08-host-lib.tpkg deleted file mode 100644 index 818ed5bca19acfe975dee5c6015316cd8890da1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1816 zcmV+z2j}=7iwFQPkV9Dj1MOOSQ{qSv_h05y^djZsu82tx*uq+GS;f=a6*;C)z|r+7le7+x>8Jw?`^CBDxzF0 zichUvRA)cO*w6}^u9h`bEtEG@t)T1W4JfWdm^7jwq#R&l;6)+hcaOWT|9=WK<^S35 zAqzq`SOE`2X@CDt|Ch`A8=5A(UMg#P3H@K%FYa%E`u(i$#|!uW0l3s*0pr( zESr(sMdR$(vpTRF>i9NO49`(WuGRVgg_5cgasVBVgU>C;a=Y*~Vthzy^;Y9c`&|v^ zk@ITn=oCEP@Jt3@!=aCV1tZd^U4Hli9~)4uLj9uFXk0W%_4v0>%@!D*KWtkjY1WQf zXBTz&_^H+u59Dp;te&YiCmq##^K-2+Zq8_WSyAyvOC+e(kIDLk84L!3Z#6B=xILq( zimoaJRoPdcN+A6%iS)Ec`m9L8|I6av42+emvHRkGzf?%Yf3b{Pf{gzsz&jeSIxf8m z%y^#s&Uj#XZUr<&CC4l?h_QGCwGC4Nb@;sX)-%r}c9NUG7z z3FbjT^O6PuGb`kTT6Tn#$#c7GrC1jK!aytGabNsnv8QQ8y@;&^-1u?-*Yu){|EItv zZ07R|VFCI4CfS6*i@3oc>@jd?fa=3F+Da4%Fz7KCtZ+LJy%=79K)wTtvZsW8zpLOd zC7JOjY;BDR-O@kLB`!ej;V~f)51u1G*F}T|rUygpM8cR%ynzcbA)*LTu%>Z5R|$Hg zZ`pR+w@k>Ld_Hbpo*n;KF}@7T;$J+hp!~nT{#Uhh{jZmF8UIg#O*j?tj(at|!crg( znpV#WMiChFyvR1O_KY{_I7F#wa)vu%0Ms>s+7=bh;xu4;2DKqxG&qumBD8yyi^xvs zDF6-T+Z1DU+ZigR=OEQ>xMH?9fPoeEVh*EbQ4fRHiNhBuIn?N3nV_J6m5K(pA?7dG zPoIxs(sVW#Pc%eT8UhOi52sa)v_Y>ExtgJiM?lyu&T5TjnN= zn#jx2`a zq_^%korrvslmiyMLY6)j;&{|}Y#Bf<8?`rC!CJ|tH-2Jupv##LCl`(Pki(JK>2|EH z(u03SJz0}=F!5yJaL;7ddv0XgpdW5&2SRa|WH!O|Fu|c*nF?VxrqB#CdLCp^hrT!& zVeZ2bK(F!qAoMsGsTK4s-)APulwmhk2rB7V1g#NwqF9}QiPpo(kxxbh55cs$@OGNW z@_tgVTr^sMr+sDSwg$xy879yu6zg!bH-FhxTc;uy(BXH9X`BwZG^9olCTbL<#q>@zrk+yyrTg$(KnIjp9mrD=0MS)EgX3nZsAH)!3xj8e{e%O?gmb?@ z-eoYInP@yamvQd#Y}_}}Fq1(Y#qYn9l{(t)(N(5c>pQrGFe7AWtYkk08sWBXxgBqJ zq@lEte)`_NCiTe zzH$lX?L4}szuUYW4Bc_yzs=qq_75@Yx6_)MGBx&b#=9k-Jk*lkYael+x;BG7fcTSI zaF&;T7c>1i+!e0bW2>eA!km_5E8I5?X4~;K@STn{*6hgD(qH1pL|bOA-;Jwg_1MT; zx6fA2;sv=aiM_bs6UCV0ne0wqUai@YtEKRVa~pQf&ij&56~H z{7JTZ?&T;UAt50lAt50lAt50lAt50lAt50lAt50lAt50lAt50lAt530K>P=z!SBrg GPyhg!AA;rp diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.conf b/testdata/09-unbound-control.tdir/09-unbound-control.conf new file mode 100644 index 000000000000..ba55e34e8869 --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.conf @@ -0,0 +1,24 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.dsc b/testdata/09-unbound-control.tdir/09-unbound-control.dsc new file mode 100644 index 000000000000..7b4436789e41 --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.dsc @@ -0,0 +1,16 @@ +BaseName: 09-unbound-control +Version: 1.0 +Description: 09 test unbound-control remote control tool +CreationDate: Mon Sep 15 11:14:08 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: 09-unbound-control.pre +Post: 09-unbound-control.post +Test: 09-unbound-control.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.post b/testdata/09-unbound-control.tdir/09-unbound-control.post new file mode 100644 index 000000000000..4269fee1b5da --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.post @@ -0,0 +1,13 @@ +# #-- 09-unbound-control.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +# it was stopped with unbound-control (if the test succeeded) +kill $UNBOUND_PID >/dev/null 2>&1 +kill $UNBOUND_PID >/dev/null 2>&1 +exit 0 diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.pre b/testdata/09-unbound-control.tdir/09-unbound-control.pre new file mode 100644 index 000000000000..479e4a90bc0f --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.pre @@ -0,0 +1,33 @@ +# #-- 09-unbound-control.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT 09-unbound-control.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < 09-unbound-control.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.test b/testdata/09-unbound-control.tdir/09-unbound-control.test new file mode 100644 index 000000000000..f683bf41758c --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.test @@ -0,0 +1,406 @@ +# #-- 09-unbound-control.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# exit value is 1 on usage +$PRE/unbound-control -h +if test $? -ne 1; then + echo "wrong exit value for usage." + exit 1 +else + echo "exit value for usage: OK" +fi + +# use lock-verify if possible + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# exit value is 1 when a bad command is given. +echo "$PRE/unbound-control -c ub.conf blablargh" +$PRE/unbound-control -c ub.conf blablargh +if test $? -ne 1; then + echo "wrong exit value on error." + echo "> cat logfiles" + cat fwd.log + cat unbound.lo + exit 1 +else + echo "correct exit value on error" +fi + +# reload the server. test if the server came up by putting a new +# local-data element in the server. +echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf +echo "$PRE/unbound-control -c ub.conf reload" +$PRE/unbound-control -c ub.conf reload +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "> dig afterreload." +dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile +echo "> check answer" +if grep "5.6.7.8" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# must have had queries now. 1 since reload. +echo "$PRE/unbound-control -c ub.conf stats" +$PRE/unbound-control -c ub.conf stats > tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then + echo "OK" +else + echo "bad stats" + cat tmp.$$ + exit 1 +fi + +# verbosity +echo "$PRE/unbound-control -c ub.conf verbosity 2" +$PRE/unbound-control -c ub.conf verbosity 2 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# check syntax error in parse +echo "$PRE/unbound-control -c ub.conf verbosity jkdf" +$PRE/unbound-control -c ub.conf verbosity jkdf +if test $? -ne 1; then + echo "wrong exit value after failure" + exit 1 +fi + +# check bad credentials +cp ub.conf bad.conf +echo "remote-control:" >> bad.conf +echo " server-key-file: bad_server.key" >> bad.conf +echo " server-cert-file: bad_server.pem" >> bad.conf +echo " control-key-file: bad_control.key" >> bad.conf +echo " control-cert-file: bad_control.pem" >> bad.conf +echo "$PRE/unbound-control -c bad.conf verbosity 2" +$PRE/unbound-control -c bad.conf verbosity 2 +if test $? -ne 1; then + echo "wrong exit value after failure" + exit 1 +fi + +# check spoofedclient credentials +rm -f bad.conf +cp ub.conf bad.conf +echo "remote-control:" >> bad.conf +echo " server-key-file: unbound_server.key" >> bad.conf +echo " server-cert-file: unbound_server.pem" >> bad.conf +echo " control-key-file: bad_control.key" >> bad.conf +echo " control-cert-file: bad_control.pem" >> bad.conf +echo "$PRE/unbound-control -c bad.conf verbosity 2" +$PRE/unbound-control -c bad.conf verbosity 2 +if test $? -ne 1; then + echo "wrong exit value after failure" + exit 1 +fi + +# create a new local zone +echo "> test of local zone" +echo "$PRE/unbound-control -c ub.conf local_zone example.net static" +$PRE/unbound-control -c ub.conf local_zone example.net static +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1" +$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# check that www.example.net exists +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "192.0.2.1" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# check that mail.example.net has nxdomain +echo "> dig mail.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile +echo "> check answer" +if grep "NXDOMAIN" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# remove www.example.net - check it gets nxdomain +echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net" +$PRE/unbound-control -c ub.conf local_data_remove www.example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "NXDOMAIN" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# remove nonexistent name - check bug#287(segfault) does not happen. +echo "$PRE/unbound-control -c ub.conf local_data_remove test.example.net" +$PRE/unbound-control -c ub.conf local_data_remove test.example.net +# if crash then then we get: error: could not SSL_read from unbound-control +if test $? -ne 0; then + echo "wrong exit value after success" + cat unbound.log + echo "Not OK" + exit 1 +fi + +# remove example.net - check its gone. +echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net" +$PRE/unbound-control -c ub.conf local_zone_remove example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# dump the cache +echo "> test cache dump" +# fillup cache +echo "dig www.example.com" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. +echo "$PRE/unbound-control -c ub.conf dump_cache" +$PRE/unbound-control -c ub.conf dump_cache > tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +cat tmp.$$ +if grep 10.20.30.40 tmp.$$; then + echo "OK example.com is in cache dump" +else + echo "Not OK cache dump" + exit 1 +fi + +# test lookup +echo "$PRE/unbound-control -c ub.conf lookup www.example.com" +$PRE/unbound-control -c ub.conf lookup www.example.com +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +# answer to lookup is meaningless because of use a forwarder, oh well. + +# load the cache dump. +echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$" +$PRE/unbound-control -c ub.conf load_cache < tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# load local-zones from file +echo "$PRE/unbound-control -c ub.conf local_zones < local_zones" +$PRE/unbound-control -c ub.conf local_zones < local_zones +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig localzonefromfile." +dig @127.0.0.1 -p $UNBOUND_PORT localzonefromfile | tee outfile +echo "> check answer" +if grep "REFUSED" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# load local-data from file +echo "$PRE/unbound-control -c ub.conf local_datas < local_data" +$PRE/unbound-control -c ub.conf local_datas < local_data +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig localdatafromfile." +dig @127.0.0.1 -p $UNBOUND_PORT -t txt localdatafromfile | tee outfile +echo "> check answer" +if grep "local data from file OK" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# remove local-zone and local-data from file +echo "$PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove" +$PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "$PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove" +$PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> check zone and data removal list_local_zones" +$PRE/unbound-control -c ub.conf list_local_zones | tee outfile +if grep "localzonefromfile" outfile; then + echo "Not OK" + exit 1 +fi +if grep "local data from file OK" outfile; then + echo "Not OK" + exit 1 +fi +if grep "otherlocalzone" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# flushing +echo "$PRE/unbound-control -c ub.conf flush www.example.net" +$PRE/unbound-control -c ub.conf flush www.example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT" +$PRE/unbound-control -c ub.conf flush_type www.example.net TXT +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "$PRE/unbound-control -c ub.conf flush_zone example.net" +$PRE/unbound-control -c ub.conf flush_zone example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# now stop the server +echo "$PRE/unbound-control -c ub.conf stop" +$PRE/unbound-control -c ub.conf stop +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +# see if the server has really exited. +TRY_MAX=20 +for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do + if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then + echo "not stopped yet, waiting" + sleep 1 + else + echo "stopped OK; break" + break; + fi + if grep "No such process" tmp.$$; then + echo "stopped OK; break" + break; + fi +done +if kill -0 $UNBOUND_PID; then + echo "still up!" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "not stopped, failure" + exit 1 +else + echo "stopped OK" + + if test -f ublocktrace.0; then + if $PRE/lock-verify ublocktrace.*; then + echo "lock-verify test worked." + else + echo "lock-verify test failed." + cat fwd.log + cat unbound.log + exit 1 + fi + fi +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/09-unbound-control.tdir/09-unbound-control.testns b/testdata/09-unbound-control.tdir/09-unbound-control.testns new file mode 100644 index 000000000000..0c911ca5b30e --- /dev/null +++ b/testdata/09-unbound-control.tdir/09-unbound-control.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/09-unbound-control.tdir/bad_control.key b/testdata/09-unbound-control.tdir/bad_control.key new file mode 100644 index 000000000000..d29cdbc91b37 --- /dev/null +++ b/testdata/09-unbound-control.tdir/bad_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G +SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO +DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB +AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW +PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE +PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD +IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 +GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x +q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L +neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA +IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 +ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA +RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= +-----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/bad_control.pem b/testdata/09-unbound-control.tdir/bad_control.pem new file mode 100644 index 000000000000..e06b847208e3 --- /dev/null +++ b/testdata/09-unbound-control.tdir/bad_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt +i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva +UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x +nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK +4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH +5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F +-----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/bad_server.key b/testdata/09-unbound-control.tdir/bad_server.key new file mode 100644 index 000000000000..0dbb134b5be7 --- /dev/null +++ b/testdata/09-unbound-control.tdir/bad_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 +1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj +UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB +AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m +3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf +FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v +Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX +i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu +2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ +LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva +CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 +/ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO +2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/bad_server.pem b/testdata/09-unbound-control.tdir/bad_server.pem new file mode 100644 index 000000000000..983247ac73bd --- /dev/null +++ b/testdata/09-unbound-control.tdir/bad_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B +RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ +DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV +Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy +zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm +O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu +oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== +-----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/local_data b/testdata/09-unbound-control.tdir/local_data new file mode 100644 index 000000000000..54e6e93b4dd9 --- /dev/null +++ b/testdata/09-unbound-control.tdir/local_data @@ -0,0 +1 @@ +localdatafromfile 3600 TXT "local data from file OK" diff --git a/testdata/09-unbound-control.tdir/local_data_remove b/testdata/09-unbound-control.tdir/local_data_remove new file mode 100644 index 000000000000..fcb8239589e3 --- /dev/null +++ b/testdata/09-unbound-control.tdir/local_data_remove @@ -0,0 +1 @@ +localdatafromfile diff --git a/testdata/09-unbound-control.tdir/local_zones b/testdata/09-unbound-control.tdir/local_zones new file mode 100644 index 000000000000..4c65f712fbb2 --- /dev/null +++ b/testdata/09-unbound-control.tdir/local_zones @@ -0,0 +1,2 @@ +localzonefromfile refuse +otherlocalzone static diff --git a/testdata/09-unbound-control.tdir/local_zones_remove b/testdata/09-unbound-control.tdir/local_zones_remove new file mode 100644 index 000000000000..1d215585515a --- /dev/null +++ b/testdata/09-unbound-control.tdir/local_zones_remove @@ -0,0 +1 @@ +localzonefromfile diff --git a/testdata/09-unbound-control.tdir/unbound_control.key b/testdata/09-unbound-control.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/09-unbound-control.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/unbound_control.pem b/testdata/09-unbound-control.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/09-unbound-control.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tdir/unbound_server.key b/testdata/09-unbound-control.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/09-unbound-control.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/09-unbound-control.tdir/unbound_server.pem b/testdata/09-unbound-control.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/09-unbound-control.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/09-unbound-control.tpkg b/testdata/09-unbound-control.tpkg deleted file mode 100644 index d5b11b77f0446d6bc5c44f07cea43d03a999e9b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7433 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 H0H6Q><)y{r diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf new file mode 100644 index 000000000000..bb125c0d5c55 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.conf @@ -0,0 +1,8 @@ +# test config to direct traffic to testns. +server: + do-not-query-localhost: no + fake-sha1: yes +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.dsc b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.dsc new file mode 100644 index 000000000000..869dfafe4310 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.dsc @@ -0,0 +1,16 @@ +BaseName: 10-unbound-anchor +Version: 1.0 +Description: Test unbound-anchor for 5011 and cert update. +CreationDate: Thu Sep 30 15:35:09 CEST 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: 10-unbound-anchor.pre +Post: 10-unbound-anchor.post +Test: 10-unbound-anchor.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.post b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.post new file mode 100644 index 000000000000..b1112940456b --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.post @@ -0,0 +1,10 @@ +# #-- 10-unbound-anchor.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $PETAL_PID diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.pre b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.pre new file mode 100644 index 000000000000..acf223277514 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.pre @@ -0,0 +1,33 @@ +# #-- 10-unbound-anchor.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +PRE="../.." +get_random_port 2 +PETAL_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "PETAL_PORT=$PETAL_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +get_make +(cd $PRE; $MAKE petal) + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT 10-unbound-anchor.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start https daemon +$PRE/petal -v -a "127.0.0.1" -p $PETAL_PORT >petal.log 2>&1 & +PETAL_PID=$! +echo "PETAL_PID=$PETAL_PID" >> .tpkg.var.test +cat .tpkg.var.test +sed -e "s/@TOPORT@/$FWD_PORT/" < 10-unbound-anchor.conf > ub.conf + +wait_ldns_testns_up fwd.log +wait_petal_up petal.log + diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test new file mode 100644 index 000000000000..46cea626cb00 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.test @@ -0,0 +1,162 @@ +# #-- 10-unbound-anchor.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +OPTS="-u 127.0.0.1 -P $PETAL_PORT -C ub.conf -v -a root.key -c root.pem -n petal" +DS=`cat K.+005+37348.ds` + +# check that the root.key file works. +function check_works() { + if $PRE/unbound-host -C ub.conf -f root.key -t DNSKEY -v . | grep "(secure)" >/dev/null; then + echo OK + else + echo "not OK" + cat fwd.log + cat petal.log + exit 1 + fi +} + +# check that the root.key file works, but insecurely. +function check_insecure() { + if $PRE/unbound-host -C ub.conf -f root.key -t DNSKEY -v . | grep "(insecure)" >/dev/null; then + echo OK + else + echo "not OK" + cat fwd.log + cat petal.log + exit 1 + fi +} + +# test with good start key, and must do 5011 (no URL possible) +echo "*** TEST 1 ***" +echo $DS > root.key +$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +check_works +# save for test 5 +cp root.key root.key.probed + +# force update with the cert. +echo "*** TEST 2 ***" +cp test_cert.pem root.pem +$PRE/unbound-anchor -F -x "root.xml" -s "root.p7s" $OPTS +if test $? != 1; then + echo "Exitcode not OK" + exit 1 +fi +check_works + +# 5011 fails +echo "*** TEST 3 ***" +echo ". IN DS 37000 5 1 b00000000000000000000100f0000000000000b2" > root.key +$PRE/unbound-anchor -x "root.xml" -s "root.p7s" $OPTS +if test $? != 1; then + echo "Exitcode not OK" + exit 1 +fi +check_works + +# cert fails (bad p7s). +echo "*** TEST 4 ***" +echo ". IN DS 44444 5 1 b00000000000000000000100f0000000000000b2" > root.key +$PRE/unbound-anchor -F -x "bad.xml" -s "bad.p7s" $OPTS +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +if grep "DS 44444" root.key >/dev/null ; then + echo OK +else + echo "keyfile changed" + exit 1 +fi + +# cert fails (bad name). +echo "*** TEST 4b ***" +echo ". IN DS 44444 5 1 b00000000000000000000100f0000000000000b2" > root.key +$PRE/unbound-anchor -F -x "bad.xml" -s "bad.p7s" $OPTS -n "not-it" +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +if grep "DS 44444" root.key >/dev/null ; then + echo OK +else + echo "keyfile changed" + exit 1 +fi + +# 5011 fails, and probe-time too recent. +echo "*** TEST 5 ***" +# break the probed key. +sed -e 's/bp0KIK3J3/b00KIK0J0/' < root.key.probed > root.key +$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +if grep "b00KIK0J0" root.key >/dev/null ; then + echo OK +else + echo "keyfile changed" + exit 1 +fi + +# 5011 fails, and probe time is very, very old. +echo "*** TEST 6 ***" +mv root.key bla.key +# last probe was Sun Sep 9 03:46:40 2001 +sed -e 's/;;last_success: .*$/;;last_success: 1000000000/' < bla.key > root.key +rm bla.key +$PRE/unbound-anchor -x "root.xml" -s "root.p7s" $OPTS +if test $? != 1; then + echo "Exitcode not OK" + exit 1 +fi +check_works + +# 5011 update probe is only needed. +echo "*** TEST 7 ***" +$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +check_works + +# root goes to insecure (0 anchors). +echo "*** TEST 8 ***" +$PRE/unbound-anchor -F -x "no_more_keys.xml" -s "no_more_keys.p7s" $OPTS +if test $? != 1; then + echo "Exitcode not OK" + exit 1 +fi +if grep ";;REVOKED" root.key >/dev/null; then echo "REVOKED"; else + echo "not revoked"; exit 1; fi +check_insecure + +# insecure input file +echo "*** TEST 9 ***" +$PRE/unbound-anchor -x "notexist.xml" -s "notexist.p7s" $OPTS +if test $? != 0; then + echo "Exitcode not OK" + exit 1 +fi +if grep ";;REVOKED" root.key >/dev/null; then echo "REVOKED"; else + echo "not revoked"; exit 1; fi +check_insecure + + +echo "logs" +cat fwd.log +cat petal.log + +exit 0 diff --git a/testdata/10-unbound-anchor.tdir/10-unbound-anchor.testns b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.testns new file mode 100644 index 000000000000..9aaf75bc06ac --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/10-unbound-anchor.testns @@ -0,0 +1,17 @@ +; nameserver test file +$ORIGIN . +$TTL 3600 + +; for easy test: valid until 2030. +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +. IN DNSKEY +SECTION ANSWER +. 3600 IN DNSKEY 257 3 5 AwEAAcjV/I6yYY0LGBEqBFZS0K6zcbCVAfarbOoCKBUEfsR/nVdy3pwMydXopUVhg4Z07tTu8w2gYTPALPv5E6EJFJebA34R0OcvTPRDr3671zVwZO9HyQK+RuT/0d7G/pdCeJX2gHHiVrG796nf078O/agtojZ8+HJ1V3oLnDZYBSDWv2oL2LB2Mpj+610W7RrmEmQQm2KaMP6aX3YMbAyBIrDjVzJTir4/WwJEHRHq59Xw91egJkS2bp0KIK3J3tQFqw== ;{id = 37348 (ksk), size = 1536b} +. 3600 IN RRSIG DNSKEY 5 0 3600 20300930162500 20100530162500 37348 . tjIVLqaVr2o1pLYxNbozR8OxPnGnCJN/rROZoIVzjEgvofyHx24hGMXak6lIlLHZ9GSmOxUM/71MeunhSdMqfjsoktc7MkpB8eR6ATePjdaPTdRH519wHH7qEkHj5WJNKvJOvG7Q9xs6O3KANErr+iotHjOJYpgbmZFoENJvLzqj4FVJ0bIglgD+SZGJGv9/qA+eWAK7WuWSe+ulMU/WH/SnxB/NKDjSAa//TyjzLhlIRR5UTjLIUymWxG4D3TbJ ;{id = 37348} + +ENTRY_END + diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/bad.p7s b/testdata/10-unbound-anchor.tdir/127.0.0.1/bad.p7s new file mode 100644 index 0000000000000000000000000000000000000000..afbdb1b913884a91350aea629c445257e1f84830 GIT binary patch literal 1165 zcmXqLV(Db#)N1o+`_9YA&a|M3rOKd*rHqM@(U9AKlZ{oIkC{n|mBD};p@?xo6H}}~ z6H}x?6Jyf?W+p}^CQgQX5lY@od#3+1;Dsw>WCiL|GvqViVPg(uVHRdBNG(asF%&Tn zf-B)<6oZHw$cghB8XFiInj0FL8kv|ziSrs885$UvK)FPl(|8}*1&pi=%#CLm3>r@| zH6CQx@gXB|Myu6JGq2(jr4w=7Pj{<*;4J#DJL$~ke-aGymaOF~cgxa#1cNoN3B-3GuIXrmGeUbA6al$kBNA!Kam{*2$cC9b{A2 zAQozOXSJX^&oVu(U=QC))9(K_&dt34o%^aLUupDJzHRx}n0Htx7#`Ze@uFC#m%E@k zZkg19fO8u!b3B~7yG2(~QG{=gq<-Evn`p^3Uhc8?y|-#*ad`0=y?Fh+%j<|BClfOx z1LIBTF|{E37Z~EqK#$I1u37U;;Jm@r(uGBa@~gLLeh}xr9ih@* z?LfLqq3WHJki-AC!LOjO1a@IcI)cx~^yS#pBcLGfMX!%oW_lY}MGvHFJvN z9>@KQJl;wEPnptZa!tedv|Mlf^>0WtfgGz)Ve#0Dt zEKp8KX!Br9WoBX2Lgt7ebC?Xc*f=1$j+xzn56)&{Vq$0j#wbjViHXs{fE|(z*-^zc zkRu+L&{-M}$l88oEc#`);JK<3gW=b6#vMM#yRSYxt6UIdZ1^YNc74muJ(5-F(Q3C8 zr^UA0KPbAQY#AT&d%IfYH}l+I?t&h-?w|8uI#}>&$|9Gup}yC&e=ghf*ve4Z(){nu zPYHM-`o zah8%v(#*Mn7J7UsZ1t~f=f1ueGke;a+Xm*w3l5td;kYXH=Rk + +. + +37348 +5 +1 +b56a31943f14faa31224d147f8b1107b78590000 + + diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s b/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.p7s new file mode 100644 index 0000000000000000000000000000000000000000..c76b5b6e4754d5bce27f78f85286159ba3e0df64 GIT binary patch literal 1165 zcmXqLV(Db#)N1o+`_9YA&a|M3rOKd*rHqM@(U9AKlZ{oIkC{n|mBD};p@?xo6H}}~ z6H}x?6Jyf?W+p}^CQgQX5lY@od#3+1;Dsw>WCiL|GvqViVPg(uVHRdBNG(asF%&Tn zf-B)<6oZHw$cghB8XFiInj0FL8kv|ziSrs885$UvK)FPl(|8}*1&pi=%#CLm3>r@| zH6CQx@gXB|Myu6JGq2(jr4w=7Pj{<*;4J#DJL$~ke-aGymaOF~cgxa#1cNoN3B-3GuIXrmGeUbA6al$kBNA!Kam{*2$cC9b{A2 zAQozOXSJX^&oVu(U=QC))9(K_&dt34o%^aLUupDJzHRx}n0Htx7#`Ze@uFC#m%E@k zZkg19fO8u!b3B~7yG2(~QG{=gq<-Evn`p^3Uhc8?y|-#*ad`0=y?Fh+%j<|BClfOx z1LIBTF|{E37Z~EqK#$I1u37U;;Jm@r(uGBa@~gLLeh}xr9ih@* z?LfLqq3WHJki-AC!LOjO1a@IcI)cx~^yS#pBcLGfMX!%oW_lY}MGvHFJvN z9>@KQJl;3-l*df`F9aUTd zIpTo{ou%C?2@Ttt8Y?|T2Vew>-2tY1^(H@{TNBU_%EtP(iLVthM2%%t=PTSOz*TF&j~a~Ce2 ztT5NVEpt83iQ50Iysw?ZQ{1;@czFdB+1pyQoy(V4)jcgdj_Fya#_YU_D!xxcx~kvp F000?Vi{=0T literal 0 HcmV?d00001 diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.xml b/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.xml new file mode 100644 index 000000000000..ac5cd48af7e2 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/127.0.0.1/no_more_keys.xml @@ -0,0 +1,16 @@ + + +. + +37348 +5 +1 +b56a31943f14faa31224d147f8b1107b78598eb2 + + +37348 +5 +1 +b56a31943f14faa31224d147f8b1107b78598eb2 + + diff --git a/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s b/testdata/10-unbound-anchor.tdir/127.0.0.1/root.p7s new file mode 100644 index 0000000000000000000000000000000000000000..afbdb1b913884a91350aea629c445257e1f84830 GIT binary patch literal 1165 zcmXqLV(Db#)N1o+`_9YA&a|M3rOKd*rHqM@(U9AKlZ{oIkC{n|mBD};p@?xo6H}}~ z6H}x?6Jyf?W+p}^CQgQX5lY@od#3+1;Dsw>WCiL|GvqViVPg(uVHRdBNG(asF%&Tn zf-B)<6oZHw$cghB8XFiInj0FL8kv|ziSrs885$UvK)FPl(|8}*1&pi=%#CLm3>r@| zH6CQx@gXB|Myu6JGq2(jr4w=7Pj{<*;4J#DJL$~ke-aGymaOF~cgxa#1cNoN3B-3GuIXrmGeUbA6al$kBNA!Kam{*2$cC9b{A2 zAQozOXSJX^&oVu(U=QC))9(K_&dt34o%^aLUupDJzHRx}n0Htx7#`Ze@uFC#m%E@k zZkg19fO8u!b3B~7yG2(~QG{=gq<-Evn`p^3Uhc8?y|-#*ad`0=y?Fh+%j<|BClfOx z1LIBTF|{E37Z~EqK#$I1u37U;;Jm@r(uGBa@~gLLeh}xr9ih@* z?LfLqq3WHJki-AC!LOjO1a@IcI)cx~^yS#pBcLGfMX!%oW_lY}MGvHFJvN z9>@KQJl;wEPnptZa!tedv|Mlf^>0WtfgGz)Ve#0Dt zEKp8KX!Br9WoBX2Lgt7ebC?Xc*f=1$j+xzn56)&{Vq$0j#wbjViHXs{fE|(z*-^zc zkRu+L&{-M}$l88oEc#`);JK<3gW=b6#vMM#yRSYxt6UIdZ1^YNc74muJ(5-F(Q3C8 zr^UA0KPbAQY#AT&d%IfYH}l+I?t&h-?w|8uI#}>&$|9Gup}yC&e=ghf*ve4Z(){nu zPYHM-`o zah8%v(#*Mn7J7UsZ1t~f=f1ueGke;a+Xm*w3l5td;kYXH=Rk + +. + +37348 +5 +1 +b56a31943f14faa31224d147f8b1107b78598eb2 + + diff --git a/testdata/10-unbound-anchor.tdir/K.+005+37348.ds b/testdata/10-unbound-anchor.tdir/K.+005+37348.ds new file mode 100644 index 000000000000..1b98f044f475 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/K.+005+37348.ds @@ -0,0 +1 @@ +. 3600 IN DS 37348 5 1 b56a31943f14faa31224d147f8b1107b78598eb2 ; xotek-pusin-gezoc-gevep-feged-gigyg-livor-cagil-riveh-nafar-duxix diff --git a/testdata/10-unbound-anchor.tdir/K.+005+37348.key b/testdata/10-unbound-anchor.tdir/K.+005+37348.key new file mode 100644 index 000000000000..65506139333a --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/K.+005+37348.key @@ -0,0 +1 @@ +. 3600 IN DNSKEY 257 3 5 AwEAAcjV/I6yYY0LGBEqBFZS0K6zcbCVAfarbOoCKBUEfsR/nVdy3pwMydXopUVhg4Z07tTu8w2gYTPALPv5E6EJFJebA34R0OcvTPRDr3671zVwZO9HyQK+RuT/0d7G/pdCeJX2gHHiVrG796nf078O/agtojZ8+HJ1V3oLnDZYBSDWv2oL2LB2Mpj+610W7RrmEmQQm2KaMP6aX3YMbAyBIrDjVzJTir4/WwJEHRHq59Xw91egJkS2bp0KIK3J3tQFqw== ;{id = 37348 (ksk), size = 1536b} diff --git a/testdata/10-unbound-anchor.tdir/K.+005+37348.private b/testdata/10-unbound-anchor.tdir/K.+005+37348.private new file mode 100644 index 000000000000..1e4f9c51f410 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/K.+005+37348.private @@ -0,0 +1,10 @@ +Private-key-format: v1.2 +Algorithm: 5 (RSASHA1) +Modulus: yNX8jrJhjQsYESoEVlLQrrNxsJUB9qts6gIoFQR+xH+dV3LenAzJ1eilRWGDhnTu1O7zDaBhM8As+/kToQkUl5sDfhHQ5y9M9EOvfrvXNXBk70fJAr5G5P/R3sb+l0J4lfaAceJWsbv3qd/Tvw79qC2iNnz4cnVXegucNlgFINa/agvYsHYymP7rXRbtGuYSZBCbYpow/ppfdgxsDIEisONXMlOKvj9bAkQdEern1fD3V6AmRLZunQogrcne1AWr +PublicExponent: AQAB +PrivateExponent: XKH2f4rfW8LGMwSCQ56nCi1SPvQ7l56x+a1M94S/Q7row7ED5E4xuiw4LqwvkhDVJ/meuaZDry7wkLftydT6XoLtNXTaOgejIvclNvtE5C0XIRanLFC/OliUYIDAZNwPGVCYX8ZIfcbi1Sp5Ng9EofCb1haSGn/Wnar31knaweRdTrAUIPl49+QhJmaHCrTtHVuYEOZjIaOPSGIBvxZAk//3yF6FXY3RVRaNRTcELWvLclSdtt52etVV0/SEWhjh +Prime1: 4wEpv8UVvqOkOKSxeu1ao42FWHwqzwUdFyNeKrUxg3E7ad5i9V0aaFhqbJKzQtVUreeEtoXsSRvjvbWJ4wSCwEay1qVD4xEJ4UFtasESxQvv1iVsBQ7zEywRkwSIT46/ +Prime2: 4n0h+1TXflSEqdxC4lPiwyIC/z+1iyq0kFru70SB395S44HAynbQBdsapZX29msfl+/tiu2DncIXe1oVaDDqPpbrOT5NZMH9xQnZDSCbM8l7Gyx5UB3MsbT+71J2VrAV +Exponent1: p81LTDvmyAZ1NX3gyCq+TpolkPQwPNnd2CXHzTAlirFgJvFCG3gYNjvtZ5bFtki2ENtMShQTRzO7lJemds71zCY2ut5toWMN95oCxOA1/LzHLHh7Mf4MBwcTcqbuEElH +Exponent2: w0ZyWxkuZxyF+VIQVMVQuT+E6ABNDX03i1LruV4OwC8WtlM0HxxLhREBK41eDd4UslJKM8NO/GDRECh+VoP+IxLKImPGJL5hh1ZTTs8zIXZw7t/shJf82acdOsiVgW51 +Coefficient: 10OZvNAPHe/wBO2+AO49EUohPksOxFy9dwspB1XUjlPB9zv93dUfZdou3pjZq1EkxnRChaAwmRMYxks3UiTmDuybMNzKlaFQajyB+UowjA1dStFYbDFpVrIqv6H0q7W2 diff --git a/testdata/10-unbound-anchor.tdir/keys/test_cert.key b/testdata/10-unbound-anchor.tdir/keys/test_cert.key new file mode 100644 index 000000000000..b860b1b298e6 --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/keys/test_cert.key @@ -0,0 +1,21 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIDfAIBAAKBwQC48GhhmIU66TZKc3QiyF4L5bsm8Aly/y2SzLP+GACepK0OcOtD +i2sXrTtoJDvGOPZ9ICqmIy8u/Q/cK26txNEeZFcClLcYF/U+NaqjEwrwkHEIgc3g +8qnKrhzM61I8foAWVT7cqxFHDKYuClNITXk1i//Yzpnf9wvVKQ51W9UOtm/WA7g4 +IDHCuAjocyyNC3B7XqYawFDOsdMI4ZW7hC0hIRQOvBkvbvY8WxmsSkdd30u1KmoI +Sg4y6OvnikrEEQkCAwEAAQKBwQC3hQlv37RF82sGkm8qnP6Ge+AuEYCu9v44cJ4k +hZkH1I5OiEtN6anKAwOyolIWsCwZmrP3zW5jCIiWiRr5oReLOzMEwqK2a//XTdYY +oSr38b3ZHUY59VP8Zq75woMGuNed35kAmGxzDRP1gI/TmvTvaHlqYyvxBtxnZJij +Za1CrT+a9JvR6hI8xXrE33CF0T6JO1v3v0HeBuve5+83cCHKo+GyqIBjL3FJgefZ +EsPz6rGnPDKTYgMyaljFV3LI5ikCYQDlaBnyiWk1C7tYO5x3CRoHoiuiiREZCncK +QkSxjiDoSP0rc+3BQp2kG3yy6S9mN4qMQPELEtBa6bORogxNK+Pxg8TRI/+xgeFt +bod5Bd4pfl6Y5hXm21JwELFlOzPI3PMCYQDOYK6Z7vegiOJyyAJXMjcI07H8S0Gr +SZW8f4tHRzO+RrRpR5ANzarELX7nF/Qj5mPXiZNiiMDGocxqkNzIa5HFLOqBhRkv +o7yC1Cj582dUBFHyEbsZxR6UMTPLdE3UaRMCYACC1Nv3dmaJ2ib+KwEQ4h/2Ooao +K4OUxGMfdqu2l1gtIXNBVNxDW7qL3SFA57wgj4x0cJUHu7MYJjBC3igl2uIk2wFk +RSOOGIR35JFec/o/r9JDYPUcs/hP8TU6hokCBQJgHbH/rZqa+vh3TPjGjXFmRdjg +JWNWwaTG7OaVTd5K7bgSwYtQiQvs5Gl/dxUVRg0ilKLxGB6BTpN9bGAHxLbltK9v +1s8l/praxyBr/PsvBQHSILi4aU7ZxY0G3OGRSV0NAmBx28Msdgc0yHh3qSkbwVEr +gr7av1iOH73ee+o4CmMWXYUBHOMW5Su0s0QHjNGDMiRiRoCvzYqdLcJj9/sFJxOT +CM35WGGeKDMNubX7C6YroQ91q7kUmhi7HHY3QOyhCDU= +-----END RSA PRIVATE KEY----- diff --git a/testdata/10-unbound-anchor.tdir/keys/test_cert.pem b/testdata/10-unbound-anchor.tdir/keys/test_cert.pem new file mode 100644 index 000000000000..6e588a4abc8f --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/keys/test_cert.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICWTCCAYKgAwIBAgIJAN5YIkuCvJf5MA0GCSqGSIb3DQEBBQUAMCYxDjAMBgNV +BAMTBXBldGFsMRQwEgYJKoZIhvcNAQkBFgVwZXRhbDAeFw0xMzAxMTcxMTUyNDVa +Fw0zMjEwMDQxMTUyNDVaMCYxDjAMBgNVBAMTBXBldGFsMRQwEgYJKoZIhvcNAQkB +FgVwZXRhbDCB3zANBgkqhkiG9w0BAQEFAAOBzQAwgckCgcEAuPBoYZiFOuk2SnN0 +IsheC+W7JvAJcv8tksyz/hgAnqStDnDrQ4trF607aCQ7xjj2fSAqpiMvLv0P3Ctu +rcTRHmRXApS3GBf1PjWqoxMK8JBxCIHN4PKpyq4czOtSPH6AFlU+3KsRRwymLgpT +SE15NYv/2M6Z3/cL1SkOdVvVDrZv1gO4OCAxwrgI6HMsjQtwe16mGsBQzrHTCOGV +u4QtISEUDrwZL272PFsZrEpHXd9LtSpqCEoOMujr54pKxBEJAgMBAAGjDzANMAsG +A1UdDwQEAwIChDANBgkqhkiG9w0BAQUFAAOBwQCaA3ys5hDPMNV1oXIxH6u2KfAX +C9tYJId/SR0x8whsZuNaSEZAgImdM5dnyWdjey8Pio772E9/F2aUBGFkdadZx4My +d7hBfEi/NECEKs86k9g0ijbin41NKtnajb6GwyNQ9vDx7Z5FS8BZ3CD0BZIdCQUE +gKuDSWBROQU3tqrjdk2QTwGQkj2mgzT871Jn1MwZw0mczPjS1y469Ejym8wi3uCd +EboDOoGBCpmUQbxBv6JI75cUCdmNNEwjQjZ0XQw= +-----END CERTIFICATE----- diff --git a/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup new file mode 100755 index 000000000000..3e593119909c --- /dev/null +++ b/testdata/10-unbound-anchor.tdir/keys/unbound-control-setup @@ -0,0 +1,167 @@ +#!/bin/sh +# +# unbound-control-setup.sh - set up SSL certificates for unbound-control +# +# Copyright (c) 2008, NLnet Labs. All rights reserved. +# +# This software is open source. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# Neither the name of the NLNET LABS nor the names of its contributors may +# be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# settings: + +# directory for files +DESTDIR=/usr/local/etc/unbound + +# issuer and subject name for certificates +SERVERNAME=petal +CLIENTNAME=unbound-anchor + +# validity period for certificates +DAYS=7200 + +# size of keys in bits +BITS=1536 + +# hash algorithm +HASH=sha1 + +# base name for unbound server keys +SVR_BASE=test_cert + +# base name for unbound-control keys +CTL_BASE=unbound_control + +# we want -rw-r--- access (say you run this as root: grp=yes (server), all=no). +umask 0026 + +# end of options + +# functions: +error ( ) { + echo "$0 fatal error: $1" + exit 1 +} + +# check arguments: +while test $# -ne 0; do + case $1 in + -d) + if test $# -eq 1; then error "need argument for -d"; fi + DESTDIR="$2" + shift + ;; + *) + echo "unbound-control-setup.sh - setup SSL keys for unbound-control" + echo " -d dir use directory to store keys and certificates." + echo " default: $DESTDIR" + echo "please run this command using the same user id that the " + echo "unboun daemon uses, it needs read privileges." + exit 1 + ;; + esac + shift +done + +# go!: +echo "setup in directory $DESTDIR" +cd "$DESTDIR" || error "could not cd to $DESTDIR" + +# create certificate keys; do not recreate if they already exist. +if test -f $SVR_BASE.key; then + echo "$SVR_BASE.key exists" +else + echo "generating $SVR_BASE.key" + openssl genrsa -out $SVR_BASE.key $BITS || error "could not genrsa" +fi +if test -f $CTL_BASE.key; then + echo "$CTL_BASE.key exists" +else + echo "generating $CTL_BASE.key" + openssl genrsa -out $CTL_BASE.key $BITS || error "could not genrsa" +fi + +# create self-signed cert for server +cat >request.cfg <request.cfg <4>R1MFD|lpFPV-^<1;UvWZhNMjId!UHS2n*SUcY1v&om+p}? zx+Mx^q!~%0V@8@8%}4@@*AS<`BaZ@s5NhH;VqU<6v}u4A5}@!BNWqjg4reh5&moCl z8$*m~I7(;N#%qidJ3vi%*>8{0|NOrBuK(}*3qYf7xuCRVVU(AP6-6BrB-PpXp%P>f zj$t!TfMd|X&v&Q~Adm}!F$8wG`XGR!2;67KK3p*lPi;--RlB{HxC?<$*s?zkP^ixieF*P&MEWzg z|L6>nj4u$eQ%pP=@CGO%$;|fJ*g$~FBq@r>h025(Ac=AyNJOw)pw_00UTaOT#8_+T!*d_ELo1EZ6v`a$t+nHd|r)>b0$;H1w%?cP%(-Tf~%3{@^-e|i9C*%lZ3uqOQa%AwJK?IA2Td!%|p0iRW zUG=&koToUvQ?0_K1kq|rtPwV#7((f7n_5i9{f&5*XeJOJSpuBw3=*}d zkT%k^nm0f>ibg4-W2)tV%g<_6PB%s1YWOsg>#6=E74@ZUZIsgk2_{9WW_pE zLRIX#W0Hd7FynE0VLnCryfuLr@*R}z+625pmKezyVJIe~xm`6+8Ir06Nk%~=q|1D@ z;PRQ>2kR30fFLDjIA7M(}@fjk8&wQZ>d$G26IW%$JMHEqufin zaS)UNYvxU;QS8O43D8Ad9;VuDxJ?OZQ-X~tD0EcukyNvh;tCzoa0LT6R!mVsBNAcE zDp$=zSBnvA=iQYk3qPV|1p;Z1LpJp zF`zZ}ScppC_8E)YCEd10l1oxuoCGjF23bGADJ$nS6jeO0CU&*4PNQyHV`<_K&1vGA z?LE7wilWc1e(&Php_xURsM|*kn@wqovZmGTT0?4x_R(3b_m=qt+hwQ}=H) zGh(r|&q0=%*6botwZ99<%q}b`YQs)5ar>y1K6tfjzu*G9XgR)pq^Pv(f?ZbhS!IkI zDuyAdQpwu6sK~k~>vPh~NOq7ga||eAw(s3C9ERP#o#z-fYefyWk2Y0F-nURYu&-df z)4Lh!Vn_b~spatT9~yH&5avK|1a;5o^Mm==k>VeN&^`cA3;^JA&GZ8of}`{Ce=KNh z7;!<+a3C^FM-m|>Hw71u9LHc(o8! zs1TWAN?P10r-d%kG}*3@Rhp@ErHtkwTu-*$CS1-XV?;P+V2q0idV^wtK+rf8EgH#K zoK_JR4tf?!i+cQBF64-}lTJv$ea@ypiNP#f_WPx@>cc%Qxdh?vsFN@2N;U6x_=6yg zC}Ek-=g0(|F<>POhe?=iRvj(?W$?J#U>Y3PfI~bRbMaXu#}COtR>(=6AA@FND$FEZ_AvVw4ZstB-khIv$0@5y{6U9_?(p>dZN__ zFvL~3@K5t#KT0}^__y+q!RzAt=W&GihfxF^692g6h4b-$EGV|mxT98*ADua2czxV% zfHBxc)XR!0>6ON~l?+agCy0cf0B6`(MQGRC+PJ+N$-1j*uu|o;9FtI(bUn3S*Yp!xY@p5rT$L|o*NLZAKUJ!^QE4^mw2Km1~Xd0Kw5$`X_&aDMZr=; z?x96FofXUNVx(U71|qzbGK`$&&vhFyT+PM{y04u}s-6N-;{--jWl*A#w2NrO!}+$%DP^@Ni-5?ewphDRmx@fMsmK-_7`GD~LE84K zbFMcV^1~%mEoIzcA8RHk4s*$r1QIcW!|Rx< z5i{mXQ@N}=A1DgDSH^DL=`}VPxxeK#)3cysL8x3#)YIxqyn)z>Tz(DV1xHl zYEt*7+c_qhuLk&NEa3}~Mki0yoKB?cb$PQnB%Y4*k$AGmgfm9CSWgJLj=`dyPD9QF zlc`iIGa6}#VBC(HOw(|u(nc#oLjf1}JCG0i%x7UwLo3xCPF-rlv|J2iMWCd4nr_9K1vQ$)B6-&D>2PwMPEZBbUB`Xh z4wfPjRx2bOR*4CxRU&PB$2lyeG~FPaq>V=Xs-fqxf>*CeFcZ<)M1@Pndr`a|6dQtOouyO`ZtIw?WY~xYQ>adq z0M2mFANE&pwuG{zSxgpNg*L;~{Rd>R^kPE!Zl+Uf=Q~}mBOTzh#fZhN?KyO3V@HghPQw%ohw} zl?uowlbX91$mUI4cWRYj$qn;GA*xB~as~r7N)byXsVL3H4S=F~BSOUdqSGX!u!D%A z9wwz!Vl^$=@pe6esWnNEO;zhL($h0Mh>$Af1*MHNtN9jSY8^RFRd~W|#MxY@rXeXQ z*`V9q0vqXt>b#fZt6kEOQp_p=goN(R6=-iWtp-|#%MZ2i4E(V^)c*)N{P{muoP8KP zj_Uq@fBlc5Gv_~sLdg96|FNJW*}uRGGiCb+;&G(<&jsLp_z#)!fSLP$3kHID{C6y9 z;w;O$GdB>Lq{x#aUzr6^+7L+p|;IYQ7V3|yFZ z6d?gIisHC?)a^y#Q5r!BK%>A*dyo;krnJ?fI5|?$_2#(KDeyW!Ch;;qrl{rFd!PMI zr@gB&<8UJu&%AXsO^r=BXP>r-kl3ZAvZ(2^0)(oqhK?H}c7v}=f>%`xif^1 z0xStZd!V9O?}Qyo59pnpN%;PhjC(DWk%(+~9By}QDH6y1cgP_A@J|p7}%f-V5z(x2$oFy|w%~hkW}(Pn;xV2Clj5gjKIjVYlA= zDckNVTZ^V2d*PLD{rKCTd30BN;;+}QOiev^+X~;3En~KXpY39ozx~v<>vz1ic>5X4 z+GlTHcBk^w!Mojd@Go~S`la@{D;77;KX=Qg?~iT!`~O(=Gk9KY<|6P@zj ziL+1K8uXpBBlNws)kVQ&@Gp10bXoAB6~hCA{eAs6FNc;|))-8!UOqH5I52R@AsQdF zUi7Pj7i|5-Cmx5kx4*7}lW)88jNPjiKbt-Eix&k}gWoQymtM^Kz3bLrx(T_i{7AWY zzH|9yUwY%I=tZka*9`GO`(uea?8c&o4<*d zfAZ*w4+j43(f|4PC&$M3_+Po<(UIq0*tFuG2gj$UZP#Bz+)Lbdlm9o@9Y6f^6=--3 z>C(?x0ygyTv7BqS<%JM(w5C7U3FjPl^Yl~D33HPN!NHCUeP(WC0a$*J3t|A|p*3@( zLty35@qMpPyc}7#?y0x#%K!YNvo9CF8NFr&)Sa8O9MqxeOr(5%qrYDq9O_?taAW1c zjRDBEaM8YXgU3P34tyRM80cGXS#+-5zYaQX-`gDb?*7vcarB|-`_Jbt`Ob~2e*FWx z3HRLHolkxv{^XMX{LY52jlXfu)yTzL28M`rulG>z%Om$~T}%tx7m9BpyV8sH>al-X z{JoWX%K~G%~#tuMK?-!EP43Cx4*D- z7nKowcUFSIn0nTvd*e3cgj+AaHgoR4FD^a(2KjGKWp^eoJO97${-~4TpCKLT{D0?r zyAQ(SsPVrApulYXhePw<{~jBf$N&Go_}?uS;Eyx@pQ-=fC+t5!e+>RdF?6Q>$ME_3 z|CrD`{-4MH^Z5Tg_#c7X@5TQY?|E+B<6FPFb$#afx9)rOSGWA-6(>`FQuu%Mr}=7FTLlu&z^n3gGhA*EnL58 zg?nt7u<)W^Pj1@v#9!TT?bc@@9NGM!>!C&4SH5|Fa^22tn??)5!#n?vy(?>S)Y#JR zyw5wg-QlrAF0n{#?YWMN0I^77N87|i2dhA=0wh2Y^Q-2k%pV$1RabR;%C7b@eeH3b zD3wyVo;)Zs&pDa->A%YBzZn1h&z=nbg7l00f4|ZWcI)^mjCBB8i2pV{)2~n2mzz7 z^Zys2SNreP{(H6mUhThE`|qzwKe7J*@7T)y)or|Z{|CiCoc~AqjD!96dj9_l(af%V z*-ri8#O;rsIk3LB3j3rn46uIXmQhjPBFw=W`7}2e^e?QRK0!P4z~R;!crJQ_&mRL! z>Dxm&w*S!x<(xm?yx>j*Il; zo6jWaOVj4~+pjr!IG(rh_yM$_l6J ziVo1MWc71^n-|^t$O8y5@=e53K{R;aEUBL5)xUWV|!l!u26Q@yf`quA|ZZ>nLBAMYz3gY{8dFHiQmM02EA z?poQ&uR5u;YQ|@bBtxaH>~nE_J#vRj9&|#BPD6gRwPQRHlclhycq3I>YXuR=%0FkJ z;jK==vC8AxC021UBYhpGOP2*intg(J3+3l80j(A88?8w;j5`Uqf6Fu@b^n%!&H-LH{T4FgQ4w1^ze-#Pjq2 z&7k`27r!6qCI8Qaz#jEK0w3@na1?*_|9lbp2>(YnXi(L~HEnWWKiVHLfY?A2XEePS zFkX;WgBGrhU#sihahcjvOi@6s4m~Ix#0IvrvMj<(Wi^GpH3!QQpr7TDo=)JYk!MA7 z2m=*`tmR(L&g`M!;R!TBJCTT?^_9mXdKyOaevX9}G`(S<5t<-?##DC0tWn1(=L>ip zy8Du#m#3{qUSihPNSs)}DAg55MXPCv#7>?vNjbeEOuqIk_Y5d_xb)Y4Jw>RUuc33& z4dgb%Cm!J_SD9a`8?0??#+z7fKlnulj;C!fzc^8LQ8mlA011kwJ9gu@^PRCAam;NY z(Rz6>%k5T6MwBwbXf8A|58-n}3gN<_34bOj=dI@Y4iD%K(Z$6GXQn(V*X%WF8daA) z5pOh2gR3q@NImG*n$UTCNsv(HM4~gB2uz0g6uJt5)DNy3Ja4GQB}MCYdF2;0l3emm zcjS~rju{X6-65Ks3HjtiJzv6-Z;;)lQ~V^?bxOFioy>*k36n(miBqqA--s@nU+Ha@w%&FJ|Z2@?6z|Y&WzP%WH)Jc$HZH+R^54I+S zv~s+}f)%d!TC6IqLcyjiOph?{Ef%$7Y+BK~0?8scOa6@JP8Dn}M+|;(3=-KklMP}g z9qU=Mcv4C$Wp>)&dUwJEc{w^_!bl3LkO(d=uuJ?A)(E^C!76oS=6j~xkz!3`)OId5 zJr}Ehi||~sQJ!pURYDvsY-5{5&44Ph#R}Lm8HCJc%KW$%TWn5FQMaH+*8;O~l<((e zey3`tsn2E*3hkS0gV|zSCI@Uv*Qs-w?Exhmp|Rvi8Vl7yzD`}N$}J8xTvM>U1*R_s zF63!L#m9JSj8?|}xP@bJRn5fNIu1jC8QD5_lukAkl?23fgnmhvTW@z}+L~YL+k${} za#SAO#gsBzTp5YFwD)^mI1NJQG+}`LONN*wi3ihm8?_X-P1vxa9HT9jgG4zQE9jIL?W{+#E{u z361I5$?cy#`Thau=hpw<1N(2Fm+ZeOiaxFX#Qpj|eZBwlMd&5`zxkD6Xp3eTja6_Q zUSb`#5d_LZ|Wqfc|5*a&91Ei8*Zrrv43KB3+GSo_v)=9Tj+tg|!pxS|5zU+fehH4m+~ z?@Y?Z!*km9s~xru4knD+?edsHD1BnOxw>+KsY)BU#3mVx(A;^y+>_e`J*)v|C#*8T zj5VsjpQs= z$cqQ3_MZ=?@BfTG*Z)_Pza9YS^Zb7piuKlC|33KtC&(-Q*B7C$z_0G^p7)L4-F*do z^>Bm>tV176?Wz|6cbWrhjE{6{7~XQz^}jl zP|-8#eJkgxPkD^K_d^aR&9Zx+WFHyXPTyoBi5z6q?cORtybP$coP>ixaf9(cQCW#hfc8K!K2cLn&^;7{yrWEJ>B(0Jn{KY-{D zUnAhx_uUuSzrX$4$J`GQ4}oWS|G?UC{;vW(+wbKM41KuQFu}VEcxQue9*-NnxpDU- zJn)BmP4pv19uhxh<)f&_;B)M_cKze1%J;xKAAD0m|1g!I#eYDL!hzm^|MrZ4+&l}w zAHcJ73jsi5N1sUh{kZ@igm<5I>%tKG*q1-N|8F?$`}={w{}TKcc$ohYY>L3I_%C0A ze&+fAZXodY>p%R{>;K32@AvCJ0>AG6e-V1ce}Bb)f5m@)#eaWh{(p#nKLB2r`ES?` zd}03obpLNU%>T$_^1A=`Md-8k|LDj4KeT{X=6cNq7p1T_iHMiW1>f32&_GkkYPU?o z3VIxOGdPSzLtnK38KtvPl*9H8wcMDxCh*KWsP>|s`!qaC&hb7bu)(iHo9cYuI1FEn zaI?keT%L~Ps|eU@yTj8s@?UZ?(rScC{$%T zbs6*KuE~Pc0mzKH?k>qp40U$naLTCMEK!DuV5u&%B3h7@jdqpBoTweXkNBfWsoX}~ zH*u@s9cGHaW?gqtoyS?hhW_4t+W(^u{?<@K)W>K!-A`&bL$`)y*sdYD3vJ>ZS1Ibz z0x)%$OL(C)gIyiPjeAb{b28dYSLYM5&B}V~wv&3roajcDx;2L>hPFkh;K(@4^5~6@ zK0vm4fllarj?)#A*;nDHXF8ObGnUZg7Hu7SL+Y|)^M&c7Jem}qbD+{r?^l*+MyfGD zOj?N6T=kSr4Pho3qu7EpDyF)NQgy3QKXr-|G$wq=Rsn)o z6sH#pp08nCI7Fgan?^1yMPeUPA-2t??3_<)gWULh*cfX@Mxw^uP;)f#di4WXZryx) zsz4LRJxSSJc*+Jcn3u}_B$dEpri1}=)W7mVlxCKnkl{HP)2@rD&M9OI| zDDcf?x^j} zcpS%Ku&wE}ypK$ACuA_<_}fN0XtOyzTEmk?ebqTXK2Hu;Q4*IvzI zIV-GOmuH z+OnckPbnn34NX?5BECtt3!7w9X*u7L;z7{j^HC=;nCG1UW4S%hp5pDUY!n=-k229v z1h?DCRu;|Iki1T3SKL{rJEAV>l)hXJ#44X94wU0rlQY^WvsQrC9mS5K;hG#R1bH<# zw8rZ7w~-(=ku`;g4!ts`*-ko;vT`iFBQzNi6B?bCD%t1-f&tf)#u!ApTyD}`OB5Rp z*$Xo1?-(zb`^x{SE5XXs8N-!P)!lBOg~Gcn1zY&T=k5!&u%9cSk|w+O=QZ+_XO` zcB_iXi>{0gVGVxcehZ>7OnwK-%dD?uX*<;zq>}`^rB`5ifBw`P-wK*xRDo3<)Qw&G zU>_cS7UjXO+vfoLKi&7DsxBkvJRB>(9XKBx$kB&vx0r{YcNswKtM9-jszb16b$IWe zWM4^|d-t8_tN0Ea+A91qjq2L>z@p4Ak=F<6(5`R3?;uZ-yos^{*mu&4hC)?e$xtly z>vzxb)pH(vVCZ%RHtoM_eP@T`?YBB@C%^c&Bd_;@%JMpL{qOpU>OlrcU)NB@Q-imD zeacPWpqtoH>X*;TrW%Cukt9Cw(09-~{||f5+N3Cw?fqK(id?%QwtFl~6kk<6HTNQ- z;sX@0d~9s=A|Rp&3O=yz-v542CO)gGr>lD=YG-F9qAD=SJb7Mu@+9OrxqGeu`=Wt% z#2Fs=Ii|ZL{KcGdjU@2j!=DP!3{=OrH77W7nh1zAJVAd)lW5wc8Gej+5My-kz1R?W z6*btR0!SYp6UN)1SVSK&D9;a|&nB9+xHEAt5MTe9>hl=u=V_TeFq zIH}c_g-TULRjE9EEGGcBr5C=9?H@sSIG0PEk<>wF4eQMUqMcWrdd?1&&uf zqlTmqW_1+)2KrE0+&KmUoPx)2U+gFX<{5wzM3tB2P77~a{{%wr0#|^378;ibd&zEg zq70JU$6zrh2={MLx5`5~NLh?%Q)L#jLIK`!>S;yjQ^g-mj+7#iuQUW;ILG6s5{A2TE@ z<8R4VAal6{GZEb5AK+k^It)o-k;s?CfGY8d3Nn63t^z;lc)I2!&85C~L2xS=Q7bS3 z*z^Re;RGN=rU1h@oscLjB3>5RCjUS_xKJFZxTunXX8}$CmV_|a%Pk(Ywr9KqS7Q6h zLq3h;A3j98zZ6-8e>l8*|7yGaWE(Z))JD|s*-IPTd;>O1bC)RLZxTMZy-3q_GYHVf zK-;3Nw?h8Pjcl9-bFt?w?~&!tAGRj0LXi6e^P}TDxZbB*YBke>DWd5#As1{Y=7%?r zCPXM1tz4b_xTj3t2Yf%GPw0QCtLRhRHH}6Z{_;nj-J|PN3?7B{5~ZmB!_D=vsZU{A zwaDZFKsMw38EWYI14_6iqCdmrLS5;YE7vIy19g=!K2cZp=vd8MpwwqPA-GXbDCU}A z&i8N$BNImKGpHYRwO78_bsDe<#`b7QU48ycUH$ZFkN2-TMmxWVXvHfcitV8Qo>=>@ zu(NU;1uzu_aAQX8_tA5E1-w1BzB0^_wsJr|*E^IC&*qMa*>R90{?r}0MR<0`6Jvn& z2Rg>-TaIo`?3}>eCt6$&d?t_z<{Ea;H0%@EYY>ICLn)FOVUrnX`krrw=bBiKmiL$Y z-RIeeK`>g5Bp>nD4N!{xFLF3uB(CG>csiM^k1ep0;DAE&lud+pST9Hu=q9RR6F*@K z+KWlpBEULW-cox_NsQ3-e#qh1n~}yGboKO6)HH}urW2U^8kXsrzJ@K^IUL~6{wzPJ z;s@I9$ig##*Vt~nN^#UCMuBdgV!9vWuV8xm=$n|HR{k2MX8_-X=}|0!>5QWD7k6=> zct}KsgnWYk#Wxo#AnH~hS?K4Vd6;bf21S3TcIy2FTh#~B>7i(5JX~X2N?}iJz64W5 zVLuV*S=qtZG`?W-_yAD8yey`|EPeOI48b?UPFe74^Y_M_)FhN_ceDenDCkMR1B^0K3FV$0C zysG^XPfx1B2-qDU89h2`6+T|_Bj!Fj;r?!bd^#R439wLt$n{Jgv9%i6))_|F-fmC= zGZ4(B2IlD+&xg;|d4I0uSCBue7&|J;66g0Zv5^9v!2~=zpcr+C&$&G7BcT}vX|z)( zb_HvOb6jFyNQJ1U6I0>fV}_kAYHzBZ@)*)!9#D|wxFuaE2(rGf7pOp`*q z#b8C&D7T0^Rg8!a#x3GqvKtg+wv#}#D=#{3*~5x~;b9k*zP#lB)$2RH|NrnVuy5`E z%H-3}_J5_AboTQ8|2?j6?f()d9LGKuIIhhNm+7uw(~{=q#YQR;|1*$ zwl=!iX`@?S_0!|EJ~`j!MSX3b*K%Q$_|&6Z%|9)=&Rmfe+wC~$j+sI$&OJ6CHvt>c zgIbfa3}L|WQ?)q~=GMqth?SY>RBJ6gYp|V6DQ)|5&k|en;k+`C;)CkMxA>>9t5-H- zzqOhcD6?HJnXQSwtvKCa)ox7IMRB;Y%DsWh)-8RKoQ{kji1+U3q>*HJztYT2(&kLm zOY31}me;6kahh({m?xn|`$OH&wiTh%PR+v7dXcj4EX!MRLoJ)@+v`SU8TdTASa+pa zf9%moH7o-U^jfnc1*^`s>qJ3Wcrqn*&G{={VZMKAYG}f6-UmupJ z&gxDIhAU<`9)=BW3Qp=G$!ttsD#)b{!)}WO!?r!vo@$mL4e#zc<|EH^1tW;pgjOk6 zqh|GNXRXAYmRwMHsVN(D^)5B!`FU#K#x3yRl7sv-8Qv|KLT{Q9>51g>j-GQfYbTSg zHzevQ?P#^GzBKdw-sGt~(ZsNIHwr2iAEwrFs85#jUc0OGM^a#%XQ) z@3x)myRSFc|7flC8?r%sSN?}+|5qw^iT`|;>yrQBlKh*MP8H&6)DC?Zl(EH_NCoXD> z3BU0-(<(1mI%83VgPt9CPD2zO|`>5viMOdzu>R>k=QBYyYU?-FPr@1@2+pHh! z?QE)h*O8X9WS7lb8A>QsxfMI{^zByUm}0)S=xdvDNeYankQsFIV~!pRa$8y#r|aRm zU+9LjK$#i_L$6ZxnI}++mD%Q`wQEm(o^MZ&^M9LT#%*WKz_pdDm~nQ+ z_qo;GI+M|BnJG0MOsgp&E7|-~%xP|&-AG%{5xN1l8O;0^^VH2wIKl4PvY+*2vmre- z`OTu9){@DdYV`Y*r}#`^$PB8Te)jIMRTwPt*^Sq%tVGjbvQu_e37<-GD`g2ub+%U5 zTGd(fx9hOD4BbJ^o=^iV#rbMnyQ{6`+*l}tJ)dV7u1u@Bnv_~IYr1L{S8FpHFEBb+ zt$Xpxb|Dle4W?YP%+Y}2gVs~duehyJUF}=Vt>#S1k4!_z+EcFIE;(A!-P+x0ipwwi zQZ{5b*{gc?%C=>Gz`1&zYEPALVwXInMf-Z3DYob7X@%KtbIRRJ%q*Ji7T@5PMJ+d! zWX}r4db|}{1yvT3@z65MOKRvD*`kq|kDOdTJMPWWsoI8blpX1*B`~cf#zN}XbA$Za zv}~!i-Lkb_bD|4$zFJV|iccwnZef&JR^=xtF8lIa&a&c@=JSnS-YqBFlkBY3vj?JW zH%k>y4;NGMNzk&@azk1a$MSSddHF4u;wITb8oZTqb;}QfK`7@sO|{i9c&4MtfCbBO zDRIphGp&}khw=J`Z)e8IwB%_XRnJJBu+khEixqgb)>7z+#YZtLb@Ph`qm^EJmI5N|>fM$9l?2OjQ55hiO zVWf(zJklaND~9PpGcYWj-d4xVLYWRXkGxM=eqLLrY^j=OOf&9fxLLE?>vxJ(soBjc zD>|Ut)rnXsHEr3JJ#PKfUlvjA8yDk05^``f~hx4D(`243-_LBeoU9QXe@3Q{8tp6_SzsvgXKl6HP{ztsO>PP$d z#{3Ts0L=dkoukuPCY{US_rICUCI82}TpyzNg5CDrrMC;xKucd6;m}4XiPGBLQqg;W zd+N&Y60WyQELNt!O^{%%F*!xa^{A_nHZ>DC;OQQ1&4AkFBuqSct_dw&a?(@`2axQa zXolh6pQHf%pM4^}*dHiM-kG0?Odc*urXAa+gbGST}OJDLozRz_$>8qq%MF)3fQ3}2F z>~{1Sh2GMfCgwQOG+~)fo(})l<~%VnEz?L?wzahqj=lE$gsxe(lfa1;#tBy&X@0_3 zg?9L-8&m&I*Y}+N_@jM%WBlitUH;z`lTPQ-k^i5+`2X*6eQo}a!sq@(8Q@P-zDq4t zd59%e=&}r5{P&1bal1z8|u2jfrD+g5Kx^x8?rOOF;S-{S#TfIY+UN zfvK;2^HU7{k~GY9(p@>uK7c%m50~oHRTM71ixc|ZQu6AI9YVXex`01yg5YE*P(=gn|qSEV+%o>QKVCCi2>psVwIgwfnA6tt+bW9#5y2!JlU%65=Jvu8Grekjr_xsQqC2=63$sdO} z6G%Sz^g?8r*T~M`>vtwQk}}|NBpmO|$`3iLKMe znhXB#8TeONiC>7l!pq?whM9Pd!!{&gFJpgX#vaFGWNC@nNi6Ld4hZ&eMi|q5X=kz# zpFg0XZ)(#hZk*UFY_f0nr-S@8NFL5mP6F@Yj;_(kzoMU?o4G%Li9WFUfav@18WCRG z0a}|r%y#%c@*Lv@%X1OSXX_(YLq{VV`+ywq26x~#T7Z<5ixi**-65K}&*bhi_^fF< zbt0J0pK+TnyLjp~xC6k+uL?c6a7f=_Z=U8gS-=8jrEt;-wivcF73Up!Y_&WF0!k?IEQ!J6veST z9ropRvTahPSX?jNSS<7A=>w>q?YR#5V*L|h&e(XojhS|-M9uZq4aK47J`1#&^?YZj n%20rAx_+z{`RqNOyrnw;00000000000RQR*7g=EV0Pp|+CB;>j diff --git a/testdata/common.sh b/testdata/common.sh index 2a8ec7bb34bf..f6d72c2f046a 100755 --- a/testdata/common.sh +++ b/testdata/common.sh @@ -6,7 +6,7 @@ # 2011-02-18: ports check on BSD,Solaris. wait_nsd_up. # 2011-02-11: first version. # -# include this file from a tpkg script with +# include this file from a tdir script with # . ../common.sh # # overview of functions available: diff --git a/testdata/ctrl_itr.tdir/bad_control.key b/testdata/ctrl_itr.tdir/bad_control.key new file mode 100644 index 000000000000..d29cdbc91b37 --- /dev/null +++ b/testdata/ctrl_itr.tdir/bad_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G +SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO +DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB +AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW +PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE +PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD +IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 +GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x +q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L +neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA +IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 +ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA +RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/bad_control.pem b/testdata/ctrl_itr.tdir/bad_control.pem new file mode 100644 index 000000000000..e06b847208e3 --- /dev/null +++ b/testdata/ctrl_itr.tdir/bad_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt +i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva +UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x +nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK +4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH +5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F +-----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tdir/bad_server.key b/testdata/ctrl_itr.tdir/bad_server.key new file mode 100644 index 000000000000..0dbb134b5be7 --- /dev/null +++ b/testdata/ctrl_itr.tdir/bad_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 +1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj +UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB +AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m +3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf +FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v +Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX +i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu +2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ +LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva +CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 +/ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO +2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/bad_server.pem b/testdata/ctrl_itr.tdir/bad_server.pem new file mode 100644 index 000000000000..983247ac73bd --- /dev/null +++ b/testdata/ctrl_itr.tdir/bad_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B +RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ +DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV +Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy +zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm +O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu +oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== +-----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.conf b/testdata/ctrl_itr.tdir/ctrl_itr.conf new file mode 100644 index 000000000000..8ee1dffb73eb --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.conf @@ -0,0 +1,26 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + # disabled validator + module-config: "iterator" +remote-control: + control-enable: yes + control-interface: 127.0.0.1 + # control-interface: ::1 + control-port: @CONTROL_PORT@ + server-key-file: "unbound_server.key" + server-cert-file: "unbound_server.pem" + control-key-file: "unbound_control.key" + control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.dsc b/testdata/ctrl_itr.tdir/ctrl_itr.dsc new file mode 100644 index 000000000000..246ae60d3572 --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.dsc @@ -0,0 +1,16 @@ +BaseName: ctrl_itr +Version: 1.0 +Description: iterator only test unbound-control +CreationDate: Thu Jan 16 14:08:12 CET 2014 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: ctrl_itr.pre +Post: ctrl_itr.post +Test: ctrl_itr.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.post b/testdata/ctrl_itr.tdir/ctrl_itr.post new file mode 100644 index 000000000000..6c6d35d4a3e2 --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.post @@ -0,0 +1,13 @@ +# #-- ctrl_itr.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +# it was stopped with unbound-control (if the test succeeded) +kill $UNBOUND_PID >/dev/null 2>&1 +kill $UNBOUND_PID >/dev/null 2>&1 +exit 0 diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.pre b/testdata/ctrl_itr.tdir/ctrl_itr.pre new file mode 100644 index 000000000000..0ce1b653a460 --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.pre @@ -0,0 +1,33 @@ +# #-- ctrl_itr.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT ctrl_itr.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < ctrl_itr.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.test b/testdata/ctrl_itr.tdir/ctrl_itr.test new file mode 100644 index 000000000000..dadd365826d3 --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.test @@ -0,0 +1,39 @@ +# #-- ctrl_itr.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# exit value is 1 on usage +$PRE/unbound-control -c ub.conf forward_add +i bla bla +if test $? -ne 0; then + echo "wrong exit value." + cat fwd.log + cat unbound.log + exit 1 +else + echo "exit value: OK" +fi + + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/ctrl_itr.tdir/ctrl_itr.testns b/testdata/ctrl_itr.tdir/ctrl_itr.testns new file mode 100644 index 000000000000..0c911ca5b30e --- /dev/null +++ b/testdata/ctrl_itr.tdir/ctrl_itr.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/ctrl_itr.tdir/unbound_control.key b/testdata/ctrl_itr.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/ctrl_itr.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/unbound_control.pem b/testdata/ctrl_itr.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/ctrl_itr.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tdir/unbound_server.key b/testdata/ctrl_itr.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/ctrl_itr.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_itr.tdir/unbound_server.pem b/testdata/ctrl_itr.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/ctrl_itr.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/ctrl_itr.tpkg b/testdata/ctrl_itr.tpkg deleted file mode 100644 index dadf0a307c9fc5904c17a25e130b6880c3ed6e6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5755 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 diff --git a/testdata/ctrl_pipe.tdir/._bad_control.key b/testdata/ctrl_pipe.tdir/._bad_control.key new file mode 100644 index 0000000000000000000000000000000000000000..a2faa6f81771567132387ad51b43fbcf8cbb19f3 GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?;D^}kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+05JA1PXGV_ literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._bad_control.pem b/testdata/ctrl_pipe.tdir/._bad_control.pem new file mode 100644 index 0000000000000000000000000000000000000000..2d09cd41011354526491e199a5d8aa99f4e61f44 GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a??a$ckd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04hx{L;wH) literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._bad_server.key b/testdata/ctrl_pipe.tdir/._bad_server.key new file mode 100644 index 0000000000000000000000000000000000000000..0a2ee41f724acc57ab035ce34dbf340c76f9934b GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?>nGUkd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+05U8uQ2+n{ literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._bad_server.pem b/testdata/ctrl_pipe.tdir/._bad_server.pem new file mode 100644 index 0000000000000000000000000000000000000000..cf59a782f5b9e901ec3bec159ec156bc20bac0c2 GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?^B>skd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04%vLNB{r; literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._ctrl_pipe.conf b/testdata/ctrl_pipe.tdir/._ctrl_pipe.conf new file mode 100644 index 0000000000000000000000000000000000000000..e588caa9e75f944959356e499bb4f041dd53c059 GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?^mEwkd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+05)kaSO5S3 literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._ctrl_pipe.dsc b/testdata/ctrl_pipe.tdir/._ctrl_pipe.dsc new file mode 100644 index 0000000000000000000000000000000000000000..e2ab56651f6acb5fc1af880f932b9139e0d77661 GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?_;1+kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04swpMgRZ+ literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._ctrl_pipe.post b/testdata/ctrl_pipe.tdir/._ctrl_pipe.post new file mode 100644 index 0000000000000000000000000000000000000000..d3208b6f365e17504271cff4827a0f55c092a11c GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=ap9)YZNXHBy zjziPNh!7V}&d=3LEGWoH)k{py(JM)_;Dg!wRhFqn^sYO<9K;Q}lx-LMV>kI_C zPC%gR2m}UTU}|X$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=ap8!xPNXHBy zjziPNh!7V}&d=3LEGWoH)k{py(JM)_;Dg!wRhFqn^sYO<9K;Q}lx-LMV>kI_C zPC%gR2m}UTU}|X$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?`xn^kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+05DrGP5=M^ literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._ctrl_pipe.testns b/testdata/ctrl_pipe.tdir/._ctrl_pipe.testns new file mode 100644 index 0000000000000000000000000000000000000000..89263e3539374d20e0dcce1edef32b971880f27d GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?<=5Ekd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+058BVO#lD@ literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._unbound_control.key b/testdata/ctrl_pipe.tdir/._unbound_control.key new file mode 100644 index 0000000000000000000000000000000000000000..474e6f1a3321e7d2b7b8ac62d10189d0ce08da4c GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?<1g6kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04nG&MF0Q* literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._unbound_control.pem b/testdata/ctrl_pipe.tdir/._unbound_control.pem new file mode 100644 index 0000000000000000000000000000000000000000..6eafa2b1748db2be2421d032ecb35c475be528ec GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?{lD1kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04?t?N&o-= literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._unbound_server.key b/testdata/ctrl_pipe.tdir/._unbound_server.key new file mode 100644 index 0000000000000000000000000000000000000000..9096da07aa2424a7b16062efca795bb33cf04c5a GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?+c((kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+04|CzO8@`> literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/._unbound_server.pem b/testdata/ctrl_pipe.tdir/._unbound_server.pem new file mode 100644 index 0000000000000000000000000000000000000000..0bd1053ef994ae0f72930080f3efd8b4d0734fdd GIT binary patch literal 246 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@ev>f@xK8v5x_AdB#6=a?^~c!kd7HZ z9EYZj5g{&|oS&(kd}0C%;@LGcO~xD6=Fr#i}SZF-0e}A~m_R IB$bN+05Op-Pyhe` literal 0 HcmV?d00001 diff --git a/testdata/ctrl_pipe.tdir/bad_control.key b/testdata/ctrl_pipe.tdir/bad_control.key new file mode 100644 index 000000000000..d29cdbc91b37 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/bad_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDti51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4G +SLOE02/hKDkdkOvaUG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtO +DWc3tXPT1IlSEN0xnAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQAB +AoGAG3w/DatfMCu/nS5OdQx9BSqPgNbnUSqux9xA0fhgPTlN0T3oRtPcqa7JUDUW +PryI/a62ry+zGkw98N2AxolCZg3N7Z3vuRx2FMcKKNwpTzDmcZW7TmMk5FPof6gE +PnYl/ff0w+kxqA+L2EexH3Xi6ApLSZcjyzKWj+dL2AuT9gkCQQD3dPitwITxgCAD +IaHw23e3FRkM/hw1Gp8bt6nbuxitVxxpO96q1EQ+fCy/mf0bMEJDp3xzMEIfP3r4 +GmNbaxa1AkEA9b8LeBLbQ2cm2+UMeUgygBsRirdUQ786auqH38Jbvi/j6S9sDl2x +q1vRtikEBZJWfkhsOzrzwFDKe1bI/EEn9wJAAzOwRA9JqRZPU7sLrWIpmmTbfh+L +neRKSsGFoSI6n4ORCouLxgoZF/XjXldPvxpQwS9ZnOPy9xSLMsqknno0QQJAeDtA +IT8Yh6GwIWWu9KeeDY8wxe1sDLlCm4yjbZZpzGMh3rSU6XJtuqjxsW3fydoO9zn3 +ugLdvvnIFxAexUwbgQJBANyM13xcObfUJOj9rjlGCh0CDh/04ONl8SH8HBnM8guA +RJI5S6vBHweVRopEZcF1sQm6wMf3ej/sGkyyNvJxRkY= +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/bad_control.pem b/testdata/ctrl_pipe.tdir/bad_control.pem new file mode 100644 index 000000000000..e06b847208e3 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/bad_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQDd5/rocjG5vDANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0NFoXDTI4MDYxMzEyMjQ0NFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt +i51Z6qASvAjPFFhLLlq8BwtsnmfqMPMn57dKAghb4OifeL4GSLOE02/hKDkdkOva +UG2UqDNh2OoPTuJk4A+mG2LJoziFhHKlIebo9v2YiFWOBVtODWc3tXPT1IlSEN0x +nAGelMmeLcPeCPe+A5IDlIHzF/+YiDgS38S9dL17owIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAHpvcKqY48X9WsqogV16L+zT7iXhZ4tySA9EBk1a+0gud/iDPKSBi7mK +4rzphVfb4S207dVmTG+1WNpa6l3pTGML6XLElxqIu/kr7w4cF0rKvZxWPsBRqYjH +5HrK8CrQ0+YvUHXiu7IaACLGvKXY4Tqa3HQyvEtzLWJ4HhOrGx8F +-----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tdir/bad_server.key b/testdata/ctrl_pipe.tdir/bad_server.key new file mode 100644 index 000000000000..0dbb134b5be7 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/bad_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC9hurNHBtB7QFEuPJOnCylUWUF2/US3v9yQQQXnstuXMQXRaq1 +1uviLmwaGurV9tngX59HITsBT74NQrtFKfEDLViLrm2arAM9Ozsn4tnv30HXPRDj +UOc1M05Q7UzjaSrOv+TkPEqyhtUyaP1DYo0bcmbxtSkYc2ZEWCwhPklUwQIDAQAB +AoGATjzZxN4ramWaNnJapJTX4U7eczK/0pB3xwSL2exVcjOdRzYdKH+WVIJxYb1m +3/jNLFCNAeH356yxeevoPr73nG75YJ9I1ZWQWTnS3SDK6JD1+3pmAD0bQWFoitpf +FoSH9H4X5gFB5vCZ99YVoYH1UXWPcgvUHwxz0voImt6lCKECQQD4YQ4A3M0+Ki8v +Hl+5FKULnS0UtBkweCvkF/X1zZRjjYr6hLnqldFkkgTBKWe17pUXX0nwRMbP1YZX +i+vDq5JNAkEAw1eYsmC0nVAMawo57N6LYavGv/n5u1cvpTpKDtn4cXH0Uqq13Kyu +2FUTzan2NhCEK78UzbWaeewBJmxYda1+RQJAdShKk6uTAEyjnwUjv8h2JWlJN2fQ +LeWxRlDrCruiz+aW9J4gl/99GoQpy/c83TshhjnDRZsbcDNWv/rXBZ/rTQJAFQva +CtX6f7yBKgM3DHtJvyM3zbVMH9Ab9QxbsE/xwZ9KeKGl6Hm+eNZpxM3cFiUfaGs0 +/ZjkZOB1m0MvILaplQJAXC3PJ/E+87banGZRJl5qtS6/HoX5lH9TPkL8Essy7ANO +2BT2OTQawD1A+VKIrQHXs085Of8tQUfrfHHt7s3Kqg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/bad_server.pem b/testdata/ctrl_pipe.tdir/bad_server.pem new file mode 100644 index 000000000000..983247ac73bd --- /dev/null +++ b/testdata/ctrl_pipe.tdir/bad_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQCDugnhq8B6LzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkyNjEyMjQ0M1oXDTI4MDYxMzEyMjQ0M1owEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvYbqzRwbQe0B +RLjyTpwspVFlBdv1Et7/ckEEF57LblzEF0Wqtdbr4i5sGhrq1fbZ4F+fRyE7AU++ +DUK7RSnxAy1Yi65tmqwDPTs7J+LZ799B1z0Q41DnNTNOUO1M42kqzr/k5DxKsobV +Mmj9Q2KNG3Jm8bUpGHNmRFgsIT5JVMECAwEAATANBgkqhkiG9w0BAQUFAAOBgQCy +zGMW35/9xXoEWsuLFWUOaEKVq5DXuXtXbcMpDW6k2ELoraa305vh7Zwhj5JSqfcm +O0xyqIzXvz/cYdyOTgEkdMDZ/EvQsxKTwvj6eA4614yB1r3Ju5eZd4Gpo6BHhSpu +oqsrr0duJ+JOANTyaBplIxM1sjHbR4FGtmrFknBYBQ== +-----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.conf b/testdata/ctrl_pipe.tdir/ctrl_pipe.conf new file mode 100644 index 000000000000..d7c68197ce53 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.conf @@ -0,0 +1,23 @@ +server: + verbosity: 4 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +remote-control: + control-enable: yes + control-interface: @PATH@/controlpipe.@PID@ + control-use-cert: no + #server-key-file: "unbound_server.key" + #server-cert-file: "unbound_server.pem" + #control-key-file: "unbound_control.key" + #control-cert-file: "unbound_control.pem" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.dsc b/testdata/ctrl_pipe.tdir/ctrl_pipe.dsc new file mode 100644 index 000000000000..c618f1d67313 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.dsc @@ -0,0 +1,16 @@ +BaseName: ctrl_pipe +Version: 1.0 +Description: unix pipe test unbound-control +CreationDate: Fri 16 Jan 13:25:48 CET 2015 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: ctrl_pipe.pre +Post: ctrl_pipe.post +Test: ctrl_pipe.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.post b/testdata/ctrl_pipe.tdir/ctrl_pipe.post new file mode 100644 index 000000000000..5e3cc6dacc52 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.post @@ -0,0 +1,15 @@ +# #-- ctrl_pipe.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +# it was stopped with unbound-control (if the test succeeded) +kill $UNBOUND_PID >/dev/null 2>&1 +kill $UNBOUND_PID >/dev/null 2>&1 + +rm -f $CONTROL_PATH/controlpipe.$CONTROL_PID +exit 0 diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.pre b/testdata/ctrl_pipe.tdir/ctrl_pipe.pre new file mode 100644 index 000000000000..e9f2124b1880 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.pre @@ -0,0 +1,35 @@ +# #-- ctrl_pipe.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT ctrl_pipe.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +CONTROL_PATH=/tmp +CONTROL_PID=$$ +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's?@PATH\@?'$CONTROL_PATH'?' -e 's/@PID@/'$CONTROL_PID'/' < ctrl_pipe.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test +echo "CONTROL_PATH=$CONTROL_PATH" >> .tpkg.var.test +echo "CONTROL_PID=$CONTROL_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.test b/testdata/ctrl_pipe.tdir/ctrl_pipe.test new file mode 100644 index 000000000000..70dfdcac47f0 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.test @@ -0,0 +1,61 @@ +# #-- ctrl_pipe.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# exit value is 1 on usage +$PRE/unbound-control -c ub.conf status +if test $? -ne 0; then + echo "wrong exit value." + cat fwd.log + cat unbound.log + exit 1 +else + echo "exit value: OK" +fi +$PRE/unbound-control -c ub.conf local_data froob.example.net A 192.0.2.1 +if test $? -ne 0; then + echo "wrong exit value." + cat fwd.log + cat unbound.log + exit 1 +else + echo "exit value: OK" +fi + + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> dig froob.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT froob.example.net. | tee outfile +echo "> check answer" +if grep "192.0.2.1" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/ctrl_pipe.tdir/ctrl_pipe.testns b/testdata/ctrl_pipe.tdir/ctrl_pipe.testns new file mode 100644 index 000000000000..0c911ca5b30e --- /dev/null +++ b/testdata/ctrl_pipe.tdir/ctrl_pipe.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/ctrl_pipe.tdir/unbound_control.key b/testdata/ctrl_pipe.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/unbound_control.pem b/testdata/ctrl_pipe.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/ctrl_pipe.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tdir/unbound_server.key b/testdata/ctrl_pipe.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/ctrl_pipe.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/ctrl_pipe.tdir/unbound_server.pem b/testdata/ctrl_pipe.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/ctrl_pipe.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/ctrl_pipe.tpkg b/testdata/ctrl_pipe.tpkg deleted file mode 100644 index 877fcf9010d9a442ac161b59fd79e4c509a2b737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6451 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 IuQ)jW5AM-KU;qFB diff --git a/testdata/dnscrypt_cert.tdir/1.cert b/testdata/dnscrypt_cert.tdir/1.cert new file mode 100644 index 0000000000000000000000000000000000000000..fbc529bfa3abc64f84dcde8b7b41c48375059d29 GIT binary patch literal 124 zcmZ?q3wCB;WMI$^4_>YA@9W0=!HOrL)J1l346k%r+{*9ITNvN5oV_a(_1U)|(a%KU zO3p_64?2x$GLs#%b_AcTHQbQ;XrGlJxBp!B=wh?NX$>m{yiAi_-hQ(BWxyJGdf}v& WR?VzpJ$;yb_&$?YARIYABMSg@x-xbE literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert.tdir/1.key b/testdata/dnscrypt_cert.tdir/1.key new file mode 100644 index 000000000000..165262c86e53 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/1.key @@ -0,0 +1 @@ +®öÝìK¬‡#‘€4ùsŽ pèÖôÁæÀx!¹»AŠ"mM \ No newline at end of file diff --git a/testdata/dnscrypt_cert.tdir/1_chacha.cert b/testdata/dnscrypt_cert.tdir/1_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..3da5c612d06020c86edda3d99a31d9d44c20cd26 GIT binary patch literal 124 zcmZ?q3wCB;VqjRK{Q6Xq>2Kc6nkT;%Z`>at>Uj9aQ{^>>p6yw{<#d9ddA`K_|5h54 zZY=O}n8R$k=uBeKY^nAImXoaS@G?$Vu!{e%^nRn$8(ajoq#n!YsJ>Bb9h_nmH|rs* Zjezr6?cm#vN1*bN3$9y$aOtJnI{=8hINSgL literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert.tdir/1_salsa.cert b/testdata/dnscrypt_cert.tdir/1_salsa.cert new file mode 100644 index 0000000000000000000000000000000000000000..17e447fc339b7e1d19d078e43cdf685cacacc6a6 GIT binary patch literal 124 zcmZ?q3wCB;WMIgAwlO39lENChev9wxW`*9^Gh<>UL+HN?+Y6ln=LrYz-7<~Wd%>L_ zZ)6gh*IiQ-jL1GUW3N=mgDslsmZehtEKG-`_Zyww;3BXk^;kwn^^Icd;1r{{Sr1ul Y1f0)m2j6yt$ww|Y%?ZM#m(F(r0G>)XPXGV_ literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert.tdir/2.cert b/testdata/dnscrypt_cert.tdir/2.cert new file mode 100644 index 0000000000000000000000000000000000000000..ebf8ac108d141a1d247ec4c08c4bb37ec13508db GIT binary patch literal 124 zcmZ?q3wCB;WMH`6a7UVRBhw!4878b(`7W`zS!C{GU`Yy{(A$`lwt07=)whXUtF1YM`(lvI1LnT6eL)A8bEhkvyY#B&;w$kRKT};77xas3 YnoQkTYfxtflaJ6_^a6yV_^)LE07hy#^8f$< literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert.tdir/2.key b/testdata/dnscrypt_cert.tdir/2.key new file mode 100644 index 000000000000..c299f550ae95 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/2.key @@ -0,0 +1 @@ +m7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñ \ No newline at end of file diff --git a/testdata/dnscrypt_cert.tdir/2_chacha.cert b/testdata/dnscrypt_cert.tdir/2_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..ed4ec26065a60f958ac8797b0515f692e2561152 GIT binary patch literal 124 zcmZ?q3wCB;VqjQp_UOOX7bc&L>5}pFB|+1_1)bhB^9Ng}QrFrVcYU1&Gx)jI?6{M# z{^oz3MM9f&Q`o;{8!&rDpDmZtJmbW)kn8K`@cnzEZd|I6JoA0+Vn2LPf}JkrbK?xa|s(C2#RraymOa5q+ zm`UrFB~;fg48Qo~I@8&j^IF`CRMuaLX8Za%eE;648<#31&wO9|xTH&HQQeHcm*uNs Ym~u@y{yi{($ww|Y%?ZM#m(F(r03OOaw*UYD literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.conf b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.conf new file mode 100644 index 000000000000..355d4ff13595 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.conf @@ -0,0 +1,26 @@ +server: + verbosity: 2 + # num-threads: 1 + port: @PORT@ + interface: 0.0.0.0 + interface: 0.0.0.0@@DNSCRYPT_PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + +dnscrypt: + dnscrypt-enable: yes + dnscrypt-port: @DNSCRYPT_PORT@ + dnscrypt-provider: 2.dnscrypt-cert.example.com. + dnscrypt-secret-key: 1.key + dnscrypt-secret-key: 2.key + dnscrypt-provider-cert: 1_salsa.cert + dnscrypt-provider-cert: 2_salsa.cert + diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc new file mode 100644 index 000000000000..f0ec882f2b84 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.dsc @@ -0,0 +1,16 @@ +BaseName: dnscrypt_cert +Version: 1.0 +Description: dnscrypt cert retrieval. +CreationDate: Fri Mar 03 10:08:08 CEST 2017 +Maintainer: Emmanuel Bretelle +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnscrypt_cert.pre +Post: dnscrypt_cert.post +Test: dnscrypt_cert.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post new file mode 100644 index 000000000000..0346d3f84a61 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.post @@ -0,0 +1,16 @@ +# #-- dnscrypt_cert.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre new file mode 100644 index 000000000000..bee9e8ac63ca --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.pre @@ -0,0 +1,38 @@ +# #-- dnscrypt_cert.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +DNSCRYPT_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnscrypt_cert.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ + -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_cert.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test new file mode 100644 index 000000000000..f09753792696 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.test @@ -0,0 +1,108 @@ +# #-- dnscrypt_cert.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + +# do the test + +# Query plain request over DNSCrypt channel get closed +# We use TCP to avoid hanging on waiting for UDP. +# We expect `outfile` to contain no DNS payload +echo "> dig TCP www.example.com. DNSCrypt port" +dig +tcp @127.0.0.1 -p $DNSCRYPT_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "QUESTION SECTION" outfile; then + echo "NOK" + exit 1 +else + echo "OK" +fi + + +# Plaintext query on unbound port works correctly. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# Plaintext query on unbound port works correctly with TCP. +echo "> dig TCP www.example.com." +dig +tcp @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +for opt in '' '+tcp' +do + # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. + # Check that it returns 1.cert. + echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. DNSCrypt plaintext ${opt}" + dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi + + # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. + # Check that it returns 2.cert. + echo "> dig TXT 2.dnscrypt-cert.example.com. 2_salsa.CERT. DNSCrypt plaintext ${opt}" + dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000AX\031\201\243\201LI<-\146]LU\247LY\2376\014K\194$D\151&\008\236\008\220\143We\029\227\030\233\015[4\\\146\174\166`{}\161W\209\228\215\002\205|\207*\011\162$\175\210[\006\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\245\243W\191\189Z\216\210Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "NOK" + exit 1 + fi + + # Certificates are local-data for unbound. We can also retrieve them from unbound + # port. + echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. Unbound ${opt}" + dig ${opt} @127.0.0.1 -p $UNBOUND_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi +done + +exit 0 diff --git a/testdata/dnscrypt_cert.tdir/dnscrypt_cert.testns b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.testns new file mode 100644 index 000000000000..0af820e01deb --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/dnscrypt_cert.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname TCP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/dnscrypt_cert.tdir/precheck.sh b/testdata/dnscrypt_cert.tdir/precheck.sh new file mode 100644 index 000000000000..00fa4bc76067 --- /dev/null +++ b/testdata/dnscrypt_cert.tdir/precheck.sh @@ -0,0 +1,16 @@ +# dnscrypt precheck.sh + +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + +# if no xchacha20 support in unbound; exit +if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then + xchacha20=1 +else + xchacha20=0 +fi diff --git a/testdata/dnscrypt_cert.tpkg b/testdata/dnscrypt_cert.tpkg deleted file mode 100644 index 4263b9347e0879ac5747f06e42be7a4626a35217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2966 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 diff --git a/testdata/dnscrypt_cert_chacha.tdir/1.cert b/testdata/dnscrypt_cert_chacha.tdir/1.cert new file mode 100644 index 0000000000000000000000000000000000000000..fbc529bfa3abc64f84dcde8b7b41c48375059d29 GIT binary patch literal 124 zcmZ?q3wCB;WMI$^4_>YA@9W0=!HOrL)J1l346k%r+{*9ITNvN5oV_a(_1U)|(a%KU zO3p_64?2x$GLs#%b_AcTHQbQ;XrGlJxBp!B=wh?NX$>m{yiAi_-hQ(BWxyJGdf}v& WR?VzpJ$;yb_&$?YARIYABMSg@x-xbE literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert_chacha.tdir/1.key b/testdata/dnscrypt_cert_chacha.tdir/1.key new file mode 100644 index 000000000000..165262c86e53 --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/1.key @@ -0,0 +1 @@ +®öÝìK¬‡#‘€4ùsŽ pèÖôÁæÀx!¹»AŠ"mM \ No newline at end of file diff --git a/testdata/dnscrypt_cert_chacha.tdir/1_chacha.cert b/testdata/dnscrypt_cert_chacha.tdir/1_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..3da5c612d06020c86edda3d99a31d9d44c20cd26 GIT binary patch literal 124 zcmZ?q3wCB;VqjRK{Q6Xq>2Kc6nkT;%Z`>at>Uj9aQ{^>>p6yw{<#d9ddA`K_|5h54 zZY=O}n8R$k=uBeKY^nAImXoaS@G?$Vu!{e%^nRn$8(ajoq#n!YsJ>Bb9h_nmH|rs* Zjezr6?cm#vN1*bN3$9y$aOtJnI{=8hINSgL literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert_chacha.tdir/1_salsa.cert b/testdata/dnscrypt_cert_chacha.tdir/1_salsa.cert new file mode 100644 index 0000000000000000000000000000000000000000..17e447fc339b7e1d19d078e43cdf685cacacc6a6 GIT binary patch literal 124 zcmZ?q3wCB;WMIgAwlO39lENChev9wxW`*9^Gh<>UL+HN?+Y6ln=LrYz-7<~Wd%>L_ zZ)6gh*IiQ-jL1GUW3N=mgDslsmZehtEKG-`_Zyww;3BXk^;kwn^^Icd;1r{{Sr1ul Y1f0)m2j6yt$ww|Y%?ZM#m(F(r0G>)XPXGV_ literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert_chacha.tdir/2.cert b/testdata/dnscrypt_cert_chacha.tdir/2.cert new file mode 100644 index 0000000000000000000000000000000000000000..ebf8ac108d141a1d247ec4c08c4bb37ec13508db GIT binary patch literal 124 zcmZ?q3wCB;WMH`6a7UVRBhw!4878b(`7W`zS!C{GU`Yy{(A$`lwt07=)whXUtF1YM`(lvI1LnT6eL)A8bEhkvyY#B&;w$kRKT};77xas3 YnoQkTYfxtflaJ6_^a6yV_^)LE07hy#^8f$< literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert_chacha.tdir/2.key b/testdata/dnscrypt_cert_chacha.tdir/2.key new file mode 100644 index 000000000000..c299f550ae95 --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/2.key @@ -0,0 +1 @@ +m7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñ \ No newline at end of file diff --git a/testdata/dnscrypt_cert_chacha.tdir/2_chacha.cert b/testdata/dnscrypt_cert_chacha.tdir/2_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..ed4ec26065a60f958ac8797b0515f692e2561152 GIT binary patch literal 124 zcmZ?q3wCB;VqjQp_UOOX7bc&L>5}pFB|+1_1)bhB^9Ng}QrFrVcYU1&Gx)jI?6{M# z{^oz3MM9f&Q`o;{8!&rDpDmZtJmbW)kn8K`@cnzEZd|I6JoA0+Vn2LPf}JkrbK?xa|s(C2#RraymOa5q+ zm`UrFB~;fg48Qo~I@8&j^IF`CRMuaLX8Za%eE;648<#31&wO9|xTH&HQQeHcm*uNs Ym~u@y{yi{($ww|Y%?ZM#m(F(r03OOaw*UYD literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.conf b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.conf new file mode 100644 index 000000000000..44b0ca880c6b --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.conf @@ -0,0 +1,27 @@ +server: + verbosity: 2 + # num-threads: 1 + port: @PORT@ + interface: 0.0.0.0 + interface: 0.0.0.0@@DNSCRYPT_PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + +dnscrypt: + dnscrypt-enable: yes + dnscrypt-port: @DNSCRYPT_PORT@ + dnscrypt-provider: 2.dnscrypt-cert.example.com. + dnscrypt-secret-key: 1.key + dnscrypt-secret-key: 2.key + dnscrypt-provider-cert: 1_salsa.cert + dnscrypt-provider-cert: 2_chacha.cert + dnscrypt-provider-cert: 2_salsa.cert + diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.dsc b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.dsc new file mode 100644 index 000000000000..a5ed1da0da2d --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.dsc @@ -0,0 +1,16 @@ +BaseName: dnscrypt_cert_chacha +Version: 1.0 +Description: dnscrypt cert retrieval. +CreationDate: Fri Mar 03 10:08:08 CEST 2017 +Maintainer: Emmanuel Bretelle +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnscrypt_cert_chacha.pre +Post: dnscrypt_cert_chacha.post +Test: dnscrypt_cert_chacha.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post new file mode 100644 index 000000000000..54337df67d55 --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.post @@ -0,0 +1,17 @@ +# #-- dnscrypt_cert_chacha.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + +kill_pid $FWD_PID +if [ $xchacha20 -ne 0 ]; then + kill_pid $UNBOUND_PID +fi diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre new file mode 100644 index 000000000000..c77290a8ab7d --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.pre @@ -0,0 +1,43 @@ +# #-- dnscrypt_cert_chacha.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +DNSCRYPT_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnscrypt_cert_chacha.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ + -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_cert_chacha.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +if [ $xchacha20 -eq 0 ]; then + # no xchacha20 support, we expect unbound to exit with an error message. + wait_server_up unbound.log "Certificate for XChacha20 but libsodium does not support it" +else + wait_unbound_up unbound.log +fi + diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test new file mode 100644 index 000000000000..4ef6942be6fb --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.test @@ -0,0 +1,130 @@ +# #-- dnscrypt_cert_chacha.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# Check if we can run the test. +. ./precheck.sh + +# do the test + +if [ $xchacha20 -eq 0 ]; then + # Unbound would exit before we can attempt any tests. + echo "OK" + exit 0 +fi + +# Query plain request over DNSCrypt channel get closed +# We use TCP to avoid hanging on waiting for UDP. +# We expect `outfile` to contain no DNS payload +echo "> dig TCP www.example.com. DNSCrypt port" +dig +tcp @127.0.0.1 -p $DNSCRYPT_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "QUESTION SECTION" outfile; then + echo "NOK" + exit 1 +else + echo "OK" +fi + + +# Plaintext query on unbound port works correctly. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# Plaintext query on unbound port works correctly with TCP. +echo "> dig TCP www.example.com." +dig +tcp @127.0.0.1 -p $UNBOUND_PORT www.example.com. A | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +for opt in '' '+tcp' +do + # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. + # Check that it returns 1.cert. + echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. DNSCrypt plaintext ${opt}" + dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi + + # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. + # Check that it returns 2.cert. + echo "> dig TXT 2.dnscrypt-cert.example.com. 2_salsa.CERT. DNSCrypt plaintext ${opt}" + dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000AX\031\201\243\201LI<-\146]LU\247LY\2376\014K\194$D\151&\008\236\008\220\143We\029\227\030\233\015[4\\\146\174\166`{}\161W\209\228\215\002\205|\207*\011\162$\175\210[\006\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\245\243W\191\189Z\216\210Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "NOK" + exit 1 + fi + + # Plaintext query on dnscrypt port returns cert when asking for providername/TXT. + # Check that it returns 2_chacha.cert + echo "> dig TXT 2.dnscrypt-cert.example.com. 2_CHACHA.CERT. DNSCrypt plaintext ${opt}" + dig ${opt} @127.0.0.1 -p $DNSCRYPT_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + grep -F 'DNSC\000\002\000\000\1716\226\255*\244\002L\177g\025_\127tR\151\246R\203\178\153\248\006\137\"\138\173|G/,\160\152\015\010\172\184\220`\175\217\255,\162\018\178-d\007\246k0\003I[\205w\026)\204B\002\161\010\245\243W\191\189Z\216\210x\025\204\247\173\227t\138\018\162~\152\253\211\031z\\\002m5\008\254\2244\246\243W\191\189Z\216\210Y\160\2158Y\160\2158u\210\219\184' outfile + cert_found=$? + if [ \( $cert_found -eq 0 -a $xchacha20 -eq 1 \) -o \( $cert_found -ne 0 -a $xchacha20 -eq 0 \) ]; then + echo "OK" + else + echo "Not OK" + exit 1 + fi + + # Certificates are local-data for unbound. We can also retrieve them from unbound + # port. + echo "> dig TXT 2.dnscrypt-cert.example.com. 1_salsa.CERT. Unbound ${opt}" + dig ${opt} @127.0.0.1 -p $UNBOUND_PORT 2.dnscrypt-cert.example.com. TXT | tee outfile + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "> check answer" + if grep -F 'DNSC\000\001\000\000i\230\177hg\210 \172>\1438\247\174\154U\216\188\152\145y\000U\254\208\183qBQ\158\019S\189\180\150\013K\160\220\248\236\028`\131\174\214!\017Xk\202\152\189\026T\224\180)'"'"'9u\026\143\004\002\195\027\1912\203\176D\016\180e\198h\136{\216s;Sd2^\154\225\005<\016C\205+S\219A\195\027\1912\203\176D\016Y\160\203\009Y\160\203\009u\210\207\137' outfile; then + echo "OK" + else + echo "Not OK" + exit 1 + fi +done + +exit 0 diff --git a/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.testns b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.testns new file mode 100644 index 000000000000..0af820e01deb --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/dnscrypt_cert_chacha.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname TCP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/dnscrypt_cert_chacha.tdir/precheck.sh b/testdata/dnscrypt_cert_chacha.tdir/precheck.sh new file mode 100644 index 000000000000..00fa4bc76067 --- /dev/null +++ b/testdata/dnscrypt_cert_chacha.tdir/precheck.sh @@ -0,0 +1,16 @@ +# dnscrypt precheck.sh + +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + +# if no xchacha20 support in unbound; exit +if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then + xchacha20=1 +else + xchacha20=0 +fi diff --git a/testdata/dnscrypt_cert_chacha.tpkg b/testdata/dnscrypt_cert_chacha.tpkg deleted file mode 100644 index 4df461f03eac4bad45150065d8bc957dc9c6ae47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3413 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 WR?VzpJ$;yb_&$?YARIYABMSg@x-xbE literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries.tdir/1.key b/testdata/dnscrypt_queries.tdir/1.key new file mode 100644 index 000000000000..165262c86e53 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/1.key @@ -0,0 +1 @@ +®öÝìK¬‡#‘€4ùsŽ pèÖôÁæÀx!¹»AŠ"mM \ No newline at end of file diff --git a/testdata/dnscrypt_queries.tdir/1_chacha.cert b/testdata/dnscrypt_queries.tdir/1_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..3da5c612d06020c86edda3d99a31d9d44c20cd26 GIT binary patch literal 124 zcmZ?q3wCB;VqjRK{Q6Xq>2Kc6nkT;%Z`>at>Uj9aQ{^>>p6yw{<#d9ddA`K_|5h54 zZY=O}n8R$k=uBeKY^nAImXoaS@G?$Vu!{e%^nRn$8(ajoq#n!YsJ>Bb9h_nmH|rs* Zjezr6?cm#vN1*bN3$9y$aOtJnI{=8hINSgL literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries.tdir/1_salsa.cert b/testdata/dnscrypt_queries.tdir/1_salsa.cert new file mode 100644 index 0000000000000000000000000000000000000000..17e447fc339b7e1d19d078e43cdf685cacacc6a6 GIT binary patch literal 124 zcmZ?q3wCB;WMIgAwlO39lENChev9wxW`*9^Gh<>UL+HN?+Y6ln=LrYz-7<~Wd%>L_ zZ)6gh*IiQ-jL1GUW3N=mgDslsmZehtEKG-`_Zyww;3BXk^;kwn^^Icd;1r{{Sr1ul Y1f0)m2j6yt$ww|Y%?ZM#m(F(r0G>)XPXGV_ literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries.tdir/2.cert b/testdata/dnscrypt_queries.tdir/2.cert new file mode 100644 index 0000000000000000000000000000000000000000..ebf8ac108d141a1d247ec4c08c4bb37ec13508db GIT binary patch literal 124 zcmZ?q3wCB;WMH`6a7UVRBhw!4878b(`7W`zS!C{GU`Yy{(A$`lwt07=)whXUtF1YM`(lvI1LnT6eL)A8bEhkvyY#B&;w$kRKT};77xas3 YnoQkTYfxtflaJ6_^a6yV_^)LE07hy#^8f$< literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries.tdir/2.key b/testdata/dnscrypt_queries.tdir/2.key new file mode 100644 index 000000000000..c299f550ae95 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/2.key @@ -0,0 +1 @@ +m7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñ \ No newline at end of file diff --git a/testdata/dnscrypt_queries.tdir/2_chacha.cert b/testdata/dnscrypt_queries.tdir/2_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..ed4ec26065a60f958ac8797b0515f692e2561152 GIT binary patch literal 124 zcmZ?q3wCB;VqjQp_UOOX7bc&L>5}pFB|+1_1)bhB^9Ng}QrFrVcYU1&Gx)jI?6{M# z{^oz3MM9f&Q`o;{8!&rDpDmZtJmbW)kn8K`@cnzEZd|I6JoA0+Vn2LPf}JkrbK?xa|s(C2#RraymOa5q+ zm`UrFB~;fg48Qo~I@8&j^IF`CRMuaLX8Za%eE;648<#31&wO9|xTH&HQQeHcm*uNs Ym~u@y{yi{($ww|Y%?ZM#m(F(r03OOaw*UYD literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.conf b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.conf new file mode 100644 index 000000000000..355d4ff13595 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.conf @@ -0,0 +1,26 @@ +server: + verbosity: 2 + # num-threads: 1 + port: @PORT@ + interface: 0.0.0.0 + interface: 0.0.0.0@@DNSCRYPT_PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + +dnscrypt: + dnscrypt-enable: yes + dnscrypt-port: @DNSCRYPT_PORT@ + dnscrypt-provider: 2.dnscrypt-cert.example.com. + dnscrypt-secret-key: 1.key + dnscrypt-secret-key: 2.key + dnscrypt-provider-cert: 1_salsa.cert + dnscrypt-provider-cert: 2_salsa.cert + diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.dsc b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.dsc new file mode 100644 index 000000000000..e1e653e57117 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.dsc @@ -0,0 +1,16 @@ +BaseName: dnscrypt_queries +Version: 1.0 +Description: dnscrypt queries. +CreationDate: Fri Mar 03 10:08:08 CEST 2017 +Maintainer: Emmanuel Bretelle +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnscrypt_queries.pre +Post: dnscrypt_queries.post +Test: dnscrypt_queries.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.post b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.post new file mode 100644 index 000000000000..b61480616892 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.post @@ -0,0 +1,20 @@ +# #-- dnscrypt_queries.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +kill_pid $PROXY_PID diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.pre b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.pre new file mode 100644 index 000000000000..288a66541a34 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.pre @@ -0,0 +1,53 @@ +# #-- dnscrypt_queries.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +DNSCRYPT_PORT=$(($RND_PORT + 2)) +PROXY_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test +echo "PROXY_PORT=$PROXY_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnscrypt_queries.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +dnscrypt-proxy --local-address=127.0.0.1:${PROXY_PORT} \ + --resolver-address=127.0.0.1:${DNSCRYPT_PORT} \ + --provider-name=2.dnscrypt-cert.example.com \ + --provider-key=B85F:41A1:4F23:F7DB:C866:F397:CC6F:44B6:5F9D:65C5:B629:7C27:5403:A6E9:DCF2:4F9D \ + -m 32 \ + >dnscryptproxy.log 2>&1 & +PROXY_PID=$! +echo "PROXY_PID=$PROXY_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ + -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_queries.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log +wait_server_up dnscryptproxy.log "Proxying from" diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.test b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.test new file mode 100644 index 000000000000..5614a444da05 --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.test @@ -0,0 +1,107 @@ +# #-- dnscrypt_queries.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + + +# do the test +for opt in '' '+tcp' +do + echo "> do queries ${opt}" + dig @127.0.0.1 ${opt} -p $PROXY_PORT www1.example.com. >outfile1 & + digpid1=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www2.example.com. >outfile2 & + digpid2=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www3.example.com. >outfile3 & + digpid3=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www4.example.com. >outfile4 & + digpid4=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www5.example.com. >outfile5 & + digpid5=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www6.example.com. >outfile6 & + digpid6=$! + sleep 1 + kill -9 $digpid1 + kill -9 $digpid2 + kill -9 $digpid3 + kill -9 $digpid4 + kill -9 $digpid5 + kill -9 $digpid6 + + echo "> cat outfile1" + cat outfile1 + echo "> cat outfile2" + cat outfile2 + echo "> cat outfile3" + cat outfile3 + echo "> cat outfile4" + cat outfile4 + echo "> cat outfile5" + cat outfile5 + echo "> cat outfile6" + cat outfile6 + echo "> cat logfiles" + cat fwd.log + cat unbound.log + + echo "> check for ID bit collisions" + grep "pending reply" unbound.log > ids + numsend=`cat ids | wc -l` + cat ids | awk '{print $8};' | sort -u > ids2 + numuniq=`cat ids2 | wc -l` + if test $numuniq -ne $numsend; then + echo "got a ID number clash. could not do test, sorry" + exit 0 + fi + + echo "> check answers for queries" + if grep "10.20.30.40" outfile1; then + echo "1 is OK" + else + echo "1 is not OK" + exit 1 + fi + if grep "10.20.30.50" outfile2; then + echo "2 is OK" + else + echo "2 is not OK" + exit 1 + fi + if grep "10.20.30.60" outfile3; then + echo "3 is OK" + else + echo "3 is not OK" + exit 1 + fi + if grep "10.20.30.70" outfile4; then + echo "4 is OK" + else + echo "4 is not OK" + exit 1 + fi + if grep "10.20.30.80" outfile5; then + echo "5 is OK" + else + echo "5 is not OK" + exit 1 + fi + if grep "10.20.30.90" outfile6; then + echo "6 is OK" + else + echo "6 is not OK" + exit 1 + fi +done + +exit 0 diff --git a/testdata/dnscrypt_queries.tdir/dnscrypt_queries.testns b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.testns new file mode 100644 index 000000000000..f03c15f764ca --- /dev/null +++ b/testdata/dnscrypt_queries.tdir/dnscrypt_queries.testns @@ -0,0 +1,63 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.70 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.80 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.90 +ENTRY_END diff --git a/testdata/dnscrypt_queries.tpkg b/testdata/dnscrypt_queries.tpkg deleted file mode 100644 index c856303cd284570a902cd36e608d52666e65f9cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667 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 Zjezr6?cm#vN1*bN3$9y$aOtJnI{=8hINSgL literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries_chacha.tdir/1_salsa.cert b/testdata/dnscrypt_queries_chacha.tdir/1_salsa.cert new file mode 100644 index 0000000000000000000000000000000000000000..17e447fc339b7e1d19d078e43cdf685cacacc6a6 GIT binary patch literal 124 zcmZ?q3wCB;WMIgAwlO39lENChev9wxW`*9^Gh<>UL+HN?+Y6ln=LrYz-7<~Wd%>L_ zZ)6gh*IiQ-jL1GUW3N=mgDslsmZehtEKG-`_Zyww;3BXk^;kwn^^Icd;1r{{Sr1ul Y1f0)m2j6yt$ww|Y%?ZM#m(F(r0G>)XPXGV_ literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries_chacha.tdir/2.key b/testdata/dnscrypt_queries_chacha.tdir/2.key new file mode 100644 index 000000000000..c299f550ae95 --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/2.key @@ -0,0 +1 @@ +m7Ÿñâƒx;‘%׸õé*•ÜR¯äÓ¯¹mDªñ \ No newline at end of file diff --git a/testdata/dnscrypt_queries_chacha.tdir/2_chacha.cert b/testdata/dnscrypt_queries_chacha.tdir/2_chacha.cert new file mode 100644 index 0000000000000000000000000000000000000000..ed4ec26065a60f958ac8797b0515f692e2561152 GIT binary patch literal 124 zcmZ?q3wCB;VqjQp_UOOX7bc&L>5}pFB|+1_1)bhB^9Ng}QrFrVcYU1&Gx)jI?6{M# z{^oz3MM9f&Q`o;{8!&rDpDmZtJmbW)kn8K`@cnzEZd|I6JoA0+Vn2LPf}JkrbK?xa|s(C2#RraymOa5q+ zm`UrFB~;fg48Qo~I@8&j^IF`CRMuaLX8Za%eE;648<#31&wO9|xTH&HQQeHcm*uNs Ym~u@y{yi{($ww|Y%?ZM#m(F(r03OOaw*UYD literal 0 HcmV?d00001 diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.conf b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.conf new file mode 100644 index 000000000000..9e269ba60ce3 --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.conf @@ -0,0 +1,24 @@ +server: + verbosity: 2 + # num-threads: 1 + port: @PORT@ + interface: 0.0.0.0 + interface: 0.0.0.0@@DNSCRYPT_PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + +dnscrypt: + dnscrypt-enable: yes + dnscrypt-port: @DNSCRYPT_PORT@ + dnscrypt-provider: 2.dnscrypt-cert.example.com. + dnscrypt-secret-key: 2.key + dnscrypt-provider-cert: 2_salsa.cert + dnscrypt-provider-cert: 2_chacha.cert diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.dsc b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.dsc new file mode 100644 index 000000000000..372126bc3e41 --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.dsc @@ -0,0 +1,16 @@ +BaseName: dnscrypt_queries_chacha +Version: 1.0 +Description: dnscrypt queries using xchacha +CreationDate: Thu Jun 01 10:08:08 CEST 2017 +Maintainer: Emmanuel Bretelle +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: dnscrypt_queries_chacha.pre +Post: dnscrypt_queries_chacha.post +Test: dnscrypt_queries_chacha.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.post b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.post new file mode 100644 index 000000000000..1ca6a7e3f1de --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.post @@ -0,0 +1,17 @@ +# #-- dnscrypt_queries_chacha.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +PRE="../.." +. ../common.sh + +# Check if we can run the test. +. ./precheck.sh + + +kill_pid $FWD_PID +kill_pid $UNBOUND_PID +kill_pid $PROXY_PID diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.pre b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.pre new file mode 100644 index 000000000000..6474c540dd6e --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.pre @@ -0,0 +1,52 @@ +# #-- dnscrypt_queries_chacha.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# Check if we can run the test. +. ./precheck.sh + +get_random_port 4 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +DNSCRYPT_PORT=$(($RND_PORT + 2)) +PROXY_PORT=$(($RND_PORT + 3)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "DNSCRYPT_PORT=$DNSCRYPT_PORT" >> .tpkg.var.test +echo "PROXY_PORT=$PROXY_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT dnscrypt_queries_chacha.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +dnscrypt-proxy --local-address=127.0.0.1:${PROXY_PORT} \ + --resolver-address=127.0.0.1:${DNSCRYPT_PORT} \ + --provider-name=2.dnscrypt-cert.example.com \ + --provider-key=C352:1F20:F2D2:FD65:B5F4:7BF6:6C1A:88C1:4BCB:80CE:1E3A:3572:5CB1:7D4B:12D3:E783 \ + -m 32 \ + >dnscryptproxy.log 2>&1 & +PROXY_PID=$! +echo "PROXY_PID=$PROXY_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' \ + -e 's/@DNSCRYPT_PORT\@/'$DNSCRYPT_PORT'/' < dnscrypt_queries_chacha.conf > ub.conf +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log +wait_server_up dnscryptproxy.log "Proxying from" +if ! grep 'Using version 2.0 of the DNSCrypt protocol' dnscryptproxy.log; then + echo "Failed to select xchacha cert" + exit 1 +fi diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.test b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.test new file mode 100644 index 000000000000..455c506a0d49 --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.test @@ -0,0 +1,101 @@ +# #-- dnscrypt_queries_chacha.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# Check if we can run the test. +. ./precheck.sh + +# do the test +for opt in '' '+tcp' +do + echo "> do queries ${opt}" + dig @127.0.0.1 ${opt} -p $PROXY_PORT www1.example.com. >outfile1 & + digpid1=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www2.example.com. >outfile2 & + digpid2=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www3.example.com. >outfile3 & + digpid3=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www4.example.com. >outfile4 & + digpid4=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www5.example.com. >outfile5 & + digpid5=$! + dig @127.0.0.1 ${opt} -p $PROXY_PORT www6.example.com. >outfile6 & + digpid6=$! + sleep 1 + kill -9 $digpid1 + kill -9 $digpid2 + kill -9 $digpid3 + kill -9 $digpid4 + kill -9 $digpid5 + kill -9 $digpid6 + + echo "> cat outfile1" + cat outfile1 + echo "> cat outfile2" + cat outfile2 + echo "> cat outfile3" + cat outfile3 + echo "> cat outfile4" + cat outfile4 + echo "> cat outfile5" + cat outfile5 + echo "> cat outfile6" + cat outfile6 + echo "> cat logfiles" + cat fwd.log + cat unbound.log + + echo "> check for ID bit collisions" + grep "pending reply" unbound.log > ids + numsend=`cat ids | wc -l` + cat ids | awk '{print $8};' | sort -u > ids2 + numuniq=`cat ids2 | wc -l` + if test $numuniq -ne $numsend; then + echo "got a ID number clash. could not do test, sorry" + exit 0 + fi + + echo "> check answers for queries" + if grep "10.20.30.40" outfile1; then + echo "1 is OK" + else + echo "1 is not OK" + exit 1 + fi + if grep "10.20.30.50" outfile2; then + echo "2 is OK" + else + echo "2 is not OK" + exit 1 + fi + if grep "10.20.30.60" outfile3; then + echo "3 is OK" + else + echo "3 is not OK" + exit 1 + fi + if grep "10.20.30.70" outfile4; then + echo "4 is OK" + else + echo "4 is not OK" + exit 1 + fi + if grep "10.20.30.80" outfile5; then + echo "5 is OK" + else + echo "5 is not OK" + exit 1 + fi + if grep "10.20.30.90" outfile6; then + echo "6 is OK" + else + echo "6 is not OK" + exit 1 + fi +done + +exit 0 diff --git a/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.testns b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.testns new file mode 100644 index 000000000000..f03c15f764ca --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/dnscrypt_queries_chacha.testns @@ -0,0 +1,63 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.70 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.80 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.90 +ENTRY_END diff --git a/testdata/dnscrypt_queries_chacha.tdir/precheck.sh b/testdata/dnscrypt_queries_chacha.tdir/precheck.sh new file mode 100644 index 000000000000..8288d9516eb1 --- /dev/null +++ b/testdata/dnscrypt_queries_chacha.tdir/precheck.sh @@ -0,0 +1,27 @@ +# dnscrypt precheck.sh + +# if no dnscrypt; exit +if grep "define USE_DNSCRYPT 1" $PRE/config.h; then + echo "have dnscrypt" +else + echo "no dnscrypt" + exit 0 +fi + +# if no xchacha20 support in unbound; exit +if grep "define USE_DNSCRYPT_XCHACHA20 1" $PRE/config.h; then + echo "have xchacha20" + xchacha20=1 +else + echo "no xchacha20" + xchacha20=0 + exit 0 +fi + +# if dnscrypt-proxy does not support xchacha20; exit +if (dnscrypt-proxy -h 2>&1 | grep -q 'XChaCha20-Poly1305 cipher: present'); then + echo "dnscrypt-proxy has xchacha20" +else + echo "dnscrypt-proxy does not have xchacha20" + exit 0 +fi diff --git a/testdata/dnscrypt_queries_chacha.tpkg b/testdata/dnscrypt_queries_chacha.tpkg deleted file mode 100644 index 8cb39dc2c2f526d531fad4bcf4b7489ac1552e4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2884 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 diff --git a/testdata/edns_cache.tdir/edns_cache.conf b/testdata/edns_cache.tdir/edns_cache.conf new file mode 100644 index 000000000000..101b9751ffc6 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.conf @@ -0,0 +1,21 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: ::1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +stub-zone: + name: "example.net" + stub-addr: "127.0.0.1@@STUB2_PORT@" +stub-zone: + name: "example.com" + stub-addr: "127.0.0.1@@STUB2_PORT@" +# a k a root hints +stub-zone: + name: "." + stub-addr: "::1@@STUB1_PORT@" diff --git a/testdata/edns_cache.tdir/edns_cache.dsc b/testdata/edns_cache.tdir/edns_cache.dsc new file mode 100644 index 000000000000..57f47dc0dc3d --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.dsc @@ -0,0 +1,16 @@ +BaseName: edns_cache +Version: 1.0 +Description: Server does not support EDNS and cache this. +CreationDate: Tue Nov 30 12:34:37 CET 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: edns_cache.pre +Post: edns_cache.post +Test: edns_cache.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/edns_cache.tdir/edns_cache.post b/testdata/edns_cache.tdir/edns_cache.post new file mode 100644 index 000000000000..0c3ed4ca7895 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.post @@ -0,0 +1,11 @@ +# #-- edns_cache.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $STUB1_PID +kill_pid $STUB2_PID +kill_pid $UNBOUND_PID diff --git a/testdata/edns_cache.tdir/edns_cache.pre b/testdata/edns_cache.tdir/edns_cache.pre new file mode 100644 index 000000000000..93d521362209 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.pre @@ -0,0 +1,43 @@ +# #-- edns_cache.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 3 +UNBOUND_PORT=$RND_PORT +STUB1_PORT=$(($RND_PORT + 1)) +STUB2_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "STUB1_PORT=$STUB1_PORT" >> .tpkg.var.test +echo "STUB2_PORT=$STUB2_PORT" >> .tpkg.var.test + +# start stub1 +get_ldns_testns +$LDNS_TESTNS -6 -p $STUB1_PORT edns_cache.stub1 >stub1.log 2>&1 & +STUB1_PID=$! +echo "STUB1_PID=$STUB1_PID" >> .tpkg.var.test + +# start stub2 +$LDNS_TESTNS -p $STUB2_PORT edns_cache.stub2 >stub2.log 2>&1 & +STUB2_PID=$! +echo "STUB2_PID=$STUB2_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@STUB1_PORT\@/'$STUB1_PORT'/' -e 's/@STUB2_PORT\@/'$STUB2_PORT'/' < edns_cache.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test + +# wait for stubs to come up +wait_ldns_testns_up stub1.log +wait_ldns_testns_up stub2.log + +# wait for unbound to come up +wait_unbound_up unbound.log + diff --git a/testdata/edns_cache.tdir/edns_cache.stub1 b/testdata/edns_cache.tdir/edns_cache.stub1 new file mode 100644 index 000000000000..23653c3b3d53 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.stub1 @@ -0,0 +1,43 @@ +; nameserver test file +; this is ::1 and the EDNS working server. +$ORIGIN . +$TTL 3600 + +; root prime +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS root.server. +SECTION AUTHORITY +SECTION ADDITIONAL +root.server. IN A 127.0.0.1 +ENTRY_END + +; referral to example.com +ENTRY_BEGIN +MATCH opcode subdomain +REPLY QR NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +example.com. IN A +SECTION AUTHORITY +example.com. IN NS netdns.example.net. +ENTRY_END + +; referral to example.net +ENTRY_BEGIN +MATCH opcode subdomain +REPLY QR NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +example.net. IN A +SECTION AUTHORITY +example.net. IN NS netdns.example.net. +SECTION ADDITIONAL +netdns.example.net. IN A 127.0.0.1 +ENTRY_END + diff --git a/testdata/edns_cache.tdir/edns_cache.stub2 b/testdata/edns_cache.tdir/edns_cache.stub2 new file mode 100644 index 000000000000..f70eb98e7456 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.stub2 @@ -0,0 +1,33 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname noedns +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname noedns +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +netdns.example.net. IN A +SECTION ANSWER +netdns.example.net. IN A 127.0.0.1 +ENTRY_END + +; fail EDNS queries for netdns. +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA FORMERR +ADJUST copy_id +SECTION QUESTION +netdns.example.net. IN A +ENTRY_END + diff --git a/testdata/edns_cache.tdir/edns_cache.test b/testdata/edns_cache.tdir/edns_cache.test new file mode 100644 index 000000000000..53931ded2eb7 --- /dev/null +++ b/testdata/edns_cache.tdir/edns_cache.test @@ -0,0 +1,30 @@ +# #-- edns_cache.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +# notice that we use one stub server on IPv6 ::1 that supports EDNS that +# gives referrals to the other server on IPv4 127.0.0.1 that is nonEDNS. + +PRE="../.." +# do the test +echo "> dig netdns.example.net." +dig @::1 -p $UNBOUND_PORT netdns.example.net. | tee outfile +echo "> dig www.example.com." +dig @::1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat stub1.log" +cat stub1.log +echo "> cat stub2.log" +cat stub2.log +echo "> cat unbound.log" +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/edns_cache.tpkg b/testdata/edns_cache.tpkg deleted file mode 100644 index 63756410856cbb925fbb77896c8f9afbdefe9556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1830 zcmV+>2if=^iwFQs{Zvf=1MOLDbJ|7__E+v#Y_Z2qrh_brw;84J7z1hCI^Y0qCewBp zSvo*9=oGz}xYHlsy#s`h1tcjU6Zak)(B19r?cQmhy_2Zz27Sx4MpUsK|McK%Kt)u` zW&W#G%c>}ArIPra<3Q8OdRePh%4+dI)rwk0J%I98u_lEm2u&a0V9KJ9`kUmaAMC@R z{erHpf1>EIAl%Iue1R*o_0C-XvZ}@FU#jZ3{uSN~>TZVLjQ{!iAHrdw0I6k%LgA1c zLck*5q7aTKOw0gh2kvpI2F{qmbVOZn!jpiv`jq?*g#jqasS>&r%}PEXa{v@Y5=t%j)m)(iL_u_69_x}!0+#J^swEcw4w;{0FcVlw{sfXDIg z(|txiPHQ@*2h0b@jmf|AhfpMOEVnzomq(rX z6`50ksC@P;u7@8%d;XlvNg<ysRHdA(U)Psr9hvvY3+5S7r2A=BK28+z2>>=vG|Ca}>F^EOKoTAsCvs zrgb;;c@4SlG+*X~goV?EXaWDNg(5hcS10EzkJ z^HoB&U^ulC3Xw;6OY#ovM;^rY)Y?|D&?|};KBiUA>v_k7zvO#Q*E`4h{Lg28H)Cwc z|9Dx#{9me;wMw;ADvSMpS(EvHA9$4iMMix}JAgxQS?CBqkfWwl49Hw62nBFe@6k-= z!sYdS1q?%*$pw+eHwXbVF&T*}R5Wz%X#hSQP~SJlg3tKmFg^#Xno6MQRYk?WxjrXA zGhD7rAuCKR4k?Sn&zyPBz{d3B(h!$Lp&!kOH>L^}QJgoNb1QjbOy;31arg(dqJ2>) zQdv^@bUKYikvKPMPRp)Q%Tqv1;d!!Bghx{Ps+9g%D#6<`xg?Rtf+K3(f$0WQ>gS0w zfT2%4$ZM*it4dK-N@{*#=nFp0F3HWhwtvkNIu7Wf++rc{x*Yw8sYN3LhY)e8KIxpX zp8v(#?PQFt{I69O{I9E3mGi%@$>%?N!3%KB37vD-jC^@a^H@R3!hg;PCf{HoMF}pP zGXD;Fc+PhUIcj$8cqJEYe5<)+)ijh*+j4`e$E{Enmd0W?z1L`T@BOl-(YWLnwJVbB!PVDtF_X_7 zX|@`|!Fd|sSs=lV>%9%4TReA~j=S_V+tJzYhlu(Qk9|%Ov9K@0t&|L(id;r|*zONX z?aLo-&^CYOGHdc=_%0Ma-Vwa;BJJ#`Bp%xy05l8QNdl;tZn6GH|o$)O3 zasqYm{J~F0b1k2rT3@w0Z_uGHcjtf2mQN4s`QHw#9gVT={cowNF8E(9m#gCaPq8BT ze;>Fo1KL88FcQyz$ZzPX!(0P2MI{XySia+hqM|!X6gH#$c}D!0WJXZ@m>?90!-GQV zJ~er_h8d#%UPPhA?xCpS-peSKjA9k)%^v8u0U&R18yVt<`Ucp(0`HW%Qo|qTFL!8~ zz8#P{Dj72W!2nWc6OXyn4GmJC*bVAY*AB3LdG(r(J%e2PD{k>uTjZJrp^<*yO?os{ zD;~zwqK~gI8FGc!W)M)@Ag_>(BUJljxNm*@^Ops?8Dm@gW7IF=Un{HP{I6E4GXD30 z+0M@(IsCq5ffHhY=_GduZZs)`BaC1kP#Vc$d{Td4S{PD>fn^@{28efJ=Ol--QwSb{ zF&i4l3nYj46174RuK7F)J2u}|Vqx(N4{NaA8u8=yOomUeE0~CvY*s*iDTqU3VazOZ zJQ9(M%K5>h@HY|wT0QTO*rs4#Az<1za!EekRh=hZy`ASbDZ#DeCn`Av6YlUMo^_0H zhJq};N=h3}-+AI)A?o?oH-UtNgoK2IgoK2IgoK2IgoK2IgoK2IgoK2IgoK2IgoK2I UgoK2I#CL^%0TGldmH> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -v edns_lame.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < edns_lame.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -vvvv -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log diff --git a/testdata/edns_lame.tdir/edns_lame.test b/testdata/edns_lame.tdir/edns_lame.test new file mode 100644 index 000000000000..92d669267402 --- /dev/null +++ b/testdata/edns_lame.tdir/edns_lame.test @@ -0,0 +1,24 @@ +# #-- edns_lame.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/edns_lame.tdir/edns_lame.testns b/testdata/edns_lame.tdir/edns_lame.testns new file mode 100644 index 000000000000..cd248c3b37eb --- /dev/null +++ b/testdata/edns_lame.tdir/edns_lame.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname noedns +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/edns_lame.tpkg b/testdata/edns_lame.tpkg deleted file mode 100644 index 643fe0c6129898ce57b77482f692c0917c94ccd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcmV-k1)=&MiwFRWPN`D>1MOJLHVG30Y8V4AjNV{_Ryz%Wa;S$YQc*KsE;v4|XwuFO~*QNF$3uJ*-yET8`o zp{ey>)j}qsea(UKD3?mx*S}<2tMxBgxc-%*jq7jh%YiS+|9t(A;7HRTz3!lCN8|_u zi@8f78dI1$0$(2P9S%c(LSZ(h0r=60kgc4O-#{CJuAk~rcsJ6qo4y$F2OJ+Kh8}58 z&k|9bd&eA01FCb%e5#4aH}DudU?UoKxW{GzC_}pR#AVYd3v@9icm8BD2z?I<7w?;c z?qzdLbJITW+_dM~Z@p4qN4Dj^C)~Zwu{;0EnEyt_Ffsefrp$k{XlD6;2sw8IZR3Jh zR~SHkrCj(dsDh~*q)CO#{V-CB3&v-dN^sNc!fhNutJ%JW&~fi*glXzeDPWXHgHuQL zZ#og$y-xpl*kaqxpB9q^r7oHE2*^n=mAr2(YdYrW3PsrCGv5hP55Ps51## zXC#MMu89YMcvFRdksN+f)QuE(%Og_YkxJqURuW`F4eH%7XDpicK@&Vsd{ovvrUfk0 zKE{+kXiL0Q#)oq%s{Mt85ZzylL2S(>Esp0Qsmw3EJv-}nl%si)K~y4J?|(Sm+Z?<2 zU)fx{|1m4-{AZW5{6B+K}z-f z`BDqtgZbjcf=Z%w>Ieo4imu*IvXb4NiE17xp?hvMNF zGzur;RP6x2pPinhB5`thlC;mESM^AIm90NQnsPu5;#*Z(Mq#m6sBZ#4##_g|8*!;g zQTqZ`PLr-0{@$a2<|gK#w#J5&K&)Nwt%8wKu2mililo^ax|!pr7HbfP2`!(uEgX^h zb%y?J^8ZWc|3K_#j-C7uF+aKgvnxeV%~pp0hmcnwnbVvF&M{YIcA?X|{OPg{>xWQM z==a}3v1}NGwA%gNhrxLZ`;e=8zwriG=rWJO$LJx%|I#S3H2FP|UaR}|1H9`&y$> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_ancil.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_ancil.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test + +wait_ldns_testns_up fwd.log + +# wait for unbound to come up +# string 'Start of service' in log. +wait_server_up_or_fail unbound.log "start of service" "disable interface-automatic" +if fgrep "disable interface-automatic" unbound.log; then + echo "skip test" + exit 1 +fi + diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.test b/testdata/fwd_ancil.tdir/fwd_ancil.test new file mode 100644 index 000000000000..b90360fb8b4d --- /dev/null +++ b/testdata/fwd_ancil.tdir/fwd_ancil.test @@ -0,0 +1,101 @@ +# #-- fwd_ancil.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +if test `hostname`"" = "dicht.nlnetlabs.nl"; then + echo "In jail, no ::1, skip test" + exit 0 +fi + +if fgrep "disable interface-automatic" unbound.log; then + echo "skip test" + exit 0 +fi + +get_make +(cd $PRE; $MAKE streamtcp) + +# detect platform support first +echo "> streamtcp -n -u -f 127.0.0.1 www.example.com. A IN" +$PRE/streamtcp -n -u -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile +sleep 2 +echo "> check answer" +if ! grep "Please disable interface-automatic" unbound.log; then + echo "OK" +else + echo "No platform support for ancillary data" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK - but ignore test" + exit 0 +fi +rm outfile + + +# do the test +echo "> streamtcp -f 127.0.0.1 www.example.com. A IN" +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +rm outfile + +echo "> streamtcp -f ::1 www.example.com. A IN" +$PRE/streamtcp -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +rm outfile + +echo "> streamtcp -u -f ::1 www.example.com. A IN" +$PRE/streamtcp -u -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +rm outfile + +echo "> streamtcp -u -f 127.0.0.1 www.example.com. A IN" +$PRE/streamtcp -u -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi +rm outfile + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +exit 0 diff --git a/testdata/fwd_ancil.tdir/fwd_ancil.testns b/testdata/fwd_ancil.tdir/fwd_ancil.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/fwd_ancil.tdir/fwd_ancil.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_ancil.tpkg b/testdata/fwd_ancil.tpkg deleted file mode 100644 index 34021180e7a9c2c8ade1ee0fb62ac228e6c6a357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1758 zcmV<41|j($iwFP&cBobW1MOLRbJI8w@4wNfSkexKIqceL65oWQ)6j;aJd%=zW0<>} zpxR1e>R85-3B9=we=9pq>^3d066Qd^J}j@Km9(pUNFL3+Aq`zWFg-us_%^Vty5%$) z__S=NVX3EO*X!wXjt#rE>(uME-Ef*nw`)$bzR~zb^C=+_lEwfVGoDCxjRX?GVzG`1 ztrw%B{&$vdE)PdHHHKwdRx{K0O8wUzd&9OI$7wpdHkPrr(X8Wsxv2?Uho4;kxT^Oo zZjlQ9Kjp%g=Pj^FWfQ_=YRE~|L#5W8WM30mGLhJmpE~nMgspJBc}$SsNwLkWN|l=5ZtB(s-A!_}mD%OM?j)GGp$C zsF@LUnL!iDr&RiG3(lD!73#W72m?2(jCs%k%S?ZEETBQaXO|naTFc52k7qRYjDL8@ zPyq9}m^hidhI(F%B=klpUweOl&`SkSCFFZ6?uKxc{YNpou`xbk|Fv4PvGo6q%>L_6 zUEBW}unC)n0VTZ~#wOVW!IRi!ASVo_RG?_!J<3U0HOwX~1Yd3oRU0$%Cm16z%^g!l zXJZqane!fh!|mHSqZRcy3Q850WXXgCG(PY{NXtm{=_w8wQ6czmHKFDmc%c}o2B9EZ z&knmM!$Id{&^-Yof(5_AR>_*e9#TvU1W?<%ZNu$sWk-h(wr&+Cr3mxF6;qnhGX^T{ z@W<&kBZ7HgFxVD5Y1H{^e`mWShV7m0ygqZwX^VWKs`fW1Cp54J$!S_zh+rO{(jA9e z{gk?A<5*G1aliARs&*|#ge`p8$(tJZ>*kDLFOP5q5iDj|6hnzvcv&e9m&!}D8TCs_ z8YU6UWv}F?s#D|1=P5agbIKrz($&UjKd^n0u9}ZP1%BUU+iK;=!OYla=>T#b@_0DH z9S_CjRmFwgRb@INwa^tox~lALG>%zxeY4^iWwX0vWp-+1-`i>aK)5RYE1}=i7$1rM zb=%p+_}^^QET`6N?q>Nv(sca)_P7}T)A0BMWdJ2NzV>wB#{J(i%TVEx+;KfnvFSc+ zJ#RnlC@;_GRJze!6%jlp@lXa)KqZQF3L=Tpq-5mBi;Q7!*$0dej6{idao~a3Y-X|# zbQ%Q=!`;+`HXL>5@$kBi`=v;|nhpGmOJjg`mxcR)p`dDudASqjo&gQTjKygrxdoXh zj{`<=(|nmkdrzx`1%l=8UA{s-xc^dX2xxo`9+kA3H^*sVWJa!P%0iuJ@ik9?vbVy} z%Rwaco`M0Vi3EQf@|a!LDo!95MXEfWT3#W!E2-)Wl=OA#xl%2eQf$ktS>~=~)~#yZ z=X%M1jVMd$Kv8fjC50CH=`zB`Ka+Hl&lFJdv&!hR&F!ll;{QutW!5Fm7a7le-uF&@ zG&Zie|Kn@R|1HP17x}-F-~a3Ue=WFl|Hs#y{})Ed6aMSQ_~gWYGs~gQu@V{6*yFPh zQbrd}0pI)(aE6KGF!DXfFTe`Ng84lPMjIYQ%v+tf=Byw^fnVVk=}W!oRrc=*_r~_v zN5B6y9rgXMzKiV|wR(2{->7N(UjrWEQL3AM`C90n{DCX=dDsHmw8$Y7ZtO=gB@C3I z;O_OKX5oYsGxz;ejFIAjV4?ly3^Wq;Gi>r znq~b;o>M%?;U9}z;Ke4qG7ro)KK!@gn49;+|6d30g9>@swSN`|)3ko8*FX9lPb9@N3fUSAp22R@ zvIyyP2mRN>haGG~p0@`FkAX)n_ZYmB=Mnx_Oi90U{OmQn=tH{=-Cn2P@AXOh@X5=Q z0k}LmANn3S=^PA>dR=(&vU8#e1P?})qi&_WsA+dkUUm8ldZlpena`rrJ=C8BG&D3c zG&D3cG&D3cG&D3cG&D3cG&D3cG&D3cG&D3cG&D3cG&D3cG=2{J2ePx(> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_bogus.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < fwd_bogus.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log diff --git a/testdata/fwd_bogus.tdir/fwd_bogus.test b/testdata/fwd_bogus.tdir/fwd_bogus.test new file mode 100644 index 000000000000..743b4e66a694 --- /dev/null +++ b/testdata/fwd_bogus.tdir/fwd_bogus.test @@ -0,0 +1,48 @@ +# #-- fwd_bogus.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +# servfail. +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# now check the cache. +$PRE/unbound-control -c ub.conf dump_cache > cachedump +if test $? -ne 0; then + echo "unbound-control failed" + cat cachedump + exit 1 +else + echo "unbound-control ok" +fi + +# bad cache entry looks like this +# msg www.example.com. IN A 32896 1 1252576696 1 1 0 0 +cat cachedump + +ttl=`grep "msg www.example.com" cachedump | awk '{print $7}'` +echo TTL $ttl +# must be smaller than bogus ttl of 60. +if test $ttl -gt 61; then + echo "failed: TTL too big!" + exit 1 +else + echo "TTL OK" +fi + +exit 0 diff --git a/testdata/fwd_bogus.tdir/fwd_bogus.testns b/testdata/fwd_bogus.tdir/fwd_bogus.testns new file mode 100644 index 000000000000..258c0e938f20 --- /dev/null +++ b/testdata/fwd_bogus.tdir/fwd_bogus.testns @@ -0,0 +1,25 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +; give unsigned answers! +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +@ IN DNSKEY +SECTION ANSWER +example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_bogus.tdir/unbound_control.key b/testdata/fwd_bogus.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/fwd_bogus.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/fwd_bogus.tdir/unbound_control.pem b/testdata/fwd_bogus.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/fwd_bogus.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/fwd_bogus.tdir/unbound_server.key b/testdata/fwd_bogus.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/fwd_bogus.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/fwd_bogus.tdir/unbound_server.pem b/testdata/fwd_bogus.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/fwd_bogus.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/fwd_bogus.tpkg b/testdata/fwd_bogus.tpkg deleted file mode 100644 index 3a49d1f7558d8c8739125e7236072a34a73f85cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4091 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 .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_capsid.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_capsid.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_capsid.tdir/fwd_capsid.test b/testdata/fwd_capsid.tdir/fwd_capsid.test new file mode 100644 index 000000000000..8b49691e5fd5 --- /dev/null +++ b/testdata/fwd_capsid.tdir/fwd_capsid.test @@ -0,0 +1,22 @@ +# #-- fwd_capsid.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_capsid.tdir/fwd_capsid.testns b/testdata/fwd_capsid.tdir/fwd_capsid.testns new file mode 100644 index 000000000000..8bb1b9deb22b --- /dev/null +++ b/testdata/fwd_capsid.tdir/fwd_capsid.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_capsid.tpkg b/testdata/fwd_capsid.tpkg deleted file mode 100644 index 3f50639cb21516a181ee4e003a5c076a2c665ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 zcmV-j1)};NiwFQwPpMM?1MOICbJ|7_&R6bNY%yae(~&F*0WE15W5A8uL=cRd$+R6t zmJU!2cgmdzrqdtaJ%MC_UzpAiXPRjJBHi9<_uigIyBaP0q34D&@O3{B$Im{87=}@+ zQ~2ChfdwjbVqyHdX0f3pV4tcv?@>?i!=@{RBR0UT%=Y;8Me+5tHL z$>+kO5KSn|T#2)XPp*JbFr~1VPzFJCBvr4VwREFTGWtMIOe#FTFj**o}V^@o&^D8}$`i;oq)SbNoMroVt=a?u^zm z96)}fLI#}G!PE`XrqUBZ7{!V+E*1zSaG4L@gnHLt+*k%&1(DQAOHfytwcQB)z2ywL zUIb7Dvs$+*b>l~9buI>gEdK*}>jo^sKPu|r3mx9;Exn1C;4e0IF@hv5^fKmRSqIYM zvyd~&qB?2K{5B0K^CjwU?_SesSSLNPF%LaNu=kM9>e~cI26RgsQ$}-sbB4^L9QIr( zsb42&ZZMsr+piP-kKy0rY_y*kJMnK;z_iL0%d%^g_50tpa{NDqNGd)d21x<`UvU{k zh&P)Q4uH*PS~NjKD}0%xfN-T^-GmHq%fCMlS?_}<2o=- z3V5QZ7sVJZ7STBH)r%b)b9Tk&46zvasP`s<^Jry*E(DADNVR;fF&=3j=Tt1UDfisz zB!;tcu7atfs*SkN0>2JRD#>WYPukx|7dWZ4CmmfSJ+AK~Jh6Du(TWq+$#(j;u|?& z%=rW!!L zxbp=3gI+1%F;Od&I``ZNkPwwl7Kv)%V(X}ZxREd+DsCT%6Dya=1rs~`G1c8r;)q$zo1_e`nPKRF^z@-ix)l{s?-H6lEw6^Qh$9%;!gpw>iP3j z3*UqJ;>8-Ln-6ANMQAj(2eNwR)@yQipRHPaJe2WDsGJ2CN{xH!GdWZSOp?-@wsSEY zU^(Sn#MG4d+op0Rp^*@d)i^ZakgUIQyefT{9hFk7Zyp%a%)O?dssbd&nBuTN0*%6v zJdP8e3vf5njzyOfoJi`^{&T4X*QU> zgpK3GRKs5{aRiMF$0lo#`L1)j4jal$fh)?5p|VsgVt-{p~rm+AERZ6|CLkH@ATe$fOmapHo@t3`u%R7G~2&i zUJQ^%!sRgVSJ$|_BNv_4;JoX=yGvv>ydjui70#VPGwo?Q7wMC$={oc1?a f#pRMqF1h5AOD?(Ol1nbR?3RB4iau6e04M+ev%sXJ diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.conf b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.conf new file mode 100644 index 000000000000..dbb2eb8887fc --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.conf @@ -0,0 +1,16 @@ +server: + verbosity: 4 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.dsc b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.dsc new file mode 100644 index 000000000000..3b873458210b --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_capsid_fallback +Version: 1.0 +Description: Forward and do 0x20 fallback. +CreationDate: Mon Oct 6 16:30:15 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_capsid_fallback.pre +Post: fwd_capsid_fallback.post +Test: fwd_capsid_fallback.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.post b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.post new file mode 100644 index 000000000000..81c334a74cc2 --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.post @@ -0,0 +1,10 @@ +# #-- fwd_capsid_fallback.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.pre b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.pre new file mode 100644 index 000000000000..0558bea5e05e --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.pre @@ -0,0 +1,30 @@ +# #-- fwd_capsid_fallback.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_capsid_fallback.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_capsid_fallback.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.test b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.test new file mode 100644 index 000000000000..eba834f14dfd --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.test @@ -0,0 +1,22 @@ +# #-- fwd_capsid_fallback.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.testns b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.testns new file mode 100644 index 000000000000..f0d809e06ca5 --- /dev/null +++ b/testdata/fwd_capsid_fallback.tdir/fwd_capsid_fallback.testns @@ -0,0 +1,15 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +; WEIRD CAPS! ; probably not the query! +WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A +SECTION ANSWER +wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_capsid_fallback.tpkg b/testdata/fwd_capsid_fallback.tpkg deleted file mode 100644 index fed74134cfb41061c2e6ddc8db5f76610471d928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1484 zcmV;-1vB~|iwFQ+PpMM?1MOM=Q`$%r@2~7%@rsPLbCb9U-)`{gh=7$=fg+yMxw~Ov zvOsFcrn{j?=l=M6n-ByKYV{mD_VQG+``+fg{q{b*_Z&=}zHJ54b@~I#^DZs>N_Skb z`{EIaQd%w+0iQ;>l#icfs-6o1!zh|X6I+D>P@_~R(-%;D%t>sbi3}})Q%qLLe&!{W-rOb^uoHd9X1$_+)r2D z*yq7#A;Za+>GkX@3iZZy^|W)+&};luhfK4TsVi^WFQC z)7H0CL>e*%)lI7Bsa~M-Eoijrg#743{10?r|9^;$JN)0E`5XT)(Y*5iyirK~|0!q- zwlobkoi=FN7TE&HC&Fft`;9G$+W=oI5dj5EN6ZH|+>uHu82JOV0qFX!9tKxK9f#@j zH~xa{?L^TUIa--Wlq}dW7I6WtAL9}-T|@!~fhDEu59g*wzR9{BDEK%G8kK2|v;%Z9*$ep(i+vlx%ztisa)Ek?j=$1P8 z8!a-xyA;7}V%WAq@c2;iWR|ENo`{Ydh&mJhl281Iar4TE*;iosa>_)OxC0mp7C?3h zp|XjYJ+)GwWa3xb@3Vw?k|q5X0;}R>*tHviK?W`%QIkGrTubTu=sx&wbARv<8+XNj z1q1Ql%ok0wP%h@9_|GioQ~ZAliX*=Y$>8TDmu@(#K!Ieoz@Ln@a3q-J$O@uD#`SUe z1IuREGs`-~ALIsHgcUeYICwxZh~S!>Nrb5i#%m;l7m3*+7pOCf028>5f+OrCfQB68 z+atkw7>_{}LIsa;&*2)zeOeUrX$uIBl`CWFhHCgFp}9^4W=s-nPc7kSU%Ah4QFBcQ z;+aHZIgUWqVhsley>>MH?6Z#J9!mG|e@EI6vT2l% zc+90ro>ma=YnbnWN$IcT)Iw;%KSUvLgbo*aO|Rm^{p1fVG$Bb1wG1N^AvHb@(6#-r zLTY2D&I0Bud?GikW99`F(h=)dqz4$Ib|MT}D@6(Eu}$JASgcO2k5rt7wmKMzGN(e0 zEZ3W$#b*d0_wj$VI}fpO=l6f9a8v)I#VG$XQ~!Sw+MNFd{E73wB`Zn7_bnUWo%n6V z+1?C=s2CB2Pko3K>1rmJm5sTt%MrP9J+F@;3FMA0Ft=;gmpF@z54k`3%pQ~O<^O^` z$i`jupHjXY`#-YFg{b~x6w~_8lh8N(U$CF4`g6(}#I%<7BFy)5kS-=0YP&W+ZjwQj81e7v2}PN--LH%iUhb9~v4 z{~1GaC-v4@zlYIO>ntiwCHgi7FusKSq`GA8ZyT^p=5Y5W_i}l9iZO3&nB3U9VxX!5 z?lAth0Y*chG1!s2QA+sd!S2q=hV1O_B=R`xibf<;R?^?r&Rf}leVANEt;M#?)5z$O z;O$gHheB~yYJEBE>?T7s{IwHBu)kDUOEzN(>2Ee> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "FWD2_PORT=$FWD2_PORT" >> .tpkg.var.test + +# start forwarder 1 +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_capsid_strip.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start forwarder 2 +$LDNS_TESTNS -p $FWD2_PORT fwd_capsid_strip.testns2 >fwd2.log 2>&1 & +FWD_PID2=$! +echo "FWD_PID2=$FWD_PID2" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@TOPORT2\@/'$FWD2_PORT'/' < fwd_capsid_strip.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_ldns_testns_up fwd2.log +wait_unbound_up unbound.log diff --git a/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.test b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.test new file mode 100644 index 000000000000..a74f89f79af2 --- /dev/null +++ b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.test @@ -0,0 +1,23 @@ +# #-- fwd_capsid_strip.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile +echo "> cat logfiles" +cat fwd.log +cat fwd2.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns new file mode 100644 index 000000000000..e1d82a038f9b --- /dev/null +++ b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns @@ -0,0 +1,20 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +; WEIRD CAPS! ; probably not the query! +WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A +SECTION ANSWER +wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 +SECTION AUTHORITY +example.com. IN NS ns1.example.com. +example.com. IN NS ns2.example.com. +SECTION ADDITIONAL +ns1.example.com. IN A 1.2.3.4 +ENTRY_END + diff --git a/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns2 b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns2 new file mode 100644 index 000000000000..77213abc22fd --- /dev/null +++ b/testdata/fwd_capsid_strip.tdir/fwd_capsid_strip.testns2 @@ -0,0 +1,18 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +; WEIRD CAPS! ; probably not the query! +WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A +SECTION ANSWER +wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 +SECTION AUTHORITY +SECTION ADDITIONAL +ns2.example.com. IN A 1.2.3.5 +ENTRY_END + diff --git a/testdata/fwd_capsid_strip.tpkg b/testdata/fwd_capsid_strip.tpkg deleted file mode 100644 index c0be8a3c5dd6c7ecda1e8198b888da6aa3e00303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1603 zcmV-J2E6$niwFQjRm)TW1ML}WbJ{pCU(v7Fl1$RhjU8LOX2>-Y0;Hi$fC9Np=kA7a zYyob-ax7Cq=YIUH1O}5p!ljvX(qr>L+Fk8RTJ36AbVg3wwtV3_Z4m~puRCtAzxBLe zAmnlx`Dx}dM*K5^Et96RG@GI6bZ*Nq)7g}{1(|1_$5I%I&^w7J)Lx(;dJY&N~p{%HBR{SD-!CNgY+@qEi%4gYid3l@B1L7pV={}mT*IL z?{N`MgiB@ekZK(sXs(loF%tyaBP(#U@7!a!sHr3!MMV_LaRNlm)^K#xs;TL(!9$UW z{A`OoFRbVPe!zY}$0PnvY0Upq*(~}$vTywVMPM7YH4T;-T+_D6HV8fpYzASE!N3x@ z1Mm&EOS&XY}9iuS`w=4qHD?~~HQ@WR`{&VIzI;jbMDg2U+gjcwL!F>(7XAY+}SyJlPAUEIiW z7tUCF=)?5PtfJ95aXL#$h)wtxyMKQ+tatxUee8)k9?So;=Dhx+ROSEa&Heu}Z~!t# zo>T#o%T~p^om!*vp;85QYYqH9!?-cf$xf?v2C1xJ5K^wT8eiJSW#l2}g;wztxNmcZ z!A&^!@xK&G8s+-g7x>(OLIJ9^a-&gekV5I>MYDym)gQNAhcwH@R;5;j&lec$u|W>t zvRrADpjfCk-@pO*0l&hle~c-AsKTA91>TU$(WP}|JFL^~xnHmQ1CRSRfe44+Mz`bd zNYu->h4cDZSugT)9TJslqA*ids5URl4KlhM6^@Ig^2vwO%EwP<=hcTqCf=;8y_YiPT3t;M0PwAQIE|#mMpI23^ng3(e^>iJN z`F{p${#pG`bE^K&nj8Or30Rf?qru@ND}b1mDCK`h$J(jCT!F)3j6@WS`6VBDpak8i z39j9KzwNsYM7iO842_{;+0d)bNY?XzN7z50<5B;o*~tHmT$-x-KfSsCUj&XV!K&(& z?5@$tA1n|q_wsmM8KlI7jmS_TP9~)qUdt{6DkF|6c@F zJZ46S`i64nQ^zwN?d~7x*?dP;}W8p#w*HbHn4#WY+wWHz`p=3BH#ch005vX BGa>*0 diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.conf b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.conf new file mode 100644 index 000000000000..65552c85bd68 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.conf @@ -0,0 +1,18 @@ +server: + verbosity: 4 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes + caps-whitelist: "example.com" +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + forward-addr: "127.0.0.1@@TOPORT2@" + diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.dsc b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.dsc new file mode 100644 index 000000000000..3c9f042e8f47 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_capsid_white +Version: 1.0 +Description: Forward and and test 0x20 whitelist. +CreationDate: Fri 1 May 14:25:04 CEST 2015 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_capsid_white.pre +Post: fwd_capsid_white.post +Test: fwd_capsid_white.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.post b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.post new file mode 100644 index 000000000000..c68987276e47 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.post @@ -0,0 +1,11 @@ +# #-- fwd_capsid_white.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $FWD_PID2 +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.pre b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.pre new file mode 100644 index 000000000000..18e801c18207 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.pre @@ -0,0 +1,38 @@ +# #-- fwd_capsid_white.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +FWD2_PORT=$(($FWD_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "FWD2_PORT=$FWD2_PORT" >> .tpkg.var.test + +# start forwarder 1 +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_capsid_white.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start forwarder 2 +$LDNS_TESTNS -p $FWD2_PORT fwd_capsid_white.testns2 >fwd2.log 2>&1 & +FWD_PID2=$! +echo "FWD_PID2=$FWD_PID2" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@TOPORT2\@/'$FWD2_PORT'/' < fwd_capsid_white.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_ldns_testns_up fwd2.log +wait_unbound_up unbound.log diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.test b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.test new file mode 100644 index 000000000000..d287259e045b --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.test @@ -0,0 +1,23 @@ +# #-- fwd_capsid_white.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT wwwabcdefghijklmnopqrstuvwxyzwww.example.com | tee outfile +echo "> cat logfiles" +cat fwd.log +cat fwd2.log +cat unbound.log +echo "> check answer" +if grep "10.20.30" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns new file mode 100644 index 000000000000..f0d809e06ca5 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns @@ -0,0 +1,15 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +; WEIRD CAPS! ; probably not the query! +WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A +SECTION ANSWER +wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns2 b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns2 new file mode 100644 index 000000000000..766043596241 --- /dev/null +++ b/testdata/fwd_capsid_white.tdir/fwd_capsid_white.testns2 @@ -0,0 +1,17 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +; WEIRD CAPS! ; probably not the query! +WwWabcdefghijklmnopqrstuvwxyzWwW.ExAMPLE.CoM. IN A +SECTION ANSWER +wWwABCDEFGHIJKLMNopqrstuvwxyzWwW.ExAMPLE.CoM. IN A 10.20.30.44 +SECTION AUTHORITY +SECTION ADDITIONAL +ENTRY_END + diff --git a/testdata/fwd_capsid_white.tpkg b/testdata/fwd_capsid_white.tpkg deleted file mode 100644 index 199befb56871f57a2e839ac4872c14f554c07e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1567 zcmV+)2H^Q0iwFR)aYI!A1MOLDbJ{o%&R6s+wuDLAxv^u5w;6KHgaB!16QG1#rgL}0 zIJN*cV7aoXL+5_{tpw&Jfk4wv+TO7VAnmSqrInwxwC+Ss+qV3`b=pzS4Vmt^;$Y|d zl7W=ZXXUS%&l>Z;G3}T%OO0IK$YoK_%;b#B4rIUcIF`~d2rU7y6Y*il#A>~D@?VrX z%hvw^)8=01=|1EF=W>~q>z}3OZ2c+SF{qKx@fh6$zh6ipq zDnN!LcEKACw6G_b0?~xA=b! z+J#+BgQW`&nzl=JA>cz{GYESO23CMEfX^5(31o6;Ry*%-PI?%tw$qy)L&K)$&6Qonu|qPU=^+vEq+j!*8L@@GnF8bRTQ*ZyK5G;{FfuZyH_yE*|%VMLBvFoxE<&U=Hvdv z(5a!Pjb!ZcP)^z-iSc#ycS*wf0gL-J9)jd0*qs~Vj<4eqqMF7po#3|gC~cnqy?{Q^ z$J+g0mQM43I-QsKKa-~0{Qn$u2=Wj#J_U|bt;$WQdb9ebT7&syNK&oVIiz!jK}e<6 zYJO;+R8WUp6kDY;;J(cr2A{%_kKfWLX;vENAK-lxibbf^E6rxTNs8sSSC=iYxj$;V z4!Nw9TGe_D-d|NNWrG~Tb*0)YL#f!fd;y2x3x0!%e}qTAP~~iO7JNajqwCdq7lnG| zu6WTnujnOyp+lltOBAQhinYt@N|Qv_QSqcyuAII(tG<1Aeo=eOgtCx`Q>vcH%&c9t z&M;c74>L}=T$PRD`6N!2TKQ)^7=8`@pXy`%`ER!WOH+maG;RsE_0_}e=rfa+$(^o8>GwvTeyCx z7^mYxC>}Y+AC)(ZJ8HnR@~V@PV3t%bTOnFM6)u1Y7uE>OOo3(#Mg~fVd7y@wB^Q?K zh4^8j0FKb%S}*BE{Bb{eT?;)0q=Z(ws*+4feBg7Bd0~N+22Ppz%#$^0GHac&zF!~> zv1C@dkLT2eDk3i}dXW}eDpNubKlktp5u34L;W3 zpVAz?SN}C~Mt+O`=b%;fU%~!M)t`H{-YyH<0uvV>wB-vdNR#=R&g)cj(juzxt5`2z zPPyO1Ba<@u>(q<+xk$#OvEkV0 z(y`D-2Se3p=#t^k2jijB0nrsB8d$dsUGPUXKpoS7T|9KrBLwWfiZlmHbv5SBNVecKh1vryzrVdo%L)$rer z4Z+b|5it(d-204KycU>qouyHe)yaFj$Z{9%vG&l9Yn!WNbS9jPQVQm)o.. +0000060: 0002 0001 0001 5180 0004 0163 c03e ......Q....c.> diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post new file mode 100644 index 000000000000..e6dda048d77d --- /dev/null +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.post @@ -0,0 +1,10 @@ +# #-- fwd_compress_c00c.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.pre b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.pre new file mode 100644 index 000000000000..48dc75794192 --- /dev/null +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.pre @@ -0,0 +1,31 @@ +# #-- fwd_compress_c00c.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_compress_c00c.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_compress_c00c.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test new file mode 100644 index 000000000000..67354d014fff --- /dev/null +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.test @@ -0,0 +1,49 @@ +# #-- fwd_compress_c00c.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +# check what sort of netcat we have +if nc -h 2>&1 | grep "q secs"; then + ncopt="-q 3 -w 2" +else + ncopt="-w 2" +fi + +PRE="../.." +# do the test +echo "> query overeinder.net | nc $ncopt tcp | xxd." +echo "0020eb41010000010000000000000a6f76657265696e646572036e65740000010001" | xxd -r -p | nc $ncopt 127.0.0.1 $UNBOUND_PORT | xxd | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> cat outfile" +cat outfile +echo "> check answer" +if grep "0000000: 007a" outfile; then + echo "too big!" + exit 1 +fi +if grep "0000000: 006c" outfile; then + echo "OK" +else + echo "bad size, not OK" + exit 1 +fi + +if grep "^00000000: 006c" outfile; then + echo "fixup xxd with long file positions" + sed -e 's/^0//' < outfile > outfile2 + mv outfile2 outfile + cat outfile +fi + +if diff fwd_compress_c00c.good outfile; then + echo "Diff OK" +else + echo "Diff in output" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.testns b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.testns new file mode 100644 index 000000000000..e9574a6ee87e --- /dev/null +++ b/testdata/fwd_compress_c00c.tdir/fwd_compress_c00c.testns @@ -0,0 +1,18 @@ +; nameserver test file +$ORIGIN overeinder.net. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +overeinder.net. IN A +SECTION ANSWER +overeinder.net. 900 IN A 80.56.223.205 +SECTION AUTHORITY +overeinder.net. 86400 IN NS a.ns.joker.com. +overeinder.net. 86400 IN NS b.ns.joker.com. +overeinder.net. 86400 IN NS c.ns.joker.com. +ENTRY_END + diff --git a/testdata/fwd_compress_c00c.tpkg b/testdata/fwd_compress_c00c.tpkg deleted file mode 100644 index a75a56a7d6e63f6df05a1493f91802116f40ac57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1858 zcmV-I2fg?oiwFQmA&pf41MOLRbJ|7_&%fNK*vg)`omR5mxU^yH7}BIoz`?kgOdpJp z4p0m_MJIxt$%pUWNdn1%+I3UaLZ2*LCr|Brr_JwoKh{Tmy8&)gAi*IG@&x^)%#K>vj6+(`fP{eSFn z+VN(z0Uzx-`H?0(WKjbQO(!kN{UnT2$#}w&g_i{2MFIE|>R&=3iNnA~IKUS)ft119 zIZdu1LKPZ0O{gaTT3(6@U*OcPpMv4wU&E<4bPG<~=Y25oydW>UFiP=1O&Sm+8obg@ zwG;db-$Y{%b#roxC}WmfH-Ma?b{5enZIIJh(4sMo0*?Gu>nWYa4RV&OTd0Oja>jVN zb`1HXPuCBo$R{WBt0&=<3N2?I=QL=LCtf(6qb~AyZ||*i*Z3bZ7Tj0IZSh|>ts?$S z*K$Pso3^!!|7}pd1r5MG@_`O*1CER%9lN@*{IEc-N%!0lfHuWAToEG@z(9z)>pFm2 z=z#mROTo2e7o}Y)TDG3U!aJJKFbZg*MKnc>48oLF;JA3;ss^B-b!3Z{4GuQZiVB?_ zWe^rZ1S3CKLYO5SCtH`Hivq(aL%b9pUIt+cD@-)MZt1uXv1E6+T! z4ZFmJV6-e3;$#b1qZ`df-6l#~w18MyFw~j_gnJ8wl|f`wg7CHGA3JmI8vj0vMt|ZN z``!4rTo>y<%fYCxJ2+9szp;z|Z4jpkMq`82@N>v`m|{9LNo^0J`AkhGn6O3qG)N7z zF-=CEj|tQ;>za=LkQ=iE6XWq&x7R-=wK=CMzvfdmZa~CH4Id@yr!qxrI5!MNm?s;c z%%dTjM}dYMh1C2>!Wg0`ibO~vS&oQaz|@GPsw^SYDf7MQL}qEk9%U7X`X19hTA#~k zC{&DiL4c)$vNZPixZjm_D&(J^mbXTCjek+;+*ijf@oyTU0+jbZ6VFal#=oQQ;(r^o z2Yafzp|S;4-6MOz**x(nq!S7=kE0XdotJ#V8ihKY=>Jbabet@#R>< zX<9Dv3p{*S0IeBEEg1Q*VoUWH$q+^$+sF*PA*zhA#15lzuBs|f(NY;As3E(kEGAxx zbCOhCQ?UH-vAdu!@!nAqBF6`H0%r4}0UuzT&={1rz^TubZ^RlSJZgLvr;il%Em)u~ zz*GpGa=PM6)+i+8tk-^|h{fWmv7Engj2>~7>+-~OhB(fT$0#}bqKD%0ipXtwxzX#G4ul9;d}ZOCY}_; za0z;a{i}W#^ig;f2$U&{WP(2Faau}I?+GN$Pu@uGmu2I2;TH=c63 zd$ixnTja^Bg7x|5OD=o~#us1Y$*L+??kUi0-ZUhWS)mrKb#sOD@!6D~5H}ihl(2gm zM0_A7M4aqDZ*|TG{q}jkb1riE5^qCA7jbA7*;&>&53?0MYdzZktZbZMZ7G@F`TS>p+5Jzq-PQSTi`R4F{%7yb|83C5^Pg?`{#Vjc9QnVeO0*v)NnVEbwG9-|zOGefO+$A?dZ?ZZ(hG_U;rop0B^pgqW}N^ diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.conf b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.conf new file mode 100644 index 000000000000..b4d62a2f6e91 --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.conf @@ -0,0 +1,23 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: UPORT + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + # key +005+30899 + trust-anchor: "example.com. 3600 IN DS 30899 5 1 d4bf9d2e10f6d76840d42ef5913022abcd0bf512" + # validation time + val-override-date: "20100406005004" + fake-sha1: yes + +forward-zone: + name: "." + forward-addr: "127.0.0.1@TOPORT" +stub-zone: + name: "example.com" + stub-addr: "127.0.0.1@TOPORT" diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.dsc b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.dsc new file mode 100644 index 000000000000..7a2727588cec --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_edns_bksec +Version: 1.0 +Description: Forward EDNS backoff for DNSSEC domain +CreationDate: Tue Apr 6 08:45:57 CEST 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_edns_bksec.pre +Post: fwd_edns_bksec.post +Test: fwd_edns_bksec.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.post b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.post new file mode 100644 index 000000000000..c43b038679be --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.post @@ -0,0 +1,10 @@ +# #-- fwd_edns_bksec.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.pre b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.pre new file mode 100644 index 000000000000..d24f92d73a10 --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.pre @@ -0,0 +1,31 @@ +# #-- fwd_edns_bksec.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -v -p $FWD_PORT fwd_edns_bksec.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_edns_bksec.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.test b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.test new file mode 100644 index 000000000000..4acd01e88dd1 --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.test @@ -0,0 +1,42 @@ +# #-- fwd_edns_bksec.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +# +# First the nasty name. +# The server should not have performed EDNS fallback and cached it. +echo "> dig nasty.example.com." +dig @localhost -p $UNBOUND_PORT nasty.example.com. | tee outfile + +# no answer possible for it. +echo "> check backed-off" +if grep "10.20.30.77" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# Then the www name. +# See if we can still get the EDNS data. +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.testns b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.testns new file mode 100644 index 000000000000..d54f2b0bec0b --- /dev/null +++ b/testdata/fwd_edns_bksec.tdir/fwd_edns_bksec.testns @@ -0,0 +1,73 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +; DNSKEY lookup works. +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +example.com. IN DNSKEY +SECTION ANSWER +example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} +example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20100429005004 20100401005004 30899 example.com. CcIIAhvwMsSnPzJdT1onlMK8jgQnKzYoklOsm8ab644jhQfWo/BIXyJ1l9ImK4J2+quIHdrXESTMHJ5KNRs2Sw== ;{id = 30899} +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +example.com. IN DNSKEY +SECTION ANSWER +example.com. 3600 IN DNSKEY 256 3 5 AQPQ41chR9DEHt/aIzIFAqanbDlRflJoRs5yz1jFsoRIT7dWf0r+PeDuewdxkszNH6wnU4QL8pfKFRh5PIYVBLK3 ;{id = 30899 (zsk), size = 512b} +;example.com. 3600 IN RRSIG DNSKEY 5 2 3600 20100429005004 20100401005004 30899 example.com. CcIIAhvwMsSnPzJdT1onlMK8jgQnKzYoklOsm8ab644jhQfWo/BIXyJ1l9ImK4J2+quIHdrXESTMHJ5KNRs2Sw== ;{id = 30899} +ENTRY_END + +; the first part has nasty having a 'timeout'. +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR FORMERR +ADJUST copy_id +SECTION QUESTION +nasty IN A +ENTRY_END + +; the next part has nasty recover (with timing to be exactly during noEDNS). +; therefore we return the signature to make our test run fast. +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +nasty IN A +SECTION ANSWER +nasty IN A 10.20.30.77 +nasty.example.com. 3600 IN RRSIG A 5 3 3600 20100429005004 20100401005004 30899 example.com. nV1rzF6ow8sp5k315hczuO1xRQT5MrS14BEZ0Md71/EoCfVtjD+WK63w2MnPzqLIw3YRyfC1S/bMc3B7cVZv5A== ;{id = 30899} +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +www.example.com. 3600 IN RRSIG A 5 3 3600 20100429005004 20100401005004 30899 example.com. gM9dI2Ew/zsRMD8ZrqetGo4xYts51quV4/CaOemUPAx8LOvGNJMGrHpJ1Q+CW7CWTauqNscFLlgUcmUQ2+RIlA== ;{id = 30899} +ENTRY_END + +; fake answer so we can distinguish it +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_edns_bksec.tpkg b/testdata/fwd_edns_bksec.tpkg deleted file mode 100644 index dc8ac739d626da47d0ecd23f425e09a29faca052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2303 zcmV$#_gDI_s6*d4^E^Tl2q@n876C_8z6hx6-n-`u zNe427G^P_H-tGT>)d@JjFrzolx;L}=ppdTqR$bLqU0tz4^M;x(zv+)SH6+vavK!wU zGNPzy;#VnZ^5X9t8%jmI;H$O4~wUvBqQ{SON3 zbN#Q74CY!dn?oqLkk5Zn|KfQ`|EetK3L7AQpCx`Be{ubD>fKSVL{j+OXWaIuCD2G} z6Wm~&@rNGOOgiJgb|&>jx1|CIeB+)kEDDLRhiLUW5_)0Pw(~d#G$x-$5JX+kmXdpnW}bEQESjZ z0W;sX_Dq#3vQ;pPh26Yt=2dEGd$<=>Rqq?7+_yAEO^ey?bjLPz-)1iO_L!o)bSJ}5 zXr67-4AuyqRauecJZ@xJ!(Z%Y=_3@$P*+MYrJN9pd7LdMzQ`G~s^GU+K57L>wV%@Wt+5(*M);?^Eu({3Uzr3H#6Iin$F%$!P`g$rXkD z=LY}6Z{r)!9}$V)fVa0+Gp2r-hpx%nyp%=)9R3N z_2i=41A|SbH?~Q-wMwtvYQp(Ntt%eLl2HqLj+l6CS8jH%Y8|rP^rNOJRVzRa&A)u! zKF=%0u(MaK9s60m{!l+E-|B9^>U1pUgmt(!eNa9gan`B#isqFidpm7f4QOcIkN89L zxDdJ*`SY{giFJC^8EWnN_2uE&X%6=PZJY2OVmI^lfsfw(9k~5Kk%qpc|NDCGI-PF) z!;DAdPL0G2u|HAwVt+C#im#{`Pq8>0RE&DPJiH4Vyz90fPRyRdT&Hom`*CpYo<3Z& zk<;SiUA>Ri_;Gk{U9s$8{nzP<;_TJOr}-0g=QgMxo8GS|?#A(ncG~Q4wHv;FzqG2~ zXKJoBtK``l|I4a-|L4;8KKMh5KEgv!G0{CAhB`+V!u=^e-P!H{bl4UrB)ZG(Z*&Mp ztxf|s$dlV6npQ}&{5gj%z5k3sj7G$X4R1r+ABtmKubu27@#Ueh{q!d|F zWhp01#bQjBzOo<7xD|8XxE0+?#d|m^uyB`8v{6pchQ>qCQtmtFJ+0w&mHc7tH@RUJ zm28bwtV{o6b?54|kPFoY?%dn6dYHTJOs$I2&Gs8c?yzWF{&uI8zlZDj*25+Y!?n_# z(?7{JFRvpi>xil#{!uy@H1^E8S_`ueywj-e{^s3M{{ze4U;A8BZiCBwwxYM__@Z6D z-#u&HeQ2IEK6uBI6XkrTa#gHc_4MGj$&I5kXK-PRFV5ASPTl#c4)#HWxS+c{M8o1t z7>S{~VA|YALkes@1l#{(?cjgX(*o~*cIfqgfv4ktlN&FbELB9*aOr4#Ck90mFGbWEK|iL|}XRwYe5O4?BpVYLE@ zq(|4(h$EepgZm@A7m2~!I_K0Zkt5x9@c1wN*nZ?``$v(zaE>SJUnwX>w0}+2RMD;| z?7t`{`M+1eCTwOhYpf)b*(95Ipa-5oqj-0W!6P2=cPK28A%Jj5T|C;ic^n~=e?rCr zNy>9Hx8$fXzP8Pa)OqJLB(vU#^0JZxPwt2ZK5_I|4~dm=|ybJE+lk5t$J z<=s0%jUj{da>vC|8V(Lt8HxLR8g>4(uB{NhFRm}M#2^Yv@a+gC#ThxWb%qZ2riV@x z{cz?EG81?la-9=%IUFEaa@YXWgEtDiiC0*!zTf)WB6ET;d-wut(S1j}7_bL%z6d=c zWGHO&Y?KSmZZ8RAJG(urjnk1>J!e!@{bQ9|F)|!L(2t%TMKQ}8M;iloq&Rv8o}iF+ zr}jQAHkXtpTUf}>n`ZFOm=6R8^UU*t2p;)d6vGm6p|DmQhVHM@Lfu}{)lD#gndsxX z86$$ez|)@)lRm@$V>-J9Te{*%<)Zuhq#^EsF!DvM^<>CcC7UywgTv`liX1$syIWba--rGJX#Ii{& z;W(BH!|+k;U0fgXH_Ie)A007Z>>IUN5qsPGr%e{PP_{2@)hokRU;V1PKx(NRS{wf&>W?BuJ1TL4pJc5+q2FAVGoz Z2@)hokRU;V1PPvr{{nkw9x?z>008imkmLXW diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.conf b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.conf new file mode 100644 index 000000000000..4756b4bbb3bd --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.conf @@ -0,0 +1,14 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: UPORT + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@TOPORT" diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.dsc b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.dsc new file mode 100644 index 000000000000..17a102c55ef7 --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_edns_probe +Version: 1.0 +Description: Forward with EDNS probing +CreationDate: Wed Jan 6 09:45:50 CET 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_edns_probe.pre +Post: fwd_edns_probe.post +Test: fwd_edns_probe.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.post b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.post new file mode 100644 index 000000000000..0f66815231a5 --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.post @@ -0,0 +1,10 @@ +# #-- fwd_edns_probe.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.pre b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.pre new file mode 100644 index 000000000000..fe31c8fddf74 --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.pre @@ -0,0 +1,31 @@ +# #-- fwd_edns_probe.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_edns_probe.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_edns_probe.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.test b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.test new file mode 100644 index 000000000000..225120421cb0 --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.test @@ -0,0 +1,42 @@ +# #-- fwd_edns_probe.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +# +# First the nasty name. +# The server should not have performed EDNS fallback and cached it. +echo "> dig nasty.example.com." +dig @localhost -p $UNBOUND_PORT nasty.example.com. | tee outfile + +# no answer possible for it. +echo "> check no-answer" +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# Then the www name. +# See if we can still get the EDNS data. +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_edns_probe.tdir/fwd_edns_probe.testns b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.testns new file mode 100644 index 000000000000..5197eafe8c55 --- /dev/null +++ b/testdata/fwd_edns_probe.tdir/fwd_edns_probe.testns @@ -0,0 +1,42 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR FORMERR +ADJUST copy_id +SECTION QUESTION +nasty IN A +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR FORMERR +ADJUST copy_id +SECTION QUESTION +nasty IN A +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_edns_probe.tpkg b/testdata/fwd_edns_probe.tpkg deleted file mode 100644 index c92689797df85fe7b6a78de67720d25f618a7e57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1537 zcmV+c2LAaUiwFR8PpMM?1MOM=bJ{i(@2}{ucq3fW-p-C~Fx=>x8wIkaOMwDuuD9E9 z3Krl6Bv&$}?Dog+$;Jdzw`7+zT{~XBSbCD)dwP;Sde0s$yaDsL8U#{YG1K$q@uT}D z%d#r23;47v{8!X$!$|G>^-I5HNtB^`GWg+Gvlb`Olt9><( z_46B{(Z}n*#Tp7ex||&+z2(0^=;^*mqzW$2I z_e@qv4*y>X<%i2ExFmM~d_FV6iDcAMRj^6U=Q#Zl9Wtyr71P2W81xF9*)Ol%kmi6Twx>U$%9io^4BekJDIGm(=gx#2_#fkN{6NP^^a#^RbM z3@$?B-JHp#F%?5Pod^|1vPVKLsPv4#1ZQacYK)14k{0TD5?O0of9bcim3i{DJ^tUK z-RD1KD!iMH9p~RJ>+^3H9oxe5k7ozZf5|TG&;LWv0UQ_xWGp!t#sN71CFXL-Ae=Cm zQH36W_f&#D$gr3&4t{u~bgN|KcQ8g^n#X1sT#rrcX0As30f&c)pp16Zg6AG?*pYfX z$KZ2_%E2#aV@>(?_!~u9BnorcE=XmN%9Isg%4O)Um z6BGG;2P&|sA@2L4978Q^BrYe3LSE>Npl zppk(kcF zP>b0>hp*s}O>}rx=&nlS^fF;Re!S+wk6=G}vO4kUft$5FoSbYM5|6o&nv}BoYUks| zj69*^S#*@Pd#V>nci@T?&Jhp?{bsL^xTrxck(YIya|I^}d^snFHXO#&J8L{E{IF@6 zW~>UIuxm!I5uPzCM3{{LQ{ioAFgQ}jQ6g}Bl=8&U@zJU^j=-@wF;qAGylt(P3@0$Z zib`ugtl&1<6}TPsZ9A5lle*jsSUFC*8u&X*1i{G$U?(nE+qvn66mz4J=?;ApZ1EP< zPc7779wawM+_o}A^EWS%uacSE0{_Jqj{mKaTe-piQZb7Eojv|P2xa5Hc;NVdLrVhr zpVM(`=s$>~{UtV{V1!Yz;1CJgx)ZK3&>RH52MP9Va5f;|`+IqCyZoQ4yXe>z|6u^A z^MAMOx|sJz@n5Cv?9cy0(9sbpn(HK z-et49=I3s*Mk|YHXEB|-dF)G>zhTtZ-tc=$(Qf?r)bNfvcE*2YH+lbCt`y5r{_j|O z{C@~~P8DlKUr*A@PTnx7e8H<=n-*y>HI#l3MvT)qBZY+@PU4qxdW25Q>ylC3r$Iv$ zc!_D@OUeOoMSrT6+^TCqz1asH<&#&`=OO+vSp`p;aB0@f8b16#`Iw?~Md~PI9DO_@ zbukMBXFRNu`pj#vfN}j*irkc5uxU^w9r@8b^t%kwi9Q=;1i7ToGFqb0u{Qs3s^9#f n@D5d&;#SEi^`~=GvB$7I?P*VY+S8u)^exjrddVA}04M+ev5pV_ diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.conf b/testdata/fwd_malformed.tdir/fwd_malformed.conf new file mode 100644 index 000000000000..50cf6404f34d --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.conf @@ -0,0 +1,16 @@ +server: + verbosity: 5 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + use-caps-for-id: yes +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.dsc b/testdata/fwd_malformed.tdir/fwd_malformed.dsc new file mode 100644 index 000000000000..b778c564dba2 --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_malformed +Version: 1.0 +Description: Check authority that returns malformed packet. +CreationDate: Tue 13 Jun 09:35:40 CEST 2017 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_malformed.pre +Post: fwd_malformed.post +Test: fwd_malformed.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.post b/testdata/fwd_malformed.tdir/fwd_malformed.post new file mode 100644 index 000000000000..690b04cf0953 --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.post @@ -0,0 +1,10 @@ +# #-- fwd_malformed.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.pre b/testdata/fwd_malformed.tdir/fwd_malformed.pre new file mode 100644 index 000000000000..dec7e0c5a7b2 --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.pre @@ -0,0 +1,31 @@ +# #-- fwd_malformed.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_malformed.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_malformed.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.test b/testdata/fwd_malformed.tdir/fwd_malformed.test new file mode 100644 index 000000000000..621605daeee8 --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.test @@ -0,0 +1,22 @@ +# #-- fwd_malformed.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_malformed.tdir/fwd_malformed.testns b/testdata/fwd_malformed.tdir/fwd_malformed.testns new file mode 100644 index 000000000000..52b4cfa8a5e7 --- /dev/null +++ b/testdata/fwd_malformed.tdir/fwd_malformed.testns @@ -0,0 +1,23 @@ +; malformed packet created +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id +HEX_ANSWER_BEGIN + 03b8 0800 4500 0042 b40d 0000 + e4c2 d1e3 d2f8 d48c b5df + 1b93 0800 4500 +HEX_ANSWER_END +ENTRY_END + +; malformed packet from reporter +ENTRY_BEGIN +MATCH opcode +ADJUST copy_id +HEX_ANSWER_BEGIN + 03b8 0800 4500 0042 b40d 0000 7211 548a ; ....E..B....r.T. + 8ccd 5119 d857 89d5 0035 6b80 002e 0000 ; ..Q..W...5k..... + cdb2 8015 0001 0000 0000 0001 0558 7a6a ; .............Xzj + 7051 0378 797a e4c2 d1e3 d2f8 d48c b5df ; pQ.xyz.......... + 1b93 0800 4500 ; ....E. +HEX_ANSWER_END +ENTRY_END diff --git a/testdata/fwd_malformed.tpkg b/testdata/fwd_malformed.tpkg deleted file mode 100644 index 82a11ac23d8882be2813bd0bba3c1b47429af4c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmV;)1vdI0iwFR=qd!>y1MOICbJ|7_<}3Frw&1ao=}49YLKrt5+koq&33hA}r_**A zp*uh^=+u)GOr}4+djg49m&`b^Cyh3-bhmf+?7i*7u6kqI8QH@g7b8Yh>Wcl`R~HS% zvP}8bEmK>3Cz8`kx^7v9Ue?Mv4WE{k1M}-oWnH2mv;{zJ%%hNr`}=Kc|4ya1cK*v6 zhkLz;+K>lasg&w@`Im$z{DpeY9x=(E)U#rQUjCZ zi{M2gB^(H5)1U@A$-5pdzh^rPYlfw2_z$%{7hw&KFE6gz$0Q#GObI5zkoRlgagxXD z#GH@|#4HrBvrBvK5CIC2*X5B%Rn(x~83@k9X&;0To;_mI8s&<|L*?&?iHS1gjy)Xk zAe@3rV~*_y3f@%3r8StafM9uS3#xqP9>Yb=kW_?9T5L)Ms?s$aAGa^!=@$rj>ce;f z+2;Q=a2{-9oBx}dmH59A>vgNFRWkp73^}y}){4Dk>DxZ$T zK48u**iks(0_g(6fgOTiVI;f&QULI6=az*ksUwBRfekxEBkhQRUV>MV2iifcWY)?W z)SK6BF!0dH8yi^$|B#S?3KeeDx_W{y_oLUh(Rl+>N0fd{D5TCuK6<$q)<}Is8_Z{( zq$)BmowK1|BbQ=zajGvExr~WqMUOhtX6p?h>c~lScZT#OkuU8aV6;ZgYv|M$dYtkM-3ZZuoN(&HkS+v@0HD;5QC9+{jJ;6uFQ8HR#;#)5a zvlt!Ba@7Vn1Qn&Js;BZT)V7*pR2_$csp|(otEL6j18U;%k_nY=RYDqUiWXzMRn;2= zFmENy9K)eq1FD)XM{4@CfAYYpX;#6qE9pE^`SAH;ieYIcb}d=h^}w>>{xdlQ|E+pA z`8|3htTi~lTZHUGCNddB~cB1I@F%7$nM6s1Ut5b#Ji z3}ZZoq#ED`z$e@-nZ?0)z&vony+F2NK=lVGJ#_DVHS}-$Dt1$6BmRQj-2`YuJ6ge1 z4(96EJWd5%58^T^UAv1WeGI!?uRk-jJYdPnQWGJUSIrj%X&Mv3B2XT$CvIZSfJ5O3 zsN09}c&xHJd*lz9>hKZvmD=Mp?F7Y#op-I%i+8O?N2ZKxBj6uIWq>zD?obNuV1SG{ zvD5_xB5SzcDrz9EB*`!;=0m1Iwik?{Qogz zlmFwH|DU{Hm3GlRN8D3`0qL`_BW#cIQAfsuV30+hez9{kE0MFCMD^@hs)e6HfBt;t zr^^EuYXvwuTAj#r%p5f-ZR#sGAMa(n6Y{eaZj_w&ka|I9nv#*7*NxV7r;W*T>pG^U z1aAYIV`hGoaE@`btHbVebuSw)c79r%m{iOP_e^VK-!hP2g^?R$mcv9C6b5_2e*78m z&*S~QrLEZ8-%Hx3U)tgx$z)~gFR=d28IB<8#-(&CW;_{R47`zD4DI_uYL@tY2P^wY zR|Wq&2@o7DFm198=}Z^5VoAAB*|;T=!dG--+g&=VPUI()KW&>$MCupW{|Tbst^Ciw zef(E8*Z9AZ@&Dtt%u;aTF j67pNnEckzxoo13rCYfZCNhX> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_no_edns.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/UPORT/'$UNBOUND_PORT'/' -e 's/TOPORT/'$FWD_PORT'/' < fwd_no_edns.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_no_edns.tdir/fwd_no_edns.test b/testdata/fwd_no_edns.tdir/fwd_no_edns.test new file mode 100644 index 000000000000..bc209ea09c50 --- /dev/null +++ b/testdata/fwd_no_edns.tdir/fwd_no_edns.test @@ -0,0 +1,22 @@ +# #-- fwd_no_edns.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_no_edns.tdir/fwd_no_edns.testns b/testdata/fwd_no_edns.tdir/fwd_no_edns.testns new file mode 100644 index 000000000000..b3742e4a89f1 --- /dev/null +++ b/testdata/fwd_no_edns.tdir/fwd_no_edns.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP DO +REPLY QR AA FORMERR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/fwd_no_edns.tpkg b/testdata/fwd_no_edns.tpkg deleted file mode 100644 index 9de545d164d08498dc922de43519f87c66d13001..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1383 zcmV-t1(^CDiwFRDPpMM?1MOICbJ|7_&R6bNY=y^8rXyJr2+fd&2?5-=jRnEDnM|j{ z$kG9-L8shFA$0oVyC)6SSrSwJ>2~|%**G@e z{|HTX*1uSfIDHTsI3JCA{gdl&H1yi-`qypHOwD;bzW!CHsw(WPx~f)5 z6$DGTMK6di(*$$GM_A zkh#;J1rnWn5S=ka1qDi|RTP#?pi5Z#Fc+B0< zXNz&fcnl`Fa$fYWobGtgAC8_K4YLwCdy}&sKi+WRM=+i|A=H~OP_{c3YYMblyN;~; z+-l8BceRz1kGnFRiKWYZoG9t{9G7P-8-#)!z3Mub<5BN&Dhw`zI(+q%sEW&T$yE*2YipXE=3HzaSmdGG%<#1kz!Ph=nwao20YwyELMq zFOYv*dP(O|lMMLwFk~uA1{k|LT;z}u-DRhU&`v&_$v{P&1B4suH_4eB%oEi7ZO`ei zMfb(O%%2{@#=iKkHE@rZHOn;Xc7Fcrb{YSNAVK+i3_?=D|JO_eF$SDTDpd%Rg&NN= zq-B5^q=NBE`NZ`w#0=Bcbo@cCyhAl1P5wy*4{}wk1fFC~1O-yT{Y1SujbRO&2EIJ7 znxN!I9&+$#@@AYdRH7)U1|FtpBx^oXLl&#=63SQV<{(aWXBQ*&FT@3OKI?;rb|sg% zzK__VY&I9i~okv$j*OTubFB5TXwyS|3lDIkg>Byfpxx} zCa*{R;rY+!4ixiSax@yff?7k@3F$eb;oI?x9=0JD?NR3?u*hRRg?I5P!v9h!Ty+P~ z?UP||@aiqR9zwefXZ_(tZ#X3F?k`uE3wSJAjRT)t_Bx~Uz5}nXFhjrs!Q8rX?o`?v zN!z)6(;II1mD^lc&z$Kw-Ou-H%PFUiF7+SSsXLg)T}-p+{^8gE-uGX2nEQX-vTomh zv4K4QYmGAg4?%al|FQ$${|i>~3;%sKKKtTdUElUsC`84W6R>3nsiK`X;hSJSA7e5C p`SWLiQ+Npc#xHdxl~htmC6!cCNhOt3Qb}J%{{Ti?s!ISU004xMvR?oI diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.conf b/testdata/fwd_oneport.tdir/fwd_oneport.conf new file mode 100644 index 000000000000..f3427fece2c5 --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.conf @@ -0,0 +1,18 @@ +server: + verbosity: 4 + num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + outgoing-range: 2 + outgoing-port-avoid: 0-65535 + outgoing-port-permit: 20675 + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + num-queries-per-thread: 1024 + use-syslog: no + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.dsc b/testdata/fwd_oneport.tdir/fwd_oneport.dsc new file mode 100644 index 000000000000..566aed9a7ba6 --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_oneport +Version: 1.0 +Description: Forward udp over one port with 2 fds +CreationDate: Mon Apr 14 10:39:27 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_oneport.pre +Post: fwd_oneport.post +Test: fwd_oneport.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.post b/testdata/fwd_oneport.tdir/fwd_oneport.post new file mode 100644 index 000000000000..8aafab7ca9bd --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.post @@ -0,0 +1,18 @@ +# #-- fwd_oneport.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID + +# find all extra forked testns and kill them. +pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` +for p in $pidlist; do + kill_pid $p +done + +# kill unbound +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.pre b/testdata/fwd_oneport.tdir/fwd_oneport.pre new file mode 100644 index 000000000000..eeb5238a9334 --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.pre @@ -0,0 +1,31 @@ +# #-- fwd_oneport.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -f 9 fwd_oneport.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_oneport.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.test b/testdata/fwd_oneport.tdir/fwd_oneport.test new file mode 100644 index 000000000000..f6dfcea91f71 --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.test @@ -0,0 +1,111 @@ +# #-- fwd_oneport.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test + +# skip the single query test +# so that all three queries get timeouts during the later test. +# +#echo "> dig www1.example.com." +#dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile +#echo "> cat logfiles" +#cat fwd.log +#cat unbound.log +#echo "> check answer for single query" +#if grep "10.20.30.40" outfile; then + #echo "OK" +#else + #echo "Not OK" + #exit 1 +#fi + +echo "> do queries" +dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & +digpid1=$! +dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & +digpid2=$! +dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & +digpid3=$! +dig @localhost -p $UNBOUND_PORT www4.example.com. >outfile4 & +digpid4=$! +dig @localhost -p $UNBOUND_PORT www5.example.com. >outfile5 & +digpid5=$! +dig @localhost -p $UNBOUND_PORT www6.example.com. >outfile6 & +digpid6=$! +sleep 6 +kill -9 $digpid1 +kill -9 $digpid2 +kill -9 $digpid3 +kill -9 $digpid4 +kill -9 $digpid5 +kill -9 $digpid6 + +echo "> cat outfile1" +cat outfile1 +echo "> cat outfile2" +cat outfile2 +echo "> cat outfile3" +cat outfile3 +echo "> cat outfile4" +cat outfile4 +echo "> cat outfile5" +cat outfile5 +echo "> cat outfile6" +cat outfile6 +echo "> cat logfiles" +cat fwd.log +cat unbound.log + +echo "> check for ID bit collisions" +grep "pending reply" unbound.log > ids +numsend=`cat ids | wc -l` +cat ids | awk '{print $8};' | sort -u > ids2 +numuniq=`cat ids2 | wc -l` +if test $numuniq -ne $numsend; then + echo "got a ID number clash. could not do test, sorry" + exit 0 +fi + +echo "> check answers for queries" +if grep "10.20.30.40" outfile1; then + echo "1 is OK" +else + echo "1 is not OK" + exit 1 +fi +if grep "10.20.30.50" outfile2; then + echo "2 is OK" +else + echo "2 is not OK" + exit 1 +fi +if grep "10.20.30.60" outfile3; then + echo "3 is OK" +else + echo "3 is not OK" + exit 1 +fi +if grep "10.20.30.70" outfile4; then + echo "4 is OK" +else + echo "4 is not OK" + exit 1 +fi +if grep "10.20.30.80" outfile5; then + echo "5 is OK" +else + echo "5 is not OK" + exit 1 +fi +if grep "10.20.30.90" outfile6; then + echo "6 is OK" +else + echo "6 is not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_oneport.tdir/fwd_oneport.testns b/testdata/fwd_oneport.tdir/fwd_oneport.testns new file mode 100644 index 000000000000..e6ce8824af9a --- /dev/null +++ b/testdata/fwd_oneport.tdir/fwd_oneport.testns @@ -0,0 +1,64 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.70 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.80 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.90 +ENTRY_END + diff --git a/testdata/fwd_oneport.tpkg b/testdata/fwd_oneport.tpkg deleted file mode 100644 index 02f5182d39bfeeec5d4f1a303e4ed44a055c61d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2039 zcmVKG_k>T#v$fL49zO!7yx8OZXHoP>9C8QtWp#^2!i z^PH%m99vn%SW=i18YeIdB5-}+&uDb*TWm74=X%~GbREc*kICH3MFFur59sG4vY8U!q0VJmiXRYQwOC+F znP6SdjgylPvw1{AXlKr7?zQvGhhJbLlqCl^Iy(G7*e5S!($>kiUSjB^wTUbw4o(mY zjJKP~Mk(}?PW>7kc_{zW&i?yr?6Lh{S64CrnU`+pD$jq*68pcs;3fF>lEyUpM58qQ z_&2?CHM;!6e$=$4`oG8m3WKTTc@(1*M|8=wCGK{yQ@3LlgE z5dUVRWHh*b^Ar3yg0nLiUJXX0s}VW7_~W~qG43D2`w1@F*rPN&QOV8Ve0+H|gdgAG zjs_pddc9U#m&4XsQFJ!Ec|RC!3R`Cn6o{_g{??3fO5mG;VeK=NlA#ctsDK$R78LE~xUh6y*kPEVw;azY5$Hv_8x zKS{6MWC0q?oS2+P)MoA%c7nuj10T-92vh@9rKcbFaEi}yeS@YbFUVWl^%MM`Mm=yM z8Q#n1@)`cPKl^hVTS7KunFrB*56F4246#8!>5=oLb3sGuJ2BcfPd`vE?2+rJ+97tS zL9TIQ+xudxOUATr=DWwU)#umvC1jk}c8puM9(irM-U^w�S3;i3Fzr{vKw4I6(8j_2*J#`*U>EN+#wh*`ES-;87&YGekxmny_U$${2rEleX z=1r{yo!)`%$7>9ljd^(xkj9-sdZAT1YPa*oU$PGSq?NH<{Rt~jFQ$cM7$m@~`2N{V z@GEjKa|tPiB*+J|O@93_^s^w?9X{5^Z-L70?{^^5nu)Z6NZXM}Zzj?UB7H|9qnXGk zh>RVH%w{69AToC(vYLskg2-Y-{Ll&(zk>wn7&_TR)D2qQpw|sX-C))Y)@I?b)tt|M zo0Q+6$w#aBXpKI4#Yb;)F)A)blZ#n#F`Hbhii<^>)3=hn_2ebh%YWVAH_! zTy|_jiZpH6p@=CHzIgZTG7a>>#iJGOkz({Y`M_F11Io*K3X=DMYz+4L4i5hjqQoW8 zdGXJehwLVs9r&bG%AzrvmG6EmXtWIvN(dL|PUZs=o)HdW(WI z_3U^dW4BhGgZr?AOE+@;jy2Epsl|0gA!S)9OIplFr%;&()l99%qJkT9@k$k~Wb|`Y z%R~(u|B~3;5NlOpt%+FMnb_J8>s4aCiCEv6xVs@Xs>DVUv9UApiw&_^B{rLg&7Fyl zH^f$z*lHrSwh)tS5q;~8n1FzQfPjF2fPjF2fPjF2fPjF2fPjF2fPjF2fPjF2fPjF2 VfPjF2fPlab_!nXK)(QYn004+`4FLcE diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.conf b/testdata/fwd_tcp.tdir/fwd_tcp.conf new file mode 100644 index 000000000000..2b900640e764 --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.conf @@ -0,0 +1,14 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.dsc b/testdata/fwd_tcp.tdir/fwd_tcp.dsc new file mode 100644 index 000000000000..cf024b60cbe3 --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_tcp +Version: 1.0 +Description: Forward a TCP packet and return reply. +CreationDate: Thu Feb 8 12:57:38 CET 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_tcp.pre +Post: fwd_tcp.post +Test: fwd_tcp.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.post b/testdata/fwd_tcp.tdir/fwd_tcp.post new file mode 100644 index 000000000000..28477b01a7ef --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.post @@ -0,0 +1,10 @@ +# #-- fwd_tcp.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.pre b/testdata/fwd_tcp.tdir/fwd_tcp.pre new file mode 100644 index 000000000000..96279b3d2489 --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.pre @@ -0,0 +1,31 @@ +# #-- fwd_tcp.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_tcp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.test b/testdata/fwd_tcp.tdir/fwd_tcp.test new file mode 100644 index 000000000000..9ecc5df153e9 --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.test @@ -0,0 +1,22 @@ +# #-- fwd_tcp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost +vc -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_tcp.tdir/fwd_tcp.testns b/testdata/fwd_tcp.tdir/fwd_tcp.testns new file mode 100644 index 000000000000..2ca3c1533314 --- /dev/null +++ b/testdata/fwd_tcp.tdir/fwd_tcp.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_tcp.tpkg b/testdata/fwd_tcp.tpkg deleted file mode 100644 index e85b93b90334faccb4e751200d3619ff5ce3e584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1374 zcmV-k1)=&MiwFRKPpMM?1ML`HbK5qouja47lw8tYPl_a4c28Y>acpPJ*4nP4tk>Ii zK1HH!Ew-qVQXKF0;|I!?B4vQDoHv;3r z`)B=#)1C6b`>5Ay_rAYjHEOr-U$yZ4>(yHI8R$Ee;vV>)zyBWWsVWp+URC$V9tf6j zk3u}9Fn0wW9Ijms<6uT%F{L2{@u85joRVKa9fPJFX>oKl(Quiz-tik89At#H%p;dX z;7pE=sfc0BI0PZ2eMAQCC9;fMA%bwSX0^FtgUiMgA)4gtvH6^ZnwXLajYr%KeKsFO zjK^S-i{459qSqM>`a|c<{&3wRryn!a^XEAhUV`!B1)<)QfwH-=I8vb5yer6R&n?xg zw{5MweALMFCKfLD@uH;MGd~m~xgZo||6QkdK61L}PVXGl2y%M)JFXT&6UW+&O~7m( z7;vyU*IDPy{&z)@Bx2pUN1(ZTMZsg?IGCh5Km_$crEn;YjwRn;kB<&FF5&R#Fq?P! z`HD3UZaE-_>RfuNvt8b*paH4eVFZ|2On{z4ZT&0k0u+=TuOBjUIdDfu(`(_lIXcob`a-xbtX6 z(W2%W*>{|GP_64aA>E!c{4_f0;u`Y4<+R@di#+C2_#7`I{4a^ZMQ1>U-NCz0@L>q8 z7WDev;jlj>tHP~kVzVLR+<01R6)#|zZW1Gf*X05dU$AA-8&>kAAoqdnV z&y)VR8zWg~ zn!qW&1b798Xq!vQ#Y6;NbL!GmaX|8-q0?2JZS$`A^*2h`?sp4{XYua$^Y=>;W0D70+%f1`x1|T zochTV_zadfiGVPPwFYLFsr~C#Y5$J_tIXdf75sn6L=a=7ZIa3!gvnfurx?o1$l4$k4AdzfyB@~Y zhS|_`{6Va&quP)b0gp)qtyvXIfvRjn$Vdg1ih6Mxy=%BO@TJDupkz9a7}QN~${9l{ zijq>`VVaJ}ksT@}-(vV@i8n9aaCpi~yxy??KD0WHYYsV^*Q$!XB?nk;lrD g{g{_fLJ1|5P(leMlu$wmC42$?0yNSURRAae0PJwHMgRZ+ diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf new file mode 100644 index 000000000000..ad0a1a9cabd1 --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.conf @@ -0,0 +1,16 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc new file mode 100644 index 000000000000..4e729dd2fb7a --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_tcp_tc +Version: 1.0 +Description: Forward retry in TCP mode +CreationDate: Wed May 9 09:11:32 CEST 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_tcp_tc.pre +Post: fwd_tcp_tc.post +Test: fwd_tcp_tc.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post new file mode 100644 index 000000000000..9906e374c16a --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.post @@ -0,0 +1,11 @@ +# #-- fwd_tcp_tc.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre new file mode 100644 index 000000000000..f316faf3762b --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.pre @@ -0,0 +1,31 @@ +# #-- fwd_tcp_tc.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_tcp_tc.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp_tc.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test new file mode 100644 index 000000000000..1a8f9edc1e64 --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.test @@ -0,0 +1,22 @@ +# #-- fwd_tcp_tc.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns new file mode 100644 index 000000000000..0af820e01deb --- /dev/null +++ b/testdata/fwd_tcp_tc.tdir/fwd_tcp_tc.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname TCP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/fwd_tcp_tc.tpkg b/testdata/fwd_tcp_tc.tpkg deleted file mode 100644 index 3f2c423385ca4697a6c755c2ab6c47d20f33fafb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1371 zcmV-h1*G~PiwFROPpMM?1MOICbJ|7_&R6bNY-PqyrXyJrZxhlmCV(5awjdbSlW9AQ zEFGX2bjqEGLZ?5zdjbhT?9g_wGj+AR=x*|Zxjl^{cNjVW{xsL)$Il*ubX~7i zDu7R;RxK@`HC;Ya0>h}76%!jOI_O5ZTCF{U%7a+5MRO6_98HPXJf!^oe!JRN^GKin z5gKi-f2JBR5$;C^`lDJd-@pFlN_oBhr7Fl~(|88@e$;=R{^#p|00*iHTgwirdO!|9 zusL@qgcAxgTj1>Blg(k|O({eZ>Vp>^3E9di`4!X=XxgzB2Df7kyJ@Qtzr*2SBIu6x zO)Vis-8*!o0^-ga;y0RzoPo<=fsH8G<}QnThy`iV5{J!Z%-6((+++#vl7R@q37}c81zN_$6@uD z@jn;ap$j9%!Sho%@a!8@8Q4O2{`jB50O|ERuNA3UQBV z&w?q{5E`(rvqI=p(4=m$ z5G1caKYJk)7W4Rj4Epl?=kzH>|JGSQ zrs0s=zRPCAfbkGal8x!t#r~>9;#44JJ%65Z;d?M%yjaEQ=D=)CfktE7kmZ=Q)TDG* zU+H|@l(8owOkB`W((bA2i=ph`3sO99TbIK@=W<|O#?X|=+lF#qKqCPhvvFv^Az5WP zuZ!Pht&)sY;U1f2_ALd6`6C3z7~%wVL8Wjcj!&fO-%gH?HvDjOe3Y~gx@nKZQrY@L z)?6tX8Zf_!OQ{o92pMk)+>1B1b35jevw`eItQ;p@Rs1@MAZTPTHt|6wuUq?JgPEz^ z=?@9sTfE5jHdbjk4-&9nwyg}2{4DN&%f#}2{FlDlkB(jWU#VIH!z@)yvs|m{Wr_ds z{XfV5hbKY#C(7%jfd4m4c;TXspjbEne?C*g38%Iz>Xh0BLJA1xs#plz({=C}Dd3KxPRKaQ)UdDTO4z7_l5BqDU~=M2IAbV9QDO<)w`X)& zbD8S1Q2jWke4(bPSS*{Yuu=Vk`4r7x4MHR+BrUe{ z7%sNnZjk}q;>M?UbN=~MUeZut50g#m*2$^uP3I`~3B$$L-~aexA3Ao$f7Qsue+AEXcm#AjQGp97 zzyb$h06vC`0RN>>xN7%EztcN^5AXWWY$8^G)$R2A-9Blyf4V|6a9FSydM>%_v<7Eg z3*KEJMqq(NQB*jy3eB{oX#jOkeIziAg@)`ndVV$>Z><1VI|HUC@h dhMaQBDW{xr$|> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -6 fwd_tcp_tc6.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_tcp_tc6.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test b/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test new file mode 100644 index 000000000000..81dbea6c2419 --- /dev/null +++ b/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.test @@ -0,0 +1,26 @@ +# #-- fwd_tcp_tc6.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# do the test +echo "> streamtcp www.example.com." +$PRE/streamtcp -u -f ::1@$UNBOUND_PORT www.example.com. A IN | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns b/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns new file mode 100644 index 000000000000..0af820e01deb --- /dev/null +++ b/testdata/fwd_tcp_tc6.tdir/fwd_tcp_tc6.testns @@ -0,0 +1,26 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname UDP +REPLY QR AA TC NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname TCP +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +www IN A 10.20.30.41 +www IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/fwd_tcp_tc6.tpkg b/testdata/fwd_tcp_tc6.tpkg deleted file mode 100644 index 44348201894b461efc97b92d999ad7b4abf2a60d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1415 zcmV;21$g=&iwFRq1654`1MOICbJ|7__E+v#Y-PqyrXyM6MRb&gF#+7Ti3P#9nM~VZ zWa$9aNT=M15IX(w-4h54LQSTF$&8~NKzDn0yL)@Lk9HZ(yg}?n_%$`p=VwQcKsr*b zT9r?uR@IZfQK=-)B^?+2Gd7JWe`p@%;t&QM zmWCVWpY2DS?nQ?@U~_Ta+s@xGjq>XJtCcdIzgaR$N1*RT`wsff&;J;XRTVZ)T~&|C zF$gy0E`@kZA#emb2R@;vhW>=YY)nJ&<5M9=IVHb?Is{ES)8goEq~SDex#CYaIY|X= z8AmPXSGZ@#RKzf39Q+WHHZpzZ7F9-$5PmpXs#;&Lre$r25KZcJSrD*L6Js)>@qjy_ z$AUq`cnl?SW54R$*sVdg)9b%1_LePj@jhied$!`jk6=81PN+L(psX*<_7tesHw{^= zxtE%@w#}8!$6J|rV&-rU9VP9ac%c}`385gxw=Mg6&~IP&?Q2jYSjhv`TszLie5fN& zo3Ig->L&)AEVg&qdRhD-Ynfy$8~N{)LJ?E^P0UEyo3vJ*n1;7(8hXjSzzccnxOXEiIi%Zbzf|Pi(iBp} z&RIHD#gCf`g8Gu3b;8QdtRvQ#na);+xK6yun>qg4Q4OXMESiJ*;l!ks^v3?koy6#Fuq3;=wi2z^|7DE_4v_n~7~{-@V!8~MLkG4wqC4?$nX ze-c(tDFe(V2wSp2nbDAEF2*`ed;!I)#+x=K9h^D=y5u=oph${N%Os(GKLcj7nMOZ5 zK{TP5Y6NK-az8SUsUS%TyVB}qHdgf8i1 z6N%N5F?H|23B`@T+*kT z>?Ff$Og~@9Gz(>RG3BJ5MJ^nFGDXQx4?1?$f8ieP{I2*nG3FQXZ`6`;!>l1Bcq%?G|muG`K2WygkhH;4|{ zAXpj|F6}~NHPW!J-?w`!e&N1~(U-=w?bcV?g^;yo*P|G)Vi1PC4b2 VQ%*VMl+#nEe*t_|`ZoY5007BgvMT@p diff --git a/testdata/fwd_three.tdir/fwd_three.conf b/testdata/fwd_three.tdir/fwd_three.conf new file mode 100644 index 000000000000..f25ceb54ce63 --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.conf @@ -0,0 +1,17 @@ +server: + verbosity: 4 # old 2 + num-threads: 5 + interface: 127.0.0.1 + port: @PORT@ + outgoing-range: 2 + outgoing-num-tcp: 2 + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + num-queries-per-thread: 1 + use-syslog: no + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/fwd_three.tdir/fwd_three.dsc b/testdata/fwd_three.tdir/fwd_three.dsc new file mode 100644 index 000000000000..804697dd4886 --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_three +Version: 1.0 +Description: Forward three queries at once, using threads. +CreationDate: Tue Feb 27 14:11:44 CET 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_three.pre +Post: fwd_three.post +Test: fwd_three.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_three.tdir/fwd_three.post b/testdata/fwd_three.tdir/fwd_three.post new file mode 100644 index 000000000000..7b2971d625f6 --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.post @@ -0,0 +1,21 @@ +# #-- fwd_three.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here + +. ../common.sh +# kill fwder +kill_pid $FWD_PID + +# find all extra forked testns and kill them. +pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` +for p in $pidlist; do + kill_pid $p +done + +# kill unbound +kill_pid $UNBOUND_PID +exit 0 diff --git a/testdata/fwd_three.tdir/fwd_three.pre b/testdata/fwd_three.tdir/fwd_three.pre new file mode 100644 index 000000000000..7d522d958d89 --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.pre @@ -0,0 +1,31 @@ +# #-- fwd_three.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -f 9 fwd_three.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_three.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_three.tdir/fwd_three.test b/testdata/fwd_three.tdir/fwd_three.test new file mode 100644 index 000000000000..962d0bf1c12b --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.test @@ -0,0 +1,63 @@ +# #-- fwd_three.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www1.example.com." +dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer for single query" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> do three queries" +dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www1.example.com. >outfile1 & +digpid1=$! +dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www2.example.com. >outfile2 & +digpid2=$! +dig @localhost -p $UNBOUND_PORT +retry=10 +time=1 www3.example.com. >outfile3 & +digpid3=$! +sleep 5 +kill -9 $digpid1 +kill -9 $digpid2 +kill -9 $digpid3 + +echo "> cat outfile1" +cat outfile1 +echo "> cat outfile2" +cat outfile2 +echo "> cat outfile3" +cat outfile3 +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answers for three queries" +if grep "10.20.30.40" outfile1; then + echo "1 is OK" +else + echo "1 is not OK" + exit 1 +fi +if grep "10.20.30.50" outfile2; then + echo "2 is OK" +else + echo "2 is not OK" + exit 1 +fi +if grep "10.20.30.60" outfile3; then + echo "3 is OK" +else + echo "3 is not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_three.tdir/fwd_three.testns b/testdata/fwd_three.tdir/fwd_three.testns new file mode 100644 index 000000000000..b0b5e748bd53 --- /dev/null +++ b/testdata/fwd_three.tdir/fwd_three.testns @@ -0,0 +1,34 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + diff --git a/testdata/fwd_three.tpkg b/testdata/fwd_three.tpkg deleted file mode 100644 index 24771698daf19a989c0cf894f501dd72f2092a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1675 zcmV;626Xu!iwFRRPpMM?1MOLDbJ|7_&R6bNY%yaelOm)OFB4LGOaM1-6L2tYCewDP zEFGX4bgE7S)9H`z-bn(9Kxi|>Gj3UIq}yBV?d{#(J}ZWEXAq79#x%zbN>9ED>AGI4 zQ~<9=t!hTsnl7(P0>h}#3e~A;)Ic}N6-u8#jo@X-oj=uQ~S$IJsaJQ1=tVB}{g4nfmOTIk=6G!)a~Cw_(F<3!Ph z{_H3r!?Aaau~eXhGwL&4M9#qBu)t1KYy}RVd!Q5%O`2l!>6Ck#7^B>sJDEryph5C> z;JXeKF5b5WSC=h<{X^Gtz(N^z9|jf-d2q)ZWv(Z{!ak({&75ikpPjfOJpFAr3YZW1 zSQy#$yc|QD@Dcn40(nISC!&-RfKut?H-ZfC!S$dJ>w1Y3A-R=hK5@9mNMiWRyX7;_ zNtu4rdDXq?MCP-5Hw2w*TmNnG?+ANudu&(ym#Y;p^h(XpX-%){GXC*%i2sM6SC(KM zYs%`YGl2ZW0^xG64u+h`k`W6@L-Oi1WFG6n6bcR7y%)0&t~7kOt{`iby|+l zNE5H}xt0~8{{D=?1-k`W1EX9wj5=EU1GMXz*TZY7M-&zk4GK zM--%qN=7_b)PXel)W-nu!a8YAofh+%=LqDl?q0KrUnf^VdRm%~v44ffTYc@gBYl=- zs`H~UyT8C=NNT&X1cqy!Tv+a8hB~(f(<7v9@h^R_uQ7JSKdtCx%>NPwR1L$VQT{)~ z|AWwa{#R-BA@l!Ctfy|7UuF7B;DBr0;*dTDA)YS(76y>3Ui&mJht~2DB1n)1VfL6q z{tO&<1oQda(Ad2-^(Rb2Xn?|!eLmr~H5n^Rq;BZ9E<^ z=S!Z*6WK~ofNI3qTQXLUjG29hz(UN?h0+^x=9B2aUF3;7ga}(0x<+-))U~pnPsV*I zC+Lw}q^tX5p0J5vNxQ>Cki49N1qKiO+66BfI+ya0RSyLB;ew-G`qluB;T(tYW%J zG5yDit1HE3RlE0mUNRlTP2f0Z8c|3i>q z!AAt$B!}O(T(}_u>@pkypEy8C&YMk(F`lpExtBwf&Vr$3Bd|7TP1EsXkets01kmU5 zbUi0IbkvAr!YT%qH$p+0Vkv#Lub8;um>nuepU1euQ&I*bHj;A*Imoxi0q0>PgJ2=> zRJ9^oQdxX16@3=OhN5LkuqYM+PqsQnE{?^E7{E$;QC#K*)i;c4n&O{WQlKAV^#}lR zNsr|?SeE3M6Fxuhchy|;k2>@feGdP7Vn1W-eE(O~m-t^dt1|wv064_|L(of*8$LP( zBE+r0YoXh_{Qj~7X;4H8{r(#;tGZ4|yVLJ|7`$qu40+q=H(vwyZSEjW2p2wnOQodO zzIyWk-u0l-fKIpF>vemi(fZ-$x(_z@7X#NJ*X?HivfF`oH|=YALnMIAU3PMfWmltf z{l48>b>vdOBetX6X?D7UJ=58?vNLStc3r%@(_+)*S;`8eoa7^2F+A42AxF zIWL`Ld~s4bN%|wqq$Cn+W$$;8Ejr)~X1D5Y>4z8(s$GHG@z%2MMuGatBmHuxfQ?cj zTEss)Q3PkHN;h#q>Nk>=8#2sPW1~A{3BAUfTW)5d1~We?xud?=5Xnzh-;W> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -f 9 fwd_three_service.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_three_service.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_three_service.tdir/fwd_three_service.test b/testdata/fwd_three_service.tdir/fwd_three_service.test new file mode 100644 index 000000000000..6c5e34a7c305 --- /dev/null +++ b/testdata/fwd_three_service.tdir/fwd_three_service.test @@ -0,0 +1,63 @@ +# #-- fwd_three_service.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www1.example.com." +dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer for single query" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> do three queries" +dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & +digpid1=$! +dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & +digpid2=$! +dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & +digpid3=$! +sleep 5 +kill -9 $digpid1 +kill -9 $digpid2 +kill -9 $digpid3 + +echo "> cat outfile1" +cat outfile1 +echo "> cat outfile2" +cat outfile2 +echo "> cat outfile3" +cat outfile3 +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answers for three queries" +if grep "10.20.30.40" outfile1; then + echo "1 is OK" +else + echo "1 is not OK" + exit 1 +fi +if grep "10.20.30.50" outfile2; then + echo "2 is OK" +else + echo "2 is not OK" + exit 1 +fi +if grep "10.20.30.60" outfile3; then + echo "3 is OK" +else + echo "3 is not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_three_service.tdir/fwd_three_service.testns b/testdata/fwd_three_service.tdir/fwd_three_service.testns new file mode 100644 index 000000000000..787e25f608c2 --- /dev/null +++ b/testdata/fwd_three_service.tdir/fwd_three_service.testns @@ -0,0 +1,34 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + diff --git a/testdata/fwd_three_service.tpkg b/testdata/fwd_three_service.tpkg deleted file mode 100644 index 949cdcefa232960131e2bbc777e685d77e003646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 zcmV-+28sC}iwFRUPpMM?1ML|7ciJ|vzoNh5MtDj4HjF>OtaRap0$H=QkP@=IzHN^> zwjf@>@+?!5z5ek#3EN;|8kU#R*N)4FrMuJJ>7=`pG@Lnu@G78mz-jQowW;E`LFvh( zf~u<3N(Jz%RZV05t*YXi0BBl8ujs0-V_Vfs-O!#u<#El(hA9uN08N>(X-I?heD~3# zc_iPj1csUGpMmA}gLR-k%yN1C`d17MG}Tn~vT2qL18^6V#rms{IM224KVScs7N;F+ zLThkm&B<>x;4brOpeZV8QEmsWA4QPl-?;Eff4{v&9Wnr_x~4VvwIM?#@!HuN+&sQIw{U$7dN*?au|^`7+N+4k)~G_6@L)xvjBtR z=(OAGACVk7Xv8q^i-F~hs1$>HiQ1uz)O;TKU1x~#f}N>%$)=v8AO`XFRlry{=b55K zo=ixhC+vvQOVOu6WD^>J#X|BH`7Ix_Q4KtX>R8cZp&W2q95dS*U&+`;+Hjt+ivM7; zz}ZF`6jTvYEXTowlTW61bky(4ndQHhSbhj>8vi2SJygd%@voP46Bo3qR!qIDsTCRj zWpx+-+kidTD;C$(Hz*eO$R2Pu4Qx@$DNHPmPJj_K#UF#B6`dDZ&$waEs15#R2BtlMm z?ZdoKjWNFm4wLhdBx+wV$k)MfM=+bsG=<(+6Mrmf-UOKi`Y1^zQ1qd2-g((Q@3aOY zJ=`4vA5ks^+%LjMiFg~2N0_Muj^~N!q1P3}fb7H>5fO_aSJb`+%i}Y2q40*7`FMWd zy3G@J2%~`dn6p$xR~185%4$B=`$A06Be}V(?yq@5$DGFf4huoxa`eUxF~JXAvhV{- zpX(mtf_h|y2K!<(rg`nK@ZBbY^lU+TB1qp*kdZCONCX)|5Fbjn#LNC^V3G)5H}Qbl(2j3czhrjJWdL)Tb;8( zzkSy4oXH{>%Mm*lPRkE7B-$|nbM*^Ot;8=;wUfI9x96p0UylNT zNgehI*eS)VMf|m6K~P_+m$54nYnR=TLN0YO-69I{3T|e(sf8O%{kU+?X^|lUzg)vV ze<9j9|Fh3_|5K|KZIS?w&nZZl9o8-e@e&3sef;N+q*>~3dS_bW*$gE zD>VW6BG` z;ryr?F(bN`PY&%LVUaMG7@$--crTu;z!%A_5XpLh6Ct^UWj=A3M-#)N#Ia=hQl?s$ zN&d_GkH;Uj$L>4-;ZO4ZqZ;D<*U-%JF8;RxFF-tn&R>D&fhX&Dq1!w8`J@BOS7=h` z_g{lyswyGvPQUkV@Uo3O@Yypwn&ldfgsr zw0=21>*JZhza8KfmDle>ot(9s{gZA7-k#%G1{*{?DdbK%xkf^2bj~i?y#*n+bX|?? zX?I%NF->1*n!aLMW$UIH>r69NOfyraed&F;gB|Q(2Rqoo4z>sX0_oPdSpX;i0AX!8 AXaE2J diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.conf b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.conf new file mode 100644 index 000000000000..9cd19c0d9d1c --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.conf @@ -0,0 +1,15 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc new file mode 100644 index 000000000000..da67fda12144 --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_ttlexpire +Version: 1.0 +Description: forward UDP and TTL expires in the cache +CreationDate: Wed May 9 11:08:02 CEST 2007 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_ttlexpire.pre +Post: fwd_ttlexpire.post +Test: fwd_ttlexpire.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.post b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.post new file mode 100644 index 000000000000..3cc0061c8f2a --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.post @@ -0,0 +1,11 @@ +# #-- fwd_ttlexpire.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre new file mode 100644 index 000000000000..99e096ca5a2e --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.pre @@ -0,0 +1,31 @@ +# #-- fwd_ttlexpire.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_ttlexpire.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_ttlexpire.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.test b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.test new file mode 100644 index 000000000000..41ea3953ccb6 --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.test @@ -0,0 +1,35 @@ +# #-- fwd_ttlexpire.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +# wait for query to expire. +sleep 4 +# query again +rm outfile +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +echo "> cat logfiles" +cat fwd.log +cat unbound.log + +exit 0 diff --git a/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.testns b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.testns new file mode 100644 index 000000000000..38fbfa58ced1 --- /dev/null +++ b/testdata/fwd_ttlexpire.tdir/fwd_ttlexpire.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www 2 IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_ttlexpire.tpkg b/testdata/fwd_ttlexpire.tpkg deleted file mode 100644 index 1111d8e52aee692e49d9dc9d72d8d2417b5043c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1403 zcmV->1%&z^iwFRXPpMM?1MOJTA+k1*V}fS zV+(L&ELSom?Dog+Nwx`u^w=&rdg=V~#nzMb^d$Lx-k0&h8^v)zZz7*l-SheJvqvYx zFlx39_%v(Pa`LPh^0^`~P1~|9!>W`kV3>BLTz&@jUz9Hyr;{)EHB zOwc|3o2$eW*WR(lN`M-?A%3Ha$Q^hLme`4c9qzG32uhGHHF4Q&#zI|8$+aH@qsaH5 z^!lYugOI2Ya1-bFXzlCOPTk50SnU!G$q9=66V`!Aaom`2qy%0{hb+S2}QJGcM6 z&`SuN85NX&raUn|X?Ud68=U=o)&+Xw%%XtmXev4>4To=`Tr~_rI^E&m!|1ewW5~Pa zu=NI5W zf6+OYFJ!S;6wbPZ=BlUJJ-_S>6yH)k1=G+iLoXY8#Ypw&biYN@+zaipf0u>hhpw^H z{;TN!t+I_yzgA7`-!jbH{`WzN<=068|6eiT$ICicq;LS?e5S=yP90Cw!6XGg#O;qA zmtxDR=?4BFH)1@l!%4q47@m;ATu@CcMZhL?2pK8h=S1C@agI4SFK zJdY!5rR~Ydu%{F)=3ud+UH0z@_rYuIvVYq!SN^|hSET)8#+cjxKIqgDw5x1q4SxLP2M?(FZhR01RmGnQg7)^eE1*3iG!;N(n2W{1tp}#W)WI_ z7}rT_=Cx@=LkUvk_U#P~qB`mGyW7$u+*)5j$acy@hIG3_K`8VL>Yx9X*s}m zu5if+jn5A!|FsN2`h(7^qFfro162{oDh-6XQwGHbc>V-1#n9LDog$IklU3LOTC`RT zz(8Va2Kk7_%Q}$V;{G(aQx)BRFniUOVL;-BA~cV1;->^&IA#b@Y$AvPj>gKHJlhQ z>Xb4>k;oQ)(K>QKHL`FM8HA|W##6`b$D*C}Urryq#xDG?n$_F-uW73I&$4p--v`}W z|K;>sLjOCp-U*FI90ON28_Dbyv)y%6dsP~wZ$y=X73=x)6&Jn-^Tmr4cs3`lw~Ekc z+*Kr*b1OA_yKk&KeEcrsEZW9{l6nVTC`L(1mXzMMyXT`JhS1$}1 z)i^Zakfep~SEcXP6_bqgz?;GG%4&Pq1Bcf(Fd5)Z6MPQWVdUj4Q{zo^Z+8@b4vT9A`r{{B<)y&{*>W*)gnD z_ivA4gSpnY_ei9Jxx> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_udp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_udp.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_udp.tdir/fwd_udp.test b/testdata/fwd_udp.tdir/fwd_udp.test new file mode 100644 index 000000000000..9bd37adb3a7a --- /dev/null +++ b/testdata/fwd_udp.tdir/fwd_udp.test @@ -0,0 +1,22 @@ +# #-- fwd_udp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_udp.tdir/fwd_udp.testns b/testdata/fwd_udp.tdir/fwd_udp.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/fwd_udp.tdir/fwd_udp.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_udp.tpkg b/testdata/fwd_udp.tpkg deleted file mode 100644 index 4fd67469978d75dc58e95f70f05811a9ba98e772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1359 zcmV-V1+e-biwFSKG^kSm1MOICbJ|7_&R6bNY{6qE(~+zf1XI#5CV(5ajvyGiPWm*=K^LX-&%l z{OZkyx%oCV`ON{kZW)%L8BMbRnqD__?HO2~OQ9lS5jh-HS+O{x{QiCqwWssQzh4NZ zh5gUUA*YWj1J|Qbuiv}>y49@T?!Teo{x?hu_g{NdE$+crzW+6-DGC&JUQueK27<-h zr4Y?2EFFOphmQ`2slTAGn$rOM=t#&`PRTEzOhHwT)hN7~sn|_TNBjndhZ&~D9(S$pJ$Ci_j z@dylZX}=y^+P%qeFdDx)7^Nk0dXg%^m4><|cYaNe^oCgc9a*uDTIgq&Z#kDHFr#=5#-GcekR zIvj51b=G@z@J&%ANk|L#D718LD7Y+``m^K=5J5dqC>)976DjxCljEbUML0S>%G$?+ zyho;{Z2dmhRq};4#MenFpMD%%vpDdQ!+@vo+Hr4YTvEtz)PGf#2THAy1FRfpT^0Ow zGe*!($;Ac8bu2Ez7O_y-xfre!-KDJ@e`|jxaR}+cZ`x8tB)y;$A^)}QOYHLhn`u0r zj0gO`X6ktVYgWU+Lfw@9zo|9M(*N%RFClQ2R8amAJ@&=}O9MX`jLv>Ivw?ncmf?b; zMJ-iwFdm1+rSLDra`3lecv2i>v-9r&n}MH8j=K z)Vh{x(YJg54_o>YvCICY`+Q6p588jD3A$lo_-CREsLS}z(yY?{_koS&w@3y5Uo+uH z>lRp~QiC8~D$$%%#}h5kNyQIv`cucHSTmZchCfJ^aa0SEAmD^lFrHJyTHxi@f`E|< z9xCcaj3du#6+8Q$bS_xQu0f!U!KL%q)I6pHEK)wil&_TqbDhPUi6~*7 zhDXXDETE`kGm|1o7eWdF^EmD|6e>xuoFrTy;( z+xcG-06e7(u$U{Kpcs3y5XmXRfuVm6QunN#-$oItE7uM&R>GfqSFVz*&WH52nv&L$w0&CtP5 zRYDhnW_6oIAZZo)$&b*3Pklm?qE_^NJKulUe(k?*72p4i#Qy6>Y5)7co%bKMXZtTm z$qfFVWc+KxuWhV-jg80{qXD)GAYpXpP3Xp7EG8I+K=uSupcLK$o@~Id%l<;YA3OCy8Gm3%7xDY4D(fu^r&#TA4Un`bQ4(PPUE4UMqo0jE*S1N?-GwMx2}HOLV?Cqlkg)Pqxc4bTMbyOyT63=6vbF&G&5k+%-! z75IlK2zXqDE48b3@Z> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -f 9 fwd_udptmout.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_udptmout.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_udptmout.tdir/fwd_udptmout.test b/testdata/fwd_udptmout.tdir/fwd_udptmout.test new file mode 100644 index 000000000000..8d89961047bc --- /dev/null +++ b/testdata/fwd_udptmout.tdir/fwd_udptmout.test @@ -0,0 +1,110 @@ +# #-- fwd_udptmout.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test + +# skip the single query test +# so that all three queries get timeouts during the later test. +# +#echo "> dig www1.example.com." +#dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile +#echo "> cat logfiles" +#cat fwd.log +#cat unbound.log +#echo "> check answer for single query" +#if grep "10.20.30.40" outfile; then + #echo "OK" +#else + #echo "Not OK" + #exit 1 +#fi + +echo "> do queries" +dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & +digpid1=$! +dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & +digpid2=$! +dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & +digpid3=$! +dig @localhost -p $UNBOUND_PORT www4.example.com. >outfile4 & +digpid4=$! +dig @localhost -p $UNBOUND_PORT www5.example.com. >outfile5 & +digpid5=$! +dig @localhost -p $UNBOUND_PORT www6.example.com. >outfile6 & +digpid6=$! + +sleep 15 + +# some slow systems need more for processing +if grep "10.20.30.40" outfile1 >/dev/null; then :; else sleep 2; fi +if grep "10.20.30.50" outfile2 >/dev/null; then :; else sleep 2; fi +if grep "10.20.30.60" outfile3 >/dev/null; then :; else sleep 2; fi +if grep "10.20.30.70" outfile4 >/dev/null; then :; else sleep 2; fi +if grep "10.20.30.80" outfile5 >/dev/null; then :; else sleep 2; fi +if grep "10.20.30.90" outfile6 >/dev/null; then :; else sleep 2; fi + +kill -9 $digpid1 +kill -9 $digpid2 +kill -9 $digpid3 +kill -9 $digpid4 +kill -9 $digpid5 +kill -9 $digpid6 + +echo "> cat outfile1" +cat outfile1 +echo "> cat outfile2" +cat outfile2 +echo "> cat outfile3" +cat outfile3 +echo "> cat outfile4" +cat outfile4 +echo "> cat outfile5" +cat outfile5 +echo "> cat outfile6" +cat outfile6 +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answers for queries" +if grep "10.20.30.40" outfile1; then + echo "1 is OK" +else + echo "1 is not OK" + exit 1 +fi +if grep "10.20.30.50" outfile2; then + echo "2 is OK" +else + echo "2 is not OK" + exit 1 +fi +if grep "10.20.30.60" outfile3; then + echo "3 is OK" +else + echo "3 is not OK" + exit 1 +fi +if grep "10.20.30.70" outfile4; then + echo "4 is OK" +else + echo "4 is not OK" + exit 1 +fi +if grep "10.20.30.80" outfile5; then + echo "5 is OK" +else + echo "5 is not OK" + exit 1 +fi +if grep "10.20.30.90" outfile6; then + echo "6 is OK" +else + echo "6 is not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_udptmout.tdir/fwd_udptmout.testns b/testdata/fwd_udptmout.tdir/fwd_udptmout.testns new file mode 100644 index 000000000000..bfccf9d71567 --- /dev/null +++ b/testdata/fwd_udptmout.tdir/fwd_udptmout.testns @@ -0,0 +1,64 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www4 IN A +SECTION ANSWER +www4 IN A 10.20.30.70 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www5 IN A +SECTION ANSWER +www5 IN A 10.20.30.80 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=2 +SECTION QUESTION +www6 IN A +SECTION ANSWER +www6 IN A 10.20.30.90 +ENTRY_END + diff --git a/testdata/fwd_udptmout.tpkg b/testdata/fwd_udptmout.tpkg deleted file mode 100644 index 0c476320098ebe3e29bc8688c480b8074fff1675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1971 zcmV;k2Tb@MiwFRbPpMM?1MOM+bJ|D}&acd0(TAycx2_O+li;(<#3r}CO|Tb}OKt64 zu`(J!XV7RR5#p=;AKk#^RKIR+j<7-=Qq6@|L5}`(eMKe zJEVsH-?7MxA39)?n!j8$<5@@@H|l^!YMzgspEzTRZ+cr%@efJ^7RDVozquX^&q)mj zXv#c)+6*0kii!rQ;ew*$n1x7MucN-_PP{o5)tCMqTl%ho5|oc;A!Bi(vqX!0XF-!U zZpSZ68hSKp1~g1$Lh5l{PnOr!Yo+t}g%rrkC%{$<8L z-2dCU^#6n42#%Ufcr@wIY#xy#h}be5Q;2627EXlyhYwB&+=pQ`qds`?al}hQN`8Xo z1QeyE#KHYkK{X|<@o#wkJR_(CgLp=v=iFhFffGd-U(%+^6-up? ziU_$G^iJ!%X>|7^aGB^&QiNT+_W~i{)Yym!9!V+hKNdMLIP*F1(32EnFoG$KA@&v& z2P^`28DeF@GIw~Nd3A;02-5M4LH!I|Zwjl`N>k`ZXA#UP?yL)L4VRzikqVjtG~V@J zUBByJj(F^OTnBzdathcipM`Y;W3&?EAQwi+%U^L)6%;}8mPK5Y6l%@r_#PZTTA|T= z%!`A7G~NWJAq_Aps*0{EhN_rqJ!|}gci1Pjl0X2D487_hC3ojnLpZuZ{bNcG~#MK16yok)9LjdlDJdL`F_z>`7!+6PY=YxhIiT zO=RUn)}BOmHIbbY*_?<(bBc>YvxFb91^UpOtpIoAm@XplDRp7NLMm2P5VA2%{P)RK zrNLRtr5{@Uaz0O17<5j6uPaEJ(@!t}Rd85q4*gR(>@|n+sT}P!hxw@-FV-B^r*gbp zbJ+WFkb4i~T=OL~Qjgjc=$is#Q($fitWANvjsQF?WwTx<#W$$Z(MvjdrH)b3F{)I| zl8RZSVwF^^Diyn=Vw37PTnfXRQMf7yN5WU~xcIcEWC1uK(!h&ExJ_bkLFi|3I1R%) z-KR{fR}t%b6Bm7|Ol(vU8+#KM9j#1kRuP+f6BoU&Ol(yVTYD21U9wDUR}tG=h>3Vq zzsRxV>HI%n2gv``wrQ;Ie^guK|Ar>>|3jc6{}0%K^Z!CCS;GHR8+#}IM@hE-fQ3km zXMDEuK@ch25=?Ct%vYirs)HBkBMjYcLV#8-6oPf>~LWHs=h2yAIP=HqJ_-7*WC4T;C zq+BQ14^mrO77&;Dlw^jdyGp_IJfTDLpPc`v{ojqoUto>x@_$QhqyKX)O}8v@{zjo*&~s8g{@96?m^) zC|&&V{^L&_Y!}&(Wh$-|$pu>k=m&n>Ar}kxk_Oc0_myP*^c|fC9dZ+H^iK&e2;7Lf z!AGHw4Cy1e2q)d;$JacqL)sfBLig>E*N!(|BKaTphH%IJAJQ+-#t#42Y<>Ox$FfY} z|9V^c{~=Jd|A+L?bo;ll*H39Y3Nb{n#fX2t0G$*sKTaEi^ofYwUx>c>CYQorLHqXG z^ypTuSbVF)+1aKcNu4!o_Ee?I2OpQE7zrM2aiF-}bJveXNzy?YZ!Y_{qag;){;jyf z$@uv2ynGzKFi$zlk`MjtIlnhc^BaDZQ!tJT(uXakEu4D_{L`Q}6{~@)QyK9s=wIip z(w~n*&Usvv@0}UDf4}lZlpF)$bz)8Rr9^JSeT>bs355;R>(ijfkfMKgD zA-(=^@Z;!J4|T}f?(pI}V8NKV6n=>x0{owol0on0&5!WI0J>f1U-t%s>jCLr{^K3y zdSezmjPRf$t{+cza@)HYUS0R$hj$pz@PY6f|Jqf**3FB${oD7w!MdPUxD!k5>GdxU zW17CrG=0M~>)@st+e|YyOtTMenz_w1bHlXu!A-NanPzR6_Tu2C+1pIBH%xn3GVS*c zED{nD5)u*;5)u*;5)u*;5)u*;5)u*;5)u*;5)u*;5)u*;5)u*;5)xkpzX1<6tl$7p F003L+&1(Pv diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.conf b/testdata/fwd_waitudp.tdir/fwd_waitudp.conf new file mode 100644 index 000000000000..91eaf7d06f0c --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.conf @@ -0,0 +1,16 @@ +server: + verbosity: 4 + num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + outgoing-range: 1 + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + num-queries-per-thread: 1024 + use-syslog: no + do-not-query-localhost: no +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.dsc b/testdata/fwd_waitudp.tdir/fwd_waitudp.dsc new file mode 100644 index 000000000000..5c310ac1a03d --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.dsc @@ -0,0 +1,16 @@ +BaseName: fwd_waitudp +Version: 1.0 +Description: Forward 3 queries, 1thr, 1fd and force a udp wait list. +CreationDate: Mon Apr 14 10:03:28 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: fwd_waitudp.pre +Post: fwd_waitudp.post +Test: fwd_waitudp.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.post b/testdata/fwd_waitudp.tdir/fwd_waitudp.post new file mode 100644 index 000000000000..fedf97a41641 --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.post @@ -0,0 +1,21 @@ +# #-- fwd_waitudp.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh + +# kill fwder +kill_pid $FWD_PID + +# find all extra forked testns and kill them. +pidlist=`fgrep "forked pid:" fwd.log | sed -e 's/forked pid: //'` +for p in $pidlist; do + kill_pid $p +done + +# kill unbound +kill_pid $UNBOUND_PID +exit 0 diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.pre b/testdata/fwd_waitudp.tdir/fwd_waitudp.pre new file mode 100644 index 000000000000..ab7a886eeb88 --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.pre @@ -0,0 +1,31 @@ +# #-- fwd_waitudp.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT -f 9 fwd_waitudp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_waitudp.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.test b/testdata/fwd_waitudp.tdir/fwd_waitudp.test new file mode 100644 index 000000000000..1247885348ac --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.test @@ -0,0 +1,67 @@ +# #-- fwd_waitudp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test + +# skip the single query test +# so that all three queries get timeouts during the later test. +# +#echo "> dig www1.example.com." +#dig @localhost -p $UNBOUND_PORT www1.example.com. | tee outfile +#echo "> cat logfiles" +#cat fwd.log +#cat unbound.log +#echo "> check answer for single query" +#if grep "10.20.30.40" outfile; then + #echo "OK" +#else + #echo "Not OK" + #exit 1 +#fi + +echo "> do three queries" +dig @localhost -p $UNBOUND_PORT www1.example.com. >outfile1 & +digpid1=$! +dig @localhost -p $UNBOUND_PORT www2.example.com. >outfile2 & +digpid2=$! +dig @localhost -p $UNBOUND_PORT www3.example.com. >outfile3 & +digpid3=$! +sleep 15 +kill -9 $digpid1 +kill -9 $digpid2 +kill -9 $digpid3 + +echo "> cat outfile1" +cat outfile1 +echo "> cat outfile2" +cat outfile2 +echo "> cat outfile3" +cat outfile3 +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answers for three queries" +if grep "10.20.30.40" outfile1; then + echo "1 is OK" +else + echo "1 is not OK" + exit 1 +fi +if grep "10.20.30.50" outfile2; then + echo "2 is OK" +else + echo "2 is not OK" + exit 1 +fi +if grep "10.20.30.60" outfile3; then + echo "3 is OK" +else + echo "3 is not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_waitudp.tdir/fwd_waitudp.testns b/testdata/fwd_waitudp.tdir/fwd_waitudp.testns new file mode 100644 index 000000000000..e1e1ea8c4e01 --- /dev/null +++ b/testdata/fwd_waitudp.tdir/fwd_waitudp.testns @@ -0,0 +1,34 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www1 IN A +SECTION ANSWER +www1 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.50 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=1 +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.60 +ENTRY_END + diff --git a/testdata/fwd_waitudp.tpkg b/testdata/fwd_waitudp.tpkg deleted file mode 100644 index db3cd8ea67da64656e7205e1df3421475e49c186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1724 zcmV;t21EHDiwFRgPpMM?1MOLHbJ{i(@4x6%yb&&GZ^PI!hL$c|D3CQuo#g z*aEzOsMlQWpP{h94WQ#a6DFDyOy0!7#L zs$~Iw8`X*#e^+(+JuhGw7PY8u>SYSLVd<6f1F*h?GOJ}OB0EG?W_%j4@b-S2+LLw6 zzyBj;uyX#{dc;KJi_f0}_oGrS-+KNA{^0o=rctJbQ8huQdc`y!fd2VYZ!Z7y^M4Ay zJz;`{A6N+Tz+vEx87Z80PkuV-0K2j$!I)_dpJ=4e>%9Q8qU(gTJH77P{OT=zW}#F(+*&>-jS zX7A**1Fv4U&*cM|&1OdKq?2pRn;M<-H|_4CA!q0s)iqPs%6g(tyVKf^YVSiaQ_Wmat+J%r*S5o5`8wq;{tvi_?qiM({Ex{2UBrL0EcxFwtR4SvqwK+6u?VZD z4#nag*#p6+p~D~=F__o_mk%H8Pz4B>jhGK!bRcAF$jEO{9Dt^kv?#b7YS>LnM*IQ$ z`zg?x_T^br0NOCe96)tmf?sMPas@7jYivYdJ9PQX2L+@_O)#WQxUY#3!G4$Ccr14T z6_Str09m$h{HE1EJ88-Gf#66`rA!AXl@8t!6hHu;4}}ElDK3QM7Mcab(t~UgkxN6ya z8nuz~qcL~v@kp_5kn!BpZtvz8(43(C9p4|k5@dgl6SSHoZr;|UG3-(DaK|B2g2e7eVb4iCsAf;HB3}leKfk()E zOZf7Z=Er{b0AX!se~O2OEEMQpFkl| zcU3@F1?FPMyF>C;%bodu$nIs1 zP49myhPBB54PC~6L$B`Q|2E2+{6A#hQuJTR^)YbwLrmEDq#y7w0!p%sepu)xPedjE zO7!sITngWV@#s;)dCLQ{wLH}8tBS;97O3gdy1sJr(JIwW%<$rZ8zuD~yT0hhcMei` z(dwM{d+qaH=UfG*6i;r?lN$*g-csr*h12@J44BF7Muw-1Zc>mu+@jgUzGUEVe}KVJ zB_WH8%#l>!_oLFm(rz4-4$}7C>AXj(uWbEsNneQ#b(mhLr}V`LB^2eqM0lMb|Yblbk=D z6lMNqyP}3UOV0Cg@dMjoSff=<#~+kR2Caee`XiFV4H|N!=pyp#kf~v4QOt>Wh@g4Q zfH0qxjDeNZ>`{VpXB2WC#eFaygz`OjT$6ev8DueFVWJaa>$I%;7R9wd->G4mh12mO zW?O2&b#b1ztG0wmi+^#S;cAl^kT7y-i|x80iss8ZO4#Zs|8L0CzEru(|6SqS%N(2h z-%|hoQ}2JUN&Wv%x5_*J-$r?63)WH2kU4qsE8gKe?xUY+I%zTCgkBIS!Ex*@V5S$l zAHYDT#Lt1NUWB4MVHRcs!hnPW`TkNPP4rud(6S?(>m~Q05rklr(UWVsS)-4kiMb5m z$v-A9ZKNCgLtX+m)ZmTQ)EfBZ{pk;FoLrD5q6`(SkS3o5=+k~wBh881Vgd6dXOYFz zb2biYdl=H>Ov|@X_Z#+fhZ> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT fwd_zero.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < fwd_zero.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/fwd_zero.tdir/fwd_zero.test b/testdata/fwd_zero.tdir/fwd_zero.test new file mode 100644 index 000000000000..87a2dec9c323 --- /dev/null +++ b/testdata/fwd_zero.tdir/fwd_zero.test @@ -0,0 +1,32 @@ +# #-- fwd_zero.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +OPT="-i" +if nc -h 2>&1 | grep -- "-w secs" >/dev/null; then + OPT="-w" +fi + +# send query with qname but not qtype , qclass (malformed query) +echo "> nc www.example.com. (malformed)" +echo "b4380100000100000000000003777777076578616d706c6503636f6d00" | xxd -r -p | nc -un $OPT 2 127.0.0.1 $UNBOUND_PORT 2>/dev/null | xxd | tee outfile + +# now test that server is still up +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/fwd_zero.tdir/fwd_zero.testns b/testdata/fwd_zero.tdir/fwd_zero.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/fwd_zero.tdir/fwd_zero.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/fwd_zero.tpkg b/testdata/fwd_zero.tpkg deleted file mode 100644 index bff17baa99d3ca16d2b538fa0596288b8a534532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1545 zcmV+k2KMuo#E z*aEzOYvG;9g0L~1!zjlqmTtR_q(k<^<(?}Mrf9w z|7|5?BD^~t7!R{nyK(-tx?v{sU&lYaMsfZd8m&D5dUqz=O#k!w--A6xft`s5McE^J zAb1qm48jG2l_k)3cy9$TbC(R_1@piS4}@$D82KHP8K`Pi4gIsZirv(7#GkOgp9#9A z9koOPTej>({fr0TdXSWn=~`1%>03g$-aJ*cJ77o4P7@)+QSY!URjXw}2E*}TS#it6 zoq=bAvH-ocufa!{2h2yep{&Fpm@UfCsygg_)r*$Pr_xD}KuQ}Kahc3qBBR7S2hJlF ztRZ&81)O`v)*`YYNpemrft@#VH)PlbSN#OmlqcfC;=!w zmZkfV2NiS&bliOnmEw;EmDB#S!D+uc84gC+av6qn{70M@2DlgGLXZLQc)XdaaAAcQ zj^I7cyDLD1E)I(Pt&5I3|HQ{Kk=&ytx2@%Z%cbXEvEY-a>>7{>w^8?!&m~WkiLBw0 zR*?fqCGw^`@)E}7kOi~P!16@Qf@DP`i=eDgRi~;!)f&buRg*4((q`!3SDcQeU|GG7 z6D@fqcHxGgB?}`dQu3vD_w95&{`&#DLmju`f1?4KR@dt~H8jmc{5KnhR^b1A&=vg0 ziT|F^UzK_hHdfqI#e&RPI0-Dz;j4+ygAjC*$C|^+C@qoaZ!^}zhg&ZE2->3zvUdmO zYj}3Ft{So#b15||UDsCzAD3hjiP#Dp43xBc>3CuyJ9vUrUUmB?lX354+&@VmGn2P_ zkb44J84M-|-Tub0xwxK4mq;2EYcI1tq%srZkh>cLJF z4yp%P`*^VJk=ZF*f4($U3WgR$)1*swd}KbAUQjydIc-htgC{*b|wf~ zIo!`8ur)Ftg&k(Da&0u^fpUcxTkg&bO(H)#fHrNZA(Edzi@y8;aXtRa=-r);Tks!~ z6vThssO!4C0BSP-#|vYD|Mx+ggsn+R_&jF9zYKA?M1+O zxaor;0+~W@Y7SR0jaHImS=nZZiSQI1l@HuwXnr~d@t~BoSdJ4QYisRMibO}{uVCMO zEp$Wv$M5m}PiuAUGXFD-S}`~P0(YW~OX`Tn2NlBInAq~l+we$oSn!x|e=Fv0h_t&ePfx~pmGIXS*C8jp&iHuHhc~BqnZW{y8zYC^O+}aDCDyAf-U_f83s9@> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT hostsfileosx.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log + diff --git a/testdata/hostsfileosx.tdir/hostsfileosx.test b/testdata/hostsfileosx.tdir/hostsfileosx.test new file mode 100644 index 000000000000..96606094ab43 --- /dev/null +++ b/testdata/hostsfileosx.tdir/hostsfileosx.test @@ -0,0 +1,63 @@ +# #-- hostsfileosx.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# test if fwder is up +echo "> dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile" +dig @127.0.0.1 -p $FWD_PORT www.example.com | tee outfile +if grep "10.20.30.40" outfile; then + echo "fwder is up" +else + cat fwd.log + echo "fwder not up" + exit 1 +fi +rm outfile + +# create asynclook +get_make +echo "> (cd $PRE ; $MAKE asynclook)" +(cd $PRE ; $MAKE asynclook) +if test ! -x $PRE/asynclook; then + echo "cannot build asynclook test program" + exit 1 +fi +(cd $PRE ; $MAKE lock-verify) + +# check the locks. +function locktest() { + if test -x $PRE/lock-verify -a -f ublocktrace.0; then + $PRE/lock-verify ublocktrace.* + if test $? -ne 0; then + echo "lock-verify error" + exit 1 + fi + fi +} + + +THR="" +if grep "undef HAVE_FORK" $PRE/config.h; then + THR="-t" +fi + +# test hosts reading (directed at local auth info) +echo '> $PRE/asynclook $THR -H hostsfileosx.hosts virtual.virtual.virtual.local 2>&1 | tee outfile' +$PRE/asynclook $THR -H hostsfileosx.hosts virtual.virtual.virtual.local 2>&1 | tee outfile +if grep "virtual.virtual.virtual.local: 10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +locktest +rm outfile + +echo "> cat logfiles" +cat fwd.log +exit 0 diff --git a/testdata/hostsfileosx.tdir/hostsfileosx.testns b/testdata/hostsfileosx.tdir/hostsfileosx.testns new file mode 100644 index 000000000000..6245ae164172 --- /dev/null +++ b/testdata/hostsfileosx.tdir/hostsfileosx.testns @@ -0,0 +1,35 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +; for priming query +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +@ IN NS +SECTION ANSWER +@ IN NS 127.0.0.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/hostsfileosx.tpkg b/testdata/hostsfileosx.tpkg deleted file mode 100644 index 05ab7c233985dc1c838ce2bd6a7c268cc6475851..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1642 zcmV-w29^0AiwFP!2USe~1ML}UbJ|AKU)f*rf~k*oP$Y3Bc&rzm&I&J77M7eQV(>-~U}W!##!?jcJ!g zjO>zKXb*S<$^{@Ah{SWj5kX9O0P%nUbzRA#h($mH7pTXny6*`Io^YrK+GP-v#>goe zP|5IN!p{I`vCyLqgMEKwxWY%S`_N^c7{ZXp11(`Z98jNu=)p)N5;^(Q8SsD^s9?El z!Cj!`EAjI?VVM8u`QI*zQQaXUO)zFrFH5c-=P;&6rU9 z0(*N?Mt96FONklEUL#}1KqD`)Uz*aj%oVzVAY&?BF$_R6GL$Bc@O=>&(STfY&+CNT zh0N*uTIce-_VuL1`{Q3NWAI?FUl;$S(!BpO^Enm&MLWNZ|4qOVs0IUV`^4lp`qbW& zOtW?V!+8VP4fR88+%Q%Ql4-YJL#}9=gdFLPFO=NpK_5OQOpZvs(QbX{ysRS~xu~?O zXCOjHxC}nVqY!^}C)285zWxAjT2QG#qgijYnk`bP{rL8(ja_Cq>Ts7_)vN9EW&_^5 ztzW4d@*;KKNHwlz6P3o*`+93SoSJoZ6AkK(8u@(642MG{x3a3ubUd}tcx_4{`>!;z zS5>kXRZ{!Erv6Lz2tKy<{Ab(q`fn9g{3HH0{x<=4)qlx0S^aTgS8KY;E$X;AX$Cm$ zqR5a&5hj~|+61iD`aX+05|6IJ?}S3eU=v;Qo2~Y7=HMXHYK$M?JFpH933CPl(sPXI zT^deKZb`xwLtoPB53$=o>y$9h4WiDtkdn;nTH~tI#>j14K{kXLKe(gp!bxxF;t{P6 z_Q{?Fdt}m_9A};^>ZJxIH+O2~(0FxhNcoapog{>bEb{fVK3mxNJN@6oWvt2ncG1eu z^M4_~J^yVG?#TZ-qyC>Nz-6m`oK~WZ^lCLg>6)DPR02e8c?3x~Nv|j1@;r)aXLMBk0fwe56&v@>YdYO>s5NJ zxFdod?;C@u98Hyt(`vP*-adXukK664)7t^2edfdr7ku&(9B2{`F#dXC(gE$Ctn3h{%OlqL&d3Pf`-zewkGfBknO=MiMAd;e1~3-j-Prlrq+d2?I;Hvunc#2VCR<)vsN z@6cFGk{B0;Nop)|BoAXf&}RBmnYhL?L!!ztc)XhgU4iLn{0$H3CmBWuKvk6$B&}g_ zDZ{Dca6w046~W4t?dRp(bEx8Z2yD}QMlLAVUmBS#gDVYqZ&Zy6Uihy;pW=}!B30zl z7jjevQWbtE0v5z&QuW;$3t8YsI6l8SV_sM$mvY5Ab;2c=IIudbKG!Mx%C{RLQb}%3 oRp=tyOYB3KTPCNJdkHe%9+|eVg)MAh3;#9v6NoI1a{wp+0FbgXZ2$lO diff --git a/testdata/local_ds.rpl b/testdata/local_ds.rpl new file mode 100644 index 000000000000..58b3e2236d1b --- /dev/null +++ b/testdata/local_ds.rpl @@ -0,0 +1,103 @@ +; config options +; The island of trust is at example.com +server: + +stub-zone: + name: "." + stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET. +CONFIG_END + +SCENARIO_BEGIN Test local data for as112 zone with DS lookup. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +arpa. IN NS +SECTION ANSWER +SECTION AUTHORITY +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR NOERROR +SECTION QUESTION +in-addr.arpa. IN NS +SECTION ANSWER +SECTION AUTHORITY +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +10.in-addr.arpa. IN DS +SECTION ANSWER +SECTION AUTHORITY +10.in-addr.arpa. IN NSEC 11.in-addr.arpa NSEC RRSIG +. IN SOA invalid. invalid. 1 2 3 4 5 +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +40.30.20.10.in-addr.arpa. IN PTR +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA AA DO NXDOMAIN +SECTION QUESTION +40.30.20.10.in-addr.arpa. IN PTR +SECTION ANSWER +SECTION AUTHORITY +10.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800 +ENTRY_END + +STEP 20 QUERY +ENTRY_BEGIN +REPLY RD DO +SECTION QUESTION +10.in-addr.arpa. IN DS +ENTRY_END + +STEP 30 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA DO NOERROR +SECTION QUESTION +10.in-addr.arpa. IN DS +SECTION ANSWER +SECTION AUTHORITY +10.in-addr.arpa. IN NSEC 11.in-addr.arpa NSEC RRSIG +. IN SOA invalid. invalid. 1 2 3 4 5 +ENTRY_END + +SCENARIO_END diff --git a/testdata/local_nodefault.rpl b/testdata/local_nodefault.rpl index 91243d19fb6d..794196244829 100644 --- a/testdata/local_nodefault.rpl +++ b/testdata/local_nodefault.rpl @@ -30,7 +30,7 @@ MATCH opcode qtype qname ADJUST copy_id REPLY QR AA NXDOMAIN SECTION QUESTION -40.30.20.10.in-addr-arpa. IN PTR +40.30.20.10.in-addr.arpa. IN PTR SECTION ANSWER SECTION AUTHORITY . IN SOA invalid. invalid. 1 2 3 4 5 @@ -41,7 +41,7 @@ STEP 1 QUERY ENTRY_BEGIN REPLY RD DO SECTION QUESTION -40.30.20.10.in-addr-arpa. IN PTR +40.30.20.10.in-addr.arpa. IN PTR ENTRY_END ; not blocked! @@ -51,7 +51,7 @@ ENTRY_BEGIN MATCH all REPLY QR RD RA DO NXDOMAIN SECTION QUESTION -40.30.20.10.in-addr-arpa. IN PTR +40.30.20.10.in-addr.arpa. IN PTR SECTION ANSWER SECTION AUTHORITY . IN SOA invalid. invalid. 1 2 3 4 5 diff --git a/testdata/local_nodefault.tdir/local_nodefault.conf b/testdata/local_nodefault.tdir/local_nodefault.conf new file mode 100644 index 000000000000..b245c0373469 --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.conf @@ -0,0 +1,27 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + # trailing . + local-zone: "30.172.in-addr.arpa." nodefault + # no trailing . + local-zone: "29.172.in-addr.arpa" nodefault + +forward-zone: + name: "." + # invalid address to be sure it fails. + forward-addr: "127.0.0.5@@TOPORT@" +forward-zone: + name: "30.172.in-addr.arpa" + forward-addr: "127.0.0.1@@TOPORT@" +forward-zone: + name: "29.172.in-addr.arpa" + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/local_nodefault.tdir/local_nodefault.dsc b/testdata/local_nodefault.tdir/local_nodefault.dsc new file mode 100644 index 000000000000..43133eec9425 --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.dsc @@ -0,0 +1,16 @@ +BaseName: local_nodefault +Version: 1.0 +Description: Create a stub zone to replace a default local zone +CreationDate: Tue Jun 3 14:08:00 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: local_nodefault.pre +Post: local_nodefault.post +Test: local_nodefault.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/local_nodefault.tdir/local_nodefault.post b/testdata/local_nodefault.tdir/local_nodefault.post new file mode 100644 index 000000000000..af955a1e546c --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.post @@ -0,0 +1,11 @@ +# #-- local_nodefault.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/local_nodefault.tdir/local_nodefault.pre b/testdata/local_nodefault.tdir/local_nodefault.pre new file mode 100644 index 000000000000..48e8d25a4456 --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.pre @@ -0,0 +1,31 @@ +# #-- local_nodefault.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT local_nodefault.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_nodefault.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/local_nodefault.tdir/local_nodefault.test b/testdata/local_nodefault.tdir/local_nodefault.test new file mode 100644 index 000000000000..01e0ac042717 --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.test @@ -0,0 +1,53 @@ +# #-- local_nodefault.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# this one should have NXDOMAIN builtin +# +echo "> dig 1.0.31.172.in-addr.arpa." +dig @localhost -p $UNBOUND_PORT 1.0.31.172.in-addr.arpa. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "NXDOMAIN" outfile; then + echo "OK for a blocked by default zone" +else + echo "Not OK" + exit 1 +fi + +# this one should give our own data as the reply +echo "> dig 1.0.30.172.in-addr.arpa." +dig @localhost -p $UNBOUND_PORT 1.0.30.172.in-addr.arpa. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK for nodefault zone" +else + echo "Not OK" + exit 1 +fi + +# this one should give our own data as the reply +# but different trailing dot in unbound.conf file +echo "> dig 1.0.29.172.in-addr.arpa." +dig @localhost -p $UNBOUND_PORT 1.0.29.172.in-addr.arpa. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.42" outfile; then + echo "OK for nodefault zone" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/local_nodefault.tdir/local_nodefault.testns b/testdata/local_nodefault.tdir/local_nodefault.testns new file mode 100644 index 000000000000..041888ea6237 --- /dev/null +++ b/testdata/local_nodefault.tdir/local_nodefault.testns @@ -0,0 +1,24 @@ +; nameserver test file +$ORIGIN 30.172.in-addr.arpa. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +1.0 IN A +SECTION ANSWER +1.0 IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +1.0.29.172.in-addr.arpa. IN A +SECTION ANSWER +1.0.29.172.in-addr.arpa. IN A 10.20.30.42 +ENTRY_END + diff --git a/testdata/local_nodefault.tpkg b/testdata/local_nodefault.tpkg deleted file mode 100644 index 5f9dc441a338e3d520f4d9362329c1ff70fa5c84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1598 zcmV-E2Eq9siwFRoPpMM?1MM08ciJ|vzoNh5M)H#O?cvzwtD|dP2+%eCfRvDRecK*S z*aEy5%a!b;?Cp==NniqrDQrpUYr`dA>!kb8NxC~7K6j|!4Ys=pR)cpaUqw{U1Xp=N`=Dm^)HmH+4>jCMKEovTr58V^S&neIe6gfzXLnD9Hgx{ z;=mDgK1L zy@XLp|Du$Lq3jhhW(@S;1@;SFM9skEFvd<~Oohv@0?>>MrHR8wBOVxXNG?3z?}nZW zyD#3?yQe4hIm~(UxOLu~V9D2BuzQAe&cDNh{#|6OIRBQ34a?3KZM%T|C4K&Fdwc#j z0g{PJCMqO@-#sq9Xj}oCWOg8kN4aPy7L$`l3t3xk@-gK4@dbEckLnO>a2Y`wbS;BnDlF>~bLF+Y! z2lfdgnML|unk5I`rJ9idm1w&(qCoZb0942y-!^Dkq+ZXUDU@H_pq6RaT6DquyiI3E z=}Q@M2X|?NX6*Ozf_?>GiAmP!pQ9 z>OX?rNye)CU&$_9*MCX{75|H+ZT#N|EUEtp_B}=a8?~MRi@JgaE+2K({T1)K^DgfB zZhQJhbSX%q9zUL8;YYBZJej(yMZ)=377h<@Dl(zD=9;{vjaA0SovAIMZewUDrMK?} zva1FJlI*^zH_y7A##yI%rag7SFEyVFBpfEr*FM~{V2?~oUC(!am{(09rY}nr8_^2} zDzad((C%Jh@{nV&FAsDn;E$t&{RLy}AM7XnlPjbik*KSBf4-%&j$DTj_w?J$9Mh1Y zHwW&@9(67TLSYtiyj^S@Btvuf?<9=ia4zU1hM24HT^nNoIoC)vii&18a97k@Sg&pz zCed%wH&sO8=L6wJL(w|^-<8gtWUQ+H7wvp<|Fg|W{l92$>;D^pV=7rw7lUrBI{B3e z>G7bVQa(~=(h*)5X+%vh8Zo>#$SCgVEK8NSR9;FQg--G>%~AIgO@hRAB&Gqzho7!>pul`{_VVJZO{KE;2Ee=@Z?v3Nw%c}`fjUz z^2> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT local_norec.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_norec.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/local_norec.tdir/local_norec.test b/testdata/local_norec.tdir/local_norec.test new file mode 100644 index 000000000000..b32f0aed1a8c --- /dev/null +++ b/testdata/local_norec.tdir/local_norec.test @@ -0,0 +1,65 @@ +# #-- local_norec.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +# +# www.example.com is available through recursion. +# foo.example.com is available through local-data (and recursion...). +# +echo "> dig www.example.com. +RD" +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig www.example.com. +norec" +dig @localhost +norec -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig foo.example.com. +RD" +dig @localhost -p $UNBOUND_PORT foo.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "1.1.1.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig foo.example.com. +norec" +dig @localhost +norec -p $UNBOUND_PORT foo.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "1.1.1.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/local_norec.tdir/local_norec.testns b/testdata/local_norec.tdir/local_norec.testns new file mode 100644 index 000000000000..58dce45bc5bf --- /dev/null +++ b/testdata/local_norec.tdir/local_norec.testns @@ -0,0 +1,24 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +foo IN A +SECTION ANSWER +foo IN A 10.20.30.50 +ENTRY_END + diff --git a/testdata/local_norec.tpkg b/testdata/local_norec.tpkg deleted file mode 100644 index 2258695d8c503e62c63708e6a4b4932e23e4122d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1522 zcmV$GD(@8AhV`;10mDtg7n* zKJ99yG<{Yr^_&CPw(Gc#RjSx7Shj1G+y~&^g)r+dmZ>jLlnEcFRD7InTmMXt`SUx0 zc+LMSZ5iCk9B7Y9x%_eeyW0PjTd7to*Kxpd)QWik)~(FG1^(y$f9^}#@<-HzCC`)J zsgMz89@wTu8dL@%N>YtDQB+3gr#|>B1V0Fu99}sf|Cp zh+?XEp88VK&?7JWC>|qc^0ocPbq|ojh|8m>{`oSM1F*O4|GD)G^J%LiivIuFmx}CSZ=S`#`uWH@; zOW;YsLkjQGs|3FlQ_^Xkp1g(E9jMiy)oyk=?GC9mem%!{4|sCbi$ZeNtap#wEqHy7 zSpZ+iWHQMew{o?4Ppx(KrrDX}bGBtVmRYjQvNe;U*=pROKz+`y6)3|m1aemd`r3~D zM7SybRZhH(Ikv@r*)1>XKTF5IQ?hpPe;=?1dxo*G6M|vvkv))nECLGYkiy89s6M>+ zg-#GK8BzvOdLUIV?x=r&(FfBknrU)5FpGBy(9{u@ZwFQcY54d!ko9Bx6fNs?AP|y zUBI^e|2F2>690}{S=9fP(k%YVyZFBk*o=Q2R`(hIW4Ru>(B}doHctnUe}PjbSbIlo z@VRM#oOYVe@@i@`Kg|ePrqLM!3k!3p%7I9N{~oJ*J!Lu+d^{Ke+GVUyL?({Foqzj? zcyUg8s18aC4yO4Cxeyu*Iphx^j0Wp6nDDsM$P?9br1=bWN=}xtQM=RK9Q7}1MFH2T zF5$8X0zXA*1_~$hM78>p&_oRA#+Y63G1G{}kRc5&@q8yIROCt2hk?LDTYjnZ%4gF& zRn}xAHyzskEl+4HY1VG>6cjE;KSU|mq#uzjit9DFq5Bm5Lz-Z1HGQJ*H%8sL;->!G znbM!<_wP}C^=f@{HN;K(f52J)Hs;t?|En{H|} zmr;7pqaHq-W8pE_ zj~>m6h1G$}tvnnat_w09v*4P&T}P{okE>E!LWMROO359EO!lUi@}zLmXr1-C&9iRn zOxH&lzm2mTlW>@oJ> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT local_nosnoop.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < local_nosnoop.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/local_nosnoop.tdir/local_nosnoop.test b/testdata/local_nosnoop.tdir/local_nosnoop.test new file mode 100644 index 000000000000..1e762d5dc921 --- /dev/null +++ b/testdata/local_nosnoop.tdir/local_nosnoop.test @@ -0,0 +1,75 @@ +# #-- local_nosnoop.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +# +# www.example.com is available through recursion. +# foo.example.com is available through local-data (and recursion...). +# +# so, with 'allow' the cache snoop stops working: +# dig +norec for www does not work any more. +# +echo "> dig www.example.com. +RD" +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig www.example.com. +norec" +dig @localhost +norec -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "REFUSED" outfile; then + echo "OK rcode" +else + echo "Not OK rcode" + exit 1 +fi + +if grep "10.20.30.40" outfile; then + echo "Not OK" + exit 1 +else + echo "OK" +fi + +echo "> dig foo.example.com. +RD" +dig @localhost -p $UNBOUND_PORT foo.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "1.1.1.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig foo.example.com. +norec" +dig @localhost +norec -p $UNBOUND_PORT foo.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "1.1.1.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/local_nosnoop.tdir/local_nosnoop.testns b/testdata/local_nosnoop.tdir/local_nosnoop.testns new file mode 100644 index 000000000000..58dce45bc5bf --- /dev/null +++ b/testdata/local_nosnoop.tdir/local_nosnoop.testns @@ -0,0 +1,24 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +foo IN A +SECTION ANSWER +foo IN A 10.20.30.50 +ENTRY_END + diff --git a/testdata/local_nosnoop.tpkg b/testdata/local_nosnoop.tpkg deleted file mode 100644 index 23765b29836af31b99f6800534b72c683d48f4e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1620 zcmV-a2CMlWiwFRxPpMM?1ML}WbJ|8QU%6kg#U4AE6mb#=GD_ny0o=HCzyaJ$rtL7Y zbbxB1Q*9+r7Je-0j}(;d96K`vDgL=b`3$QSs5e1EsWT znt)HeS}7&ZDwWR+K-W#fG-#=6QlPq7HjGDL-oGfDFcGmGp(s;6iCJ`Wzisrn9@+C7 z0e@rtS21D4?#u)2Q7M;iTz|cySF-i5RLejOo$B-v(0kBtEBw#be-HKw1=v{gLSc{W zf#8$KVGxfPjBSDH!v{Npf#)-rj#vO*d?+L}V&r!y3_#P0S{z;tHSDI%NBju~2kAuD z(2>hTASFY`OvEtY5qJTpcSL&jC9(`{A-rHXXSF(Dh06+w5KZ!R_;}0%O^nEp#r?<* zTt4oHJc_{}7p<4=i&mq5-tP2X?04pGs zYCa!=ade==L89Gh1nt5p^MslJQ<4*@T2!CLm1S*t!seq)jFcwm99QPN<- ziM%jYh%?!*;M%bb7)8N$943T}2yw)HuzjCTA>g2(ozb;BuHD5hupr!KVSJiPmz$E6?})q31%H{48OX&i`-I#Xkw#{9oGft~|E*e~Fse z`LFAhO5*><&i@|*uJeE8R^L+vxLhBoh>%7a6(Oe6sm4CqG9nE}3^?CD!e8V`k7c5?m_gH?Xe6=jk1+M(5ge+t=}^h#*baUt>63_g zC}7H?D^%OU5jhvjuBQRV$&`sucGQOn%(!CJ4|B2^jFB!mB-P9j$U$pbYVfqv$P-C9 zR+5fX&<|mycH12F5890Z`hu$cQU&J zyzTTYsxM#ZcbNR_;8yuxAnwLv>-|qjU)=wcO_~3h< z?YBFpKcBW>IZ~1RUhfP_6-o(dwtAg+{g+MbLtfW<^;f_{dG^5jcoyQfoRoB$=V$NW zO$TZDjbARhJ#ct9>w7NgHtW69b_?EIG`sSJ;AxvXZRKhirPk`cZFVwz zZs{1COVMmKzMw!Dudfv-#V-UhR|NXn3wul0=Ku2I{H{E<`F~YM|2ImeVU(+tvbz7( z&E5U)gFxc>7RllFB^O>iv%ny^JqRY_0+uq&me;5{$$0^)Kd>E!Eu*SY{2*5Tf@XpG z;pdp-u#PK;nZTsP!h(cgv4Sa3tgdSFm{NqED}xI*()0x}hb!rsIaj2MqX8eH1i=Om)uep=C{-qP^ADZ(&WN=vqP#QEk3)c zi)DRcyk+S(lLiP@X2p3wGXJTs@HY<_F38*pShD6)itV})qOy_4^Iz1C^WRLo*})EW Su!9}^H{f5Y4B#06C;$N1ghEXK diff --git a/testdata/nss_compile.tdir/nss_compile.dsc b/testdata/nss_compile.tdir/nss_compile.dsc new file mode 100644 index 000000000000..6c59d245fa41 --- /dev/null +++ b/testdata/nss_compile.tdir/nss_compile.dsc @@ -0,0 +1,16 @@ +BaseName: nss_compile +Version: 1.0 +Description: Compile with NSS +CreationDate: Fri Feb 8 14:40:28 CET 2013 +Maintainer: Wouter Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: nss_compile.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/nss_compile.tdir/nss_compile.test b/testdata/nss_compile.tdir/nss_compile.test new file mode 100644 index 000000000000..82b194668fd9 --- /dev/null +++ b/testdata/nss_compile.tdir/nss_compile.test @@ -0,0 +1,38 @@ +# #-- nss_compile.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +if test "`hostname`" = "open.nlnetlabs.nl"; then + echo "on open, continue test" +else + echo "not on open, no test, do this explicitly" + exit 0 +fi + +. ../common.sh +get_make +PRE="../.." + +opts=`$PRE/unbound -h | grep configured | sed -e 's/^.*options: //' | sed -e "s/'//g" ` + +function error_exit () +{ + cat config.log + echo "$1" + exit 1 +} + +mkdir testdata +cp $PRE/testdata/*.rpl testdata/. +cp $PRE/testdata/test* testdata/. + +echo ">>> $PRE/configure $opts --without-ssl --with-nss --with-libunbound-only LDFLAGS=-L/usr/local/lib/nss" 'CPPFLAGS="-I/usr/local/include/nss/nss -I/usr/local/include/nspr"' +$PRE/configure $opts --without-ssl --with-nss --with-libunbound-only LDFLAGS=-L/usr/local/lib/nss CPPFLAGS="-I/usr/local/include/nss/nss -I/usr/local/include/nspr" || error_exit "could not configure" +echo ">>> $MAKE" +$MAKE || error_exit "could not make" +echo ">>> $MAKE test" +$MAKE test || error_exit "could not make test" + +exit 0 diff --git a/testdata/nss_compile.tpkg b/testdata/nss_compile.tpkg deleted file mode 100644 index d6412017c532e120f17896d8f98504934b6e9f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*UIiwFR?d+SmF1MQY=Z`(Eyfb+HYD-KFfZ$b59`K{290GShaL({@oiuJ>= zC9*`zTx3!psU^YE|GuOA5+`Yz4@*`Is!5cryqB=u=gC3xl650st~s>WNnywSno0U{}gd2|C{fI zY4a35Y=ZmU?nC*H<0!t9|3TED{6|mW{4u`q{BPs7@8jL9qwjCSHfmX`jG>t^oTr+W zkAG3Drlf@zGbWImmbOyG;5YQA7zANps`DZswP0!SJHC9m8t5}}@=|M(th*ccQ>l;( zY}(Yx(+Rn(Qmwftmac9a-12fu1i+_@fxNSs)JCLpcIM$8da`075T#(IOedOJ-Vb&$ z0$#9eCP^;Ps=UHX3d2RsnqfR(rDiJ~Aq}qeglsfkVNQ)1*T^obl4snMR~{K$a)S{} zIY3||LGhkT5$G8d%$&~Ca|YvIj`lnoq`(7^mC<`=JJc7}Vj^piqd&uIEEKEkl%~9> z70and)4$KKrNcjhT{7cR=mf*CbtCh1*b2kK!!v+sEi$WvOev{On|XcrJ^T$XveYa` z4oX?9*0|GN&Attv0Osd(PBaV6Q~3nn!qNWz{z7xT zI^3~Qpxt=E&5S-kU+Z%D=F^^CHA_BOhRBzqyu#zd(ec5XlRf`9thEYDnWbe&O7?W~ zur(Zy7jn=4c|(DVtgLfpmBME5&kHN%wcy#OiT`?%czwN@VK0+)nWNpX>v?;dfq!@K z_Q-?g@vy1gruVFt-^ES)%l1okSbh*+`vm;9`BMGQb@n7a9;yFPXV9Vg-;R1QT?V=_ z)&G8PFmUz%zu?DIv-eaIlg&E-{K}N33Xxzth~SXvO!20yBsg4Xpgqv={mBUo6-%w? zFf}yDNO2so3F2#Pcav_E#IJF9^Z{eK)5E)z3qwDq68zYN6F>4lMUkc|*D$033aPFV z1nWc!CQJgud49;Ky5>~T;HLExE2{*?iqRhx^#nf9nUdVQ$G|~-IieS9GN$VT%M%!- sysWL^*ABhI;cz${4u`|xa5x+ehr{7;I2;a#!|~+&11b>yngA#O0Eq*_c>n+a diff --git a/testdata/pylib.tdir/pylib.conf b/testdata/pylib.tdir/pylib.conf new file mode 100644 index 000000000000..82fa27a68196 --- /dev/null +++ b/testdata/pylib.tdir/pylib.conf @@ -0,0 +1,19 @@ +server: + verbosity: 2 + # num-threads: 1 + #port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + module-config: "validator iterator" + +#python: + #python-script: "pylib.py" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/pylib.tdir/pylib.dsc b/testdata/pylib.tdir/pylib.dsc new file mode 100644 index 000000000000..fcea32b9e160 --- /dev/null +++ b/testdata/pylib.tdir/pylib.dsc @@ -0,0 +1,16 @@ +BaseName: pylib +Version: 1.0 +Description: Test python wrapper for libunbound +CreationDate: Mon Apr 6 12:33:31 CEST 2009 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: pylib.pre +Post: pylib.post +Test: pylib.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/pylib.tdir/pylib.lookup.py b/testdata/pylib.tdir/pylib.lookup.py new file mode 100755 index 000000000000..1c829bc7054d --- /dev/null +++ b/testdata/pylib.tdir/pylib.lookup.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python +''' +Test for unbound lookup. +BSD licensed. +''' +import unbound + +ctx = unbound.ub_ctx() +status = ctx.config("ub.conf") +if status != 0: + print "read config failed ", status + exit(1) + +print "config created" + +status, result = ctx.resolve("www.example.com", unbound.RR_TYPE_A, unbound.RR_CLASS_IN); +if status == 0 and result.havedata: + print "Result: ", result.data.address_list +else: + print "Failed ", status, " and data ", result + +ctx = None + +exit(0) diff --git a/testdata/pylib.tdir/pylib.post b/testdata/pylib.tdir/pylib.post new file mode 100644 index 000000000000..26db7e80eee9 --- /dev/null +++ b/testdata/pylib.tdir/pylib.post @@ -0,0 +1,20 @@ +# #-- pylib.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here + +PRE="../.." +. ../common.sh +# if no python; exit +if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi + +# kill fwder +kill_pid $FWD_PID diff --git a/testdata/pylib.tdir/pylib.pre b/testdata/pylib.tdir/pylib.pre new file mode 100644 index 000000000000..01ca2b896280 --- /dev/null +++ b/testdata/pylib.tdir/pylib.pre @@ -0,0 +1,36 @@ +# #-- pylib.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# if no python; exit +if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi +# get module python local +cp $PRE/pythonmod/unboundmodule.py . + +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT pylib.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# modify config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pylib.conf > ub.conf + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log + diff --git a/testdata/pylib.tdir/pylib.py b/testdata/pylib.tdir/pylib.py new file mode 100644 index 000000000000..3f6fed1c696b --- /dev/null +++ b/testdata/pylib.tdir/pylib.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +''' + ubmodule-msg.py: simple response packet logger + + Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) + Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + + Copyright (c) 2008. All rights reserved. + + This software is open source. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Modified for unit test by Wouter Wijngaards, NLnet Labs, 2009. +''' +import os + +def init(id, cfg): + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + return True + +def deinit(id): + log_info("pythonmod: deinit called, module id is %d" % id) + return True + +def inform_super(id, qstate, superqstate, qdata): + return True + +def setTTL(qstate, ttl): + """Sets return_msg TTL and all the RRs TTL""" + if qstate.return_msg: + qstate.return_msg.rep.ttl = ttl + if (qstate.return_msg.rep): + for i in range(0,qstate.return_msg.rep.rrset_count): + d = qstate.return_msg.rep.rrsets[i].entry.data + for j in range(0,d.count+d.rrsig_count): + d.rr_ttl[j] = ttl + +def dataHex(data, prefix=""): + res = "" + for i in range(0, (len(data)+15)/16): + res += "%s0x%02X | " % (prefix, i*16) + d = map(lambda x:ord(x), data[i*16:i*16+17]) + for ch in d: + res += "%02X " % ch + for i in range(0,17-len(d)): + res += " " + res += "| " + for ch in d: + if (ch < 32) or (ch > 127): + res += ". " + else: + res += "%c " % ch + res += "\n" + return res + +def printReturnMsg(qstate): + print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) + print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str + if (qstate.return_msg.rep): + print "RRSets:",qstate.return_msg.rep.rrset_count + prevkey = None + for i in range(0,qstate.return_msg.rep.rrset_count): + r = qstate.return_msg.rep.rrsets[i] + rk = r.rk + print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, + print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) + + d = r.entry.data + print " RRDatas:",d.count+d.rrsig_count + for j in range(0,d.count+d.rrsig_count): + print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" + print dataHex(d.rr_data[j]," ") + + +def operate(id, event, qstate, qdata): + log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) + #print "pythonmod: per query data", qdata + + print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str, + print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, + print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass + print + + if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("www2.example.com.")): + print qstate.qinfo.qname_str + + qstate.ext_state[id] = MODULE_FINISHED + + msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) + #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") + #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") + + # answer can be returned to the client without further checking. + + if qstate.qinfo.qtype == RR_TYPE_A: + msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) + + if not msg.set_return_msg(qstate): + qstate.ext_state[id] = MODULE_ERROR + return True + + #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply + printReturnMsg(qstate) + + #Authoritative result can't be stored in cache + #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): + # print "Can't store in cache" + # qstate.ext_state[id] = MODULE_ERROR + # return False + #print "Store OK" + + qstate.return_rcode = RCODE_NOERROR + return True + + if event == MODULE_EVENT_NEW: + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + if event == MODULE_EVENT_MODDONE: + log_info("pythonmod: previous module done") + qstate.ext_state[id] = MODULE_FINISHED + return True + + if event == MODULE_EVENT_PASS: + log_info("pythonmod: event_pass") + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + log_err("pythonmod: BAD event") + qstate.ext_state[id] = MODULE_ERROR + return True + +log_info("pythonmod: script loaded.") diff --git a/testdata/pylib.tdir/pylib.test b/testdata/pylib.tdir/pylib.test new file mode 100644 index 000000000000..96a846403c15 --- /dev/null +++ b/testdata/pylib.tdir/pylib.test @@ -0,0 +1,40 @@ +# #-- pylib.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +if grep "define WITH_PYUNBOUND 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi + +if test "`uname 2>&1`" = "Darwin"; then + echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:../../.libs" +fi +#echo export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:." +#export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:../../.libs:." + +cp $PRE/libunbound/python/unbound.py . +cp $PRE/.libs/_unbound* . +cp $PRE/.libs/libunbound* . + +# do the test +echo "> pylib.lookup.py www.example.com." +./pylib.lookup.py www.example.com. | tee outfile + +echo "> cat logfiles" +cat fwd.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/pylib.tdir/pylib.testns b/testdata/pylib.tdir/pylib.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/pylib.tdir/pylib.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/pylib.tpkg b/testdata/pylib.tpkg deleted file mode 100644 index 202595c151e27996d8cda935249531ff8564691c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4189 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 diff --git a/testdata/pymod.tdir/pymod.conf b/testdata/pymod.tdir/pymod.conf new file mode 100644 index 000000000000..b419c715bc68 --- /dev/null +++ b/testdata/pymod.tdir/pymod.conf @@ -0,0 +1,19 @@ +server: + verbosity: 2 + # num-threads: 1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + module-config: "validator python iterator" + +python: + python-script: "pymod.py" + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/pymod.tdir/pymod.dsc b/testdata/pymod.tdir/pymod.dsc new file mode 100644 index 000000000000..386e058e16b0 --- /dev/null +++ b/testdata/pymod.tdir/pymod.dsc @@ -0,0 +1,16 @@ +BaseName: pymod +Version: 1.0 +Description: Test python module +CreationDate: Thu Apr 2 12:50:50 CEST 2009 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: pymod.pre +Post: pymod.post +Test: pymod.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/pymod.tdir/pymod.post b/testdata/pymod.tdir/pymod.post new file mode 100644 index 000000000000..368d285edab2 --- /dev/null +++ b/testdata/pymod.tdir/pymod.post @@ -0,0 +1,20 @@ +# #-- pymod.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here + +PRE="../.." +. ../common.sh +# if no python; exit +if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi + +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/pymod.tdir/pymod.pre b/testdata/pymod.tdir/pymod.pre new file mode 100644 index 000000000000..9029a8742337 --- /dev/null +++ b/testdata/pymod.tdir/pymod.pre @@ -0,0 +1,56 @@ +# #-- pymod.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +# if no python; exit +if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi +# get module python local +cp $PRE/pythonmod/unboundmodule.py . + +if test "`uname 2>&1`" = "Darwin"; then + ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` + echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" +fi + +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pymod.conf > ub.conf + +# see if config file verifies +if $PRE/unbound-checkconf ub.conf 2>&1; then + echo "checkconf OK" +else + echo "checkconf failed" + exit 1 +fi + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT pymod.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/pymod.tdir/pymod.py b/testdata/pymod.tdir/pymod.py new file mode 100644 index 000000000000..3f6fed1c696b --- /dev/null +++ b/testdata/pymod.tdir/pymod.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +''' + ubmodule-msg.py: simple response packet logger + + Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) + Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + + Copyright (c) 2008. All rights reserved. + + This software is open source. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Modified for unit test by Wouter Wijngaards, NLnet Labs, 2009. +''' +import os + +def init(id, cfg): + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + return True + +def deinit(id): + log_info("pythonmod: deinit called, module id is %d" % id) + return True + +def inform_super(id, qstate, superqstate, qdata): + return True + +def setTTL(qstate, ttl): + """Sets return_msg TTL and all the RRs TTL""" + if qstate.return_msg: + qstate.return_msg.rep.ttl = ttl + if (qstate.return_msg.rep): + for i in range(0,qstate.return_msg.rep.rrset_count): + d = qstate.return_msg.rep.rrsets[i].entry.data + for j in range(0,d.count+d.rrsig_count): + d.rr_ttl[j] = ttl + +def dataHex(data, prefix=""): + res = "" + for i in range(0, (len(data)+15)/16): + res += "%s0x%02X | " % (prefix, i*16) + d = map(lambda x:ord(x), data[i*16:i*16+17]) + for ch in d: + res += "%02X " % ch + for i in range(0,17-len(d)): + res += " " + res += "| " + for ch in d: + if (ch < 32) or (ch > 127): + res += ". " + else: + res += "%c " % ch + res += "\n" + return res + +def printReturnMsg(qstate): + print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) + print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str + if (qstate.return_msg.rep): + print "RRSets:",qstate.return_msg.rep.rrset_count + prevkey = None + for i in range(0,qstate.return_msg.rep.rrset_count): + r = qstate.return_msg.rep.rrsets[i] + rk = r.rk + print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, + print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) + + d = r.entry.data + print " RRDatas:",d.count+d.rrsig_count + for j in range(0,d.count+d.rrsig_count): + print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" + print dataHex(d.rr_data[j]," ") + + +def operate(id, event, qstate, qdata): + log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) + #print "pythonmod: per query data", qdata + + print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str, + print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, + print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass + print + + if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("www2.example.com.")): + print qstate.qinfo.qname_str + + qstate.ext_state[id] = MODULE_FINISHED + + msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) + #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") + #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") + + # answer can be returned to the client without further checking. + + if qstate.qinfo.qtype == RR_TYPE_A: + msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) + + if not msg.set_return_msg(qstate): + qstate.ext_state[id] = MODULE_ERROR + return True + + #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply + printReturnMsg(qstate) + + #Authoritative result can't be stored in cache + #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): + # print "Can't store in cache" + # qstate.ext_state[id] = MODULE_ERROR + # return False + #print "Store OK" + + qstate.return_rcode = RCODE_NOERROR + return True + + if event == MODULE_EVENT_NEW: + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + if event == MODULE_EVENT_MODDONE: + log_info("pythonmod: previous module done") + qstate.ext_state[id] = MODULE_FINISHED + return True + + if event == MODULE_EVENT_PASS: + log_info("pythonmod: event_pass") + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + log_err("pythonmod: BAD event") + qstate.ext_state[id] = MODULE_ERROR + return True + +log_info("pythonmod: script loaded.") diff --git a/testdata/pymod.tdir/pymod.test b/testdata/pymod.tdir/pymod.test new file mode 100644 index 000000000000..43bf6e65f87f --- /dev/null +++ b/testdata/pymod.tdir/pymod.test @@ -0,0 +1,56 @@ +# #-- pymod.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi + +if test "`uname 2>&1`" = "Darwin"; then + ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` + echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" +fi + +# see if config file verifies +if $PRE/unbound-checkconf ub.conf; then + echo "checkconf OK" +else + echo "checkconf failed" + exit 1 +fi + +# do the test +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +echo "> dig www2.example.com." +dig @localhost -p $UNBOUND_PORT www2.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "192.168.1.1" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/pymod.tdir/pymod.testns b/testdata/pymod.tdir/pymod.testns new file mode 100644 index 000000000000..55926bb50c9f --- /dev/null +++ b/testdata/pymod.tdir/pymod.testns @@ -0,0 +1,24 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/pymod.tpkg b/testdata/pymod.tpkg deleted file mode 100644 index 164a82a00424b3d7887fb41d809b19f4b7ac47f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4072 zcmV$$zBra=ZijP1SD{`-ezw14UFptOG^AC%Dk`{ljT3y`0hk!9`w-2N!l z4GSv52L8PALMNJ3pe$@`f;%1+qd~wdJFGxS*zmm|s=(`3Q#W4=8>o$9I0=VdzXGl& zY~TW7-N*}YwkRU7WA~gP!d&Qf)MwhJn=&@>;{fc6yxRX zPY|Z(1-DjU7r%HeL&$^)3Aso|EZYvSt5iOcWc*ip{n~7D$#M3#w%F6Q`~DxXFnVel zU-AF)zPv~Nf3%NT;s|pA`TybC|DUC8!e+4uGuuP4xG8Kx=#7IegJ{5DWQC|0xIrzE zPs8nik;m&Eq`^-lpet;!?!W_aVBN4Z-oyb(6xc9i>A36NAKhSgP6V>ha|EK!xfOpK zQ@DZhtM5v`iEs>J%?fTES4@aO(uTGhqEjCK#(7TPxEiJ1bL*OMQ~VAgv!TdfC)`b8 zc6WDvo1)>Yu{(<0P`j+xI(6+tSMrwh6`Wix_`x%&!$dPb&UEJ;Kh;j(~ACDZNKwA6G^NLWg`D0v7t7 z8&YEKUNi30eN5;AC}Yfk0d5%nV>6ds!#gW#Xdexd+X&z}TNe-J^gn}@P2{~&=f90KnPiAmbq*b;)8 z11H2Hp%-Cwj|nFP&&MJrt{Nl(1kjo7gi+vJjUxwBxaHcsIB`-S-gD)+RxqIwWfT_R z)`C1+IZ=c;+7G-N$Hs?ffRT=}P0t$+JJy7obXvz6 zhBFOwyYP7#=D9rPnPz~|JT)&AT?Kq@>CJaqO|8MnB@U`kZMH6T?ai49XU%#|)eTS@ zHSBGex^~hwo4O%@s2Dg^bRoit% z7ogSFTTMd+lB}i~)w-gct2GJfBTZ1>sSOj1Go@bV6m|6tc5tS%(!q%;AbZLQR>PbG z%2(5LwQ7H!z-XyejULqZDoTNMUjdN{gw;^rwh;T|Fmeo2LR8?GwY)%(kh*n`X1d`88DiomN$ipP=3}xT4yIT0jz}LZk@?Y6*w& z`J`=Vq%Q$^HdS43w@j_s$fI>HP$MY2f^%zJv&{yV7M0V~F9|EDfh)cM7iTK=qkS7f ztS*JrV4&KnW)==9np6+X#Ds?Wrmmr`t168)3C)FOs2KMYT{8$miwR#SNVQF3a|0n? z@ndGi7PuKfI|ZfoP9w%+U^G5zLQ9qj_8IN!S)y|ae&;+cp=Z$EYV2ao!?z+=6S&|x z4=$WfZr`#38>3pI?qWc%TUYpuA@xUzX95iSRP%eGAmH{19n*<&j$MFmub;2*7>+5R z zoPmLF9JpWxV;1vdvxKXM7>a>bu|(u?{&M_;D;RacF$Q(c<7X@!B31z2lfHbmt;k9^ zSU?f7$TaJ@6gG;638W~B2IDDdEp1= zql8gDm`J3OGh7PlZc`2fH<<}WuDR|x#mMKEBca8)Al2`gzLjjy+QNaKVXvI0GKpSZL8*MS#6&4#DTA0AZQxczZ+GvD zmyZ1EidhfD?%3Xb;JA^_JI}*@vh)*v_!x-sD4ZK_sIu2 zp;6?*9KgEcfX>Y61>N&F4kF8)O5%75E1cl7&GD{qtuP_9YBt4^tQZ+}eWu7oVtnQY z-Qp4o97N*d9V*h6QOUw!T~z=vn)nZ*qwxe3E4naz2$lm7a2nmd8kbUg=@dDaqP`cB zGBerDHJhN*H9VKC_KiOp^RtPJe5q9ga(N#7#hg&pZTOb+Dzolphc{}Kd*5i z#Dozc8#Uh2Flq*NcBD_9H1q7pTkm}4>TS13!s5%Yxf>PV^!Ioked0xZi zmWz$9VTZI^&54VLuK9&fw;ajL<&trB7j^j42gjyjC*kQ-YiPz9?ipqisLVWuTEjSJ zVQ8T@t*{O{Xve&4sU3ws;?~kII$8s_YrmMCw>s7~^q?!rgQDbNvjBUtJS$c?qO_$0Nx#Y%X za)gXN<-!$93IjThiI4ufLx)V59OXc79PrZxe){aVeQBn&S>c^odSv^llICL%XPVQV zGQ1rwm2_b-rUuAoiRT`sZs_mgYU?XZHZJpz=M#~FjQ@U+!DSrb+){lK#?ANU(=(1p z!MCEp@$N%RX1R2|h-0LjHcR63mEz+ZPSthX@!u<|GaJI`vVOSWLxg3F=HB(#M&)0P zZ3eCtVqWlWEc!y4+=M8=Ck9_E--`lv-$w+KA!>xqY`<6o?+bI` z21YC#bVAe|O6(6O^I>P9TF!8;Bo1vw&J8~l9uH}6?e0Y6VR%y2?eM#Oo@M_6%wLSn^Ji@q*RM-qYt zCq*BcR&2%tes+rsy4tL%oknw>z`_baU9C(#3;X>QGF&K{*-5@}{|QR?QfoHU8MUQF z3l-IlHxAP?6&p+IOz?hea$3e--19J#lx)AkA)nZxs|1hc>v5VRYAgumh@B|4m|#Nd zv8!wj`BE|BQ!pfI+03Tw_Se4uEPVe9*wcJi%CxWD|2aA+&F+87^!;yNK9bkp|DK~| z@Bg6f|5tDSNW=qHDTsN8A$xJ%0!b>ROemb_^{KV{= z2(Mn9G|7!$}`WX}%i#SMk6I_^$8rfQfCgI_yJ1m@*kq{=+wU%U+SFTAR@-t;@!Hy5&g4@0^!;j4m-YMLmIg< zJ(=L~7xns+jrhclpRNhI+Nxi|TOAYy(vuFQ z_V2b~@+)E;#}*8=N>_5=Z5xw3J_xtBw;NhxLz#{!4dX)9r~Mn58_x+BYNPh|GE`p0 zQTaiZzO`u|)$aSh9d@6b##jITuax>fCjNcy|MLDi|36DRu|n41e*nkrFT6u39nY;m zNs@&ci%*+)he^R{WFfbmP2H7h~{=3oqpkGd>Fsa!db@jq12i}*b<;oNdux~s~9 z3fO@J7gAMHq|Dtjp^8}g{7(plsyFgImp*q2)sbCebgmy_|Lp0E4gHGH3R1@D@Iq+u zKN*}AGXn8k$!rz`Wqfx^e|~@%T2_d=tcq}oTaz*3`Dgg+x~&1`" = "Darwin"; then + ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` + echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" +fi + +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < pymod_thread.conf > ub.conf + +# see if config file verifies +if $PRE/unbound-checkconf ub.conf 2>&1; then + echo "checkconf OK" +else + echo "checkconf failed" + exit 1 +fi + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT pymod_thread.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# start unbound in the background +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/pymod_thread.tdir/pymod_thread.py b/testdata/pymod_thread.tdir/pymod_thread.py new file mode 100644 index 000000000000..31e1d43f64ae --- /dev/null +++ b/testdata/pymod_thread.tdir/pymod_thread.py @@ -0,0 +1,165 @@ +# -*- coding: utf-8 -*- +''' + ubmodule-msg.py: simple response packet logger + + Authors: Zdenek Vasicek (vasicek AT fit.vutbr.cz) + Marek Vavrusa (xvavru00 AT stud.fit.vutbr.cz) + + Copyright (c) 2008. All rights reserved. + + This software is open source. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Modified for unit test by Wouter Wijngaards, NLnet Labs, 2009. +''' +import os + +def init(id, cfg): + log_info("pythonmod: init called, module id is %d port: %d script: %s" % (id, cfg.port, cfg.python_script)) + return True + +def deinit(id): + log_info("pythonmod: deinit called, module id is %d" % id) + return True + +def inform_super(id, qstate, superqstate, qdata): + return True + +def setTTL(qstate, ttl): + """Sets return_msg TTL and all the RRs TTL""" + if qstate.return_msg: + qstate.return_msg.rep.ttl = ttl + if (qstate.return_msg.rep): + for i in range(0,qstate.return_msg.rep.rrset_count): + d = qstate.return_msg.rep.rrsets[i].entry.data + for j in range(0,d.count+d.rrsig_count): + d.rr_ttl[j] = ttl + +def dataHex(data, prefix=""): + res = "" + for i in range(0, (len(data)+15)/16): + res += "%s0x%02X | " % (prefix, i*16) + d = map(lambda x:ord(x), data[i*16:i*16+17]) + for ch in d: + res += "%02X " % ch + for i in range(0,17-len(d)): + res += " " + res += "| " + for ch in d: + if (ch < 32) or (ch > 127): + res += ". " + else: + res += "%c " % ch + res += "\n" + return res + +def printReturnMsg(qstate): + print "Return MSG rep :: flags: %04X, QDcount: %d, Security:%d, TTL=%d" % (qstate.return_msg.rep.flags, qstate.return_msg.rep.qdcount,qstate.return_msg.rep.security, qstate.return_msg.rep.ttl) + print " qinfo :: qname:",qstate.return_msg.qinfo.qname_list, qstate.return_msg.qinfo.qname_str, "type:",qstate.return_msg.qinfo.qtype_str, "class:",qstate.return_msg.qinfo.qclass_str + if (qstate.return_msg.rep): + print "RRSets:",qstate.return_msg.rep.rrset_count + prevkey = None + for i in range(0,qstate.return_msg.rep.rrset_count): + r = qstate.return_msg.rep.rrsets[i] + rk = r.rk + print i,":",rk.dname_list, rk.dname_str, "flags: %04X" % rk.flags, + print "type:",rk.type_str,"(%d)" % ntohs(rk.type), "class:",rk.rrset_class_str,"(%d)" % ntohs(rk.rrset_class) + + d = r.entry.data + print " RRDatas:",d.count+d.rrsig_count + for j in range(0,d.count+d.rrsig_count): + print " ",j,":","TTL=",d.rr_ttl[j],"RR data:" + print dataHex(d.rr_data[j]," ") + + +def operate(id, event, qstate, qdata): + log_info("pythonmod: operate called, id: %d, event:%s" % (id, strmodulevent(event))) + #print "pythonmod: per query data", qdata + + print "Query:", ''.join(map(lambda x:chr(max(32,ord(x))),qstate.qinfo.qname)), qstate.qinfo.qname_list, qstate.qinfo.qname_str, + print "Type:",qstate.qinfo.qtype_str,"(%d)" % qstate.qinfo.qtype, + print "Class:",qstate.qinfo.qclass_str,"(%d)" % qstate.qinfo.qclass + print + + if (event == MODULE_EVENT_NEW or event == MODULE_EVENT_PASS) and (qstate.qinfo.qname_str.endswith("example.com.")): + print qstate.qinfo.qname_str + + qstate.ext_state[id] = MODULE_FINISHED + + # eat time + y = 20 + for z in range(2, 10000): + y = y*2 - z/2 + y = y/2 + z + + msg = DNSMessage(qstate.qinfo.qname_str, RR_TYPE_A, RR_CLASS_IN, PKT_QR | PKT_RA | PKT_AA) #, 300) + #msg.authority.append("xxx.seznam.cz. 10 IN A 192.168.1.1") + #msg.additional.append("yyy.seznam.cz. 10 IN A 1.1.1.2.") + + # answer can be returned to the client without further checking. + + if qstate.qinfo.qtype == RR_TYPE_A: + msg.answer.append("%s 10 IN A 192.168.1.1" % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_SRV) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN SRV 0 0 80 neinfo.example.com." % qstate.qinfo.qname_str) + if (qstate.qinfo.qtype == RR_TYPE_TXT) or (qstate.qinfo.qtype == RR_TYPE_ANY): + msg.answer.append("%s 10 IN TXT path=/" % qstate.qinfo.qname_str) + + if not msg.set_return_msg(qstate): + qstate.ext_state[id] = MODULE_ERROR + return True + + #qstate.return_msg.rep.security = 2 #pokud nebude nasledovat validator, je zapotrebi nastavit security, aby nebyl paket zahozen v mesh_send_reply + printReturnMsg(qstate) + + #Authoritative result can't be stored in cache + #if (not storeQueryInCache(qstate, qstate.return_msg.qinfo, qstate.return_msg.rep, 0)): + # print "Can't store in cache" + # qstate.ext_state[id] = MODULE_ERROR + # return False + #print "Store OK" + + qstate.return_rcode = RCODE_NOERROR + return True + + if event == MODULE_EVENT_NEW: + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + if event == MODULE_EVENT_MODDONE: + log_info("pythonmod: previous module done") + qstate.ext_state[id] = MODULE_FINISHED + return True + + if event == MODULE_EVENT_PASS: + log_info("pythonmod: event_pass") + qstate.ext_state[id] = MODULE_WAIT_MODULE + return True + + log_err("pythonmod: BAD event") + qstate.ext_state[id] = MODULE_ERROR + return True + +log_info("pythonmod: script loaded.") diff --git a/testdata/pymod_thread.tdir/pymod_thread.test b/testdata/pymod_thread.tdir/pymod_thread.test new file mode 100644 index 000000000000..c6baa01be842 --- /dev/null +++ b/testdata/pymod_thread.tdir/pymod_thread.test @@ -0,0 +1,67 @@ +# #-- pymod_thread.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +if grep "define WITH_PYTHONMODULE 1" $PRE/config.h; then + echo "have python module" +else + echo "no python module" + exit 0 +fi + +if test "`uname 2>&1`" = "Darwin"; then + ldnsdir=`grep ldnsdir= ../../Makefile | sed -e 's/ldnsdir=//'` + echo export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$ldnsdir/lib:../../.libs" +fi + +# see if config file verifies +if $PRE/unbound-checkconf ub.conf; then + echo "checkconf OK" +else + echo "checkconf failed" + exit 1 +fi + +# do the test +# generate some load. +echo "> dig www[1-10].example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile1 & +dig @localhost -p $UNBOUND_PORT www2.example.com. | tee outfile3 & +dig @localhost -p $UNBOUND_PORT www3.example.com. | tee outfile2 & +dig @localhost -p $UNBOUND_PORT www4.example.com. | tee outfile4 & +dig @localhost -p $UNBOUND_PORT www5.example.com. | tee outfile5 & +dig @localhost -p $UNBOUND_PORT www6.example.com. | tee outfile6 & +dig @localhost -p $UNBOUND_PORT www7.example.com. | tee outfile7 & +dig @localhost -p $UNBOUND_PORT www8.example.com. | tee outfile8 & +dig @localhost -p $UNBOUND_PORT www9.example.com. | tee outfile9 & +dig @localhost -p $UNBOUND_PORT www10.example.com. | tee outfile10 & + +wait # wait for all jobs to complete. + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +for x in outfile1 outfile2 outfile3 outfile4 outfile5; do +if grep "192.168.1.1" $x; then + echo "$x OK" +else + echo "$x Not OK" + exit 1 +fi +done + +for x in outfile6 outfile7 outfile8 outfile9 outfile10; do +if grep "192.168.1.1" $x; then + echo "$x OK" +else + echo "$x Not OK" + exit 1 +fi +done + +exit 0 diff --git a/testdata/pymod_thread.tdir/pymod_thread.testns b/testdata/pymod_thread.tdir/pymod_thread.testns new file mode 100644 index 000000000000..55926bb50c9f --- /dev/null +++ b/testdata/pymod_thread.tdir/pymod_thread.testns @@ -0,0 +1,24 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/pymod_thread.tpkg b/testdata/pymod_thread.tpkg deleted file mode 100644 index 96d5d9b3936dae5106503fc2130511db70294035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4248 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/dev/null 2>&1 +kill $UNBOUND_PID >/dev/null 2>&1 +exit 0 diff --git a/testdata/remote-threaded.tdir/remote-threaded.pre b/testdata/remote-threaded.tdir/remote-threaded.pre new file mode 100644 index 000000000000..76dc6b2492ae --- /dev/null +++ b/testdata/remote-threaded.tdir/remote-threaded.pre @@ -0,0 +1,33 @@ +# #-- remote-threaded.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 3 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +CONTROL_PORT=$(($RND_PORT + 2)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test +echo "CONTROL_PORT=$CONTROL_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT remote-threaded.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' -e 's/@CONTROL_PORT\@/'$CONTROL_PORT'/' < remote-threaded.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/remote-threaded.tdir/remote-threaded.test b/testdata/remote-threaded.tdir/remote-threaded.test new file mode 100644 index 000000000000..7392fa9097ca --- /dev/null +++ b/testdata/remote-threaded.tdir/remote-threaded.test @@ -0,0 +1,308 @@ +# #-- remote-threaded.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# exit value is 1 on usage +$PRE/unbound-control -h +if test $? -ne 1; then + echo "wrong exit value for usage." + exit 1 +else + echo "exit value for usage: OK" +fi + +# use lock-verify if possible + +# test if the server is up. +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# exit value is 1 when a bad command is given. +echo "$PRE/unbound-control -c ub.conf blablargh" +$PRE/unbound-control -c ub.conf blablargh +if test $? -ne 1; then + echo "wrong exit value on error." + echo "> cat logfiles" + cat fwd.log + cat unbound.log + exit 1 +else + echo "correct exit value on error" +fi + +# reload the server. test if the server came up by putting a new +# local-data element in the server. +echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf +echo "$PRE/unbound-control -c ub.conf reload" +$PRE/unbound-control -c ub.conf reload +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "> dig afterreload." +dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile +echo "> check answer" +if grep "5.6.7.8" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# must have had queries now. 1 since reload. +echo "$PRE/unbound-control -c ub.conf stats" +$PRE/unbound-control -c ub.conf stats > tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then + echo "OK" +else + echo "bad stats" + cat tmp.$$ + exit 1 +fi + +# verbosity +echo "$PRE/unbound-control -c ub.conf verbosity 4" +$PRE/unbound-control -c ub.conf verbosity 4 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# check syntax error in parse +echo "$PRE/unbound-control -c ub.conf verbosity jkdf" +$PRE/unbound-control -c ub.conf verbosity jkdf +if test $? -ne 1; then + echo "wrong exit value after failure" + exit 1 +fi + +# check bad credentials +cp ub.conf bad.conf +echo "remote-control:" >> bad.conf +echo " server-key-file: bad_server.key" >> bad.conf +echo " server-cert-file: bad_server.pem" >> bad.conf +echo " control-key-file: bad_control.key" >> bad.conf +echo " control-cert-file: bad_control.pem" >> bad.conf +echo "$PRE/unbound-control -c bad.conf verbosity 2" +$PRE/unbound-control -c bad.conf verbosity 2 +if test $? -ne 1; then + echo "wrong exit value after failure" + exit 1 +fi + +# create a new local zone +echo "> test of local zone" +echo "$PRE/unbound-control -c ub.conf local_zone example.net static" +$PRE/unbound-control -c ub.conf local_zone example.net static +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1" +$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1 +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# check that www.example.net exists +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "192.0.2.1" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# check that mail.example.net has nxdomain +echo "> dig mail.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile +echo "> check answer" +if grep "NXDOMAIN" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# remove www.example.net - check it gets nxdomain +echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net" +$PRE/unbound-control -c ub.conf local_data_remove www.example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "NXDOMAIN" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# remove example.net - check its gone. +echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net" +$PRE/unbound-control -c ub.conf local_zone_remove example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +echo "> dig www.example.net." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile +echo "> check answer" +if grep "SERVFAIL" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# dump the cache +echo "> test cache dump" +# fillup cache +echo "dig www.example.com" +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. +echo "$PRE/unbound-control -c ub.conf dump_cache" +$PRE/unbound-control -c ub.conf dump_cache > tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +cat tmp.$$ +# we do not look at content. Only thread 0 content. +# because it may not be there when it is compiled with processes only. +if grep MSG_CACHE tmp.$$; then + echo "OK this is a cache dump" +else + echo "Not OK cache dump" + exit 1 +fi + +# test lookup +echo "$PRE/unbound-control -c ub.conf lookup www.example.com" +$PRE/unbound-control -c ub.conf lookup www.example.com +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +# answer to lookup is meaningless because of use a forwarder, oh well. + +# load the cache dump. +echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$" +$PRE/unbound-control -c ub.conf load_cache < tmp.$$ +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +# do not check if cache dump contents are present ; other threads +# may not have gotten it when it is compiled with processes only. + +# flushing +echo "$PRE/unbound-control -c ub.conf flush www.example.net" +$PRE/unbound-control -c ub.conf flush www.example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT" +$PRE/unbound-control -c ub.conf flush_type www.example.net TXT +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +echo "$PRE/unbound-control -c ub.conf flush_zone example.net" +$PRE/unbound-control -c ub.conf flush_zone example.net +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi + +# now stop the server +echo "$PRE/unbound-control -c ub.conf stop" +$PRE/unbound-control -c ub.conf stop +if test $? -ne 0; then + echo "wrong exit value after success" + exit 1 +fi +# see if the server has really exited. +TRY_MAX=20 +for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do + if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then + echo "not stopped yet, waiting" + sleep 1 + else + echo "stopped OK; break" + break; + fi + if grep "No such process" tmp.$$; then + echo "stopped OK; break" + break; + fi +done +if kill -0 $UNBOUND_PID; then + echo "still up!" + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "not stopped, failure" + exit 1 +else + echo "stopped OK" + + if test -f ublocktrace.0; then + if $PRE/lock-verify ublocktrace.*; then + echo "lock-verify test worked." + else + echo "lock-verify test failed." + cat fwd.log + cat unbound.log + exit 1 + fi + fi +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> OK" +exit 0 diff --git a/testdata/remote-threaded.tdir/remote-threaded.testns b/testdata/remote-threaded.tdir/remote-threaded.testns new file mode 100644 index 000000000000..0c911ca5b30e --- /dev/null +++ b/testdata/remote-threaded.tdir/remote-threaded.testns @@ -0,0 +1,22 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA SERVFAIL +ADJUST copy_id +SECTION QUESTION +www.example.net. IN A +ENTRY_END + diff --git a/testdata/remote-threaded.tdir/unbound_control.key b/testdata/remote-threaded.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/remote-threaded.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/remote-threaded.tdir/unbound_control.pem b/testdata/remote-threaded.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/remote-threaded.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/remote-threaded.tdir/unbound_server.key b/testdata/remote-threaded.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/remote-threaded.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/remote-threaded.tdir/unbound_server.pem b/testdata/remote-threaded.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/remote-threaded.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/remote-threaded.tpkg b/testdata/remote-threaded.tpkg deleted file mode 100644 index 0e614d87a9b659b9b98fa53f43276994cf0134e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7038 zcmV-^8-e5>iwFR&PpMM?1MPfim)c0O=zO()g|6FYy8AK(+CiS_el4_sKoSUvb>4kG z+7Lo3T9Dw}AAeI6l&NyLtE%m5&-APCf|QC}A~G^EB63NcFwUKue3Lqc?buD*OIv^W z%77q9n8blQwQ#b1wq0wrI^|F?jf8oGQ>RN#rmz~hNHV{{%K^2^f~NEStQ zUW#3Y8FpQj#fA1D+hYZSCXz&_LbT1~X-hO%VJaS56h?5C!FPxi;cn%C^ydtO89DQ?DRmDt~Qe7WeTm&1{gBFZ2PCJ@6 z-{+GMGiXtkSN>!@ov*B5+}}}acCHjtgXJ2QZsbJC6g$U{m?MtQ_&6(ZXuarVvEOPj zKF^@Nt=M0rBTEaC^=x2LiZkjK?sk%|+AB^cT{DkljgC!Z7v;kll^KQvu}U~73yxOt zg+C>?Xrt)wm%TBj9Ib(kvD-~KVAvV5QG%K5&?UX@?*)bEmDJpn>6tf%kXWOZ>A+Yo z6}=$$z13n?NwE@1M1dJyb%fTImgmV}Ne3&A7w`ZQBXZ=JW22=U z#7GP0El~2R7}LfiLL#o~_m`>HXrN46Iry?SXhnS_l{g-!>^AmJ31y4yo{dAWKH(>PVpCNXn=#!E3=ywc! zcdShezrA1Z_1jzc*Iyqt^fu4OS}#wZ$GzW*>$k`9)Ex?>{lwi87{h@1H7^1?%0AQx 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 diff --git a/testdata/root_anchor.tdir/root_anchor.dsc b/testdata/root_anchor.tdir/root_anchor.dsc new file mode 100644 index 000000000000..daf231da58de --- /dev/null +++ b/testdata/root_anchor.tdir/root_anchor.dsc @@ -0,0 +1,16 @@ +BaseName: root_anchor +Version: 1.0 +Description: check if root anchor has changed. +CreationDate: Tue Sep 28 12:43:09 CEST 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: root_anchor.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/root_anchor.tdir/root_anchor.test b/testdata/root_anchor.tdir/root_anchor.test new file mode 100644 index 000000000000..8be248ab9e12 --- /dev/null +++ b/testdata/root_anchor.tdir/root_anchor.test @@ -0,0 +1,51 @@ +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# only do this test if the network is up. +echo "is the net up?" +if dig @k.root-servers.net . SOA 2>&1 | grep NOERROR ; then + echo yes +else + echo no + exit 0 +fi + +# test that unbound-anchor, its builtin DNSKEY, works. +# so the https is disabled (go to 127.0.0.1@10099). +$PRE/unbound-anchor -u "127.0.0.1" -P 10099 -a test.ds -v +# check that the test.ds file is OK. +if $PRE/unbound-host -f test.ds -t SOA -v . 2>&1 | grep "(secure)"; then + echo "The builtin DS root anchors work" +else + echo "The builtin DS root anchors do not work" + exit 1 +fi + +echo "" +# test that unbound-anchor, the builtin certificate, works +# so, force https with -F and the -c is a nonexistant file +$PRE/unbound-anchor -a test.cert -c test.pem -v -F +# check that the test.cert file is OK. +if $PRE/unbound-host -f test.cert -t SOA -v . 2>&1 | grep "(secure)"; then + echo "The builtin root update certificate works" +else + echo "The builtin root update certificate does not work" + exit 1 +fi + +# use curl to see if the PGP certificate has been updated. +curl --time-cond "20170203 10:00:00" https://data.iana.org/root-anchors/icannbundle.pem > newcert +if test -n "`cat newcert`"; then + echo "icannbundle.pem has been updated" + cat newcert + echo "icannbundle.pem has been updated" + exit 1 +else + echo "icannbundle.pem has not been updated" +fi + +exit 0 diff --git a/testdata/root_anchor.tpkg b/testdata/root_anchor.tpkg deleted file mode 100644 index 98aa57e5257eed2ca3ff83e0e670f77262fc5aa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmVWN zRz{*NHZ~=YRNMgj@w=q#Ofur6L(>hzc=C|N%lqIt2lf-X_pJcJdr5jh4G%yR%?cC=e3dXB-sl3R9L$ zYa!?BRBeY=mX?W-$;HWcflW;Vg6RsmxP`31x`nPYh?!fWwJ{`l=0e_b zP546d^{XuK!$)BtA~Rv@b0wLaVM2LTR5AOG*G>*6X^;q+6Gg(jfQu3vxEj-;Jgq!@yQq-Y8Lk!1l zRc6RSlaZQ`-Ky+z%L=Y{=u`I!tY=|&wB~$sbSG~otr$7Olftn>)$ub*oKqMYvE*S| zpcFyR-X*=Lk2^ex>~ByDmUO%5!>C}A(L&ALy|>mwcQL+{S4iT5I~`tOYgpOTmSneU zLJ7fptYTw$zeU}4gzZ{!$qnzn;k72J$@hI;mfE(b+xm42YWDw!?*B}uPjbgRa{otz zUfhXey#D)xem}PN|8N-h{r&$>;0@FKj4gQr4duyCc-@IYCJ@tz9CMv2Q5rW;w<0_S zjb`h1T$(dEw})`7IJ0w)ao;6yS#g+RkLi7bms2w6C($8{Po|fECo>{HG9eBAag{)( zDEv&v^avl~gPb#_GEK%9WnQS;1jx8pme@|ENyvDa9rKdQOyl@ppMKzrG9eSi@gH`- zgk0iTZLO^Sws2H^JjKpwT_*T_gJ%gjWnxiT$A4Q84-XFy4-XFy4-XFy4-XFy4-XFy U4-XFy50B5lpUlY24*)0t08a1nWdHyG diff --git a/testdata/root_hints.tdir/root_hints.dsc b/testdata/root_hints.tdir/root_hints.dsc new file mode 100644 index 000000000000..5576fbaf942a --- /dev/null +++ b/testdata/root_hints.tdir/root_hints.dsc @@ -0,0 +1,16 @@ +BaseName: root_hints +Version: 1.0 +Description: check if root hints have changed. +CreationDate: Thu Oct 22 12:42:40 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: +Post: +Test: root_hints.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/root_hints.tdir/root_hints.test b/testdata/root_hints.tdir/root_hints.test new file mode 100644 index 000000000000..6ae4ec7f4677 --- /dev/null +++ b/testdata/root_hints.tdir/root_hints.test @@ -0,0 +1,62 @@ +# #-- 06-ianaports.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." + +# dig 9 ? +digv=`dig -v 2>&1 | wc -l` +if test $digv -ne 1; then + echo "Dig too old. skip test" + exit 0 +fi + +eval `grep ^srcdir= $PRE/Makefile` +echo "srcdir="$srcdir + +# obtain list from compiled in settings: +grep "ROOT-SERVERS.NET." $PRE/$srcdir/iterator/iter_hints.c > curlist +echo "Current list:" +cat curlist + +result="0" + +# dig all servers and check if same +for rs in A.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET.; do + + addr4=`dig +short $rs A` + addr6=`dig +short $rs AAAA` + + # all IP4 must be present as listed. + if test -z "$addr4" ; then + echo "$rs A is removed! It has changed!" + result="1" + fi + if grep $rs curlist | grep "$addr4" >/dev/null; then + echo "$rs is OK: A $addr4" + else + echo "$rs A now $addr4, it has changed!" + result="1" + fi + # if IP6 is "" then it must be "" as well in the compiled hints + if test -z "$addr6" ; then + if grep $rs curlist | grep ":" >/dev/null; then + echo "$rs AAAA now removed, it has changed!" + result="1" + else + echo $rs' is OK: AAAA ""' + fi + else + # root server has an IP6. + if grep $rs curlist | grep "$addr6" >/dev/null; then + echo "$rs is OK: AAAA $addr6" + else + echo "$rs AAAA now $addr6, it has changed!" + result="1" + fi + fi +done + +exit $result diff --git a/testdata/root_hints.tpkg b/testdata/root_hints.tpkg deleted file mode 100644 index 9c83fc32d360cbe5a5d8e351ee0997d66f957183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmV+n1oQhJiwFSi7A#2s1MODbbJ|7__p9%(*a*gcXeCY{L#vG4aR4_?>X@;a^r6$1 zvvh`wg^szCAkFlT@7_sZuw}ascG{V+1NzwA+uwfN?nz0R{W%e7roC9G#?DI+r2*|6 z9N?Y$op#II&0~4DwBsYSsNZS@M(zg(L1*XSMZCE~xz3nE$c4-^t{&Et+2k>?4W{YS zGN{h8`}snoHtWCss-tJZpgyJTAb7C;f#1RU(@v+|3|cM2_d5aBpFR`*qx6l}{|(dp z1Do;?Zc9%-a;1e#L-0LHdR#|J%reV}COoD0KUmLugX^136=80RLQt5GxOU^}60M-o&SL%$SNb>7tdfRDXp) zx^g;`DNnPIbf(f2&D@wfSH4f4kM(_WxI)8q{1DXxkMmWizSD!h`G9 zNDZ{iRm1^9hbhyTADA-**VsL#+UrPld1^bLl!LAT;hTSUCaS64#U;|}CM9AQxf9M!!&mjmGi!uBNKM}mo z4@c(BokR0z&xgNZ5rLbG2o5-FwQh94O*#0lO`Iv&<wnEfm7OR2uw4}WbsgTcLYZe<;nn* zUUYM%aJpK|&><1aRtiLMohR9$Lsto8NrHZ;Ii3{2()jjZ(0G^-Q$7@+ugBg!@8C@Z zuUoP!24&Y`JHxQ4ksw zpUOFpU%@FJ;b^2hyI5zsOpg%Px|zsi}hSASCItM)_zj1%(TvG@A^-M1y0)~XEp6$4K>q;f)E6-T G6aWAo85HyY diff --git a/testdata/speed_cache.tdir/makeqs.c b/testdata/speed_cache.tdir/makeqs.c new file mode 100644 index 000000000000..8e6179f66b21 --- /dev/null +++ b/testdata/speed_cache.tdir/makeqs.c @@ -0,0 +1,14 @@ +/** + * \file + * This file creates queries for the speed test + */ +#include +#include +/** main program to create queries, pass the number of them. */ +int main(int argc, char** argv) { + int i; + int max = atoi(argv[1]); + for(i=0; imakeqs.c < +#include +int main(int argc, char** argv) { + int i; + int max = atoi(argv[1]); + for(i=0; i $2 + #while test $i -lt $1; do + #echo "a$i.example.com IN A" >> $2 + #i=`expr $i + 1` + #done +#} + +./makeqs 10 > q10.txt +cat q10.txt +./makeqs 100 > q100.txt +./makeqs 1000 > q1000.txt +./makeqs 10000 > q10000.txt +./makeqs 100000 > q100000.txt +#./makeqs 1000000 > q1000000.txt +#./makeqs 10000000 > q10000000.txt diff --git a/testdata/speed_cache.tdir/speed_cache.conf b/testdata/speed_cache.tdir/speed_cache.conf new file mode 100644 index 000000000000..64cf30b796d8 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.conf @@ -0,0 +1,17 @@ +server: + verbosity: 0 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + rrset-cache-size: 100k + msg-cache-size: 100k +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/speed_cache.tdir/speed_cache.dsc b/testdata/speed_cache.tdir/speed_cache.dsc new file mode 100644 index 000000000000..9171dd2a6115 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.dsc @@ -0,0 +1,16 @@ +BaseName: speed_cache +Version: 1.0 +Description: Speed test with cache sizes +CreationDate: Fri Feb 15 15:46:25 CET 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: speed_cache.pre +Post: speed_cache.post +Test: speed_cache.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/speed_cache.tdir/speed_cache.post b/testdata/speed_cache.tdir/speed_cache.post new file mode 100644 index 000000000000..3ca4a4b403d7 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.post @@ -0,0 +1,10 @@ +# #-- speed_cache.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/speed_cache.tdir/speed_cache.pre b/testdata/speed_cache.tdir/speed_cache.pre new file mode 100644 index 000000000000..fc7906e33f40 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.pre @@ -0,0 +1,31 @@ +# #-- speed_cache.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT speed_cache.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < speed_cache.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/speed_cache.tdir/speed_cache.test b/testdata/speed_cache.tdir/speed_cache.test new file mode 100644 index 000000000000..a45d4436c3b3 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.test @@ -0,0 +1,79 @@ +# #-- speed_cache.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh + +# make tool +get_make +(cd $PRE; $MAKE perf) + +get_gcc +$CC -o makeqs makeqs.c +if test $? -ne 0; then + echo "could not compile makeqs" + exit 1 +fi + +./makeqs 10 > q10.txt +cat q10.txt +./makeqs 100 > q100.txt +./makeqs 1000 > q1000.txt +./makeqs 10000 > q10000.txt +#./makeqs 100000 > q100000.txt +#./makeqs 1000000 > q1000000.txt +#./makeqs 10000000 > q10000000.txt + +# seconds per test +dur=1 + +# do the test +echo "> perf test ldns-testns" +$PRE/perf -d $dur -a "www.example.com IN A" 127.0.0.1@$FWD_PORT 2>&1 | tee outfile + +echo "> perf test cache-1" +$PRE/perf -d $dur -a "www.example.com IN A" 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile +echo -n "cache-size-1 " >> ../.perfstats.txt +grep "average qps" outfile >> ../.perfstats.txt + +# with $1=number $2=pretty-str $3=queryfile +function perfnum() { + echo "" + echo "> perf test $1 $2" + $PRE/perf -d $dur -f $3 127.0.0.1@$UNBOUND_PORT 2>&1 | tee outfile + if test -n "$2"; then + echo -n "$2 " >> ../.perfstats.txt + grep "average qps" outfile >> ../.perfstats.txt + fi +} + +function perftns() { + echo "" + echo "> perf testns $1 $2" + $PRE/perf -d $dur -f $3 127.0.0.1@$FWD_PORT 2>&1 | tee outfile +} + +#perfnum 10 "" q10.txt +perfnum 100 "cache-suffices" q100.txt +#perfnum 1000 "" q1000.txt +perfnum 10000 "cache-toosmall" q10000.txt +#perfnum 100000 "100k" q100000.txt +#perfnum 1000000 "1m" q1000000.txt +#perfnum 1000000 "10m" q10000000.txt + +#perftns 10 "10" q10.txt +#perftns 100 "100" q100.txt +perftns 1000 "1k" q1000.txt +#perftns 10000 "10k" q10000.txt +#perftns 100000 "100k" q100000.txt +#perftns 1000000 "1m" q1000000.txt +#perftns 1000000 "10m" q10000000.txt + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +rm -f q*.txt +exit 0 diff --git a/testdata/speed_cache.tdir/speed_cache.testns b/testdata/speed_cache.tdir/speed_cache.testns new file mode 100644 index 000000000000..1293c24b0150 --- /dev/null +++ b/testdata/speed_cache.tdir/speed_cache.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype +REPLY QR AA NOERROR +ADJUST copy_id copy_query +SECTION QUESTION +www IN A +SECTION AUTHORITY +@ IN SOA ns hostmaster 2008021401 1800 900 604800 86400 +ENTRY_END + diff --git a/testdata/speed_cache.tpkg b/testdata/speed_cache.tpkg deleted file mode 100644 index bade5288b3a43a5e5221a7fdd9b577d7f9301f63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2178 zcmV-|2z~b-iwFQ1QK?e^1MOOUd)hb>@4wckm;<&++S;+rTaE-SG$GsEwIoZ(?bBy> zAJ(x2_yV>go09BZzx$133^sveyO+{lSHHa2o*9j#v1T+Q2m?x;o^9DfsyQy(efAlk z>w2|Z2D}>8N-@4xb$*=#46|4^&9YuBS3x(*x?Xw)<cBeg*c>VlQ6shYvgOZvr!L0e3(1 zIJRz~4p!v5+g$o5 zr2lUMudR@_tud`Z>dljXQWmd#q=JDSzFS=m+!ClXF;_JZ7a<=r+L|ZgCpv`Cx@JIan@A45QgZ;V=KhhB7%x;8YSHTV-L;$SNyB! zC4ReCDdC9Y0k_)6w9)BX+wgUxhwGV}N&408Ypsc?`1b<-Lq;PZust<9c3`xOE z+ z%M^?AuG7;@w~Jd|-=Ex^zkYHHk+qY{imaGivQT(j9{B_QhA}|#r~cH@kOJai;$8U@ zPY?(j^96JBLMRXcU;jGt(1-FrjN1LD=;N{auT(0}&;NM_kNKZosmlCs6NoFn8d327 zl^?p%T@9C}k_U8gH5xK%@dFkE1Gb0L?^`ylErK3V0-r@SIOK8fkSLhRso`CS3%-V_ z4pDGHQ9BZcI6S}xuETu=9}?F<3exQ%^Zh86K^4ps=TZF0@l{NjRIz8NBj2`0LvftL zl`|I7NL}osHSV<6L>Y&J`&3LQrxtV6-+YhaWM@5KLZ~Dh%W)Wz76JXRdnTrp`=%?# zhx{KChbQUd5&t(TxJk_FzjDPaiSys0tp7HG`}H5b^>3;ATdMeY5yvdg@y9(LyTByr zRJC5{%7smH=cMrk~=(H9L^F%|dH(w@Q{9A6KQY1P@MVC_Zjp z5B1{2loZ|`w=a6#)i-?J|2tzre00X|0`9@1#w5H$oRh*> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < speed_local.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_unbound_up unbound.log + diff --git a/testdata/speed_local.tdir/speed_local.test b/testdata/speed_local.tdir/speed_local.test new file mode 100644 index 000000000000..684b3c52251b --- /dev/null +++ b/testdata/speed_local.tdir/speed_local.test @@ -0,0 +1,43 @@ +# #-- speed_local.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE perf) + +echo "> perf version.server" +$PRE/perf -d 1 -a "version.server CH TXT -" 127.0.0.1@$UNBOUND_PORT 2>&1 | +tee outfile + +echo -n "version-server " > line.txt +if grep "average qps" outfile >> line.txt 2>&1; then + echo "OK" +else + echo "> cat logfiles" + cat unbound.log + echo "Not OK" + exit 1 +fi + + +echo "> perf localhost" +$PRE/perf -d 1 -a "localhost IN A -" 127.0.0.1@$UNBOUND_PORT 2>&1 | +tee outfile + +echo -n "localhost-addr " >> line.txt +if grep "average qps" outfile >> line.txt 2>&1; then + echo "OK" +else + echo "> cat logfiles" + cat unbound.log + echo "Not OK" + exit 1 +fi + +cat line.txt >> ../.perfstats.txt + +exit 0 diff --git a/testdata/speed_local.tdir/speed_local.testns b/testdata/speed_local.tdir/speed_local.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/speed_local.tdir/speed_local.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/speed_local.tpkg b/testdata/speed_local.tpkg deleted file mode 100644 index 572f60cf14ca0cf1a980d6dca66cfccdec4e894b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1367 zcmV-d1*rNTiwFQ7QK?e^1ML{?a@#hnf5oT39ADDjP6{Pk%FbPLacyVG+S;k3tm|z% zpCZw=8e3FFx=wa`_<{7dm&Uy4B*|Iq^grS!mc z0bBdPD^1!1s@ge#ZM%-^P!AiRwo4uF5x5Vrm~|Kl8DzMWF&{~meVlI-eY%f%`#%A( zcK*v_$%MQQ9cT})T>j|!+a4`1oxcs#!9V*E(ECun3BK|3-+>*|g!NMg)7&9DAowT? z8OT0^VIXk(@FB>c8xI(a`z(Q2?g>TB82Js%E?CySCDW^(g>2Sz#vib|I}>yZ9kq-E zQs!u_zRNR+6VQD`#=#}3Oamd}q&HQyI$=f23W<=jcH>z=skRElQfmnLaL5x&^huA& z&M>%QrK8M1g9>NEfiCE2J8FmXq@$YMj8G#LE0EJZ+ zsGWfSs}E)YZ0EqD_-7v#FPhI=7tMO-tkw3xIo!43FCdaJzze2KJJo6?b8+TGoKb*7 z7{m#)p%5S`=rMSoio#3=94_9RanzEmAn_Es)RZa$gkO<^O5M?nTF@ z{LgVq^ZbtOb3@nu00@nJ{BE^x?l-tny1p7zM`n;Giy z<2e?-2m8sBY09%Yae1T@lJ$k`fXXyMeN^L~HX{)%0+Yd>*w+#C_oMy26*+tRdo%hZ zbZL&+$`tiSSpQ&SjySs1J#~b5x916qwkaOwWe{HVGKE=5jdi{@W5txs3}=Gia4F@P zq-MJdvz^wT6~9|Ii9#+7ZZ(KXkk)YHAeNn}vd$=7NwxBr{Sa_x{O4P#|7p48Eb9N# zwEoZYzpcP6@t<$G{$J8E3;B2H_~g*9b`Wv6K_UvqjF68L(1O;!30Lu8(7{v`mP6Jz z5^nDD|44-QqGO}~dlYQ-L`*%$^K|`3shj)%HsE<6SX0+dOD9i$nLIpUsb^7AXClnv zRBFVz;+pvBIF|jzgAeE;%_21{85L_ikSNsekKmYHf?WpNtGIT>b)nYq0Z;e`@+!ch z692LOgebG%ja9R%*u?LWUV#28NDYPbbp1$be3)XXm&gjK4Wl|sS)wXavgn<#L0Tba z+3H?YK1 z_T2w%uT)b0@0RoL|5o5BsF#!Jd-bIHQk6-u)js{{vwf^(PxsO#) zdeey`a^9%!QuzG$4Q4jGTf#%a^2&MDRA`I|<2jyG&-In*jqt4yb>Xf*42agaj} ZIpmN-4msqILk^z;e*?uG?!N#i004t|v=0CP diff --git a/testdata/stat_timer.tdir/stat_timer.conf b/testdata/stat_timer.tdir/stat_timer.conf new file mode 100644 index 000000000000..8245647294b1 --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.conf @@ -0,0 +1,16 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + statistics-interval: 1 +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" + diff --git a/testdata/stat_timer.tdir/stat_timer.dsc b/testdata/stat_timer.tdir/stat_timer.dsc new file mode 100644 index 000000000000..3d6f23e71e32 --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.dsc @@ -0,0 +1,16 @@ +BaseName: stat_timer +Version: 1.0 +Description: Test statistics-interval timer. +CreationDate: Tue Feb 5 14:41:10 CET 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: stat_timer.pre +Post: stat_timer.post +Test: stat_timer.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/stat_timer.tdir/stat_timer.post b/testdata/stat_timer.tdir/stat_timer.post new file mode 100644 index 000000000000..0a9d9ac5bd17 --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.post @@ -0,0 +1,11 @@ +# #-- stat_timer.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID + diff --git a/testdata/stat_timer.tdir/stat_timer.pre b/testdata/stat_timer.tdir/stat_timer.pre new file mode 100644 index 000000000000..284e1106d58a --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.pre @@ -0,0 +1,31 @@ +# #-- stat_timer.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT stat_timer.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stat_timer.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/stat_timer.tdir/stat_timer.test b/testdata/stat_timer.tdir/stat_timer.test new file mode 100644 index 000000000000..8a84c3f41d17 --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.test @@ -0,0 +1,40 @@ +# #-- stat_timer.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# test if unbound is up +echo "> dig www.example.com." +dig @localhost -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +# wait for statistics timer to go off a couple times. +sleep 5 + +n=`grep "server stats" unbound.log | wc | awk '{print $1}'` +echo "counted $n stat lines" +if test $n -gt 6; then + echo "OK" +else + echo "> cat logfiles" + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +fi + +echo "> cat logfiles" +cat fwd.log +cat unbound.log +exit 0 diff --git a/testdata/stat_timer.tdir/stat_timer.testns b/testdata/stat_timer.tdir/stat_timer.testns new file mode 100644 index 000000000000..f2a700cc7daf --- /dev/null +++ b/testdata/stat_timer.tdir/stat_timer.testns @@ -0,0 +1,14 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + diff --git a/testdata/stat_timer.tpkg b/testdata/stat_timer.tpkg deleted file mode 100644 index 982e698829ab963c541a7430f24cacd8077fbe92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmV;)1vdI0iwFR&JA`?&l1vvn-5 zkA&pr{;xGX&c+X;1O4ID>$mTJ-E4qq)ojbEHypeBA_#l=gtlXIeZJ)b(W(Oi~IME`RKL6kAq9H}DU+5f^b2j?emo;V~)ACDr7$ z4Edx9jFS>RQPhjMK$+z-4i5Zr5TbzcoL%xc^L6AP-V+@mPC5 zr{Y=*x#xycF5^_VdQ<}$2cFat+djCVGIY$v!WF*uCubCwmC4dkSl;9MzChM;701WJ zezJfvAzyksc22j)e@tckFgosuf73QiF!2?E@L#XhEHEqu3Pt?yg7#of(_m}cLDTlg z9!NeH9));HVdhF)J$!Hls1Sz5lrjk7s#Lv#l3zd@gRURwadb7&ahRUX_zm{=b3r%s zqZW*KSg{lJ7^x62NbZptxRu&5C{SZ z^9Ts_rX0#g;0F^}EEYQb=+2^$;!ALb(-il32|u7kP`T*6=wI|YBLy6v%z(d94+VT; zl(Uw?y(#ssz-4klMVX)x6G0;cB15+fy=LfjqnyuquKdbKDV^H?sZ3}nY2HRrZVU*s zYN%8Qip}xD*O3KjD@R!5nEzCN&%A5ljp^nrBTm;X72y^4RwQ1zc<7Wv;!=+pQY^lQrgwqkuk zuBGEeUhQv zVda~3s}v)HjP469wY|yv&eel$bhpZn7TnaRC*$a;)F3&2yw&7dwOJ~leVC)8rgAU6giwzIH8vS znBUi%b+d^;-|h|p>-+D>YZoWuhl(cnLWj3{TW{ed_=8Pc%z7kgqmW7R>j7!=S;QG- zag(%XeuqYssoy2Y>h2{Cqb4~M8!J)SEICVlGT16{iCRf>J6j^H`NtD==7R#yFyo|t jlbpCgI7hJs#1vFeK?N05P(cM1^!Vvth8I1c04M+etyS?U diff --git a/testdata/stream_ssl.tdir/stream_ssl.clie.conf b/testdata/stream_ssl.tdir/stream_ssl.clie.conf new file mode 100644 index 000000000000..f62af1a86f45 --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.clie.conf @@ -0,0 +1,17 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @CLIEPORT@ + use-syslog: no + directory: . + pidfile: "unbound-clie.pid" + chroot: "" + username: "" + do-not-query-localhost: no + + ssl-upstream: yes + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@SERVPORT@" diff --git a/testdata/stream_ssl.tdir/stream_ssl.dsc b/testdata/stream_ssl.tdir/stream_ssl.dsc new file mode 100644 index 000000000000..ee79484ece6c --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.dsc @@ -0,0 +1,16 @@ +BaseName: stream_ssl +Version: 1.0 +Description: Stream queries over SSL channel. +CreationDate: Wed Nov 9 14:02:31 CET 2011 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: stream_ssl.pre +Post: stream_ssl.post +Test: stream_ssl.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/stream_ssl.tdir/stream_ssl.post b/testdata/stream_ssl.tdir/stream_ssl.post new file mode 100644 index 000000000000..4cdbe726710f --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.post @@ -0,0 +1,10 @@ +# #-- stream_ssl.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $UNBOUNDSERV_PID +kill_pid $UNBOUNDCLIE_PID diff --git a/testdata/stream_ssl.tdir/stream_ssl.pre b/testdata/stream_ssl.tdir/stream_ssl.pre new file mode 100644 index 000000000000..200d27cf61a2 --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.pre @@ -0,0 +1,29 @@ +# #-- stream_ssl.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +SERV_PORT=$RND_PORT +CLIE_PORT=$(($RND_PORT + 1)) +echo "SERV_PORT=$SERV_PORT" >> .tpkg.var.test +echo "CLIE_PORT=$CLIE_PORT" >> .tpkg.var.test + +# make config files +sed -e 's/@SERVPORT\@/'$SERV_PORT'/' -e 's/@CLIEPORT\@/'$CLIE_PORT'/' < stream_ssl.serv.conf > ubserv.conf +sed -e 's/@SERVPORT\@/'$SERV_PORT'/' -e 's/@CLIEPORT\@/'$CLIE_PORT'/' < stream_ssl.clie.conf > ubclie.conf + +# start unbound in the background +PRE="../.." +$PRE/unbound -d -v -v -v -v -c ubserv.conf >unboundserv.log 2>&1 & +UNBOUNDSERV_PID=$! +echo "UNBOUNDSERV_PID=$UNBOUNDSERV_PID" >> .tpkg.var.test +$PRE/unbound -d -v -v -v -v -c ubclie.conf >unboundclie.log 2>&1 & +UNBOUNDCLIE_PID=$! +echo "UNBOUNDCLIE_PID=$UNBOUNDCLIE_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_unbound_up unboundserv.log +wait_unbound_up unboundclie.log diff --git a/testdata/stream_ssl.tdir/stream_ssl.serv.conf b/testdata/stream_ssl.tdir/stream_ssl.serv.conf new file mode 100644 index 000000000000..9dd169ff78bf --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.serv.conf @@ -0,0 +1,20 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @SERVPORT@ + use-syslog: no + directory: . + pidfile: "unbound-serv.pid" + chroot: "" + username: "" + do-not-query-localhost: yes + local-data: "www.example.com. IN A 10.20.30.40" + ssl-port: @SERVPORT@ + ssl-service-key: "unbound_server.key" + ssl-service-pem: "unbound_server.pem" + +# no other queries should reach here. +forward-zone: + name: "." + forward-addr: "127.0.0.1" diff --git a/testdata/stream_ssl.tdir/stream_ssl.test b/testdata/stream_ssl.tdir/stream_ssl.test new file mode 100644 index 000000000000..08bbcdee9205 --- /dev/null +++ b/testdata/stream_ssl.tdir/stream_ssl.test @@ -0,0 +1,74 @@ +# #-- stream_ssl.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# first test streamtcp against the server unbound. +echo "> streamtcp -s www.example.com A IN" +$PRE/streamtcp -s -f 127.0.0.1@$SERV_PORT www.example.com. A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + echo "SSLSERVICE" + cat unboundserv.log + echo "SSLCLIENT" + cat unboundclie.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +echo "SSLSERVICE" +cat unboundserv.log +echo "SSLCLIENT" +cat unboundclie.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +rm -f outfile + +# test client unbound (no SSL towards it, but it does SSL to the SSL service) +echo "> dig www.example.com A IN" +dig @127.0.0.1 -p $CLIE_PORT www.example.com. >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + echo "SSLSERVICE" + cat unboundserv.log + echo "SSLCLIENT" + cat unboundclie.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +echo "SSLSERVICE" +cat unboundserv.log +echo "SSLCLIENT" +cat unboundclie.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/stream_ssl.tdir/unbound_control.key b/testdata/stream_ssl.tdir/unbound_control.key new file mode 100644 index 000000000000..d7c43a06bb58 --- /dev/null +++ b/testdata/stream_ssl.tdir/unbound_control.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDD6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBa +rzPA0vlyuNtUsEN3qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvH +ST6JwUdIg0Lzg/USJ81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQAB +AoGAFT3e35MIgI4uDJJ8X0RfHp2NCO2LUg4TKbWical/C0W9vlR1/x80G1pE1d2Z +WotqJVWTrOq6eBox19RCgtLg2wPGk9uD62+9SDT37heWFlUCElWq50pQG6k9ThiG +DDypkZyZ/52+DdWybiaQJkuK6O5qQXuNAtVJMpghu4GnHAECQQDsupnZUQDpapzr +4FC4MSkL2+A1PRt6g4VhwoqOpJXaHfVnH6F7AwUuOLNwGdR5Cvv70pfJ7Jqg8L2m +Kxyl5bORAkEA09rn34YQ0pHJdHidbl2kInIuYTz09+TO3LWwan17nISH9aaYvVDr +p9x1B4Qzw9qyxT9oll7ze/5Rw/7C3AQj4QJAT2B2a+b8bkgAXBs4FbruL3rHoDJg +P2FQXSpVOWU4lg2LlsuFYvDtUMVUbZdLplanjZXcral3Y9W1Ub2M+ped8QJAYQN+ +aRpge7ys7vwIw7B36Bo3aOncF+ScYe+FkM5Tm7II/JHEofT7ZQwMP1vnxIlSkgbe +YvWqNB6a3NC99LikoQJBAM4UhDdRg63Tr6Idky6CQaH///zAN7nArJfffKGWFdw9 +DKrWpNqvYZtX/cfEJucKcRCm5YL8CKFYbQy4VoCxUcE= +-----END RSA PRIVATE KEY----- diff --git a/testdata/stream_ssl.tdir/unbound_control.pem b/testdata/stream_ssl.tdir/unbound_control.pem new file mode 100644 index 000000000000..8f1ba87f1cdd --- /dev/null +++ b/testdata/stream_ssl.tdir/unbound_control.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBozCCAQwCCQD6XaN6FzW/4DANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowGjEYMBYGA1UE +AxMPdW5ib3VuZC1jb250cm9sMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD +6DogNCsSeEa1u99+6PUVbGzjMzzei9MIK6s94+zcpp7OAOBarzPA0vlyuNtUsEN3 +qwPomQQQmIgbT7OXkzC1wqioxwa609xoL8oW/I7e336rEyvHST6JwUdIg0Lzg/US +J81eTwMnzYSd4Bpsqr9eP33ubaR7Gh/6o76loLOlcQIDAQABMA0GCSqGSIb3DQEB +BQUAA4GBAGFAXmaQHuFgAuc6HVhYZJdToxLBhfxGpot4oZNjcb1Cdoz3OL34MU1B +9E5psj2PpGPIi8/RwoqBtAJHJ+J5cWngo03o4ZmdwKNSzaxlp141z/3rUtFqEHEC +iO6gPCT3U7dt6MyC7r6vdMqyW6aldP3CtwD0gQziKAMoj+TAfAcq +-----END CERTIFICATE----- diff --git a/testdata/stream_ssl.tdir/unbound_server.key b/testdata/stream_ssl.tdir/unbound_server.key new file mode 100644 index 000000000000..4256c421dd0d --- /dev/null +++ b/testdata/stream_ssl.tdir/unbound_server.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQC3F7Jsv2u01pLL9rFnjsMU/IaCFUIz/624DcaE84Z4gjMl5kWA +3axQcqul1wlwSrbKwrony+d9hH/+MX0tZwvl8w3OmhmOAiaQ+SHCsIuOjVwQjX0s +RLB61Pz5+PAiVvnPa9JIYB5QrK6DVEsxIHj8MOc5JKORrnESsFDh6yeMeQIDAQAB +AoGAAuWoGBprTOA8UGfl5LqYkaNxSWumsYXxLMFjC8WCsjN1NbtQDDr1uAwodSZS +6ujzvX+ZTHnofs7y64XC8k34HTOCD2zlW7kijWbT8YjRYFU6o9F5zUGD9RCan0ds +sVscT2psLSzfdsmFAcbmnGdxYkXk2PC1FHtaqExxehralGUCQQDcqrg9uQKXlhQi +XAaPr8SiWvtRm2a9IMMZkRfUWZclPHq6fCWNuUaCD+cTat4wAuqeknAz33VEosw3 +fXGsok//AkEA1GjIHXrOcSlpfVJb6NeOBugjRtZ7ZDT5gbtnMS9ob0qntKV6saaL +CNmJwuD9Q3XkU5j1+uHvYGP2NzcJd2CjhwJACV0hNlVMe9w9fHvFN4Gw6WbM9ViP +0oS6YrJafYNTu5vGZXVxLoNnL4u3NYa6aPUmuZXjNwBLfJ8f5VboZPf6RwJAINd2 +oYA8bSi/A755MX4qmozH74r4Fx1Nuq5UHTm8RwDe/0Javx8F/j9MWpJY9lZDEF3l +In5OebPa/NyInSmW/wJAZuP9aRn0nDBkHYri++1A7NykMiJ/nH0mDECbnk+wxx0S +LwqIetBhxb8eQwMg45+iAH7CHAMQ8BQuF/nFE6eotg== +-----END RSA PRIVATE KEY----- diff --git a/testdata/stream_ssl.tdir/unbound_server.pem b/testdata/stream_ssl.tdir/unbound_server.pem new file mode 100644 index 000000000000..aeda3ff11882 --- /dev/null +++ b/testdata/stream_ssl.tdir/unbound_server.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmzCCAQQCCQDsNJ1UmphEFzANBgkqhkiG9w0BAQUFADASMRAwDgYDVQQDEwd1 +bmJvdW5kMB4XDTA4MDkxMTA5MDk0MFoXDTI4MDUyOTA5MDk0MFowEjEQMA4GA1UE +AxMHdW5ib3VuZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtxeybL9rtNaS +y/axZ47DFPyGghVCM/+tuA3GhPOGeIIzJeZFgN2sUHKrpdcJcEq2ysK6J8vnfYR/ +/jF9LWcL5fMNzpoZjgImkPkhwrCLjo1cEI19LESwetT8+fjwIlb5z2vSSGAeUKyu +g1RLMSB4/DDnOSSjka5xErBQ4esnjHkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQAZ +9N0lnLENs4JMvPS+mn8C5m9bkkFITd32IiLjf0zgYpIUbFXH6XaEr9GNZBUG8feG +l/6WRXnbnVSblI5odQ4XxGZ9inYY6qtW30uv76HvoKp+QZ1c3460ddR8NauhcCHH +Z7S+QbLXi+r2JAhpPozZCjBHlRD0ixzA1mKQTJhJZg== +-----END CERTIFICATE----- diff --git a/testdata/stream_ssl.tpkg b/testdata/stream_ssl.tpkg deleted file mode 100644 index cf734d4d70b11e09f597a9e43ab71f9c0462ec2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3733 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 .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT stream_tcp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stream_tcp.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -v -v -v -v -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log diff --git a/testdata/stream_tcp.tdir/stream_tcp.test b/testdata/stream_tcp.tdir/stream_tcp.test new file mode 100644 index 000000000000..695cb0c72f3a --- /dev/null +++ b/testdata/stream_tcp.tdir/stream_tcp.test @@ -0,0 +1,79 @@ +# #-- stream_tcp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# first test a single TCP query. +echo "> query www.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +# test more +echo "" +echo "" +echo "> query www.example.com www2.example.com www3.example.com" +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN www2.example.com. A IN www3.example.com A IN >outfile 2>&1 +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi +if grep "10.20.30.42" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +if grep "10.20.30.43" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/stream_tcp.tdir/stream_tcp.testns b/testdata/stream_tcp.tdir/stream_tcp.testns new file mode 100644 index 000000000000..fefbcc767a09 --- /dev/null +++ b/testdata/stream_tcp.tdir/stream_tcp.testns @@ -0,0 +1,34 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + diff --git a/testdata/stream_tcp.tpkg b/testdata/stream_tcp.tpkg deleted file mode 100644 index 9cc58912e4dfe67b2749dc2fa3b4595dbbed4e7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1520 zcmVW-@dHLYebfNX7PX_w~omk(~b{ zB-iIZ-IVT*bf7)T#p3q)FP6(-;u5h9t7O_X&Oa`f$|Ep#r2mujKcD{>j-+j8N~^G% zdh#n3(&wxSrf!fXm9FrEFkm9^4LmkMvrN{zaz^Z?9TC zbwTFydG4Z}t0z76cJE!QoA7g{p<9M-8+y@*QMB64hXrJ9Lu6$kS^I)yZ-ZoKA=zn2 zcjte*|Etirn>BWC{x8`{{byH-D*sn1rGx+PgO1=x)3O;6H0_8Sf#fscQV7QsrjEp? zhYya3;seablz|_fNY#sp^>@&QpzEi47~G6>9Hz&2{0Ya$OF%Zp};bJc#)xoR)C zUwf(^gg%}BccbGT|F>|nm)ZYSaNNQF_d$33KXR*m`u|L3T^EL2fX|X};5*l-GQc9- zXQR&z1LU&XdY)IR^?cUzM>HHvof}FXyXfmU@EH`|)L*q?d!RX<5JWii1?q?tIiN5g z8nx9?yPsQ~PVP#^4Od=d zbgOo35`VZrk}v#}2aQoMo~b!tB)7mpKl&l!cfy$j#zW}5$}hWW;5s2p_((~U$X3l* z_@XhKdph>RqBUdJe8wWqQbaqEsMMH*P9)u=S&bR`WV7D1+BL0NrOEAM>fV6E#Z-_MCD-A=a4BoVU!aYFk-`oo0Ob?A9fO}2y73i>wgM6B@#BOG--G$&NgQm}Z%nuHP^)EuEbduJ zU0!V(tBj9}GP1-RH!f%>g?r*LIas`vBZb$^c5l#c_4@4|XaOYhvZWl8P+LY#l@;Ka z#Jim5h40d+6eGUaf=N|M;Bq$fM~jz4l6s&~IFYAkO7$OSrzdN6I5|C8_V+u9Z{6@y~#2-s|@g=1U|>XV8|az4YyA383rt}0lPQ$e%} zk^7&K90qeu-b!4@RjepU4p$U)!|1b(j$?gKg^eoYmkS;_sp&QS`M+e(69(dQ`D z^0> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT stub_udp.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_udp.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test + +# wait for forwarder to come up +wait_ldns_testns_up fwd.log + +# wait for unbound to come up +wait_unbound_up unbound.log + diff --git a/testdata/stub_udp.tdir/stub_udp.test b/testdata/stub_udp.tdir/stub_udp.test new file mode 100644 index 000000000000..c417d2a04b2e --- /dev/null +++ b/testdata/stub_udp.tdir/stub_udp.test @@ -0,0 +1,37 @@ +# #-- stub_udp.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + + +# check delegations from cache by doing second test +echo "> dig mail.example.com." +dig @127.0.0.1 -p $UNBOUND_PORT mail.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.66" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/stub_udp.tdir/stub_udp.testns b/testdata/stub_udp.tdir/stub_udp.testns new file mode 100644 index 000000000000..5d581b00a665 --- /dev/null +++ b/testdata/stub_udp.tdir/stub_udp.testns @@ -0,0 +1,46 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +SECTION AUTHORITY +@ IN NS ns.example.com. +SECTION ADDITIONAL +ns IN A 127.0.0.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +mail IN A +SECTION ANSWER +mail IN A 10.20.30.66 +SECTION AUTHORITY +@ IN NS ns.example.com. +SECTION ADDITIONAL +ns IN A 127.0.0.1 +ENTRY_END + +; root prime +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS root.server. +SECTION AUTHORITY +SECTION ADDITIONAL +root.server. IN A 127.0.0.1 +ENTRY_END + diff --git a/testdata/stub_udp.tpkg b/testdata/stub_udp.tpkg deleted file mode 100644 index 9a4757d60daa004804190d65c3c5907ea8f3dc13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1540 zcmV+f2K)IRiwFSHPpMM?1MOLHbJ{i(@4wckcq6%_y&aBi4D9I2g#ul(rG|pDUT@oR zjxE3owp`0DWw#H%Cu18!Nz+~ly=J`Ru=FH7z4s(N>-Wr~_<9sOf$X^9*`xa*MN#V2 zD&SMC*DA|rT@lZmKvk<+RjpTQ6&(~+*H!fqRPRZjHHvv;g{aD$#Ssl}?{`;wYDfP3 zPKX!RKd%HK-QgVQkD9LEy8dddUSF-hRtLeURUUz|Lmh6V|M~hK!BM#k#f2}IkH`^l z7Kb*4XiCAeI9d+xtq{iUjKX|MeQ={wE?PrM{($lrWcf^vf}4qq-Q;w{UvP4g3EI+* zv&0-*a&|;{1Y;J0>qAmTrfXf}l!3*$>rc|D)(5Q3veraoF|Ex!kNGm65;CFDD71Ws zd82@Z5oqMfc;34*I-`DXU_Lt@q$Tp=O~!isIOoETpgws*s6Ay+S|3=fm7v+&RAf13 zB{eH;>nog(TQc#)+zK6Zl+b(T_<&$12;~5Bd8>t7_Jrnm?#MGX z0j+tW!pYLGi_Wv-ABs8&Mq0Q*;gp}9i;4d{KRaFX!s*#* z)^7Il9+{q^_2-qcLNGKTzD`QH17iQ0#lDkl2i%9(mVGk`1&8zp-Df4SrQ{Mh#>!dN zwT%CECJ34-yXb*j$)Xq5n1#w#Z`f9}#Y1z;U2fid*&t%*GLJ$W5Ybv(!ciPRx-@Hp zGdnhirhGB1U=txU2rmiU75^*v&R12uBPdmT1=KM9V^KZC|9#L?@GXyW z8on1BHVMGucpvu$7r$H>KtEVsFr#>!JeeGu<|R~Wib6=&Fb8i(&%4-%ylR>4m%sv> zITYSSivWLxP%`NDFWX@7n2Hh(ha< z_&k-U)nx_$)YPi3(YZ$hJj3nOLjcr-@G?WGsRpbkUT1vsV@x7{g6#Wk}5c zNoXN2cc8q*-YsSoM|{G-Z+*7D2ihM09d7S%jyvMNqU)6;{wuns>GkFPU#lPD|32us z#i@a3yOH0<$nP}dF7q3p$_nXFZij9VC5$0Lb>mPJ_I_cpRg^haE<4!T;!|-OX|5`LC)Q`JcL~R}bfZAGC@8ap7T~8Gynp z8RY-e9G?ySg#`|S1va8!3@B{wLn3G+DRAS?W~0D$AVa_fP5}u%)F^N}{@dLgci}%> z*E0O4>w1F!)XL%gzZcp#|H-j>KpDWbOi>aMvPhF=ewyI86F_vihNVhGaL;p8ktErQ z>8+1Oz`rP!0&bE7KWD;4u4u+4g2ziq<|s?ZC6!_>Cm%AU_6=A*pVP2J+%Zf-yhW7? zxVMx|^Hf;l6KOfL_gjh38K+s@KyW8`68+#tppvmmM6PKm-=Q-)Np5Q##v$`iQ(NTN z7U(1NGv4y>g6DkfDS=YI&{ZD|*`Kd!wXg71QdAyl;7@6L{1@5N-OX{={jaL%plX$B zg8nouiT}#s`_EoziRKza!ryDg-3alPMx-O~W3L=d5zz^Jr4k9@8V$#mjR~ug zlm;Z90M3bo!Mw~D98YKid`2YPQ`C+U3|GRlg?B1(60wq3~9v!LdmP%W)83mU4~H)2|Wd;%#67 q#*SqYY>MXbZ8GK0ko2wB@IVJT(18wgpaUJ~OXxq3nh`nxC;$K>0|dVS diff --git a/testdata/stub_udp6.tdir/stub_udp6.conf b/testdata/stub_udp6.tdir/stub_udp6.conf new file mode 100644 index 000000000000..a037908b3166 --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.conf @@ -0,0 +1,19 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: ::1 + outgoing-interface: ::1 + port: @PORT@ + use-syslog: no + directory: "" + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no +stub-zone: + name: "example.com" + stub-addr: "::1@@TOPORT@" +# a k a root hints +stub-zone: + name: "." + stub-addr: "::1@@TOPORT@" diff --git a/testdata/stub_udp6.tdir/stub_udp6.dsc b/testdata/stub_udp6.tdir/stub_udp6.dsc new file mode 100644 index 000000000000..7f73c58218de --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.dsc @@ -0,0 +1,16 @@ +BaseName: stub_udp6 +Version: 1.0 +Description: Stub server contacted via UDP over IPv6. +CreationDate: Wed Mar 10 13:33:06 CET 2010 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: stub_udp6.pre +Post: stub_udp6.post +Test: stub_udp6.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/stub_udp6.tdir/stub_udp6.post b/testdata/stub_udp6.tdir/stub_udp6.post new file mode 100644 index 000000000000..e25670bbac60 --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.post @@ -0,0 +1,10 @@ +# #-- stub_udp6.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/stub_udp6.tdir/stub_udp6.pre b/testdata/stub_udp6.tdir/stub_udp6.pre new file mode 100644 index 000000000000..209ab242f32f --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.pre @@ -0,0 +1,31 @@ +# #-- stub_udp6.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -6 -p $FWD_PORT stub_udp6.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < stub_udp6.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/stub_udp6.tdir/stub_udp6.test b/testdata/stub_udp6.tdir/stub_udp6.test new file mode 100644 index 000000000000..5336c8e3d67d --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.test @@ -0,0 +1,37 @@ +# #-- stub_udp6.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +PRE="../.." +# do the test +echo "> dig www.example.com." +dig @::1 -p $UNBOUND_PORT www.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + + +# check delegations from cache by doing second test +echo "> dig mail.example.com." +dig @::1 -p $UNBOUND_PORT mail.example.com. | tee outfile +echo "> cat logfiles" +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.66" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/stub_udp6.tdir/stub_udp6.testns b/testdata/stub_udp6.tdir/stub_udp6.testns new file mode 100644 index 000000000000..5d581b00a665 --- /dev/null +++ b/testdata/stub_udp6.tdir/stub_udp6.testns @@ -0,0 +1,46 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +SECTION AUTHORITY +@ IN NS ns.example.com. +SECTION ADDITIONAL +ns IN A 127.0.0.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +mail IN A +SECTION ANSWER +mail IN A 10.20.30.66 +SECTION AUTHORITY +@ IN NS ns.example.com. +SECTION ADDITIONAL +ns IN A 127.0.0.1 +ENTRY_END + +; root prime +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS root.server. +SECTION AUTHORITY +SECTION ADDITIONAL +root.server. IN A 127.0.0.1 +ENTRY_END + diff --git a/testdata/stub_udp6.tpkg b/testdata/stub_udp6.tpkg deleted file mode 100644 index c5e7ffe9dcf4aedd3dc2f3448744f425b2adaa35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1529 zcmV5ooQ`6Nm+Z)-QM2b?%wTcSI6VoTom-T%(Qc(KC5kD$GLNvJz!P}rQ9?-ih0y(!3Y z&YEl1+D0pkk7qKm#N3HIG?b8g;styl2m($H&l+}b&~Ntob`N9|!NB?p0U>VZt*n4g@AmH#+BIo`0u z@yT&E-fyocGC{@YPdRA?XQ;yLGHI=>Fbgi(Ebx*ufrs(Zaj!;^z>rS2`MMy^l~N#w z*g45aW&C$DMo>-Bc@wOp%$s2Ynd@vdhwH>QadXGt*rvfOgw*uQu~ZO&&&fo{Gy4Bs z@!#X_qpk5k{8!7Sc>n8VqoS#%t|sxnr0(PYF5r#BsqIXuwRS}E8*1vazyeKCNrQ4X z^20bm^pFP75Z4&o(YIp9jWGmV`wpBpI=}?F)wwnmQje%3rZk)wSzjR0d$h8qf~H%# zZmA~Jn|&x@nn&I{J~HwH8d=~)3S204rG^jxQ!sKc{Bcr8CLm8kh7U@KJjl^4xbQq5}aM&k(x`|BuxHkLp7Q>t1*1`7<^(^w%@h3Cn z`JAr$BygAi3qw5C8V}`v_Wr*MxS9VY8P)fc0p^p0B6uv(Czq2| z!NYWBKA$V}i!%);6qAN2(hBUUWob!nl}~DJ(Zb)zj{=^bBq_?+iUa}Q?gGaPNxG1w zVM!;S0Ia5rse1)Zz~?k75Pt}xh=x$mRHdXUx~i1bLbl8+p+`WZ<<$1C1wtpBW__E* zAaD}>;>Vzop-)5tx8(292^}TTnZqz*QyMR{^VD^`$bj#=~-1D&A zZT;M`A@9NDu-`ue-BeXVns&eYaqy;zG~|7)Uw;QIbeTutbG!)gS1={rX6Ni9eCR^0 z26nsI?Y6t5*7)VT*T>{BTnv1V^qTd4t8K%FbF5{tK`^*VEnBLsMrwBNqS;;HrCcyv z)13F;p}_r*}f|cL7T;vWSGgmyG){R@o&Y6(N{S<#>!`yr`-*B4LqE zqoLzsU5yDJk-8d=c3z&I@z9-%{ z*vT?I#30@s3m;$72+Ie_CkoN?m>jTJ{yd}6LY^?!nT(Ud9+`{NEC0m;EYqcQLM}k! z+=RgKya-27*3VAO%^_9KVM fT>^ZY?!AXS>|qak*ux(7a0~tcdM6VH04M+eHaHV_ diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf new file mode 100644 index 000000000000..384f16b0738a --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.conf @@ -0,0 +1,15 @@ +server: + verbosity: 2 + # num-threads: 1 + interface: 127.0.0.1 + port: @PORT@ + use-syslog: no + directory: . + pidfile: "unbound.pid" + chroot: "" + username: "" + do-not-query-localhost: no + +forward-zone: + name: "." + forward-addr: "127.0.0.1@@TOPORT@" diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc new file mode 100644 index 000000000000..d775ec8e9df5 --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.dsc @@ -0,0 +1,16 @@ +BaseName: tcp_sigpipe +Version: 1.0 +Description: Generate SIGPIPE over a TCP channel. +CreationDate: Tue Apr 22 13:45:04 CEST 2008 +Maintainer: dr. W.C.A. Wijngaards +Category: +Component: +CmdDepends: +Depends: +Help: +Pre: tcp_sigpipe.pre +Post: tcp_sigpipe.post +Test: tcp_sigpipe.test +AuxFiles: +Passed: +Failure: diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.post b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.post new file mode 100644 index 000000000000..4df9fe12588d --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.post @@ -0,0 +1,10 @@ +# #-- tcp_sigpipe.post --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# source the test var file when it's there +[ -f .tpkg.var.test ] && source .tpkg.var.test +# +# do your teardown here +. ../common.sh +kill_pid $FWD_PID +kill_pid $UNBOUND_PID diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre new file mode 100644 index 000000000000..274dc1198d9a --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.pre @@ -0,0 +1,31 @@ +# #-- tcp_sigpipe.pre--# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +. ../common.sh +get_random_port 2 +UNBOUND_PORT=$RND_PORT +FWD_PORT=$(($RND_PORT + 1)) +echo "UNBOUND_PORT=$UNBOUND_PORT" >> .tpkg.var.test +echo "FWD_PORT=$FWD_PORT" >> .tpkg.var.test + +# start forwarder +get_ldns_testns +$LDNS_TESTNS -p $FWD_PORT tcp_sigpipe.testns >fwd.log 2>&1 & +FWD_PID=$! +echo "FWD_PID=$FWD_PID" >> .tpkg.var.test + +# make config file +sed -e 's/@PORT\@/'$UNBOUND_PORT'/' -e 's/@TOPORT\@/'$FWD_PORT'/' < tcp_sigpipe.conf > ub.conf +# start unbound in the background +PRE="../.." +$PRE/unbound -d -c ub.conf >unbound.log 2>&1 & +UNBOUND_PID=$! +echo "UNBOUND_PID=$UNBOUND_PID" >> .tpkg.var.test + +cat .tpkg.var.test +wait_ldns_testns_up fwd.log +wait_unbound_up unbound.log + diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.test b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.test new file mode 100644 index 000000000000..6263dca5e625 --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.test @@ -0,0 +1,45 @@ +# #-- tcp_sigpipe.test --# +# source the master var file when it's there +[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master +# use .tpkg.var.test for in test variable passing +[ -f .tpkg.var.test ] && source .tpkg.var.test + +if uname | grep MINGW >/dev/null; then + echo "no job control in shell on windows. end test" + exit 0 +fi + +PRE="../.." +. ../common.sh +get_make +(cd $PRE; $MAKE streamtcp) + +# first test a single TCP query. +echo "> query www.example.com." +$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www.example.com. A IN >outfile 2>&1 & +kill -PIPE $UNBOUND_PID +wait +if test "$?" -ne 0; then + echo "exit status not OK" + echo "> cat logfiles" + cat outfile + cat fwd.log + cat unbound.log + echo "Not OK" + exit 1 +else + echo "exit status OK" +fi +echo "> cat logfiles" +cat outfile +cat fwd.log +cat unbound.log +echo "> check answer" +if grep "10.20.30.40" outfile; then + echo "OK" +else + echo "Not OK" + exit 1 +fi + +exit 0 diff --git a/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns new file mode 100644 index 000000000000..7b773d3b2e73 --- /dev/null +++ b/testdata/tcp_sigpipe.tdir/tcp_sigpipe.testns @@ -0,0 +1,42 @@ +; nameserver test file +$ORIGIN example.com. +$TTL 3600 + +ENTRY_BEGIN +MATCH UDP opcode qtype qname +REPLY QR AA NOERROR TC +ADJUST copy_id +SECTION QUESTION +www IN A +ENTRY_END + +ENTRY_BEGIN +MATCH TCP opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id sleep=3 +SECTION QUESTION +www IN A +SECTION ANSWER +www IN A 10.20.30.40 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www2 IN A +SECTION ANSWER +www2 IN A 10.20.30.42 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +REPLY QR AA NOERROR +ADJUST copy_id +SECTION QUESTION +www3 IN A +SECTION ANSWER +www3 IN A 10.20.30.43 +ENTRY_END + diff --git a/testdata/tcp_sigpipe.tpkg b/testdata/tcp_sigpipe.tpkg deleted file mode 100644 index 4d6dee4d41b7ac8cd22046e639e9c4ac22205d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1584 zcmV-02G98)iwFSKPpMM?1MOM=bJ{i(@2}{ucyqXt#JN|Fi_upgPr`0DTbc_t5`*{tw_lRbg$`RrP=z zfZ(&xW)MvnOf7+fhmTeWBiCavpD-WX=t#)gkdfa(9f775v?#b9YuHRndi)88hpC_q z^{8bgux81Qn22D+LvVeF-;wEBSEw?ugmC?FqH49nik6isLNuw@=F=(nH8CM$77ato zcldM|@Gt^{Ty$P^FFMU(uiGCS=ljVUd3l+#o<3c2;YZM)JtNGXa8On|W=jgxYU_q9 z`rJxQ-!`?C&c{_5dtz>d4mwKO?K!>}$_Bn5`8UnZ`EbxWA9T(^4PYs6WiA(up*EU3 zn#adr)DCqxT#T*VJkI}+HA^y*mphD_TGtG0?vLDYybg$94yX){MBzm0{^O)@wBm@P z!ckg3=q_8Nrpnr%SL~Itp$4<7_-*NinSaG+z7sDBT#Z+jeLW5(hxGcbV?{13O(A(K z6w;a z`CMb4tZCp$+?=KWxRfZpq#G5D;-7x90?VKEg*vo5P{So2Pi}&c*Dj7*?X`O?$YNm( zWYVj#p-TQ21yr8_UG-z^7>uoGCcx(rbYClJRShI^BJ4?J0@<>d=w1}k{c2Il0%ani zvy>>+=!AKKZPF~;;M{E1n^n7_bzSMQ`-IuoVEJOsLPdHYUQdcnHG^s<)rwR}1+F?n znvpee-F&%xl9jaM_}_;Aj<6p@$36H@i{%pHKc%KwtW-=>;y3g~H{26?Bb~CKGn(22sp7Wj+h7h{1XLG)4yg5kcOHValFZzRx_3G!TMh^CmW| z!eGXr9)w^RpqtfVsY;8`z{C}Bntvi^mg`6OVPO@VP=iaYq1Ex>zW2u#=Dvb7P|BEx zH&q}FJ`K3f{HRJAQ>V!SL}G#b+qYND3#z0St`0~ZYDkZZXpM^;GGOcMc-yGYKE0GM zfiioz@i3=KURtgU65cQ z25^<+@cW7jH^MM8NbUgq*;I`t7|1fLbdtj;W#P!OF|d|d1!3_k5DW1;y+r4qXk~x{ll#tDvNND{|!SKM6TUDT)$H2>lq2WXa(wrVeVH@2DQP zEpHOXFv=#$(OCTp@c_+FI$;)+OKU90K}=C@bD-o5dZK(!0sNJ8-}%oMU$5i7^PgU- zB>R7avPt*xzYBT}GIACuut@0RbU5Gbw@>j%kUb=j{9y0~%rd2fv^s!3XL^lC`OTnby>b-dfZ~IWML#Ny7_q%<}6-d4L>jh>2HVC_Ki3V{?n*w5HxUzijoF z{9Gp6-)`K$GHjzk#$6T}>n0hyGReHlBy-&)Gi%agFZVsI(bnI8_)hNsXt7khz5mlI z68}wokN-QN4Zr{J9pC?Dw4@h)+jM;K#h)C3!{G)iQ7~qNeC|UmXzg}R-g6Bx7lria ij|?Y!@AcSowWmGpX-|9F)1LP95cCgpoLL3{C;$L=2N(tb diff --git a/util/config_file.c b/util/config_file.c index d0fdb2daaa25..796c1a61f269 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -282,6 +282,8 @@ config_create(void) cfg->dnscrypt_provider = NULL; cfg->dnscrypt_provider_cert = NULL; cfg->dnscrypt_secret_key = NULL; + cfg->dnscrypt_shared_secret_cache_size = 4*1024*1024; + cfg->dnscrypt_shared_secret_cache_slabs = 4; #ifdef USE_IPSECMOD cfg->ipsecmod_enabled = 1; cfg->ipsecmod_ignore_bogus = 0; @@ -289,6 +291,10 @@ config_create(void) cfg->ipsecmod_max_ttl = 3600; cfg->ipsecmod_whitelist = NULL; cfg->ipsecmod_strict = 0; +#endif +#ifdef USE_CACHEDB + cfg->cachedb_backend = NULL; + cfg->cachedb_secret = NULL; #endif return cfg; error_exit: @@ -561,6 +567,10 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_STR("dnscrypt-provider:", dnscrypt_provider) else S_STRLIST("dnscrypt-provider-cert:", dnscrypt_provider_cert) else S_STRLIST("dnscrypt-secret-key:", dnscrypt_secret_key) + else S_MEMSIZE("dnscrypt-shared-secret-cache-size:", + dnscrypt_shared_secret_cache_size) + else S_POW2("dnscrypt-shared-secret-cache-slabs:", + dnscrypt_shared_secret_cache_slabs) #endif else if(strcmp(opt, "ip-ratelimit:") == 0) { IS_NUMBER_OR_ZERO; cfg->ip_ratelimit = atoi(val); @@ -922,6 +932,10 @@ config_get_option(struct config_file* cfg, const char* opt, else O_STR(opt, "dnscrypt-provider", dnscrypt_provider) else O_LST(opt, "dnscrypt-provider-cert", dnscrypt_provider_cert) else O_LST(opt, "dnscrypt-secret-key", dnscrypt_secret_key) + else O_MEM(opt, "dnscrypt-shared-secret-cache-size", + dnscrypt_shared_secret_cache_size) + else O_DEC(opt, "dnscrypt-shared-secret-cache-slabs", + dnscrypt_shared_secret_cache_slabs) #endif else O_YNO(opt, "unblock-lan-zones", unblock_lan_zones) else O_YNO(opt, "insecure-lan-zones", insecure_lan_zones) @@ -957,6 +971,10 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "ipsecmod-max-ttl", ipsecmod_max_ttl) else O_LST(opt, "ipsecmod-whitelist", ipsecmod_whitelist) else O_YNO(opt, "ipsecmod-strict", ipsecmod_strict) +#endif +#ifdef USE_CACHEDB + else O_STR(opt, "backend", cachedb_backend) + else O_STR(opt, "secret-seed", cachedb_secret) #endif /* not here: * outgoing-permit, outgoing-avoid - have list of ports @@ -1258,6 +1276,10 @@ config_delete(struct config_file* cfg) #ifdef USE_IPSECMOD free(cfg->ipsecmod_hook); config_delstrlist(cfg->ipsecmod_whitelist); +#endif +#ifdef USE_CACHEDB + free(cfg->cachedb_backend); + free(cfg->cachedb_secret); #endif free(cfg); } diff --git a/util/config_file.h b/util/config_file.h index bb7a292050b4..fdc48111e30a 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -464,6 +464,10 @@ struct config_file { struct config_strlist* dnscrypt_secret_key; /** dnscrypt provider certs 1.cert */ struct config_strlist* dnscrypt_provider_cert; + /** memory size in bytes for dnscrypt shared secrets cache */ + size_t dnscrypt_shared_secret_cache_size; + /** number of slabs for dnscrypt shared secrets cache */ + size_t dnscrypt_shared_secret_cache_slabs; /** IPsec module */ #ifdef USE_IPSECMOD @@ -480,6 +484,14 @@ struct config_file { /** false to proceed even when ipsecmod_hook fails */ int ipsecmod_strict; #endif + + /* cachedb module */ +#ifdef USE_CACHEDB + /** backend DB name */ + char* cachedb_backend; + /** secret seed for hash key calculation */ + char* cachedb_secret; +#endif }; /** from cfg username, after daemonise setup performed */ diff --git a/util/configlexer.c b/util/configlexer.c index ba4128c654ba..ee5428e8906c 100644 --- a/util/configlexer.c +++ b/util/configlexer.c @@ -363,8 +363,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 229 -#define YY_END_OF_BUFFER 230 +#define YY_NUM_RULES 234 +#define YY_END_OF_BUFFER 235 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,254 +372,259 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[2238] = +static yyconst flex_int16_t yy_accept[2288] = { 0, - 1, 1, 211, 211, 215, 215, 219, 219, 223, 223, - 1, 1, 230, 227, 1, 209, 209, 228, 2, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, - 211, 212, 212, 213, 228, 215, 216, 216, 217, 228, - 222, 219, 220, 220, 221, 228, 223, 224, 224, 225, - 228, 226, 210, 2, 214, 226, 228, 227, 0, 1, - 2, 2, 2, 2, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 1, 1, 216, 216, 220, 220, 224, 224, 228, 228, + 1, 1, 235, 232, 1, 214, 214, 233, 2, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 233, 216, 217, 217, 218, 233, 220, 221, 221, 222, + 233, 227, 224, 225, 225, 226, 233, 228, 229, 229, + 230, 233, 231, 215, 2, 219, 231, 233, 232, 0, + 1, 2, 2, 2, 2, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 211, 0, 215, 0, 222, 0, 219, 223, 0, 226, - 0, 2, 2, 226, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 216, 0, 220, 0, 227, 0, 224, 228, + 0, 231, 0, 2, 2, 231, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 226, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 231, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 226, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 77, - 227, 227, 227, 227, 227, 227, 8, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 231, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 77, 232, 232, 232, + 232, 232, 232, 8, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 88, 226, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 88, 231, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 226, 227, 227, 227, 227, 227, 37, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 170, 227, 14, 15, 227, 18, 17, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 156, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 231, 232, 232, 232, 232, 232, + 232, 232, 37, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 170, 232, 14, 15, 232, + 18, 17, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 3, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 226, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 218, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 156, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 3, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 231, 232, 232, 232, 212, 232, 232, 211, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 40, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 41, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 145, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 20, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 103, 227, 218, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 197, 227, 227, + 232, 232, 232, 232, 232, 223, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 40, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 41, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 145, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 20, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 103, + 232, 223, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 120, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 102, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 75, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 25, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 38, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 197, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 120, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 102, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 75, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 25, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 39, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 121, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 28, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 38, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 39, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 121, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 28, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 185, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 32, 227, 33, 227, 227, 227, 78, 227, 79, 227, - 227, 76, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 7, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 163, 227, 227, 227, 227, 105, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 185, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 32, + 232, 33, 232, 232, 232, 78, 232, 79, 232, 232, + 76, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 7, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 163, 232, 232, 232, 232, 105, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 29, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 137, 227, 136, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 16, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 42, 227, 227, 227, - 227, 227, 227, 144, 227, 227, 227, 227, 81, 80, - 227, 227, 227, 227, 227, 227, 227, 227, 131, 227, - 227, 227, 227, 227, 227, 227, 227, 89, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 29, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 137, 232, 136, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 16, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 42, 232, 232, 232, + 232, 232, 232, 232, 144, 232, 232, 232, 232, 81, + 80, 232, 232, 232, 232, 232, 232, 232, 232, 131, - 227, 227, 227, 60, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 64, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 36, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 134, 135, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 6, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 195, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 89, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 60, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 64, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 36, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 134, 135, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 6, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 26, 227, 227, 227, 227, - 227, 227, 227, 227, 127, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 149, 227, 128, 227, 227, - 161, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 27, 227, 227, 227, 227, - 84, 227, 85, 227, 83, 227, 227, 227, 227, 227, - 227, 227, 227, 100, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 184, 227, 227, 227, 227, - 227, 227, 227, 227, 129, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 195, 232, 232, + 213, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 26, 232, + 232, 232, 232, 232, 232, 232, 232, 127, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 149, 232, + 128, 232, 232, 161, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 27, + 232, 232, 232, 232, 84, 232, 85, 232, 83, 232, + 232, 232, 232, 232, 232, 232, 232, 100, 232, 232, - 132, 227, 227, 160, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 74, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 34, 227, 227, 22, - 227, 227, 227, 227, 19, 227, 110, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 49, 51, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 199, 227, 227, 171, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 86, 227, 227, 227, 227, 227, 227, 227, 99, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 184, + 232, 232, 232, 232, 232, 232, 232, 232, 129, 232, + 232, 232, 232, 232, 132, 232, 232, 160, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 74, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 34, 232, 232, 22, 232, 232, 232, 232, 19, 232, + 110, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 49, 51, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 199, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 205, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 104, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 155, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 119, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 115, 227, 122, 227, 227, 227, 227, 227, - 92, 227, 227, 70, 227, 227, 227, 227, 147, 227, - 227, 227, 227, 227, 162, 227, 227, 227, 227, 227, + 232, 232, 171, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 86, 232, 232, 232, + 232, 232, 232, 232, 99, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 207, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 104, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 155, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 119, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 115, 232, 122, - 227, 227, 227, 227, 227, 176, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 118, - 227, 227, 227, 227, 227, 52, 53, 227, 227, 227, - 227, 227, 35, 227, 227, 227, 227, 227, 59, 123, - 227, 138, 227, 164, 133, 227, 227, 227, 45, 227, - 125, 227, 227, 227, 227, 227, 9, 227, 227, 227, - 73, 227, 227, 227, 227, 189, 227, 146, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 232, 232, 92, 232, 232, 70, 232, + 232, 232, 232, 147, 232, 232, 232, 232, 232, 162, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 176, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 118, 232, 232, 232, 232, + 232, 52, 53, 232, 232, 232, 232, 232, 35, 232, + 232, 232, 232, 232, 59, 123, 232, 138, 232, 164, + 133, 232, 232, 232, 45, 232, 125, 232, 232, 232, + 232, 232, 9, 232, 232, 232, 73, 232, 232, 232, + 232, 189, 232, 146, 232, 232, 232, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 106, 198, 227, 227, - 175, 227, 227, 227, 227, 227, 227, 227, 227, 157, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 208, 227, 124, 227, 227, 227, 44, - 46, 227, 227, 227, 227, 227, 227, 227, 72, 227, - 227, 227, 227, 187, 227, 194, 227, 227, 227, 227, - 227, 151, 23, 24, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 69, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 153, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 106, 198, 232, 232, 232, 175, 232, 232, + 232, 232, 232, 232, 232, 232, 157, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 210, 232, 124, 232, 232, 232, 44, 46, 232, 232, + 232, 232, 232, 232, 232, 72, 232, 232, 232, 232, + 187, 232, 194, 232, 232, 232, 232, 232, 151, 23, - 150, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 43, 227, 227, 227, 227, 227, 227, 227, - 227, 101, 13, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 203, 227, 206, 227, 227, 227, 227, 227, - 227, 12, 227, 227, 21, 227, 227, 227, 193, 227, - 196, 47, 227, 159, 227, 152, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 114, - 113, 227, 227, 227, 227, 227, 227, 227, 154, 148, - 227, 227, 200, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, + 24, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 69, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 153, 150, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 43, 232, 232, 232, 232, 232, 232, 232, 232, 101, + 13, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 205, 232, 208, 232, 232, 232, 232, 232, 232, 12, + 232, 232, 21, 232, 232, 232, 193, 232, 196, 47, + 232, 159, 232, 152, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 114, 113, 232, - 227, 227, 227, 54, 227, 227, 227, 188, 227, 227, - 227, 227, 227, 158, 227, 227, 227, 227, 227, 227, - 227, 227, 48, 227, 227, 227, 82, 227, 107, 227, - 109, 139, 227, 227, 227, 112, 227, 227, 165, 227, - 227, 227, 227, 227, 94, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 172, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 140, 227, - 227, 186, 227, 207, 227, 227, 227, 30, 227, 227, - 227, 227, 4, 227, 227, 93, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 168, 227, 227, 227, + 232, 232, 232, 232, 232, 232, 154, 148, 232, 232, + 200, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 54, 232, 232, 232, 188, 232, 232, 232, + 232, 232, 158, 232, 232, 232, 232, 232, 232, 232, + 232, 48, 232, 232, 232, 82, 232, 107, 232, 109, + 139, 232, 232, 232, 112, 232, 232, 165, 232, 232, + 232, 232, 232, 94, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 172, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 140, 232, - 227, 227, 227, 201, 227, 227, 227, 227, 227, 174, - 227, 227, 143, 227, 227, 227, 227, 227, 227, 227, - 227, 57, 227, 31, 192, 227, 169, 227, 227, 11, - 227, 227, 227, 227, 227, 227, 141, 61, 227, 227, - 227, 227, 117, 227, 227, 227, 227, 227, 96, 227, - 227, 227, 227, 227, 227, 227, 173, 90, 227, 87, - 227, 227, 227, 63, 67, 62, 227, 55, 227, 227, - 227, 10, 227, 227, 227, 190, 227, 227, 227, 116, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 68, 66, 227, 56, 204, + 232, 186, 232, 209, 232, 232, 232, 30, 232, 232, + 232, 232, 4, 232, 232, 93, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 168, 232, 232, 232, + 232, 232, 232, 201, 232, 232, 232, 232, 232, 232, + 174, 232, 232, 143, 232, 232, 232, 232, 232, 232, + 232, 232, 57, 232, 31, 192, 232, 169, 232, 232, + 11, 232, 232, 232, 232, 232, 232, 141, 61, 232, + 232, 232, 232, 117, 232, 232, 232, 232, 232, 96, + 232, 232, 232, 232, 232, 232, 232, 232, 173, 90, + 232, 87, 232, 232, 232, 63, 67, 62, 232, 55, - 227, 227, 227, 130, 227, 227, 142, 227, 227, 227, - 227, 227, 108, 50, 227, 227, 202, 227, 227, 227, - 227, 227, 227, 91, 65, 97, 98, 58, 227, 191, - 111, 227, 227, 227, 167, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 71, 227, 166, 227, - 183, 227, 227, 227, 227, 227, 227, 5, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 95, 227, 227, 227, 227, - 227, 227, 126, 227, 227, 227, 227, 227, 227, 227, + 232, 232, 232, 10, 232, 232, 232, 190, 232, 232, + 232, 116, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 68, 66, + 232, 56, 206, 232, 232, 232, 130, 232, 232, 142, + 232, 232, 232, 232, 232, 108, 50, 232, 232, 202, + 232, 232, 232, 232, 232, 232, 232, 91, 65, 97, + 98, 58, 232, 191, 111, 232, 232, 232, 167, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 71, 232, 166, 232, 183, 232, 232, 232, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 179, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 177, 227, 180, 181, 227, - 227, 227, 227, 227, 178, 182, 0 + 232, 232, 232, 232, 5, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 95, 232, 232, 232, 232, 232, + 232, 232, 126, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 179, 232, + 232, 232, 232, 232, 203, 232, 232, 232, 232, 232, + 232, 204, 232, 232, 232, 177, 232, 180, 181, 232, + 232, 232, 232, 232, 178, 182, 0 } ; static yyconst YY_CHAR yy_ec[256] = @@ -665,1226 +670,1259 @@ static yyconst YY_CHAR yy_meta[67] = 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_uint16_t yy_base[2252] = +static yyconst flex_uint16_t yy_base[2302] = { 0, 0, 0, 64, 67, 70, 72, 78, 84, 89, 92, - 131, 137, 420, 366, 96, 6399, 6399, 6399, 109, 111, - 142, 180, 86, 133, 138, 172, 50, 151, 91, 181, - 197, 124, 241, 187, 225, 289, 233, 228, 253, 307, - 362, 6399, 6399, 6399, 95, 359, 6399, 6399, 6399, 102, - 326, 355, 6399, 6399, 6399, 311, 245, 6399, 6399, 6399, - 116, 221, 6399, 321, 6399, 265, 328, 212, 334, 160, - 0, 338, 0, 0, 141, 206, 184, 330, 322, 255, - 323, 335, 324, 222, 268, 350, 325, 334, 344, 357, - 358, 352, 367, 364, 389, 385, 369, 393, 394, 214, + 131, 137, 360, 306, 96, 6594, 6594, 6594, 109, 111, + 85, 142, 180, 129, 134, 138, 183, 50, 166, 75, + 214, 204, 124, 256, 141, 248, 304, 200, 221, 250, + 305, 299, 6594, 6594, 6594, 96, 283, 6594, 6594, 6594, + 102, 276, 265, 6594, 6594, 6594, 322, 216, 6594, 6594, + 6594, 115, 212, 6594, 326, 6594, 161, 336, 186, 343, + 115, 0, 363, 0, 0, 107, 207, 159, 217, 342, + 219, 264, 243, 332, 322, 280, 260, 347, 334, 346, + 351, 277, 352, 372, 359, 367, 392, 361, 377, 401, - 373, 402, 128, 400, 403, 419, 414, 399, 435, 420, - 443, 422, 449, 431, 441, 178, 436, 453, 459, 416, - 461, 463, 456, 469, 263, 487, 488, 480, 477, 497, - 170, 284, 164, 241, 160, 514, 174, 85, 367, 77, - 534, 541, 0, 514, 504, 518, 512, 513, 515, 523, - 542, 526, 540, 556, 550, 551, 548, 560, 604, 561, - 539, 559, 565, 571, 568, 588, 582, 585, 590, 583, - 606, 609, 636, 617, 599, 623, 576, 633, 652, 621, - 644, 638, 635, 650, 648, 662, 660, 657, 666, 668, - 684, 651, 683, 679, 669, 687, 682, 685, 699, 703, + 402, 386, 400, 413, 408, 245, 423, 407, 404, 425, + 441, 428, 449, 436, 447, 439, 452, 462, 442, 464, + 474, 294, 468, 489, 466, 481, 475, 498, 501, 491, + 495, 507, 181, 277, 177, 427, 173, 552, 207, 151, + 391, 117, 558, 562, 0, 528, 530, 389, 544, 488, + 534, 541, 548, 540, 546, 555, 575, 569, 577, 570, + 580, 624, 584, 579, 587, 589, 572, 604, 610, 599, + 605, 631, 591, 625, 629, 648, 657, 647, 637, 655, + 658, 682, 674, 669, 670, 684, 685, 692, 697, 676, + 686, 694, 687, 696, 698, 708, 709, 701, 715, 721, - 686, 721, 709, 725, 713, 720, 716, 726, 718, 712, - 740, 743, 747, 744, 735, 745, 750, 748, 749, 754, - 770, 751, 765, 762, 768, 783, 773, 784, 792, 800, - 804, 781, 802, 811, 789, 807, 810, 816, 806, 809, - 821, 828, 823, 836, 849, 825, 838, 832, 833, 857, - 851, 843, 860, 848, 868, 859, 871, 855, 862, 876, - 878, 891, 883, 894, 886, 895, 926, 676, 913, 903, - 910, 905, 922, 912, 939, 932, 930, 941, 936, 934, - 947, 956, 949, 970, 959, 973, 974, 953, 966, 981, - 975, 983, 986, 996, 1003, 1005, 1017, 1008, 1062, 1006, + 711, 727, 723, 735, 718, 749, 733, 758, 736, 744, + 748, 766, 750, 753, 771, 779, 775, 782, 763, 776, + 762, 783, 792, 789, 790, 805, 799, 793, 809, 798, + 796, 808, 826, 828, 836, 590, 820, 839, 841, 832, + 831, 847, 845, 834, 856, 857, 867, 851, 875, 886, + 862, 869, 864, 877, 891, 894, 881, 884, 883, 902, + 898, 917, 910, 900, 928, 911, 936, 924, 938, 921, + 930, 937, 905, 943, 957, 960, 962, 967, 935, 973, + 981, 964, 980, 983, 970, 984, 993, 994, 991, 997, + 1008, 1020, 1024, 1001, 1017, 1007, 1035, 1032, 1040, 1019, - 1015, 1055, 1004, 1010, 1012, 1033, 1043, 1034, 1039, 1048, - 1052, 1066, 1058, 1045, 1063, 1075, 1082, 1093, 1072, 1090, - 1102, 1113, 1095, 1100, 1103, 1104, 1123, 1117, 1122, 1110, - 1124, 1147, 1127, 1130, 1154, 1150, 1137, 1139, 1155, 1166, - 1168, 1151, 1174, 1163, 1179, 1178, 1188, 1152, 1195, 1183, - 1187, 1198, 1196, 1197, 1213, 1211, 1215, 1200, 1227, 6399, - 1229, 1216, 1224, 1236, 1226, 1238, 6399, 1240, 1241, 1235, - 1257, 1262, 1264, 1252, 1267, 1279, 1277, 1283, 1256, 1276, - 1268, 1265, 1278, 1284, 1295, 1296, 1297, 1343, 1294, 1306, - 1302, 1341, 1327, 1311, 1333, 1315, 1336, 1305, 1338, 1357, + 1030, 1041, 1066, 1056, 1111, 1059, 1062, 1078, 1054, 1057, + 1064, 1072, 1063, 1105, 1084, 1088, 1090, 1101, 1115, 1106, + 1129, 1102, 1119, 1137, 1144, 1134, 1139, 1140, 1164, 1148, + 1149, 1153, 1146, 1172, 1166, 1175, 1163, 1171, 1191, 1180, + 1178, 1199, 1195, 1182, 1193, 1209, 1219, 1212, 1205, 1227, + 1216, 1230, 1220, 1236, 1224, 1241, 1232, 1243, 1240, 1246, + 1254, 1257, 1264, 1269, 1250, 1277, 6594, 1281, 1262, 1279, + 1285, 1270, 1288, 6594, 1293, 1275, 1289, 1291, 1298, 1314, + 1309, 1316, 1304, 1306, 1325, 1340, 1315, 1327, 1317, 1336, + 1333, 1334, 1342, 1346, 1351, 1397, 1345, 1356, 1352, 1382, - 1329, 1352, 1361, 1371, 1363, 1368, 1375, 6399, 1387, 1358, - 1385, 1376, 1379, 1396, 1400, 1360, 1393, 1416, 1401, 1412, - 1402, 1420, 1419, 1414, 1410, 1450, 1421, 1435, 1436, 1443, - 1451, 1454, 1460, 1437, 1461, 1440, 1448, 1464, 1470, 1465, - 1453, 1467, 1462, 1478, 1474, 1476, 1499, 1486, 1509, 1494, - 1495, 1503, 1501, 1505, 1489, 1514, 1516, 1529, 1513, 1539, - 1532, 1536, 1546, 1543, 1537, 1542, 1530, 1556, 1558, 1564, - 1560, 1550, 1570, 1563, 1569, 1577, 1583, 1588, 1603, 1587, - 1589, 1604, 1590, 1596, 1615, 1595, 1614, 1626, 1611, 1610, - 1622, 1621, 1623, 1629, 1636, 1638, 1639, 1651, 1634, 1649, + 1377, 1361, 1390, 1369, 1392, 1384, 1388, 1395, 1409, 1407, + 1426, 1424, 1419, 1420, 1436, 6594, 1437, 1417, 1427, 1430, + 1445, 1446, 1450, 1453, 1467, 1475, 1462, 1476, 1466, 1479, + 1468, 1480, 1481, 1471, 1488, 1496, 1486, 1492, 1497, 1505, + 1516, 1518, 1525, 1500, 1517, 1509, 1526, 1529, 1530, 1531, + 1519, 1536, 1520, 1543, 1545, 1551, 1563, 1524, 1553, 1555, + 1569, 1578, 1562, 1564, 1589, 1577, 1582, 1591, 1592, 1594, + 1598, 1602, 1603, 1611, 1607, 1616, 1612, 1621, 1629, 1630, + 1626, 1618, 1635, 1642, 1641, 1645, 1648, 1647, 1666, 1654, + 1657, 1669, 1658, 1656, 1668, 1685, 1675, 1683, 1705, 1681, - 1650, 1652, 1658, 1663, 1653, 1656, 1686, 1665, 1677, 1684, - 1678, 1674, 1690, 1699, 1692, 1700, 1704, 1705, 1711, 1701, - 1713, 1698, 1714, 1737, 1740, 1741, 1725, 1750, 1735, 6399, - 1728, 1753, 1734, 1756, 1763, 1739, 1758, 1768, 1761, 1764, - 1772, 1815, 6399, 1767, 6399, 6399, 1781, 6399, 6399, 1787, - 1795, 1808, 1803, 1816, 1770, 1864, 1806, 1805, 1818, 1788, - 1843, 1821, 1822, 1851, 1835, 1857, 1854, 1869, 1862, 1873, - 1878, 1861, 1870, 1884, 1887, 1900, 1911, 1898, 1901, 1842, - 1907, 1916, 1918, 1917, 1925, 1928, 1923, 1924, 1929, 1933, - 1936, 1942, 1951, 1940, 1961, 1953, 1957, 1971, 1956, 6399, + 1664, 1697, 1684, 1704, 1700, 1701, 1698, 1702, 1716, 1712, + 1708, 1724, 1733, 1726, 1739, 1735, 1736, 1737, 1753, 1729, + 1756, 1743, 1758, 1760, 1764, 1767, 1768, 1769, 1784, 1779, + 1783, 1794, 1778, 1798, 1788, 1805, 1809, 1791, 1814, 1822, + 1826, 1818, 6594, 1810, 1833, 1824, 1834, 1830, 1825, 1851, + 1839, 1837, 1848, 1852, 1896, 6594, 1853, 6594, 6594, 1850, + 6594, 6594, 1854, 1856, 1880, 1858, 1875, 1892, 1945, 1893, + 1883, 1879, 1887, 1906, 1913, 1910, 1926, 1914, 1933, 1911, + 1948, 1950, 1956, 1953, 1940, 1962, 1961, 1968, 1986, 1969, + 1983, 1985, 1903, 1988, 1996, 2002, 2004, 1976, 2010, 2003, - 1963, 1964, 1967, 1974, 1968, 1976, 1978, 1987, 1983, 2005, - 6399, 2009, 2012, 1992, 2010, 1997, 2001, 1995, 2006, 2020, - 2023, 2028, 2022, 2042, 2040, 2043, 2053, 2031, 2044, 2047, - 2035, 2065, 2062, 2056, 2070, 2067, 2060, 2076, 2068, 2093, - 2080, 2087, 2106, 2085, 2110, 2095, 2111, 2101, 2114, 2102, - 2107, 2112, 2115, 2103, 2160, 2145, 2143, 2137, 2130, 2157, - 2141, 2162, 2164, 2159, 2166, 2173, 2170, 2194, 2190, 2187, - 2189, 2188, 2200, 2216, 2213, 75, 2243, 2207, 2215, 2204, - 2211, 2229, 2227, 2231, 2234, 2233, 2236, 2241, 2260, 6399, - 2240, 2250, 2246, 2259, 2279, 2276, 2266, 2274, 2275, 2278, + 2005, 2008, 2012, 2022, 2014, 2017, 2015, 2018, 2039, 2042, + 2027, 2033, 6594, 2044, 2046, 2054, 2051, 2045, 2061, 2043, + 2049, 2065, 2063, 2088, 6594, 2092, 2093, 2075, 2095, 2076, + 2078, 2082, 2086, 2101, 2103, 2090, 2113, 2102, 2124, 2125, + 2135, 2116, 2122, 2130, 2150, 2151, 2143, 2129, 2152, 2149, + 2134, 2157, 2165, 2170, 2162, 2174, 2188, 2166, 2167, 2177, + 2190, 2181, 2194, 2183, 6594, 2179, 2191, 6594, 2189, 2199, + 2245, 2210, 2208, 2204, 2215, 2224, 2218, 2236, 2230, 2258, + 2235, 2255, 2237, 2265, 2264, 2260, 2257, 2275, 2267, 2295, + 2298, 156, 2325, 2291, 2305, 2294, 2297, 2311, 2314, 2307, - 2293, 2286, 2271, 2292, 2280, 2301, 2289, 2305, 2316, 2323, - 6399, 2312, 2310, 2313, 2318, 2330, 2339, 2341, 2338, 2348, - 2328, 2321, 6399, 2343, 2369, 2350, 2360, 2353, 2352, 2368, - 2387, 2364, 2382, 2371, 2388, 2373, 2396, 2397, 2391, 6399, - 2398, 2390, 2399, 2407, 2412, 2395, 2424, 2417, 2418, 2416, - 2425, 2446, 2442, 2444, 6399, 2432, 2452, 2445, 2441, 2451, - 2462, 2443, 2461, 2460, 2448, 2470, 2469, 291, 2468, 2482, - 2471, 2474, 6399, 2473, 68, 2488, 2489, 2483, 2510, 2511, - 2507, 2518, 2509, 2508, 2513, 2516, 2517, 2506, 2535, 2531, - 2534, 2523, 2537, 2538, 2549, 2540, 2552, 6399, 2562, 2561, + 2313, 2301, 2329, 2323, 2339, 6594, 2318, 2346, 2336, 2352, + 2334, 2354, 2345, 2353, 2358, 2341, 2374, 2368, 2369, 2378, + 2370, 2373, 2379, 2384, 2389, 2407, 6594, 2394, 2400, 2385, + 2409, 2413, 2417, 2423, 2420, 2430, 2412, 2425, 6594, 2416, + 2442, 2459, 2445, 2427, 2444, 2446, 2458, 2447, 2473, 2456, + 2457, 2465, 2466, 2474, 2475, 2469, 6594, 2472, 2494, 2489, + 2498, 2502, 2496, 2509, 2497, 2499, 2493, 2504, 2524, 2522, + 2523, 6594, 2516, 2529, 2519, 2521, 2540, 2552, 2538, 2557, + 2558, 2544, 2550, 2554, 121, 2551, 2559, 2555, 2545, 6594, + 2556, 68, 2573, 2561, 2572, 2578, 2599, 2593, 2602, 2601, - 2565, 2567, 2574, 2573, 2576, 2570, 2586, 2601, 2588, 6399, - 2596, 2610, 2600, 2602, 2592, 2615, 2613, 2604, 2626, 2625, - 2621, 2629, 2634, 2631, 2640, 2641, 6399, 2627, 2655, 2656, - 2643, 2654, 2653, 2679, 2666, 2657, 2662, 2687, 2711, 2681, - 2686, 2702, 2698, 2696, 2691, 2704, 2705, 2732, 2715, 2731, - 2712, 2727, 2737, 2750, 2753, 2744, 2748, 2774, 2768, 153, - 2759, 6399, 2762, 2757, 2760, 2764, 2803, 2793, 2795, 2787, - 2800, 2797, 2798, 2809, 2805, 2801, 2824, 2813, 2822, 2816, - 6399, 2838, 2839, 2827, 2842, 2828, 2847, 2852, 2840, 2858, - 2843, 2854, 2864, 2855, 2875, 2862, 2871, 2885, 2870, 6399, + 2594, 2595, 2605, 2596, 2588, 2617, 2603, 2620, 2613, 2627, + 2625, 2636, 2626, 2645, 6594, 2647, 2644, 2651, 2653, 2652, + 2638, 2672, 2657, 2668, 2685, 2673, 6594, 2659, 2689, 2688, + 2683, 2677, 2686, 2695, 2691, 2707, 2684, 2709, 2715, 2716, + 2713, 2717, 2729, 6594, 2712, 2732, 2739, 2725, 2730, 2743, + 2768, 2742, 2753, 2758, 2748, 2794, 2764, 2769, 2714, 2782, + 2774, 2784, 2787, 2795, 2788, 2798, 2814, 2819, 2821, 2763, + 2833, 2836, 2827, 2834, 2857, 2841, 164, 2826, 6594, 2843, + 2840, 2831, 2863, 2883, 2865, 2876, 2861, 2878, 2867, 2882, + 2897, 2892, 2898, 2870, 2891, 2812, 2900, 2917, 6594, 2918, - 2758, 2867, 2873, 2898, 2886, 2882, 2897, 2896, 2891, 2894, - 2893, 2920, 2912, 2907, 2917, 2919, 2913, 2935, 2910, 2923, - 2924, 2940, 2949, 2938, 2947, 6399, 2951, 2971, 2946, 2956, - 2954, 2962, 2979, 2983, 2972, 2992, 2989, 2990, 2975, 2982, - 2978, 2995, 2997, 2998, 6399, 2999, 3011, 3012, 3020, 3019, - 3021, 3022, 3024, 3035, 3007, 3039, 3034, 3041, 3053, 3042, - 3049, 3051, 3060, 3058, 3078, 3073, 3082, 6399, 3075, 3084, - 3077, 3071, 3076, 3079, 3100, 3092, 3098, 3087, 3103, 3109, - 3105, 3131, 3133, 3117, 3119, 3120, 3121, 3102, 3115, 3130, - 3146, 3148, 3134, 3135, 3136, 3150, 3145, 3157, 3156, 3173, + 2924, 2907, 2920, 2910, 2931, 2927, 2912, 2935, 2941, 2944, + 2928, 2945, 2939, 2946, 2959, 2962, 2957, 6594, 2862, 2951, + 2947, 2980, 2972, 2963, 2974, 2983, 2967, 2973, 2975, 3000, + 2991, 2986, 2992, 2989, 2997, 3016, 3001, 3009, 3008, 3018, + 3022, 3014, 3024, 6594, 3020, 3057, 3031, 3038, 3041, 3044, + 3064, 3052, 3049, 3065, 3066, 3067, 3056, 3061, 3077, 3080, + 3082, 3081, 6594, 3094, 3088, 3084, 3104, 3096, 3102, 3105, + 3099, 3108, 3112, 3129, 3123, 3115, 3135, 3133, 3132, 3128, + 3147, 3158, 3159, 3156, 3163, 6594, 3166, 3165, 3161, 3153, + 3167, 3162, 3175, 3172, 3183, 3179, 3190, 3191, 3188, 3216, - 3167, 3175, 3185, 3183, 3186, 3176, 3182, 3179, 3202, 6399, - 3200, 3195, 3199, 3218, 3203, 3205, 3206, 3216, 3233, 3237, - 6399, 3222, 6399, 3234, 3241, 3246, 6399, 3244, 6399, 3253, - 3238, 6399, 3252, 3256, 3243, 3247, 3248, 3271, 3263, 3259, - 3273, 3267, 3290, 3266, 3281, 3293, 3282, 3302, 6399, 3295, - 3294, 3296, 3305, 3308, 3311, 3316, 3317, 3320, 3321, 3328, - 3322, 3347, 3339, 3350, 6399, 3337, 3346, 3342, 3354, 6399, - 3338, 3355, 3366, 3352, 3357, 3368, 3363, 3365, 3397, 3381, - 3386, 3387, 3399, 3380, 3398, 3411, 3408, 3392, 3402, 3413, - 3416, 3412, 3425, 3418, 3429, 3422, 3442, 3428, 3430, 3431, + 3224, 3193, 3202, 3204, 3206, 3217, 3200, 3209, 3229, 3242, + 3219, 3220, 3222, 3240, 3231, 3233, 3246, 3256, 3260, 3252, + 3270, 3266, 3272, 3262, 3265, 3267, 3294, 6594, 3258, 3279, + 3277, 3303, 3305, 3306, 3291, 3297, 3292, 3287, 3316, 6594, + 3299, 6594, 3320, 3327, 3334, 6594, 3331, 6594, 3341, 3329, + 6594, 3343, 3347, 3335, 3324, 3339, 3352, 3344, 3360, 3361, + 3358, 3362, 3342, 3356, 3377, 3374, 3390, 6594, 3382, 3379, + 3384, 3399, 3391, 3383, 3387, 3404, 3410, 3392, 3414, 3423, + 3426, 3409, 3437, 6594, 3419, 3435, 3425, 3432, 6594, 3421, + 3446, 3448, 3436, 3442, 3455, 3450, 3456, 3459, 3484, 3466, - 3439, 3440, 3452, 3449, 3468, 3445, 3455, 3456, 3463, 6399, - 3459, 3467, 3466, 3495, 3473, 3485, 3477, 3489, 3494, 3490, - 3502, 3515, 3492, 6399, 3498, 6399, 3506, 3510, 3520, 3535, - 3522, 3534, 3528, 3537, 3529, 3551, 3543, 3555, 3553, 3547, - 3556, 3554, 3562, 3561, 3573, 6399, 3532, 3568, 3590, 3581, - 3583, 3588, 3601, 3613, 3587, 3606, 6399, 3603, 3608, 3612, - 3604, 3628, 3615, 6399, 3607, 3642, 3631, 3638, 6399, 6399, - 3632, 3637, 3633, 3639, 3643, 3655, 3640, 3658, 6399, 3611, - 3659, 3671, 3672, 3682, 3683, 3654, 3668, 6399, 3665, 3693, - 3686, 3689, 3685, 3699, 3698, 3674, 3710, 3707, 3704, 3702, + 3462, 3461, 3486, 3471, 3477, 3497, 3498, 3482, 3489, 3483, + 3506, 3507, 3510, 3492, 3516, 3520, 3517, 3513, 3518, 3526, + 3514, 3536, 3539, 3541, 3537, 3532, 3540, 3542, 3549, 6594, + 3557, 3555, 3566, 3561, 3559, 3558, 3567, 3577, 3581, 3565, + 3589, 3594, 3584, 6594, 3599, 6594, 3585, 3605, 3609, 3612, + 3601, 3608, 3618, 3616, 3629, 3641, 3622, 3643, 3624, 3635, + 3644, 3636, 3645, 3649, 3652, 6594, 3642, 3656, 3672, 3662, + 3676, 3661, 3689, 3686, 3669, 3702, 6594, 3711, 3691, 3707, + 3713, 3705, 3716, 3714, 6594, 3699, 3726, 3715, 3721, 6594, + 6594, 3708, 3725, 3731, 3732, 3737, 3754, 3745, 3747, 6594, - 3728, 3727, 3732, 6399, 3731, 3724, 3739, 3729, 3738, 3723, - 3720, 3734, 3748, 3755, 3750, 3756, 3767, 3765, 3758, 3761, - 3773, 3786, 3763, 3777, 3775, 3793, 3788, 3797, 3785, 3807, - 3805, 3791, 3813, 6399, 3815, 3799, 3824, 3800, 3818, 3828, - 3829, 3834, 3846, 3819, 3827, 3836, 3842, 6399, 3872, 3823, - 3851, 3857, 3855, 3854, 3866, 3856, 3850, 3879, 3864, 3887, - 3874, 3878, 3895, 3904, 6399, 6399, 3898, 3889, 3908, 3897, - 3902, 3911, 3892, 3925, 3906, 3914, 6399, 3923, 3916, 3922, - 3933, 3949, 3951, 3948, 3953, 3945, 3936, 3943, 3952, 3963, - 3947, 3960, 3967, 3946, 3978, 6399, 3977, 3984, 3981, 3993, + 3739, 3742, 3759, 3768, 3770, 3771, 3758, 3755, 6594, 3764, + 3780, 3782, 3777, 3781, 3787, 3791, 3792, 3806, 3801, 3797, + 3811, 3816, 3818, 3822, 6594, 3820, 3823, 3827, 3819, 3828, + 3809, 3838, 3835, 3843, 3836, 3842, 3852, 3856, 3862, 3863, + 3846, 3859, 3875, 3881, 3876, 3865, 3880, 3877, 3886, 3882, + 3889, 3895, 3892, 3919, 3902, 6594, 3920, 3899, 3923, 3903, + 3918, 3925, 3930, 3939, 3948, 3916, 3922, 3943, 3944, 6594, + 3956, 3927, 3951, 3954, 3957, 3978, 3950, 3970, 3955, 3974, + 3969, 3984, 3973, 3980, 3997, 3979, 6594, 6594, 3999, 3983, + 4009, 4000, 4006, 4005, 3992, 4020, 4011, 4007, 6594, 4025, - 3995, 3994, 4002, 4020, 4006, 3989, 4005, 3987, 4017, 4015, - 4040, 4022, 4012, 4029, 4023, 6399, 4033, 4039, 4042, 4026, - 4053, 4030, 4060, 4047, 6399, 4058, 4063, 4062, 4071, 4055, - 4078, 4070, 4072, 4086, 4074, 6399, 4079, 6399, 4090, 4082, - 6399, 4088, 4095, 4096, 4099, 4109, 4112, 4098, 4115, 4110, - 4111, 4125, 4126, 4121, 4119, 6399, 4142, 4122, 4123, 4135, - 6399, 4147, 6399, 4145, 6399, 4148, 4150, 4170, 4149, 4167, - 4171, 4178, 4172, 6399, 4175, 4159, 4183, 4176, 4187, 4177, - 4201, 4203, 4191, 4204, 4214, 6399, 4202, 4209, 4196, 4207, - 4212, 4223, 4238, 4231, 6399, 4240, 4235, 4236, 4250, 4249, + 4033, 4019, 4036, 4049, 4054, 4051, 4048, 4046, 4038, 4040, + 4044, 4065, 4061, 4063, 4071, 4069, 4073, 6594, 4075, 4076, + 6594, 4078, 4083, 4095, 4098, 4108, 4115, 4109, 4092, 4103, + 4112, 4120, 4123, 4138, 4134, 4119, 4125, 4146, 6594, 4136, + 4139, 4142, 4124, 4160, 4135, 4161, 4155, 6594, 4165, 4170, + 4174, 4177, 4158, 4184, 4180, 4185, 4183, 4182, 6594, 4188, + 6594, 4196, 4194, 6594, 4202, 4207, 4200, 4213, 4198, 4223, + 4208, 4204, 4227, 4220, 4218, 4235, 4243, 4247, 4230, 6594, + 4255, 4234, 4249, 4250, 6594, 4253, 6594, 4257, 6594, 4245, + 4254, 4274, 4261, 4288, 4290, 4291, 4285, 6594, 4295, 4276, - 6399, 4248, 4259, 6399, 4252, 4268, 4247, 4264, 4278, 4282, - 4284, 4267, 4270, 4197, 4293, 4279, 4291, 6399, 4283, 4294, - 4301, 4303, 4300, 4312, 4276, 4317, 4311, 4321, 4323, 4335, - 4325, 4339, 4326, 4343, 4345, 4344, 6399, 4350, 4352, 6399, - 4360, 4338, 4349, 4353, 6399, 4372, 6399, 4380, 4374, 4363, - 4366, 4392, 4394, 4395, 4379, 4393, 4399, 4396, 4417, 4400, - 4412, 6399, 6399, 4410, 4427, 4402, 4414, 4433, 4431, 4422, - 4438, 4441, 4445, 4447, 6399, 4444, 4430, 6399, 4437, 4451, - 4458, 4461, 4477, 4466, 4470, 4463, 4483, 4479, 4490, 4465, - 4480, 6399, 4493, 4473, 4474, 4497, 4506, 4503, 4507, 6399, + 4297, 4299, 4283, 4294, 4301, 4315, 4310, 4317, 4324, 6594, + 4287, 4326, 4339, 4323, 4325, 4344, 4350, 4329, 6594, 4353, + 4346, 4342, 4356, 4357, 6594, 4369, 4365, 6594, 4372, 4362, + 4371, 4374, 4388, 4376, 4395, 4375, 4384, 4412, 4405, 4396, + 4406, 6594, 4399, 4402, 4419, 4420, 4413, 4415, 4417, 4425, + 4432, 4426, 4448, 4450, 4454, 4456, 4443, 4460, 4459, 4455, + 6594, 4469, 4475, 6594, 4471, 4452, 4470, 4473, 6594, 4486, + 6594, 4497, 4491, 4483, 4495, 4509, 4511, 4512, 4498, 4510, + 4516, 4513, 4528, 4519, 4522, 6594, 6594, 4529, 4544, 4525, + 4550, 4556, 4539, 4540, 4565, 4563, 4562, 4569, 6594, 4560, - 4504, 4502, 4529, 4522, 4523, 4525, 4539, 4536, 4541, 4530, - 4531, 4546, 4566, 4553, 4555, 6399, 4556, 4549, 4550, 4567, - 4581, 4584, 4571, 4585, 4568, 4589, 4591, 4587, 4573, 6399, - 4594, 4603, 4588, 4604, 4602, 4616, 4606, 4623, 4610, 4608, - 4617, 4619, 4625, 6399, 4621, 4630, 4640, 4652, 4642, 4643, - 4645, 4644, 4651, 4634, 4672, 4654, 4674, 6399, 4665, 4670, - 4659, 4680, 4667, 4690, 4691, 4683, 4697, 4699, 4700, 4702, - 4710, 4715, 6399, 4694, 6399, 4703, 4727, 4718, 4731, 4729, - 6399, 4723, 4725, 6399, 4735, 4737, 4733, 4745, 6399, 4741, - 4758, 4746, 4765, 4769, 6399, 4770, 4774, 4786, 4782, 4773, + 4553, 4571, 6594, 4554, 4577, 4576, 4578, 4583, 4589, 4592, + 4594, 4609, 4596, 4612, 4598, 4595, 6594, 4610, 4604, 4606, + 4623, 4622, 4620, 4625, 6594, 4633, 4618, 4650, 4645, 4641, + 4649, 4660, 4663, 4664, 4651, 4652, 4670, 4672, 4667, 4669, + 6594, 4678, 4675, 4680, 4691, 4686, 4704, 4687, 4709, 4694, + 4715, 4716, 4705, 4698, 6594, 4718, 4720, 4707, 4724, 4710, + 4729, 4737, 4747, 4738, 4722, 4739, 4733, 4757, 6594, 4749, + 4750, 4743, 4755, 4761, 4753, 4771, 4767, 4776, 4765, 4777, + 4780, 4793, 6594, 4785, 4796, 4781, 4798, 4788, 4808, 4812, + 4804, 4818, 4820, 4821, 4823, 4807, 4822, 6594, 4831, 6594, - 4788, 4771, 4780, 4772, 4801, 6399, 4799, 4792, 4805, 4806, - 4797, 4800, 4798, 4804, 4814, 4818, 4841, 4831, 4822, 6399, - 4826, 4838, 4851, 4844, 4846, 6399, 6399, 4845, 4853, 4857, - 4829, 4861, 6399, 4870, 4856, 4864, 4863, 4868, 6399, 6399, - 4866, 6399, 4867, 6399, 6399, 4887, 4891, 4898, 6399, 4899, - 6399, 4905, 4901, 4890, 4886, 4904, 6399, 4888, 4910, 4911, - 6399, 4912, 4915, 4923, 4925, 6399, 4916, 6399, 4919, 4924, - 4939, 4928, 4931, 4942, 4948, 4927, 4959, 4960, 4949, 4946, - 4962, 4958, 4965, 4967, 4966, 4976, 4975, 4979, 4973, 4972, - 4987, 4983, 4988, 4997, 5015, 5004, 4999, 5005, 5006, 5018, + 4832, 4842, 4847, 4854, 4840, 6594, 4846, 4856, 6594, 4859, + 4850, 4857, 4864, 6594, 4877, 4870, 4874, 4873, 4852, 6594, + 4895, 4891, 4910, 4911, 4908, 4899, 4914, 4897, 4902, 4898, + 4918, 6594, 4923, 4925, 4920, 4926, 4912, 4929, 4934, 4947, + 4937, 4955, 4935, 4959, 4945, 6594, 4950, 4962, 4973, 4961, + 4968, 6594, 6594, 4971, 4978, 4977, 4975, 4982, 6594, 4987, + 4976, 4996, 4999, 5002, 6594, 6594, 5013, 6594, 4997, 6594, + 6594, 5012, 5014, 5016, 6594, 5020, 6594, 5026, 5021, 5009, + 5005, 5028, 6594, 5018, 5038, 5030, 6594, 5042, 5036, 5040, + 5041, 6594, 5034, 6594, 5061, 5059, 5065, 5064, 5057, 5060, - 5014, 5025, 5031, 5019, 5020, 5034, 6399, 6399, 5032, 5026, - 6399, 5040, 5047, 5044, 5048, 5042, 5052, 5055, 5069, 6399, - 5049, 5071, 5063, 5076, 5074, 5067, 5084, 5088, 5086, 5091, - 5106, 5093, 5096, 5094, 5098, 5119, 5107, 5108, 5121, 5120, - 5130, 5135, 5138, 6399, 5123, 6399, 5131, 5125, 5141, 6399, - 6399, 5136, 5158, 5139, 5144, 5152, 5173, 5171, 6399, 5162, - 5172, 5174, 5165, 6399, 5180, 6399, 5181, 5163, 5184, 5186, - 5193, 6399, 6399, 6399, 5194, 5188, 5199, 5187, 5201, 5202, - 5214, 5198, 5222, 6399, 5209, 5226, 5227, 5220, 5234, 5238, - 5233, 5237, 5250, 5243, 5251, 5241, 5258, 5255, 5266, 6399, + 5067, 5073, 5075, 5076, 5068, 5063, 5078, 5084, 5092, 5102, + 5098, 5107, 5093, 5114, 5106, 5090, 5101, 5105, 5100, 5108, + 5125, 5129, 5128, 5132, 5134, 5141, 5133, 5145, 5153, 5162, + 5163, 5165, 6594, 6594, 5149, 5159, 5156, 6594, 5168, 5151, + 5160, 5171, 5190, 5180, 5183, 5178, 6594, 5203, 5195, 5193, + 5205, 5198, 5196, 5206, 5192, 5202, 5216, 5234, 5241, 5219, + 5227, 5225, 5240, 5229, 5230, 5248, 5256, 5247, 5257, 5255, + 6594, 5243, 6594, 5251, 5246, 5269, 6594, 6594, 5270, 5276, + 5265, 5280, 5273, 5281, 5294, 6594, 5284, 5297, 5302, 5292, + 6594, 5304, 6594, 5309, 5293, 5310, 5308, 5314, 6594, 6594, - 6399, 5259, 5276, 5268, 5279, 5277, 5275, 5278, 5269, 5283, - 5289, 5285, 6399, 5295, 5296, 5299, 5300, 5306, 5310, 5308, - 5311, 6399, 6399, 5312, 5314, 5324, 5329, 5326, 5321, 5335, - 5332, 5333, 6399, 5339, 6399, 5344, 5351, 5368, 5349, 5357, - 5362, 6399, 5360, 5361, 6399, 5371, 5359, 5370, 6399, 5379, - 6399, 6399, 5383, 6399, 5384, 6399, 5388, 5389, 5393, 5396, - 5403, 5412, 5405, 5409, 5400, 5407, 5419, 5422, 5420, 6399, - 6399, 5433, 5402, 5431, 5443, 5416, 5438, 5444, 6399, 6399, - 5445, 5451, 6399, 5428, 5439, 5458, 5449, 5455, 5447, 5459, - 5460, 5465, 5470, 5490, 5492, 5494, 5480, 5498, 5481, 5478, + 6594, 5315, 5311, 5317, 5318, 5329, 5332, 5342, 5331, 5340, + 6594, 5336, 5344, 5357, 5337, 5353, 5355, 5358, 5361, 5373, + 5367, 5369, 5368, 5376, 5386, 5387, 6594, 6594, 5377, 5406, + 5393, 5397, 5396, 5401, 5404, 5403, 5392, 5408, 5410, 5399, + 6594, 5418, 5417, 5423, 5427, 5437, 5438, 5450, 5443, 6594, + 6594, 5434, 5435, 5439, 5456, 5444, 5448, 5445, 5459, 5462, + 6594, 5461, 6594, 5471, 5465, 5498, 5494, 5487, 5492, 6594, + 5490, 5488, 6594, 5496, 5493, 5489, 6594, 5505, 6594, 6594, + 5502, 6594, 5510, 6594, 5515, 5511, 5509, 5537, 5541, 5542, + 5544, 5545, 5528, 5533, 5553, 5549, 5548, 6594, 6594, 5556, - 5500, 5506, 5512, 6399, 5510, 5508, 5497, 6399, 5513, 5507, - 5529, 5538, 5535, 6399, 5527, 5546, 5547, 5539, 5534, 5552, - 5537, 5554, 6399, 5555, 5558, 5556, 6399, 5559, 6399, 5575, - 6399, 6399, 5564, 5579, 5583, 6399, 5588, 5596, 6399, 5589, - 5590, 5578, 5582, 5603, 6399, 5609, 5607, 5613, 5610, 5616, - 5611, 5623, 5617, 5622, 6399, 5614, 5630, 5632, 5634, 5648, - 5637, 5635, 5636, 5657, 5649, 5640, 5653, 5658, 6399, 5668, - 5670, 6399, 5662, 6399, 5671, 5672, 5681, 6399, 5687, 5674, - 5673, 5684, 6399, 5689, 5691, 6399, 5680, 5706, 5709, 5710, - 5693, 5713, 5704, 5722, 5723, 5727, 6399, 5729, 5715, 5732, + 5527, 5555, 5558, 5538, 5562, 5559, 6594, 6594, 5573, 5581, + 6594, 5567, 5588, 5579, 5582, 5577, 5583, 5585, 5598, 5594, + 5593, 5608, 5606, 5615, 5628, 5620, 5612, 5611, 5619, 5623, + 5621, 5633, 6594, 5637, 5646, 5634, 6594, 5651, 5650, 5662, + 5660, 5658, 6594, 5648, 5669, 5670, 5672, 5656, 5691, 5675, + 5673, 6594, 5690, 5686, 5692, 6594, 5678, 6594, 5694, 6594, + 6594, 5702, 5709, 5705, 6594, 5711, 5719, 6594, 5712, 5715, + 5708, 5721, 5722, 6594, 5730, 5739, 5726, 5734, 5735, 5753, + 5741, 5750, 5738, 5760, 6594, 5745, 5754, 5770, 5761, 5771, + 5767, 5757, 5780, 5781, 5777, 5766, 5778, 5787, 6594, 5795, - 5734, 5740, 5720, 6399, 5739, 5745, 5750, 5756, 5748, 6399, - 5757, 5759, 6399, 5758, 5755, 5749, 5775, 5769, 5779, 5781, - 5783, 6399, 5789, 6399, 6399, 5776, 6399, 5770, 5793, 6399, - 5798, 5785, 5784, 5800, 5813, 5812, 6399, 6399, 5810, 5806, - 5818, 5823, 6399, 5815, 5826, 5825, 5820, 5837, 6399, 5821, - 5834, 5831, 5844, 5848, 5842, 5862, 6399, 6399, 5852, 6399, - 5868, 5874, 5873, 6399, 6399, 6399, 5878, 6399, 5880, 5884, - 5881, 6399, 5886, 5870, 5882, 6399, 5891, 5895, 5883, 6399, - 5899, 5894, 5905, 5914, 5916, 5904, 5915, 5924, 5909, 5912, - 5928, 5930, 5932, 5921, 5938, 6399, 6399, 5945, 6399, 6399, + 5810, 6594, 5790, 6594, 5812, 5797, 5815, 6594, 5818, 5801, + 5800, 5816, 6594, 5824, 5817, 6594, 5807, 5830, 5832, 5827, + 5822, 5834, 5833, 5855, 5861, 5865, 6594, 5857, 5847, 5870, + 5871, 5872, 5858, 6594, 5873, 5874, 5862, 5877, 5892, 5886, + 6594, 5887, 5888, 6594, 5890, 5906, 5898, 5913, 5895, 5916, + 5920, 5919, 6594, 5921, 6594, 6594, 5904, 6594, 5905, 5925, + 6594, 5928, 5915, 5937, 5932, 5935, 5939, 6594, 6594, 5946, + 5950, 5949, 5956, 6594, 5943, 5945, 5962, 5966, 5968, 6594, + 5971, 5955, 5976, 5973, 5970, 5990, 5983, 5994, 6594, 6594, + 5989, 6594, 6011, 6012, 6010, 6594, 6594, 6594, 6015, 6594, - 5950, 5952, 5953, 6399, 5947, 5958, 6399, 5960, 5951, 5965, - 5954, 5968, 6399, 6399, 5955, 5967, 6399, 5976, 5961, 5979, - 5972, 5971, 5985, 6399, 6399, 6399, 6399, 6399, 5983, 6399, - 6399, 6000, 5987, 5994, 6399, 5982, 6006, 6002, 6003, 6018, - 6010, 5998, 6024, 6020, 6019, 6029, 6041, 6042, 6048, 6047, - 6049, 6030, 6044, 6063, 6046, 6061, 6399, 6057, 6399, 6062, - 6399, 6058, 6067, 6069, 6064, 6070, 6073, 6399, 6079, 6091, - 6082, 6085, 6089, 6084, 6108, 6109, 6096, 6117, 6120, 6119, - 6122, 6126, 6118, 6138, 6132, 6399, 6136, 6133, 6142, 6139, - 6148, 6144, 6399, 6145, 6149, 6154, 6165, 6155, 6169, 6166, + 6019, 6026, 6016, 6594, 6022, 6027, 6030, 6594, 6028, 6025, + 6033, 6594, 6038, 6031, 6049, 6051, 6061, 6047, 6058, 6064, + 6071, 6043, 6054, 6052, 6075, 6077, 6065, 6086, 6594, 6594, + 6087, 6594, 6594, 6093, 6094, 6097, 6594, 6090, 6101, 6594, + 6103, 6096, 6104, 6091, 6110, 6594, 6594, 6098, 6109, 6594, + 6119, 6120, 6113, 6124, 6115, 6123, 6128, 6594, 6594, 6594, + 6594, 6594, 6135, 6594, 6594, 6148, 6133, 6131, 6594, 6136, + 6146, 6163, 6154, 6147, 6151, 6160, 6158, 6155, 6168, 6177, + 6180, 6192, 6197, 6199, 6202, 6195, 6196, 6181, 6194, 6207, + 6203, 6211, 6594, 6216, 6594, 6219, 6594, 6212, 6221, 6218, - 6179, 6186, 6184, 6183, 6172, 6197, 6195, 6196, 6200, 6193, - 6207, 6399, 6204, 6210, 6213, 6214, 6220, 6216, 6225, 6227, - 6238, 6242, 6239, 6245, 6243, 6399, 6246, 6399, 6399, 6252, - 6237, 6248, 6258, 6261, 6399, 6399, 6399, 6307, 6314, 6321, - 6328, 6335, 100, 6342, 6349, 6356, 6363, 6370, 6377, 6384, - 6391 + 6223, 6227, 6222, 6232, 6594, 6228, 6248, 6255, 6234, 6243, + 6244, 6246, 6258, 6261, 6262, 6272, 6279, 6275, 6286, 6289, + 6290, 6277, 6282, 6297, 6594, 6288, 6293, 6292, 6306, 6303, + 6309, 6299, 6594, 6320, 6326, 6316, 6318, 6327, 6341, 6339, + 6322, 6345, 6338, 6349, 6359, 6356, 6363, 6355, 6373, 6377, + 6314, 6382, 6384, 6366, 6375, 6376, 6381, 6394, 6594, 6387, + 6393, 6396, 6405, 6409, 6594, 6399, 6408, 6411, 6416, 6428, + 6422, 6594, 6431, 6433, 6432, 6594, 6436, 6594, 6594, 6440, + 6434, 6443, 6446, 6447, 6594, 6594, 6594, 6502, 6509, 6516, + 6523, 6530, 83, 6537, 6544, 6551, 6558, 6565, 6572, 6579, + + 6586 } ; -static yyconst flex_int16_t yy_def[2252] = +static yyconst flex_int16_t yy_def[2302] = { 0, - 2237, 1, 2238, 2238, 2239, 2239, 2240, 2240, 2241, 2241, - 2242, 2242, 2237, 2243, 2237, 2237, 2237, 2237, 2244, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2245, 2237, 2237, 2237, 2245, 2246, 2237, 2237, 2237, 2246, - 2247, 2237, 2237, 2237, 2237, 2247, 2248, 2237, 2237, 2237, - 2248, 2249, 2237, 2250, 2237, 2249, 2249, 2243, 2243, 2237, - 2251, 2244, 2251, 2244, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2287, 1, 2288, 2288, 2289, 2289, 2290, 2290, 2291, 2291, + 2292, 2292, 2287, 2293, 2287, 2287, 2287, 2287, 2294, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2295, 2287, 2287, 2287, 2295, 2296, 2287, 2287, 2287, + 2296, 2297, 2287, 2287, 2287, 2287, 2297, 2298, 2287, 2287, + 2287, 2298, 2299, 2287, 2300, 2287, 2299, 2299, 2293, 2293, + 2287, 2301, 2294, 2301, 2294, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2245, 2245, 2246, 2246, 2247, 2247, 2237, 2248, 2248, 2249, - 2249, 2250, 2250, 2249, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2295, 2295, 2296, 2296, 2297, 2297, 2287, 2298, + 2298, 2299, 2299, 2300, 2300, 2299, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2249, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2299, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2249, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2299, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2249, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2299, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2249, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2237, 2237, 2243, 2237, 2237, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2299, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2287, 2287, 2293, + 2287, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2249, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2299, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2249, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2299, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2237, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2237, 2243, - 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2237, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, - 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2287, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2287, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2237, - 2243, 2237, 2243, 2237, 2237, 2243, 2243, 2243, 2237, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2287, 2287, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2287, 2293, 2287, + 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2237, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2237, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2287, 2293, 2293, 2293, 2287, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, 2287, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, - 2237, 2237, 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2287, + 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2237, 2243, - 2237, 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2237, 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2293, 2287, + 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, - 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2243, 2237, 2237, 2243, 2237, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2237, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2237, - 2243, 2243, 2243, 2237, 2237, 2237, 2243, 2237, 2243, 2243, - 2243, 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2237, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2237, 2243, 2237, 2237, + 2293, 2287, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2287, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2287, 2287, 2293, 2287, 2293, 2293, + 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, + 2293, 2287, 2293, 2293, 2293, 2287, 2287, 2287, 2293, 2287, - 2243, 2243, 2243, 2237, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2237, 2237, 2243, 2243, 2237, 2243, 2243, 2243, - 2243, 2243, 2243, 2237, 2237, 2237, 2237, 2237, 2243, 2237, - 2237, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2243, - 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2243, 2243, 2243, - 2243, 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, + 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, + 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2293, 2293, 2287, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2287, 2287, + 2287, 2287, 2293, 2287, 2287, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2287, 2293, 2287, 2293, 2293, 2293, - 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2237, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, - 2243, 2243, 2243, 2243, 2243, 2237, 2243, 2237, 2237, 2243, - 2243, 2243, 2243, 2243, 2237, 2237, 0, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237 + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, + 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2287, 2293, + 2293, 2293, 2293, 2293, 2287, 2293, 2293, 2293, 2293, 2293, + 2293, 2287, 2293, 2293, 2293, 2287, 2293, 2287, 2287, 2293, + 2293, 2293, 2293, 2293, 2287, 2287, 0, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + + 2287 } ; -static yyconst flex_uint16_t yy_nxt[6466] = +static yyconst flex_uint16_t yy_nxt[6661] = { 0, 14, 15, 16, 17, 18, 19, 18, 14, 14, 14, - 14, 14, 18, 20, 14, 21, 22, 23, 24, 14, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 14, 14, 14, 14, 40, - 20, 14, 21, 22, 23, 24, 14, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 14, 14, 14, 14, 42, 43, 44, 42, - 43, 44, 47, 48, 47, 48, 49, 97, 49, 52, - 53, 54, 55, 811, 18, 52, 53, 54, 55, 69, - 18, 58, 59, 60, 58, 59, 60, 70, 131, 131, + 14, 14, 18, 20, 21, 22, 23, 24, 25, 14, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 14, 14, 14, 14, 41, + 20, 21, 22, 23, 24, 25, 14, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 14, 14, 14, 14, 43, 44, 45, 43, + 44, 45, 48, 49, 48, 49, 50, 99, 50, 53, + 54, 55, 56, 69, 18, 53, 54, 55, 56, 70, + 18, 59, 60, 61, 59, 60, 61, 71, 79, 133, - 68, 71, 87, 45, 97, 133, 45, 141, 133, 50, - 73, 50, 73, 73, 69, 73, 141, 56, 99, 138, - 138, 73, 88, 56, 139, 69, 75, 76, 61, 87, - 69, 61, 15, 16, 17, 63, 64, 65, 15, 16, - 17, 63, 64, 65, 77, 99, 89, 183, 74, 88, - 69, 91, 66, 75, 76, 78, 145, 107, 66, 92, - 90, 70, 79, 69, 1003, 71, 80, 69, 98, 81, - 67, 77, 69, 89, 183, 137, 67, 69, 91, 66, - 69, 69, 78, 145, 107, 66, 92, 90, 93, 79, - 69, 94, 69, 80, 100, 98, 81, 82, 95, 136, + 133, 72, 101, 46, 99, 135, 46, 143, 135, 51, + 74, 51, 74, 74, 70, 74, 71, 57, 140, 140, + 72, 74, 147, 57, 70, 79, 76, 77, 62, 101, + 922, 62, 15, 16, 17, 64, 65, 66, 15, 16, + 17, 64, 65, 66, 78, 89, 70, 91, 75, 147, + 70, 93, 67, 76, 77, 80, 143, 109, 67, 94, + 70, 92, 81, 70, 828, 90, 82, 115, 70, 83, + 68, 78, 89, 70, 91, 1021, 68, 70, 93, 67, + 70, 70, 80, 100, 109, 67, 94, 146, 92, 81, + 141, 149, 90, 82, 115, 70, 83, 84, 70, 95, - 96, 83, 101, 134, 84, 198, 85, 86, 102, 132, - 104, 69, 103, 113, 105, 93, 147, 69, 94, 69, - 69, 100, 146, 69, 82, 95, 69, 96, 83, 101, - 106, 84, 198, 85, 86, 102, 69, 104, 114, 103, - 113, 105, 115, 147, 133, 69, 123, 133, 124, 146, - 180, 69, 116, 69, 126, 117, 157, 106, 108, 127, - 141, 69, 109, 125, 69, 114, 128, 69, 110, 115, - 129, 111, 69, 123, 130, 124, 151, 180, 112, 116, - 69, 126, 117, 157, 139, 108, 127, 131, 131, 109, - 125, 144, 69, 128, 69, 110, 209, 129, 111, 158, + 143, 85, 96, 70, 86, 70, 87, 88, 139, 97, + 100, 98, 138, 125, 146, 126, 136, 106, 149, 70, + 134, 107, 70, 148, 84, 70, 95, 102, 85, 96, + 127, 86, 150, 87, 88, 103, 97, 108, 98, 70, + 125, 104, 126, 70, 106, 105, 70, 128, 107, 153, + 148, 143, 129, 70, 102, 141, 70, 127, 70, 150, + 70, 116, 103, 130, 108, 117, 139, 131, 104, 155, + 187, 132, 105, 110, 128, 118, 153, 111, 119, 129, + 133, 133, 70, 112, 70, 154, 113, 70, 116, 70, + 130, 161, 117, 114, 131, 70, 155, 187, 132, 70, - 904, 130, 69, 151, 141, 112, 118, 69, 68, 119, - 68, 68, 135, 68, 135, 135, 120, 135, 144, 68, - 121, 122, 73, 209, 73, 73, 158, 73, 69, 140, - 69, 140, 140, 118, 140, 68, 119, 68, 68, 73, - 68, 73, 73, 120, 73, 148, 68, 121, 122, 152, - 73, 161, 150, 153, 155, 156, 137, 159, 149, 154, - 143, 69, 69, 69, 69, 136, 162, 163, 166, 69, - 138, 138, 148, 69, 69, 160, 152, 74, 161, 150, - 153, 155, 156, 69, 167, 149, 154, 164, 165, 69, - 168, 69, 173, 162, 163, 166, 69, 69, 134, 181, + 110, 207, 118, 70, 111, 119, 69, 167, 69, 69, + 112, 69, 154, 113, 160, 138, 70, 69, 161, 70, + 114, 120, 136, 137, 121, 137, 137, 74, 137, 74, + 74, 122, 74, 70, 167, 123, 124, 142, 134, 142, + 142, 160, 142, 70, 69, 70, 69, 69, 120, 69, + 156, 121, 158, 159, 162, 69, 157, 151, 122, 2287, + 164, 70, 123, 124, 74, 145, 74, 74, 176, 74, + 152, 70, 163, 70, 166, 74, 170, 156, 165, 158, + 159, 70, 168, 157, 151, 70, 70, 164, 169, 2287, + 70, 70, 177, 171, 140, 140, 222, 152, 70, 163, - 175, 132, 160, 69, 169, 69, 69, 170, 69, 178, - 176, 167, 69, 179, 164, 165, 174, 168, 182, 2237, - 171, 172, 185, 203, 69, 184, 181, 175, 69, 188, - 177, 169, 69, 69, 170, 2237, 178, 176, 69, 69, - 179, 69, 69, 174, 186, 182, 187, 171, 172, 185, - 190, 189, 184, 69, 193, 69, 188, 177, 69, 69, - 191, 69, 194, 195, 192, 2237, 196, 199, 2237, 2237, - 69, 186, 197, 187, 69, 69, 205, 190, 189, 200, - 69, 193, 69, 201, 202, 204, 207, 191, 69, 194, - 195, 192, 69, 196, 199, 69, 206, 208, 69, 197, + 70, 166, 75, 170, 2287, 165, 70, 172, 178, 168, + 173, 70, 2287, 2287, 2287, 169, 70, 181, 179, 177, + 171, 182, 183, 174, 175, 70, 184, 186, 70, 185, + 135, 70, 189, 135, 172, 178, 190, 173, 180, 70, + 70, 70, 188, 70, 181, 179, 70, 70, 182, 183, + 174, 175, 70, 184, 186, 191, 185, 192, 193, 189, + 197, 2287, 70, 190, 70, 180, 194, 70, 196, 188, + 195, 198, 2287, 202, 2287, 70, 2287, 199, 70, 203, + 70, 70, 191, 200, 192, 193, 70, 197, 70, 201, + 204, 70, 208, 194, 205, 196, 211, 195, 198, 206, - 69, 210, 69, 205, 213, 212, 200, 214, 69, 2237, - 201, 202, 204, 207, 215, 135, 69, 135, 135, 69, - 135, 217, 211, 206, 208, 218, 69, 69, 210, 216, - 2237, 213, 212, 220, 214, 140, 69, 140, 140, 219, - 140, 215, 73, 69, 73, 73, 221, 73, 217, 211, - 222, 69, 69, 141, 69, 230, 216, 69, 224, 223, - 220, 225, 69, 226, 229, 69, 219, 228, 2237, 227, - 240, 231, 2237, 221, 239, 232, 241, 222, 69, 69, - 143, 69, 242, 260, 244, 224, 223, 69, 225, 69, - 69, 229, 233, 2237, 228, 69, 227, 240, 69, 69, + 202, 70, 209, 70, 199, 70, 203, 70, 213, 212, + 200, 224, 214, 70, 70, 217, 201, 204, 216, 208, + 70, 205, 210, 211, 219, 218, 206, 70, 70, 209, + 70, 2287, 2287, 215, 70, 213, 212, 70, 224, 214, + 70, 2287, 217, 220, 2287, 216, 70, 221, 2287, 210, + 2287, 219, 218, 137, 225, 137, 137, 228, 137, 142, + 215, 142, 142, 74, 142, 74, 74, 143, 74, 70, + 220, 223, 226, 70, 221, 227, 230, 235, 229, 70, + 70, 225, 231, 70, 228, 70, 233, 70, 232, 2287, + 234, 236, 2287, 2287, 70, 237, 2287, 244, 223, 226, - 69, 239, 232, 241, 69, 245, 243, 69, 246, 242, - 69, 244, 247, 250, 248, 69, 2237, 249, 2237, 233, - 234, 69, 69, 251, 69, 235, 252, 69, 264, 69, - 236, 258, 245, 243, 257, 246, 237, 238, 69, 247, - 250, 248, 267, 69, 249, 69, 261, 234, 69, 253, - 251, 259, 235, 252, 254, 269, 69, 236, 258, 262, - 69, 257, 69, 237, 238, 265, 255, 268, 256, 270, - 263, 266, 69, 261, 69, 69, 253, 69, 259, 271, - 2237, 254, 272, 69, 273, 276, 279, 69, 360, 69, - 69, 69, 265, 255, 268, 256, 69, 263, 266, 69, + 325, 145, 227, 230, 246, 229, 247, 248, 70, 70, + 245, 70, 238, 233, 70, 232, 70, 234, 70, 70, + 249, 255, 237, 70, 244, 251, 70, 250, 70, 70, + 70, 246, 252, 247, 248, 2287, 2287, 245, 70, 238, + 239, 2287, 256, 70, 70, 240, 257, 249, 255, 70, + 241, 2287, 251, 2287, 250, 253, 242, 243, 254, 252, + 2287, 258, 265, 70, 70, 264, 259, 239, 70, 256, + 70, 266, 240, 257, 262, 2287, 70, 241, 260, 263, + 261, 269, 253, 242, 243, 254, 70, 70, 258, 267, + 270, 272, 264, 259, 70, 276, 70, 70, 266, 274, - 274, 69, 275, 277, 278, 69, 271, 69, 69, 272, - 281, 273, 276, 279, 280, 69, 283, 282, 69, 284, - 285, 69, 69, 69, 69, 69, 69, 274, 286, 275, - 277, 278, 289, 293, 291, 292, 295, 281, 69, 287, - 288, 280, 69, 283, 282, 290, 284, 285, 69, 294, - 297, 69, 69, 296, 299, 69, 306, 69, 300, 69, - 69, 291, 292, 295, 69, 69, 287, 288, 305, 303, - 302, 307, 290, 298, 69, 301, 294, 308, 309, 69, - 296, 304, 69, 69, 141, 300, 69, 69, 69, 69, - 69, 310, 311, 69, 312, 305, 303, 302, 307, 315, + 268, 262, 273, 271, 275, 260, 263, 261, 70, 70, + 2287, 277, 278, 70, 280, 70, 2287, 270, 284, 279, + 2287, 70, 276, 70, 70, 70, 70, 268, 282, 273, + 271, 70, 281, 70, 283, 70, 70, 70, 277, 278, + 70, 280, 285, 287, 288, 284, 279, 70, 70, 286, + 70, 290, 291, 289, 70, 282, 292, 70, 297, 281, + 70, 283, 70, 293, 294, 295, 70, 298, 296, 285, + 287, 288, 70, 299, 70, 70, 286, 301, 290, 291, + 289, 300, 305, 70, 302, 297, 303, 70, 70, 70, + 293, 294, 70, 310, 298, 296, 306, 70, 308, 312, - 298, 69, 301, 313, 69, 309, 316, 69, 304, 69, - 314, 319, 69, 317, 318, 320, 327, 322, 310, 311, - 69, 312, 69, 69, 321, 324, 315, 326, 69, 2237, - 313, 69, 325, 316, 323, 329, 330, 314, 319, 69, - 317, 69, 320, 69, 322, 69, 69, 328, 69, 69, - 69, 321, 324, 331, 326, 69, 332, 333, 336, 325, - 69, 323, 69, 330, 69, 335, 338, 69, 334, 346, - 337, 69, 69, 339, 328, 69, 340, 69, 341, 345, - 331, 342, 69, 2237, 333, 336, 344, 69, 69, 343, - 69, 347, 335, 338, 69, 334, 69, 337, 69, 69, + 309, 70, 70, 311, 301, 70, 313, 314, 300, 304, + 70, 302, 315, 307, 70, 143, 320, 2287, 70, 317, + 310, 70, 70, 306, 319, 308, 316, 309, 70, 70, + 311, 70, 70, 313, 314, 70, 304, 70, 70, 318, + 307, 322, 323, 320, 70, 321, 317, 70, 70, 324, + 326, 319, 327, 316, 328, 333, 2287, 2287, 330, 70, + 329, 332, 331, 334, 337, 70, 318, 70, 322, 323, + 70, 70, 321, 70, 336, 70, 324, 326, 70, 327, + 70, 328, 333, 335, 70, 330, 70, 329, 332, 331, + 70, 337, 338, 339, 340, 70, 70, 342, 2287, 341, - 339, 69, 348, 340, 353, 341, 345, 69, 342, 354, - 69, 356, 349, 344, 2237, 69, 343, 69, 347, 357, - 350, 351, 69, 352, 367, 69, 365, 355, 361, 348, - 69, 353, 362, 69, 69, 363, 354, 364, 356, 349, - 358, 359, 69, 366, 69, 369, 357, 350, 351, 69, - 352, 69, 69, 365, 355, 361, 368, 370, 371, 362, - 372, 69, 363, 375, 364, 69, 373, 358, 359, 69, - 366, 69, 369, 69, 374, 69, 378, 377, 69, 383, - 69, 376, 388, 368, 370, 371, 69, 372, 69, 381, - 379, 382, 69, 373, 384, 69, 380, 385, 69, 386, + 347, 70, 343, 70, 344, 2287, 70, 353, 70, 345, + 335, 346, 2287, 348, 70, 349, 70, 367, 2287, 338, + 70, 340, 70, 70, 342, 70, 341, 347, 350, 343, + 70, 344, 351, 70, 352, 355, 345, 70, 346, 70, + 348, 70, 349, 354, 70, 360, 363, 374, 2287, 70, + 70, 365, 366, 361, 364, 350, 70, 356, 368, 351, + 70, 352, 355, 70, 2287, 357, 358, 70, 359, 70, + 354, 362, 360, 363, 70, 70, 70, 70, 365, 366, + 361, 364, 70, 372, 356, 368, 369, 371, 373, 370, + 375, 377, 357, 358, 376, 359, 70, 378, 362, 70, - 389, 374, 387, 378, 2237, 69, 383, 2237, 376, 69, - 2237, 390, 69, 69, 69, 2237, 381, 379, 382, 391, - 69, 384, 69, 380, 385, 69, 386, 389, 392, 387, - 393, 394, 395, 405, 397, 69, 406, 409, 390, 411, - 2237, 410, 69, 141, 69, 69, 391, 69, 396, 69, - 413, 69, 420, 2237, 69, 392, 69, 393, 394, 395, - 405, 397, 407, 406, 409, 412, 411, 408, 410, 414, - 2237, 415, 69, 69, 2237, 396, 398, 399, 69, 417, - 416, 2237, 69, 418, 69, 419, 400, 69, 401, 402, - 403, 69, 412, 404, 69, 421, 414, 69, 415, 422, + 382, 70, 380, 70, 385, 2287, 70, 379, 384, 70, + 372, 381, 70, 369, 371, 373, 370, 375, 377, 70, + 70, 376, 70, 70, 378, 386, 383, 391, 395, 380, + 70, 2287, 70, 70, 379, 384, 70, 387, 381, 389, + 70, 390, 396, 388, 2287, 392, 70, 70, 393, 397, + 394, 400, 386, 383, 391, 395, 70, 401, 70, 70, + 2287, 2287, 2287, 70, 387, 398, 389, 402, 390, 70, + 388, 70, 392, 399, 70, 393, 397, 394, 400, 70, + 70, 403, 405, 414, 401, 415, 413, 417, 418, 421, + 416, 419, 398, 143, 402, 70, 70, 404, 70, 2287, - 424, 69, 69, 398, 399, 69, 417, 416, 423, 425, - 418, 69, 419, 400, 69, 401, 402, 403, 426, 427, - 404, 69, 421, 428, 429, 2237, 422, 430, 431, 69, - 433, 432, 69, 435, 69, 423, 425, 434, 436, 69, - 438, 69, 69, 69, 447, 426, 427, 444, 443, 69, - 439, 2237, 69, 437, 430, 431, 69, 433, 432, 458, - 435, 69, 69, 69, 434, 436, 69, 438, 440, 69, - 445, 446, 448, 449, 444, 443, 69, 439, 69, 441, - 437, 442, 450, 452, 2237, 451, 69, 453, 454, 69, - 69, 69, 2237, 69, 69, 440, 455, 445, 446, 448, + 399, 70, 70, 70, 420, 70, 2287, 2287, 403, 405, + 414, 70, 422, 413, 417, 418, 421, 70, 419, 424, + 425, 423, 426, 70, 404, 406, 407, 70, 427, 70, + 2287, 420, 428, 429, 431, 408, 430, 409, 410, 411, + 70, 70, 412, 432, 70, 70, 424, 425, 423, 426, + 70, 434, 406, 407, 70, 427, 2287, 437, 70, 428, + 429, 431, 408, 433, 409, 410, 411, 436, 70, 412, + 432, 435, 443, 70, 438, 439, 70, 441, 70, 70, + 440, 442, 445, 70, 437, 70, 444, 70, 70, 457, + 433, 446, 70, 448, 436, 454, 2287, 449, 435, 443, - 449, 457, 69, 456, 461, 69, 441, 69, 442, 450, - 452, 459, 451, 69, 453, 454, 460, 69, 69, 462, - 463, 464, 69, 455, 466, 2237, 69, 69, 457, 465, - 456, 461, 467, 468, 69, 69, 69, 69, 459, 69, - 469, 2237, 470, 460, 472, 2237, 462, 463, 464, 471, - 69, 466, 69, 2237, 69, 69, 465, 473, 474, 467, - 468, 479, 475, 69, 480, 69, 69, 469, 69, 470, - 476, 472, 477, 478, 69, 69, 471, 69, 483, 69, - 69, 482, 489, 481, 473, 474, 485, 484, 479, 475, - 487, 69, 486, 490, 493, 69, 69, 476, 492, 477, + 2287, 453, 70, 70, 441, 70, 447, 440, 442, 445, + 70, 70, 450, 444, 70, 455, 456, 70, 446, 70, + 448, 70, 454, 451, 449, 452, 458, 459, 453, 461, + 70, 468, 70, 447, 70, 460, 2287, 462, 70, 450, + 463, 464, 455, 456, 70, 466, 2287, 465, 70, 467, + 451, 70, 452, 458, 459, 70, 461, 469, 70, 70, + 471, 472, 460, 70, 462, 470, 70, 463, 464, 70, + 473, 70, 466, 475, 465, 70, 467, 476, 474, 70, + 70, 2287, 70, 478, 469, 70, 477, 471, 472, 70, + 479, 2287, 470, 70, 480, 481, 70, 473, 490, 482, - 478, 69, 491, 69, 69, 483, 69, 69, 482, 489, - 481, 494, 495, 488, 484, 69, 69, 69, 69, 486, - 490, 493, 69, 69, 496, 492, 504, 2237, 497, 491, - 506, 2237, 514, 69, 69, 69, 69, 505, 494, 495, - 488, 69, 509, 510, 69, 69, 511, 2237, 507, 513, - 69, 496, 512, 504, 69, 497, 498, 506, 508, 514, - 517, 499, 515, 500, 505, 525, 69, 531, 69, 509, - 510, 501, 69, 511, 502, 69, 513, 69, 519, 512, - 69, 503, 69, 498, 516, 508, 518, 517, 499, 515, - 500, 69, 520, 523, 521, 522, 69, 69, 501, 69, + 475, 70, 484, 70, 476, 474, 483, 488, 70, 70, + 478, 495, 485, 477, 70, 489, 70, 479, 70, 491, + 70, 480, 481, 486, 70, 487, 482, 70, 70, 484, + 70, 492, 70, 483, 488, 493, 494, 70, 496, 485, + 497, 500, 489, 70, 501, 70, 491, 498, 70, 504, + 486, 502, 487, 70, 70, 70, 70, 2287, 492, 506, + 2287, 505, 493, 494, 70, 496, 70, 497, 500, 503, + 499, 501, 70, 70, 507, 70, 504, 515, 502, 70, + 517, 70, 508, 2287, 70, 70, 506, 516, 505, 518, + 70, 70, 520, 521, 2287, 70, 503, 499, 2287, 519, - 69, 502, 69, 524, 528, 519, 527, 69, 503, 526, - 69, 516, 530, 518, 69, 69, 529, 532, 69, 520, - 523, 521, 522, 533, 69, 534, 141, 535, 2237, 536, - 524, 528, 69, 527, 538, 69, 526, 537, 541, 69, - 69, 69, 539, 529, 532, 540, 544, 545, 546, 69, - 547, 69, 534, 69, 535, 69, 536, 542, 69, 69, - 69, 538, 543, 548, 537, 541, 549, 550, 554, 539, - 551, 553, 540, 544, 69, 69, 69, 556, 552, 69, - 555, 557, 69, 558, 559, 561, 2237, 69, 2237, 69, - 69, 562, 69, 69, 560, 554, 574, 551, 553, 69, + 70, 507, 2287, 522, 515, 524, 523, 517, 70, 508, + 509, 525, 526, 2287, 516, 510, 70, 511, 2287, 520, + 521, 70, 527, 70, 536, 512, 519, 70, 513, 70, + 522, 70, 524, 523, 70, 514, 70, 509, 525, 526, + 528, 529, 510, 530, 511, 531, 70, 533, 70, 527, + 532, 537, 512, 535, 534, 513, 70, 2287, 70, 70, + 538, 539, 514, 70, 541, 70, 70, 528, 529, 70, + 530, 540, 531, 542, 533, 70, 143, 532, 537, 543, + 535, 534, 544, 546, 70, 70, 545, 538, 539, 70, + 547, 541, 70, 2287, 548, 549, 551, 550, 540, 552, - 69, 69, 563, 69, 69, 552, 69, 555, 557, 69, - 558, 559, 570, 69, 564, 69, 567, 69, 562, 565, - 571, 560, 568, 566, 569, 69, 2237, 572, 69, 563, - 579, 576, 573, 69, 69, 575, 2237, 587, 69, 570, - 69, 564, 69, 567, 69, 577, 565, 571, 69, 568, - 566, 569, 69, 69, 572, 69, 580, 579, 576, 573, - 581, 582, 575, 583, 584, 585, 586, 578, 69, 69, - 594, 69, 577, 589, 588, 69, 69, 591, 69, 590, - 592, 69, 69, 580, 596, 69, 595, 581, 582, 69, - 583, 584, 585, 586, 578, 69, 593, 69, 597, 69, + 542, 70, 553, 555, 558, 70, 70, 70, 556, 559, + 70, 557, 560, 545, 70, 70, 554, 547, 70, 70, + 70, 548, 549, 551, 550, 70, 552, 70, 561, 553, + 562, 70, 563, 564, 565, 70, 70, 569, 557, 70, + 566, 2287, 2287, 554, 70, 568, 567, 570, 70, 571, + 574, 2287, 573, 572, 580, 70, 70, 70, 70, 70, + 564, 565, 575, 70, 70, 70, 581, 566, 70, 70, + 70, 2287, 568, 567, 570, 70, 571, 576, 577, 573, + 572, 580, 70, 578, 70, 582, 583, 579, 585, 575, + 70, 586, 70, 581, 70, 584, 587, 589, 588, 2287, - 589, 588, 69, 69, 591, 598, 590, 592, 69, 69, - 599, 603, 601, 595, 602, 600, 69, 605, 2237, 608, - 2237, 604, 69, 593, 612, 597, 69, 69, 69, 69, - 606, 609, 598, 610, 69, 69, 614, 616, 611, 601, - 2237, 602, 69, 69, 605, 607, 608, 613, 604, 69, - 69, 612, 615, 69, 69, 622, 2237, 606, 609, 617, - 69, 69, 69, 614, 616, 69, 618, 621, 69, 619, - 627, 620, 607, 69, 613, 69, 623, 69, 69, 615, - 624, 631, 622, 625, 628, 626, 617, 629, 69, 69, - 69, 69, 69, 618, 621, 69, 619, 69, 620, 630, + 2287, 70, 70, 70, 576, 577, 2287, 590, 70, 592, + 578, 593, 582, 583, 579, 585, 70, 70, 586, 600, + 596, 70, 584, 2287, 589, 588, 594, 595, 70, 591, + 70, 70, 597, 70, 590, 598, 592, 70, 593, 601, + 599, 70, 70, 604, 602, 603, 70, 596, 605, 607, + 70, 70, 609, 594, 595, 70, 591, 70, 608, 597, + 70, 606, 598, 610, 611, 70, 601, 599, 70, 70, + 604, 602, 603, 612, 70, 605, 616, 618, 613, 614, + 70, 70, 615, 619, 70, 608, 70, 70, 606, 617, + 610, 611, 621, 70, 626, 70, 70, 70, 620, 622, - 632, 633, 69, 623, 69, 635, 634, 624, 631, 638, - 625, 628, 626, 69, 629, 636, 69, 69, 637, 639, - 643, 640, 641, 69, 645, 69, 630, 632, 633, 69, - 2237, 69, 635, 634, 644, 646, 638, 69, 69, 69, - 69, 642, 636, 69, 69, 637, 639, 643, 640, 641, - 69, 645, 69, 69, 647, 648, 653, 649, 650, 654, - 655, 644, 646, 651, 69, 660, 656, 69, 642, 659, - 2237, 652, 657, 69, 69, 2237, 141, 677, 69, 69, - 69, 647, 648, 653, 649, 650, 654, 658, 661, 69, - 651, 662, 69, 656, 670, 69, 659, 69, 652, 657, + 623, 627, 2287, 70, 618, 70, 614, 70, 70, 615, + 619, 628, 624, 2287, 70, 629, 617, 625, 630, 2287, + 70, 626, 70, 70, 70, 620, 622, 623, 627, 633, + 631, 632, 635, 636, 634, 637, 70, 70, 628, 70, + 70, 70, 629, 70, 70, 630, 641, 70, 2287, 2287, + 644, 70, 646, 640, 638, 70, 633, 631, 632, 635, + 636, 634, 637, 70, 639, 70, 642, 643, 70, 645, + 2287, 648, 70, 647, 70, 70, 70, 644, 70, 646, + 640, 638, 70, 651, 652, 650, 654, 653, 2287, 649, + 2287, 639, 70, 642, 643, 70, 645, 70, 648, 70, - 69, 663, 69, 69, 664, 2237, 69, 69, 672, 69, - 671, 69, 2237, 673, 658, 661, 675, 2237, 662, 2237, - 69, 670, 2237, 685, 674, 688, 69, 69, 663, 676, - 2237, 664, 665, 690, 69, 672, 666, 671, 686, 667, - 673, 691, 69, 675, 69, 69, 668, 69, 687, 669, - 685, 674, 688, 2237, 69, 69, 676, 69, 689, 665, - 69, 69, 693, 666, 692, 686, 667, 2237, 691, 2237, - 694, 695, 708, 668, 69, 687, 669, 678, 679, 697, - 680, 69, 69, 681, 696, 689, 701, 698, 682, 693, - 69, 692, 700, 69, 683, 684, 69, 694, 695, 708, + 647, 655, 657, 70, 659, 661, 70, 70, 70, 656, + 651, 652, 650, 654, 653, 658, 649, 70, 70, 660, + 662, 2287, 70, 70, 664, 663, 665, 143, 655, 657, + 70, 659, 661, 70, 2287, 666, 656, 70, 668, 669, + 671, 670, 658, 667, 70, 2287, 660, 662, 70, 70, + 673, 664, 663, 70, 674, 675, 672, 70, 676, 677, + 2287, 70, 666, 70, 70, 70, 669, 678, 670, 70, + 667, 691, 70, 70, 689, 688, 70, 673, 70, 687, + 686, 674, 675, 672, 680, 679, 677, 70, 692, 70, + 70, 70, 70, 70, 678, 70, 690, 70, 691, 693, - 69, 69, 699, 69, 678, 679, 697, 680, 69, 69, - 681, 696, 69, 701, 698, 682, 702, 69, 703, 700, - 704, 683, 684, 69, 705, 706, 69, 707, 2237, 699, - 711, 709, 713, 710, 712, 714, 2237, 69, 715, 69, - 69, 2237, 716, 702, 2237, 703, 69, 704, 2237, 717, - 69, 705, 706, 718, 707, 69, 69, 69, 709, 720, - 710, 712, 69, 69, 69, 715, 719, 69, 69, 716, - 721, 722, 69, 723, 724, 69, 717, 725, 726, 69, - 718, 69, 730, 2237, 728, 729, 720, 727, 2237, 733, - 69, 731, 69, 719, 732, 69, 69, 721, 722, 2237, + 2287, 689, 688, 2287, 2287, 2287, 687, 686, 2287, 703, + 701, 680, 679, 681, 70, 692, 702, 682, 70, 70, + 683, 705, 70, 690, 704, 706, 70, 684, 711, 707, + 685, 70, 70, 724, 2287, 70, 703, 701, 2287, 708, + 681, 709, 70, 702, 682, 70, 710, 683, 705, 70, + 70, 704, 70, 70, 684, 711, 707, 685, 694, 695, + 724, 696, 2287, 712, 697, 70, 708, 713, 709, 698, + 714, 716, 70, 710, 2287, 699, 700, 715, 717, 70, + 2287, 2287, 721, 729, 70, 694, 695, 70, 696, 70, + 712, 697, 70, 718, 713, 70, 698, 714, 716, 719, - 69, 724, 69, 69, 725, 734, 69, 69, 735, 730, - 69, 728, 729, 69, 727, 69, 733, 69, 731, 736, - 737, 732, 69, 739, 740, 741, 69, 742, 738, 745, - 743, 69, 734, 744, 69, 735, 69, 2237, 746, 748, - 69, 747, 758, 755, 69, 69, 736, 737, 69, 69, - 739, 69, 741, 750, 742, 738, 745, 743, 749, 69, - 744, 69, 69, 751, 752, 746, 748, 69, 747, 753, - 69, 754, 759, 757, 69, 767, 756, 2237, 760, 69, - 750, 69, 69, 69, 764, 749, 69, 761, 2237, 766, - 751, 752, 69, 765, 762, 69, 753, 2237, 754, 69, + 70, 70, 699, 700, 715, 717, 720, 70, 70, 721, + 722, 723, 725, 726, 727, 70, 2287, 730, 731, 2287, + 718, 728, 70, 732, 70, 70, 719, 70, 733, 2287, + 739, 736, 734, 720, 742, 70, 737, 722, 723, 725, + 726, 70, 70, 70, 70, 731, 738, 70, 728, 70, + 732, 70, 735, 70, 70, 733, 70, 70, 736, 734, + 740, 70, 741, 737, 743, 744, 70, 745, 747, 746, + 750, 748, 70, 738, 749, 2287, 2287, 2287, 70, 735, + 751, 70, 70, 70, 70, 70, 752, 740, 70, 741, + 70, 743, 744, 70, 745, 747, 746, 750, 748, 753, - 757, 69, 763, 756, 69, 760, 69, 69, 768, 69, - 769, 764, 770, 771, 761, 69, 766, 772, 2237, 69, - 765, 762, 773, 775, 69, 774, 69, 2237, 776, 763, - 777, 2237, 69, 778, 69, 768, 782, 769, 780, 770, - 69, 69, 69, 779, 772, 69, 69, 781, 2237, 69, - 141, 69, 774, 69, 69, 776, 2237, 777, 789, 790, - 778, 2237, 2237, 782, 791, 780, 797, 792, 794, 69, - 779, 798, 2237, 793, 781, 783, 69, 784, 2237, 795, - 69, 785, 69, 786, 69, 789, 790, 2237, 787, 800, - 796, 791, 799, 788, 792, 794, 69, 801, 69, 69, + 70, 749, 70, 754, 70, 757, 756, 751, 758, 760, + 761, 755, 759, 752, 70, 70, 762, 70, 763, 765, + 766, 70, 764, 768, 2287, 70, 753, 70, 772, 70, + 754, 70, 70, 756, 70, 758, 760, 761, 755, 759, + 70, 70, 70, 762, 767, 763, 765, 766, 769, 764, + 768, 770, 70, 771, 773, 70, 774, 775, 776, 777, + 778, 70, 2287, 70, 70, 2287, 781, 782, 70, 70, + 783, 767, 784, 70, 70, 769, 779, 2287, 770, 790, + 771, 773, 70, 774, 780, 785, 777, 778, 70, 70, + 70, 70, 786, 781, 782, 788, 70, 783, 789, 787, - 793, 69, 783, 69, 784, 69, 795, 804, 785, 69, - 786, 802, 69, 805, 807, 787, 800, 796, 808, 799, - 788, 803, 806, 809, 801, 810, 69, 69, 69, 69, - 819, 817, 818, 69, 804, 820, 2237, 2237, 802, 69, - 805, 807, 821, 69, 822, 808, 69, 829, 803, 806, - 69, 823, 69, 827, 69, 69, 812, 819, 817, 818, - 824, 813, 820, 814, 825, 830, 69, 826, 69, 821, - 69, 822, 69, 69, 815, 69, 828, 831, 823, 69, - 69, 816, 69, 812, 832, 69, 833, 824, 813, 69, - 814, 825, 830, 834, 826, 836, 837, 835, 69, 69, + 2287, 70, 792, 779, 70, 70, 70, 791, 793, 70, + 794, 780, 785, 70, 795, 796, 70, 797, 70, 786, + 70, 798, 70, 806, 807, 789, 787, 70, 70, 143, + 70, 808, 799, 70, 791, 793, 2287, 794, 70, 2287, + 810, 795, 796, 70, 797, 811, 2287, 70, 798, 70, + 806, 807, 809, 812, 70, 2287, 813, 70, 808, 799, + 800, 816, 801, 70, 818, 814, 802, 810, 803, 70, + 815, 817, 811, 804, 70, 70, 70, 2287, 805, 809, + 812, 821, 819, 813, 70, 825, 822, 800, 816, 801, + 823, 818, 820, 802, 70, 803, 70, 70, 817, 70, - 839, 815, 841, 828, 831, 69, 838, 840, 816, 842, - 69, 832, 843, 69, 69, 69, 2237, 69, 69, 69, - 834, 845, 836, 837, 835, 69, 846, 844, 69, 841, - 848, 69, 69, 838, 840, 858, 842, 847, 849, 843, - 69, 850, 2237, 851, 69, 852, 859, 853, 845, 69, - 2237, 69, 69, 846, 844, 69, 854, 69, 855, 856, - 69, 857, 69, 863, 847, 849, 864, 69, 850, 69, - 851, 860, 852, 859, 853, 865, 861, 69, 69, 866, - 69, 862, 69, 854, 867, 855, 856, 69, 857, 69, - 863, 69, 69, 864, 869, 868, 870, 871, 860, 69, + 804, 824, 826, 70, 70, 805, 70, 2287, 821, 819, + 827, 2287, 825, 822, 70, 834, 2287, 823, 2287, 820, + 836, 837, 835, 2287, 838, 846, 2287, 840, 824, 2287, + 70, 839, 842, 70, 70, 844, 70, 70, 829, 841, + 70, 850, 834, 830, 70, 831, 70, 836, 837, 835, + 70, 838, 70, 70, 840, 845, 832, 70, 839, 842, + 843, 847, 70, 833, 70, 829, 841, 848, 70, 855, + 830, 851, 831, 70, 853, 70, 852, 849, 70, 854, + 70, 856, 845, 832, 70, 70, 2287, 843, 847, 857, + 833, 70, 70, 70, 848, 859, 855, 70, 851, 861, - 2237, 874, 865, 69, 872, 873, 866, 69, 69, 2237, - 69, 867, 69, 875, 876, 877, 878, 880, 879, 881, - 2237, 69, 868, 870, 871, 883, 69, 69, 874, 69, - 69, 872, 873, 882, 69, 69, 69, 69, 69, 884, - 875, 876, 877, 878, 880, 879, 69, 885, 887, 886, - 888, 69, 883, 889, 2237, 69, 69, 69, 896, 890, - 882, 891, 892, 69, 69, 895, 884, 893, 894, 897, - 898, 69, 900, 2237, 885, 887, 886, 888, 899, 901, - 69, 69, 69, 69, 69, 69, 890, 69, 891, 892, - 69, 69, 895, 903, 893, 894, 902, 898, 905, 69, + 858, 853, 860, 852, 849, 863, 854, 70, 70, 70, + 864, 862, 70, 70, 865, 868, 857, 70, 70, 875, + 866, 2287, 859, 70, 70, 2287, 861, 858, 70, 860, + 870, 867, 863, 70, 871, 2287, 869, 864, 862, 70, + 872, 873, 868, 874, 877, 2287, 70, 866, 70, 878, + 876, 70, 70, 883, 879, 70, 70, 870, 867, 70, + 882, 871, 70, 869, 70, 886, 70, 872, 873, 70, + 874, 877, 880, 885, 890, 881, 884, 876, 2287, 887, + 883, 70, 891, 70, 70, 70, 70, 882, 888, 889, + 896, 893, 894, 895, 892, 70, 70, 70, 70, 880, - 69, 69, 907, 906, 909, 899, 901, 69, 69, 69, - 69, 908, 69, 69, 910, 912, 911, 913, 914, 2237, - 903, 69, 69, 902, 915, 905, 917, 69, 69, 907, - 906, 909, 916, 920, 918, 926, 2237, 922, 908, 919, - 2237, 910, 912, 911, 921, 69, 69, 69, 69, 69, - 69, 915, 69, 917, 923, 69, 69, 69, 924, 916, - 920, 918, 69, 927, 922, 925, 919, 929, 928, 931, - 69, 921, 930, 69, 69, 934, 69, 69, 935, 69, - 932, 923, 2237, 933, 936, 924, 2237, 941, 69, 938, - 927, 69, 925, 937, 929, 928, 931, 940, 2237, 930, + 885, 890, 881, 884, 70, 70, 887, 898, 70, 891, + 899, 70, 70, 70, 70, 888, 889, 896, 893, 894, + 895, 892, 897, 900, 902, 905, 901, 903, 70, 906, + 904, 907, 70, 70, 898, 70, 70, 70, 70, 908, + 909, 70, 912, 70, 911, 913, 910, 914, 70, 897, + 900, 902, 905, 901, 903, 70, 906, 904, 70, 915, + 70, 70, 70, 70, 2287, 916, 908, 909, 70, 912, + 918, 911, 913, 910, 917, 919, 920, 70, 921, 70, + 924, 923, 926, 70, 70, 931, 925, 927, 929, 70, + 70, 70, 916, 70, 70, 70, 70, 70, 70, 928, - 69, 69, 934, 939, 69, 935, 69, 932, 945, 69, - 933, 936, 69, 69, 941, 69, 938, 942, 943, 944, - 937, 947, 2237, 949, 940, 69, 946, 69, 952, 948, - 939, 69, 951, 2237, 961, 69, 2237, 2237, 2237, 69, - 69, 69, 950, 69, 942, 943, 944, 956, 947, 69, - 949, 955, 69, 946, 69, 952, 948, 953, 954, 951, - 69, 957, 960, 958, 69, 69, 69, 2237, 69, 950, - 69, 965, 959, 69, 956, 964, 963, 966, 955, 69, - 69, 962, 69, 970, 953, 954, 967, 971, 957, 960, - 958, 968, 69, 69, 69, 69, 69, 969, 965, 959, + 70, 917, 919, 920, 930, 921, 932, 924, 923, 926, + 933, 70, 70, 925, 927, 929, 934, 70, 935, 940, + 936, 937, 938, 939, 2287, 944, 928, 70, 2287, 2287, + 942, 930, 70, 70, 70, 70, 941, 933, 70, 2287, + 70, 70, 70, 934, 70, 935, 940, 936, 937, 938, + 939, 943, 70, 945, 947, 946, 70, 942, 948, 70, + 952, 953, 949, 941, 70, 70, 70, 956, 957, 2287, + 954, 963, 2287, 950, 959, 70, 951, 70, 943, 955, + 945, 947, 946, 70, 70, 948, 70, 952, 953, 949, + 70, 70, 70, 958, 956, 957, 70, 954, 70, 960, - 972, 69, 964, 963, 966, 69, 979, 980, 962, 981, - 970, 982, 984, 983, 971, 2237, 2237, 2237, 69, 2237, - 69, 985, 986, 2237, 969, 69, 69, 972, 973, 990, - 69, 974, 975, 979, 980, 69, 976, 69, 982, 984, - 983, 69, 977, 69, 69, 987, 978, 988, 985, 986, - 69, 69, 989, 991, 69, 973, 990, 993, 974, 975, - 994, 995, 2237, 976, 996, 1042, 69, 992, 2237, 977, - 69, 69, 987, 978, 988, 2237, 69, 2237, 1005, 989, - 991, 1002, 1004, 69, 1006, 1008, 2237, 69, 995, 69, - 1007, 996, 69, 2237, 992, 997, 69, 69, 69, 69, + 950, 959, 961, 951, 962, 964, 955, 70, 967, 965, + 966, 70, 70, 968, 969, 970, 70, 972, 2287, 979, + 958, 999, 70, 70, 70, 70, 960, 70, 70, 961, + 70, 962, 964, 974, 70, 967, 965, 966, 971, 973, + 968, 969, 970, 975, 972, 976, 70, 983, 70, 977, + 978, 70, 70, 70, 70, 70, 70, 982, 980, 981, + 974, 990, 2287, 2287, 70, 971, 973, 984, 70, 70, + 975, 70, 976, 987, 983, 985, 977, 978, 70, 988, + 986, 70, 70, 989, 982, 980, 981, 70, 990, 997, + 998, 1001, 70, 1010, 984, 1000, 2287, 70, 2287, 2287, - 998, 69, 999, 69, 1000, 1005, 1001, 69, 1002, 1004, - 1009, 1006, 1008, 69, 2237, 1010, 1012, 1007, 1013, 1011, - 1014, 2237, 997, 1015, 1016, 1021, 69, 998, 1023, 999, - 1017, 1000, 69, 1001, 69, 1018, 69, 69, 1019, 69, - 69, 1020, 69, 1012, 69, 1013, 1011, 1014, 69, 1022, - 1015, 1016, 69, 1024, 1027, 69, 1025, 1017, 1026, 1029, - 1028, 69, 1018, 69, 2237, 1019, 69, 69, 1020, 1030, - 1032, 1034, 1036, 1031, 1043, 1033, 1022, 69, 69, 69, - 1024, 69, 69, 1025, 1035, 1026, 69, 1028, 1037, 1039, - 1044, 69, 1038, 69, 69, 1041, 1030, 69, 1034, 1036, + 987, 1005, 70, 70, 1003, 1002, 988, 70, 70, 2287, + 989, 991, 1004, 70, 992, 993, 997, 998, 1001, 994, + 1010, 70, 1000, 70, 1040, 995, 70, 70, 1005, 996, + 1006, 1003, 1002, 70, 70, 1007, 1008, 70, 991, 1004, + 1011, 992, 993, 1012, 1013, 2287, 994, 1009, 2287, 1022, + 1014, 70, 995, 70, 1020, 2287, 996, 1006, 70, 1023, + 70, 1025, 1007, 1008, 2287, 70, 70, 1024, 2287, 1061, + 70, 1013, 70, 70, 1009, 70, 1022, 1014, 1015, 70, + 70, 1020, 70, 1016, 1026, 1017, 1023, 1018, 1025, 1019, + 1027, 1029, 1031, 1033, 1024, 1028, 70, 1030, 1032, 1034, - 1031, 69, 1033, 69, 1040, 1045, 69, 1046, 1049, 69, - 69, 1035, 69, 1047, 69, 1037, 1039, 1044, 2237, 1038, - 1048, 69, 1041, 1050, 69, 69, 1051, 1053, 1052, 2237, - 69, 1040, 69, 69, 1046, 69, 69, 69, 1054, 1056, - 1047, 1057, 1061, 1059, 1055, 1058, 69, 1048, 1060, 69, - 1050, 69, 69, 1051, 1063, 1052, 69, 1064, 69, 69, - 1062, 1065, 69, 69, 1067, 1054, 1056, 1071, 1057, 1061, - 1059, 1055, 1058, 1066, 69, 1060, 1072, 69, 1069, 69, - 1073, 1063, 1068, 1070, 1064, 69, 69, 1062, 69, 1074, - 69, 1067, 1075, 69, 1071, 69, 1076, 1077, 1078, 1079, + 70, 70, 70, 2287, 70, 1015, 70, 1038, 1039, 70, + 1016, 1026, 1017, 1036, 1018, 70, 1019, 70, 1029, 1031, + 1033, 70, 70, 1035, 1030, 1032, 1034, 1041, 1037, 1042, + 70, 70, 1046, 1043, 1038, 1039, 70, 70, 1045, 70, + 1036, 1044, 1047, 1048, 1049, 1050, 70, 1051, 1054, 70, + 1035, 70, 1056, 2287, 1041, 1037, 70, 70, 1062, 70, + 1043, 1053, 1055, 70, 1063, 1045, 70, 70, 1044, 1047, + 70, 1049, 1050, 1052, 70, 1054, 1057, 1058, 70, 1056, + 70, 1059, 1060, 70, 70, 70, 70, 1064, 1053, 1055, + 70, 1063, 2287, 1065, 1066, 1068, 70, 1067, 70, 1069, - 1066, 69, 2237, 1072, 2237, 1080, 1082, 1073, 1084, 1068, - 69, 69, 1085, 1081, 69, 1088, 1074, 69, 69, 1075, - 1083, 69, 69, 1076, 1077, 1078, 1097, 1086, 69, 69, - 1087, 69, 1080, 1082, 69, 1084, 69, 69, 69, 1085, - 1081, 1089, 1088, 1090, 1091, 1092, 69, 1083, 1093, 1094, - 69, 69, 1096, 1097, 1086, 1095, 1098, 1087, 69, 69, - 69, 69, 1100, 69, 1099, 1106, 1101, 1103, 1089, 1102, - 1090, 1091, 1092, 69, 69, 1093, 1094, 1105, 69, 1096, - 69, 69, 1095, 1098, 1104, 1107, 1108, 1110, 69, 1100, - 69, 1099, 69, 1101, 1103, 1109, 1102, 69, 1112, 69, + 1052, 70, 70, 1057, 1058, 1070, 70, 1072, 1059, 1060, + 1071, 70, 70, 70, 70, 1077, 1076, 1073, 1075, 70, + 1065, 1066, 70, 1074, 1067, 70, 1069, 1078, 70, 1079, + 70, 70, 1070, 1080, 1084, 1083, 70, 1071, 1082, 70, + 70, 1086, 1077, 1076, 1073, 1075, 1081, 70, 70, 1085, + 1074, 1087, 1090, 70, 1078, 70, 1079, 70, 1091, 70, + 1080, 70, 1083, 70, 1088, 1082, 1097, 1092, 1086, 1089, + 70, 1093, 1099, 1081, 1094, 1098, 1085, 70, 1087, 1090, + 70, 1095, 1100, 70, 1096, 1091, 2287, 1102, 70, 2287, + 1101, 70, 2287, 1097, 1092, 70, 70, 1105, 1093, 1103, - 1111, 1113, 1114, 2237, 1105, 1117, 1115, 1119, 2237, 1131, - 69, 1104, 69, 1108, 69, 69, 69, 69, 69, 1116, - 1120, 69, 1109, 69, 2237, 1112, 69, 1111, 1113, 1114, - 1118, 69, 1117, 1115, 1119, 1121, 1122, 69, 1123, 69, - 1125, 69, 69, 1124, 69, 1126, 1116, 1120, 69, 1127, - 1128, 1129, 1130, 1132, 69, 1135, 69, 1118, 69, 69, - 69, 1133, 1121, 1122, 1134, 1136, 1137, 1138, 2237, 69, - 69, 1140, 69, 69, 69, 69, 1127, 1128, 1129, 1130, - 1132, 1139, 1144, 1142, 69, 69, 1143, 69, 1133, 69, - 1141, 1134, 1136, 1137, 1138, 69, 69, 1146, 1140, 1145, + 70, 1094, 1098, 70, 70, 70, 70, 1104, 1095, 1100, + 1108, 1096, 1106, 1107, 1102, 1110, 70, 1101, 1109, 70, + 70, 70, 1112, 70, 1105, 1116, 1103, 70, 1111, 1113, + 1115, 1117, 1114, 70, 1104, 70, 1120, 1108, 70, 1106, + 1107, 70, 1110, 70, 70, 1109, 1118, 70, 1121, 1112, + 1123, 70, 1116, 1119, 70, 1111, 1113, 1115, 1117, 1114, + 1122, 1124, 70, 1120, 1125, 1126, 1127, 70, 70, 1128, + 2287, 70, 70, 1118, 70, 1121, 1129, 1123, 1130, 2287, + 1119, 1131, 1132, 1133, 2287, 1137, 70, 1122, 1124, 1135, + 2287, 1125, 70, 1134, 1136, 70, 1128, 70, 70, 1139, - 1147, 1149, 1148, 1150, 1151, 2237, 69, 2237, 1139, 1144, - 1142, 1157, 69, 1143, 69, 69, 1152, 1141, 69, 1159, - 1153, 69, 69, 1156, 69, 69, 1145, 1147, 1149, 1148, - 1150, 1151, 1155, 1154, 69, 1158, 1161, 1160, 69, 69, - 1163, 69, 69, 1152, 69, 69, 1159, 1153, 1162, 1164, - 1156, 1166, 1165, 1168, 1167, 69, 1169, 69, 2237, 1155, - 1154, 69, 1158, 1161, 1160, 1170, 1171, 1172, 2237, 1173, - 1174, 1179, 69, 69, 1176, 1162, 69, 69, 1166, 1165, - 69, 1167, 69, 69, 1175, 69, 69, 69, 1177, 1180, - 1178, 69, 69, 1171, 1172, 69, 1173, 1174, 69, 1181, + 70, 70, 70, 1129, 70, 70, 70, 1140, 1131, 1132, + 1133, 70, 1137, 2287, 70, 1138, 1135, 1141, 70, 1142, + 1134, 1136, 70, 1143, 1151, 1147, 1139, 70, 1144, 70, + 70, 1145, 70, 1148, 1140, 1149, 1146, 1150, 1152, 70, + 1153, 70, 1138, 70, 1141, 70, 1142, 1154, 70, 1155, + 1156, 1157, 1147, 1158, 2287, 70, 70, 1160, 70, 70, + 1148, 70, 1149, 70, 1150, 1152, 1161, 1153, 70, 1163, + 70, 1159, 70, 1162, 1154, 1164, 1165, 1156, 1157, 70, + 1158, 70, 1166, 1167, 1160, 70, 1170, 1169, 1168, 1177, + 1175, 70, 1171, 1161, 1184, 70, 1163, 70, 1159, 70, - 1183, 1176, 69, 1182, 1184, 69, 69, 1188, 2237, 1185, - 69, 1175, 69, 1186, 2237, 1177, 1180, 1178, 1191, 1187, - 69, 69, 1190, 2237, 1189, 1192, 1181, 1183, 2237, 69, - 1182, 1184, 69, 69, 69, 69, 1185, 1196, 1195, 1199, - 1186, 69, 1198, 1193, 69, 1191, 1187, 69, 1194, 1190, - 69, 1189, 1192, 1197, 1200, 69, 69, 1202, 1204, 69, - 69, 69, 2237, 1203, 1196, 1195, 1199, 69, 1208, 1198, - 1193, 1201, 1206, 1205, 1207, 1194, 69, 69, 69, 1209, - 1197, 69, 1210, 1212, 1211, 69, 69, 1213, 1218, 69, - 1203, 69, 2237, 69, 69, 1208, 69, 1214, 1201, 1206, + 1162, 70, 1164, 1165, 70, 70, 70, 1176, 1172, 70, + 1167, 70, 1173, 1170, 1169, 1168, 70, 1175, 70, 1171, + 1178, 1179, 1180, 1181, 1183, 1174, 70, 1182, 1185, 1186, + 70, 70, 2287, 70, 1176, 1172, 70, 1187, 70, 1173, + 1188, 1189, 70, 1190, 70, 70, 2287, 1178, 1179, 1180, + 1181, 1183, 1174, 1191, 1182, 70, 1186, 1192, 1193, 70, + 1194, 1196, 1195, 70, 1187, 1197, 70, 1188, 70, 1198, + 70, 1199, 1200, 70, 70, 1203, 1204, 1201, 70, 1205, + 70, 70, 70, 70, 1192, 1193, 70, 1194, 1196, 1195, + 1202, 70, 1197, 1206, 1209, 70, 1198, 70, 1199, 70, - 1205, 1207, 69, 1219, 69, 69, 1209, 69, 1220, 1210, - 1212, 1211, 1215, 1223, 1213, 1216, 1221, 1222, 1224, 69, - 69, 1225, 1226, 1229, 1214, 69, 69, 1217, 2237, 1230, - 1219, 69, 1231, 1227, 1234, 1220, 69, 69, 69, 1215, - 1223, 69, 1216, 1221, 1222, 1228, 1233, 69, 1225, 1226, - 69, 69, 69, 1232, 1217, 69, 1230, 69, 1236, 1235, - 1227, 69, 1237, 1238, 69, 1239, 1240, 69, 69, 69, - 69, 1248, 1228, 1233, 1242, 1243, 1241, 1244, 69, 69, - 1232, 69, 1246, 1250, 69, 1236, 1235, 1245, 69, 1237, - 1238, 69, 1239, 1240, 69, 69, 1247, 2237, 69, 1249, + 70, 70, 1203, 1204, 1201, 1207, 1205, 1208, 1213, 1210, + 1211, 2287, 1212, 70, 2287, 1214, 70, 1202, 70, 1215, + 1206, 70, 70, 70, 1218, 1216, 70, 1217, 1219, 70, + 70, 70, 1207, 1221, 1208, 1213, 1210, 1211, 70, 1212, + 1220, 1222, 1214, 70, 1223, 1224, 1215, 1225, 70, 70, + 1227, 1218, 1216, 70, 1217, 1219, 1226, 1228, 70, 1229, + 70, 1230, 70, 1234, 70, 70, 1231, 1220, 1222, 1232, + 1233, 70, 1224, 1240, 70, 70, 70, 1227, 2287, 1241, + 1235, 70, 1242, 1226, 1228, 70, 1229, 70, 1230, 70, + 1234, 1236, 1245, 1231, 70, 70, 1232, 1233, 70, 1237, - 1252, 1242, 69, 1241, 1244, 69, 69, 69, 1251, 1246, - 1250, 1253, 69, 1254, 1245, 1256, 69, 1257, 2237, 1255, - 1261, 1258, 1265, 1247, 69, 1262, 1249, 1252, 69, 69, - 1263, 69, 1266, 69, 69, 1251, 1259, 69, 1253, 1260, - 1254, 69, 1256, 1264, 1257, 69, 1255, 1261, 1258, 69, - 1267, 1269, 1262, 1268, 69, 2237, 1270, 1263, 1271, 69, - 1272, 69, 1276, 1259, 1275, 1277, 1260, 69, 69, 1284, - 1264, 69, 1273, 69, 69, 1274, 69, 1267, 1269, 1278, - 1268, 1279, 69, 1270, 1280, 1271, 69, 1272, 1281, 1282, - 69, 1275, 69, 69, 69, 69, 1284, 1283, 1285, 1273, + 70, 70, 1238, 1243, 1246, 70, 1241, 1235, 1244, 1242, + 70, 1247, 1248, 1251, 1239, 1250, 70, 1253, 1236, 1245, + 1249, 70, 70, 70, 1252, 70, 1237, 1254, 70, 1238, + 1243, 70, 1256, 1255, 1257, 1244, 70, 70, 1247, 1248, + 1261, 1239, 1250, 1258, 1265, 70, 70, 1249, 2287, 70, + 1259, 1252, 70, 70, 1254, 70, 70, 70, 1260, 70, + 1255, 1257, 1262, 1263, 1266, 70, 1264, 1261, 1268, 1270, + 1258, 70, 1267, 2287, 1273, 70, 70, 1259, 70, 70, + 70, 70, 1269, 1272, 1275, 1260, 1274, 1271, 70, 1262, + 1263, 1266, 1279, 1264, 70, 1268, 70, 70, 70, 1267, - 69, 69, 1274, 1286, 1288, 1289, 1278, 69, 1279, 1287, - 1297, 1280, 69, 1295, 1290, 1281, 1282, 1294, 1296, 1299, - 69, 1300, 69, 1316, 1283, 1285, 69, 69, 1291, 69, - 1286, 1288, 1289, 1302, 1292, 1301, 1287, 1293, 1298, 1303, - 69, 1290, 69, 69, 1294, 69, 69, 69, 1300, 1304, - 69, 69, 69, 1306, 69, 1291, 1305, 1309, 1310, 1307, - 1302, 1292, 1313, 1308, 1293, 1298, 1303, 69, 1314, 1311, - 69, 69, 69, 2237, 1312, 1322, 69, 69, 69, 69, - 1306, 69, 69, 1305, 1309, 1310, 1307, 1318, 1315, 1319, - 1308, 1317, 1324, 69, 69, 1314, 1311, 69, 69, 1320, + 70, 1273, 1278, 1276, 70, 70, 70, 1277, 1280, 1269, + 1272, 1275, 1283, 1274, 1271, 1281, 70, 1287, 1282, 1279, + 70, 1288, 1286, 70, 70, 1291, 1284, 1289, 70, 1278, + 1276, 1285, 1290, 70, 1277, 1280, 1299, 1293, 70, 1283, + 70, 2287, 1281, 1297, 70, 1282, 1292, 70, 70, 1286, + 1298, 70, 1291, 1284, 1289, 70, 2287, 70, 1285, 1290, + 1294, 70, 1295, 70, 1293, 1296, 1302, 1300, 70, 1301, + 1297, 1303, 2287, 1292, 70, 70, 1305, 1304, 1311, 1306, + 70, 70, 70, 70, 70, 1308, 1307, 1294, 70, 1295, + 1309, 70, 1296, 1302, 1300, 70, 1301, 1310, 1303, 1316, - 1321, 1312, 1322, 1323, 69, 1325, 1331, 69, 1327, 1328, - 69, 69, 1326, 69, 1318, 1315, 1319, 1332, 1317, 1324, - 1335, 69, 69, 1329, 69, 69, 1320, 1321, 69, 1330, - 1323, 1333, 69, 1331, 1334, 1327, 1328, 69, 69, 1326, - 1336, 69, 1337, 69, 1338, 1340, 69, 1335, 1339, 69, - 1329, 1341, 1343, 1342, 1345, 1344, 1330, 2237, 1333, 69, - 2237, 1334, 69, 69, 1346, 1347, 69, 69, 69, 1337, - 69, 69, 1340, 69, 1349, 1339, 1348, 69, 69, 1343, - 1342, 1345, 1344, 1350, 1351, 1356, 1352, 69, 1355, 69, - 1354, 1346, 1347, 1357, 69, 69, 1358, 69, 1367, 1353, + 70, 70, 1312, 1305, 1304, 1311, 1306, 1314, 70, 1317, + 1315, 70, 1308, 1307, 1318, 70, 1313, 1309, 1319, 1321, + 1322, 1320, 1323, 1324, 1310, 70, 1316, 2287, 70, 1312, + 70, 1326, 1325, 1327, 1314, 2287, 1329, 1315, 70, 1331, + 1328, 70, 1330, 1313, 70, 1332, 70, 70, 1320, 1323, + 70, 1339, 70, 70, 70, 70, 1333, 2287, 1326, 1325, + 70, 1336, 1334, 1329, 70, 70, 1331, 1328, 1335, 1330, + 70, 70, 1332, 1337, 1340, 1341, 70, 1338, 70, 1345, + 2287, 70, 2287, 1333, 70, 1342, 70, 1343, 1344, 1334, + 1346, 1347, 1348, 70, 70, 1335, 1350, 70, 70, 2287, - 69, 1349, 69, 1348, 69, 1361, 69, 1360, 1359, 1363, - 1350, 1351, 69, 1352, 69, 1355, 69, 1354, 1364, 1365, - 1362, 1366, 1369, 1358, 69, 69, 1353, 69, 1368, 1370, - 69, 1371, 69, 1373, 1360, 1359, 69, 1372, 69, 69, - 1374, 1376, 1375, 1383, 69, 1364, 69, 1362, 1366, 1387, - 2237, 1381, 69, 2237, 69, 1368, 1370, 69, 69, 1382, - 1373, 1391, 69, 69, 1372, 1388, 69, 69, 69, 1375, - 1377, 1378, 1379, 69, 1384, 69, 1387, 1380, 1381, 1385, - 1389, 69, 1390, 1394, 1386, 69, 1382, 1392, 1393, 69, - 69, 1395, 1388, 69, 69, 69, 69, 1377, 1378, 1379, + 1337, 1340, 1341, 70, 1338, 1351, 1345, 70, 1349, 70, + 70, 1352, 1342, 1355, 1343, 1344, 70, 1346, 1347, 70, + 70, 70, 1353, 1350, 1354, 1356, 70, 1357, 1359, 1358, + 70, 70, 1351, 1360, 1361, 1349, 70, 1362, 1352, 1364, + 70, 1367, 1366, 1365, 1363, 70, 2287, 2287, 70, 1353, + 70, 1354, 1356, 1371, 1357, 70, 1358, 70, 70, 70, + 1360, 70, 70, 1372, 1362, 1369, 70, 70, 1367, 1366, + 1365, 1363, 1368, 1370, 70, 70, 1373, 70, 1378, 1375, + 1371, 70, 70, 1374, 1376, 70, 1379, 1380, 1381, 1385, + 1372, 70, 1369, 2287, 1387, 70, 1383, 1377, 70, 1368, - 1397, 1384, 1396, 69, 1380, 69, 1398, 1389, 1400, 1390, - 1394, 69, 1399, 69, 1392, 1393, 1401, 69, 69, 1402, - 1404, 1406, 1403, 1413, 1405, 2237, 69, 1397, 69, 1396, - 1408, 69, 1407, 1398, 69, 1400, 69, 69, 1409, 1399, - 1412, 69, 1411, 69, 1410, 69, 1402, 69, 1406, 1403, - 69, 1405, 1415, 69, 1414, 69, 1416, 1408, 1417, 1407, - 1418, 69, 69, 2237, 69, 1409, 1420, 1412, 1421, 1411, - 1419, 1410, 69, 1428, 1422, 69, 1423, 1425, 1424, 1415, - 1427, 1414, 69, 2237, 69, 69, 69, 69, 69, 2237, - 69, 69, 69, 1420, 1429, 1421, 2237, 1419, 1426, 69, + 1370, 70, 70, 1373, 70, 1378, 1375, 1389, 1390, 1382, + 1374, 1376, 1384, 1379, 70, 70, 70, 1392, 1386, 70, + 70, 70, 1388, 1383, 1377, 70, 1391, 1393, 70, 1394, + 1395, 70, 2287, 1397, 70, 1390, 1382, 1398, 70, 1384, + 1396, 70, 70, 1399, 1392, 1386, 1400, 2287, 1405, 1388, + 1407, 2287, 2287, 1411, 1406, 70, 1394, 70, 70, 70, + 1397, 70, 70, 1409, 70, 1412, 70, 1396, 1410, 70, + 1399, 1416, 1401, 1402, 1403, 1405, 1408, 1413, 70, 1404, + 1411, 1406, 70, 70, 1414, 1415, 1419, 70, 1418, 70, + 70, 1425, 1412, 70, 70, 70, 70, 1421, 1416, 1401, - 1428, 1422, 69, 1423, 1425, 1424, 69, 1427, 1431, 1434, - 1430, 1432, 1433, 1435, 1437, 1436, 69, 69, 1440, 1443, - 69, 1429, 1441, 69, 1444, 1426, 69, 1445, 69, 1448, - 1451, 1442, 69, 69, 69, 1431, 1434, 1430, 1432, 1433, - 1435, 69, 1436, 1438, 69, 69, 1443, 1446, 1439, 1441, - 1449, 69, 1447, 1450, 69, 1453, 69, 1452, 1442, 69, - 1456, 69, 69, 1455, 1457, 69, 1454, 1458, 69, 69, - 1438, 1459, 69, 1460, 1462, 1439, 1461, 1449, 69, 69, - 1450, 69, 1453, 1463, 1452, 1465, 69, 1464, 1466, 1467, - 1455, 1457, 69, 1454, 69, 1469, 1470, 69, 1459, 69, + 1402, 1403, 1417, 1408, 1413, 1422, 1404, 1420, 70, 70, + 1424, 1414, 70, 70, 1423, 1418, 1427, 70, 70, 70, + 1426, 1428, 70, 70, 1421, 1430, 1431, 1429, 2287, 1417, + 1432, 70, 1422, 1433, 1420, 1435, 70, 1424, 70, 70, + 1437, 1423, 1436, 1427, 70, 70, 70, 1426, 70, 1434, + 70, 1438, 1430, 1431, 1429, 1439, 1440, 1432, 70, 70, + 1433, 1441, 1435, 1442, 70, 1443, 2287, 1444, 1447, 1436, + 1445, 1446, 70, 2287, 2287, 70, 1434, 70, 1438, 70, + 1448, 2287, 1439, 70, 1451, 70, 2287, 70, 70, 1453, + 70, 1449, 1443, 70, 1444, 1447, 1452, 1445, 1446, 1458, - 1460, 69, 69, 1461, 1468, 1471, 1472, 2237, 1475, 69, - 69, 69, 1473, 69, 1464, 1466, 1467, 69, 69, 1474, - 1476, 69, 1469, 1470, 1478, 69, 1477, 69, 1485, 69, - 1479, 1468, 1471, 1472, 69, 69, 1480, 69, 69, 1473, - 1481, 1483, 1482, 1484, 1490, 1486, 1474, 1476, 69, 69, - 69, 69, 1489, 1477, 69, 1487, 1491, 1479, 69, 1492, - 69, 69, 69, 1480, 69, 69, 1488, 1481, 1483, 1482, - 1484, 1490, 1486, 1493, 69, 1494, 1495, 1496, 1497, 1489, - 1498, 69, 1487, 1491, 69, 1499, 69, 69, 69, 69, - 1500, 1503, 1501, 1488, 1502, 2237, 1504, 1505, 69, 2237, + 70, 1450, 70, 1456, 70, 1454, 1455, 1448, 70, 1457, + 70, 1451, 70, 1459, 70, 70, 1453, 70, 1449, 1460, + 1461, 1464, 70, 1452, 2287, 1465, 1458, 1468, 1450, 1466, + 1456, 70, 1454, 1455, 70, 1469, 1457, 70, 1462, 2287, + 1459, 1472, 70, 1463, 1467, 1470, 1460, 70, 70, 1474, + 1471, 70, 1465, 1475, 70, 1477, 1466, 1473, 70, 70, + 1476, 1479, 70, 70, 70, 1462, 1478, 1480, 1482, 1481, + 1463, 1467, 2287, 70, 70, 70, 1474, 70, 70, 1483, + 1484, 70, 1477, 1485, 1473, 70, 1486, 1476, 1479, 1487, + 1488, 1489, 2287, 1478, 70, 2287, 1481, 70, 1490, 70, - 1493, 1507, 1494, 1495, 1538, 1497, 69, 1498, 1516, 69, - 69, 69, 1499, 2237, 69, 69, 69, 69, 1503, 1501, - 1506, 1502, 69, 1504, 1505, 1508, 69, 1509, 1507, 1510, - 69, 1511, 1512, 1515, 1514, 69, 69, 1517, 1519, 2237, - 69, 69, 69, 69, 1518, 1513, 69, 1506, 69, 1523, - 2237, 69, 1508, 69, 1509, 1520, 1510, 1522, 1511, 1512, - 1515, 1514, 69, 1521, 1517, 1519, 1524, 1525, 1526, 1527, - 69, 1518, 1513, 1528, 69, 69, 1523, 69, 1529, 69, - 1530, 1532, 1520, 1548, 1522, 1531, 69, 69, 69, 69, - 1521, 69, 1533, 1524, 1525, 1526, 1527, 1536, 69, 1534, + 70, 1492, 1491, 1493, 70, 1494, 1483, 1484, 2287, 70, + 1485, 1495, 1499, 70, 2287, 1501, 70, 1488, 1496, 70, + 1503, 70, 70, 70, 70, 1490, 1497, 70, 1492, 1491, + 1493, 1498, 1494, 70, 1500, 70, 1504, 70, 1495, 70, + 1502, 70, 1501, 70, 2287, 1496, 70, 70, 1505, 1507, + 1506, 1508, 70, 1497, 1510, 2287, 1511, 70, 1498, 70, + 1509, 1500, 70, 1504, 1514, 1517, 70, 1502, 1512, 70, + 1515, 1516, 1519, 70, 70, 1505, 1507, 1506, 1508, 1513, + 1520, 1521, 70, 1511, 70, 1518, 70, 1509, 70, 70, + 1522, 1514, 70, 70, 70, 1512, 70, 1515, 1516, 1519, - 1528, 1535, 1537, 69, 1540, 1529, 69, 69, 1532, 69, - 1539, 1541, 1531, 1544, 1542, 69, 1545, 69, 69, 1533, - 1543, 69, 69, 69, 1536, 1550, 1534, 1546, 1535, 1537, - 69, 1540, 69, 69, 1549, 2237, 1552, 1539, 1541, 69, - 69, 1542, 69, 1545, 1547, 1551, 1554, 1543, 1553, 1555, - 69, 69, 1550, 1556, 1546, 1558, 69, 2237, 2237, 1557, - 69, 1549, 69, 1552, 69, 69, 1559, 1561, 1560, 1562, - 1564, 1547, 1551, 1554, 69, 1553, 1555, 69, 69, 1565, - 1556, 1566, 69, 69, 69, 1563, 1557, 1572, 69, 69, - 1567, 69, 69, 1559, 1561, 1560, 1562, 1564, 1569, 69, + 70, 1523, 2287, 1525, 1524, 1526, 1513, 1520, 1528, 2287, + 1529, 2287, 1518, 70, 1527, 70, 1531, 1522, 1532, 1539, + 1530, 2287, 70, 2287, 70, 1533, 70, 70, 1523, 70, + 70, 1524, 1526, 70, 70, 1528, 70, 1529, 70, 1534, + 70, 1527, 1537, 1531, 1536, 1532, 1539, 1530, 1535, 70, + 1540, 1541, 1533, 1542, 70, 1538, 70, 1543, 2287, 1544, + 1548, 1546, 70, 70, 70, 70, 1534, 1545, 70, 1537, + 1547, 1536, 1549, 1550, 1555, 1535, 1551, 1540, 70, 1553, + 1542, 70, 1538, 70, 1543, 70, 1544, 1548, 1546, 70, + 1552, 1557, 70, 1559, 1545, 70, 70, 1547, 1554, 1549, - 1571, 1570, 69, 1568, 1573, 69, 1565, 1575, 1566, 1577, - 1576, 69, 1563, 69, 1572, 1574, 1578, 1567, 69, 69, - 1582, 1579, 1584, 1588, 1580, 1569, 1589, 1571, 1570, 1581, - 1568, 69, 69, 69, 69, 69, 1577, 1576, 69, 69, - 1585, 69, 1574, 1578, 1583, 1593, 1590, 1582, 1579, 69, - 1588, 69, 1592, 69, 1586, 1591, 69, 1595, 1594, 2237, - 1597, 69, 1598, 2237, 1596, 1587, 69, 1585, 1600, 69, - 69, 1583, 69, 1590, 1599, 1606, 69, 69, 2237, 1592, - 69, 1586, 1591, 69, 69, 1594, 69, 1597, 1602, 1598, - 69, 1596, 1587, 1601, 1603, 1600, 1604, 69, 1605, 1607, + 1550, 70, 1558, 1551, 70, 1561, 1553, 2287, 70, 1556, + 70, 70, 1560, 70, 70, 70, 1562, 1552, 1557, 1563, + 1559, 1565, 1564, 70, 1573, 1554, 1566, 70, 1568, 1558, + 1567, 1569, 1561, 1570, 70, 70, 1556, 2287, 70, 1560, + 1571, 70, 1574, 1562, 70, 70, 1575, 1572, 1565, 1564, + 1576, 70, 70, 1566, 70, 1568, 70, 1567, 70, 70, + 1570, 1577, 2287, 1578, 70, 70, 2287, 1571, 2287, 1574, + 1581, 70, 1583, 1575, 1572, 1579, 1582, 1576, 1580, 1585, + 1584, 2287, 70, 2287, 1589, 2287, 1586, 70, 1577, 70, + 1578, 70, 1587, 70, 70, 70, 1588, 1581, 70, 70, - 69, 1599, 69, 1610, 69, 69, 1608, 1609, 1613, 69, - 1614, 1611, 69, 69, 1620, 1602, 69, 2237, 69, 69, - 1601, 1603, 69, 1604, 1612, 1605, 1607, 1617, 1615, 69, - 1610, 1619, 69, 1608, 1609, 1613, 69, 1614, 1611, 1616, - 1618, 69, 69, 69, 1621, 69, 69, 1622, 1626, 1623, - 1624, 1612, 1625, 1627, 1617, 1615, 1629, 1628, 1619, 1630, - 2237, 69, 69, 2237, 69, 1633, 1616, 1618, 69, 69, - 69, 1621, 1634, 1635, 1622, 69, 1623, 1624, 69, 1625, - 69, 1636, 1637, 1629, 1628, 69, 1630, 1631, 69, 69, - 1632, 1638, 69, 1639, 69, 69, 1640, 1642, 1643, 1634, + 1590, 1591, 1579, 1582, 1592, 1580, 1585, 1584, 70, 70, + 70, 1589, 70, 1586, 70, 1594, 1597, 1593, 1595, 1587, + 1596, 1598, 70, 1588, 1600, 70, 1602, 1590, 1591, 1601, + 70, 1592, 1599, 1603, 70, 1605, 70, 70, 1604, 1607, + 1606, 1609, 1594, 1597, 1593, 1595, 1613, 1596, 70, 70, + 70, 70, 70, 1602, 1608, 70, 1601, 1610, 70, 1599, + 1603, 70, 1614, 1616, 70, 1604, 1607, 70, 70, 1615, + 1617, 1611, 1618, 1613, 1620, 2287, 1622, 2287, 70, 70, + 1619, 1608, 1612, 70, 1610, 1623, 1621, 1624, 2287, 70, + 1616, 1625, 70, 70, 1626, 70, 1615, 1617, 1611, 70, - 1635, 1644, 1641, 1645, 1647, 69, 69, 69, 1636, 1637, - 69, 1648, 69, 1646, 1631, 1649, 1651, 1632, 1638, 1650, - 69, 1654, 1657, 69, 69, 1643, 69, 69, 69, 1641, - 69, 1647, 1652, 69, 1653, 2237, 1655, 1661, 1648, 1658, - 1646, 69, 69, 69, 1659, 69, 1650, 69, 1654, 69, - 1660, 1656, 2237, 1662, 1666, 69, 69, 1668, 69, 1652, - 69, 1653, 69, 1655, 69, 1663, 1658, 1664, 1665, 69, - 1670, 1659, 1671, 69, 1667, 1673, 1669, 1660, 1656, 69, - 1662, 69, 69, 69, 69, 1672, 2237, 1676, 1674, 1675, - 69, 69, 1663, 69, 1664, 1665, 1677, 1670, 69, 1671, + 1629, 70, 70, 1622, 70, 1628, 1632, 1619, 70, 1612, + 70, 1627, 1623, 1621, 1624, 70, 70, 70, 1625, 1630, + 1631, 1626, 70, 1634, 2287, 1633, 1637, 1629, 70, 1635, + 1646, 70, 1628, 70, 70, 70, 1636, 70, 1627, 1639, + 2287, 1638, 1640, 70, 1643, 70, 1630, 1631, 70, 70, + 1634, 70, 1633, 1637, 1641, 1642, 1635, 70, 1644, 70, + 1645, 70, 70, 1636, 70, 1647, 1639, 1649, 1638, 1640, + 1648, 1643, 70, 1651, 1650, 1652, 1653, 1655, 1654, 1659, + 70, 1641, 1642, 1656, 70, 1644, 1660, 1645, 70, 70, + 70, 70, 1647, 1657, 1649, 1661, 1658, 1648, 1665, 70, - 1679, 1667, 1673, 1669, 69, 1678, 69, 1680, 1681, 69, - 1682, 69, 1672, 69, 1676, 1674, 1675, 1687, 1683, 69, - 1684, 1685, 69, 1677, 1690, 1692, 1689, 1679, 1686, 69, - 69, 1688, 1678, 69, 1680, 1681, 69, 1682, 69, 69, - 1691, 69, 69, 2237, 1693, 1683, 1698, 1684, 1685, 69, - 1697, 1690, 1694, 1689, 69, 1686, 1703, 69, 1688, 1699, - 1701, 1695, 69, 1696, 69, 1700, 69, 1691, 69, 1702, - 69, 1693, 69, 1698, 69, 1704, 69, 1697, 1705, 1694, - 69, 1707, 1708, 1703, 69, 69, 1699, 1701, 1695, 1706, - 1696, 1709, 1700, 1710, 1711, 1714, 1702, 69, 2237, 1712, + 1651, 1650, 70, 70, 1655, 1654, 70, 1662, 70, 70, + 1656, 70, 1663, 1660, 70, 1664, 1666, 70, 1667, 70, + 1657, 1668, 1661, 1658, 1669, 70, 70, 1670, 1671, 1673, + 70, 1672, 1675, 70, 1662, 1674, 1677, 70, 1676, 1663, + 1678, 2287, 1664, 70, 70, 1667, 70, 1679, 70, 70, + 1683, 1669, 1680, 1684, 70, 70, 1673, 70, 1672, 70, + 1681, 70, 1674, 70, 1686, 1676, 1685, 1678, 70, 1687, + 1690, 1691, 70, 1692, 1679, 1682, 70, 70, 70, 1680, + 1684, 1688, 70, 1694, 1693, 1689, 70, 1681, 70, 70, + 1698, 1686, 70, 1685, 70, 1696, 70, 1690, 1691, 1695, - 2237, 1713, 1704, 1716, 69, 1705, 1715, 1719, 69, 69, - 69, 69, 69, 69, 1717, 1718, 1706, 1720, 1709, 69, - 1725, 69, 1714, 1721, 1724, 69, 1712, 69, 1713, 1722, - 1716, 69, 1723, 1715, 1719, 1727, 69, 69, 69, 69, - 69, 1717, 1718, 69, 69, 69, 1726, 1725, 1728, 1729, - 1721, 1724, 1730, 69, 1731, 1732, 1722, 69, 1733, 1723, - 1735, 69, 1727, 1742, 1734, 69, 1737, 1739, 69, 2237, - 69, 1736, 1738, 1726, 1740, 1744, 1729, 69, 1746, 1730, - 69, 1731, 1732, 69, 69, 69, 1741, 1735, 1743, 1745, - 69, 1734, 69, 1737, 1739, 69, 69, 1747, 1736, 1738, + 70, 1699, 1682, 1697, 70, 2287, 70, 1700, 1688, 1701, + 70, 1693, 1689, 1702, 1713, 70, 70, 1698, 1703, 70, + 70, 1705, 1696, 1704, 70, 1706, 1695, 70, 1699, 1707, + 1697, 1708, 70, 2287, 1700, 70, 1701, 70, 1714, 1709, + 1702, 1710, 1711, 70, 2287, 1703, 70, 70, 1705, 1712, + 1704, 70, 1706, 1716, 1718, 1717, 1707, 70, 1708, 70, + 70, 70, 70, 1715, 1733, 1714, 1709, 1719, 1710, 1711, + 70, 70, 1721, 1723, 1722, 1720, 1712, 1724, 1726, 70, + 1716, 70, 1717, 1725, 1727, 70, 70, 1730, 1728, 70, + 1715, 70, 1729, 70, 1719, 70, 70, 1732, 70, 1721, - 69, 1740, 69, 69, 1748, 69, 69, 69, 1749, 69, - 1750, 1751, 1752, 1741, 1753, 1743, 1745, 2237, 1754, 1757, - 1755, 1756, 1761, 1759, 1747, 69, 69, 69, 1764, 69, - 69, 1748, 1765, 1760, 1758, 1749, 1766, 69, 69, 1772, - 69, 1753, 1768, 69, 69, 1754, 1757, 1755, 1756, 69, - 69, 69, 1763, 1762, 69, 69, 1767, 1769, 69, 1765, - 1760, 1758, 69, 69, 69, 1771, 69, 69, 1770, 1768, - 69, 1773, 1774, 1775, 2237, 1777, 1776, 2237, 69, 1763, - 1762, 69, 1778, 1767, 1769, 69, 1780, 69, 69, 1779, - 1781, 1784, 1771, 1782, 1785, 1770, 2237, 69, 69, 69, + 1723, 1722, 1720, 70, 1724, 1726, 1731, 1734, 1735, 70, + 1725, 1727, 70, 70, 1730, 1728, 70, 1736, 1737, 1729, + 1738, 1741, 2287, 2287, 1732, 1739, 2287, 1740, 1742, 1743, + 70, 1744, 1747, 1731, 70, 1735, 70, 70, 70, 1745, + 1746, 70, 1755, 1748, 1749, 2287, 2287, 70, 1741, 70, + 70, 70, 1739, 70, 1740, 1742, 1743, 70, 1744, 70, + 1751, 1750, 70, 1752, 70, 70, 1745, 1746, 70, 1753, + 1748, 1749, 1754, 70, 70, 1757, 70, 1756, 1758, 1759, + 1760, 1761, 1762, 1769, 70, 2287, 70, 1751, 1750, 70, + 1752, 1764, 1765, 2287, 70, 1767, 1753, 1763, 70, 1754, - 1775, 69, 1777, 1776, 69, 69, 69, 1783, 1788, 1778, - 1786, 69, 69, 1780, 69, 69, 1779, 1781, 69, 1787, - 1782, 1785, 69, 1790, 1789, 1792, 69, 69, 1791, 1793, - 2237, 1800, 1801, 1796, 1783, 1788, 69, 1786, 69, 1794, - 1797, 1795, 1798, 69, 69, 69, 1787, 1802, 1799, 1804, - 1790, 1789, 1792, 69, 69, 1791, 1793, 69, 69, 69, - 1796, 1813, 1803, 1809, 69, 69, 1794, 1797, 1795, 1798, - 69, 69, 1805, 69, 1802, 1799, 1804, 1806, 1807, 69, - 1808, 69, 1812, 69, 1810, 1811, 69, 69, 69, 1803, - 1809, 69, 1814, 1815, 69, 1816, 2237, 1818, 2237, 1805, + 70, 70, 1757, 1768, 1756, 1758, 1759, 70, 1761, 1762, + 70, 1771, 70, 1766, 70, 70, 70, 70, 1764, 1765, + 1770, 70, 1767, 1772, 1763, 1773, 70, 1774, 1777, 1775, + 1768, 1776, 1778, 1779, 1780, 70, 70, 1781, 70, 1782, + 1766, 70, 1786, 1788, 70, 1783, 1791, 1770, 70, 1784, + 1772, 70, 70, 70, 1774, 70, 1775, 70, 1776, 70, + 70, 1780, 1785, 1787, 1781, 70, 1782, 70, 1790, 70, + 1789, 1793, 1783, 70, 1792, 70, 1784, 70, 1795, 70, + 70, 70, 1794, 1796, 1798, 1799, 1797, 1800, 1801, 1785, + 1787, 1804, 1802, 1803, 2287, 1790, 70, 1789, 70, 70, - 1824, 1817, 69, 1822, 1806, 1807, 69, 1808, 69, 1812, - 69, 1810, 1811, 69, 1819, 69, 1820, 1821, 1823, 1814, - 1815, 1826, 1816, 69, 1818, 69, 1825, 69, 1817, 1827, - 69, 2237, 69, 69, 1832, 69, 1828, 69, 1831, 1829, - 1830, 1819, 1833, 1820, 1821, 69, 69, 69, 1826, 1834, - 1835, 1842, 1837, 1825, 1836, 2237, 1827, 1838, 69, 69, - 69, 1832, 69, 1828, 69, 1831, 1829, 1830, 1840, 69, - 69, 1843, 1839, 1841, 69, 69, 1834, 69, 69, 1837, - 69, 1836, 1844, 69, 1838, 1845, 1849, 1846, 1848, 1847, - 1850, 69, 1851, 1852, 1853, 1840, 1854, 69, 1843, 1839, + 70, 1792, 70, 70, 70, 1795, 70, 70, 1805, 1794, + 1796, 1798, 70, 1797, 70, 70, 1806, 70, 1804, 1802, + 1803, 1807, 1808, 70, 1809, 1810, 1811, 1812, 1813, 70, + 1815, 70, 70, 1814, 1817, 1805, 1816, 70, 1818, 70, + 70, 70, 2287, 1806, 70, 70, 70, 70, 1807, 1808, + 1819, 1809, 1810, 70, 1812, 1813, 1823, 1815, 1820, 1824, + 1814, 1817, 1825, 1816, 70, 1818, 1821, 70, 70, 1822, + 1826, 70, 70, 70, 1827, 1828, 2287, 1819, 1829, 1830, + 70, 1834, 1831, 1823, 70, 1820, 1824, 1832, 70, 1825, + 70, 1840, 70, 1821, 1835, 70, 1822, 1826, 70, 70, - 1841, 69, 69, 1855, 69, 1856, 2237, 1857, 1860, 1844, - 69, 69, 69, 69, 1846, 1848, 1847, 1850, 1861, 69, - 69, 1853, 1858, 69, 1859, 69, 69, 69, 1862, 1864, - 1855, 1863, 69, 69, 1857, 1860, 1866, 69, 69, 2237, - 69, 69, 1865, 1867, 1868, 1861, 1870, 1869, 69, 1858, - 1871, 1859, 1872, 69, 1873, 1862, 1864, 1874, 1863, 69, - 1875, 69, 2237, 1866, 1876, 69, 69, 1879, 1877, 1865, - 1867, 1868, 69, 69, 1869, 1878, 69, 69, 1880, 1872, - 69, 1873, 69, 1882, 1881, 1884, 1885, 1875, 1883, 69, - 69, 1876, 1887, 1886, 69, 1877, 1889, 69, 69, 1888, + 1833, 70, 70, 1836, 70, 1829, 1830, 70, 1834, 1831, + 70, 1837, 1838, 1839, 1832, 1841, 1842, 70, 1840, 70, + 1848, 1835, 70, 1843, 1844, 1845, 1846, 1833, 1850, 70, + 1836, 70, 70, 1849, 70, 70, 1847, 70, 1837, 1838, + 1839, 70, 70, 1842, 70, 70, 1851, 1848, 1852, 1853, + 1843, 1844, 1845, 1846, 1854, 70, 1855, 1856, 70, 1861, + 1849, 1857, 1858, 1847, 70, 1859, 70, 1863, 70, 70, + 1860, 1862, 1865, 70, 1864, 2287, 1853, 1870, 1866, 70, + 70, 1854, 70, 1855, 1856, 70, 70, 70, 1857, 1858, + 70, 1869, 1859, 1873, 70, 70, 70, 1860, 1862, 1865, - 2237, 2237, 1878, 1890, 2237, 69, 1891, 69, 69, 1892, - 1893, 1881, 1884, 1894, 69, 69, 69, 69, 69, 1887, - 1886, 1899, 69, 1889, 69, 1896, 1888, 1897, 69, 1895, - 1890, 1898, 1900, 1891, 69, 69, 1892, 1893, 69, 69, - 1894, 1904, 1906, 1901, 1908, 69, 1902, 69, 1899, 69, - 69, 69, 1896, 69, 1897, 1903, 1895, 1905, 1898, 1900, - 69, 1914, 1907, 69, 1909, 69, 1910, 1912, 69, 1906, - 1901, 69, 69, 1902, 69, 1913, 1911, 1915, 69, 1916, - 2237, 1917, 1903, 69, 1905, 1920, 1918, 1919, 69, 1907, - 69, 1909, 1922, 1910, 1912, 1923, 69, 1921, 69, 69, + 1867, 1864, 1868, 1872, 70, 1866, 2287, 1871, 70, 70, + 1874, 1875, 70, 1876, 1877, 70, 1879, 1878, 1869, 70, + 70, 1880, 1882, 70, 1881, 1883, 1884, 1867, 1885, 1868, + 1872, 70, 70, 70, 1871, 2287, 70, 1874, 1875, 1888, + 1876, 70, 1887, 70, 1878, 1886, 1889, 70, 70, 70, + 70, 1881, 1883, 70, 70, 1885, 70, 70, 1890, 1891, + 1893, 1895, 1892, 1894, 1897, 1898, 1888, 1899, 70, 1887, + 70, 70, 1886, 1889, 1896, 70, 70, 1900, 1901, 70, + 1902, 70, 1904, 70, 1903, 1890, 1891, 1893, 1895, 1892, + 1894, 1897, 70, 1906, 70, 1905, 70, 70, 1907, 1908, - 69, 69, 1926, 1911, 1915, 1927, 1916, 69, 1917, 69, - 69, 1928, 1920, 1918, 1919, 1929, 1924, 1931, 69, 1922, - 1925, 1932, 69, 69, 1921, 1930, 1935, 69, 69, 1926, - 1933, 2237, 69, 1934, 1936, 69, 1937, 1940, 1928, 69, - 1938, 69, 69, 1924, 69, 1939, 69, 1925, 69, 1941, - 1942, 69, 1930, 1943, 1944, 69, 1945, 1933, 69, 69, - 1934, 69, 1946, 1937, 1940, 1948, 1947, 69, 1949, 1950, - 69, 1955, 69, 1954, 2237, 1951, 1941, 69, 69, 1952, - 1943, 1944, 69, 69, 69, 1957, 69, 1953, 69, 1946, - 69, 1956, 1948, 1947, 69, 1949, 1950, 69, 69, 69, + 70, 1896, 1909, 1914, 1900, 1901, 70, 70, 70, 1904, + 1912, 1903, 70, 1910, 1913, 70, 70, 1915, 1911, 1918, + 1906, 1916, 1905, 1921, 1917, 70, 70, 1920, 1919, 1909, + 2287, 70, 70, 1922, 1923, 70, 70, 1912, 70, 2287, + 70, 1913, 70, 70, 1915, 70, 1918, 70, 1916, 70, + 1921, 1917, 1925, 1924, 1920, 1919, 70, 70, 1926, 1927, + 1922, 1923, 70, 1928, 1929, 1930, 70, 1931, 1933, 1935, + 1932, 1937, 1936, 70, 70, 1934, 70, 70, 70, 1925, + 1924, 1941, 70, 70, 70, 1926, 1927, 70, 1939, 70, + 1928, 1929, 1930, 1938, 1931, 70, 1935, 1932, 70, 1936, - 1954, 1958, 1951, 1959, 69, 1960, 1952, 1961, 1962, 69, - 2237, 2237, 1957, 1964, 1953, 1963, 1965, 69, 1956, 69, - 69, 1966, 1969, 1970, 2237, 1972, 1973, 1971, 1958, 69, - 1959, 69, 1960, 69, 1961, 1962, 69, 69, 1967, 69, - 1964, 1974, 1963, 1965, 1968, 69, 69, 69, 1966, 69, - 1970, 69, 69, 1973, 1971, 1975, 1976, 1977, 1978, 1982, - 1980, 1981, 1984, 1979, 1983, 1967, 69, 1986, 69, 2237, - 2237, 1968, 2237, 69, 69, 1985, 69, 69, 69, 1987, - 1988, 1991, 1975, 1976, 1977, 69, 69, 1980, 1981, 1984, - 1979, 69, 1992, 69, 69, 69, 1989, 69, 69, 1990, + 70, 70, 1934, 1940, 70, 1942, 1943, 1944, 1941, 1945, + 70, 1946, 1948, 1947, 1952, 1939, 1950, 2287, 1951, 1949, + 1938, 1956, 2287, 2287, 1955, 2287, 70, 70, 70, 70, + 1940, 70, 70, 70, 1944, 70, 1945, 70, 1946, 1948, + 1947, 70, 1953, 1950, 70, 1951, 1949, 1954, 70, 70, + 70, 1955, 1957, 1958, 70, 1959, 1960, 1961, 1962, 1963, + 1964, 1965, 1969, 1967, 1966, 1971, 70, 70, 1968, 1953, + 2287, 1974, 70, 1970, 1954, 1972, 70, 70, 1973, 1957, + 70, 70, 1959, 70, 70, 1962, 1963, 70, 70, 1969, + 1975, 1966, 70, 2287, 70, 70, 1976, 70, 70, 1981, - 2237, 1997, 1985, 69, 1993, 1994, 1987, 1988, 1991, 1995, - 1999, 1998, 1996, 2000, 69, 2237, 2002, 69, 69, 1992, - 2001, 69, 69, 1989, 2003, 2004, 1990, 69, 69, 69, - 2008, 1993, 1994, 2006, 2010, 69, 1995, 1999, 1998, 1996, - 2000, 2007, 69, 2005, 2013, 2011, 69, 2001, 69, 69, - 69, 2003, 69, 69, 2009, 69, 69, 2012, 2016, 2014, - 2006, 69, 69, 2017, 2015, 2022, 2020, 2018, 2007, 69, - 2005, 69, 2011, 69, 69, 69, 69, 2019, 2021, 69, - 2024, 2009, 2025, 2027, 2012, 2016, 2014, 69, 69, 2023, - 2017, 2015, 69, 2020, 2018, 2026, 69, 69, 2029, 2030, + 1970, 70, 1972, 1978, 1977, 1973, 70, 1982, 1979, 1980, + 1985, 1984, 70, 1987, 2287, 1983, 70, 1975, 70, 1989, + 70, 70, 70, 1976, 70, 1986, 1981, 70, 1990, 1993, + 1978, 1977, 70, 70, 1982, 1979, 1980, 70, 1984, 1988, + 1987, 1991, 1983, 1994, 1996, 70, 1989, 70, 1992, 1999, + 70, 70, 1986, 1997, 70, 1990, 1993, 1995, 70, 70, + 70, 2000, 70, 2002, 2001, 1998, 1988, 70, 1991, 2003, + 1994, 1996, 70, 70, 2004, 1992, 70, 2005, 2007, 2006, + 1997, 2008, 2287, 2011, 1995, 70, 2009, 70, 2000, 70, + 70, 2001, 1998, 2010, 2015, 70, 2003, 70, 2012, 70, - 2028, 69, 2034, 2237, 2019, 2021, 2031, 69, 2032, 69, - 69, 69, 69, 69, 2036, 2033, 2023, 2035, 2037, 69, - 69, 2038, 2026, 69, 2040, 2029, 69, 2028, 69, 2034, - 69, 2039, 69, 2031, 2043, 2032, 2042, 2041, 2044, 2048, - 2045, 2036, 2033, 69, 2035, 69, 2049, 2047, 69, 69, - 2051, 2040, 69, 2046, 69, 2050, 2052, 2054, 2039, 69, - 2057, 69, 69, 2042, 2041, 2044, 69, 2045, 69, 2058, - 2060, 69, 2061, 69, 2047, 2062, 2053, 2051, 69, 69, - 2046, 2064, 2050, 2052, 69, 2055, 2056, 69, 69, 69, - 2059, 2065, 2063, 2066, 69, 69, 69, 69, 69, 2061, + 2014, 70, 2016, 2013, 2005, 2007, 2006, 2017, 70, 70, + 2011, 70, 70, 2009, 70, 2019, 2018, 70, 2020, 2021, + 2010, 2015, 2022, 2287, 2027, 70, 2023, 2014, 2024, 70, + 70, 70, 2025, 70, 2017, 2026, 2028, 2032, 2034, 2031, + 2029, 70, 2019, 2018, 70, 2020, 2021, 70, 70, 2022, + 70, 70, 2030, 2023, 70, 2024, 2033, 2039, 70, 2025, + 70, 70, 2026, 2028, 2035, 70, 2031, 2029, 2036, 70, + 2037, 2038, 2041, 70, 70, 2040, 2042, 70, 70, 2030, + 70, 2043, 2044, 2033, 70, 2048, 2045, 2046, 2047, 70, + 2053, 2035, 70, 70, 2051, 2036, 70, 2037, 2038, 70, - 2067, 2068, 2062, 2053, 2070, 2237, 2071, 2069, 69, 69, - 2072, 2073, 2055, 2056, 69, 69, 2074, 2059, 69, 2063, - 69, 2075, 69, 69, 69, 2076, 2079, 2067, 69, 2077, - 2080, 2070, 69, 2071, 2069, 2237, 2078, 69, 2073, 69, - 2081, 2087, 2084, 2074, 2085, 69, 2237, 2082, 2075, 69, - 2237, 69, 69, 2079, 69, 2086, 2077, 69, 2083, 69, - 69, 2089, 69, 2078, 69, 69, 2088, 2081, 2087, 2084, - 69, 2085, 2090, 69, 2082, 2093, 69, 2091, 2092, 2094, - 2096, 69, 2086, 69, 2095, 2083, 2097, 69, 2089, 2098, - 2099, 69, 2100, 2088, 2101, 2102, 2237, 2103, 2104, 2090, + 70, 2050, 2040, 2042, 2052, 70, 70, 2055, 2043, 70, + 70, 2049, 2048, 2045, 2046, 2047, 70, 70, 2054, 70, + 70, 2051, 2056, 2057, 2058, 2059, 70, 2287, 2050, 70, + 2061, 2052, 2060, 2062, 70, 2063, 70, 2065, 2049, 70, + 70, 2067, 2068, 2066, 2069, 2054, 70, 2064, 2070, 70, + 2057, 70, 2059, 2071, 70, 70, 70, 70, 2072, 2060, + 2062, 70, 2063, 70, 2065, 2073, 70, 2074, 2067, 70, + 2066, 70, 70, 70, 2064, 2070, 2075, 2079, 2076, 2078, + 2071, 2077, 2287, 2080, 2086, 2072, 70, 2081, 2082, 2287, + 2083, 2084, 2073, 2085, 70, 2287, 70, 70, 2089, 2090, - 2105, 69, 2093, 2107, 2091, 2092, 2094, 69, 2106, 69, - 2109, 2095, 69, 69, 2108, 2111, 2098, 69, 2112, 69, - 69, 69, 69, 69, 2103, 69, 2113, 2105, 2114, 2110, - 69, 2115, 2116, 69, 69, 2106, 2117, 2109, 69, 2119, - 2237, 2108, 2111, 69, 69, 2112, 2118, 2121, 69, 2122, - 2124, 69, 2123, 69, 69, 69, 2110, 2125, 2115, 2116, - 69, 2120, 2126, 69, 2127, 2128, 2119, 69, 2129, 69, - 2130, 69, 2131, 2118, 2121, 2132, 2122, 69, 2133, 2123, - 2135, 2134, 2137, 2138, 69, 2136, 69, 2139, 2120, 69, - 69, 69, 69, 69, 69, 2129, 2140, 69, 2144, 69, + 70, 70, 2092, 2075, 70, 2076, 2078, 2096, 2077, 70, + 70, 70, 70, 70, 2081, 2082, 70, 2083, 2084, 2091, + 2085, 2087, 2088, 2093, 2094, 70, 70, 70, 2097, 70, + 2095, 70, 2098, 2100, 70, 2101, 2099, 70, 2103, 2102, + 2104, 2105, 2287, 70, 70, 70, 2091, 2108, 2087, 2088, + 2093, 2094, 70, 2107, 70, 70, 2109, 2095, 70, 70, + 70, 2112, 2101, 2099, 70, 2103, 2102, 70, 2105, 2106, + 2111, 70, 2110, 2113, 70, 2114, 70, 2115, 70, 2116, + 2107, 2287, 70, 2109, 70, 70, 2118, 2120, 70, 70, + 2117, 2119, 2287, 2287, 70, 70, 2106, 2111, 2123, 2110, - 69, 2142, 2132, 2141, 69, 2133, 69, 69, 2134, 2137, - 69, 69, 2136, 2143, 2139, 69, 2145, 2148, 69, 2146, - 2147, 69, 69, 2140, 69, 2144, 69, 2150, 2142, 2149, - 2141, 2157, 2237, 69, 2151, 2154, 2237, 69, 2153, 69, - 2143, 69, 69, 2145, 2148, 69, 2146, 2147, 2152, 69, - 2158, 2155, 2156, 2159, 2150, 2160, 2149, 69, 69, 69, - 2161, 2151, 2154, 69, 2162, 2153, 2163, 2164, 69, 69, - 2166, 2165, 2167, 2168, 2172, 2152, 2173, 2158, 2155, 2156, - 69, 69, 2160, 69, 2169, 69, 69, 69, 69, 2171, - 2174, 2162, 2170, 2163, 2164, 2175, 69, 69, 2165, 2167, + 2113, 70, 2114, 2122, 2115, 70, 2116, 70, 2121, 70, + 70, 2127, 70, 2118, 2120, 70, 2126, 2117, 2119, 2124, + 2125, 2128, 70, 2129, 2130, 2123, 2131, 2132, 70, 70, + 2122, 2133, 2136, 70, 2137, 2121, 2134, 2135, 2127, 2287, + 2140, 2287, 2287, 2126, 2141, 2287, 2124, 2125, 2128, 70, + 70, 70, 2144, 2131, 70, 70, 2139, 2138, 70, 2136, + 2142, 70, 2145, 2146, 70, 70, 70, 70, 2143, 70, + 70, 2141, 70, 2147, 2148, 2149, 2150, 70, 2151, 2144, + 2152, 2153, 70, 2139, 2138, 2154, 70, 2142, 70, 2145, + 70, 70, 2155, 70, 2156, 2143, 2157, 70, 2158, 2159, - 69, 69, 69, 69, 2176, 2177, 69, 2178, 69, 69, - 2180, 2169, 69, 2179, 2181, 2182, 2171, 2174, 69, 2170, - 2237, 69, 2175, 69, 69, 2183, 2184, 2185, 69, 2186, - 69, 2176, 2177, 2187, 2178, 69, 2188, 2180, 2237, 2189, - 2179, 2181, 2182, 2190, 2193, 2192, 2197, 69, 69, 2191, - 2237, 2237, 2183, 2184, 2185, 2194, 69, 69, 69, 69, - 2187, 69, 2200, 2188, 2195, 69, 2189, 2237, 2204, 2199, - 2190, 69, 69, 2196, 2237, 69, 2191, 69, 69, 2198, - 2201, 69, 2194, 69, 69, 2202, 2205, 69, 69, 2200, - 2203, 2195, 2207, 69, 69, 2204, 2199, 2206, 2237, 2208, + 70, 2148, 2149, 70, 70, 2160, 2161, 2152, 2153, 2162, + 70, 2163, 2154, 2164, 70, 2165, 70, 2167, 2168, 2155, + 2166, 2156, 2169, 2157, 2171, 70, 70, 2173, 2170, 70, + 70, 2287, 70, 70, 2172, 70, 70, 70, 2163, 2174, + 70, 2175, 70, 70, 2167, 2168, 2176, 2166, 70, 70, + 2179, 2171, 70, 2177, 70, 2170, 2178, 2182, 70, 70, + 2287, 2172, 70, 70, 2180, 2181, 2174, 70, 2175, 2184, + 70, 2183, 70, 2176, 70, 70, 2185, 2179, 2187, 2186, + 2177, 2188, 2191, 2178, 2182, 70, 70, 70, 2189, 2193, + 70, 2180, 2181, 70, 70, 2190, 2184, 70, 2183, 70, - 2196, 2209, 2210, 2211, 69, 69, 2198, 2201, 69, 2212, - 2216, 69, 2202, 2205, 2213, 2214, 2237, 2203, 69, 2207, - 2237, 2218, 69, 69, 2206, 69, 2208, 2219, 2209, 2210, - 2211, 2215, 69, 2222, 69, 69, 69, 2216, 2217, 69, - 2225, 2213, 2214, 69, 2220, 2221, 69, 2223, 2218, 69, - 2226, 2228, 69, 69, 2219, 69, 2224, 2229, 2215, 69, - 2222, 2227, 2230, 2231, 69, 2217, 69, 2225, 2233, 2232, - 2235, 2220, 2221, 2236, 2223, 2237, 69, 69, 69, 2234, - 2237, 69, 69, 2224, 69, 69, 2237, 69, 2227, 2230, - 2231, 69, 2237, 2237, 2237, 2233, 2232, 69, 2237, 2237, + 2192, 2194, 70, 2185, 2195, 2187, 2186, 70, 2188, 2191, + 2196, 2197, 2199, 2200, 2203, 2189, 70, 2198, 2201, 70, + 70, 2202, 2190, 2205, 2287, 2210, 2287, 2192, 2194, 2204, + 2211, 70, 2208, 70, 70, 70, 70, 2196, 70, 2199, + 2200, 70, 70, 2206, 2198, 2201, 70, 2213, 2202, 2207, + 70, 70, 2209, 2212, 2215, 70, 2204, 70, 70, 2208, + 70, 70, 70, 2214, 2216, 2218, 70, 70, 2219, 2220, + 2206, 70, 2217, 70, 2213, 2222, 2207, 2221, 2223, 2209, + 2212, 2215, 70, 70, 2225, 70, 2226, 70, 2227, 2232, + 2214, 2216, 2218, 2224, 70, 2219, 2220, 70, 2287, 2217, - 69, 2237, 2237, 2237, 2237, 2237, 2234, 41, 41, 41, - 41, 41, 41, 41, 46, 46, 46, 46, 46, 46, - 46, 51, 51, 51, 51, 51, 51, 51, 57, 57, - 57, 57, 57, 57, 57, 62, 62, 62, 62, 62, - 62, 62, 72, 72, 2237, 72, 72, 72, 72, 131, - 131, 2237, 2237, 2237, 131, 131, 133, 133, 2237, 2237, - 133, 2237, 133, 135, 2237, 2237, 2237, 2237, 2237, 135, - 138, 138, 2237, 2237, 2237, 138, 138, 140, 2237, 2237, - 2237, 2237, 2237, 140, 142, 142, 2237, 142, 142, 142, - 142, 73, 73, 2237, 73, 73, 73, 73, 13, 2237, + 70, 70, 2222, 2228, 2221, 2223, 2229, 2230, 2231, 2233, + 2238, 70, 2235, 2287, 70, 2227, 70, 2287, 70, 2234, + 2224, 70, 2287, 2236, 2240, 70, 2259, 70, 70, 70, + 2228, 70, 70, 2229, 2230, 2231, 70, 2237, 70, 2235, + 2239, 2241, 70, 2243, 2242, 70, 2234, 2244, 70, 2245, + 2236, 2240, 2246, 70, 2247, 70, 2248, 70, 2250, 70, + 2249, 70, 2252, 2287, 2237, 70, 70, 2239, 2241, 2251, + 2243, 2242, 2253, 2254, 2244, 2287, 2245, 70, 70, 2246, + 70, 2247, 2255, 2248, 70, 2250, 2256, 2249, 70, 2252, + 2257, 2258, 2263, 2265, 70, 70, 2251, 2262, 70, 2253, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237 + 2254, 2260, 70, 2261, 2267, 70, 2287, 2264, 2287, 2255, + 2268, 2272, 70, 2256, 70, 70, 70, 2257, 2258, 2263, + 70, 70, 2271, 70, 2262, 2266, 70, 2269, 2260, 2275, + 2261, 2267, 70, 70, 2264, 70, 2270, 2268, 70, 2273, + 2276, 2277, 2274, 2278, 70, 2279, 2287, 70, 70, 2271, + 70, 2280, 2266, 2281, 2269, 70, 2275, 2282, 2285, 2286, + 2287, 70, 2287, 2270, 2287, 2283, 2273, 70, 2277, 2274, + 70, 70, 70, 70, 2284, 70, 2287, 2287, 2280, 70, + 2281, 2287, 70, 2287, 2282, 70, 70, 2287, 2287, 2287, + 2287, 2287, 2283, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + + 2287, 2284, 42, 42, 42, 42, 42, 42, 42, 47, + 47, 47, 47, 47, 47, 47, 52, 52, 52, 52, + 52, 52, 52, 58, 58, 58, 58, 58, 58, 58, + 63, 63, 63, 63, 63, 63, 63, 73, 73, 2287, + 73, 73, 73, 73, 133, 133, 2287, 2287, 2287, 133, + 133, 135, 135, 2287, 2287, 135, 2287, 135, 137, 2287, + 2287, 2287, 2287, 2287, 137, 140, 140, 2287, 2287, 2287, + 140, 140, 142, 2287, 2287, 2287, 2287, 2287, 142, 144, + 144, 2287, 144, 144, 144, 144, 74, 74, 2287, 74, + 74, 74, 74, 13, 2287, 2287, 2287, 2287, 2287, 2287, + + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287 } ; -static yyconst flex_int16_t yy_chk[6466] = +static yyconst flex_int16_t yy_chk[6661] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1893,710 +1931,731 @@ static yyconst flex_int16_t yy_chk[6466] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, - 4, 4, 5, 5, 6, 6, 5, 27, 6, 7, - 7, 7, 7, 676, 7, 8, 8, 8, 8, 27, - 8, 9, 9, 9, 10, 10, 10, 15, 45, 45, + 4, 4, 5, 5, 6, 6, 5, 28, 6, 7, + 7, 7, 7, 2293, 7, 8, 8, 8, 8, 28, + 8, 9, 9, 9, 10, 10, 10, 15, 21, 46, - 2243, 15, 23, 3, 27, 50, 4, 775, 50, 5, - 19, 6, 19, 19, 676, 19, 140, 7, 29, 61, - 61, 19, 23, 8, 138, 23, 20, 20, 9, 23, - 29, 10, 11, 11, 11, 11, 11, 11, 12, 12, - 12, 12, 12, 12, 20, 29, 24, 103, 19, 23, - 20, 25, 11, 20, 20, 21, 75, 32, 12, 25, - 24, 70, 21, 32, 860, 70, 21, 103, 28, 21, - 11, 20, 24, 24, 103, 137, 12, 25, 25, 11, - 75, 21, 21, 75, 32, 12, 25, 24, 26, 21, - 28, 26, 860, 21, 30, 28, 21, 22, 26, 135, + 46, 15, 30, 3, 28, 51, 4, 792, 51, 5, + 19, 6, 19, 19, 30, 19, 71, 7, 62, 62, + 71, 19, 76, 8, 21, 21, 20, 20, 9, 30, + 785, 10, 11, 11, 11, 11, 11, 11, 12, 12, + 12, 12, 12, 12, 20, 24, 76, 25, 19, 76, + 20, 26, 11, 20, 20, 22, 142, 33, 12, 26, + 785, 25, 22, 33, 692, 24, 22, 35, 24, 22, + 11, 20, 24, 25, 25, 877, 12, 26, 26, 11, + 35, 22, 22, 29, 33, 12, 26, 67, 25, 22, + 140, 78, 24, 22, 35, 692, 22, 23, 78, 27, - 26, 22, 30, 133, 22, 116, 22, 22, 30, 131, - 31, 26, 30, 34, 31, 26, 77, 116, 26, 22, - 30, 30, 76, 77, 22, 26, 34, 26, 22, 30, - 31, 22, 116, 22, 22, 30, 31, 31, 35, 30, - 34, 31, 35, 77, 134, 76, 37, 134, 37, 76, - 100, 68, 35, 100, 38, 35, 84, 31, 33, 38, - 62, 84, 33, 37, 35, 35, 39, 38, 33, 35, - 39, 33, 37, 37, 39, 37, 80, 100, 33, 35, - 33, 38, 35, 84, 57, 33, 38, 132, 132, 33, - 37, 66, 39, 39, 80, 33, 125, 39, 33, 85, + 67, 23, 27, 877, 23, 29, 23, 23, 139, 27, + 29, 27, 137, 38, 67, 38, 135, 32, 78, 23, + 133, 32, 27, 77, 23, 69, 27, 31, 23, 27, + 38, 23, 79, 23, 23, 31, 27, 32, 27, 38, + 38, 31, 38, 32, 32, 31, 77, 39, 32, 81, + 77, 63, 39, 31, 31, 58, 79, 38, 81, 79, + 39, 36, 31, 40, 32, 36, 53, 40, 31, 83, + 106, 40, 31, 34, 39, 36, 81, 34, 36, 39, + 134, 134, 83, 34, 106, 82, 34, 36, 36, 40, + 40, 87, 36, 34, 40, 34, 83, 106, 40, 87, - 768, 39, 125, 80, 66, 33, 36, 85, 40, 36, - 40, 40, 56, 40, 56, 56, 36, 56, 66, 40, - 36, 36, 64, 125, 64, 64, 85, 64, 36, 67, - 768, 67, 67, 36, 67, 69, 36, 69, 69, 72, - 69, 72, 72, 36, 72, 78, 69, 36, 36, 81, - 72, 87, 79, 82, 83, 83, 52, 86, 78, 82, - 64, 79, 81, 83, 87, 51, 88, 89, 92, 78, - 139, 139, 78, 88, 82, 86, 81, 72, 87, 79, - 82, 83, 83, 89, 93, 78, 82, 90, 91, 86, - 94, 92, 96, 88, 89, 92, 90, 91, 46, 101, + 34, 122, 36, 82, 34, 36, 41, 92, 41, 41, + 34, 41, 82, 34, 86, 52, 92, 41, 87, 86, + 34, 37, 47, 57, 37, 57, 57, 65, 57, 65, + 65, 37, 65, 122, 92, 37, 37, 68, 42, 68, + 68, 86, 68, 37, 70, 14, 70, 70, 37, 70, + 84, 37, 85, 85, 88, 70, 84, 80, 37, 13, + 89, 85, 37, 37, 73, 65, 73, 73, 98, 73, + 80, 84, 88, 89, 91, 73, 95, 84, 90, 85, + 85, 80, 93, 84, 80, 90, 88, 89, 94, 0, + 91, 93, 98, 96, 141, 141, 148, 80, 95, 88, - 97, 41, 86, 94, 95, 14, 93, 95, 97, 99, - 98, 93, 101, 99, 90, 91, 96, 94, 102, 13, - 95, 95, 105, 120, 96, 104, 101, 97, 95, 108, - 98, 95, 98, 99, 95, 0, 99, 98, 108, 104, - 99, 102, 105, 96, 106, 102, 107, 95, 95, 105, - 110, 109, 104, 107, 112, 120, 108, 98, 106, 110, - 111, 112, 113, 114, 111, 0, 115, 117, 0, 0, - 114, 106, 115, 107, 109, 117, 122, 110, 109, 118, - 115, 112, 111, 118, 119, 121, 123, 111, 113, 113, - 114, 111, 118, 115, 117, 123, 122, 124, 119, 115, + 98, 91, 73, 95, 0, 90, 96, 97, 99, 93, + 97, 94, 0, 0, 0, 94, 99, 101, 100, 98, + 96, 101, 102, 97, 97, 102, 103, 105, 148, 104, + 136, 97, 108, 136, 97, 99, 109, 97, 100, 103, + 100, 101, 107, 109, 101, 100, 108, 105, 101, 102, + 97, 97, 104, 103, 105, 110, 104, 111, 112, 108, + 115, 0, 107, 109, 110, 100, 113, 112, 114, 107, + 113, 116, 0, 119, 0, 114, 0, 117, 116, 120, + 111, 119, 110, 117, 111, 112, 115, 115, 113, 118, + 120, 117, 123, 113, 120, 114, 125, 113, 116, 121, - 121, 126, 122, 122, 128, 127, 118, 129, 124, 0, - 118, 119, 121, 123, 130, 136, 129, 136, 136, 128, - 136, 145, 126, 122, 124, 146, 126, 127, 126, 144, - 0, 128, 127, 148, 129, 141, 130, 141, 141, 147, - 141, 130, 142, 145, 142, 142, 149, 142, 145, 126, - 150, 147, 148, 144, 149, 157, 144, 146, 152, 151, - 148, 153, 150, 154, 156, 152, 147, 155, 0, 154, - 161, 158, 0, 149, 160, 158, 162, 150, 161, 153, - 142, 151, 163, 177, 165, 152, 151, 157, 153, 155, - 156, 156, 158, 0, 155, 154, 154, 161, 162, 158, + 119, 118, 124, 120, 117, 125, 120, 123, 127, 126, + 117, 150, 128, 121, 127, 130, 118, 120, 129, 123, + 126, 120, 124, 125, 132, 131, 121, 150, 124, 124, + 130, 0, 0, 128, 131, 127, 126, 128, 150, 128, + 129, 0, 130, 146, 0, 129, 132, 147, 0, 124, + 0, 132, 131, 138, 151, 138, 138, 154, 138, 143, + 128, 143, 143, 144, 143, 144, 144, 146, 144, 147, + 146, 149, 152, 151, 147, 153, 156, 160, 155, 154, + 152, 151, 157, 149, 154, 155, 158, 153, 157, 0, + 159, 161, 0, 0, 156, 161, 0, 163, 149, 152, - 160, 160, 158, 162, 163, 166, 164, 165, 167, 163, - 164, 165, 168, 170, 169, 177, 0, 169, 0, 158, - 159, 167, 170, 171, 168, 159, 172, 166, 180, 169, - 159, 175, 166, 164, 174, 167, 159, 159, 175, 168, - 170, 169, 183, 159, 169, 171, 178, 159, 172, 173, - 171, 176, 159, 172, 173, 185, 174, 159, 175, 179, - 180, 174, 176, 159, 159, 181, 173, 184, 173, 186, - 179, 182, 178, 178, 183, 173, 173, 182, 176, 187, - 0, 173, 188, 181, 189, 192, 195, 185, 268, 184, - 192, 179, 181, 173, 184, 173, 188, 179, 182, 187, + 236, 144, 153, 156, 165, 155, 166, 167, 158, 160, + 164, 167, 161, 158, 157, 157, 159, 159, 164, 161, + 168, 173, 161, 163, 163, 170, 165, 169, 166, 236, + 173, 165, 171, 166, 167, 0, 0, 164, 170, 161, + 162, 0, 174, 168, 171, 162, 175, 168, 173, 169, + 162, 0, 170, 0, 169, 172, 162, 162, 172, 171, + 0, 176, 180, 162, 174, 179, 176, 162, 175, 174, + 172, 181, 162, 175, 177, 0, 179, 162, 176, 178, + 176, 183, 172, 162, 162, 172, 178, 176, 176, 182, + 184, 186, 179, 176, 180, 190, 177, 181, 181, 188, - 190, 186, 191, 193, 194, 189, 187, 190, 195, 188, - 197, 189, 192, 195, 196, 268, 199, 198, 194, 200, - 201, 197, 193, 191, 198, 201, 196, 190, 202, 191, - 193, 194, 204, 208, 206, 207, 210, 197, 199, 203, - 203, 196, 200, 199, 198, 205, 200, 201, 203, 209, - 212, 210, 205, 211, 213, 207, 219, 209, 214, 206, - 202, 206, 207, 210, 204, 208, 203, 203, 218, 216, - 215, 220, 205, 212, 215, 214, 209, 221, 222, 211, - 211, 217, 212, 214, 216, 214, 213, 218, 219, 217, - 222, 223, 224, 220, 225, 218, 216, 215, 220, 228, + 182, 177, 187, 185, 189, 176, 178, 176, 184, 185, + 0, 191, 192, 183, 194, 190, 0, 184, 198, 193, + 0, 182, 190, 186, 187, 191, 193, 182, 196, 187, + 185, 188, 195, 192, 197, 194, 189, 195, 191, 192, + 198, 194, 199, 201, 202, 198, 193, 196, 197, 200, + 201, 204, 205, 203, 199, 196, 206, 205, 210, 195, + 200, 197, 203, 207, 207, 208, 202, 211, 209, 199, + 201, 202, 207, 212, 204, 209, 200, 214, 204, 205, + 203, 213, 217, 210, 215, 210, 216, 211, 206, 213, + 207, 207, 214, 221, 211, 209, 218, 208, 219, 223, - 212, 224, 214, 226, 223, 222, 229, 225, 217, 221, - 227, 232, 227, 230, 231, 233, 240, 235, 223, 224, - 232, 225, 226, 228, 234, 237, 228, 239, 235, 0, - 226, 229, 238, 229, 236, 242, 243, 227, 232, 230, - 230, 233, 233, 231, 235, 239, 236, 241, 240, 237, - 234, 234, 237, 244, 239, 238, 245, 246, 249, 238, - 241, 236, 243, 243, 246, 248, 251, 242, 247, 259, - 250, 248, 249, 252, 241, 244, 253, 247, 254, 258, - 244, 255, 252, 0, 246, 249, 257, 254, 245, 256, - 251, 260, 248, 251, 258, 247, 250, 250, 256, 253, + 220, 221, 219, 222, 214, 212, 224, 225, 213, 216, + 215, 215, 226, 218, 217, 220, 231, 0, 216, 228, + 221, 218, 222, 218, 230, 219, 227, 220, 224, 225, + 222, 223, 228, 224, 225, 231, 216, 230, 227, 229, + 218, 233, 234, 231, 226, 232, 228, 232, 229, 235, + 237, 230, 238, 227, 239, 244, 0, 0, 241, 237, + 240, 243, 242, 245, 248, 233, 229, 234, 233, 234, + 241, 240, 232, 244, 247, 235, 235, 237, 238, 238, + 239, 239, 244, 246, 243, 241, 242, 240, 243, 242, + 248, 248, 249, 250, 251, 245, 246, 253, 0, 252, - 252, 259, 261, 253, 263, 254, 258, 255, 255, 264, - 257, 265, 262, 257, 0, 260, 256, 261, 260, 266, - 262, 262, 263, 262, 274, 265, 272, 264, 269, 261, - 262, 263, 270, 264, 266, 270, 264, 271, 265, 262, - 267, 267, 270, 273, 272, 276, 266, 262, 262, 271, - 262, 274, 269, 272, 264, 269, 275, 277, 278, 270, - 279, 273, 270, 282, 271, 267, 280, 267, 267, 277, - 273, 276, 276, 280, 281, 279, 285, 284, 275, 288, - 278, 283, 291, 275, 277, 278, 281, 279, 283, 287, - 286, 287, 288, 280, 289, 282, 286, 289, 285, 289, + 258, 251, 254, 253, 255, 0, 247, 264, 252, 256, + 246, 257, 0, 259, 249, 260, 254, 273, 0, 249, + 257, 251, 259, 258, 253, 250, 252, 258, 261, 254, + 255, 255, 262, 256, 263, 266, 256, 261, 257, 264, + 259, 260, 260, 265, 273, 268, 270, 279, 0, 263, + 266, 272, 272, 269, 271, 261, 262, 267, 274, 262, + 270, 263, 266, 268, 0, 267, 267, 265, 267, 271, + 265, 269, 268, 270, 279, 267, 272, 269, 272, 272, + 269, 271, 274, 277, 267, 274, 275, 276, 278, 275, + 280, 282, 267, 267, 281, 267, 275, 283, 269, 276, - 292, 281, 290, 285, 0, 289, 288, 0, 283, 284, - 0, 293, 286, 287, 291, 0, 287, 286, 287, 293, - 290, 289, 292, 286, 289, 293, 289, 292, 294, 290, - 295, 296, 297, 300, 298, 294, 301, 303, 293, 305, - 0, 304, 295, 303, 296, 300, 293, 298, 297, 304, - 307, 305, 314, 0, 301, 294, 297, 295, 296, 297, - 300, 298, 302, 301, 303, 306, 305, 302, 304, 308, - 0, 309, 306, 308, 0, 297, 299, 299, 309, 311, - 310, 0, 307, 312, 314, 313, 299, 310, 299, 299, - 299, 311, 306, 299, 302, 315, 308, 313, 309, 316, + 287, 277, 285, 282, 290, 0, 278, 284, 289, 285, + 277, 286, 280, 275, 276, 278, 275, 280, 282, 283, + 281, 281, 284, 286, 283, 291, 288, 294, 296, 285, + 289, 0, 287, 288, 284, 289, 290, 292, 286, 293, + 294, 293, 297, 292, 0, 295, 296, 291, 295, 298, + 295, 300, 291, 288, 294, 296, 295, 301, 300, 292, + 0, 0, 0, 293, 292, 299, 293, 302, 293, 301, + 292, 298, 295, 299, 297, 295, 298, 295, 300, 299, + 302, 303, 304, 307, 301, 308, 306, 309, 310, 313, + 308, 311, 299, 309, 302, 304, 310, 303, 306, 0, - 318, 299, 315, 299, 299, 312, 311, 310, 317, 319, - 312, 319, 313, 299, 316, 299, 299, 299, 320, 321, - 299, 317, 315, 322, 322, 0, 316, 323, 324, 320, - 326, 325, 318, 328, 323, 317, 319, 327, 329, 324, - 330, 321, 325, 326, 337, 320, 321, 334, 333, 330, - 331, 0, 322, 329, 323, 324, 328, 326, 325, 348, - 328, 329, 327, 331, 327, 329, 333, 330, 332, 334, - 335, 336, 338, 339, 334, 333, 337, 331, 338, 332, - 329, 332, 340, 342, 0, 341, 332, 343, 344, 336, - 342, 348, 0, 335, 339, 332, 345, 335, 336, 338, + 299, 307, 313, 311, 312, 303, 0, 0, 303, 304, + 307, 312, 314, 306, 309, 310, 313, 308, 311, 315, + 316, 314, 317, 315, 303, 305, 305, 316, 318, 317, + 0, 312, 319, 320, 322, 305, 321, 305, 305, 305, + 318, 322, 305, 323, 314, 320, 315, 316, 314, 317, + 305, 325, 305, 305, 319, 318, 0, 328, 323, 319, + 320, 322, 305, 324, 305, 305, 305, 327, 321, 305, + 323, 326, 333, 326, 329, 329, 324, 331, 327, 328, + 330, 332, 335, 325, 328, 333, 334, 330, 331, 344, + 324, 336, 332, 337, 327, 341, 0, 338, 326, 333, - 339, 347, 344, 346, 351, 340, 332, 341, 332, 340, - 342, 349, 341, 343, 343, 344, 350, 346, 345, 352, - 353, 354, 350, 345, 356, 0, 351, 347, 347, 355, - 346, 351, 357, 358, 349, 353, 354, 352, 349, 358, - 359, 0, 361, 350, 363, 0, 352, 353, 354, 362, - 356, 356, 355, 0, 357, 362, 355, 364, 365, 357, - 358, 370, 366, 363, 371, 365, 359, 359, 361, 361, - 368, 363, 368, 369, 370, 364, 362, 366, 374, 368, - 369, 373, 379, 372, 364, 365, 376, 375, 370, 366, - 378, 374, 377, 380, 383, 379, 371, 368, 382, 368, + 0, 340, 337, 329, 331, 335, 336, 330, 332, 335, + 338, 334, 339, 334, 336, 342, 343, 341, 336, 340, + 337, 344, 341, 339, 338, 339, 345, 346, 340, 348, + 339, 355, 345, 336, 343, 347, 0, 349, 342, 339, + 350, 351, 342, 343, 349, 353, 0, 352, 346, 354, + 339, 348, 339, 345, 346, 351, 348, 356, 347, 353, + 358, 359, 347, 355, 349, 357, 350, 350, 351, 352, + 360, 357, 353, 362, 352, 354, 354, 363, 361, 359, + 356, 0, 358, 365, 356, 360, 364, 358, 359, 365, + 366, 0, 357, 361, 368, 369, 362, 360, 378, 370, - 369, 372, 381, 373, 382, 374, 375, 381, 373, 379, - 372, 384, 385, 378, 375, 380, 377, 383, 376, 377, - 380, 383, 378, 384, 386, 382, 389, 0, 387, 381, - 391, 0, 398, 389, 385, 386, 387, 390, 384, 385, - 378, 391, 393, 394, 398, 390, 395, 0, 392, 397, - 394, 386, 396, 389, 396, 387, 388, 391, 392, 398, - 401, 388, 399, 388, 390, 410, 393, 416, 401, 393, - 394, 388, 395, 395, 388, 397, 397, 399, 403, 396, - 392, 388, 388, 388, 400, 392, 402, 401, 388, 399, - 388, 402, 404, 407, 405, 406, 400, 410, 388, 416, + 362, 369, 372, 363, 363, 361, 371, 376, 364, 372, + 365, 383, 373, 364, 376, 377, 366, 366, 370, 379, + 368, 368, 369, 375, 371, 375, 370, 373, 377, 372, + 378, 380, 375, 371, 376, 381, 382, 379, 384, 373, + 385, 387, 377, 383, 388, 384, 379, 386, 381, 391, + 375, 389, 375, 380, 387, 382, 389, 0, 380, 393, + 0, 392, 381, 382, 385, 384, 388, 385, 387, 390, + 386, 388, 391, 392, 394, 390, 391, 397, 389, 386, + 399, 393, 395, 0, 397, 394, 393, 398, 392, 400, + 395, 399, 401, 402, 0, 398, 390, 386, 0, 400, - 403, 388, 405, 409, 413, 403, 412, 406, 388, 411, - 404, 400, 415, 402, 407, 412, 414, 417, 413, 404, - 407, 405, 406, 418, 411, 419, 409, 420, 0, 421, - 409, 413, 417, 412, 423, 414, 411, 422, 425, 415, - 419, 421, 424, 414, 417, 424, 427, 428, 429, 425, - 430, 420, 419, 424, 420, 418, 421, 426, 423, 422, - 427, 423, 426, 431, 422, 425, 432, 433, 437, 424, - 434, 436, 424, 427, 428, 429, 434, 439, 435, 436, - 438, 440, 430, 441, 442, 444, 0, 437, 0, 426, - 431, 445, 441, 432, 443, 437, 455, 434, 436, 433, + 402, 394, 0, 403, 397, 405, 404, 399, 404, 395, + 396, 406, 407, 0, 398, 396, 401, 396, 0, 401, + 402, 400, 408, 406, 418, 396, 400, 407, 396, 403, + 403, 405, 405, 404, 408, 396, 396, 396, 406, 407, + 409, 410, 396, 411, 396, 412, 410, 414, 409, 408, + 413, 419, 396, 417, 415, 396, 418, 0, 413, 414, + 420, 421, 396, 412, 423, 411, 419, 409, 410, 420, + 411, 422, 412, 424, 414, 415, 417, 413, 419, 425, + 417, 415, 426, 428, 421, 422, 427, 420, 421, 423, + 429, 423, 424, 0, 430, 431, 433, 432, 422, 434, - 435, 443, 446, 438, 440, 435, 442, 438, 440, 439, - 441, 442, 451, 445, 447, 446, 448, 444, 445, 447, - 452, 443, 449, 447, 450, 448, 0, 453, 455, 446, - 459, 457, 454, 450, 451, 456, 0, 467, 447, 451, - 453, 447, 452, 448, 454, 458, 447, 452, 449, 449, - 447, 450, 459, 456, 453, 457, 460, 459, 457, 454, - 461, 462, 456, 463, 464, 465, 466, 458, 458, 467, - 474, 461, 458, 469, 468, 462, 465, 471, 460, 470, - 472, 466, 464, 460, 476, 463, 475, 461, 462, 472, - 463, 464, 465, 466, 458, 468, 473, 469, 477, 471, + 424, 427, 434, 436, 438, 429, 425, 431, 436, 439, + 434, 437, 440, 427, 426, 428, 435, 429, 430, 432, + 433, 430, 431, 433, 432, 437, 434, 435, 441, 434, + 442, 438, 443, 444, 445, 436, 439, 449, 437, 444, + 446, 0, 0, 435, 440, 448, 447, 450, 446, 451, + 454, 0, 453, 452, 458, 441, 445, 442, 451, 453, + 444, 445, 455, 458, 443, 447, 459, 446, 448, 449, + 450, 0, 448, 447, 450, 452, 451, 456, 457, 453, + 452, 458, 454, 457, 455, 460, 461, 457, 463, 455, + 456, 464, 459, 459, 460, 462, 465, 467, 466, 0, - 469, 468, 474, 470, 471, 478, 470, 472, 475, 473, - 479, 482, 480, 475, 481, 479, 476, 484, 0, 486, - 0, 483, 477, 473, 489, 477, 480, 478, 481, 483, - 485, 487, 478, 488, 486, 484, 491, 493, 488, 480, - 0, 481, 479, 482, 484, 485, 486, 490, 483, 490, - 489, 489, 492, 487, 485, 499, 0, 485, 487, 494, - 492, 491, 493, 491, 493, 488, 495, 498, 494, 496, - 504, 497, 485, 499, 490, 495, 500, 496, 497, 492, - 501, 508, 499, 502, 505, 503, 494, 506, 500, 501, - 498, 502, 505, 495, 498, 506, 496, 503, 497, 507, + 0, 463, 457, 464, 456, 457, 0, 468, 461, 469, + 457, 470, 460, 461, 457, 463, 466, 462, 464, 477, + 473, 467, 462, 0, 467, 466, 471, 472, 465, 468, + 468, 469, 474, 470, 468, 475, 469, 471, 470, 478, + 476, 472, 473, 481, 479, 480, 475, 473, 482, 484, + 474, 477, 486, 471, 472, 476, 468, 482, 485, 474, + 478, 483, 475, 487, 488, 481, 478, 476, 479, 480, + 481, 479, 480, 489, 483, 482, 492, 494, 489, 490, + 485, 484, 491, 495, 486, 485, 488, 487, 483, 493, + 487, 488, 496, 490, 500, 494, 491, 493, 495, 497, - 509, 510, 504, 500, 508, 512, 511, 501, 508, 515, - 502, 505, 503, 512, 506, 513, 509, 511, 514, 516, - 520, 517, 518, 510, 522, 507, 507, 509, 510, 513, - 0, 515, 512, 511, 521, 523, 515, 522, 514, 516, - 520, 519, 513, 517, 518, 514, 516, 520, 517, 518, - 519, 522, 521, 523, 524, 525, 529, 526, 527, 531, - 532, 521, 523, 528, 527, 537, 533, 531, 519, 536, - 0, 528, 534, 533, 529, 0, 524, 555, 536, 525, - 526, 524, 525, 529, 526, 527, 531, 535, 538, 528, - 528, 539, 532, 533, 544, 534, 536, 537, 528, 534, + 498, 501, 0, 501, 494, 489, 490, 495, 492, 491, + 495, 502, 499, 0, 497, 503, 493, 499, 504, 0, + 500, 500, 498, 503, 496, 495, 497, 498, 501, 507, + 505, 506, 509, 510, 508, 511, 502, 507, 502, 505, + 506, 508, 503, 504, 499, 504, 515, 511, 0, 0, + 518, 510, 520, 514, 512, 509, 507, 505, 506, 509, + 510, 508, 511, 512, 513, 514, 516, 517, 520, 519, + 0, 522, 513, 521, 516, 517, 518, 518, 515, 520, + 514, 512, 522, 525, 526, 524, 528, 527, 0, 523, + 0, 513, 519, 516, 517, 521, 519, 523, 522, 524, - 539, 540, 535, 540, 541, 0, 544, 538, 550, 555, - 547, 541, 0, 551, 535, 538, 553, 0, 539, 0, - 547, 544, 0, 557, 552, 560, 550, 560, 540, 554, - 0, 541, 542, 562, 551, 550, 542, 547, 558, 542, - 551, 563, 553, 553, 558, 557, 542, 552, 559, 542, - 557, 552, 560, 0, 542, 554, 554, 559, 561, 542, - 562, 563, 565, 542, 564, 558, 542, 0, 563, 0, - 566, 567, 580, 542, 565, 559, 542, 556, 556, 569, - 556, 580, 561, 556, 568, 561, 573, 570, 556, 565, - 564, 564, 572, 567, 556, 556, 566, 566, 567, 580, + 521, 529, 531, 525, 533, 535, 526, 527, 528, 530, + 525, 526, 524, 528, 527, 532, 523, 533, 530, 534, + 536, 0, 531, 529, 538, 537, 539, 535, 529, 531, + 538, 533, 535, 532, 0, 540, 530, 534, 541, 542, + 545, 544, 532, 540, 536, 0, 534, 536, 537, 544, + 547, 538, 537, 539, 548, 549, 546, 542, 550, 551, + 0, 540, 540, 546, 549, 541, 542, 552, 544, 548, + 540, 566, 545, 547, 564, 563, 552, 547, 551, 560, + 557, 548, 549, 546, 554, 553, 551, 553, 567, 560, + 550, 554, 557, 563, 552, 564, 565, 566, 566, 568, - 572, 569, 571, 556, 556, 556, 569, 556, 568, 573, - 556, 568, 570, 573, 570, 556, 574, 571, 575, 572, - 576, 556, 556, 574, 577, 578, 575, 579, 0, 571, - 583, 581, 585, 582, 584, 586, 0, 578, 587, 576, - 579, 0, 588, 574, 0, 575, 581, 576, 0, 589, - 577, 577, 578, 590, 579, 582, 584, 583, 581, 592, - 582, 584, 587, 588, 585, 587, 591, 586, 589, 588, - 593, 594, 590, 595, 596, 591, 589, 597, 598, 594, - 590, 592, 603, 0, 601, 602, 592, 599, 0, 606, - 593, 604, 596, 591, 605, 599, 597, 593, 594, 0, + 0, 564, 563, 0, 0, 0, 560, 557, 0, 572, + 570, 554, 553, 555, 567, 567, 571, 555, 572, 565, + 555, 574, 571, 565, 573, 575, 573, 555, 580, 576, + 555, 568, 570, 593, 0, 555, 572, 570, 0, 577, + 555, 578, 593, 571, 555, 574, 579, 555, 574, 576, + 580, 573, 575, 578, 555, 580, 576, 555, 569, 569, + 593, 569, 0, 581, 569, 577, 577, 582, 578, 569, + 583, 585, 579, 579, 0, 569, 569, 584, 586, 585, + 0, 0, 590, 598, 569, 569, 569, 581, 569, 582, + 581, 569, 584, 587, 582, 583, 569, 583, 585, 588, - 595, 596, 601, 602, 597, 607, 603, 605, 608, 603, - 598, 601, 602, 604, 599, 606, 606, 607, 604, 609, - 610, 605, 609, 612, 613, 614, 608, 615, 610, 618, - 616, 614, 607, 617, 618, 608, 616, 0, 619, 621, - 617, 620, 631, 628, 610, 619, 609, 610, 612, 615, - 612, 613, 614, 623, 615, 610, 618, 616, 622, 620, - 617, 623, 621, 624, 625, 619, 621, 622, 620, 626, - 628, 627, 632, 630, 631, 639, 629, 0, 633, 625, - 623, 624, 626, 629, 636, 622, 630, 634, 0, 638, - 624, 625, 627, 637, 635, 634, 626, 0, 627, 637, + 587, 586, 569, 569, 584, 586, 589, 588, 590, 590, + 591, 592, 594, 595, 596, 598, 0, 599, 600, 0, + 587, 597, 591, 601, 592, 589, 588, 594, 602, 0, + 608, 605, 603, 589, 611, 595, 606, 591, 592, 594, + 595, 596, 600, 597, 601, 600, 607, 602, 597, 599, + 601, 603, 604, 605, 607, 602, 606, 608, 605, 603, + 609, 604, 610, 606, 612, 614, 611, 615, 617, 616, + 620, 618, 612, 607, 619, 0, 0, 0, 609, 604, + 621, 610, 620, 614, 618, 615, 622, 609, 621, 610, + 617, 612, 614, 616, 615, 617, 616, 620, 618, 623, - 630, 633, 635, 629, 632, 633, 636, 639, 640, 635, - 641, 636, 642, 643, 634, 638, 638, 644, 0, 641, - 637, 635, 645, 647, 644, 646, 642, 0, 648, 635, - 649, 0, 640, 650, 646, 640, 654, 641, 652, 642, - 648, 650, 654, 651, 644, 643, 651, 653, 0, 645, - 647, 652, 646, 649, 653, 648, 0, 649, 656, 657, - 650, 0, 0, 654, 658, 652, 664, 659, 661, 659, - 651, 664, 0, 660, 653, 655, 658, 655, 0, 662, - 661, 655, 657, 655, 656, 656, 657, 0, 655, 666, - 663, 658, 665, 655, 659, 661, 660, 667, 664, 655, + 619, 619, 623, 624, 622, 627, 626, 621, 628, 630, + 631, 624, 629, 622, 628, 630, 632, 631, 633, 635, + 636, 632, 634, 638, 0, 633, 623, 624, 642, 636, + 624, 626, 627, 626, 629, 628, 630, 631, 624, 629, + 634, 638, 635, 632, 637, 633, 635, 636, 639, 634, + 638, 640, 637, 641, 643, 642, 644, 645, 646, 647, + 648, 643, 0, 639, 640, 0, 650, 651, 648, 644, + 652, 637, 653, 651, 641, 639, 649, 0, 640, 659, + 641, 643, 647, 644, 649, 654, 647, 648, 650, 645, + 646, 649, 655, 650, 651, 657, 652, 652, 658, 656, - 660, 662, 655, 663, 655, 665, 662, 669, 655, 667, - 655, 668, 666, 670, 672, 655, 666, 663, 673, 665, - 655, 668, 671, 674, 667, 675, 670, 672, 671, 669, - 680, 678, 679, 668, 669, 681, 0, 0, 668, 673, - 670, 672, 682, 680, 683, 673, 678, 691, 668, 671, - 681, 684, 675, 688, 679, 674, 677, 680, 678, 679, - 685, 677, 681, 677, 686, 692, 683, 687, 682, 682, - 684, 683, 686, 685, 677, 687, 689, 693, 684, 691, - 688, 677, 677, 677, 694, 693, 695, 685, 677, 692, - 677, 686, 692, 696, 687, 698, 699, 697, 694, 689, + 0, 655, 661, 649, 653, 658, 659, 660, 662, 654, + 663, 649, 654, 656, 664, 666, 660, 667, 666, 655, + 662, 669, 664, 672, 673, 658, 656, 657, 669, 661, + 667, 674, 670, 663, 660, 662, 0, 663, 670, 0, + 676, 664, 666, 674, 667, 677, 0, 673, 669, 672, + 672, 673, 675, 678, 675, 0, 679, 677, 674, 670, + 671, 681, 671, 676, 683, 680, 671, 676, 671, 679, + 680, 682, 677, 671, 681, 678, 683, 0, 671, 675, + 678, 685, 684, 679, 671, 689, 686, 671, 681, 671, + 687, 683, 684, 671, 682, 671, 687, 680, 682, 686, - 701, 677, 703, 689, 693, 697, 700, 702, 677, 704, - 703, 694, 705, 698, 699, 696, 0, 700, 695, 705, - 696, 707, 698, 699, 697, 702, 708, 706, 707, 703, - 710, 704, 701, 700, 702, 721, 704, 709, 712, 705, - 706, 713, 0, 714, 708, 715, 722, 716, 707, 713, - 0, 712, 714, 708, 706, 709, 717, 715, 718, 719, - 722, 720, 710, 726, 709, 712, 726, 721, 713, 716, - 714, 724, 715, 722, 716, 727, 725, 719, 717, 728, - 718, 725, 724, 717, 729, 718, 719, 720, 720, 726, - 726, 729, 728, 726, 731, 730, 732, 733, 724, 727, + 671, 688, 690, 685, 684, 671, 689, 0, 685, 684, + 691, 0, 689, 686, 688, 694, 0, 687, 0, 684, + 696, 697, 695, 0, 698, 707, 0, 700, 688, 0, + 694, 699, 702, 696, 690, 704, 697, 691, 693, 701, + 702, 711, 694, 693, 695, 693, 700, 696, 697, 695, + 698, 698, 701, 699, 700, 705, 693, 707, 699, 702, + 703, 708, 704, 693, 693, 693, 701, 709, 703, 716, + 693, 712, 693, 711, 714, 709, 713, 710, 705, 715, + 716, 717, 705, 693, 713, 708, 0, 703, 708, 718, + 693, 710, 714, 712, 709, 720, 716, 715, 712, 722, - 0, 736, 727, 732, 734, 735, 728, 730, 725, 0, - 734, 729, 736, 737, 738, 739, 741, 743, 742, 744, - 0, 733, 730, 732, 733, 746, 731, 735, 736, 742, - 739, 734, 735, 745, 746, 737, 738, 741, 743, 747, - 737, 738, 739, 741, 743, 742, 744, 748, 750, 749, - 751, 745, 746, 752, 0, 750, 748, 749, 760, 753, - 745, 754, 756, 747, 751, 759, 747, 757, 758, 761, - 762, 756, 764, 0, 748, 750, 749, 751, 763, 765, - 759, 753, 762, 754, 758, 752, 753, 765, 754, 756, - 760, 757, 759, 767, 757, 758, 766, 762, 769, 764, + 719, 714, 721, 713, 710, 724, 715, 718, 719, 721, + 725, 723, 722, 717, 726, 730, 718, 720, 723, 737, + 728, 0, 720, 724, 730, 0, 722, 719, 725, 721, + 732, 729, 724, 728, 733, 0, 731, 725, 723, 729, + 734, 735, 730, 736, 740, 0, 726, 728, 731, 741, + 738, 737, 732, 744, 741, 740, 733, 732, 729, 735, + 743, 733, 734, 731, 738, 747, 744, 734, 735, 736, + 736, 740, 742, 746, 751, 742, 745, 738, 0, 748, + 744, 741, 752, 745, 743, 746, 748, 743, 749, 750, + 758, 754, 755, 756, 753, 750, 751, 747, 742, 742, - 763, 761, 771, 770, 774, 763, 765, 769, 767, 766, - 771, 772, 774, 772, 776, 778, 777, 779, 780, 0, - 767, 770, 778, 766, 781, 769, 783, 776, 777, 771, - 770, 774, 782, 786, 784, 792, 0, 788, 772, 785, - 0, 776, 778, 777, 787, 788, 781, 784, 783, 779, - 780, 781, 785, 783, 789, 786, 787, 782, 790, 782, - 786, 784, 792, 793, 788, 791, 785, 795, 794, 797, - 790, 787, 796, 791, 789, 799, 793, 794, 800, 796, - 797, 789, 0, 797, 801, 790, 0, 806, 795, 803, - 793, 797, 791, 802, 795, 794, 797, 805, 0, 796, + 746, 751, 742, 745, 752, 753, 748, 760, 756, 752, + 761, 758, 749, 754, 755, 749, 750, 758, 754, 755, + 756, 753, 759, 762, 764, 767, 763, 765, 760, 768, + 766, 769, 767, 759, 760, 763, 765, 761, 766, 770, + 771, 762, 775, 768, 774, 776, 773, 777, 764, 759, + 762, 764, 767, 763, 765, 773, 768, 766, 775, 778, + 776, 770, 771, 769, 0, 779, 770, 771, 774, 775, + 781, 774, 776, 773, 780, 782, 783, 779, 784, 777, + 787, 786, 789, 782, 789, 796, 788, 791, 794, 783, + 786, 778, 779, 784, 788, 791, 780, 781, 787, 793, - 800, 799, 799, 804, 801, 800, 802, 797, 811, 806, - 797, 801, 804, 803, 806, 805, 803, 807, 808, 809, - 802, 813, 0, 815, 805, 807, 812, 809, 818, 814, - 804, 815, 817, 0, 828, 811, 0, 0, 0, 813, - 808, 814, 816, 818, 807, 808, 809, 822, 813, 812, - 815, 821, 817, 812, 816, 818, 814, 819, 820, 817, - 821, 823, 826, 824, 820, 819, 828, 0, 822, 816, - 824, 832, 825, 823, 822, 831, 830, 833, 821, 825, - 826, 829, 831, 836, 819, 820, 834, 837, 823, 826, - 824, 834, 833, 832, 829, 830, 836, 835, 832, 825, + 794, 780, 782, 783, 795, 784, 797, 787, 786, 789, + 798, 795, 793, 788, 791, 794, 799, 796, 800, 805, + 801, 802, 803, 804, 0, 809, 793, 805, 0, 0, + 807, 795, 798, 801, 802, 804, 806, 798, 797, 0, + 800, 799, 807, 799, 803, 800, 805, 801, 802, 803, + 804, 808, 809, 810, 812, 811, 806, 807, 813, 808, + 816, 817, 814, 806, 811, 813, 810, 820, 821, 0, + 818, 828, 0, 814, 823, 812, 814, 821, 808, 819, + 810, 812, 811, 817, 814, 813, 816, 816, 817, 814, + 818, 820, 819, 822, 820, 821, 823, 818, 828, 824, - 838, 837, 831, 830, 833, 835, 840, 841, 829, 842, - 836, 843, 845, 844, 837, 0, 0, 0, 834, 0, - 840, 846, 847, 0, 835, 841, 838, 838, 839, 851, - 845, 839, 839, 840, 841, 844, 839, 843, 843, 845, - 844, 842, 839, 846, 847, 848, 839, 849, 846, 847, - 839, 851, 850, 852, 849, 839, 851, 854, 839, 839, - 855, 856, 0, 839, 857, 901, 852, 853, 0, 839, - 850, 848, 848, 839, 849, 0, 853, 0, 863, 850, - 852, 859, 861, 856, 864, 866, 0, 857, 856, 854, - 865, 857, 855, 0, 853, 858, 864, 901, 861, 865, + 814, 823, 825, 814, 826, 829, 819, 824, 832, 830, + 831, 822, 826, 833, 834, 835, 832, 837, 0, 845, + 822, 859, 831, 837, 825, 833, 824, 830, 829, 825, + 835, 826, 829, 839, 834, 832, 830, 831, 836, 838, + 833, 834, 835, 840, 837, 841, 836, 849, 838, 842, + 843, 845, 841, 859, 839, 840, 842, 848, 846, 847, + 839, 855, 0, 0, 848, 836, 838, 850, 843, 849, + 840, 846, 841, 852, 849, 851, 842, 843, 847, 853, + 851, 852, 850, 854, 848, 846, 847, 855, 855, 857, + 858, 861, 853, 870, 850, 860, 0, 854, 0, 0, - 858, 863, 858, 866, 858, 863, 858, 859, 859, 861, - 867, 864, 866, 858, 0, 867, 869, 865, 870, 868, - 871, 0, 858, 872, 873, 878, 870, 858, 880, 858, - 874, 858, 868, 858, 869, 875, 872, 873, 876, 871, - 876, 877, 867, 869, 875, 870, 868, 871, 874, 879, - 872, 873, 878, 882, 885, 880, 883, 874, 884, 887, - 886, 879, 875, 877, 0, 876, 884, 886, 877, 888, - 890, 892, 894, 889, 902, 891, 879, 882, 883, 889, - 882, 885, 891, 883, 893, 884, 887, 886, 895, 897, - 903, 888, 896, 892, 894, 899, 888, 890, 892, 894, + 852, 865, 870, 857, 863, 862, 853, 851, 858, 0, + 854, 856, 864, 861, 856, 856, 857, 858, 861, 856, + 870, 860, 860, 862, 896, 856, 863, 865, 865, 856, + 866, 863, 862, 856, 864, 867, 868, 866, 856, 864, + 871, 856, 856, 872, 873, 0, 856, 869, 0, 878, + 874, 896, 856, 867, 876, 0, 856, 866, 868, 880, + 869, 882, 867, 868, 0, 878, 873, 881, 0, 919, + 882, 873, 871, 874, 869, 872, 878, 874, 875, 881, + 876, 876, 880, 875, 883, 875, 880, 875, 882, 875, + 884, 885, 887, 889, 881, 884, 875, 886, 888, 890, - 889, 896, 891, 893, 898, 904, 902, 905, 908, 899, - 897, 893, 903, 906, 895, 895, 897, 903, 0, 896, - 907, 906, 899, 909, 898, 905, 910, 912, 911, 0, - 909, 898, 911, 910, 905, 908, 907, 904, 913, 914, - 906, 915, 919, 917, 913, 916, 914, 907, 918, 919, - 909, 913, 917, 910, 921, 911, 915, 922, 916, 912, - 920, 923, 920, 921, 925, 913, 914, 929, 915, 919, - 917, 913, 916, 924, 918, 918, 930, 924, 928, 922, - 931, 921, 927, 928, 922, 929, 925, 920, 923, 932, - 927, 925, 932, 931, 929, 930, 933, 934, 935, 936, + 887, 919, 883, 0, 885, 875, 889, 894, 895, 894, + 875, 883, 875, 892, 875, 886, 875, 888, 885, 887, + 889, 890, 884, 891, 886, 888, 890, 897, 893, 898, + 895, 892, 903, 900, 894, 895, 891, 893, 902, 897, + 892, 901, 904, 905, 906, 907, 902, 908, 911, 904, + 891, 907, 913, 0, 897, 893, 898, 900, 920, 903, + 900, 910, 912, 901, 921, 902, 906, 911, 901, 904, + 905, 906, 907, 909, 908, 911, 914, 915, 913, 913, + 909, 916, 917, 910, 912, 914, 921, 922, 910, 912, + 920, 921, 0, 923, 924, 926, 917, 925, 915, 927, - 924, 932, 0, 930, 0, 937, 939, 931, 941, 927, - 928, 935, 942, 938, 939, 946, 932, 941, 933, 932, - 940, 940, 934, 933, 934, 935, 955, 943, 937, 938, - 944, 936, 937, 939, 942, 941, 943, 944, 946, 942, - 938, 947, 946, 948, 949, 950, 955, 940, 951, 952, - 947, 948, 954, 955, 943, 953, 956, 944, 950, 949, - 951, 952, 958, 953, 957, 964, 959, 961, 947, 960, - 948, 949, 950, 957, 954, 951, 952, 963, 956, 954, - 958, 960, 953, 956, 962, 965, 966, 969, 961, 958, - 962, 957, 959, 959, 961, 967, 960, 964, 971, 963, + 909, 916, 924, 914, 915, 928, 927, 930, 916, 917, + 929, 923, 928, 925, 929, 934, 933, 931, 932, 922, + 923, 924, 926, 931, 925, 932, 927, 935, 934, 936, + 931, 933, 928, 937, 941, 940, 935, 929, 939, 930, + 937, 943, 934, 933, 931, 932, 938, 939, 938, 942, + 931, 945, 947, 942, 935, 936, 936, 940, 948, 945, + 937, 941, 940, 943, 946, 939, 952, 949, 943, 946, + 947, 950, 954, 938, 950, 953, 942, 948, 945, 947, + 949, 951, 955, 950, 951, 948, 0, 957, 953, 0, + 956, 952, 0, 952, 949, 957, 946, 960, 950, 958, - 970, 972, 973, 0, 963, 976, 974, 978, 0, 988, - 972, 962, 966, 966, 969, 973, 971, 965, 974, 975, - 979, 967, 967, 970, 0, 971, 978, 970, 972, 973, - 977, 976, 976, 974, 978, 980, 981, 977, 982, 975, - 983, 988, 979, 982, 981, 983, 975, 979, 980, 984, - 985, 986, 987, 989, 989, 992, 984, 977, 985, 986, - 987, 990, 980, 981, 991, 993, 994, 995, 0, 990, - 982, 997, 983, 993, 994, 995, 984, 985, 986, 987, - 989, 996, 1001, 999, 997, 991, 1000, 992, 990, 996, - 998, 991, 993, 994, 995, 999, 998, 1003, 997, 1002, + 958, 950, 953, 951, 954, 955, 956, 959, 951, 955, + 964, 951, 961, 962, 957, 966, 959, 956, 965, 960, + 962, 961, 968, 966, 960, 972, 958, 965, 967, 969, + 971, 973, 970, 964, 959, 968, 976, 964, 971, 961, + 962, 969, 966, 967, 970, 965, 974, 972, 977, 968, + 979, 973, 972, 975, 976, 967, 969, 971, 973, 970, + 978, 980, 975, 976, 981, 982, 983, 980, 974, 984, + 0, 979, 978, 974, 977, 977, 985, 979, 987, 0, + 975, 988, 989, 990, 0, 994, 981, 978, 980, 992, + 0, 981, 990, 991, 993, 984, 984, 982, 983, 996, - 1004, 1006, 1005, 1007, 1008, 0, 1001, 0, 996, 1001, - 999, 1013, 1000, 1000, 1002, 1006, 1009, 998, 1008, 1015, - 1009, 1007, 1004, 1012, 1003, 1005, 1002, 1004, 1006, 1005, - 1007, 1008, 1011, 1009, 1012, 1014, 1017, 1016, 1013, 1011, - 1019, 1009, 1015, 1009, 1016, 1017, 1015, 1009, 1018, 1020, - 1012, 1024, 1022, 1026, 1025, 1018, 1028, 1014, 0, 1011, - 1009, 1022, 1014, 1017, 1016, 1030, 1031, 1033, 0, 1034, - 1035, 1040, 1019, 1024, 1037, 1018, 1020, 1031, 1024, 1022, - 1025, 1025, 1035, 1028, 1036, 1026, 1036, 1037, 1038, 1041, - 1039, 1033, 1030, 1031, 1033, 1034, 1034, 1035, 1040, 1042, + 989, 992, 985, 985, 988, 987, 991, 997, 988, 989, + 990, 994, 994, 0, 993, 995, 992, 998, 996, 999, + 991, 993, 995, 1000, 1006, 1002, 996, 999, 1000, 997, + 998, 1001, 1002, 1003, 997, 1004, 1001, 1005, 1007, 1007, + 1008, 1003, 995, 1004, 998, 1005, 999, 1009, 1008, 1010, + 1011, 1012, 1002, 1013, 0, 1000, 1006, 1015, 1011, 1012, + 1003, 1013, 1004, 1001, 1005, 1007, 1016, 1008, 1009, 1018, + 1015, 1014, 1016, 1017, 1009, 1019, 1020, 1011, 1012, 1014, + 1013, 1010, 1021, 1022, 1015, 1017, 1025, 1024, 1023, 1031, + 1029, 1020, 1026, 1016, 1038, 1018, 1018, 1029, 1014, 1019, - 1044, 1037, 1039, 1043, 1045, 1044, 1042, 1050, 0, 1046, - 1038, 1036, 1041, 1047, 0, 1038, 1041, 1039, 1053, 1048, - 1045, 1047, 1052, 0, 1051, 1054, 1042, 1044, 0, 1043, - 1043, 1045, 1046, 1051, 1050, 1052, 1046, 1058, 1057, 1061, - 1047, 1048, 1060, 1055, 1053, 1053, 1048, 1054, 1056, 1052, - 1055, 1051, 1054, 1059, 1062, 1056, 1057, 1064, 1067, 1058, - 1059, 1061, 0, 1066, 1058, 1057, 1061, 1060, 1072, 1060, - 1055, 1063, 1069, 1068, 1071, 1056, 1066, 1071, 1063, 1073, - 1059, 1068, 1074, 1076, 1075, 1067, 1062, 1077, 1080, 1064, - 1066, 1074, 0, 1069, 1072, 1072, 1075, 1078, 1063, 1069, + 1017, 1024, 1019, 1020, 1025, 1022, 1026, 1030, 1027, 1021, + 1022, 1023, 1027, 1025, 1024, 1023, 1031, 1029, 1030, 1026, + 1032, 1033, 1034, 1035, 1037, 1027, 1038, 1036, 1039, 1041, + 1035, 1037, 0, 1027, 1030, 1027, 1036, 1043, 1041, 1027, + 1044, 1045, 1032, 1047, 1033, 1034, 0, 1032, 1033, 1034, + 1035, 1037, 1027, 1049, 1036, 1039, 1041, 1050, 1052, 1043, + 1053, 1055, 1054, 1055, 1043, 1056, 1044, 1044, 1050, 1057, + 1047, 1058, 1059, 1045, 1054, 1062, 1063, 1060, 1056, 1064, + 1049, 1063, 1052, 1058, 1050, 1052, 1053, 1053, 1055, 1054, + 1061, 1057, 1056, 1065, 1069, 1064, 1057, 1061, 1058, 1059, - 1068, 1071, 1077, 1081, 1078, 1073, 1073, 1076, 1082, 1074, - 1076, 1075, 1079, 1085, 1077, 1079, 1083, 1084, 1086, 1084, - 1080, 1087, 1088, 1091, 1078, 1081, 1082, 1079, 0, 1092, - 1081, 1088, 1093, 1089, 1096, 1082, 1079, 1085, 1083, 1079, - 1085, 1089, 1079, 1083, 1084, 1090, 1095, 1087, 1087, 1088, - 1086, 1092, 1090, 1094, 1079, 1091, 1092, 1094, 1098, 1097, - 1089, 1096, 1099, 1100, 1093, 1101, 1102, 1098, 1095, 1099, - 1100, 1111, 1090, 1095, 1104, 1105, 1103, 1106, 1101, 1102, - 1094, 1097, 1108, 1113, 1106, 1098, 1097, 1107, 1104, 1099, - 1100, 1103, 1101, 1102, 1107, 1108, 1109, 0, 1111, 1112, + 1060, 1062, 1062, 1063, 1060, 1066, 1064, 1067, 1073, 1070, + 1071, 0, 1072, 1066, 0, 1074, 1065, 1061, 1070, 1075, + 1065, 1069, 1074, 1071, 1078, 1076, 1075, 1077, 1079, 1067, + 1073, 1078, 1066, 1081, 1067, 1073, 1070, 1071, 1072, 1072, + 1080, 1082, 1074, 1076, 1083, 1085, 1075, 1086, 1082, 1077, + 1088, 1078, 1076, 1079, 1077, 1079, 1087, 1090, 1085, 1091, + 1090, 1092, 1080, 1096, 1087, 1081, 1093, 1080, 1082, 1094, + 1095, 1088, 1085, 1100, 1086, 1093, 1083, 1088, 0, 1101, + 1097, 1094, 1102, 1087, 1090, 1091, 1091, 1092, 1092, 1096, + 1096, 1098, 1105, 1093, 1095, 1097, 1094, 1095, 1098, 1099, - 1115, 1104, 1109, 1103, 1106, 1113, 1112, 1105, 1114, 1108, - 1113, 1116, 1115, 1117, 1107, 1119, 1117, 1120, 0, 1118, - 1123, 1121, 1128, 1109, 1116, 1125, 1112, 1115, 1118, 1120, - 1125, 1123, 1129, 1119, 1114, 1114, 1122, 1125, 1116, 1122, - 1117, 1121, 1119, 1127, 1120, 1127, 1118, 1123, 1121, 1128, - 1130, 1132, 1125, 1131, 1122, 0, 1133, 1125, 1134, 1129, - 1135, 1131, 1138, 1122, 1137, 1139, 1122, 1133, 1135, 1147, - 1127, 1147, 1136, 1132, 1130, 1136, 1134, 1130, 1132, 1140, - 1131, 1141, 1137, 1133, 1142, 1134, 1140, 1135, 1143, 1144, - 1136, 1137, 1139, 1142, 1138, 1141, 1147, 1145, 1148, 1136, + 1102, 1101, 1099, 1103, 1106, 1100, 1101, 1097, 1104, 1102, + 1104, 1107, 1108, 1111, 1099, 1110, 1105, 1113, 1098, 1105, + 1109, 1108, 1110, 1099, 1112, 1103, 1099, 1114, 1109, 1099, + 1103, 1114, 1116, 1115, 1117, 1104, 1106, 1107, 1107, 1108, + 1121, 1099, 1110, 1118, 1125, 1111, 1112, 1109, 0, 1113, + 1119, 1112, 1118, 1121, 1114, 1115, 1117, 1119, 1120, 1116, + 1115, 1117, 1122, 1123, 1126, 1120, 1124, 1121, 1128, 1131, + 1118, 1126, 1127, 0, 1134, 1122, 1125, 1119, 1123, 1127, + 1124, 1128, 1129, 1133, 1136, 1120, 1135, 1132, 1129, 1122, + 1123, 1126, 1140, 1124, 1132, 1128, 1131, 1136, 1135, 1127, - 1144, 1143, 1136, 1149, 1151, 1152, 1140, 1148, 1141, 1150, - 1158, 1142, 1145, 1156, 1153, 1143, 1144, 1155, 1156, 1160, - 1150, 1161, 1151, 1180, 1145, 1148, 1155, 1152, 1153, 1149, - 1149, 1151, 1152, 1163, 1154, 1162, 1150, 1154, 1159, 1165, - 1153, 1153, 1158, 1161, 1155, 1156, 1165, 1159, 1161, 1166, - 1180, 1160, 1154, 1168, 1163, 1153, 1167, 1172, 1173, 1168, - 1163, 1154, 1176, 1171, 1154, 1159, 1165, 1162, 1177, 1174, - 1167, 1171, 1173, 0, 1175, 1186, 1172, 1168, 1174, 1177, - 1168, 1166, 1175, 1167, 1172, 1173, 1168, 1182, 1178, 1183, - 1171, 1181, 1189, 1186, 1176, 1177, 1174, 1178, 1181, 1184, + 1134, 1134, 1139, 1137, 1140, 1133, 1137, 1138, 1141, 1129, + 1133, 1136, 1143, 1135, 1132, 1142, 1138, 1148, 1142, 1140, + 1139, 1149, 1147, 1143, 1147, 1152, 1145, 1150, 1141, 1139, + 1137, 1145, 1151, 1142, 1138, 1141, 1159, 1154, 1145, 1143, + 1151, 0, 1142, 1157, 1148, 1142, 1153, 1152, 1149, 1147, + 1158, 1150, 1152, 1145, 1150, 1154, 0, 1153, 1145, 1151, + 1155, 1157, 1156, 1159, 1154, 1156, 1162, 1160, 1155, 1161, + 1157, 1163, 0, 1153, 1160, 1162, 1165, 1164, 1172, 1167, + 1156, 1167, 1158, 1161, 1163, 1169, 1168, 1155, 1164, 1156, + 1170, 1165, 1156, 1162, 1160, 1168, 1161, 1171, 1163, 1175, - 1185, 1175, 1186, 1187, 1189, 1190, 1196, 1187, 1192, 1193, - 1182, 1183, 1191, 1196, 1182, 1178, 1183, 1197, 1181, 1189, - 1200, 1184, 1185, 1194, 1193, 1191, 1184, 1185, 1192, 1195, - 1187, 1198, 1190, 1196, 1199, 1192, 1193, 1195, 1194, 1191, - 1201, 1200, 1202, 1199, 1203, 1206, 1198, 1200, 1205, 1197, - 1194, 1207, 1209, 1208, 1211, 1210, 1195, 0, 1198, 1211, - 0, 1199, 1210, 1206, 1212, 1213, 1202, 1201, 1208, 1202, - 1205, 1203, 1206, 1212, 1215, 1205, 1214, 1209, 1207, 1209, - 1208, 1211, 1210, 1216, 1217, 1221, 1218, 1213, 1220, 1215, - 1219, 1212, 1213, 1222, 1214, 1216, 1223, 1219, 1232, 1218, + 1172, 1170, 1173, 1165, 1164, 1172, 1167, 1174, 1175, 1176, + 1174, 1169, 1169, 1168, 1176, 1171, 1173, 1170, 1178, 1180, + 1181, 1179, 1182, 1183, 1171, 1174, 1175, 0, 1173, 1173, + 1179, 1186, 1184, 1187, 1174, 0, 1189, 1174, 1186, 1192, + 1188, 1176, 1189, 1173, 1182, 1193, 1180, 1192, 1179, 1182, + 1178, 1201, 1181, 1184, 1188, 1183, 1194, 0, 1186, 1184, + 1189, 1197, 1195, 1189, 1193, 1187, 1192, 1188, 1196, 1189, + 1194, 1195, 1193, 1198, 1202, 1203, 1196, 1199, 1201, 1207, + 0, 1202, 0, 1194, 1198, 1204, 1199, 1205, 1206, 1195, + 1208, 1210, 1211, 1197, 1208, 1196, 1213, 1207, 1203, 0, - 1220, 1215, 1223, 1214, 1218, 1226, 1217, 1225, 1224, 1228, - 1216, 1217, 1221, 1218, 1225, 1220, 1224, 1219, 1229, 1230, - 1227, 1231, 1235, 1223, 1229, 1222, 1218, 1227, 1233, 1236, - 1232, 1237, 1226, 1239, 1225, 1224, 1228, 1238, 1236, 1238, - 1240, 1242, 1241, 1246, 1231, 1229, 1230, 1227, 1231, 1250, - 0, 1244, 1233, 0, 1235, 1233, 1236, 1239, 1244, 1245, - 1239, 1254, 1250, 1237, 1238, 1251, 1245, 1240, 1241, 1241, - 1243, 1243, 1243, 1242, 1247, 1246, 1250, 1243, 1244, 1249, - 1252, 1247, 1253, 1257, 1249, 1243, 1245, 1255, 1256, 1257, - 1251, 1258, 1251, 1254, 1253, 1256, 1252, 1243, 1243, 1243, + 1198, 1202, 1203, 1210, 1199, 1214, 1207, 1204, 1212, 1205, + 1206, 1215, 1204, 1218, 1205, 1206, 1213, 1208, 1210, 1211, + 1214, 1212, 1216, 1213, 1217, 1219, 1215, 1220, 1222, 1221, + 1216, 1217, 1214, 1223, 1224, 1212, 1220, 1226, 1215, 1228, + 1219, 1231, 1230, 1229, 1227, 1218, 0, 0, 1231, 1216, + 1221, 1217, 1219, 1235, 1220, 1222, 1221, 1223, 1229, 1226, + 1223, 1224, 1227, 1236, 1226, 1233, 1228, 1230, 1231, 1230, + 1229, 1227, 1232, 1234, 1233, 1235, 1237, 1232, 1241, 1239, + 1235, 1236, 1234, 1238, 1240, 1241, 1242, 1243, 1244, 1248, + 1236, 1237, 1233, 0, 1250, 1238, 1246, 1240, 1242, 1232, - 1260, 1247, 1259, 1259, 1243, 1255, 1261, 1252, 1263, 1253, - 1257, 1249, 1262, 1261, 1255, 1256, 1264, 1262, 1258, 1267, - 1269, 1271, 1268, 1279, 1270, 0, 1260, 1260, 1268, 1259, - 1273, 1273, 1272, 1261, 1263, 1263, 1270, 1267, 1274, 1262, - 1278, 1271, 1276, 1264, 1275, 1275, 1267, 1269, 1271, 1268, - 1272, 1270, 1281, 1276, 1280, 1279, 1282, 1273, 1283, 1272, - 1284, 1280, 1278, 0, 1274, 1274, 1286, 1278, 1287, 1276, - 1285, 1275, 1281, 1294, 1288, 1287, 1289, 1291, 1290, 1281, - 1293, 1280, 1288, 0, 1286, 1294, 1291, 1284, 1282, 0, - 1283, 1289, 1285, 1286, 1295, 1287, 0, 1285, 1292, 1292, + 1234, 1239, 1240, 1237, 1246, 1241, 1239, 1252, 1253, 1245, + 1238, 1240, 1247, 1242, 1243, 1245, 1248, 1255, 1249, 1247, + 1244, 1250, 1251, 1246, 1240, 1249, 1254, 1257, 1251, 1258, + 1259, 1253, 0, 1261, 1252, 1253, 1245, 1262, 1258, 1247, + 1260, 1255, 1260, 1263, 1255, 1249, 1264, 0, 1266, 1251, + 1268, 0, 0, 1272, 1267, 1266, 1258, 1261, 1254, 1257, + 1261, 1267, 1259, 1271, 1262, 1273, 1272, 1260, 1271, 1263, + 1263, 1277, 1265, 1265, 1265, 1266, 1269, 1274, 1264, 1265, + 1272, 1267, 1268, 1269, 1275, 1276, 1280, 1265, 1279, 1277, + 1273, 1286, 1273, 1274, 1279, 1271, 1275, 1282, 1277, 1265, - 1294, 1288, 1290, 1289, 1291, 1290, 1293, 1293, 1297, 1300, - 1295, 1298, 1299, 1301, 1303, 1302, 1297, 1295, 1305, 1308, - 1299, 1295, 1306, 1298, 1309, 1292, 1308, 1310, 1306, 1312, - 1315, 1307, 1300, 1302, 1301, 1297, 1300, 1295, 1298, 1299, - 1301, 1303, 1302, 1304, 1307, 1305, 1308, 1311, 1304, 1306, - 1313, 1313, 1311, 1314, 1310, 1318, 1309, 1317, 1307, 1304, - 1321, 1312, 1315, 1320, 1322, 1320, 1319, 1323, 1314, 1322, - 1304, 1324, 1317, 1326, 1328, 1304, 1327, 1313, 1318, 1311, - 1314, 1319, 1318, 1329, 1317, 1331, 1324, 1330, 1332, 1333, - 1320, 1322, 1321, 1319, 1330, 1335, 1337, 1326, 1324, 1323, + 1265, 1265, 1278, 1269, 1274, 1283, 1265, 1281, 1281, 1278, + 1285, 1275, 1283, 1280, 1284, 1279, 1290, 1276, 1286, 1284, + 1289, 1291, 1290, 1282, 1282, 1293, 1294, 1292, 0, 1278, + 1295, 1295, 1283, 1296, 1281, 1298, 1285, 1285, 1289, 1292, + 1301, 1284, 1300, 1290, 1294, 1293, 1298, 1289, 1291, 1297, + 1297, 1302, 1293, 1294, 1292, 1303, 1304, 1295, 1302, 1296, + 1296, 1305, 1298, 1306, 1300, 1307, 0, 1308, 1311, 1300, + 1309, 1310, 1301, 0, 0, 1303, 1297, 1309, 1302, 1310, + 1312, 0, 1303, 1311, 1315, 1308, 0, 1307, 1304, 1317, + 1306, 1313, 1307, 1305, 1308, 1311, 1316, 1309, 1310, 1323, - 1326, 1328, 1327, 1327, 1334, 1339, 1340, 0, 1344, 1332, - 1329, 1333, 1342, 1335, 1330, 1332, 1333, 1331, 1337, 1343, - 1345, 1340, 1335, 1337, 1347, 1334, 1346, 1342, 1354, 1339, - 1348, 1334, 1339, 1340, 1343, 1344, 1349, 1348, 1345, 1342, - 1350, 1352, 1351, 1353, 1359, 1355, 1343, 1345, 1346, 1350, - 1351, 1347, 1358, 1346, 1349, 1357, 1360, 1348, 1355, 1362, - 1354, 1358, 1359, 1349, 1352, 1353, 1357, 1350, 1352, 1351, - 1353, 1359, 1355, 1364, 1360, 1366, 1367, 1368, 1369, 1358, - 1370, 1357, 1357, 1360, 1364, 1371, 1362, 1366, 1369, 1367, - 1372, 1376, 1373, 1357, 1375, 0, 1377, 1378, 1376, 0, + 1313, 1314, 1314, 1320, 1312, 1317, 1319, 1312, 1316, 1322, + 1315, 1315, 1317, 1324, 1319, 1320, 1317, 1322, 1313, 1325, + 1326, 1328, 1323, 1316, 0, 1329, 1323, 1332, 1314, 1330, + 1320, 1329, 1317, 1319, 1324, 1333, 1322, 1325, 1327, 0, + 1324, 1335, 1330, 1327, 1331, 1334, 1325, 1326, 1328, 1337, + 1334, 1331, 1329, 1338, 1327, 1341, 1330, 1336, 1336, 1332, + 1340, 1343, 1333, 1343, 1337, 1327, 1342, 1344, 1346, 1345, + 1327, 1331, 0, 1335, 1345, 1340, 1337, 1334, 1341, 1347, + 1349, 1342, 1341, 1350, 1336, 1338, 1351, 1340, 1343, 1352, + 1353, 1354, 0, 1342, 1347, 0, 1345, 1353, 1355, 1344, - 1364, 1380, 1366, 1367, 1414, 1369, 1370, 1370, 1389, 1368, - 1371, 1373, 1371, 0, 1375, 1378, 1380, 1372, 1376, 1373, - 1379, 1375, 1377, 1377, 1378, 1381, 1379, 1382, 1380, 1383, - 1383, 1384, 1385, 1388, 1387, 1389, 1414, 1390, 1392, 0, - 1381, 1387, 1382, 1384, 1391, 1385, 1390, 1379, 1388, 1397, - 0, 1391, 1381, 1385, 1382, 1393, 1383, 1396, 1384, 1385, - 1388, 1387, 1392, 1394, 1390, 1392, 1398, 1399, 1400, 1402, - 1394, 1391, 1385, 1403, 1397, 1398, 1397, 1393, 1405, 1396, - 1406, 1408, 1393, 1425, 1396, 1407, 1407, 1402, 1400, 1399, - 1394, 1405, 1409, 1398, 1399, 1400, 1402, 1412, 1403, 1410, + 1346, 1357, 1356, 1358, 1349, 1360, 1347, 1349, 0, 1350, + 1350, 1362, 1367, 1351, 0, 1369, 1352, 1353, 1363, 1355, + 1371, 1358, 1357, 1354, 1356, 1355, 1365, 1360, 1357, 1356, + 1358, 1366, 1360, 1363, 1368, 1362, 1372, 1369, 1362, 1367, + 1370, 1365, 1369, 1372, 0, 1363, 1366, 1371, 1373, 1375, + 1374, 1376, 1368, 1365, 1378, 0, 1379, 1375, 1366, 1374, + 1377, 1368, 1370, 1372, 1382, 1386, 1373, 1370, 1381, 1379, + 1383, 1384, 1390, 1382, 1376, 1373, 1375, 1374, 1376, 1381, + 1391, 1392, 1377, 1379, 1390, 1388, 1378, 1377, 1383, 1384, + 1393, 1382, 1386, 1391, 1381, 1381, 1388, 1383, 1384, 1390, - 1403, 1411, 1413, 1408, 1416, 1405, 1412, 1406, 1408, 1413, - 1415, 1417, 1407, 1421, 1419, 1425, 1422, 1409, 1416, 1409, - 1420, 1410, 1419, 1411, 1412, 1427, 1410, 1423, 1411, 1413, - 1417, 1416, 1415, 1420, 1426, 0, 1429, 1415, 1417, 1423, - 1421, 1419, 1422, 1422, 1424, 1428, 1431, 1420, 1430, 1431, - 1427, 1424, 1427, 1432, 1423, 1434, 1426, 0, 0, 1433, - 1428, 1426, 1429, 1429, 1431, 1433, 1435, 1438, 1436, 1439, - 1442, 1424, 1428, 1431, 1430, 1430, 1431, 1442, 1432, 1443, - 1432, 1444, 1434, 1436, 1435, 1441, 1433, 1451, 1443, 1438, - 1446, 1439, 1444, 1435, 1438, 1436, 1439, 1442, 1448, 1441, + 1393, 1394, 0, 1396, 1395, 1397, 1381, 1391, 1400, 0, + 1401, 0, 1388, 1392, 1399, 1400, 1403, 1393, 1404, 1411, + 1402, 0, 1403, 0, 1397, 1405, 1411, 1394, 1394, 1395, + 1396, 1395, 1397, 1404, 1399, 1400, 1401, 1401, 1402, 1406, + 1405, 1399, 1409, 1403, 1408, 1404, 1411, 1402, 1407, 1407, + 1412, 1413, 1405, 1414, 1406, 1409, 1408, 1415, 0, 1416, + 1421, 1418, 1414, 1409, 1415, 1412, 1406, 1417, 1418, 1409, + 1420, 1408, 1422, 1423, 1430, 1407, 1424, 1412, 1413, 1427, + 1414, 1422, 1409, 1416, 1415, 1421, 1416, 1421, 1418, 1417, + 1426, 1432, 1420, 1434, 1417, 1423, 1424, 1420, 1429, 1422, - 1450, 1449, 1450, 1446, 1452, 1451, 1443, 1454, 1444, 1456, - 1455, 1446, 1441, 1449, 1451, 1453, 1457, 1446, 1455, 1448, - 1460, 1458, 1464, 1466, 1459, 1448, 1467, 1450, 1449, 1459, - 1446, 1452, 1456, 1453, 1454, 1458, 1456, 1455, 1457, 1460, - 1465, 1466, 1453, 1457, 1461, 1471, 1468, 1460, 1458, 1464, - 1466, 1461, 1470, 1467, 1465, 1469, 1459, 1473, 1472, 0, - 1476, 1470, 1477, 0, 1474, 1465, 1465, 1465, 1480, 1477, - 1469, 1461, 1468, 1468, 1479, 1486, 1479, 1471, 0, 1470, - 1472, 1465, 1469, 1476, 1473, 1472, 1474, 1476, 1482, 1477, - 1480, 1474, 1465, 1481, 1483, 1480, 1484, 1481, 1485, 1487, + 1423, 1430, 1433, 1424, 1427, 1436, 1427, 0, 1426, 1431, + 1431, 1429, 1435, 1432, 1436, 1434, 1437, 1426, 1432, 1438, + 1434, 1440, 1439, 1437, 1449, 1429, 1441, 1433, 1444, 1433, + 1443, 1445, 1436, 1446, 1435, 1440, 1431, 0, 1443, 1435, + 1447, 1444, 1450, 1437, 1439, 1441, 1451, 1448, 1440, 1439, + 1452, 1438, 1447, 1441, 1448, 1444, 1449, 1443, 1445, 1446, + 1446, 1453, 0, 1454, 1450, 1452, 0, 1447, 0, 1450, + 1456, 1451, 1458, 1451, 1448, 1455, 1457, 1452, 1455, 1460, + 1459, 0, 1457, 0, 1466, 0, 1462, 1453, 1453, 1454, + 1454, 1466, 1463, 1455, 1460, 1456, 1465, 1456, 1459, 1458, - 1482, 1479, 1486, 1490, 1490, 1484, 1488, 1489, 1494, 1485, - 1495, 1491, 1494, 1495, 1502, 1482, 1483, 0, 1488, 1491, - 1481, 1483, 1487, 1484, 1493, 1485, 1487, 1498, 1496, 1489, - 1490, 1501, 1493, 1488, 1489, 1494, 1496, 1495, 1491, 1497, - 1499, 1502, 1498, 1501, 1503, 1497, 1499, 1504, 1508, 1505, - 1506, 1493, 1507, 1509, 1498, 1496, 1511, 1510, 1501, 1512, - 0, 1504, 1505, 0, 1506, 1514, 1497, 1499, 1503, 1510, - 1511, 1503, 1515, 1517, 1504, 1508, 1505, 1506, 1507, 1507, - 1509, 1518, 1519, 1511, 1510, 1512, 1512, 1513, 1518, 1519, - 1513, 1520, 1514, 1521, 1515, 1517, 1522, 1524, 1525, 1515, + 1467, 1468, 1455, 1457, 1470, 1455, 1460, 1459, 1462, 1467, + 1465, 1466, 1468, 1462, 1463, 1472, 1475, 1470, 1473, 1463, + 1474, 1476, 1474, 1465, 1478, 1470, 1480, 1467, 1468, 1479, + 1473, 1470, 1477, 1481, 1475, 1483, 1472, 1479, 1482, 1484, + 1483, 1488, 1472, 1475, 1470, 1473, 1490, 1474, 1476, 1480, + 1477, 1478, 1482, 1480, 1485, 1481, 1479, 1489, 1484, 1477, + 1481, 1485, 1491, 1493, 1490, 1482, 1484, 1483, 1488, 1492, + 1494, 1489, 1495, 1490, 1497, 0, 1500, 0, 1493, 1494, + 1496, 1485, 1489, 1489, 1489, 1501, 1498, 1502, 0, 1491, + 1493, 1504, 1501, 1504, 1505, 1492, 1492, 1494, 1489, 1500, - 1517, 1526, 1523, 1527, 1529, 1513, 1520, 1525, 1518, 1519, - 1523, 1531, 1529, 1528, 1513, 1532, 1534, 1513, 1520, 1533, - 1521, 1537, 1539, 1522, 1524, 1525, 1528, 1533, 1526, 1523, - 1527, 1529, 1535, 1531, 1536, 0, 1538, 1543, 1531, 1540, - 1528, 1535, 1532, 1534, 1541, 1537, 1533, 1540, 1537, 1539, - 1542, 1538, 0, 1545, 1549, 1536, 1541, 1551, 1542, 1535, - 1545, 1536, 1538, 1538, 1543, 1546, 1540, 1547, 1548, 1546, - 1553, 1541, 1554, 1554, 1550, 1556, 1552, 1542, 1538, 1547, - 1545, 1549, 1550, 1552, 1551, 1555, 0, 1560, 1557, 1559, - 1553, 1548, 1546, 1556, 1547, 1548, 1561, 1553, 1561, 1554, + 1508, 1497, 1496, 1500, 1495, 1507, 1511, 1496, 1498, 1489, + 1502, 1506, 1501, 1498, 1502, 1506, 1505, 1507, 1504, 1509, + 1510, 1505, 1508, 1513, 0, 1512, 1516, 1508, 1509, 1514, + 1527, 1510, 1507, 1511, 1516, 1513, 1515, 1515, 1506, 1519, + 0, 1518, 1520, 1519, 1523, 1520, 1509, 1510, 1512, 1518, + 1513, 1514, 1512, 1516, 1521, 1522, 1514, 1527, 1524, 1523, + 1526, 1522, 1521, 1515, 1524, 1528, 1519, 1530, 1518, 1520, + 1529, 1523, 1526, 1532, 1531, 1533, 1534, 1536, 1535, 1539, + 1530, 1521, 1522, 1537, 1529, 1524, 1540, 1526, 1531, 1528, + 1535, 1536, 1528, 1538, 1530, 1542, 1538, 1529, 1546, 1532, - 1563, 1550, 1556, 1552, 1559, 1562, 1563, 1564, 1565, 1560, - 1566, 1555, 1555, 1557, 1560, 1557, 1559, 1571, 1567, 1562, - 1568, 1569, 1566, 1561, 1576, 1578, 1574, 1563, 1570, 1564, - 1565, 1572, 1562, 1574, 1564, 1565, 1567, 1566, 1568, 1569, - 1577, 1570, 1576, 0, 1579, 1567, 1583, 1568, 1569, 1571, - 1582, 1576, 1579, 1574, 1572, 1570, 1590, 1578, 1572, 1585, - 1587, 1580, 1582, 1580, 1583, 1586, 1577, 1577, 1580, 1588, - 1579, 1579, 1587, 1583, 1585, 1591, 1586, 1582, 1592, 1579, - 1590, 1594, 1596, 1590, 1588, 1592, 1585, 1587, 1580, 1593, - 1580, 1597, 1586, 1598, 1599, 1602, 1588, 1591, 0, 1600, + 1532, 1531, 1533, 1534, 1536, 1535, 1539, 1543, 1540, 1537, + 1537, 1538, 1544, 1540, 1543, 1545, 1547, 1542, 1548, 1544, + 1538, 1549, 1542, 1538, 1550, 1546, 1548, 1551, 1552, 1554, + 1545, 1553, 1557, 1550, 1543, 1556, 1559, 1554, 1558, 1544, + 1560, 0, 1545, 1547, 1553, 1548, 1558, 1561, 1549, 1560, + 1564, 1550, 1562, 1565, 1551, 1552, 1554, 1556, 1553, 1557, + 1563, 1565, 1556, 1559, 1567, 1558, 1566, 1560, 1561, 1568, + 1572, 1573, 1567, 1574, 1561, 1563, 1562, 1564, 1566, 1562, + 1565, 1570, 1572, 1576, 1575, 1571, 1563, 1563, 1570, 1571, + 1580, 1567, 1575, 1566, 1573, 1578, 1568, 1572, 1573, 1577, - 0, 1601, 1591, 1604, 1593, 1592, 1603, 1608, 1594, 1596, - 1602, 1604, 1600, 1597, 1605, 1607, 1593, 1609, 1597, 1603, - 1614, 1599, 1602, 1610, 1613, 1598, 1600, 1601, 1601, 1611, - 1604, 1608, 1612, 1603, 1608, 1616, 1611, 1613, 1607, 1612, - 1605, 1605, 1607, 1614, 1609, 1610, 1615, 1614, 1617, 1618, - 1610, 1613, 1619, 1615, 1621, 1622, 1611, 1616, 1623, 1612, - 1625, 1619, 1616, 1635, 1624, 1621, 1629, 1631, 1631, 0, - 1618, 1628, 1630, 1615, 1632, 1637, 1618, 1622, 1641, 1619, - 1617, 1621, 1622, 1624, 1628, 1625, 1634, 1625, 1636, 1638, - 1623, 1624, 1629, 1629, 1631, 1635, 1630, 1643, 1628, 1630, + 1574, 1581, 1563, 1579, 1579, 0, 1577, 1582, 1570, 1584, + 1576, 1575, 1571, 1585, 1596, 1578, 1580, 1580, 1586, 1581, + 1586, 1588, 1578, 1587, 1584, 1589, 1577, 1588, 1581, 1590, + 1579, 1591, 1582, 0, 1582, 1585, 1584, 1587, 1597, 1592, + 1585, 1593, 1594, 1591, 0, 1586, 1596, 1589, 1588, 1595, + 1587, 1590, 1589, 1601, 1603, 1602, 1590, 1592, 1591, 1593, + 1594, 1597, 1595, 1599, 1619, 1597, 1592, 1604, 1593, 1594, + 1599, 1601, 1605, 1607, 1605, 1604, 1595, 1608, 1611, 1605, + 1601, 1602, 1602, 1610, 1612, 1607, 1603, 1616, 1613, 1611, + 1599, 1619, 1615, 1604, 1604, 1608, 1612, 1618, 1610, 1605, - 1632, 1632, 1637, 1636, 1646, 1641, 1643, 1638, 1647, 1634, - 1648, 1650, 1652, 1634, 1653, 1636, 1638, 0, 1654, 1658, - 1655, 1656, 1663, 1660, 1643, 1655, 1646, 1658, 1667, 1654, - 1647, 1646, 1669, 1662, 1659, 1647, 1670, 1648, 1650, 1676, - 1653, 1653, 1672, 1656, 1652, 1654, 1658, 1655, 1656, 1659, - 1660, 1662, 1665, 1664, 1663, 1667, 1671, 1673, 1669, 1669, - 1662, 1659, 1664, 1670, 1665, 1675, 1676, 1672, 1674, 1672, - 1673, 1677, 1678, 1679, 0, 1681, 1680, 0, 1671, 1665, - 1664, 1674, 1682, 1671, 1673, 1680, 1684, 1675, 1679, 1683, - 1685, 1688, 1675, 1686, 1689, 1674, 0, 1682, 1677, 1678, + 1607, 1605, 1604, 1613, 1608, 1611, 1617, 1621, 1622, 1616, + 1610, 1612, 1618, 1617, 1616, 1613, 1615, 1623, 1624, 1615, + 1625, 1628, 0, 0, 1618, 1626, 0, 1627, 1629, 1630, + 1622, 1631, 1635, 1617, 1621, 1622, 1628, 1630, 1626, 1633, + 1634, 1629, 1643, 1636, 1637, 0, 0, 1625, 1628, 1623, + 1624, 1637, 1626, 1627, 1627, 1629, 1630, 1631, 1631, 1635, + 1639, 1638, 1633, 1640, 1634, 1636, 1633, 1634, 1638, 1641, + 1636, 1637, 1642, 1639, 1643, 1645, 1641, 1644, 1647, 1648, + 1649, 1650, 1651, 1661, 1645, 0, 1640, 1639, 1638, 1647, + 1640, 1655, 1656, 0, 1642, 1658, 1641, 1654, 1644, 1642, - 1679, 1681, 1681, 1680, 1683, 1685, 1684, 1687, 1692, 1682, - 1690, 1690, 1689, 1684, 1687, 1686, 1683, 1685, 1688, 1691, - 1686, 1689, 1692, 1694, 1693, 1696, 1691, 1693, 1695, 1697, - 0, 1704, 1705, 1700, 1687, 1692, 1694, 1690, 1697, 1698, - 1701, 1699, 1702, 1696, 1698, 1699, 1691, 1706, 1703, 1710, - 1694, 1693, 1696, 1701, 1695, 1695, 1697, 1700, 1704, 1705, - 1700, 1721, 1709, 1716, 1702, 1710, 1698, 1701, 1699, 1702, - 1703, 1709, 1712, 1706, 1706, 1703, 1710, 1713, 1714, 1712, - 1715, 1716, 1719, 1714, 1717, 1718, 1713, 1715, 1721, 1709, - 1716, 1717, 1722, 1723, 1718, 1724, 0, 1726, 0, 1712, + 1650, 1648, 1645, 1660, 1644, 1647, 1648, 1651, 1650, 1651, + 1654, 1663, 1649, 1657, 1657, 1661, 1656, 1655, 1655, 1656, + 1662, 1658, 1658, 1664, 1654, 1667, 1660, 1669, 1674, 1672, + 1660, 1673, 1676, 1678, 1679, 1662, 1669, 1680, 1663, 1681, + 1657, 1664, 1686, 1689, 1681, 1682, 1693, 1662, 1680, 1684, + 1664, 1672, 1667, 1673, 1669, 1674, 1672, 1684, 1673, 1676, + 1679, 1679, 1685, 1688, 1680, 1678, 1681, 1682, 1691, 1686, + 1690, 1696, 1682, 1693, 1695, 1689, 1684, 1685, 1698, 1690, + 1691, 1688, 1697, 1699, 1701, 1702, 1700, 1703, 1704, 1685, + 1688, 1707, 1705, 1706, 0, 1691, 1699, 1690, 1696, 1700, - 1732, 1725, 1723, 1730, 1713, 1714, 1726, 1715, 1719, 1719, - 1722, 1717, 1718, 1725, 1727, 1724, 1728, 1729, 1731, 1722, - 1723, 1734, 1724, 1727, 1726, 1729, 1733, 1728, 1725, 1735, - 1730, 0, 1732, 1734, 1740, 1733, 1736, 1735, 1739, 1737, - 1738, 1727, 1741, 1728, 1729, 1731, 1737, 1738, 1734, 1742, - 1743, 1754, 1747, 1733, 1745, 0, 1735, 1748, 1736, 1740, - 1739, 1740, 1745, 1736, 1748, 1739, 1737, 1738, 1752, 1741, - 1747, 1755, 1749, 1753, 1742, 1752, 1742, 1743, 1754, 1747, - 1749, 1745, 1756, 1755, 1748, 1757, 1762, 1758, 1761, 1760, - 1763, 1756, 1765, 1767, 1768, 1752, 1769, 1753, 1755, 1749, + 1695, 1695, 1706, 1698, 1697, 1698, 1701, 1705, 1708, 1697, + 1699, 1701, 1702, 1700, 1703, 1704, 1709, 1707, 1707, 1705, + 1706, 1710, 1711, 1708, 1712, 1713, 1714, 1715, 1716, 1716, + 1718, 1709, 1713, 1717, 1720, 1708, 1719, 1711, 1721, 1719, + 1717, 1710, 0, 1709, 1718, 1715, 1712, 1720, 1710, 1711, + 1722, 1712, 1713, 1714, 1715, 1716, 1726, 1718, 1723, 1727, + 1717, 1720, 1728, 1719, 1721, 1721, 1724, 1723, 1722, 1725, + 1729, 1724, 1727, 1725, 1730, 1731, 0, 1722, 1732, 1735, + 1726, 1740, 1736, 1726, 1728, 1723, 1727, 1737, 1735, 1728, + 1740, 1746, 1729, 1724, 1741, 1737, 1725, 1729, 1736, 1741, - 1753, 1760, 1768, 1770, 1763, 1771, 0, 1775, 1778, 1756, - 1758, 1761, 1757, 1762, 1758, 1761, 1760, 1763, 1779, 1765, - 1767, 1768, 1776, 1769, 1777, 1770, 1778, 1776, 1780, 1782, - 1770, 1781, 1771, 1775, 1775, 1778, 1785, 1782, 1777, 0, - 1779, 1780, 1783, 1786, 1787, 1779, 1789, 1788, 1785, 1776, - 1790, 1777, 1791, 1781, 1792, 1780, 1782, 1793, 1781, 1788, - 1794, 1783, 0, 1785, 1795, 1786, 1787, 1798, 1796, 1783, - 1786, 1787, 1791, 1789, 1788, 1797, 1792, 1790, 1799, 1791, - 1796, 1792, 1794, 1803, 1802, 1804, 1805, 1794, 1803, 1793, - 1795, 1795, 1807, 1806, 1798, 1796, 1809, 1797, 1802, 1808, + 1739, 1730, 1731, 1742, 1732, 1732, 1735, 1739, 1740, 1736, + 1742, 1743, 1744, 1745, 1737, 1748, 1749, 1746, 1746, 1744, + 1755, 1741, 1745, 1750, 1751, 1752, 1753, 1739, 1757, 1743, + 1742, 1755, 1750, 1756, 1749, 1753, 1754, 1752, 1743, 1744, + 1745, 1756, 1748, 1749, 1751, 1754, 1758, 1755, 1759, 1760, + 1750, 1751, 1752, 1753, 1761, 1757, 1762, 1763, 1760, 1768, + 1756, 1764, 1765, 1754, 1762, 1766, 1761, 1770, 1764, 1765, + 1767, 1769, 1774, 1758, 1772, 0, 1760, 1781, 1775, 1763, + 1759, 1761, 1772, 1762, 1763, 1775, 1768, 1766, 1764, 1765, + 1774, 1780, 1766, 1784, 1770, 1767, 1769, 1767, 1769, 1774, - 0, 0, 1797, 1810, 0, 1799, 1811, 1804, 1809, 1812, - 1814, 1802, 1804, 1815, 1807, 1803, 1806, 1808, 1805, 1807, - 1806, 1820, 1810, 1809, 1812, 1817, 1808, 1818, 1811, 1816, - 1810, 1819, 1821, 1811, 1814, 1815, 1812, 1814, 1816, 1817, - 1815, 1827, 1829, 1824, 1831, 1818, 1825, 1820, 1820, 1819, - 1821, 1824, 1817, 1825, 1818, 1826, 1816, 1828, 1819, 1821, - 1829, 1839, 1830, 1826, 1832, 1828, 1834, 1837, 1827, 1829, - 1824, 1831, 1832, 1825, 1830, 1838, 1836, 1840, 1834, 1841, - 0, 1843, 1826, 1836, 1828, 1847, 1844, 1846, 1839, 1830, - 1837, 1832, 1850, 1834, 1837, 1853, 1840, 1848, 1847, 1843, + 1776, 1772, 1779, 1783, 1781, 1775, 0, 1782, 1776, 1779, + 1785, 1787, 1783, 1788, 1789, 1780, 1792, 1790, 1780, 1782, + 1784, 1794, 1796, 1787, 1795, 1797, 1798, 1776, 1802, 1779, + 1783, 1790, 1795, 1785, 1782, 0, 1788, 1785, 1787, 1805, + 1788, 1789, 1804, 1792, 1790, 1803, 1806, 1797, 1794, 1796, + 1803, 1795, 1797, 1798, 1802, 1802, 1804, 1805, 1807, 1808, + 1810, 1813, 1809, 1812, 1815, 1816, 1805, 1817, 1806, 1804, + 1809, 1807, 1803, 1806, 1814, 1812, 1815, 1818, 1819, 1810, + 1820, 1808, 1822, 1813, 1821, 1807, 1808, 1810, 1813, 1809, + 1812, 1815, 1816, 1824, 1817, 1823, 1814, 1818, 1825, 1826, - 1844, 1841, 1858, 1836, 1840, 1859, 1841, 1838, 1843, 1848, - 1846, 1860, 1847, 1844, 1846, 1861, 1855, 1863, 1850, 1850, - 1857, 1864, 1853, 1855, 1848, 1862, 1867, 1857, 1858, 1858, - 1865, 0, 1859, 1866, 1868, 1860, 1869, 1873, 1860, 1865, - 1872, 1873, 1861, 1855, 1863, 1872, 1866, 1857, 1864, 1874, - 1875, 1862, 1862, 1876, 1877, 1876, 1878, 1865, 1867, 1869, - 1866, 1868, 1881, 1869, 1873, 1884, 1882, 1884, 1885, 1885, - 1874, 1890, 1872, 1889, 0, 1886, 1874, 1877, 1885, 1887, - 1876, 1877, 1875, 1878, 1881, 1892, 1889, 1888, 1887, 1881, - 1882, 1891, 1884, 1882, 1888, 1885, 1885, 1886, 1890, 1891, + 1819, 1814, 1829, 1833, 1818, 1819, 1821, 1823, 1822, 1822, + 1831, 1821, 1820, 1830, 1832, 1824, 1829, 1834, 1830, 1837, + 1824, 1835, 1823, 1840, 1836, 1825, 1826, 1839, 1838, 1829, + 0, 1837, 1831, 1842, 1843, 1833, 1832, 1831, 1840, 0, + 1834, 1832, 1836, 1835, 1834, 1830, 1837, 1838, 1835, 1839, + 1840, 1836, 1845, 1844, 1839, 1838, 1843, 1842, 1846, 1847, + 1842, 1843, 1844, 1848, 1849, 1852, 1845, 1853, 1855, 1857, + 1854, 1859, 1858, 1852, 1853, 1856, 1846, 1847, 1854, 1845, + 1844, 1865, 1849, 1856, 1858, 1846, 1847, 1857, 1862, 1848, + 1848, 1849, 1852, 1860, 1853, 1855, 1857, 1854, 1859, 1858, - 1889, 1893, 1886, 1894, 1892, 1895, 1887, 1896, 1897, 1893, - 0, 0, 1892, 1899, 1888, 1898, 1900, 1900, 1891, 1897, - 1899, 1901, 1905, 1906, 0, 1909, 1910, 1907, 1893, 1894, - 1894, 1895, 1895, 1896, 1896, 1897, 1907, 1898, 1902, 1901, - 1899, 1911, 1898, 1900, 1903, 1902, 1910, 1906, 1901, 1905, - 1906, 1903, 1909, 1910, 1907, 1912, 1913, 1915, 1916, 1920, - 1918, 1919, 1921, 1917, 1920, 1902, 1915, 1924, 1911, 0, - 0, 1903, 0, 1919, 1913, 1922, 1921, 1912, 1918, 1925, - 1926, 1933, 1912, 1913, 1915, 1916, 1917, 1918, 1919, 1921, - 1917, 1920, 1934, 1922, 1924, 1926, 1928, 1925, 1928, 1930, + 1862, 1860, 1856, 1864, 1865, 1866, 1867, 1868, 1865, 1869, + 1864, 1871, 1874, 1872, 1881, 1862, 1876, 0, 1878, 1875, + 1860, 1887, 0, 0, 1886, 0, 1868, 1872, 1876, 1871, + 1864, 1869, 1875, 1867, 1868, 1874, 1869, 1866, 1871, 1874, + 1872, 1881, 1883, 1876, 1878, 1878, 1875, 1885, 1887, 1883, + 1886, 1886, 1888, 1889, 1885, 1890, 1891, 1892, 1893, 1894, + 1895, 1896, 1901, 1900, 1897, 1903, 1901, 1893, 1900, 1883, + 0, 1906, 1894, 1902, 1885, 1904, 1888, 1904, 1905, 1888, + 1889, 1890, 1890, 1891, 1892, 1893, 1894, 1897, 1896, 1901, + 1909, 1897, 1895, 0, 1902, 1900, 1910, 1903, 1906, 1915, - 0, 1940, 1922, 1933, 1935, 1937, 1925, 1926, 1933, 1938, - 1942, 1941, 1938, 1943, 1930, 0, 1946, 1942, 1934, 1934, - 1944, 1943, 1935, 1928, 1947, 1948, 1930, 1937, 1940, 1941, - 1952, 1935, 1937, 1950, 1954, 1938, 1938, 1942, 1941, 1938, - 1943, 1951, 1944, 1949, 1958, 1956, 1947, 1944, 1946, 1949, - 1951, 1947, 1948, 1956, 1953, 1950, 1953, 1957, 1961, 1959, - 1950, 1954, 1952, 1962, 1960, 1967, 1965, 1963, 1951, 1957, - 1949, 1958, 1956, 1959, 1962, 1963, 1961, 1964, 1966, 1966, - 1970, 1953, 1971, 1975, 1957, 1961, 1959, 1960, 1965, 1968, - 1962, 1960, 1967, 1965, 1963, 1973, 1964, 1968, 1977, 1979, + 1902, 1905, 1904, 1913, 1912, 1905, 1912, 1916, 1914, 1914, + 1919, 1918, 1909, 1921, 0, 1917, 1916, 1909, 1914, 1923, + 1910, 1915, 1917, 1910, 1918, 1920, 1915, 1913, 1924, 1927, + 1913, 1912, 1921, 1920, 1916, 1914, 1914, 1919, 1918, 1922, + 1921, 1925, 1917, 1928, 1930, 1923, 1923, 1922, 1926, 1934, + 1928, 1927, 1920, 1931, 1924, 1924, 1927, 1929, 1929, 1926, + 1931, 1935, 1930, 1938, 1936, 1932, 1922, 1925, 1925, 1939, + 1928, 1930, 1932, 1936, 1940, 1926, 1934, 1941, 1944, 1942, + 1931, 1945, 0, 1948, 1929, 1935, 1946, 1944, 1935, 1939, + 1938, 1936, 1932, 1947, 1951, 1948, 1939, 1942, 1949, 1941, - 1976, 1973, 1984, 0, 1964, 1966, 1980, 1970, 1981, 1971, - 1975, 1976, 1981, 1980, 1987, 1982, 1968, 1985, 1988, 1987, - 1977, 1989, 1973, 1982, 1991, 1977, 1979, 1976, 1984, 1984, - 1985, 1990, 1991, 1980, 1994, 1981, 1993, 1992, 1995, 2000, - 1996, 1987, 1982, 1993, 1985, 1988, 2001, 1999, 1989, 1990, - 2003, 1991, 1992, 1998, 1999, 2002, 2005, 2007, 1990, 2003, - 2009, 1994, 1995, 1993, 1992, 1995, 1996, 1996, 1998, 2011, - 2014, 2000, 2015, 2001, 1999, 2016, 2006, 2003, 2005, 2002, - 1998, 2018, 2002, 2005, 2006, 2008, 2008, 2009, 2016, 2007, - 2012, 2019, 2017, 2020, 2015, 2008, 2011, 2014, 2012, 2015, + 1950, 1940, 1953, 1949, 1941, 1944, 1942, 1954, 1945, 1946, + 1948, 1947, 1951, 1946, 1950, 1957, 1955, 1957, 1959, 1962, + 1947, 1951, 1963, 0, 1969, 1954, 1964, 1950, 1966, 1953, + 1949, 1955, 1967, 1959, 1954, 1967, 1970, 1975, 1977, 1973, + 1971, 1962, 1957, 1955, 1964, 1959, 1962, 1971, 1963, 1963, + 1966, 1969, 1972, 1964, 1970, 1966, 1976, 1982, 1967, 1967, + 1972, 1973, 1967, 1970, 1978, 1977, 1973, 1971, 1979, 1975, + 1980, 1981, 1984, 1978, 1979, 1983, 1986, 1983, 1976, 1972, + 1981, 1987, 1988, 1976, 1986, 1992, 1989, 1990, 1991, 1982, + 1997, 1978, 1980, 1987, 1995, 1979, 1992, 1980, 1981, 1984, - 2021, 2023, 2016, 2006, 2028, 0, 2029, 2026, 2018, 2028, - 2031, 2032, 2008, 2008, 2017, 2026, 2033, 2012, 2019, 2017, - 2020, 2034, 2021, 2033, 2032, 2035, 2040, 2021, 2023, 2036, - 2041, 2028, 2029, 2029, 2026, 0, 2039, 2031, 2032, 2034, - 2042, 2050, 2046, 2033, 2047, 2040, 0, 2044, 2034, 2039, - 0, 2036, 2035, 2040, 2044, 2048, 2036, 2041, 2045, 2047, - 2050, 2052, 2042, 2039, 2046, 2045, 2051, 2042, 2050, 2046, - 2052, 2047, 2053, 2051, 2044, 2055, 2048, 2054, 2054, 2056, - 2061, 2055, 2048, 2053, 2059, 2045, 2062, 2054, 2052, 2063, - 2067, 2059, 2069, 2051, 2070, 2070, 0, 2071, 2073, 2053, + 1989, 1994, 1983, 1986, 1996, 1996, 1991, 2000, 1987, 1988, + 1990, 1993, 1992, 1989, 1990, 1991, 1995, 1997, 1998, 1993, + 1994, 1995, 2001, 2003, 2005, 2006, 1998, 0, 1994, 2003, + 2009, 1996, 2007, 2010, 2000, 2011, 2006, 2014, 1993, 2011, + 2010, 2017, 2018, 2015, 2019, 1998, 2017, 2012, 2020, 2001, + 2003, 2005, 2006, 2021, 2007, 2012, 2015, 2009, 2022, 2007, + 2010, 2021, 2011, 2014, 2014, 2023, 2020, 2024, 2017, 2018, + 2015, 2019, 2023, 2022, 2012, 2020, 2025, 2030, 2026, 2029, + 2021, 2028, 0, 2031, 2038, 2022, 2029, 2032, 2033, 0, + 2035, 2036, 2023, 2037, 2024, 0, 2028, 2033, 2040, 2042, - 2074, 2056, 2055, 2077, 2054, 2054, 2056, 2061, 2075, 2074, - 2079, 2059, 2063, 2062, 2078, 2082, 2063, 2067, 2083, 2069, - 2071, 2075, 2079, 2070, 2071, 2073, 2084, 2074, 2085, 2081, - 2077, 2086, 2087, 2082, 2078, 2075, 2088, 2079, 2081, 2090, - 0, 2078, 2082, 2086, 2083, 2083, 2089, 2092, 2089, 2093, - 2095, 2090, 2094, 2084, 2087, 2085, 2081, 2098, 2086, 2087, - 2094, 2091, 2101, 2088, 2102, 2103, 2090, 2091, 2105, 2092, - 2106, 2093, 2108, 2089, 2092, 2109, 2093, 2095, 2110, 2094, - 2112, 2111, 2116, 2118, 2098, 2115, 2105, 2119, 2091, 2101, - 2109, 2102, 2103, 2111, 2115, 2105, 2120, 2106, 2129, 2108, + 2025, 2037, 2045, 2025, 2026, 2026, 2029, 2049, 2028, 2030, + 2031, 2032, 2035, 2036, 2032, 2033, 2038, 2035, 2036, 2043, + 2037, 2039, 2039, 2046, 2047, 2040, 2042, 2043, 2050, 2045, + 2048, 2039, 2051, 2054, 2049, 2057, 2052, 2047, 2060, 2059, + 2062, 2063, 0, 2057, 2059, 2046, 2043, 2066, 2039, 2039, + 2046, 2047, 2048, 2065, 2063, 2050, 2067, 2048, 2052, 2051, + 2054, 2072, 2057, 2052, 2060, 2060, 2059, 2062, 2063, 2064, + 2071, 2065, 2070, 2073, 2066, 2075, 2064, 2076, 2067, 2077, + 2065, 0, 2075, 2067, 2076, 2070, 2079, 2082, 2072, 2071, + 2078, 2081, 0, 0, 2082, 2073, 2064, 2071, 2085, 2070, - 2119, 2122, 2109, 2121, 2110, 2110, 2116, 2112, 2111, 2116, - 2122, 2121, 2115, 2123, 2119, 2118, 2132, 2136, 2120, 2133, - 2134, 2136, 2129, 2120, 2123, 2129, 2133, 2138, 2122, 2137, - 2121, 2145, 0, 2134, 2139, 2142, 0, 2142, 2141, 2132, - 2123, 2138, 2139, 2132, 2136, 2137, 2133, 2134, 2140, 2141, - 2146, 2143, 2144, 2147, 2138, 2148, 2137, 2140, 2145, 2144, - 2149, 2139, 2142, 2143, 2150, 2141, 2151, 2152, 2146, 2152, - 2154, 2153, 2155, 2156, 2163, 2140, 2164, 2146, 2143, 2144, - 2147, 2148, 2148, 2153, 2158, 2155, 2150, 2149, 2151, 2162, - 2165, 2150, 2160, 2151, 2152, 2166, 2158, 2162, 2153, 2155, + 2073, 2077, 2075, 2084, 2076, 2078, 2077, 2079, 2083, 2085, + 2081, 2088, 2084, 2079, 2082, 2083, 2087, 2078, 2081, 2086, + 2086, 2091, 2087, 2093, 2094, 2085, 2095, 2099, 2091, 2086, + 2084, 2101, 2103, 2088, 2105, 2083, 2102, 2102, 2088, 0, + 2109, 0, 0, 2087, 2110, 0, 2086, 2086, 2091, 2095, + 2093, 2094, 2114, 2095, 2099, 2103, 2107, 2106, 2101, 2103, + 2111, 2105, 2115, 2116, 2110, 2102, 2106, 2109, 2113, 2107, + 2114, 2110, 2111, 2117, 2118, 2119, 2120, 2113, 2121, 2114, + 2122, 2123, 2122, 2107, 2106, 2124, 2118, 2111, 2115, 2115, + 2116, 2124, 2125, 2123, 2126, 2113, 2127, 2119, 2128, 2131, - 2156, 2160, 2154, 2165, 2167, 2169, 2163, 2170, 2164, 2166, - 2172, 2158, 2167, 2171, 2173, 2174, 2162, 2165, 2169, 2160, - 0, 2171, 2166, 2174, 2172, 2175, 2176, 2177, 2173, 2178, - 2170, 2167, 2169, 2179, 2170, 2177, 2180, 2172, 0, 2181, - 2171, 2173, 2174, 2182, 2185, 2184, 2190, 2175, 2176, 2183, - 0, 0, 2175, 2176, 2177, 2187, 2178, 2183, 2180, 2179, - 2179, 2181, 2194, 2180, 2188, 2182, 2181, 0, 2198, 2192, - 2182, 2185, 2188, 2189, 0, 2187, 2183, 2184, 2190, 2191, - 2195, 2189, 2187, 2192, 2194, 2196, 2199, 2191, 2195, 2194, - 2197, 2188, 2201, 2196, 2198, 2198, 2192, 2200, 0, 2202, + 2117, 2118, 2119, 2120, 2127, 2134, 2135, 2122, 2123, 2136, + 2121, 2138, 2124, 2139, 2125, 2141, 2126, 2143, 2144, 2125, + 2142, 2126, 2145, 2127, 2149, 2128, 2131, 2152, 2148, 2138, + 2144, 0, 2134, 2135, 2151, 2142, 2136, 2148, 2138, 2153, + 2139, 2154, 2141, 2143, 2143, 2144, 2155, 2142, 2149, 2145, + 2163, 2149, 2153, 2156, 2155, 2148, 2157, 2168, 2151, 2152, + 0, 2151, 2156, 2154, 2166, 2167, 2153, 2157, 2154, 2171, + 2168, 2170, 2167, 2155, 2163, 2170, 2172, 2163, 2174, 2173, + 2156, 2175, 2178, 2157, 2168, 2171, 2174, 2166, 2176, 2180, + 2175, 2166, 2167, 2173, 2178, 2177, 2171, 2177, 2170, 2176, - 2189, 2203, 2204, 2205, 2197, 2200, 2191, 2195, 2199, 2206, - 2210, 2205, 2196, 2199, 2207, 2208, 0, 2197, 2201, 2201, - 0, 2213, 2204, 2203, 2200, 2202, 2202, 2214, 2203, 2204, - 2205, 2209, 2210, 2217, 2207, 2208, 2206, 2210, 2211, 2209, - 2220, 2207, 2208, 2213, 2215, 2216, 2211, 2218, 2213, 2214, - 2221, 2223, 2215, 2216, 2214, 2218, 2219, 2224, 2209, 2217, - 2217, 2222, 2225, 2227, 2219, 2211, 2220, 2220, 2231, 2230, - 2233, 2215, 2216, 2234, 2218, 0, 2231, 2221, 2223, 2232, - 0, 2222, 2225, 2219, 2224, 2227, 0, 2232, 2222, 2225, - 2227, 2230, 0, 0, 0, 2231, 2230, 2233, 0, 0, + 2179, 2181, 2172, 2172, 2182, 2174, 2173, 2179, 2175, 2178, + 2183, 2184, 2186, 2187, 2190, 2176, 2180, 2185, 2188, 2181, + 2188, 2189, 2177, 2192, 0, 2200, 0, 2179, 2181, 2191, + 2201, 2182, 2198, 2189, 2186, 2187, 2183, 2183, 2184, 2186, + 2187, 2185, 2191, 2194, 2185, 2188, 2190, 2203, 2189, 2196, + 2192, 2198, 2199, 2202, 2206, 2194, 2191, 2200, 2196, 2198, + 2199, 2203, 2201, 2204, 2207, 2209, 2202, 2206, 2210, 2211, + 2194, 2204, 2208, 2209, 2203, 2213, 2196, 2212, 2214, 2199, + 2202, 2206, 2210, 2211, 2216, 2212, 2217, 2207, 2218, 2223, + 2204, 2207, 2209, 2215, 2208, 2210, 2211, 2213, 0, 2208, - 2234, 0, 0, 0, 0, 0, 2232, 2238, 2238, 2238, - 2238, 2238, 2238, 2238, 2239, 2239, 2239, 2239, 2239, 2239, - 2239, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2241, 2241, - 2241, 2241, 2241, 2241, 2241, 2242, 2242, 2242, 2242, 2242, - 2242, 2242, 2244, 2244, 0, 2244, 2244, 2244, 2244, 2245, - 2245, 0, 0, 0, 2245, 2245, 2246, 2246, 0, 0, - 2246, 0, 2246, 2247, 0, 0, 0, 0, 0, 2247, - 2248, 2248, 0, 0, 0, 2248, 2248, 2249, 0, 0, - 0, 0, 0, 2249, 2250, 2250, 0, 2250, 2250, 2250, - 2250, 2251, 2251, 0, 2251, 2251, 2251, 2251, 2237, 2237, + 2214, 2215, 2213, 2219, 2212, 2214, 2220, 2221, 2222, 2224, + 2230, 2216, 2227, 0, 2218, 2218, 2222, 0, 2217, 2226, + 2215, 2223, 0, 2228, 2232, 2219, 2251, 2226, 2220, 2221, + 2219, 2228, 2227, 2220, 2221, 2222, 2224, 2229, 2232, 2227, + 2231, 2234, 2230, 2235, 2234, 2229, 2226, 2236, 2231, 2237, + 2228, 2232, 2238, 2251, 2239, 2236, 2240, 2237, 2242, 2234, + 2241, 2241, 2244, 0, 2229, 2235, 2238, 2231, 2234, 2243, + 2235, 2234, 2245, 2246, 2236, 0, 2237, 2243, 2240, 2238, + 2239, 2239, 2247, 2240, 2242, 2242, 2248, 2241, 2244, 2244, + 2249, 2250, 2255, 2257, 2248, 2246, 2243, 2254, 2245, 2245, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, - 2237, 2237, 2237, 2237, 2237 + 2246, 2252, 2247, 2253, 2260, 2254, 0, 2256, 0, 2247, + 2261, 2266, 2249, 2248, 2255, 2256, 2250, 2249, 2250, 2255, + 2257, 2252, 2264, 2253, 2254, 2258, 2260, 2262, 2252, 2269, + 2253, 2260, 2261, 2258, 2256, 2262, 2263, 2261, 2266, 2267, + 2270, 2271, 2268, 2273, 2263, 2274, 0, 2267, 2264, 2264, + 2268, 2275, 2258, 2277, 2262, 2269, 2269, 2280, 2283, 2284, + 0, 2271, 0, 2263, 0, 2281, 2267, 2270, 2271, 2268, + 2273, 2275, 2274, 2281, 2282, 2277, 0, 0, 2275, 2280, + 2277, 0, 2282, 0, 2280, 2283, 2284, 0, 0, 0, + 0, 0, 2281, 0, 0, 0, 0, 0, 0, 0, + + 0, 2282, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2289, + 2289, 2289, 2289, 2289, 2289, 2289, 2290, 2290, 2290, 2290, + 2290, 2290, 2290, 2291, 2291, 2291, 2291, 2291, 2291, 2291, + 2292, 2292, 2292, 2292, 2292, 2292, 2292, 2294, 2294, 0, + 2294, 2294, 2294, 2294, 2295, 2295, 0, 0, 0, 2295, + 2295, 2296, 2296, 0, 0, 2296, 0, 2296, 2297, 0, + 0, 0, 0, 0, 2297, 2298, 2298, 0, 0, 0, + 2298, 2298, 2299, 0, 0, 0, 0, 0, 2299, 2300, + 2300, 0, 2300, 2300, 2300, 2300, 2301, 2301, 0, 2301, + 2301, 2301, 2301, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, + 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287 } ; static yy_state_type yy_last_accepting_state; @@ -2807,7 +2866,7 @@ static void config_end_include(void) #define YY_NO_INPUT 1 #endif -#line 2809 "" +#line 2868 "" #define INITIAL 0 #define quotedstring 1 @@ -3030,7 +3089,7 @@ YY_DECL { #line 207 "util/configlexer.lex" -#line 3032 "" +#line 3091 "" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -3063,13 +3122,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2238 ) + if ( yy_current_state >= 2288 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6399 ); + while ( yy_base[yy_current_state] != 6594 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -4116,68 +4175,95 @@ YY_RULE_SETUP case 203: YY_RULE_SETUP #line 420 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_ENABLED) } +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } YY_BREAK case 204: YY_RULE_SETUP -#line 421 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } +#line 422 "util/configlexer.lex" +{ + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } YY_BREAK case 205: YY_RULE_SETUP -#line 422 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_HOOK) } +#line 424 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_ENABLED) } YY_BREAK case 206: YY_RULE_SETUP -#line 423 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } +#line 425 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } YY_BREAK case 207: YY_RULE_SETUP -#line 424 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } +#line 426 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_HOOK) } YY_BREAK case 208: YY_RULE_SETUP -#line 425 "util/configlexer.lex" -{ YDVAR(1, VAR_IPSECMOD_STRICT) } +#line 427 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_MAX_TTL) } YY_BREAK case 209: -/* rule 209 can match eol */ YY_RULE_SETUP -#line 426 "util/configlexer.lex" -{ LEXOUT(("NL\n")); cfg_parser->line++; } +#line 428 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_WHITELIST) } YY_BREAK -/* Quoted strings. Strip leading and ending quotes */ case 210: YY_RULE_SETUP #line 429 "util/configlexer.lex" +{ YDVAR(1, VAR_IPSECMOD_STRICT) } + YY_BREAK +case 211: +YY_RULE_SETUP +#line 430 "util/configlexer.lex" +{ YDVAR(0, VAR_CACHEDB) } + YY_BREAK +case 212: +YY_RULE_SETUP +#line 431 "util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_BACKEND) } + YY_BREAK +case 213: +YY_RULE_SETUP +#line 432 "util/configlexer.lex" +{ YDVAR(1, VAR_CACHEDB_SECRETSEED) } + YY_BREAK +case 214: +/* rule 214 can match eol */ +YY_RULE_SETUP +#line 433 "util/configlexer.lex" +{ LEXOUT(("NL\n")); cfg_parser->line++; } + YY_BREAK +/* Quoted strings. Strip leading and ending quotes */ +case 215: +YY_RULE_SETUP +#line 436 "util/configlexer.lex" { BEGIN(quotedstring); LEXOUT(("QS ")); } YY_BREAK case YY_STATE_EOF(quotedstring): -#line 430 "util/configlexer.lex" +#line 437 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 211: +case 216: YY_RULE_SETUP -#line 435 "util/configlexer.lex" +#line 442 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 212: -/* rule 212 can match eol */ +case 217: +/* rule 217 can match eol */ YY_RULE_SETUP -#line 436 "util/configlexer.lex" +#line 443 "util/configlexer.lex" { yyerror("newline inside quoted string, no end \""); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 213: +case 218: YY_RULE_SETUP -#line 438 "util/configlexer.lex" +#line 445 "util/configlexer.lex" { LEXOUT(("QE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4190,34 +4276,34 @@ YY_RULE_SETUP } YY_BREAK /* Single Quoted strings. Strip leading and ending quotes */ -case 214: +case 219: YY_RULE_SETUP -#line 450 "util/configlexer.lex" +#line 457 "util/configlexer.lex" { BEGIN(singlequotedstr); LEXOUT(("SQS ")); } YY_BREAK case YY_STATE_EOF(singlequotedstr): -#line 451 "util/configlexer.lex" +#line 458 "util/configlexer.lex" { yyerror("EOF inside quoted string"); if(--num_args == 0) { BEGIN(INITIAL); } else { BEGIN(val); } } YY_BREAK -case 215: +case 220: YY_RULE_SETUP -#line 456 "util/configlexer.lex" +#line 463 "util/configlexer.lex" { LEXOUT(("STR(%s) ", yytext)); yymore(); } YY_BREAK -case 216: -/* rule 216 can match eol */ +case 221: +/* rule 221 can match eol */ YY_RULE_SETUP -#line 457 "util/configlexer.lex" +#line 464 "util/configlexer.lex" { yyerror("newline inside quoted string, no end '"); cfg_parser->line++; BEGIN(INITIAL); } YY_BREAK -case 217: +case 222: YY_RULE_SETUP -#line 459 "util/configlexer.lex" +#line 466 "util/configlexer.lex" { LEXOUT(("SQE ")); if(--num_args == 0) { BEGIN(INITIAL); } @@ -4230,38 +4316,38 @@ YY_RULE_SETUP } YY_BREAK /* include: directive */ -case 218: +case 223: YY_RULE_SETUP -#line 471 "util/configlexer.lex" +#line 478 "util/configlexer.lex" { LEXOUT(("v(%s) ", yytext)); inc_prev = YYSTATE; BEGIN(include); } YY_BREAK case YY_STATE_EOF(include): -#line 473 "util/configlexer.lex" +#line 480 "util/configlexer.lex" { yyerror("EOF inside include directive"); BEGIN(inc_prev); } YY_BREAK -case 219: +case 224: YY_RULE_SETUP -#line 477 "util/configlexer.lex" +#line 484 "util/configlexer.lex" { LEXOUT(("ISP ")); /* ignore */ } YY_BREAK -case 220: -/* rule 220 can match eol */ +case 225: +/* rule 225 can match eol */ YY_RULE_SETUP -#line 478 "util/configlexer.lex" +#line 485 "util/configlexer.lex" { LEXOUT(("NL\n")); cfg_parser->line++;} YY_BREAK -case 221: +case 226: YY_RULE_SETUP -#line 479 "util/configlexer.lex" +#line 486 "util/configlexer.lex" { LEXOUT(("IQS ")); BEGIN(include_quoted); } YY_BREAK -case 222: +case 227: YY_RULE_SETUP -#line 480 "util/configlexer.lex" +#line 487 "util/configlexer.lex" { LEXOUT(("Iunquotedstr(%s) ", yytext)); config_start_include_glob(yytext); @@ -4269,27 +4355,27 @@ YY_RULE_SETUP } YY_BREAK case YY_STATE_EOF(include_quoted): -#line 485 "util/configlexer.lex" +#line 492 "util/configlexer.lex" { yyerror("EOF inside quoted string"); BEGIN(inc_prev); } YY_BREAK -case 223: +case 228: YY_RULE_SETUP -#line 489 "util/configlexer.lex" +#line 496 "util/configlexer.lex" { LEXOUT(("ISTR(%s) ", yytext)); yymore(); } YY_BREAK -case 224: -/* rule 224 can match eol */ +case 229: +/* rule 229 can match eol */ YY_RULE_SETUP -#line 490 "util/configlexer.lex" +#line 497 "util/configlexer.lex" { yyerror("newline before \" in include name"); cfg_parser->line++; BEGIN(inc_prev); } YY_BREAK -case 225: +case 230: YY_RULE_SETUP -#line 492 "util/configlexer.lex" +#line 499 "util/configlexer.lex" { LEXOUT(("IQE ")); yytext[yyleng - 1] = '\0'; @@ -4299,7 +4385,7 @@ YY_RULE_SETUP YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(val): -#line 498 "util/configlexer.lex" +#line 505 "util/configlexer.lex" { LEXOUT(("LEXEOF ")); yy_set_bol(1); /* Set beginning of line, so "^" rules match. */ @@ -4311,33 +4397,33 @@ case YY_STATE_EOF(val): } } YY_BREAK -case 226: +case 231: YY_RULE_SETUP -#line 509 "util/configlexer.lex" +#line 516 "util/configlexer.lex" { LEXOUT(("unquotedstr(%s) ", yytext)); if(--num_args == 0) { BEGIN(INITIAL); } yylval.str = strdup(yytext); return STRING_ARG; } YY_BREAK -case 227: +case 232: YY_RULE_SETUP -#line 513 "util/configlexer.lex" +#line 520 "util/configlexer.lex" { ub_c_error_msg("unknown keyword '%s'", yytext); } YY_BREAK -case 228: +case 233: YY_RULE_SETUP -#line 517 "util/configlexer.lex" +#line 524 "util/configlexer.lex" { ub_c_error_msg("stray '%s'", yytext); } YY_BREAK -case 229: +case 234: YY_RULE_SETUP -#line 521 "util/configlexer.lex" +#line 528 "util/configlexer.lex" ECHO; YY_BREAK -#line 4339 "" +#line 4425 "" case YY_END_OF_BUFFER: { @@ -4628,7 +4714,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2238 ) + if ( yy_current_state >= 2288 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; @@ -4656,11 +4742,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 2238 ) + if ( yy_current_state >= 2288 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; - yy_is_jam = (yy_current_state == 2237); + yy_is_jam = (yy_current_state == 2287); return yy_is_jam ? 0 : yy_current_state; } @@ -5299,7 +5385,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 521 "util/configlexer.lex" +#line 528 "util/configlexer.lex" diff --git a/util/configlexer.lex b/util/configlexer.lex index d9b8e281c568..0c9a4df04298 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -417,12 +417,19 @@ dnscrypt-port{COLON} { YDVAR(1, VAR_DNSCRYPT_PORT) } dnscrypt-provider{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER) } dnscrypt-secret-key{COLON} { YDVAR(1, VAR_DNSCRYPT_SECRET_KEY) } dnscrypt-provider-cert{COLON} { YDVAR(1, VAR_DNSCRYPT_PROVIDER_CERT) } +dnscrypt-shared-secret-cache-size{COLON} { + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE) } +dnscrypt-shared-secret-cache-slabs{COLON} { + YDVAR(1, VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS) } ipsecmod-enabled{COLON} { YDVAR(1, VAR_IPSECMOD_ENABLED) } ipsecmod-ignore-bogus{COLON} { YDVAR(1, VAR_IPSECMOD_IGNORE_BOGUS) } ipsecmod-hook{COLON} { YDVAR(1, VAR_IPSECMOD_HOOK) } ipsecmod-max-ttl{COLON} { YDVAR(1, VAR_IPSECMOD_MAX_TTL) } ipsecmod-whitelist{COLON} { YDVAR(1, VAR_IPSECMOD_WHITELIST) } ipsecmod-strict{COLON} { YDVAR(1, VAR_IPSECMOD_STRICT) } +cachedb{COLON} { YDVAR(0, VAR_CACHEDB) } +backend{COLON} { YDVAR(1, VAR_CACHEDB_BACKEND) } +secret-seed{COLON} { YDVAR(1, VAR_CACHEDB_SECRETSEED) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.c b/util/configparser.c index 9fa436b02886..7829ed8cd2bf 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -333,12 +333,17 @@ extern int yydebug; VAR_DNSCRYPT_PROVIDER = 462, VAR_DNSCRYPT_SECRET_KEY = 463, VAR_DNSCRYPT_PROVIDER_CERT = 464, - VAR_IPSECMOD_ENABLED = 465, - VAR_IPSECMOD_HOOK = 466, - VAR_IPSECMOD_IGNORE_BOGUS = 467, - VAR_IPSECMOD_MAX_TTL = 468, - VAR_IPSECMOD_WHITELIST = 469, - VAR_IPSECMOD_STRICT = 470 + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, + VAR_IPSECMOD_ENABLED = 467, + VAR_IPSECMOD_HOOK = 468, + VAR_IPSECMOD_IGNORE_BOGUS = 469, + VAR_IPSECMOD_MAX_TTL = 470, + VAR_IPSECMOD_WHITELIST = 471, + VAR_IPSECMOD_STRICT = 472, + VAR_CACHEDB = 473, + VAR_CACHEDB_BACKEND = 474, + VAR_CACHEDB_SECRETSEED = 475 }; #endif /* Tokens. */ @@ -549,12 +554,17 @@ extern int yydebug; #define VAR_DNSCRYPT_PROVIDER 462 #define VAR_DNSCRYPT_SECRET_KEY 463 #define VAR_DNSCRYPT_PROVIDER_CERT 464 -#define VAR_IPSECMOD_ENABLED 465 -#define VAR_IPSECMOD_HOOK 466 -#define VAR_IPSECMOD_IGNORE_BOGUS 467 -#define VAR_IPSECMOD_MAX_TTL 468 -#define VAR_IPSECMOD_WHITELIST 469 -#define VAR_IPSECMOD_STRICT 470 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 +#define VAR_IPSECMOD_ENABLED 467 +#define VAR_IPSECMOD_HOOK 468 +#define VAR_IPSECMOD_IGNORE_BOGUS 469 +#define VAR_IPSECMOD_MAX_TTL 470 +#define VAR_IPSECMOD_WHITELIST 471 +#define VAR_IPSECMOD_STRICT 472 +#define VAR_CACHEDB 473 +#define VAR_CACHEDB_BACKEND 474 +#define VAR_CACHEDB_SECRETSEED 475 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -565,7 +575,7 @@ union YYSTYPE char* str; -#line 569 "util/configparser.c" /* yacc.c:355 */ +#line 579 "util/configparser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -582,7 +592,7 @@ int yyparse (void); /* Copy the second part of user declarations. */ -#line 586 "util/configparser.c" /* yacc.c:358 */ +#line 596 "util/configparser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -824,21 +834,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 442 +#define YYLAST 446 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 216 +#define YYNTOKENS 221 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 231 +#define YYNNTS 238 /* YYNRULES -- Number of rules. */ -#define YYNRULES 443 +#define YYNRULES 455 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 667 +#define YYNSTATES 683 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 470 +#define YYMAXUTOK 475 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -894,58 +904,59 @@ static const yytype_uint8 yytranslate[] = 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215 + 215, 216, 217, 218, 219, 220 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 151, 151, 151, 152, 152, 153, 153, 154, 154, - 154, 156, 160, 165, 166, 167, 167, 167, 168, 168, - 169, 169, 170, 170, 171, 171, 172, 172, 172, 173, - 173, 173, 174, 174, 175, 175, 176, 176, 177, 177, - 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, - 182, 183, 183, 183, 184, 184, 184, 185, 185, 186, - 186, 187, 187, 188, 188, 189, 189, 189, 190, 190, - 191, 191, 192, 192, 192, 193, 193, 194, 194, 195, - 195, 196, 196, 196, 197, 197, 198, 198, 199, 199, - 200, 200, 201, 201, 202, 202, 202, 203, 203, 204, - 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, - 207, 207, 208, 208, 208, 209, 209, 209, 210, 210, - 211, 211, 212, 212, 213, 213, 214, 214, 214, 215, - 215, 216, 216, 217, 218, 218, 219, 219, 220, 220, - 221, 222, 222, 223, 223, 224, 224, 225, 225, 225, - 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, - 230, 231, 231, 231, 232, 232, 232, 233, 233, 234, - 234, 235, 235, 236, 236, 238, 250, 251, 252, 252, - 252, 252, 252, 253, 255, 267, 268, 269, 269, 269, - 269, 270, 272, 286, 287, 288, 288, 288, 288, 289, - 289, 289, 291, 300, 309, 320, 329, 338, 347, 358, - 367, 378, 391, 406, 417, 434, 451, 464, 479, 488, - 497, 506, 515, 524, 533, 542, 551, 560, 569, 578, - 587, 596, 605, 614, 621, 628, 637, 646, 655, 669, - 678, 687, 696, 703, 710, 736, 744, 751, 758, 765, - 772, 780, 788, 796, 803, 814, 821, 830, 839, 848, - 855, 862, 870, 878, 888, 898, 908, 921, 932, 940, - 953, 962, 971, 980, 990, 1000, 1008, 1021, 1030, 1038, - 1047, 1055, 1068, 1077, 1084, 1094, 1104, 1114, 1124, 1134, - 1144, 1154, 1164, 1171, 1178, 1185, 1194, 1203, 1212, 1219, - 1229, 1246, 1253, 1271, 1284, 1297, 1306, 1315, 1324, 1333, - 1343, 1353, 1362, 1371, 1384, 1397, 1406, 1413, 1422, 1431, - 1440, 1449, 1457, 1470, 1478, 1506, 1513, 1528, 1538, 1548, - 1555, 1562, 1571, 1585, 1604, 1623, 1635, 1647, 1659, 1670, - 1689, 1699, 1708, 1716, 1724, 1737, 1750, 1763, 1776, 1785, - 1794, 1804, 1814, 1827, 1840, 1851, 1864, 1875, 1888, 1898, - 1905, 1912, 1921, 1931, 1941, 1951, 1958, 1965, 1974, 1984, - 1994, 2023, 2033, 2041, 2050, 2065, 2074, 2079, 2080, 2081, - 2081, 2081, 2082, 2082, 2082, 2083, 2083, 2085, 2095, 2104, - 2111, 2121, 2128, 2135, 2142, 2149, 2154, 2155, 2156, 2156, - 2157, 2157, 2158, 2158, 2159, 2160, 2161, 2162, 2163, 2164, - 2166, 2174, 2181, 2189, 2197, 2204, 2211, 2220, 2229, 2238, - 2247, 2256, 2265, 2270, 2271, 2272, 2274, 2280, 2290, 2297, - 2306, 2314, 2320, 2321, 2323, 2323, 2323, 2324, 2324, 2326, - 2336, 2346, 2353, 2360 + 0, 154, 154, 154, 155, 155, 156, 156, 157, 157, + 157, 159, 160, 164, 169, 170, 171, 171, 171, 172, + 172, 173, 173, 174, 174, 175, 175, 176, 176, 176, + 177, 177, 177, 178, 178, 179, 179, 180, 180, 181, + 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, + 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, + 190, 190, 191, 191, 192, 192, 193, 193, 193, 194, + 194, 195, 195, 196, 196, 196, 197, 197, 198, 198, + 199, 199, 200, 200, 200, 201, 201, 202, 202, 203, + 203, 204, 204, 205, 205, 206, 206, 206, 207, 207, + 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, + 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, + 214, 215, 215, 216, 216, 217, 217, 218, 218, 218, + 219, 219, 220, 220, 221, 222, 222, 223, 223, 224, + 224, 225, 226, 226, 227, 227, 228, 228, 229, 229, + 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, + 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, + 238, 238, 239, 239, 240, 240, 242, 254, 255, 256, + 256, 256, 256, 256, 257, 259, 271, 272, 273, 273, + 273, 273, 274, 276, 290, 291, 292, 292, 292, 292, + 293, 293, 293, 295, 304, 313, 324, 333, 342, 351, + 362, 371, 382, 395, 410, 421, 438, 455, 468, 483, + 492, 501, 510, 519, 528, 537, 546, 555, 564, 573, + 582, 591, 600, 609, 618, 625, 632, 641, 650, 659, + 673, 682, 691, 700, 707, 714, 740, 748, 755, 762, + 769, 776, 784, 792, 800, 807, 818, 825, 834, 843, + 852, 859, 866, 874, 882, 892, 902, 912, 925, 936, + 944, 957, 966, 975, 984, 994, 1004, 1012, 1025, 1034, + 1042, 1051, 1059, 1072, 1081, 1088, 1098, 1108, 1118, 1128, + 1138, 1148, 1158, 1168, 1175, 1182, 1189, 1198, 1207, 1216, + 1223, 1233, 1250, 1257, 1275, 1288, 1301, 1310, 1319, 1328, + 1337, 1347, 1357, 1366, 1375, 1388, 1401, 1410, 1417, 1426, + 1435, 1444, 1453, 1461, 1474, 1482, 1510, 1517, 1532, 1542, + 1552, 1559, 1566, 1575, 1589, 1608, 1627, 1639, 1651, 1663, + 1674, 1693, 1703, 1712, 1720, 1728, 1741, 1754, 1767, 1780, + 1789, 1798, 1808, 1818, 1831, 1844, 1855, 1868, 1879, 1892, + 1902, 1909, 1916, 1925, 1935, 1945, 1955, 1962, 1969, 1978, + 1988, 1998, 2027, 2037, 2045, 2054, 2069, 2078, 2083, 2084, + 2085, 2085, 2085, 2086, 2086, 2086, 2087, 2087, 2089, 2099, + 2108, 2115, 2125, 2132, 2139, 2146, 2153, 2158, 2159, 2160, + 2160, 2161, 2161, 2162, 2162, 2163, 2164, 2165, 2166, 2167, + 2168, 2170, 2178, 2185, 2193, 2201, 2208, 2215, 2224, 2233, + 2242, 2251, 2260, 2269, 2274, 2275, 2276, 2278, 2284, 2294, + 2301, 2310, 2318, 2324, 2325, 2327, 2327, 2327, 2328, 2328, + 2329, 2330, 2332, 2342, 2352, 2359, 2366, 2373, 2381, 2394, + 2399, 2400, 2401, 2401, 2403, 2417 }; #endif @@ -1028,12 +1039,15 @@ static const char *const yytname[] = "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE", "VAR_SHM_KEY", "VAR_DNSCRYPT", "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER", "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT", - "VAR_IPSECMOD_ENABLED", "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", - "VAR_IPSECMOD_MAX_TTL", "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", - "$accept", "toplevelvars", "toplevelvar", "serverstart", - "contents_server", "content_server", "stubstart", "contents_stub", - "content_stub", "forwardstart", "contents_forward", "content_forward", - "viewstart", "contents_view", "content_view", "server_num_threads", + "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE", + "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS", "VAR_IPSECMOD_ENABLED", + "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL", + "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB", + "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "$accept", + "toplevelvars", "toplevelvar", "serverstart", "contents_server", + "content_server", "stubstart", "contents_stub", "content_stub", + "forwardstart", "contents_forward", "content_forward", "viewstart", + "contents_view", "content_view", "server_num_threads", "server_verbosity", "server_statistics_interval", "server_statistics_cumulative", "server_extended_statistics", "server_shm_enable", "server_shm_key", "server_port", @@ -1122,7 +1136,11 @@ static const char *const yytname[] = "server_response_ip", "server_response_ip_data", "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable", "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider", - "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_secret_key", YY_NULLPTR + "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_secret_key", + "dnsc_dnscrypt_shared_secret_cache_size", + "dnsc_dnscrypt_shared_secret_cache_slabs", "cachedbstart", + "contents_cachedb", "content_cachedb", "cachedb_backend_name", + "cachedb_secret_seed", YY_NULLPTR }; #endif @@ -1152,14 +1170,15 @@ static const yytype_uint16 yytoknum[] = 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470 + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475 }; # endif -#define YYPACT_NINF -200 +#define YYPACT_NINF -213 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-200))) + (!!((Yystate) == (-213))) #define YYTABLE_NINF -1 @@ -1170,73 +1189,75 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -200, 0, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - 96, -39, -35, 248, -65, -131, -106, -199, 2, 25, - 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 82, 83, 85, 88, 90, 91, 92, 93, - 94, 95, 126, 127, 128, 129, 133, 134, 177, 178, - 179, 180, 181, 183, 184, 185, 189, 193, 218, 219, - 220, 221, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 280, 290, 291, 292, 293, - 294, 295, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, 361, - 362, 363, 364, 365, 366, -200, -200, -200, -200, -200, - -200, -200, 367, 368, 369, 370, 371, -200, -200, -200, - -200, -200, -200, 372, 373, 374, 375, 376, 377, 378, - -200, -200, -200, -200, -200, -200, -200, -200, 379, 380, - 381, 382, 383, 384, 385, 386, -200, -200, -200, -200, - -200, -200, -200, -200, -200, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 399, 400, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - 401, -200, -200, 402, 403, 404, 405, 406, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - 407, 408, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, 409, 410, 411, -200, -200, -200, - -200, -200, -200, -200, -200, -200, 412, 413, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, 414, 415, 416, 417, 418, 419, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, 420, -200, -200, 421, - 422, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, 423, 424, 425, - -200, -200, -200, -200, -200, -200, -200 + -213, 0, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, 207, -38, -34, -39, -64, -130, -105, -157, + -212, -1, 2, 3, 26, 29, 30, 32, 33, 34, + 35, 36, 45, 46, 47, 48, 49, 50, 51, 53, + 54, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 82, 83, 84, 86, + 89, 91, 92, 93, 94, 95, 96, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 237, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, 238, 239, 240, 244, 245, 246, -213, -213, + -213, -213, -213, -213, -213, 288, 289, 290, 291, 292, + -213, -213, -213, -213, -213, -213, 293, 294, 295, 296, + 300, 304, 305, -213, -213, -213, -213, -213, -213, -213, + -213, 329, 330, 331, 332, 342, 343, 344, 345, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 389, 391, 401, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, 402, -213, -213, 403, 404, 405, 406, + 407, 408, 415, -213, -213, -213, -213, -213, -213, -213, + -213, 416, 417, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, 418, 419, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, 420, 421, 422, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 423, 424, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, 425, 426, 427, 428, 429, + 430, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 431, -213, + -213, 432, 433, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, 434, 435, 436, -213, -213, -213, -213, + -213, -213, -213 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1244,9 +1265,10 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 12, 175, 184, 376, 422, 395, 192, - 431, 3, 14, 177, 186, 194, 378, 397, 424, 433, - 4, 5, 6, 10, 8, 9, 7, 11, 0, 0, + 2, 0, 1, 13, 176, 185, 377, 423, 396, 193, + 432, 449, 3, 15, 178, 187, 195, 379, 398, 425, + 434, 451, 4, 5, 6, 10, 8, 9, 7, 11, + 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1262,96 +1284,241 @@ static const yytype_uint16 yydefact[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 15, - 16, 75, 78, 87, 164, 165, 17, 137, 138, 139, - 140, 141, 142, 26, 66, 18, 79, 80, 37, 59, - 74, 19, 20, 22, 23, 21, 24, 25, 110, 111, - 112, 113, 114, 160, 76, 65, 91, 108, 109, 27, - 28, 29, 30, 31, 67, 81, 82, 97, 53, 63, - 54, 168, 92, 47, 48, 167, 49, 50, 101, 105, - 118, 126, 147, 102, 60, 32, 33, 34, 89, 119, - 120, 121, 35, 36, 38, 39, 41, 42, 40, 124, - 43, 44, 45, 51, 70, 106, 84, 125, 77, 143, - 85, 86, 103, 104, 90, 46, 68, 71, 52, 55, - 93, 94, 69, 144, 95, 56, 57, 58, 107, 157, - 158, 166, 96, 64, 98, 99, 100, 145, 61, 62, - 83, 72, 73, 88, 115, 116, 117, 122, 123, 148, - 149, 151, 153, 154, 152, 155, 161, 127, 128, 131, - 132, 129, 130, 133, 134, 136, 135, 146, 156, 169, - 171, 170, 172, 173, 174, 150, 159, 162, 163, 0, - 0, 0, 0, 0, 0, 176, 178, 179, 180, 182, - 183, 181, 0, 0, 0, 0, 0, 185, 187, 188, - 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, - 193, 195, 196, 199, 200, 197, 201, 198, 0, 0, - 0, 0, 0, 0, 0, 0, 377, 379, 381, 380, - 386, 382, 383, 384, 385, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 396, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 0, 423, 425, 0, 0, 0, 0, 0, 432, 434, - 435, 436, 438, 437, 203, 202, 209, 218, 216, 224, - 225, 228, 226, 227, 229, 230, 242, 243, 244, 245, - 246, 268, 269, 270, 275, 276, 221, 277, 278, 281, - 279, 280, 283, 284, 285, 298, 256, 257, 259, 260, - 286, 301, 251, 253, 302, 308, 309, 310, 222, 267, - 321, 322, 252, 316, 238, 217, 247, 299, 305, 287, - 0, 0, 325, 223, 204, 237, 291, 205, 219, 220, - 248, 249, 323, 289, 293, 294, 206, 326, 271, 297, - 239, 255, 303, 304, 307, 315, 250, 319, 317, 318, - 261, 266, 295, 296, 262, 263, 288, 311, 240, 241, - 231, 232, 233, 234, 235, 327, 328, 329, 272, 273, - 274, 282, 330, 331, 0, 0, 0, 290, 264, 427, - 340, 344, 342, 341, 345, 343, 0, 0, 348, 349, - 210, 211, 212, 213, 214, 215, 292, 306, 320, 350, - 351, 265, 332, 0, 0, 0, 0, 0, 0, 312, - 313, 314, 428, 258, 254, 236, 207, 208, 352, 354, - 353, 355, 356, 357, 358, 359, 360, 363, 362, 361, - 364, 365, 366, 367, 368, 369, 0, 373, 374, 0, - 0, 375, 387, 389, 388, 391, 392, 393, 394, 390, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 426, 439, 440, 441, 443, 442, 300, 324, - 339, 429, 430, 346, 347, 333, 334, 0, 0, 0, - 338, 370, 371, 372, 337, 335, 336 + 0, 14, 16, 17, 76, 79, 88, 165, 166, 18, + 138, 139, 140, 141, 142, 143, 27, 67, 19, 80, + 81, 38, 60, 75, 20, 21, 23, 24, 22, 25, + 26, 111, 112, 113, 114, 115, 161, 77, 66, 92, + 109, 110, 28, 29, 30, 31, 32, 68, 82, 83, + 98, 54, 64, 55, 169, 93, 48, 49, 168, 50, + 51, 102, 106, 119, 127, 148, 103, 61, 33, 34, + 35, 90, 120, 121, 122, 36, 37, 39, 40, 42, + 43, 41, 125, 44, 45, 46, 52, 71, 107, 85, + 126, 78, 144, 86, 87, 104, 105, 91, 47, 69, + 72, 53, 56, 94, 95, 70, 145, 96, 57, 58, + 59, 108, 158, 159, 167, 97, 65, 99, 100, 101, + 146, 62, 63, 84, 73, 74, 89, 116, 117, 118, + 123, 124, 149, 150, 152, 154, 155, 153, 156, 162, + 128, 129, 132, 133, 130, 131, 134, 135, 137, 136, + 147, 157, 170, 172, 171, 173, 174, 175, 151, 160, + 163, 164, 0, 0, 0, 0, 0, 0, 177, 179, + 180, 181, 183, 184, 182, 0, 0, 0, 0, 0, + 186, 188, 189, 190, 191, 192, 0, 0, 0, 0, + 0, 0, 0, 194, 196, 197, 200, 201, 198, 202, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 378, + 380, 382, 381, 387, 383, 384, 385, 386, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 397, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 0, 424, 426, 0, 0, 0, 0, + 0, 0, 0, 433, 435, 436, 437, 439, 438, 440, + 441, 0, 0, 450, 452, 453, 204, 203, 210, 219, + 217, 225, 226, 229, 227, 228, 230, 231, 243, 244, + 245, 246, 247, 269, 270, 271, 276, 277, 222, 278, + 279, 282, 280, 281, 284, 285, 286, 299, 257, 258, + 260, 261, 287, 302, 252, 254, 303, 309, 310, 311, + 223, 268, 322, 323, 253, 317, 239, 218, 248, 300, + 306, 288, 0, 0, 326, 224, 205, 238, 292, 206, + 220, 221, 249, 250, 324, 290, 294, 295, 207, 327, + 272, 298, 240, 256, 304, 305, 308, 316, 251, 320, + 318, 319, 262, 267, 296, 297, 263, 264, 289, 312, + 241, 242, 232, 233, 234, 235, 236, 328, 329, 330, + 273, 274, 275, 283, 331, 332, 0, 0, 0, 291, + 265, 428, 341, 345, 343, 342, 346, 344, 0, 0, + 349, 350, 211, 212, 213, 214, 215, 216, 293, 307, + 321, 351, 352, 266, 333, 0, 0, 0, 0, 0, + 0, 313, 314, 315, 429, 259, 255, 237, 208, 209, + 353, 355, 354, 356, 357, 358, 359, 360, 361, 364, + 363, 362, 365, 366, 367, 368, 369, 370, 0, 374, + 375, 0, 0, 376, 388, 390, 389, 392, 393, 394, + 395, 391, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 427, 442, 443, 444, 446, 445, + 447, 448, 454, 455, 301, 325, 340, 430, 431, 347, + 348, 334, 335, 0, 0, 0, 339, 371, 372, 373, + 338, 336, 337 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, - -200 + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 11, 12, 20, 188, 13, 21, 355, 14, - 22, 367, 15, 23, 380, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + -1, 1, 12, 13, 22, 191, 14, 23, 358, 15, + 24, 370, 16, 25, 383, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 359, 360, 361, 362, 363, 364, 371, 372, 373, + 374, 375, 384, 385, 386, 387, 388, 389, 390, 17, + 26, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 18, 27, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 19, 28, 434, 435, 348, + 349, 350, 351, 20, 29, 443, 444, 445, 446, 447, + 448, 449, 450, 21, 30, 453, 454, 455 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_uint16 yytable[] = +{ + 2, 376, 352, 433, 353, 354, 365, 451, 452, 456, + 0, 3, 457, 458, 366, 367, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 391, 392, + 393, 394, 395, 396, 397, 398, 459, 377, 378, 460, + 461, 4, 462, 463, 464, 465, 466, 5, 436, 437, + 438, 439, 440, 441, 442, 467, 468, 469, 470, 471, + 472, 473, 379, 474, 475, 355, 476, 477, 478, 479, + 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 6, 501, 502, 503, 356, 504, 357, 368, 505, + 369, 506, 507, 508, 509, 510, 511, 7, 512, 513, + 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, + 380, 381, 524, 525, 526, 527, 528, 529, 530, 531, + 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 8, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 382, 556, 557, 558, 559, + 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, + 590, 591, 9, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 10, 603, 604, 605, 606, 607, + 608, 609, 610, 611, 612, 613, 614, 0, 11, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 615, 616, 617, + 618, 59, 60, 61, 619, 620, 621, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 622, 623, + 624, 625, 626, 627, 628, 629, 630, 103, 104, 105, + 631, 106, 107, 108, 632, 633, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 634, + 635, 636, 637, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 638, 639, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 651, + 175, 652, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 653, 654, 655, 656, 657, 658, 659, 660, 185, + 186, 187, 188, 189, 190, 661, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, + 676, 677, 678, 679, 680, 681, 682 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 40, 40, 108, 42, 43, 40, 219, 220, 10, + -1, 11, 10, 10, 48, 49, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 92, 93, + 94, 95, 96, 97, 98, 99, 10, 76, 77, 10, + 10, 41, 10, 10, 10, 10, 10, 47, 205, 206, + 207, 208, 209, 210, 211, 10, 10, 10, 10, 10, + 10, 10, 101, 10, 10, 103, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 91, 10, 10, 10, 133, 10, 135, 132, 10, + 134, 10, 10, 10, 10, 10, 10, 107, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 159, 160, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 145, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 194, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 192, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 204, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, -1, 218, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 10, 10, 10, + 10, 44, 45, 46, 10, 10, 10, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 100, 101, 102, + 10, 104, 105, 106, 10, 10, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 10, + 10, 10, 10, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 10, + 193, 10, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 10, 10, 10, 10, 10, 10, 10, 10, 212, + 213, 214, 215, 216, 217, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint16 yystos[] = +{ + 0, 222, 0, 11, 41, 47, 91, 107, 145, 192, + 204, 218, 223, 224, 227, 230, 233, 410, 421, 436, + 444, 454, 225, 228, 231, 234, 411, 422, 437, 445, + 455, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 44, + 45, 46, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 100, 101, 102, 104, 105, 106, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 193, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 212, 213, 214, 215, 216, + 217, 226, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, @@ -1362,165 +1529,22 @@ static const yytype_int16 yydefgoto[] = 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 356, 357, 358, 359, 360, 361, 368, 369, 370, - 371, 372, 381, 382, 383, 384, 385, 386, 387, 16, - 24, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 17, 25, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 18, 26, 431, 432, 345, - 346, 347, 348, 19, 27, 438, 439, 440, 441, 442, - 443 -}; - - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ -static const yytype_uint16 yytable[] = -{ - 2, 349, 430, 350, 351, 362, 433, 434, 435, 436, - 437, 3, 444, 363, 364, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 388, 389, 390, - 391, 392, 393, 394, 395, 445, 446, 447, 448, 449, - 450, 4, 451, 452, 453, 454, 455, 5, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 352, 472, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, - 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, - 497, 6, 498, 499, 353, 500, 354, 365, 501, 366, - 502, 503, 504, 505, 506, 507, 0, 7, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 508, 509, 510, 511, - 56, 57, 58, 512, 513, 8, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 514, 515, 516, - 517, 518, 9, 519, 520, 521, 100, 101, 102, 522, - 103, 104, 105, 523, 10, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 524, 525, - 526, 527, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 528, 529, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 540, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 373, 172, - 541, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 542, 543, 544, 545, 546, 547, 182, 183, 184, 185, - 186, 187, 548, 549, 550, 551, 552, 553, 554, 555, - 556, 557, 558, 559, 374, 375, 560, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, - 574, 575, 576, 577, 578, 579, 580, 581, 582, 376, - 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 377, 378, 640, - 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, - 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, - 661, 662, 663, 664, 665, 666, 0, 0, 0, 0, - 0, 0, 379 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 40, 108, 42, 43, 40, 205, 206, 207, 208, - 209, 11, 10, 48, 49, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 92, 93, 94, - 95, 96, 97, 98, 99, 10, 10, 10, 10, 10, - 10, 41, 10, 10, 10, 10, 10, 47, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 103, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 91, 10, 10, 133, 10, 135, 132, 10, 134, - 10, 10, 10, 10, 10, 10, -1, 107, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 10, 10, 10, 10, - 44, 45, 46, 10, 10, 145, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 10, 10, 10, - 10, 10, 192, 10, 10, 10, 100, 101, 102, 10, - 104, 105, 106, 10, 204, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 10, 10, - 10, 10, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 40, 193, - 10, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 10, 10, 10, 10, 10, 10, 210, 211, 212, 213, - 214, 215, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 76, 77, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 101, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 159, 160, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, -1, -1, -1, -1, - -1, -1, 194 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = -{ - 0, 217, 0, 11, 41, 47, 91, 107, 145, 192, - 204, 218, 219, 222, 225, 228, 405, 416, 431, 439, - 220, 223, 226, 229, 406, 417, 432, 440, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 44, 45, 46, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 100, 101, 102, 104, 105, 106, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 193, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 210, 211, 212, 213, 214, 215, 221, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 435, 436, 437, 438, 40, - 42, 43, 103, 133, 135, 224, 387, 388, 389, 390, - 391, 392, 40, 48, 49, 132, 134, 227, 393, 394, - 395, 396, 397, 40, 76, 77, 101, 159, 160, 194, - 230, 398, 399, 400, 401, 402, 403, 404, 92, 93, - 94, 95, 96, 97, 98, 99, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 108, 433, 434, 205, 206, 207, 208, 209, 441, 442, - 443, 444, 445, 446, 10, 10, 10, 10, 10, 10, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 440, 441, + 442, 443, 40, 42, 43, 103, 133, 135, 229, 392, + 393, 394, 395, 396, 397, 40, 48, 49, 132, 134, + 232, 398, 399, 400, 401, 402, 40, 76, 77, 101, + 159, 160, 194, 235, 403, 404, 405, 406, 407, 408, + 409, 92, 93, 94, 95, 96, 97, 98, 99, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 108, 438, 439, 205, 206, 207, 208, + 209, 210, 211, 446, 447, 448, 449, 450, 451, 452, + 453, 219, 220, 456, 457, 458, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, @@ -1542,64 +1566,66 @@ static const yytype_uint16 yystos[] = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10 + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 216, 217, 217, 218, 218, 218, 218, 218, 218, - 218, 218, 219, 220, 220, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 222, 223, 223, 224, 224, - 224, 224, 224, 224, 225, 226, 226, 227, 227, 227, - 227, 227, 228, 229, 229, 230, 230, 230, 230, 230, - 230, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 406, 407, - 407, 407, 407, 407, 407, 407, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 417, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 440, 441, 441, 441, 441, 441, 442, - 443, 444, 445, 446 + 0, 221, 222, 222, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 224, 225, 225, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 226, 227, 228, 228, 229, + 229, 229, 229, 229, 229, 230, 231, 231, 232, 232, + 232, 232, 232, 233, 234, 234, 235, 235, 235, 235, + 235, 235, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 411, + 412, 412, 412, 412, 412, 412, 412, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 422, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 445, 446, 446, 446, 446, 446, + 446, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 455, 456, 456, 457, 458 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, + 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1615,10 +1641,10 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, - 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1628,21 +1654,22 @@ static const yytype_uint8 yyr2[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 3, 4, 4, 4, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, + 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, + 2, 2, 2, 2, 3, 3, 4, 4, 4, 3, + 3, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 2, 2, 2, 1, 2, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, + 2, 3, 3, 3, 2, 2, 2, 1, 2, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 0, 1, 2, 2, 2, 3, - 3, 1, 2, 0, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2 + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 2, 2, 2, + 3, 3, 1, 2, 0, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 0, 1, 1, 2, 2 }; @@ -2318,16 +2345,16 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 12: -#line 161 "util/configparser.y" /* yacc.c:1646 */ + case 13: +#line 165 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(server:)\n")); } -#line 2327 "util/configparser.c" /* yacc.c:1646 */ +#line 2354 "util/configparser.c" /* yacc.c:1646 */ break; - case 175: -#line 239 "util/configparser.y" /* yacc.c:1646 */ + case 176: +#line 243 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(stub_zone:)\n")); @@ -2338,11 +2365,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2342 "util/configparser.c" /* yacc.c:1646 */ +#line 2369 "util/configparser.c" /* yacc.c:1646 */ break; - case 184: -#line 256 "util/configparser.y" /* yacc.c:1646 */ + case 185: +#line 260 "util/configparser.y" /* yacc.c:1646 */ { struct config_stub* s; OUTYY(("\nP(forward_zone:)\n")); @@ -2353,11 +2380,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2357 "util/configparser.c" /* yacc.c:1646 */ +#line 2384 "util/configparser.c" /* yacc.c:1646 */ break; - case 192: -#line 273 "util/configparser.y" /* yacc.c:1646 */ + case 193: +#line 277 "util/configparser.y" /* yacc.c:1646 */ { struct config_view* s; OUTYY(("\nP(view:)\n")); @@ -2370,11 +2397,11 @@ yyreduce: } else yyerror("out of memory"); } -#line 2374 "util/configparser.c" /* yacc.c:1646 */ +#line 2401 "util/configparser.c" /* yacc.c:1646 */ break; - case 202: -#line 292 "util/configparser.y" /* yacc.c:1646 */ + case 203: +#line 296 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2382,11 +2409,11 @@ yyreduce: else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2386 "util/configparser.c" /* yacc.c:1646 */ +#line 2413 "util/configparser.c" /* yacc.c:1646 */ break; - case 203: -#line 301 "util/configparser.y" /* yacc.c:1646 */ + case 204: +#line 305 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2394,11 +2421,11 @@ yyreduce: else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2398 "util/configparser.c" /* yacc.c:1646 */ +#line 2425 "util/configparser.c" /* yacc.c:1646 */ break; - case 204: -#line 310 "util/configparser.y" /* yacc.c:1646 */ + case 205: +#line 314 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2408,11 +2435,11 @@ yyreduce: else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2412 "util/configparser.c" /* yacc.c:1646 */ +#line 2439 "util/configparser.c" /* yacc.c:1646 */ break; - case 205: -#line 321 "util/configparser.y" /* yacc.c:1646 */ + case 206: +#line 325 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2420,11 +2447,11 @@ yyreduce: else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2424 "util/configparser.c" /* yacc.c:1646 */ +#line 2451 "util/configparser.c" /* yacc.c:1646 */ break; - case 206: -#line 330 "util/configparser.y" /* yacc.c:1646 */ + case 207: +#line 334 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2432,11 +2459,11 @@ yyreduce: else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2436 "util/configparser.c" /* yacc.c:1646 */ +#line 2463 "util/configparser.c" /* yacc.c:1646 */ break; - case 207: -#line 339 "util/configparser.y" /* yacc.c:1646 */ + case 208: +#line 343 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2444,11 +2471,11 @@ yyreduce: else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2448 "util/configparser.c" /* yacc.c:1646 */ +#line 2475 "util/configparser.c" /* yacc.c:1646 */ break; - case 208: -#line 348 "util/configparser.y" /* yacc.c:1646 */ + case 209: +#line 352 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0) @@ -2458,11 +2485,11 @@ yyreduce: else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2462 "util/configparser.c" /* yacc.c:1646 */ +#line 2489 "util/configparser.c" /* yacc.c:1646 */ break; - case 209: -#line 359 "util/configparser.y" /* yacc.c:1646 */ + case 210: +#line 363 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2470,11 +2497,11 @@ yyreduce: else cfg_parser->cfg->port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2474 "util/configparser.c" /* yacc.c:1646 */ +#line 2501 "util/configparser.c" /* yacc.c:1646 */ break; - case 210: -#line 368 "util/configparser.y" /* yacc.c:1646 */ + case 211: +#line 372 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str))); @@ -2484,11 +2511,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2488 "util/configparser.c" /* yacc.c:1646 */ +#line 2515 "util/configparser.c" /* yacc.c:1646 */ break; - case 211: -#line 379 "util/configparser.y" /* yacc.c:1646 */ + case 212: +#line 383 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str))); @@ -2499,11 +2526,11 @@ yyreduce: OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); #endif } -#line 2503 "util/configparser.c" /* yacc.c:1646 */ +#line 2530 "util/configparser.c" /* yacc.c:1646 */ break; - case 212: -#line 392 "util/configparser.y" /* yacc.c:1646 */ + case 213: +#line 396 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str))); @@ -2517,11 +2544,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2521 "util/configparser.c" /* yacc.c:1646 */ +#line 2548 "util/configparser.c" /* yacc.c:1646 */ break; - case 213: -#line 407 "util/configparser.y" /* yacc.c:1646 */ + case 214: +#line 411 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str))); @@ -2531,11 +2558,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2535 "util/configparser.c" /* yacc.c:1646 */ +#line 2562 "util/configparser.c" /* yacc.c:1646 */ break; - case 214: -#line 418 "util/configparser.y" /* yacc.c:1646 */ + case 215: +#line 422 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str))); @@ -2551,11 +2578,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2555 "util/configparser.c" /* yacc.c:1646 */ +#line 2582 "util/configparser.c" /* yacc.c:1646 */ break; - case 215: -#line 435 "util/configparser.y" /* yacc.c:1646 */ + case 216: +#line 439 "util/configparser.y" /* yacc.c:1646 */ { #ifdef CLIENT_SUBNET OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str))); @@ -2571,11 +2598,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2575 "util/configparser.c" /* yacc.c:1646 */ +#line 2602 "util/configparser.c" /* yacc.c:1646 */ break; - case 216: -#line 452 "util/configparser.y" /* yacc.c:1646 */ + case 217: +#line 456 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_ifs == 0) @@ -2587,11 +2614,11 @@ yyreduce: else cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str); } -#line 2591 "util/configparser.c" /* yacc.c:1646 */ +#line 2618 "util/configparser.c" /* yacc.c:1646 */ break; - case 217: -#line 465 "util/configparser.y" /* yacc.c:1646 */ + case 218: +#line 469 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->num_out_ifs == 0) @@ -2605,11 +2632,11 @@ yyreduce: cfg_parser->cfg->out_ifs[ cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str); } -#line 2609 "util/configparser.c" /* yacc.c:1646 */ +#line 2636 "util/configparser.c" /* yacc.c:1646 */ break; - case 218: -#line 480 "util/configparser.y" /* yacc.c:1646 */ + case 219: +#line 484 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2617,11 +2644,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2621 "util/configparser.c" /* yacc.c:1646 */ +#line 2648 "util/configparser.c" /* yacc.c:1646 */ break; - case 219: -#line 489 "util/configparser.y" /* yacc.c:1646 */ + case 220: +#line 493 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 1, @@ -2629,11 +2656,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2633 "util/configparser.c" /* yacc.c:1646 */ +#line 2660 "util/configparser.c" /* yacc.c:1646 */ break; - case 220: -#line 498 "util/configparser.y" /* yacc.c:1646 */ + case 221: +#line 502 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str))); if(!cfg_mark_ports((yyvsp[0].str), 0, @@ -2641,11 +2668,11 @@ yyreduce: yyerror("port number or range (\"low-high\") expected"); free((yyvsp[0].str)); } -#line 2645 "util/configparser.c" /* yacc.c:1646 */ +#line 2672 "util/configparser.c" /* yacc.c:1646 */ break; - case 221: -#line 507 "util/configparser.y" /* yacc.c:1646 */ + case 222: +#line 511 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2653,11 +2680,11 @@ yyreduce: else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2657 "util/configparser.c" /* yacc.c:1646 */ +#line 2684 "util/configparser.c" /* yacc.c:1646 */ break; - case 222: -#line 516 "util/configparser.y" /* yacc.c:1646 */ + case 223: +#line 520 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2665,11 +2692,11 @@ yyreduce: else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2669 "util/configparser.c" /* yacc.c:1646 */ +#line 2696 "util/configparser.c" /* yacc.c:1646 */ break; - case 223: -#line 525 "util/configparser.y" /* yacc.c:1646 */ + case 224: +#line 529 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2677,11 +2704,11 @@ yyreduce: else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2681 "util/configparser.c" /* yacc.c:1646 */ +#line 2708 "util/configparser.c" /* yacc.c:1646 */ break; - case 224: -#line 534 "util/configparser.y" /* yacc.c:1646 */ + case 225: +#line 538 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2689,11 +2716,11 @@ yyreduce: else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2693 "util/configparser.c" /* yacc.c:1646 */ +#line 2720 "util/configparser.c" /* yacc.c:1646 */ break; - case 225: -#line 543 "util/configparser.y" /* yacc.c:1646 */ + case 226: +#line 547 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2701,11 +2728,11 @@ yyreduce: else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2705 "util/configparser.c" /* yacc.c:1646 */ +#line 2732 "util/configparser.c" /* yacc.c:1646 */ break; - case 226: -#line 552 "util/configparser.y" /* yacc.c:1646 */ + case 227: +#line 556 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2713,11 +2740,11 @@ yyreduce: else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2717 "util/configparser.c" /* yacc.c:1646 */ +#line 2744 "util/configparser.c" /* yacc.c:1646 */ break; - case 227: -#line 561 "util/configparser.y" /* yacc.c:1646 */ + case 228: +#line 565 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2725,11 +2752,11 @@ yyreduce: else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2729 "util/configparser.c" /* yacc.c:1646 */ +#line 2756 "util/configparser.c" /* yacc.c:1646 */ break; - case 228: -#line 570 "util/configparser.y" /* yacc.c:1646 */ + case 229: +#line 574 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2737,11 +2764,11 @@ yyreduce: else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2741 "util/configparser.c" /* yacc.c:1646 */ +#line 2768 "util/configparser.c" /* yacc.c:1646 */ break; - case 229: -#line 579 "util/configparser.y" /* yacc.c:1646 */ + case 230: +#line 583 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2749,11 +2776,11 @@ yyreduce: else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2753 "util/configparser.c" /* yacc.c:1646 */ +#line 2780 "util/configparser.c" /* yacc.c:1646 */ break; - case 230: -#line 588 "util/configparser.y" /* yacc.c:1646 */ + case 231: +#line 592 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -2761,11 +2788,11 @@ yyreduce: else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2765 "util/configparser.c" /* yacc.c:1646 */ +#line 2792 "util/configparser.c" /* yacc.c:1646 */ break; - case 231: -#line 597 "util/configparser.y" /* yacc.c:1646 */ + case 232: +#line 601 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2773,11 +2800,11 @@ yyreduce: else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2777 "util/configparser.c" /* yacc.c:1646 */ +#line 2804 "util/configparser.c" /* yacc.c:1646 */ break; - case 232: -#line 606 "util/configparser.y" /* yacc.c:1646 */ + case 233: +#line 610 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2785,31 +2812,31 @@ yyreduce: else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2789 "util/configparser.c" /* yacc.c:1646 */ +#line 2816 "util/configparser.c" /* yacc.c:1646 */ break; - case 233: -#line 615 "util/configparser.y" /* yacc.c:1646 */ + case 234: +#line 619 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_key); cfg_parser->cfg->ssl_service_key = (yyvsp[0].str); } -#line 2799 "util/configparser.c" /* yacc.c:1646 */ +#line 2826 "util/configparser.c" /* yacc.c:1646 */ break; - case 234: -#line 622 "util/configparser.y" /* yacc.c:1646 */ + case 235: +#line 626 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->ssl_service_pem); cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str); } -#line 2809 "util/configparser.c" /* yacc.c:1646 */ +#line 2836 "util/configparser.c" /* yacc.c:1646 */ break; - case 235: -#line 629 "util/configparser.y" /* yacc.c:1646 */ + case 236: +#line 633 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -2817,11 +2844,11 @@ yyreduce: else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 2821 "util/configparser.c" /* yacc.c:1646 */ +#line 2848 "util/configparser.c" /* yacc.c:1646 */ break; - case 236: -#line 638 "util/configparser.y" /* yacc.c:1646 */ + case 237: +#line 642 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2829,11 +2856,11 @@ yyreduce: else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2833 "util/configparser.c" /* yacc.c:1646 */ +#line 2860 "util/configparser.c" /* yacc.c:1646 */ break; - case 237: -#line 647 "util/configparser.y" /* yacc.c:1646 */ + case 238: +#line 651 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2841,11 +2868,11 @@ yyreduce: else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2845 "util/configparser.c" /* yacc.c:1646 */ +#line 2872 "util/configparser.c" /* yacc.c:1646 */ break; - case 238: -#line 656 "util/configparser.y" /* yacc.c:1646 */ + case 239: +#line 660 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2858,11 +2885,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 2862 "util/configparser.c" /* yacc.c:1646 */ +#line 2889 "util/configparser.c" /* yacc.c:1646 */ break; - case 239: -#line 670 "util/configparser.y" /* yacc.c:1646 */ + case 240: +#line 674 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2870,11 +2897,11 @@ yyreduce: else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2874 "util/configparser.c" /* yacc.c:1646 */ +#line 2901 "util/configparser.c" /* yacc.c:1646 */ break; - case 240: -#line 679 "util/configparser.y" /* yacc.c:1646 */ + case 241: +#line 683 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2882,11 +2909,11 @@ yyreduce: else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2886 "util/configparser.c" /* yacc.c:1646 */ +#line 2913 "util/configparser.c" /* yacc.c:1646 */ break; - case 241: -#line 688 "util/configparser.y" /* yacc.c:1646 */ + case 242: +#line 692 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -2894,31 +2921,31 @@ yyreduce: else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 2898 "util/configparser.c" /* yacc.c:1646 */ +#line 2925 "util/configparser.c" /* yacc.c:1646 */ break; - case 242: -#line 697 "util/configparser.y" /* yacc.c:1646 */ + case 243: +#line 701 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->chrootdir); cfg_parser->cfg->chrootdir = (yyvsp[0].str); } -#line 2908 "util/configparser.c" /* yacc.c:1646 */ +#line 2935 "util/configparser.c" /* yacc.c:1646 */ break; - case 243: -#line 704 "util/configparser.y" /* yacc.c:1646 */ + case 244: +#line 708 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_username:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->username); cfg_parser->cfg->username = (yyvsp[0].str); } -#line 2918 "util/configparser.c" /* yacc.c:1646 */ +#line 2945 "util/configparser.c" /* yacc.c:1646 */ break; - case 244: -#line 711 "util/configparser.y" /* yacc.c:1646 */ + case 245: +#line 715 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->directory); @@ -2943,105 +2970,105 @@ yyreduce: } } } -#line 2947 "util/configparser.c" /* yacc.c:1646 */ +#line 2974 "util/configparser.c" /* yacc.c:1646 */ break; - case 245: -#line 737 "util/configparser.y" /* yacc.c:1646 */ + case 246: +#line 741 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->logfile); cfg_parser->cfg->logfile = (yyvsp[0].str); cfg_parser->cfg->use_syslog = 0; } -#line 2958 "util/configparser.c" /* yacc.c:1646 */ +#line 2985 "util/configparser.c" /* yacc.c:1646 */ break; - case 246: -#line 745 "util/configparser.y" /* yacc.c:1646 */ + case 247: +#line 749 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->pidfile); cfg_parser->cfg->pidfile = (yyvsp[0].str); } -#line 2968 "util/configparser.c" /* yacc.c:1646 */ +#line 2995 "util/configparser.c" /* yacc.c:1646 */ break; - case 247: -#line 752 "util/configparser.y" /* yacc.c:1646 */ + case 248: +#line 756 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2978 "util/configparser.c" /* yacc.c:1646 */ +#line 3005 "util/configparser.c" /* yacc.c:1646 */ break; - case 248: -#line 759 "util/configparser.y" /* yacc.c:1646 */ + case 249: +#line 763 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dlv_anchor_file); cfg_parser->cfg->dlv_anchor_file = (yyvsp[0].str); } -#line 2988 "util/configparser.c" /* yacc.c:1646 */ +#line 3015 "util/configparser.c" /* yacc.c:1646 */ break; - case 249: -#line 766 "util/configparser.y" /* yacc.c:1646 */ + case 250: +#line 770 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 2998 "util/configparser.c" /* yacc.c:1646 */ +#line 3025 "util/configparser.c" /* yacc.c:1646 */ break; - case 250: -#line 773 "util/configparser.y" /* yacc.c:1646 */ + case 251: +#line 777 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> auto_trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3009 "util/configparser.c" /* yacc.c:1646 */ +#line 3036 "util/configparser.c" /* yacc.c:1646 */ break; - case 251: -#line 781 "util/configparser.y" /* yacc.c:1646 */ + case 252: +#line 785 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trust_anchor_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3020 "util/configparser.c" /* yacc.c:1646 */ +#line 3047 "util/configparser.c" /* yacc.c:1646 */ break; - case 252: -#line 789 "util/configparser.y" /* yacc.c:1646 */ + case 253: +#line 793 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg-> trusted_keys_file_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3031 "util/configparser.c" /* yacc.c:1646 */ +#line 3058 "util/configparser.c" /* yacc.c:1646 */ break; - case 253: -#line 797 "util/configparser.y" /* yacc.c:1646 */ + case 254: +#line 801 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3041 "util/configparser.c" /* yacc.c:1646 */ +#line 3068 "util/configparser.c" /* yacc.c:1646 */ break; - case 254: -#line 804 "util/configparser.y" /* yacc.c:1646 */ + case 255: +#line 808 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3051,21 +3078,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3055 "util/configparser.c" /* yacc.c:1646 */ +#line 3082 "util/configparser.c" /* yacc.c:1646 */ break; - case 255: -#line 815 "util/configparser.y" /* yacc.c:1646 */ + case 256: +#line 819 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3065 "util/configparser.c" /* yacc.c:1646 */ +#line 3092 "util/configparser.c" /* yacc.c:1646 */ break; - case 256: -#line 822 "util/configparser.y" /* yacc.c:1646 */ + case 257: +#line 826 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3073,11 +3100,11 @@ yyreduce: else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3077 "util/configparser.c" /* yacc.c:1646 */ +#line 3104 "util/configparser.c" /* yacc.c:1646 */ break; - case 257: -#line 831 "util/configparser.y" /* yacc.c:1646 */ + case 258: +#line 835 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3085,11 +3112,11 @@ yyreduce: else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3089 "util/configparser.c" /* yacc.c:1646 */ +#line 3116 "util/configparser.c" /* yacc.c:1646 */ break; - case 258: -#line 840 "util/configparser.y" /* yacc.c:1646 */ + case 259: +#line 844 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3097,53 +3124,53 @@ yyreduce: else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3101 "util/configparser.c" /* yacc.c:1646 */ +#line 3128 "util/configparser.c" /* yacc.c:1646 */ break; - case 259: -#line 849 "util/configparser.y" /* yacc.c:1646 */ + case 260: +#line 853 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->identity); cfg_parser->cfg->identity = (yyvsp[0].str); } -#line 3111 "util/configparser.c" /* yacc.c:1646 */ +#line 3138 "util/configparser.c" /* yacc.c:1646 */ break; - case 260: -#line 856 "util/configparser.y" /* yacc.c:1646 */ + case 261: +#line 860 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->version); cfg_parser->cfg->version = (yyvsp[0].str); } -#line 3121 "util/configparser.c" /* yacc.c:1646 */ +#line 3148 "util/configparser.c" /* yacc.c:1646 */ break; - case 261: -#line 863 "util/configparser.y" /* yacc.c:1646 */ + case 262: +#line 867 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3132 "util/configparser.c" /* yacc.c:1646 */ +#line 3159 "util/configparser.c" /* yacc.c:1646 */ break; - case 262: -#line 871 "util/configparser.y" /* yacc.c:1646 */ + case 263: +#line 875 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf)) yyerror("buffer size expected"); free((yyvsp[0].str)); } -#line 3143 "util/configparser.c" /* yacc.c:1646 */ +#line 3170 "util/configparser.c" /* yacc.c:1646 */ break; - case 263: -#line 879 "util/configparser.y" /* yacc.c:1646 */ + case 264: +#line 883 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3152,11 +3179,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3156 "util/configparser.c" /* yacc.c:1646 */ +#line 3183 "util/configparser.c" /* yacc.c:1646 */ break; - case 264: -#line 889 "util/configparser.y" /* yacc.c:1646 */ + case 265: +#line 893 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3165,11 +3192,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3169 "util/configparser.c" /* yacc.c:1646 */ +#line 3196 "util/configparser.c" /* yacc.c:1646 */ break; - case 265: -#line 899 "util/configparser.y" /* yacc.c:1646 */ + case 266: +#line 903 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3178,11 +3205,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3182 "util/configparser.c" /* yacc.c:1646 */ +#line 3209 "util/configparser.c" /* yacc.c:1646 */ break; - case 266: -#line 909 "util/configparser.y" /* yacc.c:1646 */ + case 267: +#line 913 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3194,11 +3221,11 @@ yyreduce: else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3198 "util/configparser.c" /* yacc.c:1646 */ +#line 3225 "util/configparser.c" /* yacc.c:1646 */ break; - case 267: -#line 922 "util/configparser.y" /* yacc.c:1646 */ + case 268: +#line 926 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3208,22 +3235,22 @@ yyreduce: else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3212 "util/configparser.c" /* yacc.c:1646 */ +#line 3239 "util/configparser.c" /* yacc.c:1646 */ break; - case 268: -#line 933 "util/configparser.y" /* yacc.c:1646 */ + case 269: +#line 937 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3223 "util/configparser.c" /* yacc.c:1646 */ +#line 3250 "util/configparser.c" /* yacc.c:1646 */ break; - case 269: -#line 941 "util/configparser.y" /* yacc.c:1646 */ + case 270: +#line 945 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3235,11 +3262,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3239 "util/configparser.c" /* yacc.c:1646 */ +#line 3266 "util/configparser.c" /* yacc.c:1646 */ break; - case 270: -#line 954 "util/configparser.y" /* yacc.c:1646 */ + case 271: +#line 958 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3247,11 +3274,11 @@ yyreduce: else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3251 "util/configparser.c" /* yacc.c:1646 */ +#line 3278 "util/configparser.c" /* yacc.c:1646 */ break; - case 271: -#line 963 "util/configparser.y" /* yacc.c:1646 */ + case 272: +#line 967 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3259,11 +3286,11 @@ yyreduce: else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3263 "util/configparser.c" /* yacc.c:1646 */ +#line 3290 "util/configparser.c" /* yacc.c:1646 */ break; - case 272: -#line 972 "util/configparser.y" /* yacc.c:1646 */ + case 273: +#line 976 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3271,11 +3298,11 @@ yyreduce: else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3275 "util/configparser.c" /* yacc.c:1646 */ +#line 3302 "util/configparser.c" /* yacc.c:1646 */ break; - case 273: -#line 981 "util/configparser.y" /* yacc.c:1646 */ + case 274: +#line 985 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3284,11 +3311,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3288 "util/configparser.c" /* yacc.c:1646 */ +#line 3315 "util/configparser.c" /* yacc.c:1646 */ break; - case 274: -#line 991 "util/configparser.y" /* yacc.c:1646 */ + case 275: +#line 995 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3297,22 +3324,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3301 "util/configparser.c" /* yacc.c:1646 */ +#line 3328 "util/configparser.c" /* yacc.c:1646 */ break; - case 275: -#line 1001 "util/configparser.y" /* yacc.c:1646 */ + case 276: +#line 1005 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3312 "util/configparser.c" /* yacc.c:1646 */ +#line 3339 "util/configparser.c" /* yacc.c:1646 */ break; - case 276: -#line 1009 "util/configparser.y" /* yacc.c:1646 */ + case 277: +#line 1013 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3324,11 +3351,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3328 "util/configparser.c" /* yacc.c:1646 */ +#line 3355 "util/configparser.c" /* yacc.c:1646 */ break; - case 277: -#line 1022 "util/configparser.y" /* yacc.c:1646 */ + case 278: +#line 1026 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3336,22 +3363,22 @@ yyreduce: else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3340 "util/configparser.c" /* yacc.c:1646 */ +#line 3367 "util/configparser.c" /* yacc.c:1646 */ break; - case 278: -#line 1031 "util/configparser.y" /* yacc.c:1646 */ + case 279: +#line 1035 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " "removed, use infra-host-ttl)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3351 "util/configparser.c" /* yacc.c:1646 */ +#line 3378 "util/configparser.c" /* yacc.c:1646 */ break; - case 279: -#line 1039 "util/configparser.y" /* yacc.c:1646 */ + case 280: +#line 1043 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3359,22 +3386,22 @@ yyreduce: else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3363 "util/configparser.c" /* yacc.c:1646 */ +#line 3390 "util/configparser.c" /* yacc.c:1646 */ break; - case 280: -#line 1048 "util/configparser.y" /* yacc.c:1646 */ + case 281: +#line 1052 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str))); verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " "(option removed, use infra-cache-numhosts)", (yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3374 "util/configparser.c" /* yacc.c:1646 */ +#line 3401 "util/configparser.c" /* yacc.c:1646 */ break; - case 281: -#line 1056 "util/configparser.y" /* yacc.c:1646 */ + case 282: +#line 1060 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3386,11 +3413,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3390 "util/configparser.c" /* yacc.c:1646 */ +#line 3417 "util/configparser.c" /* yacc.c:1646 */ break; - case 282: -#line 1069 "util/configparser.y" /* yacc.c:1646 */ + case 283: +#line 1073 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3398,21 +3425,21 @@ yyreduce: else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3402 "util/configparser.c" /* yacc.c:1646 */ +#line 3429 "util/configparser.c" /* yacc.c:1646 */ break; - case 283: -#line 1078 "util/configparser.y" /* yacc.c:1646 */ + case 284: +#line 1082 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->target_fetch_policy); cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str); } -#line 3412 "util/configparser.c" /* yacc.c:1646 */ +#line 3439 "util/configparser.c" /* yacc.c:1646 */ break; - case 284: -#line 1085 "util/configparser.y" /* yacc.c:1646 */ + case 285: +#line 1089 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3421,11 +3448,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3425 "util/configparser.c" /* yacc.c:1646 */ +#line 3452 "util/configparser.c" /* yacc.c:1646 */ break; - case 285: -#line 1095 "util/configparser.y" /* yacc.c:1646 */ + case 286: +#line 1099 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3434,11 +3461,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3438 "util/configparser.c" /* yacc.c:1646 */ +#line 3465 "util/configparser.c" /* yacc.c:1646 */ break; - case 286: -#line 1105 "util/configparser.y" /* yacc.c:1646 */ + case 287: +#line 1109 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3447,11 +3474,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3451 "util/configparser.c" /* yacc.c:1646 */ +#line 3478 "util/configparser.c" /* yacc.c:1646 */ break; - case 287: -#line 1115 "util/configparser.y" /* yacc.c:1646 */ + case 288: +#line 1119 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3460,11 +3487,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3464 "util/configparser.c" /* yacc.c:1646 */ +#line 3491 "util/configparser.c" /* yacc.c:1646 */ break; - case 288: -#line 1125 "util/configparser.y" /* yacc.c:1646 */ + case 289: +#line 1129 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3473,11 +3500,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3477 "util/configparser.c" /* yacc.c:1646 */ +#line 3504 "util/configparser.c" /* yacc.c:1646 */ break; - case 289: -#line 1135 "util/configparser.y" /* yacc.c:1646 */ + case 290: +#line 1139 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3486,11 +3513,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3490 "util/configparser.c" /* yacc.c:1646 */ +#line 3517 "util/configparser.c" /* yacc.c:1646 */ break; - case 290: -#line 1145 "util/configparser.y" /* yacc.c:1646 */ + case 291: +#line 1149 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3499,11 +3526,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3503 "util/configparser.c" /* yacc.c:1646 */ +#line 3530 "util/configparser.c" /* yacc.c:1646 */ break; - case 291: -#line 1155 "util/configparser.y" /* yacc.c:1646 */ + case 292: +#line 1159 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3512,41 +3539,41 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3516 "util/configparser.c" /* yacc.c:1646 */ +#line 3543 "util/configparser.c" /* yacc.c:1646 */ break; - case 292: -#line 1165 "util/configparser.y" /* yacc.c:1646 */ + case 293: +#line 1169 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3526 "util/configparser.c" /* yacc.c:1646 */ +#line 3553 "util/configparser.c" /* yacc.c:1646 */ break; - case 293: -#line 1172 "util/configparser.y" /* yacc.c:1646 */ + case 294: +#line 1176 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3536 "util/configparser.c" /* yacc.c:1646 */ +#line 3563 "util/configparser.c" /* yacc.c:1646 */ break; - case 294: -#line 1179 "util/configparser.y" /* yacc.c:1646 */ + case 295: +#line 1183 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3546 "util/configparser.c" /* yacc.c:1646 */ +#line 3573 "util/configparser.c" /* yacc.c:1646 */ break; - case 295: -#line 1186 "util/configparser.y" /* yacc.c:1646 */ + case 296: +#line 1190 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3554,11 +3581,11 @@ yyreduce: else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3558 "util/configparser.c" /* yacc.c:1646 */ +#line 3585 "util/configparser.c" /* yacc.c:1646 */ break; - case 296: -#line 1195 "util/configparser.y" /* yacc.c:1646 */ + case 297: +#line 1199 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3566,11 +3593,11 @@ yyreduce: else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3570 "util/configparser.c" /* yacc.c:1646 */ +#line 3597 "util/configparser.c" /* yacc.c:1646 */ break; - case 297: -#line 1204 "util/configparser.y" /* yacc.c:1646 */ + case 298: +#line 1208 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3578,21 +3605,21 @@ yyreduce: else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3582 "util/configparser.c" /* yacc.c:1646 */ +#line 3609 "util/configparser.c" /* yacc.c:1646 */ break; - case 298: -#line 1213 "util/configparser.y" /* yacc.c:1646 */ + case 299: +#line 1217 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 3592 "util/configparser.c" /* yacc.c:1646 */ +#line 3619 "util/configparser.c" /* yacc.c:1646 */ break; - case 299: -#line 1220 "util/configparser.y" /* yacc.c:1646 */ + case 300: +#line 1224 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3601,11 +3628,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3605 "util/configparser.c" /* yacc.c:1646 */ +#line 3632 "util/configparser.c" /* yacc.c:1646 */ break; - case 300: -#line 1230 "util/configparser.y" /* yacc.c:1646 */ + case 301: +#line 1234 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "deny")!=0 && strcmp((yyvsp[0].str), "refuse")!=0 && @@ -3621,21 +3648,21 @@ yyreduce: fatal_exit("out of memory adding acl"); } } -#line 3625 "util/configparser.c" /* yacc.c:1646 */ +#line 3652 "util/configparser.c" /* yacc.c:1646 */ break; - case 301: -#line 1247 "util/configparser.y" /* yacc.c:1646 */ + case 302: +#line 1251 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->module_conf); cfg_parser->cfg->module_conf = (yyvsp[0].str); } -#line 3635 "util/configparser.c" /* yacc.c:1646 */ +#line 3662 "util/configparser.c" /* yacc.c:1646 */ break; - case 302: -#line 1254 "util/configparser.y" /* yacc.c:1646 */ + case 303: +#line 1258 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3652,11 +3679,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3656 "util/configparser.c" /* yacc.c:1646 */ +#line 3683 "util/configparser.c" /* yacc.c:1646 */ break; - case 303: -#line 1272 "util/configparser.y" /* yacc.c:1646 */ + case 304: +#line 1276 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3668,11 +3695,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3672 "util/configparser.c" /* yacc.c:1646 */ +#line 3699 "util/configparser.c" /* yacc.c:1646 */ break; - case 304: -#line 1285 "util/configparser.y" /* yacc.c:1646 */ + case 305: +#line 1289 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str))); if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) { @@ -3684,11 +3711,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3688 "util/configparser.c" /* yacc.c:1646 */ +#line 3715 "util/configparser.c" /* yacc.c:1646 */ break; - case 305: -#line 1298 "util/configparser.y" /* yacc.c:1646 */ + case 306: +#line 1302 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3696,11 +3723,11 @@ yyreduce: else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3700 "util/configparser.c" /* yacc.c:1646 */ +#line 3727 "util/configparser.c" /* yacc.c:1646 */ break; - case 306: -#line 1307 "util/configparser.y" /* yacc.c:1646 */ + case 307: +#line 1311 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3708,11 +3735,11 @@ yyreduce: else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3712 "util/configparser.c" /* yacc.c:1646 */ +#line 3739 "util/configparser.c" /* yacc.c:1646 */ break; - case 307: -#line 1316 "util/configparser.y" /* yacc.c:1646 */ + case 308: +#line 1320 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3720,11 +3747,11 @@ yyreduce: else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3724 "util/configparser.c" /* yacc.c:1646 */ +#line 3751 "util/configparser.c" /* yacc.c:1646 */ break; - case 308: -#line 1325 "util/configparser.y" /* yacc.c:1646 */ + case 309: +#line 1329 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3732,11 +3759,11 @@ yyreduce: else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3736 "util/configparser.c" /* yacc.c:1646 */ +#line 3763 "util/configparser.c" /* yacc.c:1646 */ break; - case 309: -#line 1334 "util/configparser.y" /* yacc.c:1646 */ + case 310: +#line 1338 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3745,11 +3772,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3749 "util/configparser.c" /* yacc.c:1646 */ +#line 3776 "util/configparser.c" /* yacc.c:1646 */ break; - case 310: -#line 1344 "util/configparser.y" /* yacc.c:1646 */ + case 311: +#line 1348 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3758,11 +3785,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3762 "util/configparser.c" /* yacc.c:1646 */ +#line 3789 "util/configparser.c" /* yacc.c:1646 */ break; - case 311: -#line 1354 "util/configparser.y" /* yacc.c:1646 */ + case 312: +#line 1358 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3770,11 +3797,11 @@ yyreduce: else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3774 "util/configparser.c" /* yacc.c:1646 */ +#line 3801 "util/configparser.c" /* yacc.c:1646 */ break; - case 312: -#line 1363 "util/configparser.y" /* yacc.c:1646 */ + case 313: +#line 1367 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3782,11 +3809,11 @@ yyreduce: else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3786 "util/configparser.c" /* yacc.c:1646 */ +#line 3813 "util/configparser.c" /* yacc.c:1646 */ break; - case 313: -#line 1372 "util/configparser.y" /* yacc.c:1646 */ + case 314: +#line 1376 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3798,11 +3825,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3802 "util/configparser.c" /* yacc.c:1646 */ +#line 3829 "util/configparser.c" /* yacc.c:1646 */ break; - case 314: -#line 1385 "util/configparser.y" /* yacc.c:1646 */ + case 315: +#line 1389 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3814,11 +3841,11 @@ yyreduce: #endif free((yyvsp[0].str)); } -#line 3818 "util/configparser.c" /* yacc.c:1646 */ +#line 3845 "util/configparser.c" /* yacc.c:1646 */ break; - case 315: -#line 1398 "util/configparser.y" /* yacc.c:1646 */ + case 316: +#line 1402 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3826,21 +3853,21 @@ yyreduce: else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3830 "util/configparser.c" /* yacc.c:1646 */ +#line 3857 "util/configparser.c" /* yacc.c:1646 */ break; - case 316: -#line 1407 "util/configparser.y" /* yacc.c:1646 */ + case 317: +#line 1411 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->val_nsec3_key_iterations); cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str); } -#line 3840 "util/configparser.c" /* yacc.c:1646 */ +#line 3867 "util/configparser.c" /* yacc.c:1646 */ break; - case 317: -#line 1414 "util/configparser.y" /* yacc.c:1646 */ + case 318: +#line 1418 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3848,11 +3875,11 @@ yyreduce: else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3852 "util/configparser.c" /* yacc.c:1646 */ +#line 3879 "util/configparser.c" /* yacc.c:1646 */ break; - case 318: -#line 1423 "util/configparser.y" /* yacc.c:1646 */ + case 319: +#line 1427 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3860,11 +3887,11 @@ yyreduce: else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3864 "util/configparser.c" /* yacc.c:1646 */ +#line 3891 "util/configparser.c" /* yacc.c:1646 */ break; - case 319: -#line 1432 "util/configparser.y" /* yacc.c:1646 */ + case 320: +#line 1436 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -3872,11 +3899,11 @@ yyreduce: else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 3876 "util/configparser.c" /* yacc.c:1646 */ +#line 3903 "util/configparser.c" /* yacc.c:1646 */ break; - case 320: -#line 1441 "util/configparser.y" /* yacc.c:1646 */ + case 321: +#line 1445 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3885,22 +3912,22 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3889 "util/configparser.c" /* yacc.c:1646 */ +#line 3916 "util/configparser.c" /* yacc.c:1646 */ break; - case 321: -#line 1450 "util/configparser.y" /* yacc.c:1646 */ + case 322: +#line 1454 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3900 "util/configparser.c" /* yacc.c:1646 */ +#line 3927 "util/configparser.c" /* yacc.c:1646 */ break; - case 322: -#line 1458 "util/configparser.y" /* yacc.c:1646 */ + case 323: +#line 1462 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -3912,22 +3939,22 @@ yyreduce: } free((yyvsp[0].str)); } -#line 3916 "util/configparser.c" /* yacc.c:1646 */ +#line 3943 "util/configparser.c" /* yacc.c:1646 */ break; - case 323: -#line 1471 "util/configparser.y" /* yacc.c:1646 */ + case 324: +#line 1475 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 3927 "util/configparser.c" /* yacc.c:1646 */ +#line 3954 "util/configparser.c" /* yacc.c:1646 */ break; - case 324: -#line 1479 "util/configparser.y" /* yacc.c:1646 */ + case 325: +#line 1483 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -3954,21 +3981,21 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 3958 "util/configparser.c" /* yacc.c:1646 */ +#line 3985 "util/configparser.c" /* yacc.c:1646 */ break; - case 325: -#line 1507 "util/configparser.y" /* yacc.c:1646 */ + case 326: +#line 1511 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str))) fatal_exit("out of memory adding local-data"); } -#line 3968 "util/configparser.c" /* yacc.c:1646 */ +#line 3995 "util/configparser.c" /* yacc.c:1646 */ break; - case 326: -#line 1514 "util/configparser.y" /* yacc.c:1646 */ + case 327: +#line 1518 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -3982,11 +4009,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 3986 "util/configparser.c" /* yacc.c:1646 */ +#line 4013 "util/configparser.c" /* yacc.c:1646 */ break; - case 327: -#line 1529 "util/configparser.y" /* yacc.c:1646 */ + case 328: +#line 1533 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -3995,11 +4022,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 3999 "util/configparser.c" /* yacc.c:1646 */ +#line 4026 "util/configparser.c" /* yacc.c:1646 */ break; - case 328: -#line 1539 "util/configparser.y" /* yacc.c:1646 */ + case 329: +#line 1543 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4008,31 +4035,31 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4012 "util/configparser.c" /* yacc.c:1646 */ +#line 4039 "util/configparser.c" /* yacc.c:1646 */ break; - case 329: -#line 1549 "util/configparser.y" /* yacc.c:1646 */ + case 330: +#line 1553 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str))); cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4022 "util/configparser.c" /* yacc.c:1646 */ +#line 4049 "util/configparser.c" /* yacc.c:1646 */ break; - case 330: -#line 1556 "util/configparser.y" /* yacc.c:1646 */ + case 331: +#line 1560 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dns64_prefix); cfg_parser->cfg->dns64_prefix = (yyvsp[0].str); } -#line 4032 "util/configparser.c" /* yacc.c:1646 */ +#line 4059 "util/configparser.c" /* yacc.c:1646 */ break; - case 331: -#line 1563 "util/configparser.y" /* yacc.c:1646 */ + case 332: +#line 1567 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4040,11 +4067,11 @@ yyreduce: else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4044 "util/configparser.c" /* yacc.c:1646 */ +#line 4071 "util/configparser.c" /* yacc.c:1646 */ break; - case 332: -#line 1572 "util/configparser.y" /* yacc.c:1646 */ + case 333: +#line 1576 "util/configparser.y" /* yacc.c:1646 */ { char* p, *s = (yyvsp[0].str); OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str))); @@ -4057,11 +4084,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4061 "util/configparser.c" /* yacc.c:1646 */ +#line 4088 "util/configparser.c" /* yacc.c:1646 */ break; - case 333: -#line 1586 "util/configparser.y" /* yacc.c:1646 */ + case 334: +#line 1590 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4079,11 +4106,11 @@ yyreduce: } } } -#line 4083 "util/configparser.c" /* yacc.c:1646 */ +#line 4110 "util/configparser.c" /* yacc.c:1646 */ break; - case 334: -#line 1605 "util/configparser.y" /* yacc.c:1646 */ + case 335: +#line 1609 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4101,11 +4128,11 @@ yyreduce: } } } -#line 4105 "util/configparser.c" /* yacc.c:1646 */ +#line 4132 "util/configparser.c" /* yacc.c:1646 */ break; - case 335: -#line 1624 "util/configparser.y" /* yacc.c:1646 */ + case 336: +#line 1628 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, @@ -4116,11 +4143,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4120 "util/configparser.c" /* yacc.c:1646 */ +#line 4147 "util/configparser.c" /* yacc.c:1646 */ break; - case 336: -#line 1636 "util/configparser.y" /* yacc.c:1646 */ + case 337: +#line 1640 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, @@ -4131,11 +4158,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4135 "util/configparser.c" /* yacc.c:1646 */ +#line 4162 "util/configparser.c" /* yacc.c:1646 */ break; - case 337: -#line 1648 "util/configparser.y" /* yacc.c:1646 */ + case 338: +#line 1652 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, @@ -4146,11 +4173,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4150 "util/configparser.c" /* yacc.c:1646 */ +#line 4177 "util/configparser.c" /* yacc.c:1646 */ break; - case 338: -#line 1660 "util/configparser.y" /* yacc.c:1646 */ + case 339: +#line 1664 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, @@ -4160,11 +4187,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4164 "util/configparser.c" /* yacc.c:1646 */ +#line 4191 "util/configparser.c" /* yacc.c:1646 */ break; - case 339: -#line 1671 "util/configparser.y" /* yacc.c:1646 */ + case 340: +#line 1675 "util/configparser.y" /* yacc.c:1646 */ { size_t len = 0; uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str), @@ -4182,11 +4209,11 @@ yyreduce: } } } -#line 4186 "util/configparser.c" /* yacc.c:1646 */ +#line 4213 "util/configparser.c" /* yacc.c:1646 */ break; - case 340: -#line 1690 "util/configparser.y" /* yacc.c:1646 */ + case 341: +#line 1694 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4194,11 +4221,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4198 "util/configparser.c" /* yacc.c:1646 */ +#line 4225 "util/configparser.c" /* yacc.c:1646 */ break; - case 341: -#line 1700 "util/configparser.y" /* yacc.c:1646 */ + case 342: +#line 1704 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4206,33 +4233,33 @@ yyreduce: else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4210 "util/configparser.c" /* yacc.c:1646 */ +#line 4237 "util/configparser.c" /* yacc.c:1646 */ break; - case 342: -#line 1709 "util/configparser.y" /* yacc.c:1646 */ + case 343: +#line 1713 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4221 "util/configparser.c" /* yacc.c:1646 */ +#line 4248 "util/configparser.c" /* yacc.c:1646 */ break; - case 343: -#line 1717 "util/configparser.y" /* yacc.c:1646 */ + case 344: +#line 1721 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str))); if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size)) yyerror("memory size expected"); free((yyvsp[0].str)); } -#line 4232 "util/configparser.c" /* yacc.c:1646 */ +#line 4259 "util/configparser.c" /* yacc.c:1646 */ break; - case 344: -#line 1725 "util/configparser.y" /* yacc.c:1646 */ + case 345: +#line 1729 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4244,11 +4271,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4248 "util/configparser.c" /* yacc.c:1646 */ +#line 4275 "util/configparser.c" /* yacc.c:1646 */ break; - case 345: -#line 1738 "util/configparser.y" /* yacc.c:1646 */ + case 346: +#line 1742 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4260,11 +4287,11 @@ yyreduce: } free((yyvsp[0].str)); } -#line 4264 "util/configparser.c" /* yacc.c:1646 */ +#line 4291 "util/configparser.c" /* yacc.c:1646 */ break; - case 346: -#line 1751 "util/configparser.y" /* yacc.c:1646 */ + case 347: +#line 1755 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4276,11 +4303,11 @@ yyreduce: "ratelimit-for-domain"); } } -#line 4280 "util/configparser.c" /* yacc.c:1646 */ +#line 4307 "util/configparser.c" /* yacc.c:1646 */ break; - case 347: -#line 1764 "util/configparser.y" /* yacc.c:1646 */ + case 348: +#line 1768 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) { @@ -4292,11 +4319,11 @@ yyreduce: "ratelimit-below-domain"); } } -#line 4296 "util/configparser.c" /* yacc.c:1646 */ +#line 4323 "util/configparser.c" /* yacc.c:1646 */ break; - case 348: -#line 1777 "util/configparser.y" /* yacc.c:1646 */ + case 349: +#line 1781 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4304,11 +4331,11 @@ yyreduce: else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4308 "util/configparser.c" /* yacc.c:1646 */ +#line 4335 "util/configparser.c" /* yacc.c:1646 */ break; - case 349: -#line 1786 "util/configparser.y" /* yacc.c:1646 */ + case 350: +#line 1790 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) @@ -4316,11 +4343,11 @@ yyreduce: else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4320 "util/configparser.c" /* yacc.c:1646 */ +#line 4347 "util/configparser.c" /* yacc.c:1646 */ break; - case 350: -#line 1795 "util/configparser.y" /* yacc.c:1646 */ + case 351: +#line 1799 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4329,11 +4356,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4333 "util/configparser.c" /* yacc.c:1646 */ +#line 4360 "util/configparser.c" /* yacc.c:1646 */ break; - case 351: -#line 1805 "util/configparser.y" /* yacc.c:1646 */ + case 352: +#line 1809 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4342,11 +4369,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4346 "util/configparser.c" /* yacc.c:1646 */ +#line 4373 "util/configparser.c" /* yacc.c:1646 */ break; - case 352: -#line 1815 "util/configparser.y" /* yacc.c:1646 */ + case 353: +#line 1819 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str))); @@ -4358,11 +4385,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4362 "util/configparser.c" /* yacc.c:1646 */ +#line 4389 "util/configparser.c" /* yacc.c:1646 */ break; - case 353: -#line 1828 "util/configparser.y" /* yacc.c:1646 */ + case 354: +#line 1832 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str))); @@ -4374,11 +4401,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4378 "util/configparser.c" /* yacc.c:1646 */ +#line 4405 "util/configparser.c" /* yacc.c:1646 */ break; - case 354: -#line 1841 "util/configparser.y" /* yacc.c:1646 */ + case 355: +#line 1845 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str))); @@ -4388,11 +4415,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4392 "util/configparser.c" /* yacc.c:1646 */ +#line 4419 "util/configparser.c" /* yacc.c:1646 */ break; - case 355: -#line 1852 "util/configparser.y" /* yacc.c:1646 */ + case 356: +#line 1856 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str))); @@ -4404,11 +4431,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4408 "util/configparser.c" /* yacc.c:1646 */ +#line 4435 "util/configparser.c" /* yacc.c:1646 */ break; - case 356: -#line 1865 "util/configparser.y" /* yacc.c:1646 */ + case 357: +#line 1869 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str))); @@ -4418,11 +4445,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4422 "util/configparser.c" /* yacc.c:1646 */ +#line 4449 "util/configparser.c" /* yacc.c:1646 */ break; - case 357: -#line 1876 "util/configparser.y" /* yacc.c:1646 */ + case 358: +#line 1880 "util/configparser.y" /* yacc.c:1646 */ { #ifdef USE_IPSECMOD OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str))); @@ -4434,11 +4461,11 @@ yyreduce: OUTYY(("P(Compiled without IPsec module, ignoring)\n")); #endif } -#line 4438 "util/configparser.c" /* yacc.c:1646 */ +#line 4465 "util/configparser.c" /* yacc.c:1646 */ break; - case 358: -#line 1889 "util/configparser.y" /* yacc.c:1646 */ + case 359: +#line 1893 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->stubs->name) @@ -4447,31 +4474,31 @@ yyreduce: free(cfg_parser->cfg->stubs->name); cfg_parser->cfg->stubs->name = (yyvsp[0].str); } -#line 4451 "util/configparser.c" /* yacc.c:1646 */ +#line 4478 "util/configparser.c" /* yacc.c:1646 */ break; - case 359: -#line 1899 "util/configparser.y" /* yacc.c:1646 */ + case 360: +#line 1903 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4461 "util/configparser.c" /* yacc.c:1646 */ +#line 4488 "util/configparser.c" /* yacc.c:1646 */ break; - case 360: -#line 1906 "util/configparser.y" /* yacc.c:1646 */ + case 361: +#line 1910 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4471 "util/configparser.c" /* yacc.c:1646 */ +#line 4498 "util/configparser.c" /* yacc.c:1646 */ break; - case 361: -#line 1913 "util/configparser.y" /* yacc.c:1646 */ + case 362: +#line 1917 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4479,11 +4506,11 @@ yyreduce: else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4483 "util/configparser.c" /* yacc.c:1646 */ +#line 4510 "util/configparser.c" /* yacc.c:1646 */ break; - case 362: -#line 1922 "util/configparser.y" /* yacc.c:1646 */ + case 363: +#line 1926 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4492,11 +4519,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4496 "util/configparser.c" /* yacc.c:1646 */ +#line 4523 "util/configparser.c" /* yacc.c:1646 */ break; - case 363: -#line 1932 "util/configparser.y" /* yacc.c:1646 */ + case 364: +#line 1936 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4505,11 +4532,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4509 "util/configparser.c" /* yacc.c:1646 */ +#line 4536 "util/configparser.c" /* yacc.c:1646 */ break; - case 364: -#line 1942 "util/configparser.y" /* yacc.c:1646 */ + case 365: +#line 1946 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->forwards->name) @@ -4518,31 +4545,31 @@ yyreduce: free(cfg_parser->cfg->forwards->name); cfg_parser->cfg->forwards->name = (yyvsp[0].str); } -#line 4522 "util/configparser.c" /* yacc.c:1646 */ +#line 4549 "util/configparser.c" /* yacc.c:1646 */ break; - case 365: -#line 1952 "util/configparser.y" /* yacc.c:1646 */ + case 366: +#line 1956 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4532 "util/configparser.c" /* yacc.c:1646 */ +#line 4559 "util/configparser.c" /* yacc.c:1646 */ break; - case 366: -#line 1959 "util/configparser.y" /* yacc.c:1646 */ + case 367: +#line 1963 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4542 "util/configparser.c" /* yacc.c:1646 */ +#line 4569 "util/configparser.c" /* yacc.c:1646 */ break; - case 367: -#line 1966 "util/configparser.y" /* yacc.c:1646 */ + case 368: +#line 1970 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4550,11 +4577,11 @@ yyreduce: else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4554 "util/configparser.c" /* yacc.c:1646 */ +#line 4581 "util/configparser.c" /* yacc.c:1646 */ break; - case 368: -#line 1975 "util/configparser.y" /* yacc.c:1646 */ + case 369: +#line 1979 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4563,11 +4590,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4567 "util/configparser.c" /* yacc.c:1646 */ +#line 4594 "util/configparser.c" /* yacc.c:1646 */ break; - case 369: -#line 1985 "util/configparser.y" /* yacc.c:1646 */ + case 370: +#line 1989 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(name:%s)\n", (yyvsp[0].str))); if(cfg_parser->cfg->views->name) @@ -4576,11 +4603,11 @@ yyreduce: free(cfg_parser->cfg->views->name); cfg_parser->cfg->views->name = (yyvsp[0].str); } -#line 4580 "util/configparser.c" /* yacc.c:1646 */ +#line 4607 "util/configparser.c" /* yacc.c:1646 */ break; - case 370: -#line 1995 "util/configparser.y" /* yacc.c:1646 */ + case 371: +#line 1999 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 && @@ -4608,11 +4635,11 @@ yyreduce: fatal_exit("out of memory adding local-zone"); } } -#line 4612 "util/configparser.c" /* yacc.c:1646 */ +#line 4639 "util/configparser.c" /* yacc.c:1646 */ break; - case 371: -#line 2024 "util/configparser.y" /* yacc.c:1646 */ + case 372: +#line 2028 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4621,22 +4648,22 @@ yyreduce: fatal_exit("out of memory adding per-view " "response-ip action"); } -#line 4625 "util/configparser.c" /* yacc.c:1646 */ +#line 4652 "util/configparser.c" /* yacc.c:1646 */ break; - case 372: -#line 2034 "util/configparser.y" /* yacc.c:1646 */ + case 373: +#line 2038 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert( &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4636 "util/configparser.c" /* yacc.c:1646 */ +#line 4663 "util/configparser.c" /* yacc.c:1646 */ break; - case 373: -#line 2042 "util/configparser.y" /* yacc.c:1646 */ + case 374: +#line 2046 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) { @@ -4644,11 +4671,11 @@ yyreduce: free((yyvsp[0].str)); } } -#line 4648 "util/configparser.c" /* yacc.c:1646 */ +#line 4675 "util/configparser.c" /* yacc.c:1646 */ break; - case 374: -#line 2051 "util/configparser.y" /* yacc.c:1646 */ + case 375: +#line 2055 "util/configparser.y" /* yacc.c:1646 */ { char* ptr; OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str))); @@ -4662,11 +4689,11 @@ yyreduce: yyerror("local-data-ptr could not be reversed"); } } -#line 4666 "util/configparser.c" /* yacc.c:1646 */ +#line 4693 "util/configparser.c" /* yacc.c:1646 */ break; - case 375: -#line 2066 "util/configparser.y" /* yacc.c:1646 */ + case 376: +#line 2070 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(view-first:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4674,19 +4701,19 @@ yyreduce: else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4678 "util/configparser.c" /* yacc.c:1646 */ +#line 4705 "util/configparser.c" /* yacc.c:1646 */ break; - case 376: -#line 2075 "util/configparser.y" /* yacc.c:1646 */ + case 377: +#line 2079 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(remote-control:)\n")); } -#line 4686 "util/configparser.c" /* yacc.c:1646 */ +#line 4713 "util/configparser.c" /* yacc.c:1646 */ break; - case 387: -#line 2086 "util/configparser.y" /* yacc.c:1646 */ + case 388: +#line 2090 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4695,11 +4722,11 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4699 "util/configparser.c" /* yacc.c:1646 */ +#line 4726 "util/configparser.c" /* yacc.c:1646 */ break; - case 388: -#line 2096 "util/configparser.y" /* yacc.c:1646 */ + case 389: +#line 2100 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_port:%s)\n", (yyvsp[0].str))); if(atoi((yyvsp[0].str)) == 0) @@ -4707,21 +4734,21 @@ yyreduce: else cfg_parser->cfg->control_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 4711 "util/configparser.c" /* yacc.c:1646 */ +#line 4738 "util/configparser.c" /* yacc.c:1646 */ break; - case 389: -#line 2105 "util/configparser.y" /* yacc.c:1646 */ + case 390: +#line 2109 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[0].str))) yyerror("out of memory"); } -#line 4721 "util/configparser.c" /* yacc.c:1646 */ +#line 4748 "util/configparser.c" /* yacc.c:1646 */ break; - case 390: -#line 2112 "util/configparser.y" /* yacc.c:1646 */ + case 391: +#line 2116 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4730,122 +4757,122 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4734 "util/configparser.c" /* yacc.c:1646 */ +#line 4761 "util/configparser.c" /* yacc.c:1646 */ break; - case 391: -#line 2122 "util/configparser.y" /* yacc.c:1646 */ + case 392: +#line 2126 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_key_file); cfg_parser->cfg->server_key_file = (yyvsp[0].str); } -#line 4744 "util/configparser.c" /* yacc.c:1646 */ +#line 4771 "util/configparser.c" /* yacc.c:1646 */ break; - case 392: -#line 2129 "util/configparser.y" /* yacc.c:1646 */ + case 393: +#line 2133 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->server_cert_file); cfg_parser->cfg->server_cert_file = (yyvsp[0].str); } -#line 4754 "util/configparser.c" /* yacc.c:1646 */ +#line 4781 "util/configparser.c" /* yacc.c:1646 */ break; - case 393: -#line 2136 "util/configparser.y" /* yacc.c:1646 */ + case 394: +#line 2140 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_key_file); cfg_parser->cfg->control_key_file = (yyvsp[0].str); } -#line 4764 "util/configparser.c" /* yacc.c:1646 */ +#line 4791 "util/configparser.c" /* yacc.c:1646 */ break; - case 394: -#line 2143 "util/configparser.y" /* yacc.c:1646 */ + case 395: +#line 2147 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->control_cert_file); cfg_parser->cfg->control_cert_file = (yyvsp[0].str); } -#line 4774 "util/configparser.c" /* yacc.c:1646 */ +#line 4801 "util/configparser.c" /* yacc.c:1646 */ break; - case 395: -#line 2150 "util/configparser.y" /* yacc.c:1646 */ + case 396: +#line 2154 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnstap:)\n")); } -#line 4782 "util/configparser.c" /* yacc.c:1646 */ +#line 4809 "util/configparser.c" /* yacc.c:1646 */ break; - case 410: -#line 2167 "util/configparser.y" /* yacc.c:1646 */ + case 411: +#line 2171 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4793 "util/configparser.c" /* yacc.c:1646 */ +#line 4820 "util/configparser.c" /* yacc.c:1646 */ break; - case 411: -#line 2175 "util/configparser.y" /* yacc.c:1646 */ + case 412: +#line 2179 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_socket_path); cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str); } -#line 4803 "util/configparser.c" /* yacc.c:1646 */ +#line 4830 "util/configparser.c" /* yacc.c:1646 */ break; - case 412: -#line 2182 "util/configparser.y" /* yacc.c:1646 */ + case 413: +#line 2186 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4814 "util/configparser.c" /* yacc.c:1646 */ +#line 4841 "util/configparser.c" /* yacc.c:1646 */ break; - case 413: -#line 2190 "util/configparser.y" /* yacc.c:1646 */ + case 414: +#line 2194 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) yyerror("expected yes or no."); else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4825 "util/configparser.c" /* yacc.c:1646 */ +#line 4852 "util/configparser.c" /* yacc.c:1646 */ break; - case 414: -#line 2198 "util/configparser.y" /* yacc.c:1646 */ + case 415: +#line 2202 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_identity); cfg_parser->cfg->dnstap_identity = (yyvsp[0].str); } -#line 4835 "util/configparser.c" /* yacc.c:1646 */ +#line 4862 "util/configparser.c" /* yacc.c:1646 */ break; - case 415: -#line 2205 "util/configparser.y" /* yacc.c:1646 */ + case 416: +#line 2209 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnstap_version); cfg_parser->cfg->dnstap_version = (yyvsp[0].str); } -#line 4845 "util/configparser.c" /* yacc.c:1646 */ +#line 4872 "util/configparser.c" /* yacc.c:1646 */ break; - case 416: -#line 2212 "util/configparser.y" /* yacc.c:1646 */ + case 417: +#line 2216 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4853,11 +4880,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4857 "util/configparser.c" /* yacc.c:1646 */ +#line 4884 "util/configparser.c" /* yacc.c:1646 */ break; - case 417: -#line 2221 "util/configparser.y" /* yacc.c:1646 */ + case 418: +#line 2225 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4865,11 +4892,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_resolver_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4869 "util/configparser.c" /* yacc.c:1646 */ +#line 4896 "util/configparser.c" /* yacc.c:1646 */ break; - case 418: -#line 2230 "util/configparser.y" /* yacc.c:1646 */ + case 419: +#line 2234 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4877,11 +4904,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4881 "util/configparser.c" /* yacc.c:1646 */ +#line 4908 "util/configparser.c" /* yacc.c:1646 */ break; - case 419: -#line 2239 "util/configparser.y" /* yacc.c:1646 */ + case 420: +#line 2243 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4889,11 +4916,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_client_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4893 "util/configparser.c" /* yacc.c:1646 */ +#line 4920 "util/configparser.c" /* yacc.c:1646 */ break; - case 420: -#line 2248 "util/configparser.y" /* yacc.c:1646 */ + case 421: +#line 2252 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4901,11 +4928,11 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_query_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4905 "util/configparser.c" /* yacc.c:1646 */ +#line 4932 "util/configparser.c" /* yacc.c:1646 */ break; - case 421: -#line 2257 "util/configparser.y" /* yacc.c:1646 */ + case 422: +#line 2261 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4913,29 +4940,29 @@ yyreduce: else cfg_parser->cfg->dnstap_log_forwarder_response_messages = (strcmp((yyvsp[0].str), "yes")==0); } -#line 4917 "util/configparser.c" /* yacc.c:1646 */ +#line 4944 "util/configparser.c" /* yacc.c:1646 */ break; - case 422: -#line 2266 "util/configparser.y" /* yacc.c:1646 */ + case 423: +#line 2270 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(python:)\n")); } -#line 4925 "util/configparser.c" /* yacc.c:1646 */ +#line 4952 "util/configparser.c" /* yacc.c:1646 */ break; - case 426: -#line 2275 "util/configparser.y" /* yacc.c:1646 */ + case 427: +#line 2279 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(python-script:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->python_script); cfg_parser->cfg->python_script = (yyvsp[0].str); } -#line 4935 "util/configparser.c" /* yacc.c:1646 */ +#line 4962 "util/configparser.c" /* yacc.c:1646 */ break; - case 427: -#line 2281 "util/configparser.y" /* yacc.c:1646 */ + case 428: +#line 2285 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str))); if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4944,21 +4971,21 @@ yyreduce: (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 4948 "util/configparser.c" /* yacc.c:1646 */ +#line 4975 "util/configparser.c" /* yacc.c:1646 */ break; - case 428: -#line 2291 "util/configparser.y" /* yacc.c:1646 */ + case 429: +#line 2295 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->log_identity); cfg_parser->cfg->log_identity = (yyvsp[0].str); } -#line 4958 "util/configparser.c" /* yacc.c:1646 */ +#line 4985 "util/configparser.c" /* yacc.c:1646 */ break; - case 429: -#line 2298 "util/configparser.y" /* yacc.c:1646 */ + case 430: +#line 2302 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str))); validate_respip_action((yyvsp[0].str)); @@ -4966,31 +4993,31 @@ yyreduce: (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip"); } -#line 4970 "util/configparser.c" /* yacc.c:1646 */ +#line 4997 "util/configparser.c" /* yacc.c:1646 */ break; - case 430: -#line 2307 "util/configparser.y" /* yacc.c:1646 */ + case 431: +#line 2311 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str))); if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, (yyvsp[-1].str), (yyvsp[0].str))) fatal_exit("out of memory adding response-ip-data"); } -#line 4981 "util/configparser.c" /* yacc.c:1646 */ +#line 5008 "util/configparser.c" /* yacc.c:1646 */ break; - case 431: -#line 2315 "util/configparser.y" /* yacc.c:1646 */ + case 432: +#line 2319 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n")); } -#line 4990 "util/configparser.c" /* yacc.c:1646 */ +#line 5017 "util/configparser.c" /* yacc.c:1646 */ break; - case 439: -#line 2327 "util/configparser.y" /* yacc.c:1646 */ + case 442: +#line 2333 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str))); if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0) @@ -4998,11 +5025,11 @@ yyreduce: else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0); free((yyvsp[0].str)); } -#line 5002 "util/configparser.c" /* yacc.c:1646 */ +#line 5029 "util/configparser.c" /* yacc.c:1646 */ break; - case 440: -#line 2337 "util/configparser.y" /* yacc.c:1646 */ + case 443: +#line 2343 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str))); @@ -5011,41 +5038,111 @@ yyreduce: else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str)); free((yyvsp[0].str)); } -#line 5015 "util/configparser.c" /* yacc.c:1646 */ +#line 5042 "util/configparser.c" /* yacc.c:1646 */ break; - case 441: -#line 2347 "util/configparser.y" /* yacc.c:1646 */ + case 444: +#line 2353 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str))); free(cfg_parser->cfg->dnscrypt_provider); cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str); } -#line 5025 "util/configparser.c" /* yacc.c:1646 */ +#line 5052 "util/configparser.c" /* yacc.c:1646 */ break; - case 442: -#line 2354 "util/configparser.y" /* yacc.c:1646 */ + case 445: +#line 2360 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-provider-cert"); } -#line 5035 "util/configparser.c" /* yacc.c:1646 */ +#line 5062 "util/configparser.c" /* yacc.c:1646 */ break; - case 443: -#line 2361 "util/configparser.y" /* yacc.c:1646 */ + case 446: +#line 2367 "util/configparser.y" /* yacc.c:1646 */ { OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str))); if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str))) fatal_exit("out of memory adding dnscrypt-secret-key"); } -#line 5045 "util/configparser.c" /* yacc.c:1646 */ +#line 5072 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 447: +#line 2374 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str))); + if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) + yyerror("memory size expected"); + free((yyvsp[0].str)); + } +#line 5083 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 448: +#line 2382 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str))); + if(atoi((yyvsp[0].str)) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str)); + if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) + yyerror("must be a power of 2"); + } + free((yyvsp[0].str)); + } +#line 5099 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 449: +#line 2395 "util/configparser.y" /* yacc.c:1646 */ + { + OUTYY(("\nP(cachedb:)\n")); + } +#line 5107 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 454: +#line 2404 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_CACHEDB + OUTYY(("P(backend:%s)\n", (yyvsp[0].str))); + if(cfg_parser->cfg->cachedb_backend) + yyerror("cachedb backend override, there must be one " + "backend"); + free(cfg_parser->cfg->cachedb_backend); + cfg_parser->cfg->cachedb_backend = (yyvsp[0].str); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + #endif + } +#line 5124 "util/configparser.c" /* yacc.c:1646 */ + break; + + case 455: +#line 2418 "util/configparser.y" /* yacc.c:1646 */ + { + #ifdef USE_CACHEDB + OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str))); + if(cfg_parser->cfg->cachedb_secret) + yyerror("cachedb secret-seed override, there must be " + "only one secret"); + free(cfg_parser->cfg->cachedb_secret); + cfg_parser->cfg->cachedb_secret = (yyvsp[0].str); + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free((yyvsp[0].str)); + #endif + } +#line 5142 "util/configparser.c" /* yacc.c:1646 */ break; -#line 5049 "util/configparser.c" /* yacc.c:1646 */ +#line 5146 "util/configparser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -5273,7 +5370,7 @@ yyreturn: #endif return yyresult; } -#line 2367 "util/configparser.y" /* yacc.c:1906 */ +#line 2432 "util/configparser.y" /* yacc.c:1906 */ /* parse helper routines could be here */ diff --git a/util/configparser.h b/util/configparser.h index 30373da46cdf..fe9d6144256d 100644 --- a/util/configparser.h +++ b/util/configparser.h @@ -252,12 +252,17 @@ extern int yydebug; VAR_DNSCRYPT_PROVIDER = 462, VAR_DNSCRYPT_SECRET_KEY = 463, VAR_DNSCRYPT_PROVIDER_CERT = 464, - VAR_IPSECMOD_ENABLED = 465, - VAR_IPSECMOD_HOOK = 466, - VAR_IPSECMOD_IGNORE_BOGUS = 467, - VAR_IPSECMOD_MAX_TTL = 468, - VAR_IPSECMOD_WHITELIST = 469, - VAR_IPSECMOD_STRICT = 470 + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 465, + VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 466, + VAR_IPSECMOD_ENABLED = 467, + VAR_IPSECMOD_HOOK = 468, + VAR_IPSECMOD_IGNORE_BOGUS = 469, + VAR_IPSECMOD_MAX_TTL = 470, + VAR_IPSECMOD_WHITELIST = 471, + VAR_IPSECMOD_STRICT = 472, + VAR_CACHEDB = 473, + VAR_CACHEDB_BACKEND = 474, + VAR_CACHEDB_SECRETSEED = 475 }; #endif /* Tokens. */ @@ -468,12 +473,17 @@ extern int yydebug; #define VAR_DNSCRYPT_PROVIDER 462 #define VAR_DNSCRYPT_SECRET_KEY 463 #define VAR_DNSCRYPT_PROVIDER_CERT 464 -#define VAR_IPSECMOD_ENABLED 465 -#define VAR_IPSECMOD_HOOK 466 -#define VAR_IPSECMOD_IGNORE_BOGUS 467 -#define VAR_IPSECMOD_MAX_TTL 468 -#define VAR_IPSECMOD_WHITELIST 469 -#define VAR_IPSECMOD_STRICT 470 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 465 +#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 466 +#define VAR_IPSECMOD_ENABLED 467 +#define VAR_IPSECMOD_HOOK 468 +#define VAR_IPSECMOD_IGNORE_BOGUS 469 +#define VAR_IPSECMOD_MAX_TTL 470 +#define VAR_IPSECMOD_WHITELIST 471 +#define VAR_IPSECMOD_STRICT 472 +#define VAR_CACHEDB 473 +#define VAR_CACHEDB_BACKEND 474 +#define VAR_CACHEDB_SECRETSEED 475 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED @@ -484,7 +494,7 @@ union YYSTYPE char* str; -#line 488 "util/configparser.h" /* yacc.c:1909 */ +#line 498 "util/configparser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/util/configparser.y b/util/configparser.y index 7c8161442ccd..7b41b1d767d6 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -144,8 +144,11 @@ extern struct config_parser_state* cfg_parser; %token VAR_USE_SYSTEMD VAR_SHM_ENABLE VAR_SHM_KEY %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT +%token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE +%token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT +%token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -153,7 +156,8 @@ toplevelvar: serverstart contents_server | stubstart contents_stub | forwardstart contents_forward | pythonstart contents_py | rcstart contents_rc | dtstart contents_dt | viewstart contents_view | - dnscstart contents_dnsc + dnscstart contents_dnsc | + cachedbstart contents_cachedb ; /* server: declaration */ @@ -2321,7 +2325,9 @@ contents_dnsc: contents_dnsc content_dnsc | ; content_dnsc: dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | - dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert + dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | + dnsc_dnscrypt_shared_secret_cache_size | + dnsc_dnscrypt_shared_secret_cache_slabs ; dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG { @@ -2364,6 +2370,65 @@ dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG fatal_exit("out of memory adding dnscrypt-secret-key"); } ; +dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG + { + OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2)); + if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) + yyerror("memory size expected"); + free($2); + } + ; +dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG + { + OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2)); + if(atoi($2) == 0) + yyerror("number expected"); + else { + cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2); + if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) + yyerror("must be a power of 2"); + } + free($2); + } + ; +cachedbstart: VAR_CACHEDB + { + OUTYY(("\nP(cachedb:)\n")); + } + ; +contents_cachedb: contents_cachedb content_cachedb + | ; +content_cachedb: cachedb_backend_name | cachedb_secret_seed + ; +cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG + { + #ifdef USE_CACHEDB + OUTYY(("P(backend:%s)\n", $2)); + if(cfg_parser->cfg->cachedb_backend) + yyerror("cachedb backend override, there must be one " + "backend"); + free(cfg_parser->cfg->cachedb_backend); + cfg_parser->cfg->cachedb_backend = $2; + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + #endif + } + ; +cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG + { + #ifdef USE_CACHEDB + OUTYY(("P(secret-seed:%s)\n", $2)); + if(cfg_parser->cfg->cachedb_secret) + yyerror("cachedb secret-seed override, there must be " + "only one secret"); + free(cfg_parser->cfg->cachedb_secret); + cfg_parser->cfg->cachedb_secret = $2; + #else + OUTYY(("P(Compiled without cachedb, ignoring)\n")); + free($2); + #endif + } + ; %% /* parse helper routines could be here */ diff --git a/util/data/msgreply.c b/util/data/msgreply.c index 2ce898d7f031..6d80cce4cb50 100644 --- a/util/data/msgreply.c +++ b/util/data/msgreply.c @@ -840,7 +840,9 @@ log_reply_info(enum verbosity_value v, struct query_info *qinf, { log_info("%s - - - %s - - - ", clientip_buf, rcode_buf); } else { - dname_str(qinf->qname, qname_buf); + if(qinf->qname) + dname_str(qinf->qname, qname_buf); + else snprintf(qname_buf, sizeof(qname_buf), "null"); pktlen = sldns_buffer_limit(rmsg); sldns_wire2str_type_buf(qinf->qtype, type_buf, sizeof(type_buf)); sldns_wire2str_class_buf(qinf->qclass, class_buf, sizeof(class_buf)); diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c index 2797d1fe8449..81ef487c5877 100644 --- a/util/fptr_wlist.c +++ b/util/fptr_wlist.c @@ -230,6 +230,9 @@ fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr) else if(fptr == &test_slabhash_sizefunc) return 1; #ifdef CLIENT_SUBNET else if(fptr == &msg_cache_sizefunc) return 1; +#endif +#ifdef USE_DNSCRYPT + else if(fptr == &dnsc_shared_secrets_sizefunc) return 1; #endif return 0; } @@ -244,6 +247,9 @@ fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr) else if(fptr == &rate_compfunc) return 1; else if(fptr == &ip_rate_compfunc) return 1; else if(fptr == &test_slabhash_compfunc) return 1; +#ifdef USE_DNSCRYPT + else if(fptr == &dnsc_shared_secrets_compfunc) return 1; +#endif return 0; } @@ -257,6 +263,9 @@ fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr) else if(fptr == &rate_delkeyfunc) return 1; else if(fptr == &ip_rate_delkeyfunc) return 1; else if(fptr == &test_slabhash_delkey) return 1; +#ifdef USE_DNSCRYPT + else if(fptr == &dnsc_shared_secrets_delkeyfunc) return 1; +#endif return 0; } @@ -271,6 +280,9 @@ fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr) else if(fptr == &test_slabhash_deldata) return 1; #ifdef CLIENT_SUBNET else if(fptr == &subnet_data_delete) return 1; +#endif +#ifdef USE_DNSCRYPT + else if(fptr == &dnsc_shared_secrets_deldatafunc) return 1; #endif return 0; } diff --git a/util/iana_ports.inc b/util/iana_ports.inc index dba3e62270c6..58c69fd1c1a7 100644 --- a/util/iana_ports.inc +++ b/util/iana_ports.inc @@ -2696,7 +2696,6 @@ 3068, 3069, 3070, -3071, 3072, 3073, 3074, @@ -4733,6 +4732,7 @@ 8003, 8005, 8006, +8007, 8008, 8019, 8020, @@ -4744,6 +4744,7 @@ 8033, 8034, 8040, +8041, 8052, 8053, 8054, diff --git a/util/net_help.c b/util/net_help.c index 6c0d68e312b8..ce136a337cff 100644 --- a/util/net_help.c +++ b/util/net_help.c @@ -114,8 +114,9 @@ fd_set_block(int s) #elif defined(HAVE_IOCTLSOCKET) unsigned long off = 0; if(ioctlsocket(s, FIONBIO, &off) != 0) { - log_err("can't ioctlsocket FIONBIO off: %s", - wsa_strerror(WSAGetLastError())); + if(WSAGetLastError() != WSAEINVAL || verbosity >= 4) + log_err("can't ioctlsocket FIONBIO off: %s", + wsa_strerror(WSAGetLastError())); } #endif return 1; @@ -610,6 +611,88 @@ log_crypto_err(const char* str) #endif /* HAVE_SSL */ } +int +listen_sslctx_setup(void* ctxt) +{ +#ifdef HAVE_SSL + SSL_CTX* ctx = (SSL_CTX*)ctxt; + /* no SSLv2, SSLv3 because has defects */ + if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) + != SSL_OP_NO_SSLv2){ + log_crypto_err("could not set SSL_OP_NO_SSLv2"); + return 0; + } + if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) + != SSL_OP_NO_SSLv3){ + log_crypto_err("could not set SSL_OP_NO_SSLv3"); + return 0; + } +#if defined(SSL_OP_NO_TLSv1) && defined(SSL_OP_NO_TLSv1_1) + /* if we have tls 1.1 disable 1.0 */ + if((SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1) & SSL_OP_NO_TLSv1) + != SSL_OP_NO_TLSv1){ + log_crypto_err("could not set SSL_OP_NO_TLSv1"); + return 0; + } +#endif +#if defined(SSL_OP_NO_TLSv1_1) && defined(SSL_OP_NO_TLSv1_2) + /* if we have tls 1.2 disable 1.1 */ + if((SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_1) & SSL_OP_NO_TLSv1_1) + != SSL_OP_NO_TLSv1_1){ + log_crypto_err("could not set SSL_OP_NO_TLSv1_1"); + return 0; + } +#endif +#if defined(SHA256_DIGEST_LENGTH) && defined(USE_ECDSA) + /* if we have sha256, set the cipher list to have no known vulns */ + if(!SSL_CTX_set_cipher_list(ctx, "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256")) + log_crypto_err("could not set cipher list with SSL_CTX_set_cipher_list"); +#endif + + if((SSL_CTX_set_options(ctx, SSL_OP_CIPHER_SERVER_PREFERENCE) & + SSL_OP_CIPHER_SERVER_PREFERENCE) != + SSL_OP_CIPHER_SERVER_PREFERENCE) { + log_crypto_err("could not set SSL_OP_CIPHER_SERVER_PREFERENCE"); + return 0; + } + +#ifdef HAVE_SSL_CTX_SET_SECURITY_LEVEL + SSL_CTX_set_security_level(ctx, 0); +#endif +#else + (void)ctxt; +#endif /* HAVE_SSL */ + return 1; +} + +void +listen_sslctx_setup_2(void* ctxt) +{ +#ifdef HAVE_SSL + SSL_CTX* ctx = (SSL_CTX*)ctxt; + (void)ctx; +#if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO + if(!SSL_CTX_set_ecdh_auto(ctx,1)) { + log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE"); + } +#elif defined(USE_ECDSA) + if(1) { + EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1); + if (!ecdh) { + log_crypto_err("could not find p256, not enabling ECDHE"); + } else { + if (1 != SSL_CTX_set_tmp_ecdh (ctx, ecdh)) { + log_crypto_err("Error in SSL_CTX_set_tmp_ecdh, not enabling ECDHE"); + } + EC_KEY_free (ecdh); + } + } +#endif +#else + (void)ctxt; +#endif /* HAVE_SSL */ +} + void* listen_sslctx_create(char* key, char* pem, char* verifypem) { #ifdef HAVE_SSL @@ -618,16 +701,7 @@ void* listen_sslctx_create(char* key, char* pem, char* verifypem) log_crypto_err("could not SSL_CTX_new"); return NULL; } - /* no SSLv2, SSLv3 because has defects */ - if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2) & SSL_OP_NO_SSLv2) - != SSL_OP_NO_SSLv2){ - log_crypto_err("could not set SSL_OP_NO_SSLv2"); - SSL_CTX_free(ctx); - return NULL; - } - if((SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3) & SSL_OP_NO_SSLv3) - != SSL_OP_NO_SSLv3){ - log_crypto_err("could not set SSL_OP_NO_SSLv3"); + if(!listen_sslctx_setup(ctx)) { SSL_CTX_free(ctx); return NULL; } @@ -649,24 +723,7 @@ void* listen_sslctx_create(char* key, char* pem, char* verifypem) SSL_CTX_free(ctx); return NULL; } -#if HAVE_DECL_SSL_CTX_SET_ECDH_AUTO - if(!SSL_CTX_set_ecdh_auto(ctx,1)) { - log_crypto_err("Error in SSL_CTX_ecdh_auto, not enabling ECDHE"); - } -#elif defined(USE_ECDSA) - if(1) { - EC_KEY *ecdh = EC_KEY_new_by_curve_name (NID_X9_62_prime256v1); - if (!ecdh) { - log_crypto_err("could not find p256, not enabling ECDHE"); - } else { - if (1 != SSL_CTX_set_tmp_ecdh (ctx, ecdh)) { - log_crypto_err("Error in SSL_CTX_set_tmp_ecdh, not enabling ECDHE"); - } - EC_KEY_free (ecdh); - } - } -#endif - + listen_sslctx_setup_2(ctx); if(verifypem && verifypem[0]) { if(!SSL_CTX_load_verify_locations(ctx, verifypem, NULL)) { log_crypto_err("Error in SSL_CTX verify locations"); diff --git a/util/net_help.h b/util/net_help.h index 54f4c9c0e7cd..f0236e5335df 100644 --- a/util/net_help.h +++ b/util/net_help.h @@ -345,6 +345,19 @@ void sock_list_merge(struct sock_list** list, struct regional* region, */ void log_crypto_err(const char* str); +/** + * Set SSL_OP_NOxxx options on SSL context to disable bad crypto + * @param ctxt: SSL_CTX* + * @return false on failure. + */ +int listen_sslctx_setup(void* ctxt); + +/** + * Further setup of listening SSL context, after keys loaded. + * @param ctxt: SSL_CTX* + */ +void listen_sslctx_setup_2(void* ctxt); + /** * create SSL listen context * @param key: private key file. diff --git a/util/netevent.c b/util/netevent.c index 6990cdb36f36..771cb6bc7101 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1551,6 +1551,13 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg) c->dnscrypt_buffer = sldns_buffer_new(sldns_buffer_capacity(c->buffer)); if(!c->dnscrypt_buffer) { log_err("Could not allocate dnscrypt buffer"); + reclaim_tcp_handler(c); + if(!c->tcp_do_close) { + fptr_ok(fptr_whitelist_comm_point( + c->callback)); + (void)(*c->callback)(c, c->cb_arg, + NETEVENT_CLOSED, NULL); + } return; } } diff --git a/util/shm_side/shm_main.c b/util/shm_side/shm_main.c index bba2a8396333..c0757ed7cdef 100644 --- a/util/shm_side/shm_main.c +++ b/util/shm_side/shm_main.c @@ -249,6 +249,13 @@ void shm_main_run(struct worker *worker) shm_stat->mem.msg = (long long)slabhash_get_mem(worker->env.msg_cache); shm_stat->mem.rrset = (long long)slabhash_get_mem(&worker->env.rrset_cache->table); + shm_stat->mem.dnscrypt_shared_secret = 0; +#ifdef USE_DNSCRYPT + if(worker->daemon->dnscenv) { + shm_stat->mem.dnscrypt_shared_secret = (long long)slabhash_get_mem( + worker->daemon->dnscenv->shared_secrets_cache); + } +#endif shm_stat->mem.val = (long long)mod_get_mem(&worker->env, "validator"); shm_stat->mem.iter = (long long)mod_get_mem(&worker->env, diff --git a/util/storage/lookup3.c b/util/storage/lookup3.c index e9b05af37e31..cc110748156f 100644 --- a/util/storage/lookup3.c +++ b/util/storage/lookup3.c @@ -5,6 +5,7 @@ added #ifdef VALGRIND to remove 298,384,660 'unused variable k8' warnings. added include of lookup3.h to check definitions match declarations. removed include of stdint - config.h takes care of platform independence. + added fallthrough comments for new gcc warning suppression. url http://burtleburtle.net/bob/hash/index.html. */ /* @@ -235,7 +236,9 @@ uint32_t initval) /* the previous hash, or an arbitrary value */ switch(length) /* all the case statements fall through */ { case 3 : c+=k[2]; + /* fallthrough */ case 2 : b+=k[1]; + /* fallthrough */ case 1 : a+=k[0]; final(a,b,c); case 0: /* case 0: nothing left to add */ @@ -473,16 +476,27 @@ uint32_t hashlittle( const void *key, size_t length, uint32_t initval) switch(length) /* all the case statements fall through */ { case 12: c+=((uint32_t)k[11])<<24; + /* fallthrough */ case 11: c+=((uint32_t)k[10])<<16; + /* fallthrough */ case 10: c+=((uint32_t)k[9])<<8; + /* fallthrough */ case 9 : c+=k[8]; + /* fallthrough */ case 8 : b+=((uint32_t)k[7])<<24; + /* fallthrough */ case 7 : b+=((uint32_t)k[6])<<16; + /* fallthrough */ case 6 : b+=((uint32_t)k[5])<<8; + /* fallthrough */ case 5 : b+=k[4]; + /* fallthrough */ case 4 : a+=((uint32_t)k[3])<<24; + /* fallthrough */ case 3 : a+=((uint32_t)k[2])<<16; + /* fallthrough */ case 2 : a+=((uint32_t)k[1])<<8; + /* fallthrough */ case 1 : a+=k[0]; break; case 0 : return c; diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c index 88d23472118f..e9ec5a5b5879 100644 --- a/validator/val_secalgo.c +++ b/validator/val_secalgo.c @@ -1320,6 +1320,9 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, #include "ecdsa.h" #include "ecc-curve.h" #endif +#ifdef HAVE_NETTLE_EDDSA_H +#include "eddsa.h" +#endif static int _digest_nettle(int algo, uint8_t* buf, size_t len, @@ -1477,6 +1480,10 @@ dnskey_algo_id_is_supported(int id) case LDNS_ECDSAP384SHA384: #endif return 1; +#ifdef USE_ED25519 + case LDNS_ED25519: + return 1; +#endif case LDNS_RSAMD5: /* RFC 6725 deprecates RSAMD5 */ case LDNS_ECC_GOST: default: @@ -1718,6 +1725,30 @@ _verify_nettle_ecdsa(sldns_buffer* buf, unsigned int digest_size, unsigned char* } #endif +#ifdef USE_ED25519 +static char * +_verify_nettle_ed25519(sldns_buffer* buf, unsigned char* sigblock, + unsigned int sigblock_len, unsigned char* key, unsigned int keylen) +{ + int res = 0; + + if(sigblock_len != ED25519_SIGNATURE_SIZE) { + return "wrong ED25519 signature length"; + } + if(keylen != ED25519_KEY_SIZE) { + return "wrong ED25519 key length"; + } + + res = ed25519_sha512_verify((uint8_t*)key, sldns_buffer_limit(buf), + sldns_buffer_begin(buf), (uint8_t*)sigblock); + + if (!res) + return "ED25519 signature verification failed"; + else + return NULL; +} +#endif + /** * Check a canonical sig+rrset and signature against a dnskey * @param buf: buffer with data to verify, the first rrsig part and the @@ -1759,9 +1790,13 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, case LDNS_RSASHA1_NSEC3: digest_size = (digest_size ? digest_size : SHA1_DIGEST_SIZE); #endif + /* double fallthrough annotation to please gcc parser */ + /* fallthrough */ #ifdef USE_SHA2 + /* fallthrough */ case LDNS_RSASHA256: digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE); + /* fallthrough */ case LDNS_RSASHA512: digest_size = (digest_size ? digest_size : SHA512_DIGEST_SIZE); @@ -1776,6 +1811,7 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, #ifdef USE_ECDSA case LDNS_ECDSAP256SHA256: digest_size = (digest_size ? digest_size : SHA256_DIGEST_SIZE); + /* fallthrough */ case LDNS_ECDSAP384SHA384: digest_size = (digest_size ? digest_size : SHA384_DIGEST_SIZE); *reason = _verify_nettle_ecdsa(buf, digest_size, sigblock, @@ -1784,6 +1820,15 @@ verify_canonrrset(sldns_buffer* buf, int algo, unsigned char* sigblock, return sec_status_bogus; else return sec_status_secure; +#endif +#ifdef USE_ED25519 + case LDNS_ED25519: + *reason = _verify_nettle_ed25519(buf, sigblock, sigblock_len, + key, keylen); + if (*reason != NULL) + return sec_status_bogus; + else + return sec_status_secure; #endif case LDNS_RSAMD5: case LDNS_ECC_GOST: diff --git a/validator/val_utils.c b/validator/val_utils.c index e4eff1b2523b..973473f9dc85 100644 --- a/validator/val_utils.c +++ b/validator/val_utils.c @@ -932,17 +932,24 @@ val_check_nonsecure(struct module_env* env, struct reply_info* rep) * Therefore the message is bogus. */ - /* check if authority consists of only an NS record + /* check if authority has an NS record * which is bad, and there is an answer section with * data. In that case, delete NS and additional to * be lenient and make a minimal response */ - if(rep->an_numrrsets != 0 && rep->ns_numrrsets == 1 && + if(rep->an_numrrsets != 0 && ntohs(rep->rrsets[i]->rk.type) == LDNS_RR_TYPE_NS) { verbose(VERB_ALGO, "truncate to minimal"); - rep->ns_numrrsets = 0; rep->ar_numrrsets = 0; - rep->rrset_count = rep->an_numrrsets; + rep->rrset_count = rep->an_numrrsets + + rep->ns_numrrsets; + /* remove this unneeded authority rrset */ + memmove(rep->rrsets+i, rep->rrsets+i+1, + sizeof(struct ub_packed_rrset_key*)* + (rep->rrset_count - i - 1)); + rep->ns_numrrsets--; + rep->rrset_count--; + i--; return; }