namedconf.c revision dafcb997e390efa4423883dafd100c975c4095d6
d63ae51ba337165172a9b50fd5d84805ffe50044Tinderbox User * Copyright (C) 2004 Internet Systems Consortium, Inc. ("ISC")
819fe493f97078521bb6b9a7b97583bef89f5abcMark Andrews * Copyright (C) 2002, 2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
819fe493f97078521bb6b9a7b97583bef89f5abcMark Andrews * copyright notice and this permission notice appear in all copies.
26440aaebba1acb5c8810f7faa26ad3b7553762eMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews * PERFORMANCE OF THIS SOFTWARE.
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews/* $Id: namedconf.c,v 1.29 2004/03/05 05:12:22 marka Exp $ */
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews#define TOKEN_STRING(pctx) (pctx->token.value.as_textregion.base)
33d96fbbc8aa221508f3c780539bf44810fd2c9cMark Andrews/* Check a return value. */
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt/* Clean up a configuration object if non-NULL. */
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt do { if ((obj) != NULL) cfg_obj_destroy(pctx, &(obj)); } while (0)
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * Forward declarations of static functions.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinparse_enum_or_other(cfg_parser_t *pctx, const cfg_type_t *enumtype,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinparse_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret);
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinparse_optional_keyvalue(cfg_parser_t *pctx, const cfg_type_t *type, cfg_obj_t **ret);
f5d30e2864e048a42c4dc1134993ae7efdb5d6c3Mark Andrewsprint_keyvalue(cfg_printer_t *pctx, cfg_obj_t *obj);
8077efca7d2ec3b9bf0428386a1ec2fcbcdf437bAutomatic Updaterdoc_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type);
19c7b1a0293498a3e36692c59646ed6e15ffc8d0Tinderbox Userdoc_optional_keyvalue(cfg_printer_t *pctx, const cfg_type_t *type);
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_bracketed_namesockaddrkeylist;
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_bracketed_sockaddrlist;
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein/* tkey-dhkey */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t tkey_dhkey_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "tkey-dhkey", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein/* listen-on */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "listenon", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, listenon_fields };
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt "acl", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, acl_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein/* masters */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "addresses", &cfg_type_bracketed_namesockaddrkeylist, 0 },
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "masters", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, masters_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * "sockaddrkeylist", a list of socket addresses with optional keys
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * and an optional default port, as used in the masters option.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * "port 1234 { mymasters; 10.0.0.1 key foo; 1::2 port 69; }"
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t namesockaddrkey_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "masterselement", &cfg_type_masterselement, 0 },
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "namesockaddrkey", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_bracketed_namesockaddrkeylist = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "bracketed_namesockaddrkeylist", cfg_parse_bracketed_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein cfg_print_bracketed_list, cfg_doc_bracketed_list, &cfg_rep_list, &cfg_type_namesockaddrkey
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t namesockaddrkeylist_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "addresses", &cfg_type_bracketed_namesockaddrkeylist, 0 },
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_namesockaddrkeylist = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "sockaddrkeylist", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A list of socket addresses with an optional default port,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * as used in the also-notify option. E.g.,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * "port 1234 { 10.0.0.1; 1::2 port 69; }"
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t portiplist_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "addresses", &cfg_type_bracketed_sockaddrlist, 0 },
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "portiplist", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A public key, as in the "pubkey" statement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "pubkey", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, pubkey_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A list of RR types, used in grant statements.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * Note that the old parser allows quotes around the RR type names.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "rrtypelist", cfg_parse_spacelist, cfg_print_spacelist, cfg_doc_terminal,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *mode_enums[] = { "grant", "deny", NULL };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "mode", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *matchtype_enums[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "name", "subdomain", "wildcard", "self", NULL };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "matchtype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A grant statement, used in the update policy.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "identity", &cfg_type_astring, 0 }, /* domain name */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "name", &cfg_type_astring, 0 }, /* domain name */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "grant", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, grant_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "update_policy", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A view statement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "view", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, view_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A zone statement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "zone", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, zone_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A "category" clause in the "logging" statement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "destinations", &cfg_type_destinationlist,0 },
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "category", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple, category_fields };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A trusted key, as used in the "trusted-keys" statement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t trustedkey_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "trustedkey", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic keyword_type_t wild_class_kw = { "class", &cfg_type_ustring };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_optional_wild_class = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "optional_wild_class", parse_optional_keyvalue, print_keyvalue,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein doc_optional_keyvalue, &cfg_rep_string, &wild_class_kw
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic keyword_type_t wild_type_kw = { "type", &cfg_type_ustring };
561a29af8c54a216e7d30b5b4f6e0d21661654ecMark Andrewsstatic cfg_type_t cfg_type_optional_wild_type = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein print_keyvalue, doc_optional_keyvalue, &cfg_rep_string, &wild_type_kw
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic keyword_type_t wild_name_kw = { "name", &cfg_type_qstring };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_optional_wild_name = {
3001a1b4e6298466882a4147307b4c28a3b08f91Mark Andrews print_keyvalue, doc_optional_keyvalue, &cfg_rep_string, &wild_name_kw
0f78f780648806bcb3e374b7dafac73e6c558ea8Mark Andrews * An rrset ordering element.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t rrsetorderingelement_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein { "order", &cfg_type_ustring, 0 }, /* must be literal "order" */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_rrsetorderingelement = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "rrsetorderingelement", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A global or view "check-names" option. Note that the zone
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * "check-names" option has a different syntax.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *checktype_enums[] = { "master", "slave", "response", NULL };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "checktype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *checkmode_enums[] = { "fail", "warn", "ignore", NULL };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "checkmode", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_tuplefielddef_t checknames_fields[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "checknames", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic cfg_type_t cfg_type_bracketed_sockaddrlist = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "bracketed_sockaddrlist", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "rrsetorder", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic keyword_type_t port_kw = { "port", &cfg_type_uint32 };
7ba5dc6485e54258101da72455974dde38d04289Mark Andrews "optional_port", parse_optional_keyvalue, print_keyvalue,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein doc_optional_keyvalue, &cfg_rep_uint32, &port_kw
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein/* A list of keys, as in the "key" clause of the controls statement. */
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "keylist", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list, &cfg_rep_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "trusted-keys", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list, &cfg_rep_list,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *forwardtype_enums[] = { "first", "only", NULL };
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "forwardtype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *zonetype_enums[] = {
8afea636ab0c07399aa3e2410b2cfbd41099df98Mark Andrews "master", "slave", "stub", "hint", "forward", "delegation-only", NULL };
8afea636ab0c07399aa3e2410b2cfbd41099df98Mark Andrews "zonetype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
8afea636ab0c07399aa3e2410b2cfbd41099df98Mark Andrewsstatic const char *loglevel_enums[] = {
8afea636ab0c07399aa3e2410b2cfbd41099df98Mark Andrews "critical", "error", "warning", "notice", "info", "dynamic", NULL };
8afea636ab0c07399aa3e2410b2cfbd41099df98Mark Andrews "loglevel", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinstatic const char *transferformat_enums[] = {
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "transferformat", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum, &cfg_rep_string,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * The special keyword "none", as used in the pid-file option.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinprint_none(cfg_printer_t *pctx, cfg_obj_t *obj) {
3001a1b4e6298466882a4147307b4c28a3b08f91Mark Andrews "none", NULL, print_none, NULL, &cfg_rep_void, NULL
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * A quoted string or the special keyword "none". Used in the pid-file option.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinparse_qstringornone(cfg_parser_t *pctx, const cfg_type_t *type,
3d711f2f75cb9a9ddcbf1fca9b2de192e75340e6Mark Andrews if (pctx->token.type == isc_tokentype_string &&
3d711f2f75cb9a9ddcbf1fca9b2de192e75340e6Mark Andrews return (cfg_create_obj(pctx, &cfg_type_none, ret));
3d711f2f75cb9a9ddcbf1fca9b2de192e75340e6Mark Andrewsdoc_qstringornone(cfg_printer_t *pctx, const cfg_type_t *type) {
3d711f2f75cb9a9ddcbf1fca9b2de192e75340e6Mark Andrews cfg_print_chars(pctx, "( <quoted_string> | none )", 26);
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein "qstringornone", parse_qstringornone, NULL, doc_qstringornone, NULL, NULL };
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt * keyword hostname
8454718b87840e1689be04cbea5f61fd57e1d1ceEvan Huntprint_hostname(cfg_printer_t *pctx, cfg_obj_t *obj) {
30eec077db2bdcb6f2a0dc388a3cdde2ede75ec1Mark Andrews "hostname", NULL, print_hostname, NULL, &cfg_rep_boolean, NULL
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein * "server-id" arguement.
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austeinparse_serverid(cfg_parser_t *pctx, const cfg_type_t *type,
268a4475065fe6a8cd7cc707820982cf5e98f430Rob Austein return (cfg_create_obj(pctx, &cfg_type_none, ret));
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt strcasecmp(TOKEN_STRING(pctx), "hostname") == 0) {
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt return (cfg_create_obj(pctx, &cfg_type_hostname, ret));
return (result);
static isc_result_t
return (result);
"bracketed_sockaddrlist", cfg_parse_bracketed_list, cfg_print_bracketed_list, cfg_doc_bracketed_list,
* Clauses that can be found within the top level of the named.conf
static cfg_clausedef_t
namedconf_clauses[] = {
static cfg_clausedef_t
static cfg_clausedef_t
options_clauses[] = {
static cfg_clausedef_t
view_clauses[] = {
static cfg_clausedef_t
view_only_clauses[] = {
static cfg_clausedef_t
zone_clauses[] = {
static cfg_clausedef_t
zone_only_clauses[] = {
/* The top-level named.conf syntax. */
static cfg_clausedef_t *
namedconf_clausesets[] = {
static cfg_clausedef_t *
options_clausesets[] = {
static cfg_clausedef_t *
view_clausesets[] = {
static cfg_clausedef_t *
zone_clausesets[] = {
static cfg_clausedef_t
key_clauses[] = {
static cfg_clausedef_t *
key_clausesets[] = {
static cfg_clausedef_t
server_clauses[] = {
static cfg_clausedef_t *
server_clausesets[] = {
static cfg_clausedef_t
channel_clauses[] = {
static cfg_clausedef_t *
channel_clausesets[] = {
static cfg_clausedef_t
logging_clauses[] = {
static cfg_clausedef_t *
logging_clausesets[] = {
static isc_result_t
char *endp;
unsigned int len;
if (*endp == 0) {
return (ISC_R_SUCCESS);
return (ISC_R_FAILURE);
return (ISC_R_FAILURE);
return (ISC_R_FAILURE);
return (ISC_R_SUCCESS);
static isc_result_t
goto cleanup;
return (ISC_R_SUCCESS);
return (result);
static isc_result_t
static isc_result_t
if (optional) {
goto cleanup;
return (result);
static isc_result_t
return (result);
static isc_result_t
static isc_result_t
static const char *dialup_enums[] = {
static isc_result_t
static isc_result_t
static cfg_clausedef_t
controls_clauses[] = {
static cfg_clausedef_t *
controls_clausesets[] = {
static isc_result_t
return (result);
static isc_result_t
unsigned int have_address = 0;
unsigned int have_port = 0;
INSIST(0);
port = 0;
&netaddr));
have_address++;
&port));
have_port++;
return (ISC_R_UNEXPECTEDTOKEN);
return (ISC_R_UNEXPECTEDTOKEN);
return (ISC_R_SUCCESS);
return (result);
static isc_result_t
static isc_result_t
static isc_result_t
goto bad;
bad:
return (ISC_R_UNEXPECTEDTOKEN);
return (result);
static unsigned int controls_sockaddr_flags =
static isc_result_t
if (braces) {
return (result);
static isc_result_t
return (result);
static isc_result_t
return (result);
static isc_result_t
static isc_result_t
return (ISC_R_SUCCESS);
return (result);
static cfg_clausedef_t
lwres_clauses[] = {
static cfg_clausedef_t *
lwres_clausesets[] = {
static cfg_clausedef_t
rndcconf_options_clauses[] = {
static cfg_clausedef_t *
static cfg_clausedef_t
rndcconf_server_clauses[] = {
static cfg_clausedef_t *
static cfg_clausedef_t
rndcconf_clauses[] = {
static cfg_clausedef_t *
rndcconf_clausesets[] = {
static cfg_clausedef_t
rndckey_clauses[] = {
static cfg_clausedef_t *
rndckey_clausesets[] = {
static isc_result_t
&obj));
return (ISC_R_UNEXPECTEDTOKEN);
return (result);
static isc_result_t
return (ISC_R_UNEXPECTEDTOKEN);
return (result);