config.c revision c4f54e5bd1cd09f601252627b5b26768ab797742
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley/*
8664a1bd40814ed0b42eacfc5eb354b598dfd6dfTinderbox User * Copyright (C) 2004-2014 Internet Systems Consortium, Inc. ("ISC")
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * Copyright (C) 2001-2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * copyright notice and this permission notice appear in all copies.
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley *
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
9c3531d72aeaad6c5f01efe6a1c82023e1379e4dDavid Lawrence * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
26cf4737b3e84c3a686a5eacebf22ac39e57d4caMark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * PERFORMANCE OF THIS SOFTWARE.
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley */
5c7d67e3e68f8dbc45ffd4e1ea94696899b7b966Bob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley/*! \file */
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#include <config.h>
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington
386d3a99c190bad55edf44d076e6bd087e230ab8Tatuya JINMEI 神明達哉#include <stdlib.h>
386d3a99c190bad55edf44d076e6bd087e230ab8Tatuya JINMEI 神明達哉
386d3a99c190bad55edf44d076e6bd087e230ab8Tatuya JINMEI 神明達哉#include <isc/buffer.h>
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#include <isc/log.h>
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#include <isc/mem.h>
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#include <isc/parseint.h>
801dceea23d11975f5a5ae6ccbdf1dbde6b7af13David Lawrence#include <isc/region.h>
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#include <isc/result.h>
9cd6d409b78a6f833b681c13a68fbdc7c024fe66David Lawrence#include <isc/sockaddr.h>
801dceea23d11975f5a5ae6ccbdf1dbde6b7af13David Lawrence#include <isc/string.h>
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley#include <isc/util.h>
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews#include <isccfg/namedconf.h>
1a69a1a78cfaa86f3b68bbc965232b7876d4da2aDavid Lawrence
eefea43215016bce437ab4a7441b2851fd182960David Lawrence#include <dns/fixedname.h>
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington#include <dns/name.h>
440be4c866f6935ac069db79a414304507a664c2Michael Graff#include <dns/rdataclass.h>
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley#include <dns/rdatatype.h>
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt#include <dns/tsig.h>
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt#include <dns/zone.h>
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt#include <dst/dst.h>
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#include <named/config.h>
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#include <named/globals.h>
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#include <bind.keys.h>
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt/*% default configuration */
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellingtonstatic char defaultconf[] = "\
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellingtonoptions {\n\
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington automatic-interface-scan yes;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt bindkeys-file \"" NS_SYSCONFDIR "/bind.keys\";\n\
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington# blackhole {none;};\n"
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington#ifndef WIN32
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington" coresize default;\n\
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington datasize default;\n\
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington files unlimited;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 stacksize default;\n"
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt#endif
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt"# session-keyfile \"" NS_LOCALSTATEDIR "/run/named/session.key\";\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt session-keyname local-ddns;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 session-keyalg hmac-sha256;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt deallocate-on-exit true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# directory <none>\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dump-file \"named_dump.db\";\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt fake-iquery no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt has-old-clients false;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt heartbeat-interval 60;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt host-statistics no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt interface-interval 60;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt listen-on {any;};\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt listen-on-v6 {any;};\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt match-mapped-addresses no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt max-rsa-exponent-size 0; /* no limit */\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt memstatistics-file \"named.memstats\";\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt multiple-cnames no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# named-xfer <obsolete>;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt nta-lifetime 3600;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt nta-recheck 300;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt notify-rate 20;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# pid-file \"" NS_LOCALSTATEDIR "/run/named/named.pid\"; /* or /lwresd.pid */\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews port 53;\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews prefetch 2 9;\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews recursing-file \"named.recursing\";\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 secroots-file \"named.secroots\";\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#ifdef PATH_RANDOMDEV
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 random-device \"" PATH_RANDOMDEV "\";\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#endif
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 recursive-clients 1000;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 resolver-query-timeout 10;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 rrset-order { order random; };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 serial-queries 20;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 serial-query-rate 20;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 server-id none;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 startup-notify-rate 20;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 statistics-file \"named.stats\";\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 statistics-interval 60;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 tcp-clients 100;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 tcp-listen-queue 10;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# tkey-dhkey <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# tkey-gssapi-credential <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# tkey-domain <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 transfers-per-ns 2;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 transfers-in 10;\n\
d7201de09b85929a86b157f4b2d91667c68c6b52Automatic Updater transfers-out 10;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 treat-cr-as-space true;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 use-id-pool true;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 use-ixfr true;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 edns-udp-size 4096;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 max-udp-size 4096;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt"
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt#ifdef ISC_PLATFORM_USESIT
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt"\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt nosit-udp-size 4096;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 request-sit true;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉#endif
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉"\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 request-nsid false;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 reserved-sockets 512;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 /* DLV */\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dnssec-lookaside . trust-anchor dlv.isc.org;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews /* view */\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-notify {none;};\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-update-forwarding {none;};\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-query-cache { localnets; localhost; };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-query-cache-on { any; };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-recursion { localnets; localhost; };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 allow-recursion-on { any; };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# allow-v6-synthesis <obsolete>;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# sortlist <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# topology <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 auth-nxdomain false;\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews minimal-responses false;\n\
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews recursion true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt provide-ixfr true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt request-ixfr true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt request-expire true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt fetch-glue no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt rfc2308-type1 no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt additional-from-auth true;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt additional-from-cache true;\n\
8fec8134ea13c2c082c3e63f1ce0afd851e45a91Tatuya JINMEI 神明達哉 query-source address *;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 query-source-v6 address *;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 notify-source *;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley notify-source-v6 *;\n\
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein cleaning-interval 0; /* now meaningless */\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley min-roots 2;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley lame-ttl 600;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley servfail-ttl 10;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley max-ncache-ttl 10800; /* 3 hours */\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley max-cache-ttl 604800; /* 1 week */\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley transfer-format many-answers;\n\
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein max-cache-size 0;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley check-names master fail;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley check-names slave warn;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley check-names response ignore;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley check-dup-records warn;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley check-mx warn;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley check-spf warn;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley acache-enable no;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley acache-cleaning-interval 60;\n\
2f012d936b5ccdf6520c96a4de23721dc58a2221Automatic Updater max-acache-size 16M;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dnssec-enable yes;\n\
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley dnssec-validation yes; \n\
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley dnssec-accept-expired no;\n\
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley clients-per-query 10;\n\
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley max-clients-per-query 100;\n\
2f012d936b5ccdf6520c96a4de23721dc58a2221Automatic Updater max-recursion-depth 7;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 max-recursion-queries 50;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley zero-no-soa-ttl-cache no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley nsec3-test-zone no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley allow-new-zones no;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley"
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley#ifdef HAVE_GEOIP
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley"\
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews geoip-use-ecs yes;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley"
91cd0f93ad34d23e8b09dca337120f64fbe8f0a1Andreas Gustafsson#endif
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley#ifdef ALLOW_FILTER_AAAA
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley" filter-aaaa-on-v4 no;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley filter-aaaa-on-v6 no;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley filter-aaaa { any; };\n\
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews"
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley#endif
9cd6d409b78a6f833b681c13a68fbdc7c024fe66David Lawrence
9cd6d409b78a6f833b681c13a68fbdc7c024fe66David Lawrence" /* zone */\n\
9cd6d409b78a6f833b681c13a68fbdc7c024fe66David Lawrence allow-query {any;};\n\
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews allow-query-on {any;};\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley allow-transfer {any;};\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley notify yes;\n\
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence# also-notify <none>\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley notify-delay 5;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley notify-to-soa no;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley dialup no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# forward <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉# forwarders <none>\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 maintain-ixfr-base no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley# max-ixfr-log-size <obsolete>\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt transfer-source *;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt transfer-source-v6 *;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt alt-transfer-source *;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt alt-transfer-source-v6 *;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 max-transfer-time-in 120;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-transfer-time-out 120;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-transfer-idle-in 60;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-transfer-idle-out 60;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-retry-time 1209600; /* 2 weeks */\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley min-retry-time 500;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-refresh-time 2419200; /* 4 weeks */\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley min-refresh-time 300;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley multi-master no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dnssec-secure-to-insecure no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley sig-validity-interval 30; /* days */\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley sig-signing-nodes 100;\n\
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews sig-signing-signatures 10;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley sig-signing-type 65534;\n\
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews inline-signing no;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley zone-statistics terse;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley max-journal-size unlimited;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley ixfr-from-differences false;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley check-wildcard yes;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt check-sibling yes;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley check-integrity yes;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley check-mx-cname warn;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt check-srv-cname warn;\n\
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley zero-no-soa-ttl yes;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt update-check-ksk yes;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 serial-update-method increment;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dnssec-update-mode maintain;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dnssec-dnskey-kskonly no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dnssec-loadkeys-interval 60;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt try-tcp-refresh yes; /* BIND 8 compat */\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt};\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt"
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt"#\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# Zones in the \"_bind\" view are NOT counted in the count of zones.\n\
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt#\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntview \"_bind\" chaos {\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt recursion no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt notify no;\n\
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt allow-new-zones no;\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 # Prevent use of this zone in DNS amplified reflection DoS attacks\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 rate-limit {\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 responses-per-second 3;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 slip 0;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 min-table-size 10;\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 };\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉\n\
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 zone \"version.bind\" chaos {\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley type master;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley database \"_builtin version\";\n\
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley };\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley zone \"hostname.bind\" chaos {\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley type master;\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley database \"_builtin hostname\";\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley };\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley zone \"authors.bind\" chaos {\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt type master;\n\
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley database \"_builtin authors\";\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley };\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley zone \"id.server\" chaos {\n\
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley type master;\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley database \"_builtin id\";\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley };\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley};\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley"
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley"#\n\
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt# Default trusted key(s) for builtin DLV support\n\
dd324bd791a766c48d90ce9e43d1ab1446378983Bob Halley# (used if \"dnssec-lookaside auto;\" is set and\n\
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer# sysconfdir/bind.keys doesn't exist).\n\
33e482fa3e8befab0d9aaf32ed47b4695e0e6ba3Andreas Gustafsson#\n\
33e482fa3e8befab0d9aaf32ed47b4695e0e6ba3Andreas Gustafsson# BEGIN MANAGED KEYS\n"
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington
dde4382b7fd55c945ef7f4ae5792099ae3a09883Brian Wellington/* Imported from bind.keys.h: */
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian WellingtonMANAGED_KEYS
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington"# END MANAGED KEYS\n\
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer";
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellingtonisc_result_t
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntns_config_parsedefaults(cfg_parser_t *parser, cfg_obj_t **conf) {
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellington isc_buffer_t b;
aa3f41bafce993fbd2109ea3803cbce909db1c95Brian Wellington
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington isc_buffer_init(&b, defaultconf, sizeof(defaultconf) - 1);
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington isc_buffer_add(&b, sizeof(defaultconf) - 1);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (cfg_parse_buffer(parser, &b, &cfg_type_namedconf, conf));
838f13fbdc513895d1826201a11531dbde9de04aBrian Wellington}
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntisc_result_t
a6f31a3fd079f37ad0a7c75ef2d50842cd01811cBrian Wellingtonns_config_get(cfg_obj_t const * const *maps, const char *name,
d8afbf2f30213b2638a4d77207913db576089c02Michael Sawyer const cfg_obj_t **obj)
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington{
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley int i;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley for (i = 0;; i++) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley if (maps[i] == NULL)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (ISC_R_NOTFOUND);
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley if (cfg_map_get(maps[i], name, obj) == ISC_R_SUCCESS)
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley return (ISC_R_SUCCESS);
0e58c0998df1ccd1a289b2c3f078e7d03d9331d3Bob Halley }
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halleyisc_result_t
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleyns_checknames_get(const cfg_obj_t **maps, const char *which,
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley const cfg_obj_t **obj)
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews{
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley const cfg_listelt_t *element;
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews const cfg_obj_t *checknames;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const cfg_obj_t *type;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const cfg_obj_t *value;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley int i;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley for (i = 0;; i++) {
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews if (maps[i] == NULL)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley return (ISC_R_NOTFOUND);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence checknames = NULL;
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews if (cfg_map_get(maps[i], "check-names",
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt &checknames) == ISC_R_SUCCESS) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt /*
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley * Zone map entry is not a list.
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington */
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington if (checknames != NULL && !cfg_obj_islist(checknames)) {
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington *obj = checknames;
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington return (ISC_R_SUCCESS);
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington }
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington for (element = cfg_list_first(checknames);
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington element != NULL;
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington element = cfg_list_next(element)) {
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington value = cfg_listelt_value(element);
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington type = cfg_tuple_get(value, "type");
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington if (strcasecmp(cfg_obj_asstring(type),
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington which) == 0) {
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews *obj = cfg_tuple_get(value, "mode");
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington return (ISC_R_SUCCESS);
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington }
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington }
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington}
1fa64087e7afb06d6b0c0994ace49d1906e820f9Mark Andrews
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellingtonint
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrewsns_config_listcount(const cfg_obj_t *list) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const cfg_listelt_t *e;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt int i = 0;
48565891e8f2f8c77b87908b4893f693a08e9ba9Brian Wellington
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington for (e = cfg_list_first(list); e != NULL; e = cfg_list_next(e))
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley i++;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (i);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt}
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntisc_result_t
e47208b6fb724cba7053baee4246b308e35403a2Evan Huntns_config_getclass(const cfg_obj_t *classobj, dns_rdataclass_t defclass,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dns_rdataclass_t *classp) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_textregion_t r;
e47208b6fb724cba7053baee4246b308e35403a2Evan Hunt isc_result_t result;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (!cfg_obj_isstring(classobj)) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt *classp = defclass;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (ISC_R_SUCCESS);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt DE_CONST(cfg_obj_asstring(classobj), r.base);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt r.length = strlen(r.base);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt result = dns_rdataclass_fromtext(classp, &r);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (result != ISC_R_SUCCESS)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt cfg_obj_log(classobj, ns_g_lctx, ISC_LOG_ERROR,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt "unknown class '%s'", r.base);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (result);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt}
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halleyisc_result_t
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntns_config_gettype(const cfg_obj_t *typeobj, dns_rdatatype_t deftype,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dns_rdatatype_t *typep) {
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_textregion_t r;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_result_t result;
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews if (!cfg_obj_isstring(typeobj)) {
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews *typep = deftype;
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews return (ISC_R_SUCCESS);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews }
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews DE_CONST(cfg_obj_asstring(typeobj), r.base);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews r.length = strlen(r.base);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews result = dns_rdatatype_fromtext(typep, &r);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews if (result != ISC_R_SUCCESS)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley cfg_obj_log(typeobj, ns_g_lctx, ISC_LOG_ERROR,
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley "unknown type '%s'", r.base);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley return (result);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley}
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleydns_zonetype_t
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrewsns_config_getzonetype(const cfg_obj_t *zonetypeobj) {
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley dns_zonetype_t ztype = dns_zone_none;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley const char *str;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley str = cfg_obj_asstring(zonetypeobj);
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley if (strcasecmp(str, "master") == 0)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley ztype = dns_zone_master;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley else if (strcasecmp(str, "slave") == 0)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley ztype = dns_zone_slave;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley else if (strcasecmp(str, "stub") == 0)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley ztype = dns_zone_stub;
91cd0f93ad34d23e8b09dca337120f64fbe8f0a1Andreas Gustafsson else if (strcasecmp(str, "static-stub") == 0)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley ztype = dns_zone_staticstub;
032d2134a4c1808696688db9bf6f20253e5d05b5Mark Andrews else if (strcasecmp(str, "redirect") == 0)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley ztype = dns_zone_redirect;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley else
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley INSIST(0);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence return (ztype);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews}
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleyisc_result_t
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halleyns_config_getiplist(const cfg_obj_t *config, const cfg_obj_t *list,
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley in_port_t defport, isc_mem_t *mctx,
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley isc_uint32_t *countp)
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley{
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley int count, i = 0;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley const cfg_obj_t *addrlist;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const cfg_obj_t *portobj, *dscpobj;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein const cfg_listelt_t *element;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_sockaddr_t *addrs;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson in_port_t port;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_dscp_t dscp = -1, *dscps = NULL;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result_t result;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 INSIST(addrsp != NULL && *addrsp == NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 INSIST(dscpsp == NULL || *dscpsp == NULL);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson INSIST(countp != NULL);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson addrlist = cfg_tuple_get(list, "addresses");
386d3a99c190bad55edf44d076e6bd087e230ab8Tatuya JINMEI 神明達哉 count = ns_config_listcount(addrlist);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 portobj = cfg_tuple_get(list, "port");
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (cfg_obj_isuint32(portobj)) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_uint32_t val = cfg_obj_asuint32(portobj);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (val > ISC_UINT16_MAX) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 cfg_obj_log(portobj, ns_g_lctx, ISC_LOG_ERROR,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 "port '%u' out of range", val);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_RANGE);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 port = (in_port_t) val;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 } else if (defport != 0)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 port = defport;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 else {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = ns_config_getport(config, &port);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (result != ISC_R_SUCCESS)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (result);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (dscpsp != NULL) {
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson dscps = isc_mem_get(mctx, count * sizeof(isc_dscp_t));
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (dscps == NULL)
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 return (ISC_R_NOMEMORY);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dscpobj = cfg_tuple_get(list, "dscp");
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (dscpobj != NULL && cfg_obj_isuint32(dscpobj)) {
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (cfg_obj_asuint32(dscpobj) > 63) {
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson cfg_obj_log(dscpobj, ns_g_lctx, ISC_LOG_ERROR,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson "dscp value '%u' is out of range",
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson cfg_obj_asuint32(dscpobj));
1f1d36a87b65186d9f89aac7f456ab1fd2a39ef6Andreas Gustafsson return (ISC_R_RANGE);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson }
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 }
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson }
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson addrs = isc_mem_get(mctx, count * sizeof(isc_sockaddr_t));
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (addrs == NULL)
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson return (ISC_R_NOMEMORY);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
386d3a99c190bad55edf44d076e6bd087e230ab8Tatuya JINMEI 神明達哉 for (element = cfg_list_first(addrlist);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 element != NULL;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson element = cfg_list_next(element), i++)
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 {
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 const cfg_obj_t *addr;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 INSIST(i < count);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 addr = cfg_listelt_value(element);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 addrs[i] = *cfg_obj_assockaddr(addr);
2f012d936b5ccdf6520c96a4de23721dc58a2221Automatic Updater if (dscpsp != NULL) {
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 isc_dscp_t innerdscp;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 innerdscp = cfg_obj_getdscp(addr);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 if (innerdscp == -1)
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 innerdscp = dscp;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 dscps[i] = innerdscp;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 }
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 if (isc_sockaddr_getport(&addrs[i]) == 0)
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 isc_sockaddr_setport(&addrs[i], port);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 INSIST(i == count);
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson *addrsp = addrs;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *countp = count;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (dscpsp != NULL)
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson *dscpsp = dscps;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson return (ISC_R_SUCCESS);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson}
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafssonvoid
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafssonns_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_dscp_t **dscpsp, isc_uint32_t count)
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson{
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson INSIST(addrsp != NULL && *addrsp != NULL);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson INSIST(dscpsp == NULL || *dscpsp != NULL);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein isc_mem_put(mctx, *addrsp, count * sizeof(isc_sockaddr_t));
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein *addrsp = NULL;
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafsson
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafsson if (dscpsp != NULL) {
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_mem_put(mctx, *dscpsp, count * sizeof(isc_dscp_t));
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafsson *dscpsp = NULL;
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein }
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein}
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafsson
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafssonstatic isc_result_t
1d90a73d6d0aa3f82c7e8d638e0013c331835eedAndreas Gustafssonget_masters_def(const cfg_obj_t *cctx, const char *name,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t **ret)
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson{
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_result_t result;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t *masters = NULL;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_listelt_t *elt;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson result = cfg_map_get(cctx, "masters", &masters);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (result != ISC_R_SUCCESS)
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 return (result);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson for (elt = cfg_list_first(masters);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson elt != NULL;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson elt = cfg_list_next(elt)) {
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t *list;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const char *listname;
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 list = cfg_listelt_value(elt);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson listname = cfg_obj_asstring(cfg_tuple_get(list, "name"));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson if (strcasecmp(listname, name) == 0) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *ret = list;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson return (ISC_R_SUCCESS);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson }
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson }
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson return (ISC_R_NOTFOUND);
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson}
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafssonisc_result_t
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafssonns_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_mem_t *mctx, isc_sockaddr_t **addrsp,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_dscp_t **dscpsp, dns_name_t ***keysp,
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_uint32_t *countp)
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson{
6da7c87a77ecfd9ccce36f96b4ccd20e1b9cccf1Tatuya JINMEI 神明達哉 isc_uint32_t addrcount = 0, dscpcount = 0, keycount = 0, i = 0;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_uint32_t listcount = 0, l = 0, j;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson isc_uint32_t stackcount = 0, pushed = 0;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result_t result;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_listelt_t *element;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t *addrlist;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t *portobj;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson const cfg_obj_t *dscpobj;
8e7ce54bef167f582c675ac76c373009595578a3Andreas Gustafsson in_port_t port;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_dscp_t dscp;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dns_fixedname_t fname;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_sockaddr_t *addrs = NULL;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_dscp_t *dscps = NULL;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_name_t **keys = NULL;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley struct { const char *name; } *lists = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt struct {
ae8b7e02a8e5d7febba7d79b2c759add95a48f60Brian Wellington const cfg_listelt_t *element;
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews in_port_t port;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_dscp_t dscp;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley } *stack = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt REQUIRE(addrsp != NULL && *addrsp == NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 REQUIRE(dscpsp != NULL && *dscpsp == NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 REQUIRE(keysp != NULL && *keysp == NULL);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley REQUIRE(countp != NULL);
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley newlist:
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley addrlist = cfg_tuple_get(list, "addresses");
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley portobj = cfg_tuple_get(list, "port");
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dscpobj = cfg_tuple_get(list, "dscp");
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (cfg_obj_isuint32(portobj)) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_uint32_t val = cfg_obj_asuint32(portobj);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (val > ISC_UINT16_MAX) {
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley cfg_obj_log(portobj, ns_g_lctx, ISC_LOG_ERROR,
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley "port '%u' out of range", val);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley result = ISC_R_RANGE;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 goto cleanup;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley }
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley port = (in_port_t) val;
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff } else {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = ns_config_getport(config, &port);
e44487bfc23599b6b240e09d83d1c862fecfcc82Michael Graff if (result != ISC_R_SUCCESS)
960d37edc3f4e4d99afd26feab9bed4aa88a499cBrian Wellington goto cleanup;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley }
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley if (dscpobj != NULL && cfg_obj_isuint32(dscpobj)) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley if (cfg_obj_asuint32(dscpobj) > 63) {
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence cfg_obj_log(dscpobj, ns_g_lctx, ISC_LOG_ERROR,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 "dscp value '%u' is out of range",
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley cfg_obj_asuint32(dscpobj));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (ISC_R_RANGE);
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt }
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt dscp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt } else {
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt result = ns_config_getdscp(config, &dscp);
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt if (result != ISC_R_SUCCESS)
634a52966f2324e6d5ceda191fd873ba1cfeb936Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt result = ISC_R_NOMEMORY;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 element = cfg_list_first(addrlist);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt resume:
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt for ( ;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 element != NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt element = cfg_list_next(element))
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 const cfg_obj_t *addr;
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley const cfg_obj_t *key;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const char *keystr;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_buffer_t b;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt addr = cfg_tuple_get(cfg_listelt_value(element),
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley "masterselement");
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 key = cfg_tuple_get(cfg_listelt_value(element), "key");
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (!cfg_obj_issockaddr(addr)) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt const char *listname = cfg_obj_asstring(addr);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_result_t tresult;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt /* Grow lists? */
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (listcount == l) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt void * new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_uint32_t newlen = listcount + 16;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt size_t newsize, oldsize;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt newsize = newlen * sizeof(*lists);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt oldsize = listcount * sizeof(*lists);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt new = isc_mem_get(mctx, newsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (new == NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence if (listcount != 0) {
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence memmove(new, lists, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, lists, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt lists = new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt listcount = newlen;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt /* Seen? */
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt for (j = 0; j < l; j++)
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence if (strcasecmp(lists[j].name, listname) == 0)
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence break;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (j < l)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt continue;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt tresult = get_masters_def(config, listname, &list);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (tresult == ISC_R_NOTFOUND) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt cfg_obj_log(addr, ns_g_lctx, ISC_LOG_ERROR,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt "masters \"%s\" not found", listname);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence result = tresult;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (tresult != ISC_R_SUCCESS)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt lists[l++].name = listname;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt /* Grow stack? */
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt if (stackcount == pushed) {
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt void * new;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt isc_uint32_t newlen = stackcount + 16;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt size_t newsize, oldsize;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews newsize = newlen * sizeof(*stack);
62f016d5d301713c72a59e83d3ab41170a77f674Mark Andrews oldsize = stackcount * sizeof(*stack);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt new = isc_mem_get(mctx, newsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (new == NULL)
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (stackcount != 0) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt memmove(new, stack, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, stack, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt stack = new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt stackcount = newlen;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt /*
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt * We want to resume processing this list on the
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt * next element.
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt */
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt stack[pushed].element = cfg_list_next(element);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt stack[pushed].port = port;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt stack[pushed].dscp = dscp;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt pushed++;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto newlist;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont if (i == addrcount) {
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont void * new;
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont isc_uint32_t newlen = addrcount + 16;
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont size_t newsize, oldsize;
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont newsize = newlen * sizeof(isc_sockaddr_t);
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont oldsize = addrcount * sizeof(isc_sockaddr_t);
1831311ac6179951c8fcca75aa29dc2f5c0218b9Francis Dupont new = isc_mem_get(mctx, newsize);
e53e202ef3b51c58fb9abe0d15e3829a970b00e7Mark Andrews if (new == NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (addrcount != 0) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt memmove(new, addrs, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, addrs, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt addrs = new;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt addrcount = newlen;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt newsize = newlen * sizeof(isc_dscp_t);
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt oldsize = dscpcount * sizeof(isc_dscp_t);
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt new = isc_mem_get(mctx, newsize);
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt if (new == NULL)
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (dscpcount != 0) {
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley memmove(new, dscps, oldsize);
e8336c458cca9289f34dc5cb58fc0b5769502649David Lawrence isc_mem_put(mctx, dscps, oldsize);
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dscps = new;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dscpcount = newlen;
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley
03dd96d177e4ed6771be7fb5f86a3a9d5f17be4eBob Halley newsize = newlen * sizeof(dns_name_t *);
64dcb0811369406961cc2fc18ee5eb67d1b3a939Brian Wellington oldsize = keycount * sizeof(dns_name_t *);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 new = isc_mem_get(mctx, newsize);
2f02f32f045d0570969c775d9a64dd42d94647a6Brian Wellington if (new == NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley goto cleanup;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (keycount != 0) {
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley memmove(new, keys, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, keys, oldsize);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley }
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley keys = new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt keycount = newlen;
b454c0319685041db3f3e8fd7671e1b364fd20c5Evan Hunt }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 addrs[i] = *cfg_obj_assockaddr(addr);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (isc_sockaddr_getport(&addrs[i]) == 0)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_sockaddr_setport(&addrs[i], port);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dscps[i] = cfg_obj_getdscp(addr);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (dscps[i] == -1)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dscps[i] = dscp;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt keys[i] = NULL;
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews i++; /* Increment here so that cleanup on error works. */
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (!cfg_obj_isstring(key))
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley continue;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 keys[i - 1] = isc_mem_get(mctx, sizeof(dns_name_t));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (keys[i - 1] == NULL)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 goto cleanup;
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence dns_name_init(keys[i - 1], NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
bed86971bf7eb315e9c64f75bba331917f4557cfBob Halley keystr = cfg_obj_asstring(key);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_buffer_constinit(&b, keystr, strlen(keystr));
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley isc_buffer_add(&b, strlen(keystr));
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_fixedname_init(&fname);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = dns_name_fromtext(dns_fixedname_name(&fname), &b,
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley dns_rootname, 0, NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (result != ISC_R_SUCCESS)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley goto cleanup;
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley result = dns_name_dup(dns_fixedname_name(&fname), mctx,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt keys[i - 1]);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (result != ISC_R_SUCCESS)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 goto cleanup;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (pushed != 0) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt pushed--;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt element = stack[pushed].element;
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley port = stack[pushed].port;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dscp = stack[pushed].dscp;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto resume;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (i < addrcount) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt void * new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt size_t newsize, oldsize;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt newsize = i * sizeof(isc_sockaddr_t);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt oldsize = addrcount * sizeof(isc_sockaddr_t);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (i != 0) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt new = isc_mem_get(mctx, newsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (new == NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt memmove(new, addrs, newsize);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 } else
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley new = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, addrs, oldsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt addrs = new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt addrcount = i;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt newsize = i * sizeof(isc_dscp_t);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt oldsize = dscpcount * sizeof(isc_dscp_t);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (i != 0) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt new = isc_mem_get(mctx, newsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (new == NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt goto cleanup;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt memmove(new, dscps, newsize);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt } else
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt new = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, dscps, oldsize);
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt dscps = new;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dscpcount = i;
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt newsize = i * sizeof(dns_name_t *);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 oldsize = keycount * sizeof(dns_name_t *);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (i != 0) {
a829555ed724caa56b1ff7716d7eda2266491eafBob Halley new = isc_mem_get(mctx, newsize);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley if (new == NULL)
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley goto cleanup;
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley memmove(new, keys, newsize);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley } else
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley new = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, keys, oldsize);
b454c0319685041db3f3e8fd7671e1b364fd20c5Evan Hunt keys = new;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 keycount = i;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (lists != NULL)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_mem_put(mctx, lists, listcount * sizeof(*lists));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (stack != NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_mem_put(mctx, stack, stackcount * sizeof(*stack));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
4b87939256ede703385e9cab92d3c58d03c31098Mark Andrews INSIST(keycount == addrcount);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley *addrsp = addrs;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *dscpsp = dscps;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *keysp = keys;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *countp = addrcount;
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_SUCCESS);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley cleanup:
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (addrs != NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_mem_put(mctx, addrs, addrcount * sizeof(isc_sockaddr_t));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (dscps != NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_mem_put(mctx, dscps, dscpcount * sizeof(isc_dscp_t));
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (keys != NULL) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 for (j = 0; j < i; j++) {
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley if (keys[j] == NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley continue;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (dns_name_dynamic(keys[j]))
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dns_name_free(keys[j], mctx);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_mem_put(mctx, keys[j], sizeof(dns_name_t));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, keys, keycount * sizeof(dns_name_t *));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (lists != NULL)
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_mem_put(mctx, lists, listcount * sizeof(*lists));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (stack != NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, stack, stackcount * sizeof(*stack));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (result);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt}
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntvoid
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Huntns_config_putipandkeylist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_dscp_t **dscpsp, dns_name_t ***keysp,
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_uint32_t count)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt{
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt unsigned int i;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt dns_name_t **keys;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt REQUIRE(addrsp != NULL && *addrsp != NULL);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 REQUIRE(dscpsp == NULL || *dscpsp != NULL);
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley REQUIRE(keysp != NULL && *keysp != NULL);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt keys = *keysp;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, *addrsp, count * sizeof(isc_sockaddr_t));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (dscpsp != NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, *dscpsp, count * sizeof(isc_dscp_t));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt for (i = 0; i < count; i++) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (keys[i] == NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt continue;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (dns_name_dynamic(keys[i]))
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 dns_name_free(keys[i], mctx);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, keys[i], sizeof(dns_name_t));
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt }
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt isc_mem_put(mctx, *keysp, count * sizeof(dns_name_t *));
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt *addrsp = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt if (dscpsp != NULL)
eb4458b4784a2206d939f9c4cfed4b37b076b5bcEvan Hunt *dscpsp = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt *keysp = NULL;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt}
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉isc_result_t
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halleyns_config_getport(const cfg_obj_t *config, in_port_t *portp) {
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley const cfg_obj_t *maps[3];
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley const cfg_obj_t *options = NULL;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley const cfg_obj_t *portobj = NULL;
97f1a75cf072c2cab98b4bc28c4d2491cfcd3086Bob Halley isc_result_t result;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt int i;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 (void)cfg_map_get(config, "options", &options);
96f55bdc736f8559b3a57260db6f0e964c44070dBob Halley i = 0;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington if (options != NULL)
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt maps[i++] = options;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 maps[i++] = ns_g_defaults;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 maps[i] = NULL;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = ns_config_get(maps, "port", &portobj);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 INSIST(result == ISC_R_SUCCESS);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (cfg_obj_asuint32(portobj) >= ISC_UINT16_MAX) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 cfg_obj_log(portobj, ns_g_lctx, ISC_LOG_ERROR,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 "port '%u' out of range",
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt cfg_obj_asuint32(portobj));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_RANGE);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *portp = (in_port_t)cfg_obj_asuint32(portobj);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_SUCCESS);
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt}
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellingtonisc_result_t
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellingtonns_config_getdscp(const cfg_obj_t *config, isc_dscp_t *dscpp) {
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington const cfg_obj_t *options = NULL;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 const cfg_obj_t *dscpobj = NULL;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result_t result;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 (void)cfg_map_get(config, "options", &options);
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington if (options == NULL)
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington return (ISC_R_SUCCESS);
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington result = cfg_map_get(options, "dscp", &dscpobj);
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington if (result != ISC_R_SUCCESS || dscpobj == NULL) {
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington *dscpp = -1;
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington return (ISC_R_SUCCESS);
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington }
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington if (cfg_obj_asuint32(dscpobj) >= 64) {
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt cfg_obj_log(dscpobj, ns_g_lctx, ISC_LOG_ERROR,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 "dscp '%u' out of range",
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington cfg_obj_asuint32(dscpobj));
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington return (ISC_R_RANGE);
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington }
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington *dscpp = (isc_dscp_t)cfg_obj_asuint32(dscpobj);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_SUCCESS);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉}
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉struct keyalgorithms {
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington const char *str;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington enum { hmacnone, hmacmd5, hmacsha1, hmacsha224,
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington hmacsha256, hmacsha384, hmacsha512 } hmac;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington unsigned int type;
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington isc_uint16_t size;
2f012d936b5ccdf6520c96a4de23721dc58a2221Automatic Updater} algorithms[] = {
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington { "hmac-md5", hmacmd5, DST_ALG_HMACMD5, 128 },
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington { "hmac-md5.sig-alg.reg.int", hmacmd5, DST_ALG_HMACMD5, 0 },
0d89afffb26d5e53a761fc425dab3dda07c7e191Brian Wellington { "hmac-md5.sig-alg.reg.int.", hmacmd5, DST_ALG_HMACMD5, 0 },
1b32bc7da1da9059abd68d6dd15b23e8a442afa3Brian Wellington { "hmac-sha1", hmacsha1, DST_ALG_HMACSHA1, 160 },
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 { "hmac-sha224", hmacsha224, DST_ALG_HMACSHA224, 224 },
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt { "hmac-sha256", hmacsha256, DST_ALG_HMACSHA256, 256 },
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 { "hmac-sha384", hmacsha384, DST_ALG_HMACSHA384, 384 },
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 { "hmac-sha512", hmacsha512, DST_ALG_HMACSHA512, 512 },
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 { NULL, hmacnone, DST_ALG_UNKNOWN, 0 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉};
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉isc_result_t
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉ns_config_getkeyalgorithm(const char *str, dns_name_t **name,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_uint16_t *digestbits)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉{
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ns_config_getkeyalgorithm2(str, name, NULL, digestbits));
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉}
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉isc_result_t
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉ns_config_getkeyalgorithm2(const char *str, dns_name_t **name,
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 unsigned int *typep, isc_uint16_t *digestbits)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉{
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 int i;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 size_t len = 0;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_uint16_t bits;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 isc_result_t result;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 for (i = 0; algorithms[i].str != NULL; i++) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 len = strlen(algorithms[i].str);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (strncasecmp(algorithms[i].str, str, len) == 0 &&
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 (str[len] == '\0' ||
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 (algorithms[i].size != 0 && str[len] == '-')))
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (algorithms[i].str == NULL)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_NOTFOUND);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (str[len] == '-') {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 result = isc_parse_uint16(&bits, str + len + 1, 10);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (result != ISC_R_SUCCESS)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (result);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (bits > algorithms[i].size)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 return (ISC_R_RANGE);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 } else if (algorithms[i].size == 0)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 bits = 128;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 else
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt bits = algorithms[i].size;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (name != NULL) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 switch (algorithms[i].hmac) {
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 case hmacmd5: *name = dns_tsig_hmacmd5_name; break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 case hmacsha1: *name = dns_tsig_hmacsha1_name; break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 case hmacsha224: *name = dns_tsig_hmacsha224_name; break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 case hmacsha256: *name = dns_tsig_hmacsha256_name; break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 case hmacsha384: *name = dns_tsig_hmacsha384_name; break;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt case hmacsha512: *name = dns_tsig_hmacsha512_name; break;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 default:
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 INSIST(0);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 }
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (typep != NULL)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *typep = algorithms[i].type;
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 if (digestbits != NULL)
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉 *digestbits = bits;
b99bfa184bc9375421b5df915eea7dfac6a68a99Evan Hunt return (ISC_R_SUCCESS);
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉}
307d2084502eddc7ce921e5ce439aec3531d90e0Tatuya JINMEI 神明達哉