1238106Sdes/* 2238106Sdes * configparser.y -- yacc grammar for unbound configuration files 3238106Sdes * 4238106Sdes * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. 5238106Sdes * 6238106Sdes * Copyright (c) 2007, NLnet Labs. All rights reserved. 7238106Sdes * 8238106Sdes * This software is open source. 9238106Sdes * 10238106Sdes * Redistribution and use in source and binary forms, with or without 11238106Sdes * modification, are permitted provided that the following conditions 12238106Sdes * are met: 13238106Sdes * 14238106Sdes * Redistributions of source code must retain the above copyright notice, 15238106Sdes * this list of conditions and the following disclaimer. 16238106Sdes * 17238106Sdes * Redistributions in binary form must reproduce the above copyright notice, 18238106Sdes * this list of conditions and the following disclaimer in the documentation 19238106Sdes * and/or other materials provided with the distribution. 20238106Sdes * 21238106Sdes * Neither the name of the NLNET LABS nor the names of its contributors may 22238106Sdes * be used to endorse or promote products derived from this software without 23238106Sdes * specific prior written permission. 24238106Sdes * 25238106Sdes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26266114Sdes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27266114Sdes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28266114Sdes * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29266114Sdes * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30266114Sdes * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 31266114Sdes * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32266114Sdes * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33266114Sdes * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34266114Sdes * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35266114Sdes * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36238106Sdes */ 37238106Sdes 38238106Sdes%{ 39238106Sdes#include "config.h" 40238106Sdes 41238106Sdes#include <stdarg.h> 42238106Sdes#include <stdio.h> 43238106Sdes#include <string.h> 44238106Sdes#include <stdlib.h> 45238106Sdes#include <assert.h> 46238106Sdes 47276605Sdes#include "util/configyyrename.h" 48238106Sdes#include "util/config_file.h" 49238106Sdes#include "util/net_help.h" 50238106Sdes 51238106Sdesint ub_c_lex(void); 52238106Sdesvoid ub_c_error(const char *message); 53238106Sdes 54356345Scystatic void validate_respip_action(const char* action); 55356345Scy 56238106Sdes/* these need to be global, otherwise they cannot be used inside yacc */ 57238106Sdesextern struct config_parser_state* cfg_parser; 58238106Sdes 59238106Sdes#if 0 60238106Sdes#define OUTYY(s) printf s /* used ONLY when debugging */ 61238106Sdes#else 62238106Sdes#define OUTYY(s) 63238106Sdes#endif 64238106Sdes 65238106Sdes%} 66238106Sdes%union { 67238106Sdes char* str; 68238106Sdes}; 69238106Sdes 70238106Sdes%token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR 71238106Sdes%token <str> STRING_ARG 72366095Scy%token VAR_FORCE_TOPLEVEL 73238106Sdes%token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT 74366095Scy%token VAR_OUTGOING_RANGE VAR_INTERFACE VAR_PREFER_IP4 75307729Sdes%token VAR_DO_IP4 VAR_DO_IP6 VAR_PREFER_IP6 VAR_DO_UDP VAR_DO_TCP 76356345Scy%token VAR_TCP_MSS VAR_OUTGOING_TCP_MSS VAR_TCP_IDLE_TIMEOUT 77356345Scy%token VAR_EDNS_TCP_KEEPALIVE VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 78238106Sdes%token VAR_CHROOT VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE 79238106Sdes%token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS VAR_NUM_QUERIES_PER_THREAD 80238106Sdes%token VAR_RRSET_CACHE_SIZE VAR_RRSET_CACHE_SLABS VAR_OUTGOING_NUM_TCP 81238106Sdes%token VAR_INFRA_HOST_TTL VAR_INFRA_LAME_TTL VAR_INFRA_CACHE_SLABS 82238106Sdes%token VAR_INFRA_CACHE_NUMHOSTS VAR_INFRA_CACHE_LAME_SIZE VAR_NAME 83238106Sdes%token VAR_STUB_ZONE VAR_STUB_HOST VAR_STUB_ADDR VAR_TARGET_FETCH_POLICY 84238106Sdes%token VAR_HARDEN_SHORT_BUFSIZE VAR_HARDEN_LARGE_QUERIES 85238106Sdes%token VAR_FORWARD_ZONE VAR_FORWARD_HOST VAR_FORWARD_ADDR 86238106Sdes%token VAR_DO_NOT_QUERY_ADDRESS VAR_HIDE_IDENTITY VAR_HIDE_VERSION 87238106Sdes%token VAR_IDENTITY VAR_VERSION VAR_HARDEN_GLUE VAR_MODULE_CONF 88238106Sdes%token VAR_TRUST_ANCHOR_FILE VAR_TRUST_ANCHOR VAR_VAL_OVERRIDE_DATE 89238106Sdes%token VAR_BOGUS_TTL VAR_VAL_CLEAN_ADDITIONAL VAR_VAL_PERMISSIVE_MODE 90238106Sdes%token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE 91238106Sdes%token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE 92238106Sdes%token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG 93238106Sdes%token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST 94238106Sdes%token VAR_CACHE_MAX_TTL VAR_HARDEN_DNSSEC_STRIPPED VAR_ACCESS_CONTROL 95238106Sdes%token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC 96238106Sdes%token VAR_STATISTICS_INTERVAL VAR_DO_DAEMONIZE VAR_USE_CAPS_FOR_ID 97238106Sdes%token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT 98238106Sdes%token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR 99238106Sdes%token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS 100238106Sdes%token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE 101238106Sdes%token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE 102238106Sdes%token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE 103276699Sdes%token VAR_CONTROL_USE_CERT 104238106Sdes%token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT 105238106Sdes%token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII 106238106Sdes%token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN 107238106Sdes%token VAR_VAL_SIG_SKEW_MAX VAR_CACHE_MIN_TTL VAR_VAL_LOG_LEVEL 108238106Sdes%token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN 109238106Sdes%token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH 110266114Sdes%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN 111356345Scy%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_LOG_REPLIES VAR_LOG_LOCAL_ACTIONS 112356345Scy%token VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM 113238106Sdes%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST 114356345Scy%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE 115368129Scy%token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS 116368129Scy%token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE 117368693Scy%token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM 118238106Sdes%token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN 119368693Scy%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT 120295535Sdes%token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES 121368693Scy%token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_KEEP_PROBING 122356345Scy%token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA 123366095Scy%token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP 124366095Scy%token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE 125366095Scy%token VAR_DNSTAP_TLS_CLIENT_KEY_FILE VAR_DNSTAP_TLS_CLIENT_CERT_FILE 126366095Scy%token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION VAR_DNSTAP_BIDIRECTIONAL 127276605Sdes%token VAR_DNSTAP_IDENTITY VAR_DNSTAP_VERSION 128276605Sdes%token VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 129276605Sdes%token VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 130276605Sdes%token VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 131276605Sdes%token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 132276605Sdes%token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 133276605Sdes%token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 134356345Scy%token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA 135287917Sdes%token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT 136366095Scy%token VAR_IP_DSCP 137307729Sdes%token VAR_DISABLE_DNSSEC_LAME_CHECK 138356345Scy%token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE 139287917Sdes%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE 140356345Scy%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN 141356345Scy%token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR 142356345Scy%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE 143356345Scy%token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE 144356345Scy%token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 145356345Scy%token VAR_MIN_CLIENT_SUBNET_IPV4 VAR_MIN_CLIENT_SUBNET_IPV6 146356345Scy%token VAR_MAX_ECS_TREE_SIZE_IPV4 VAR_MAX_ECS_TREE_SIZE_IPV6 147289063Sdes%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN 148356345Scy%token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND 149356345Scy%token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG 150356345Scy%token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION 151356345Scy%token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW 152356345Scy%token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL 153361435Scy%token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL 154369939Sgit2svn%token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA 155361435Scy%token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR 156361435Scy%token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD 157361435Scy%token VAR_SHM_ENABLE VAR_SHM_KEY VAR_ROOT_KEY_SENTINEL 158356345Scy%token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER 159356345Scy%token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT 160356345Scy%token VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 161356345Scy%token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 162356345Scy%token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 163356345Scy%token VAR_DNSCRYPT_NONCE_CACHE_SIZE 164356345Scy%token VAR_DNSCRYPT_NONCE_CACHE_SLABS 165369939Sgit2svn%token VAR_PAD_RESPONSES VAR_PAD_RESPONSES_BLOCK_SIZE 166369939Sgit2svn%token VAR_PAD_QUERIES VAR_PAD_QUERIES_BLOCK_SIZE 167356345Scy%token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS 168356345Scy%token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT 169356345Scy%token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED 170356345Scy%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT 171366095Scy%token VAR_CACHEDB_REDISEXPIRERECORDS 172356345Scy%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM 173356345Scy%token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM 174356345Scy%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL 175356345Scy%token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM 176356345Scy%token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT 177356345Scy%token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY 178356345Scy%token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY 179366095Scy%token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI 180356345Scy%token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 181361435Scy%token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE 182361435Scy%token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME 183368693Scy%token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING 184369939Sgit2svn%token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID 185238106Sdes 186238106Sdes%% 187238106Sdestoplevelvars: /* empty */ | toplevelvars toplevelvar ; 188238106Sdestoplevelvar: serverstart contents_server | stubstart contents_stub | 189238106Sdes forwardstart contents_forward | pythonstart contents_py | 190356345Scy rcstart contents_rc | dtstart contents_dt | viewstart contents_view | 191356345Scy dnscstart contents_dnsc | cachedbstart contents_cachedb | 192361435Scy ipsetstart contents_ipset | authstart contents_auth | 193366095Scy rpzstart contents_rpz | dynlibstart contents_dl | 194366095Scy force_toplevel 195238106Sdes ; 196366095Scyforce_toplevel: VAR_FORCE_TOPLEVEL 197366095Scy { 198366095Scy OUTYY(("\nP(force-toplevel)\n")); 199366095Scy } 200366095Scy ; 201238106Sdes/* server: declaration */ 202238106Sdesserverstart: VAR_SERVER 203238106Sdes { 204366095Scy OUTYY(("\nP(server:)\n")); 205238106Sdes } 206238106Sdes ; 207366095Scycontents_server: contents_server content_server 208238106Sdes | ; 209238106Sdescontent_server: server_num_threads | server_verbosity | server_port | 210238106Sdes server_outgoing_range | server_do_ip4 | 211366095Scy server_do_ip6 | server_prefer_ip4 | server_prefer_ip6 | 212307729Sdes server_do_udp | server_do_tcp | 213356345Scy server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout | 214356345Scy server_tcp_keepalive | server_tcp_keepalive_timeout | 215238106Sdes server_interface | server_chroot | server_username | 216238106Sdes server_directory | server_logfile | server_pidfile | 217238106Sdes server_msg_cache_size | server_msg_cache_slabs | 218238106Sdes server_num_queries_per_thread | server_rrset_cache_size | 219238106Sdes server_rrset_cache_slabs | server_outgoing_num_tcp | 220238106Sdes server_infra_host_ttl | server_infra_lame_ttl | 221238106Sdes server_infra_cache_slabs | server_infra_cache_numhosts | 222238106Sdes server_infra_cache_lame_size | server_target_fetch_policy | 223238106Sdes server_harden_short_bufsize | server_harden_large_queries | 224238106Sdes server_do_not_query_address | server_hide_identity | 225238106Sdes server_hide_version | server_identity | server_version | 226238106Sdes server_harden_glue | server_module_conf | server_trust_anchor_file | 227238106Sdes server_trust_anchor | server_val_override_date | server_bogus_ttl | 228238106Sdes server_val_clean_additional | server_val_permissive_mode | 229238106Sdes server_incoming_num_tcp | server_msg_buffer_size | 230238106Sdes server_key_cache_size | server_key_cache_slabs | 231238106Sdes server_trusted_keys_file | server_val_nsec3_keysize_iterations | 232238106Sdes server_use_syslog | server_outgoing_interface | server_root_hints | 233238106Sdes server_do_not_query_localhost | server_cache_max_ttl | 234238106Sdes server_harden_dnssec_stripped | server_access_control | 235238106Sdes server_local_zone | server_local_data | server_interface_automatic | 236238106Sdes server_statistics_interval | server_do_daemonize | 237238106Sdes server_use_caps_for_id | server_statistics_cumulative | 238238106Sdes server_outgoing_port_permit | server_outgoing_port_avoid | 239238106Sdes server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | 240238106Sdes server_harden_referral_path | server_private_address | 241238106Sdes server_private_domain | server_extended_statistics | 242238106Sdes server_local_data_ptr | server_jostle_timeout | 243238106Sdes server_unwanted_reply_threshold | server_log_time_ascii | 244238106Sdes server_domain_insecure | server_val_sig_skew_min | 245238106Sdes server_val_sig_skew_max | server_cache_min_ttl | server_val_log_level | 246238106Sdes server_auto_trust_anchor_file | server_add_holddown | 247238106Sdes server_del_holddown | server_keep_missing | server_so_rcvbuf | 248238106Sdes server_edns_buffer_size | server_prefetch | server_prefetch_key | 249238106Sdes server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag | 250356345Scy server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream | 251356345Scy server_log_local_actions | 252238106Sdes server_ssl_service_key | server_ssl_service_pem | server_ssl_port | 253368129Scy server_https_port | server_http_endpoint | server_http_max_streams | 254368129Scy server_http_query_buffer_size | server_http_response_buffer_size | 255368693Scy server_http_nodelay | server_http_notls_downstream | 256266114Sdes server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | 257368693Scy server_so_reuseport | server_delay_close | server_udp_connect | 258295535Sdes server_unblock_lan_zones | server_insecure_lan_zones | 259356345Scy server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | 260287917Sdes server_infra_cache_min_rtt | server_harden_algo_downgrade | 261356345Scy server_ip_transparent | server_ip_ratelimit | server_ratelimit | 262368693Scy server_ip_dscp | server_infra_keep_probing | 263356345Scy server_ip_ratelimit_slabs | server_ratelimit_slabs | 264356345Scy server_ip_ratelimit_size | server_ratelimit_size | 265356345Scy server_ratelimit_for_domain | 266287917Sdes server_ratelimit_below_domain | server_ratelimit_factor | 267356345Scy server_ip_ratelimit_factor | server_send_client_subnet | 268356345Scy server_client_subnet_zone | server_client_subnet_always_forward | 269356345Scy server_client_subnet_opcode | 270356345Scy server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | 271356345Scy server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 | 272356345Scy server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 | 273289063Sdes server_caps_whitelist | server_cache_max_negative_ttl | 274307729Sdes server_permit_small_holddown | server_qname_minimisation | 275307729Sdes server_ip_freebind | server_define_tag | server_local_zone_tag | 276307729Sdes server_disable_dnssec_lame_check | server_access_control_tag | 277307729Sdes server_local_zone_override | server_access_control_tag_action | 278356345Scy server_access_control_tag_data | server_access_control_view | 279369939Sgit2svn server_qname_minimisation_strict | 280369939Sgit2svn server_pad_responses | server_pad_responses_block_size | 281369939Sgit2svn server_pad_queries | server_pad_queries_block_size | 282369939Sgit2svn server_serve_expired | 283356345Scy server_serve_expired_ttl | server_serve_expired_ttl_reset | 284361435Scy server_serve_expired_reply_ttl | server_serve_expired_client_timeout | 285369939Sgit2svn server_serve_original_ttl | server_fake_dsa | 286369939Sgit2svn server_log_identity | server_use_systemd | 287356345Scy server_response_ip_tag | server_response_ip | server_response_ip_data | 288356345Scy server_shm_enable | server_shm_key | server_fake_sha1 | 289356345Scy server_hide_trustanchor | server_trust_anchor_signaling | 290356345Scy server_root_key_sentinel | 291356345Scy server_ipsecmod_enabled | server_ipsecmod_hook | 292356345Scy server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | 293356345Scy server_ipsecmod_whitelist | server_ipsecmod_strict | 294356345Scy server_udp_upstream_without_downstream | server_aggressive_nsec | 295356345Scy server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | 296356345Scy server_fast_server_permil | server_fast_server_num | server_tls_win_cert | 297356345Scy server_tcp_connection_limit | server_log_servfail | server_deny_any | 298356345Scy server_unknown_server_time_limit | server_log_tag_queryreply | 299356345Scy server_stream_wait_size | server_tls_ciphers | 300366095Scy server_tls_ciphersuites | server_tls_session_ticket_keys | 301368693Scy server_tls_use_sni | server_edns_client_string | 302369939Sgit2svn server_edns_client_string_opcode | server_nsid 303238106Sdes ; 304238106Sdesstubstart: VAR_STUB_ZONE 305238106Sdes { 306238106Sdes struct config_stub* s; 307238106Sdes OUTYY(("\nP(stub_zone:)\n")); 308238106Sdes s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 309238106Sdes if(s) { 310238106Sdes s->next = cfg_parser->cfg->stubs; 311238106Sdes cfg_parser->cfg->stubs = s; 312238106Sdes } else 313238106Sdes yyerror("out of memory"); 314238106Sdes } 315238106Sdes ; 316238106Sdescontents_stub: contents_stub content_stub 317238106Sdes | ; 318356345Scycontent_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first | 319356345Scy stub_no_cache | stub_ssl_upstream 320238106Sdes ; 321238106Sdesforwardstart: VAR_FORWARD_ZONE 322238106Sdes { 323238106Sdes struct config_stub* s; 324238106Sdes OUTYY(("\nP(forward_zone:)\n")); 325238106Sdes s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 326238106Sdes if(s) { 327238106Sdes s->next = cfg_parser->cfg->forwards; 328238106Sdes cfg_parser->cfg->forwards = s; 329238106Sdes } else 330238106Sdes yyerror("out of memory"); 331238106Sdes } 332238106Sdes ; 333238106Sdescontents_forward: contents_forward content_forward 334238106Sdes | ; 335356345Scycontent_forward: forward_name | forward_host | forward_addr | forward_first | 336356345Scy forward_no_cache | forward_ssl_upstream 337238106Sdes ; 338356345Scyviewstart: VAR_VIEW 339356345Scy { 340356345Scy struct config_view* s; 341356345Scy OUTYY(("\nP(view:)\n")); 342356345Scy s = (struct config_view*)calloc(1, sizeof(struct config_view)); 343356345Scy if(s) { 344356345Scy s->next = cfg_parser->cfg->views; 345356345Scy if(s->next && !s->next->name) 346356345Scy yyerror("view without name"); 347356345Scy cfg_parser->cfg->views = s; 348356345Scy } else 349356345Scy yyerror("out of memory"); 350356345Scy } 351356345Scy ; 352356345Scycontents_view: contents_view content_view 353356345Scy | ; 354356345Scycontent_view: view_name | view_local_zone | view_local_data | view_first | 355356345Scy view_response_ip | view_response_ip_data | view_local_data_ptr 356356345Scy ; 357356345Scyauthstart: VAR_AUTH_ZONE 358356345Scy { 359356345Scy struct config_auth* s; 360356345Scy OUTYY(("\nP(auth_zone:)\n")); 361356345Scy s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); 362356345Scy if(s) { 363356345Scy s->next = cfg_parser->cfg->auths; 364356345Scy cfg_parser->cfg->auths = s; 365356345Scy /* defaults for auth zone */ 366356345Scy s->for_downstream = 1; 367356345Scy s->for_upstream = 1; 368356345Scy s->fallback_enabled = 0; 369361435Scy s->isrpz = 0; 370356345Scy } else 371356345Scy yyerror("out of memory"); 372356345Scy } 373356345Scy ; 374356345Scycontents_auth: contents_auth content_auth 375356345Scy | ; 376356345Scycontent_auth: auth_name | auth_zonefile | auth_master | auth_url | 377356345Scy auth_for_downstream | auth_for_upstream | auth_fallback_enabled | 378356345Scy auth_allow_notify 379356345Scy ; 380361435Scy 381361435Scyrpz_tag: VAR_TAGS STRING_ARG 382361435Scy { 383361435Scy uint8_t* bitlist; 384361435Scy size_t len = 0; 385361435Scy OUTYY(("P(server_local_zone_tag:%s)\n", $2)); 386361435Scy bitlist = config_parse_taglist(cfg_parser->cfg, $2, 387361435Scy &len); 388361435Scy free($2); 389361435Scy if(!bitlist) { 390361435Scy yyerror("could not parse tags, (define-tag them first)"); 391361435Scy } 392361435Scy if(bitlist) { 393361435Scy cfg_parser->cfg->auths->rpz_taglist = bitlist; 394361435Scy cfg_parser->cfg->auths->rpz_taglistlen = len; 395361435Scy 396361435Scy } 397361435Scy } 398361435Scy ; 399361435Scy 400361435Scyrpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG 401361435Scy { 402361435Scy OUTYY(("P(rpz_action_override:%s)\n", $2)); 403361435Scy if(strcmp($2, "nxdomain")!=0 && strcmp($2, "nodata")!=0 && 404361435Scy strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && 405361435Scy strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { 406361435Scy yyerror("rpz-action-override action: expected nxdomain, " 407361435Scy "nodata, passthru, drop, cname or disabled"); 408361435Scy free($2); 409361435Scy cfg_parser->cfg->auths->rpz_action_override = NULL; 410361435Scy } 411361435Scy else { 412361435Scy cfg_parser->cfg->auths->rpz_action_override = $2; 413361435Scy } 414361435Scy } 415361435Scy ; 416361435Scy 417361435Scyrpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG 418361435Scy { 419361435Scy OUTYY(("P(rpz_cname_override:%s)\n", $2)); 420361435Scy free(cfg_parser->cfg->auths->rpz_cname); 421361435Scy cfg_parser->cfg->auths->rpz_cname = $2; 422361435Scy } 423361435Scy ; 424361435Scy 425361435Scyrpz_log: VAR_RPZ_LOG STRING_ARG 426361435Scy { 427361435Scy OUTYY(("P(rpz_log:%s)\n", $2)); 428361435Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 429361435Scy yyerror("expected yes or no."); 430361435Scy else cfg_parser->cfg->auths->rpz_log = (strcmp($2, "yes")==0); 431361435Scy free($2); 432361435Scy } 433361435Scy ; 434361435Scy 435361435Scyrpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG 436361435Scy { 437361435Scy OUTYY(("P(rpz_log_name:%s)\n", $2)); 438361435Scy free(cfg_parser->cfg->auths->rpz_log_name); 439361435Scy cfg_parser->cfg->auths->rpz_log_name = $2; 440361435Scy } 441361435Scy ; 442361435Scy 443361435Scyrpzstart: VAR_RPZ 444361435Scy { 445361435Scy struct config_auth* s; 446361435Scy OUTYY(("\nP(rpz:)\n")); 447361435Scy s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); 448361435Scy if(s) { 449361435Scy s->next = cfg_parser->cfg->auths; 450361435Scy cfg_parser->cfg->auths = s; 451361435Scy /* defaults for RPZ auth zone */ 452361435Scy s->for_downstream = 0; 453361435Scy s->for_upstream = 0; 454361435Scy s->fallback_enabled = 0; 455361435Scy s->isrpz = 1; 456361435Scy } else 457361435Scy yyerror("out of memory"); 458361435Scy } 459361435Scy ; 460361435Scycontents_rpz: contents_rpz content_rpz 461361435Scy | ; 462361435Scycontent_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | 463361435Scy auth_allow_notify | rpz_action_override | rpz_cname_override | 464361435Scy rpz_log | rpz_log_name 465361435Scy ; 466238106Sdesserver_num_threads: VAR_NUM_THREADS STRING_ARG 467238106Sdes { 468238106Sdes OUTYY(("P(server_num_threads:%s)\n", $2)); 469238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 470238106Sdes yyerror("number expected"); 471238106Sdes else cfg_parser->cfg->num_threads = atoi($2); 472238106Sdes free($2); 473238106Sdes } 474238106Sdes ; 475238106Sdesserver_verbosity: VAR_VERBOSITY STRING_ARG 476238106Sdes { 477238106Sdes OUTYY(("P(server_verbosity:%s)\n", $2)); 478238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 479238106Sdes yyerror("number expected"); 480238106Sdes else cfg_parser->cfg->verbosity = atoi($2); 481238106Sdes free($2); 482238106Sdes } 483238106Sdes ; 484238106Sdesserver_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG 485238106Sdes { 486238106Sdes OUTYY(("P(server_statistics_interval:%s)\n", $2)); 487238106Sdes if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) 488238106Sdes cfg_parser->cfg->stat_interval = 0; 489238106Sdes else if(atoi($2) == 0) 490238106Sdes yyerror("number expected"); 491238106Sdes else cfg_parser->cfg->stat_interval = atoi($2); 492238106Sdes free($2); 493238106Sdes } 494238106Sdes ; 495238106Sdesserver_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG 496238106Sdes { 497238106Sdes OUTYY(("P(server_statistics_cumulative:%s)\n", $2)); 498238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 499238106Sdes yyerror("expected yes or no."); 500238106Sdes else cfg_parser->cfg->stat_cumulative = (strcmp($2, "yes")==0); 501238106Sdes free($2); 502238106Sdes } 503238106Sdes ; 504238106Sdesserver_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG 505238106Sdes { 506238106Sdes OUTYY(("P(server_extended_statistics:%s)\n", $2)); 507238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 508238106Sdes yyerror("expected yes or no."); 509238106Sdes else cfg_parser->cfg->stat_extended = (strcmp($2, "yes")==0); 510238106Sdes free($2); 511238106Sdes } 512238106Sdes ; 513356345Scyserver_shm_enable: VAR_SHM_ENABLE STRING_ARG 514356345Scy { 515356345Scy OUTYY(("P(server_shm_enable:%s)\n", $2)); 516356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 517356345Scy yyerror("expected yes or no."); 518356345Scy else cfg_parser->cfg->shm_enable = (strcmp($2, "yes")==0); 519356345Scy free($2); 520356345Scy } 521356345Scy ; 522356345Scyserver_shm_key: VAR_SHM_KEY STRING_ARG 523356345Scy { 524356345Scy OUTYY(("P(server_shm_key:%s)\n", $2)); 525356345Scy if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) 526356345Scy cfg_parser->cfg->shm_key = 0; 527356345Scy else if(atoi($2) == 0) 528356345Scy yyerror("number expected"); 529356345Scy else cfg_parser->cfg->shm_key = atoi($2); 530356345Scy free($2); 531356345Scy } 532356345Scy ; 533238106Sdesserver_port: VAR_PORT STRING_ARG 534238106Sdes { 535238106Sdes OUTYY(("P(server_port:%s)\n", $2)); 536238106Sdes if(atoi($2) == 0) 537238106Sdes yyerror("port number expected"); 538238106Sdes else cfg_parser->cfg->port = atoi($2); 539238106Sdes free($2); 540238106Sdes } 541238106Sdes ; 542356345Scyserver_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG 543356345Scy { 544356345Scy #ifdef CLIENT_SUBNET 545356345Scy OUTYY(("P(server_send_client_subnet:%s)\n", $2)); 546356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, $2)) 547356345Scy fatal_exit("out of memory adding client-subnet"); 548356345Scy #else 549356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 550361435Scy free($2); 551356345Scy #endif 552356345Scy } 553356345Scy ; 554356345Scyserver_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG 555356345Scy { 556356345Scy #ifdef CLIENT_SUBNET 557356345Scy OUTYY(("P(server_client_subnet_zone:%s)\n", $2)); 558356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, 559356345Scy $2)) 560356345Scy fatal_exit("out of memory adding client-subnet-zone"); 561356345Scy #else 562356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 563361435Scy free($2); 564356345Scy #endif 565356345Scy } 566356345Scy ; 567356345Scyserver_client_subnet_always_forward: 568356345Scy VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG 569356345Scy { 570356345Scy #ifdef CLIENT_SUBNET 571356345Scy OUTYY(("P(server_client_subnet_always_forward:%s)\n", $2)); 572356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 573356345Scy yyerror("expected yes or no."); 574356345Scy else 575356345Scy cfg_parser->cfg->client_subnet_always_forward = 576356345Scy (strcmp($2, "yes")==0); 577356345Scy #else 578356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 579356345Scy #endif 580356345Scy free($2); 581356345Scy } 582356345Scy ; 583356345Scyserver_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG 584356345Scy { 585356345Scy #ifdef CLIENT_SUBNET 586356345Scy OUTYY(("P(client_subnet_opcode:%s)\n", $2)); 587356345Scy OUTYY(("P(Deprecated option, ignoring)\n")); 588356345Scy #else 589356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 590356345Scy #endif 591356345Scy free($2); 592356345Scy } 593356345Scy ; 594356345Scyserver_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG 595356345Scy { 596356345Scy #ifdef CLIENT_SUBNET 597356345Scy OUTYY(("P(max_client_subnet_ipv4:%s)\n", $2)); 598356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 599356345Scy yyerror("IPv4 subnet length expected"); 600356345Scy else if (atoi($2) > 32) 601356345Scy cfg_parser->cfg->max_client_subnet_ipv4 = 32; 602356345Scy else if (atoi($2) < 0) 603356345Scy cfg_parser->cfg->max_client_subnet_ipv4 = 0; 604356345Scy else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi($2); 605356345Scy #else 606356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 607356345Scy #endif 608356345Scy free($2); 609356345Scy } 610356345Scy ; 611356345Scyserver_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG 612356345Scy { 613356345Scy #ifdef CLIENT_SUBNET 614356345Scy OUTYY(("P(max_client_subnet_ipv6:%s)\n", $2)); 615356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 616356345Scy yyerror("Ipv6 subnet length expected"); 617356345Scy else if (atoi($2) > 128) 618356345Scy cfg_parser->cfg->max_client_subnet_ipv6 = 128; 619356345Scy else if (atoi($2) < 0) 620356345Scy cfg_parser->cfg->max_client_subnet_ipv6 = 0; 621356345Scy else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi($2); 622356345Scy #else 623356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 624356345Scy #endif 625356345Scy free($2); 626356345Scy } 627356345Scy ; 628356345Scyserver_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG 629356345Scy { 630356345Scy #ifdef CLIENT_SUBNET 631356345Scy OUTYY(("P(min_client_subnet_ipv4:%s)\n", $2)); 632356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 633356345Scy yyerror("IPv4 subnet length expected"); 634356345Scy else if (atoi($2) > 32) 635356345Scy cfg_parser->cfg->min_client_subnet_ipv4 = 32; 636356345Scy else if (atoi($2) < 0) 637356345Scy cfg_parser->cfg->min_client_subnet_ipv4 = 0; 638356345Scy else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi($2); 639356345Scy #else 640356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 641356345Scy #endif 642356345Scy free($2); 643356345Scy } 644356345Scy ; 645356345Scyserver_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG 646356345Scy { 647356345Scy #ifdef CLIENT_SUBNET 648356345Scy OUTYY(("P(min_client_subnet_ipv6:%s)\n", $2)); 649356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 650356345Scy yyerror("Ipv6 subnet length expected"); 651356345Scy else if (atoi($2) > 128) 652356345Scy cfg_parser->cfg->min_client_subnet_ipv6 = 128; 653356345Scy else if (atoi($2) < 0) 654356345Scy cfg_parser->cfg->min_client_subnet_ipv6 = 0; 655356345Scy else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi($2); 656356345Scy #else 657356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 658356345Scy #endif 659356345Scy free($2); 660356345Scy } 661356345Scy ; 662356345Scyserver_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG 663356345Scy { 664356345Scy #ifdef CLIENT_SUBNET 665356345Scy OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", $2)); 666356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 667356345Scy yyerror("IPv4 ECS tree size expected"); 668356345Scy else if (atoi($2) < 0) 669356345Scy cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; 670356345Scy else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi($2); 671356345Scy #else 672356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 673356345Scy #endif 674356345Scy free($2); 675356345Scy } 676356345Scy ; 677356345Scyserver_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG 678356345Scy { 679356345Scy #ifdef CLIENT_SUBNET 680356345Scy OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", $2)); 681356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 682356345Scy yyerror("IPv6 ECS tree size expected"); 683356345Scy else if (atoi($2) < 0) 684356345Scy cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; 685356345Scy else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi($2); 686356345Scy #else 687356345Scy OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 688356345Scy #endif 689356345Scy free($2); 690356345Scy } 691356345Scy ; 692238106Sdesserver_interface: VAR_INTERFACE STRING_ARG 693238106Sdes { 694238106Sdes OUTYY(("P(server_interface:%s)\n", $2)); 695238106Sdes if(cfg_parser->cfg->num_ifs == 0) 696238106Sdes cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); 697238106Sdes else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, 698238106Sdes (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); 699238106Sdes if(!cfg_parser->cfg->ifs) 700238106Sdes yyerror("out of memory"); 701238106Sdes else 702238106Sdes cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = $2; 703238106Sdes } 704238106Sdes ; 705238106Sdesserver_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG 706238106Sdes { 707238106Sdes OUTYY(("P(server_outgoing_interface:%s)\n", $2)); 708238106Sdes if(cfg_parser->cfg->num_out_ifs == 0) 709238106Sdes cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); 710238106Sdes else cfg_parser->cfg->out_ifs = realloc( 711238106Sdes cfg_parser->cfg->out_ifs, 712238106Sdes (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); 713238106Sdes if(!cfg_parser->cfg->out_ifs) 714238106Sdes yyerror("out of memory"); 715238106Sdes else 716238106Sdes cfg_parser->cfg->out_ifs[ 717238106Sdes cfg_parser->cfg->num_out_ifs++] = $2; 718238106Sdes } 719238106Sdes ; 720238106Sdesserver_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG 721238106Sdes { 722238106Sdes OUTYY(("P(server_outgoing_range:%s)\n", $2)); 723238106Sdes if(atoi($2) == 0) 724238106Sdes yyerror("number expected"); 725238106Sdes else cfg_parser->cfg->outgoing_num_ports = atoi($2); 726238106Sdes free($2); 727238106Sdes } 728238106Sdes ; 729238106Sdesserver_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG 730238106Sdes { 731238106Sdes OUTYY(("P(server_outgoing_port_permit:%s)\n", $2)); 732238106Sdes if(!cfg_mark_ports($2, 1, 733238106Sdes cfg_parser->cfg->outgoing_avail_ports, 65536)) 734238106Sdes yyerror("port number or range (\"low-high\") expected"); 735238106Sdes free($2); 736238106Sdes } 737238106Sdes ; 738238106Sdesserver_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG 739238106Sdes { 740238106Sdes OUTYY(("P(server_outgoing_port_avoid:%s)\n", $2)); 741238106Sdes if(!cfg_mark_ports($2, 0, 742238106Sdes cfg_parser->cfg->outgoing_avail_ports, 65536)) 743238106Sdes yyerror("port number or range (\"low-high\") expected"); 744238106Sdes free($2); 745238106Sdes } 746238106Sdes ; 747238106Sdesserver_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG 748238106Sdes { 749238106Sdes OUTYY(("P(server_outgoing_num_tcp:%s)\n", $2)); 750238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 751238106Sdes yyerror("number expected"); 752238106Sdes else cfg_parser->cfg->outgoing_num_tcp = atoi($2); 753238106Sdes free($2); 754238106Sdes } 755238106Sdes ; 756238106Sdesserver_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG 757238106Sdes { 758238106Sdes OUTYY(("P(server_incoming_num_tcp:%s)\n", $2)); 759238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 760238106Sdes yyerror("number expected"); 761238106Sdes else cfg_parser->cfg->incoming_num_tcp = atoi($2); 762238106Sdes free($2); 763238106Sdes } 764238106Sdes ; 765238106Sdesserver_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG 766238106Sdes { 767238106Sdes OUTYY(("P(server_interface_automatic:%s)\n", $2)); 768238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 769238106Sdes yyerror("expected yes or no."); 770238106Sdes else cfg_parser->cfg->if_automatic = (strcmp($2, "yes")==0); 771238106Sdes free($2); 772238106Sdes } 773238106Sdes ; 774238106Sdesserver_do_ip4: VAR_DO_IP4 STRING_ARG 775238106Sdes { 776238106Sdes OUTYY(("P(server_do_ip4:%s)\n", $2)); 777238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 778238106Sdes yyerror("expected yes or no."); 779238106Sdes else cfg_parser->cfg->do_ip4 = (strcmp($2, "yes")==0); 780238106Sdes free($2); 781238106Sdes } 782238106Sdes ; 783238106Sdesserver_do_ip6: VAR_DO_IP6 STRING_ARG 784238106Sdes { 785238106Sdes OUTYY(("P(server_do_ip6:%s)\n", $2)); 786238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 787238106Sdes yyerror("expected yes or no."); 788238106Sdes else cfg_parser->cfg->do_ip6 = (strcmp($2, "yes")==0); 789238106Sdes free($2); 790238106Sdes } 791238106Sdes ; 792238106Sdesserver_do_udp: VAR_DO_UDP STRING_ARG 793238106Sdes { 794238106Sdes OUTYY(("P(server_do_udp:%s)\n", $2)); 795238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 796238106Sdes yyerror("expected yes or no."); 797238106Sdes else cfg_parser->cfg->do_udp = (strcmp($2, "yes")==0); 798238106Sdes free($2); 799238106Sdes } 800238106Sdes ; 801238106Sdesserver_do_tcp: VAR_DO_TCP STRING_ARG 802238106Sdes { 803238106Sdes OUTYY(("P(server_do_tcp:%s)\n", $2)); 804238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 805238106Sdes yyerror("expected yes or no."); 806238106Sdes else cfg_parser->cfg->do_tcp = (strcmp($2, "yes")==0); 807238106Sdes free($2); 808238106Sdes } 809238106Sdes ; 810366095Scyserver_prefer_ip4: VAR_PREFER_IP4 STRING_ARG 811366095Scy { 812366095Scy OUTYY(("P(server_prefer_ip4:%s)\n", $2)); 813366095Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 814366095Scy yyerror("expected yes or no."); 815366095Scy else cfg_parser->cfg->prefer_ip4 = (strcmp($2, "yes")==0); 816366095Scy free($2); 817366095Scy } 818366095Scy ; 819307729Sdesserver_prefer_ip6: VAR_PREFER_IP6 STRING_ARG 820307729Sdes { 821307729Sdes OUTYY(("P(server_prefer_ip6:%s)\n", $2)); 822307729Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 823307729Sdes yyerror("expected yes or no."); 824307729Sdes else cfg_parser->cfg->prefer_ip6 = (strcmp($2, "yes")==0); 825307729Sdes free($2); 826307729Sdes } 827307729Sdes ; 828296415Sdesserver_tcp_mss: VAR_TCP_MSS STRING_ARG 829296415Sdes { 830296415Sdes OUTYY(("P(server_tcp_mss:%s)\n", $2)); 831296415Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 832296415Sdes yyerror("number expected"); 833296415Sdes else cfg_parser->cfg->tcp_mss = atoi($2); 834296415Sdes free($2); 835296415Sdes } 836296415Sdes ; 837296415Sdesserver_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG 838296415Sdes { 839296415Sdes OUTYY(("P(server_outgoing_tcp_mss:%s)\n", $2)); 840296415Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 841296415Sdes yyerror("number expected"); 842296415Sdes else cfg_parser->cfg->outgoing_tcp_mss = atoi($2); 843296415Sdes free($2); 844296415Sdes } 845296415Sdes ; 846356345Scyserver_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG 847356345Scy { 848356345Scy OUTYY(("P(server_tcp_idle_timeout:%s)\n", $2)); 849356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 850356345Scy yyerror("number expected"); 851356345Scy else if (atoi($2) > 120000) 852356345Scy cfg_parser->cfg->tcp_idle_timeout = 120000; 853356345Scy else if (atoi($2) < 1) 854356345Scy cfg_parser->cfg->tcp_idle_timeout = 1; 855356345Scy else cfg_parser->cfg->tcp_idle_timeout = atoi($2); 856356345Scy free($2); 857356345Scy } 858356345Scy ; 859356345Scyserver_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG 860356345Scy { 861356345Scy OUTYY(("P(server_tcp_keepalive:%s)\n", $2)); 862356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 863356345Scy yyerror("expected yes or no."); 864356345Scy else cfg_parser->cfg->do_tcp_keepalive = (strcmp($2, "yes")==0); 865356345Scy free($2); 866356345Scy } 867356345Scy ; 868356345Scyserver_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG 869356345Scy { 870356345Scy OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", $2)); 871356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 872356345Scy yyerror("number expected"); 873356345Scy else if (atoi($2) > 6553500) 874356345Scy cfg_parser->cfg->tcp_keepalive_timeout = 6553500; 875356345Scy else if (atoi($2) < 1) 876356345Scy cfg_parser->cfg->tcp_keepalive_timeout = 0; 877356345Scy else cfg_parser->cfg->tcp_keepalive_timeout = atoi($2); 878356345Scy free($2); 879356345Scy } 880356345Scy ; 881238106Sdesserver_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG 882238106Sdes { 883238106Sdes OUTYY(("P(server_tcp_upstream:%s)\n", $2)); 884238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 885238106Sdes yyerror("expected yes or no."); 886238106Sdes else cfg_parser->cfg->tcp_upstream = (strcmp($2, "yes")==0); 887238106Sdes free($2); 888238106Sdes } 889238106Sdes ; 890356345Scyserver_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG 891356345Scy { 892356345Scy OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", $2)); 893356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 894356345Scy yyerror("expected yes or no."); 895356345Scy else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp($2, "yes")==0); 896356345Scy free($2); 897356345Scy } 898356345Scy ; 899238106Sdesserver_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG 900238106Sdes { 901238106Sdes OUTYY(("P(server_ssl_upstream:%s)\n", $2)); 902238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 903238106Sdes yyerror("expected yes or no."); 904238106Sdes else cfg_parser->cfg->ssl_upstream = (strcmp($2, "yes")==0); 905238106Sdes free($2); 906238106Sdes } 907238106Sdes ; 908238106Sdesserver_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG 909238106Sdes { 910238106Sdes OUTYY(("P(server_ssl_service_key:%s)\n", $2)); 911238106Sdes free(cfg_parser->cfg->ssl_service_key); 912238106Sdes cfg_parser->cfg->ssl_service_key = $2; 913238106Sdes } 914238106Sdes ; 915238106Sdesserver_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG 916238106Sdes { 917238106Sdes OUTYY(("P(server_ssl_service_pem:%s)\n", $2)); 918238106Sdes free(cfg_parser->cfg->ssl_service_pem); 919238106Sdes cfg_parser->cfg->ssl_service_pem = $2; 920238106Sdes } 921238106Sdes ; 922238106Sdesserver_ssl_port: VAR_SSL_PORT STRING_ARG 923238106Sdes { 924238106Sdes OUTYY(("P(server_ssl_port:%s)\n", $2)); 925238106Sdes if(atoi($2) == 0) 926238106Sdes yyerror("port number expected"); 927238106Sdes else cfg_parser->cfg->ssl_port = atoi($2); 928238106Sdes free($2); 929238106Sdes } 930238106Sdes ; 931356345Scyserver_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG 932356345Scy { 933356345Scy OUTYY(("P(server_tls_cert_bundle:%s)\n", $2)); 934356345Scy free(cfg_parser->cfg->tls_cert_bundle); 935356345Scy cfg_parser->cfg->tls_cert_bundle = $2; 936356345Scy } 937356345Scy ; 938356345Scyserver_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG 939356345Scy { 940356345Scy OUTYY(("P(server_tls_win_cert:%s)\n", $2)); 941356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 942356345Scy yyerror("expected yes or no."); 943356345Scy else cfg_parser->cfg->tls_win_cert = (strcmp($2, "yes")==0); 944356345Scy free($2); 945356345Scy } 946356345Scy ; 947356345Scyserver_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG 948356345Scy { 949356345Scy OUTYY(("P(server_tls_additional_port:%s)\n", $2)); 950356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, 951356345Scy $2)) 952356345Scy yyerror("out of memory"); 953356345Scy } 954356345Scy ; 955356345Scyserver_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG 956356345Scy { 957356345Scy OUTYY(("P(server_tls_ciphers:%s)\n", $2)); 958356345Scy free(cfg_parser->cfg->tls_ciphers); 959356345Scy cfg_parser->cfg->tls_ciphers = $2; 960356345Scy } 961356345Scy ; 962356345Scyserver_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG 963356345Scy { 964356345Scy OUTYY(("P(server_tls_ciphersuites:%s)\n", $2)); 965356345Scy free(cfg_parser->cfg->tls_ciphersuites); 966356345Scy cfg_parser->cfg->tls_ciphersuites = $2; 967356345Scy } 968356345Scy ; 969356345Scyserver_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG 970356345Scy { 971356345Scy OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2)); 972356345Scy if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, 973356345Scy $2)) 974356345Scy yyerror("out of memory"); 975356345Scy } 976356345Scy ; 977366095Scyserver_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG 978366095Scy { 979366095Scy OUTYY(("P(server_tls_use_sni:%s)\n", $2)); 980366095Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 981366095Scy yyerror("expected yes or no."); 982366095Scy else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0); 983366095Scy free($2); 984366095Scy } 985366095Scy ; 986368129Scyserver_https_port: VAR_HTTPS_PORT STRING_ARG 987368129Scy { 988368129Scy OUTYY(("P(server_https_port:%s)\n", $2)); 989368129Scy if(atoi($2) == 0) 990368129Scy yyerror("port number expected"); 991368129Scy else cfg_parser->cfg->https_port = atoi($2); 992368693Scy free($2); 993368129Scy }; 994368129Scyserver_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG 995368129Scy { 996368129Scy OUTYY(("P(server_http_endpoint:%s)\n", $2)); 997368129Scy free(cfg_parser->cfg->http_endpoint); 998368129Scy if($2 && $2[0] != '/') { 999368129Scy cfg_parser->cfg->http_endpoint = malloc(strlen($2)+2); 1000368129Scy if(!cfg_parser->cfg->http_endpoint) 1001368129Scy yyerror("out of memory"); 1002368129Scy cfg_parser->cfg->http_endpoint[0] = '/'; 1003368129Scy memmove(cfg_parser->cfg->http_endpoint+1, $2, 1004368129Scy strlen($2)+1); 1005368129Scy free($2); 1006368129Scy } else { 1007368129Scy cfg_parser->cfg->http_endpoint = $2; 1008368129Scy } 1009368129Scy }; 1010368129Scyserver_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG 1011368129Scy { 1012368129Scy OUTYY(("P(server_http_max_streams:%s)\n", $2)); 1013368129Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 1014368129Scy yyerror("number expected"); 1015368129Scy else cfg_parser->cfg->http_max_streams = atoi($2); 1016368129Scy free($2); 1017368129Scy }; 1018368129Scyserver_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG 1019368129Scy { 1020368129Scy OUTYY(("P(server_http_query_buffer_size:%s)\n", $2)); 1021368129Scy if(!cfg_parse_memsize($2, 1022368129Scy &cfg_parser->cfg->http_query_buffer_size)) 1023368129Scy yyerror("memory size expected"); 1024368129Scy free($2); 1025368129Scy }; 1026368129Scyserver_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG 1027368129Scy { 1028368129Scy OUTYY(("P(server_http_response_buffer_size:%s)\n", $2)); 1029368129Scy if(!cfg_parse_memsize($2, 1030368129Scy &cfg_parser->cfg->http_response_buffer_size)) 1031368129Scy yyerror("memory size expected"); 1032368129Scy free($2); 1033368129Scy }; 1034368129Scyserver_http_nodelay: VAR_HTTP_NODELAY STRING_ARG 1035368129Scy { 1036368129Scy OUTYY(("P(server_http_nodelay:%s)\n", $2)); 1037368129Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1038368129Scy yyerror("expected yes or no."); 1039368129Scy else cfg_parser->cfg->http_nodelay = (strcmp($2, "yes")==0); 1040368129Scy free($2); 1041368693Scy } 1042368693Scyserver_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG 1043368693Scy { 1044368693Scy OUTYY(("P(server_http_notls_downstream:%s)\n", $2)); 1045368693Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1046368693Scy yyerror("expected yes or no."); 1047368693Scy else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0); 1048368693Scy free($2); 1049368129Scy }; 1050356345Scyserver_use_systemd: VAR_USE_SYSTEMD STRING_ARG 1051356345Scy { 1052356345Scy OUTYY(("P(server_use_systemd:%s)\n", $2)); 1053356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1054356345Scy yyerror("expected yes or no."); 1055356345Scy else cfg_parser->cfg->use_systemd = (strcmp($2, "yes")==0); 1056356345Scy free($2); 1057356345Scy } 1058356345Scy ; 1059238106Sdesserver_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG 1060238106Sdes { 1061238106Sdes OUTYY(("P(server_do_daemonize:%s)\n", $2)); 1062238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1063238106Sdes yyerror("expected yes or no."); 1064238106Sdes else cfg_parser->cfg->do_daemonize = (strcmp($2, "yes")==0); 1065238106Sdes free($2); 1066238106Sdes } 1067238106Sdes ; 1068238106Sdesserver_use_syslog: VAR_USE_SYSLOG STRING_ARG 1069238106Sdes { 1070238106Sdes OUTYY(("P(server_use_syslog:%s)\n", $2)); 1071238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1072238106Sdes yyerror("expected yes or no."); 1073238106Sdes else cfg_parser->cfg->use_syslog = (strcmp($2, "yes")==0); 1074238106Sdes#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) 1075238106Sdes if(strcmp($2, "yes") == 0) 1076238106Sdes yyerror("no syslog services are available. " 1077238106Sdes "(reconfigure and compile to add)"); 1078238106Sdes#endif 1079238106Sdes free($2); 1080238106Sdes } 1081238106Sdes ; 1082238106Sdesserver_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG 1083238106Sdes { 1084238106Sdes OUTYY(("P(server_log_time_ascii:%s)\n", $2)); 1085238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1086238106Sdes yyerror("expected yes or no."); 1087238106Sdes else cfg_parser->cfg->log_time_ascii = (strcmp($2, "yes")==0); 1088238106Sdes free($2); 1089238106Sdes } 1090238106Sdes ; 1091238106Sdesserver_log_queries: VAR_LOG_QUERIES STRING_ARG 1092238106Sdes { 1093238106Sdes OUTYY(("P(server_log_queries:%s)\n", $2)); 1094238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1095238106Sdes yyerror("expected yes or no."); 1096238106Sdes else cfg_parser->cfg->log_queries = (strcmp($2, "yes")==0); 1097238106Sdes free($2); 1098238106Sdes } 1099238106Sdes ; 1100356345Scyserver_log_replies: VAR_LOG_REPLIES STRING_ARG 1101356345Scy { 1102356345Scy OUTYY(("P(server_log_replies:%s)\n", $2)); 1103356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1104356345Scy yyerror("expected yes or no."); 1105356345Scy else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0); 1106356345Scy free($2); 1107356345Scy } 1108356345Scy ; 1109356345Scyserver_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG 1110356345Scy { 1111356345Scy OUTYY(("P(server_log_tag_queryreply:%s)\n", $2)); 1112356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1113356345Scy yyerror("expected yes or no."); 1114356345Scy else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0); 1115356345Scy free($2); 1116356345Scy } 1117356345Scy ; 1118356345Scyserver_log_servfail: VAR_LOG_SERVFAIL STRING_ARG 1119356345Scy { 1120356345Scy OUTYY(("P(server_log_servfail:%s)\n", $2)); 1121356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1122356345Scy yyerror("expected yes or no."); 1123356345Scy else cfg_parser->cfg->log_servfail = (strcmp($2, "yes")==0); 1124356345Scy free($2); 1125356345Scy } 1126356345Scy ; 1127356345Scyserver_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG 1128356345Scy { 1129356345Scy OUTYY(("P(server_log_local_actions:%s)\n", $2)); 1130356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1131356345Scy yyerror("expected yes or no."); 1132356345Scy else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0); 1133356345Scy free($2); 1134356345Scy } 1135356345Scy ; 1136238106Sdesserver_chroot: VAR_CHROOT STRING_ARG 1137238106Sdes { 1138238106Sdes OUTYY(("P(server_chroot:%s)\n", $2)); 1139238106Sdes free(cfg_parser->cfg->chrootdir); 1140238106Sdes cfg_parser->cfg->chrootdir = $2; 1141238106Sdes } 1142238106Sdes ; 1143238106Sdesserver_username: VAR_USERNAME STRING_ARG 1144238106Sdes { 1145238106Sdes OUTYY(("P(server_username:%s)\n", $2)); 1146238106Sdes free(cfg_parser->cfg->username); 1147238106Sdes cfg_parser->cfg->username = $2; 1148238106Sdes } 1149238106Sdes ; 1150238106Sdesserver_directory: VAR_DIRECTORY STRING_ARG 1151238106Sdes { 1152238106Sdes OUTYY(("P(server_directory:%s)\n", $2)); 1153238106Sdes free(cfg_parser->cfg->directory); 1154238106Sdes cfg_parser->cfg->directory = $2; 1155307729Sdes /* change there right away for includes relative to this */ 1156307729Sdes if($2[0]) { 1157307729Sdes char* d; 1158307729Sdes#ifdef UB_ON_WINDOWS 1159307729Sdes w_config_adjust_directory(cfg_parser->cfg); 1160307729Sdes#endif 1161307729Sdes d = cfg_parser->cfg->directory; 1162307729Sdes /* adjust directory if we have already chroot, 1163307729Sdes * like, we reread after sighup */ 1164307729Sdes if(cfg_parser->chroot && cfg_parser->chroot[0] && 1165307729Sdes strncmp(d, cfg_parser->chroot, strlen( 1166307729Sdes cfg_parser->chroot)) == 0) 1167307729Sdes d += strlen(cfg_parser->chroot); 1168356345Scy if(d[0]) { 1169356345Scy if(chdir(d)) 1170307729Sdes log_err("cannot chdir to directory: %s (%s)", 1171307729Sdes d, strerror(errno)); 1172356345Scy } 1173307729Sdes } 1174238106Sdes } 1175238106Sdes ; 1176238106Sdesserver_logfile: VAR_LOGFILE STRING_ARG 1177238106Sdes { 1178238106Sdes OUTYY(("P(server_logfile:%s)\n", $2)); 1179238106Sdes free(cfg_parser->cfg->logfile); 1180238106Sdes cfg_parser->cfg->logfile = $2; 1181238106Sdes cfg_parser->cfg->use_syslog = 0; 1182238106Sdes } 1183238106Sdes ; 1184238106Sdesserver_pidfile: VAR_PIDFILE STRING_ARG 1185238106Sdes { 1186238106Sdes OUTYY(("P(server_pidfile:%s)\n", $2)); 1187238106Sdes free(cfg_parser->cfg->pidfile); 1188238106Sdes cfg_parser->cfg->pidfile = $2; 1189238106Sdes } 1190238106Sdes ; 1191238106Sdesserver_root_hints: VAR_ROOT_HINTS STRING_ARG 1192238106Sdes { 1193238106Sdes OUTYY(("P(server_root_hints:%s)\n", $2)); 1194238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, $2)) 1195238106Sdes yyerror("out of memory"); 1196238106Sdes } 1197238106Sdes ; 1198238106Sdesserver_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG 1199238106Sdes { 1200238106Sdes OUTYY(("P(server_dlv_anchor_file:%s)\n", $2)); 1201368129Scy log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); 1202368129Scy free($2); 1203238106Sdes } 1204238106Sdes ; 1205238106Sdesserver_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG 1206238106Sdes { 1207238106Sdes OUTYY(("P(server_dlv_anchor:%s)\n", $2)); 1208368129Scy log_warn("option dlv-anchor ignored: DLV is decommissioned"); 1209368129Scy free($2); 1210238106Sdes } 1211238106Sdes ; 1212238106Sdesserver_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG 1213238106Sdes { 1214238106Sdes OUTYY(("P(server_auto_trust_anchor_file:%s)\n", $2)); 1215238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 1216238106Sdes auto_trust_anchor_file_list, $2)) 1217238106Sdes yyerror("out of memory"); 1218238106Sdes } 1219238106Sdes ; 1220238106Sdesserver_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG 1221238106Sdes { 1222238106Sdes OUTYY(("P(server_trust_anchor_file:%s)\n", $2)); 1223238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 1224238106Sdes trust_anchor_file_list, $2)) 1225238106Sdes yyerror("out of memory"); 1226238106Sdes } 1227238106Sdes ; 1228238106Sdesserver_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG 1229238106Sdes { 1230238106Sdes OUTYY(("P(server_trusted_keys_file:%s)\n", $2)); 1231238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 1232238106Sdes trusted_keys_file_list, $2)) 1233238106Sdes yyerror("out of memory"); 1234238106Sdes } 1235238106Sdes ; 1236238106Sdesserver_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG 1237238106Sdes { 1238238106Sdes OUTYY(("P(server_trust_anchor:%s)\n", $2)); 1239238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, $2)) 1240238106Sdes yyerror("out of memory"); 1241238106Sdes } 1242238106Sdes ; 1243356345Scyserver_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG 1244356345Scy { 1245356345Scy OUTYY(("P(server_trust_anchor_signaling:%s)\n", $2)); 1246356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1247356345Scy yyerror("expected yes or no."); 1248356345Scy else 1249356345Scy cfg_parser->cfg->trust_anchor_signaling = 1250356345Scy (strcmp($2, "yes")==0); 1251356345Scy free($2); 1252356345Scy } 1253356345Scy ; 1254356345Scyserver_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG 1255356345Scy { 1256356345Scy OUTYY(("P(server_root_key_sentinel:%s)\n", $2)); 1257356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1258356345Scy yyerror("expected yes or no."); 1259356345Scy else 1260356345Scy cfg_parser->cfg->root_key_sentinel = 1261356345Scy (strcmp($2, "yes")==0); 1262356345Scy free($2); 1263356345Scy } 1264356345Scy ; 1265238106Sdesserver_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG 1266238106Sdes { 1267238106Sdes OUTYY(("P(server_domain_insecure:%s)\n", $2)); 1268238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, $2)) 1269238106Sdes yyerror("out of memory"); 1270238106Sdes } 1271238106Sdes ; 1272238106Sdesserver_hide_identity: VAR_HIDE_IDENTITY STRING_ARG 1273238106Sdes { 1274238106Sdes OUTYY(("P(server_hide_identity:%s)\n", $2)); 1275238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1276238106Sdes yyerror("expected yes or no."); 1277238106Sdes else cfg_parser->cfg->hide_identity = (strcmp($2, "yes")==0); 1278238106Sdes free($2); 1279238106Sdes } 1280238106Sdes ; 1281238106Sdesserver_hide_version: VAR_HIDE_VERSION STRING_ARG 1282238106Sdes { 1283238106Sdes OUTYY(("P(server_hide_version:%s)\n", $2)); 1284238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1285238106Sdes yyerror("expected yes or no."); 1286238106Sdes else cfg_parser->cfg->hide_version = (strcmp($2, "yes")==0); 1287238106Sdes free($2); 1288238106Sdes } 1289238106Sdes ; 1290356345Scyserver_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG 1291356345Scy { 1292356345Scy OUTYY(("P(server_hide_trustanchor:%s)\n", $2)); 1293356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1294356345Scy yyerror("expected yes or no."); 1295356345Scy else cfg_parser->cfg->hide_trustanchor = (strcmp($2, "yes")==0); 1296356345Scy free($2); 1297356345Scy } 1298356345Scy ; 1299238106Sdesserver_identity: VAR_IDENTITY STRING_ARG 1300238106Sdes { 1301238106Sdes OUTYY(("P(server_identity:%s)\n", $2)); 1302238106Sdes free(cfg_parser->cfg->identity); 1303238106Sdes cfg_parser->cfg->identity = $2; 1304238106Sdes } 1305238106Sdes ; 1306238106Sdesserver_version: VAR_VERSION STRING_ARG 1307238106Sdes { 1308238106Sdes OUTYY(("P(server_version:%s)\n", $2)); 1309238106Sdes free(cfg_parser->cfg->version); 1310238106Sdes cfg_parser->cfg->version = $2; 1311238106Sdes } 1312238106Sdes ; 1313369939Sgit2svnserver_nsid: VAR_NSID STRING_ARG 1314369939Sgit2svn { 1315369939Sgit2svn OUTYY(("P(server_nsid:%s)\n", $2)); 1316369939Sgit2svn free(cfg_parser->cfg->nsid_cfg_str); 1317369939Sgit2svn cfg_parser->cfg->nsid_cfg_str = $2; 1318369939Sgit2svn free(cfg_parser->cfg->nsid); 1319369939Sgit2svn cfg_parser->cfg->nsid = NULL; 1320369939Sgit2svn cfg_parser->cfg->nsid_len = 0; 1321369939Sgit2svn if (*$2 == 0) 1322369939Sgit2svn ; /* pass; empty string is not setting nsid */ 1323369939Sgit2svn else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( 1324369939Sgit2svn $2, &cfg_parser->cfg->nsid_len))) 1325369939Sgit2svn yyerror("the NSID must be either a hex string or an " 1326369939Sgit2svn "ascii character string prepended with ascii_."); 1327369939Sgit2svn } 1328369939Sgit2svn ; 1329238106Sdesserver_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG 1330238106Sdes { 1331238106Sdes OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); 1332238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_rcvbuf)) 1333238106Sdes yyerror("buffer size expected"); 1334238106Sdes free($2); 1335238106Sdes } 1336238106Sdes ; 1337238106Sdesserver_so_sndbuf: VAR_SO_SNDBUF STRING_ARG 1338238106Sdes { 1339238106Sdes OUTYY(("P(server_so_sndbuf:%s)\n", $2)); 1340238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_sndbuf)) 1341238106Sdes yyerror("buffer size expected"); 1342238106Sdes free($2); 1343238106Sdes } 1344238106Sdes ; 1345266114Sdesserver_so_reuseport: VAR_SO_REUSEPORT STRING_ARG 1346266114Sdes { 1347266114Sdes OUTYY(("P(server_so_reuseport:%s)\n", $2)); 1348266114Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1349266114Sdes yyerror("expected yes or no."); 1350266114Sdes else cfg_parser->cfg->so_reuseport = 1351266114Sdes (strcmp($2, "yes")==0); 1352266114Sdes free($2); 1353266114Sdes } 1354266114Sdes ; 1355287917Sdesserver_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG 1356287917Sdes { 1357287917Sdes OUTYY(("P(server_ip_transparent:%s)\n", $2)); 1358287917Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1359287917Sdes yyerror("expected yes or no."); 1360287917Sdes else cfg_parser->cfg->ip_transparent = 1361287917Sdes (strcmp($2, "yes")==0); 1362287917Sdes free($2); 1363287917Sdes } 1364287917Sdes ; 1365307729Sdesserver_ip_freebind: VAR_IP_FREEBIND STRING_ARG 1366307729Sdes { 1367307729Sdes OUTYY(("P(server_ip_freebind:%s)\n", $2)); 1368307729Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1369307729Sdes yyerror("expected yes or no."); 1370307729Sdes else cfg_parser->cfg->ip_freebind = 1371307729Sdes (strcmp($2, "yes")==0); 1372307729Sdes free($2); 1373307729Sdes } 1374307729Sdes ; 1375366095Scyserver_ip_dscp: VAR_IP_DSCP STRING_ARG 1376366095Scy { 1377366095Scy OUTYY(("P(server_ip_dscp:%s)\n", $2)); 1378366095Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 1379366095Scy yyerror("number expected"); 1380366095Scy else if (atoi($2) > 63) 1381366095Scy yyerror("value too large (max 63)"); 1382366095Scy else if (atoi($2) < 0) 1383366095Scy yyerror("value too small (min 0)"); 1384366095Scy else 1385366095Scy cfg_parser->cfg->ip_dscp = atoi($2); 1386366095Scy free($2); 1387366095Scy } 1388366095Scy ; 1389356345Scyserver_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG 1390356345Scy { 1391356345Scy OUTYY(("P(server_stream_wait_size:%s)\n", $2)); 1392356345Scy if(!cfg_parse_memsize($2, &cfg_parser->cfg->stream_wait_size)) 1393356345Scy yyerror("memory size expected"); 1394356345Scy free($2); 1395356345Scy } 1396356345Scy ; 1397238106Sdesserver_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG 1398238106Sdes { 1399238106Sdes OUTYY(("P(server_edns_buffer_size:%s)\n", $2)); 1400238106Sdes if(atoi($2) == 0) 1401238106Sdes yyerror("number expected"); 1402238106Sdes else if (atoi($2) < 12) 1403238106Sdes yyerror("edns buffer size too small"); 1404238106Sdes else if (atoi($2) > 65535) 1405238106Sdes cfg_parser->cfg->edns_buffer_size = 65535; 1406238106Sdes else cfg_parser->cfg->edns_buffer_size = atoi($2); 1407238106Sdes free($2); 1408238106Sdes } 1409238106Sdes ; 1410238106Sdesserver_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG 1411238106Sdes { 1412238106Sdes OUTYY(("P(server_msg_buffer_size:%s)\n", $2)); 1413238106Sdes if(atoi($2) == 0) 1414238106Sdes yyerror("number expected"); 1415238106Sdes else if (atoi($2) < 4096) 1416238106Sdes yyerror("message buffer size too small (use 4096)"); 1417238106Sdes else cfg_parser->cfg->msg_buffer_size = atoi($2); 1418238106Sdes free($2); 1419238106Sdes } 1420238106Sdes ; 1421238106Sdesserver_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG 1422238106Sdes { 1423238106Sdes OUTYY(("P(server_msg_cache_size:%s)\n", $2)); 1424238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size)) 1425238106Sdes yyerror("memory size expected"); 1426238106Sdes free($2); 1427238106Sdes } 1428238106Sdes ; 1429238106Sdesserver_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG 1430238106Sdes { 1431238106Sdes OUTYY(("P(server_msg_cache_slabs:%s)\n", $2)); 1432238106Sdes if(atoi($2) == 0) 1433238106Sdes yyerror("number expected"); 1434238106Sdes else { 1435238106Sdes cfg_parser->cfg->msg_cache_slabs = atoi($2); 1436238106Sdes if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) 1437238106Sdes yyerror("must be a power of 2"); 1438238106Sdes } 1439238106Sdes free($2); 1440238106Sdes } 1441238106Sdes ; 1442238106Sdesserver_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG 1443238106Sdes { 1444238106Sdes OUTYY(("P(server_num_queries_per_thread:%s)\n", $2)); 1445238106Sdes if(atoi($2) == 0) 1446238106Sdes yyerror("number expected"); 1447238106Sdes else cfg_parser->cfg->num_queries_per_thread = atoi($2); 1448238106Sdes free($2); 1449238106Sdes } 1450238106Sdes ; 1451238106Sdesserver_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG 1452238106Sdes { 1453238106Sdes OUTYY(("P(server_jostle_timeout:%s)\n", $2)); 1454238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1455238106Sdes yyerror("number expected"); 1456238106Sdes else cfg_parser->cfg->jostle_time = atoi($2); 1457238106Sdes free($2); 1458238106Sdes } 1459238106Sdes ; 1460266114Sdesserver_delay_close: VAR_DELAY_CLOSE STRING_ARG 1461266114Sdes { 1462266114Sdes OUTYY(("P(server_delay_close:%s)\n", $2)); 1463266114Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1464266114Sdes yyerror("number expected"); 1465266114Sdes else cfg_parser->cfg->delay_close = atoi($2); 1466266114Sdes free($2); 1467266114Sdes } 1468266114Sdes ; 1469368693Scyserver_udp_connect: VAR_UDP_CONNECT STRING_ARG 1470368693Scy { 1471368693Scy OUTYY(("P(server_udp_connect:%s)\n", $2)); 1472368693Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1473368693Scy yyerror("expected yes or no."); 1474368693Scy else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0); 1475368693Scy free($2); 1476368693Scy } 1477368693Scy ; 1478268839Sdesserver_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG 1479268839Sdes { 1480268839Sdes OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); 1481268839Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1482268839Sdes yyerror("expected yes or no."); 1483268839Sdes else cfg_parser->cfg->unblock_lan_zones = 1484268839Sdes (strcmp($2, "yes")==0); 1485268839Sdes free($2); 1486268839Sdes } 1487268839Sdes ; 1488295535Sdesserver_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG 1489295535Sdes { 1490295535Sdes OUTYY(("P(server_insecure_lan_zones:%s)\n", $2)); 1491295535Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1492295535Sdes yyerror("expected yes or no."); 1493295535Sdes else cfg_parser->cfg->insecure_lan_zones = 1494295535Sdes (strcmp($2, "yes")==0); 1495295535Sdes free($2); 1496295535Sdes } 1497295535Sdes ; 1498238106Sdesserver_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG 1499238106Sdes { 1500238106Sdes OUTYY(("P(server_rrset_cache_size:%s)\n", $2)); 1501238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size)) 1502238106Sdes yyerror("memory size expected"); 1503238106Sdes free($2); 1504238106Sdes } 1505238106Sdes ; 1506238106Sdesserver_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG 1507238106Sdes { 1508238106Sdes OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2)); 1509238106Sdes if(atoi($2) == 0) 1510238106Sdes yyerror("number expected"); 1511238106Sdes else { 1512238106Sdes cfg_parser->cfg->rrset_cache_slabs = atoi($2); 1513238106Sdes if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) 1514238106Sdes yyerror("must be a power of 2"); 1515238106Sdes } 1516238106Sdes free($2); 1517238106Sdes } 1518238106Sdes ; 1519238106Sdesserver_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG 1520238106Sdes { 1521238106Sdes OUTYY(("P(server_infra_host_ttl:%s)\n", $2)); 1522238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1523238106Sdes yyerror("number expected"); 1524238106Sdes else cfg_parser->cfg->host_ttl = atoi($2); 1525238106Sdes free($2); 1526238106Sdes } 1527238106Sdes ; 1528238106Sdesserver_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG 1529238106Sdes { 1530238106Sdes OUTYY(("P(server_infra_lame_ttl:%s)\n", $2)); 1531238106Sdes verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " 1532238106Sdes "removed, use infra-host-ttl)", $2); 1533238106Sdes free($2); 1534238106Sdes } 1535238106Sdes ; 1536238106Sdesserver_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG 1537238106Sdes { 1538238106Sdes OUTYY(("P(server_infra_cache_numhosts:%s)\n", $2)); 1539238106Sdes if(atoi($2) == 0) 1540238106Sdes yyerror("number expected"); 1541238106Sdes else cfg_parser->cfg->infra_cache_numhosts = atoi($2); 1542238106Sdes free($2); 1543238106Sdes } 1544238106Sdes ; 1545238106Sdesserver_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG 1546238106Sdes { 1547238106Sdes OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2)); 1548238106Sdes verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " 1549238106Sdes "(option removed, use infra-cache-numhosts)", $2); 1550238106Sdes free($2); 1551238106Sdes } 1552238106Sdes ; 1553238106Sdesserver_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG 1554238106Sdes { 1555238106Sdes OUTYY(("P(server_infra_cache_slabs:%s)\n", $2)); 1556238106Sdes if(atoi($2) == 0) 1557238106Sdes yyerror("number expected"); 1558238106Sdes else { 1559238106Sdes cfg_parser->cfg->infra_cache_slabs = atoi($2); 1560238106Sdes if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) 1561238106Sdes yyerror("must be a power of 2"); 1562238106Sdes } 1563238106Sdes free($2); 1564238106Sdes } 1565238106Sdes ; 1566282089Sdesserver_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG 1567282089Sdes { 1568282089Sdes OUTYY(("P(server_infra_cache_min_rtt:%s)\n", $2)); 1569282089Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1570282089Sdes yyerror("number expected"); 1571282089Sdes else cfg_parser->cfg->infra_cache_min_rtt = atoi($2); 1572282089Sdes free($2); 1573282089Sdes } 1574282089Sdes ; 1575368693Scyserver_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG 1576368693Scy { 1577368693Scy OUTYY(("P(server_infra_keep_probing:%s)\n", $2)); 1578368693Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1579368693Scy yyerror("expected yes or no."); 1580368693Scy else cfg_parser->cfg->infra_keep_probing = 1581368693Scy (strcmp($2, "yes")==0); 1582368693Scy free($2); 1583368693Scy } 1584368693Scy ; 1585238106Sdesserver_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG 1586238106Sdes { 1587238106Sdes OUTYY(("P(server_target_fetch_policy:%s)\n", $2)); 1588238106Sdes free(cfg_parser->cfg->target_fetch_policy); 1589238106Sdes cfg_parser->cfg->target_fetch_policy = $2; 1590238106Sdes } 1591238106Sdes ; 1592238106Sdesserver_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG 1593238106Sdes { 1594238106Sdes OUTYY(("P(server_harden_short_bufsize:%s)\n", $2)); 1595238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1596238106Sdes yyerror("expected yes or no."); 1597238106Sdes else cfg_parser->cfg->harden_short_bufsize = 1598238106Sdes (strcmp($2, "yes")==0); 1599238106Sdes free($2); 1600238106Sdes } 1601238106Sdes ; 1602238106Sdesserver_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG 1603238106Sdes { 1604238106Sdes OUTYY(("P(server_harden_large_queries:%s)\n", $2)); 1605238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1606238106Sdes yyerror("expected yes or no."); 1607238106Sdes else cfg_parser->cfg->harden_large_queries = 1608238106Sdes (strcmp($2, "yes")==0); 1609238106Sdes free($2); 1610238106Sdes } 1611238106Sdes ; 1612238106Sdesserver_harden_glue: VAR_HARDEN_GLUE STRING_ARG 1613238106Sdes { 1614238106Sdes OUTYY(("P(server_harden_glue:%s)\n", $2)); 1615238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1616238106Sdes yyerror("expected yes or no."); 1617238106Sdes else cfg_parser->cfg->harden_glue = 1618238106Sdes (strcmp($2, "yes")==0); 1619238106Sdes free($2); 1620238106Sdes } 1621238106Sdes ; 1622238106Sdesserver_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG 1623238106Sdes { 1624238106Sdes OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2)); 1625238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1626238106Sdes yyerror("expected yes or no."); 1627238106Sdes else cfg_parser->cfg->harden_dnssec_stripped = 1628238106Sdes (strcmp($2, "yes")==0); 1629238106Sdes free($2); 1630238106Sdes } 1631238106Sdes ; 1632238106Sdesserver_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG 1633238106Sdes { 1634238106Sdes OUTYY(("P(server_harden_below_nxdomain:%s)\n", $2)); 1635238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1636238106Sdes yyerror("expected yes or no."); 1637238106Sdes else cfg_parser->cfg->harden_below_nxdomain = 1638238106Sdes (strcmp($2, "yes")==0); 1639238106Sdes free($2); 1640238106Sdes } 1641238106Sdes ; 1642238106Sdesserver_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG 1643238106Sdes { 1644238106Sdes OUTYY(("P(server_harden_referral_path:%s)\n", $2)); 1645238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1646238106Sdes yyerror("expected yes or no."); 1647238106Sdes else cfg_parser->cfg->harden_referral_path = 1648238106Sdes (strcmp($2, "yes")==0); 1649238106Sdes free($2); 1650238106Sdes } 1651238106Sdes ; 1652287917Sdesserver_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG 1653287917Sdes { 1654287917Sdes OUTYY(("P(server_harden_algo_downgrade:%s)\n", $2)); 1655287917Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1656287917Sdes yyerror("expected yes or no."); 1657287917Sdes else cfg_parser->cfg->harden_algo_downgrade = 1658287917Sdes (strcmp($2, "yes")==0); 1659287917Sdes free($2); 1660287917Sdes } 1661287917Sdes ; 1662238106Sdesserver_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG 1663238106Sdes { 1664238106Sdes OUTYY(("P(server_use_caps_for_id:%s)\n", $2)); 1665238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1666238106Sdes yyerror("expected yes or no."); 1667238106Sdes else cfg_parser->cfg->use_caps_bits_for_id = 1668238106Sdes (strcmp($2, "yes")==0); 1669238106Sdes free($2); 1670238106Sdes } 1671238106Sdes ; 1672287917Sdesserver_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG 1673287917Sdes { 1674287917Sdes OUTYY(("P(server_caps_whitelist:%s)\n", $2)); 1675287917Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, $2)) 1676287917Sdes yyerror("out of memory"); 1677287917Sdes } 1678287917Sdes ; 1679238106Sdesserver_private_address: VAR_PRIVATE_ADDRESS STRING_ARG 1680238106Sdes { 1681238106Sdes OUTYY(("P(server_private_address:%s)\n", $2)); 1682238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, $2)) 1683238106Sdes yyerror("out of memory"); 1684238106Sdes } 1685238106Sdes ; 1686238106Sdesserver_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG 1687238106Sdes { 1688238106Sdes OUTYY(("P(server_private_domain:%s)\n", $2)); 1689238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, $2)) 1690238106Sdes yyerror("out of memory"); 1691238106Sdes } 1692238106Sdes ; 1693238106Sdesserver_prefetch: VAR_PREFETCH STRING_ARG 1694238106Sdes { 1695238106Sdes OUTYY(("P(server_prefetch:%s)\n", $2)); 1696238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1697238106Sdes yyerror("expected yes or no."); 1698238106Sdes else cfg_parser->cfg->prefetch = (strcmp($2, "yes")==0); 1699238106Sdes free($2); 1700238106Sdes } 1701238106Sdes ; 1702238106Sdesserver_prefetch_key: VAR_PREFETCH_KEY STRING_ARG 1703238106Sdes { 1704238106Sdes OUTYY(("P(server_prefetch_key:%s)\n", $2)); 1705238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1706238106Sdes yyerror("expected yes or no."); 1707238106Sdes else cfg_parser->cfg->prefetch_key = (strcmp($2, "yes")==0); 1708238106Sdes free($2); 1709238106Sdes } 1710238106Sdes ; 1711356345Scyserver_deny_any: VAR_DENY_ANY STRING_ARG 1712356345Scy { 1713356345Scy OUTYY(("P(server_deny_any:%s)\n", $2)); 1714356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1715356345Scy yyerror("expected yes or no."); 1716356345Scy else cfg_parser->cfg->deny_any = (strcmp($2, "yes")==0); 1717356345Scy free($2); 1718356345Scy } 1719356345Scy ; 1720238106Sdesserver_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG 1721238106Sdes { 1722238106Sdes OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2)); 1723238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1724238106Sdes yyerror("number expected"); 1725238106Sdes else cfg_parser->cfg->unwanted_threshold = atoi($2); 1726238106Sdes free($2); 1727238106Sdes } 1728238106Sdes ; 1729238106Sdesserver_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG 1730238106Sdes { 1731238106Sdes OUTYY(("P(server_do_not_query_address:%s)\n", $2)); 1732238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, $2)) 1733238106Sdes yyerror("out of memory"); 1734238106Sdes } 1735238106Sdes ; 1736238106Sdesserver_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG 1737238106Sdes { 1738238106Sdes OUTYY(("P(server_do_not_query_localhost:%s)\n", $2)); 1739238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1740238106Sdes yyerror("expected yes or no."); 1741238106Sdes else cfg_parser->cfg->donotquery_localhost = 1742238106Sdes (strcmp($2, "yes")==0); 1743238106Sdes free($2); 1744238106Sdes } 1745238106Sdes ; 1746238106Sdesserver_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG 1747238106Sdes { 1748238106Sdes OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); 1749238106Sdes if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && 1750266114Sdes strcmp($3, "deny_non_local")!=0 && 1751266114Sdes strcmp($3, "refuse_non_local")!=0 && 1752356345Scy strcmp($3, "allow_setrd")!=0 && 1753238106Sdes strcmp($3, "allow")!=0 && 1754238106Sdes strcmp($3, "allow_snoop")!=0) { 1755266114Sdes yyerror("expected deny, refuse, deny_non_local, " 1756356345Scy "refuse_non_local, allow, allow_setrd or " 1757356345Scy "allow_snoop in access control action"); 1758356345Scy free($2); 1759356345Scy free($3); 1760238106Sdes } else { 1761238106Sdes if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) 1762238106Sdes fatal_exit("out of memory adding acl"); 1763238106Sdes } 1764238106Sdes } 1765238106Sdes ; 1766238106Sdesserver_module_conf: VAR_MODULE_CONF STRING_ARG 1767238106Sdes { 1768238106Sdes OUTYY(("P(server_module_conf:%s)\n", $2)); 1769238106Sdes free(cfg_parser->cfg->module_conf); 1770238106Sdes cfg_parser->cfg->module_conf = $2; 1771238106Sdes } 1772238106Sdes ; 1773238106Sdesserver_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG 1774238106Sdes { 1775238106Sdes OUTYY(("P(server_val_override_date:%s)\n", $2)); 1776296415Sdes if(*$2 == '\0' || strcmp($2, "0") == 0) { 1777238106Sdes cfg_parser->cfg->val_date_override = 0; 1778238106Sdes } else if(strlen($2) == 14) { 1779238106Sdes cfg_parser->cfg->val_date_override = 1780238106Sdes cfg_convert_timeval($2); 1781238106Sdes if(!cfg_parser->cfg->val_date_override) 1782238106Sdes yyerror("bad date/time specification"); 1783238106Sdes } else { 1784238106Sdes if(atoi($2) == 0) 1785238106Sdes yyerror("number expected"); 1786238106Sdes cfg_parser->cfg->val_date_override = atoi($2); 1787238106Sdes } 1788238106Sdes free($2); 1789238106Sdes } 1790238106Sdes ; 1791238106Sdesserver_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG 1792238106Sdes { 1793238106Sdes OUTYY(("P(server_val_sig_skew_min:%s)\n", $2)); 1794296415Sdes if(*$2 == '\0' || strcmp($2, "0") == 0) { 1795238106Sdes cfg_parser->cfg->val_sig_skew_min = 0; 1796238106Sdes } else { 1797238106Sdes cfg_parser->cfg->val_sig_skew_min = atoi($2); 1798238106Sdes if(!cfg_parser->cfg->val_sig_skew_min) 1799238106Sdes yyerror("number expected"); 1800238106Sdes } 1801238106Sdes free($2); 1802238106Sdes } 1803238106Sdes ; 1804238106Sdesserver_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG 1805238106Sdes { 1806238106Sdes OUTYY(("P(server_val_sig_skew_max:%s)\n", $2)); 1807296415Sdes if(*$2 == '\0' || strcmp($2, "0") == 0) { 1808238106Sdes cfg_parser->cfg->val_sig_skew_max = 0; 1809238106Sdes } else { 1810238106Sdes cfg_parser->cfg->val_sig_skew_max = atoi($2); 1811238106Sdes if(!cfg_parser->cfg->val_sig_skew_max) 1812238106Sdes yyerror("number expected"); 1813238106Sdes } 1814238106Sdes free($2); 1815238106Sdes } 1816238106Sdes ; 1817238106Sdesserver_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG 1818238106Sdes { 1819238106Sdes OUTYY(("P(server_cache_max_ttl:%s)\n", $2)); 1820238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1821238106Sdes yyerror("number expected"); 1822238106Sdes else cfg_parser->cfg->max_ttl = atoi($2); 1823238106Sdes free($2); 1824238106Sdes } 1825238106Sdes ; 1826287917Sdesserver_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG 1827287917Sdes { 1828287917Sdes OUTYY(("P(server_cache_max_negative_ttl:%s)\n", $2)); 1829287917Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1830287917Sdes yyerror("number expected"); 1831287917Sdes else cfg_parser->cfg->max_negative_ttl = atoi($2); 1832287917Sdes free($2); 1833287917Sdes } 1834287917Sdes ; 1835238106Sdesserver_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG 1836238106Sdes { 1837238106Sdes OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); 1838238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1839238106Sdes yyerror("number expected"); 1840238106Sdes else cfg_parser->cfg->min_ttl = atoi($2); 1841238106Sdes free($2); 1842238106Sdes } 1843238106Sdes ; 1844238106Sdesserver_bogus_ttl: VAR_BOGUS_TTL STRING_ARG 1845238106Sdes { 1846238106Sdes OUTYY(("P(server_bogus_ttl:%s)\n", $2)); 1847238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1848238106Sdes yyerror("number expected"); 1849238106Sdes else cfg_parser->cfg->bogus_ttl = atoi($2); 1850238106Sdes free($2); 1851238106Sdes } 1852238106Sdes ; 1853238106Sdesserver_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG 1854238106Sdes { 1855238106Sdes OUTYY(("P(server_val_clean_additional:%s)\n", $2)); 1856238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1857238106Sdes yyerror("expected yes or no."); 1858238106Sdes else cfg_parser->cfg->val_clean_additional = 1859238106Sdes (strcmp($2, "yes")==0); 1860238106Sdes free($2); 1861238106Sdes } 1862238106Sdes ; 1863238106Sdesserver_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG 1864238106Sdes { 1865238106Sdes OUTYY(("P(server_val_permissive_mode:%s)\n", $2)); 1866238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1867238106Sdes yyerror("expected yes or no."); 1868238106Sdes else cfg_parser->cfg->val_permissive_mode = 1869238106Sdes (strcmp($2, "yes")==0); 1870238106Sdes free($2); 1871238106Sdes } 1872238106Sdes ; 1873356345Scyserver_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG 1874356345Scy { 1875356345Scy OUTYY(("P(server_aggressive_nsec:%s)\n", $2)); 1876356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1877356345Scy yyerror("expected yes or no."); 1878356345Scy else 1879356345Scy cfg_parser->cfg->aggressive_nsec = 1880356345Scy (strcmp($2, "yes")==0); 1881356345Scy free($2); 1882356345Scy } 1883356345Scy ; 1884238106Sdesserver_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG 1885238106Sdes { 1886238106Sdes OUTYY(("P(server_ignore_cd_flag:%s)\n", $2)); 1887238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1888238106Sdes yyerror("expected yes or no."); 1889238106Sdes else cfg_parser->cfg->ignore_cd = (strcmp($2, "yes")==0); 1890238106Sdes free($2); 1891238106Sdes } 1892238106Sdes ; 1893356345Scyserver_serve_expired: VAR_SERVE_EXPIRED STRING_ARG 1894356345Scy { 1895356345Scy OUTYY(("P(server_serve_expired:%s)\n", $2)); 1896356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1897356345Scy yyerror("expected yes or no."); 1898356345Scy else cfg_parser->cfg->serve_expired = (strcmp($2, "yes")==0); 1899356345Scy free($2); 1900356345Scy } 1901356345Scy ; 1902356345Scyserver_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG 1903356345Scy { 1904356345Scy OUTYY(("P(server_serve_expired_ttl:%s)\n", $2)); 1905356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 1906356345Scy yyerror("number expected"); 1907356345Scy else cfg_parser->cfg->serve_expired_ttl = atoi($2); 1908356345Scy free($2); 1909356345Scy } 1910356345Scy ; 1911356345Scyserver_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG 1912356345Scy { 1913356345Scy OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", $2)); 1914356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1915356345Scy yyerror("expected yes or no."); 1916356345Scy else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp($2, "yes")==0); 1917356345Scy free($2); 1918356345Scy } 1919356345Scy ; 1920361435Scyserver_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG 1921361435Scy { 1922361435Scy OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", $2)); 1923361435Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 1924361435Scy yyerror("number expected"); 1925361435Scy else cfg_parser->cfg->serve_expired_reply_ttl = atoi($2); 1926361435Scy free($2); 1927361435Scy } 1928361435Scy ; 1929361435Scyserver_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG 1930361435Scy { 1931361435Scy OUTYY(("P(server_serve_expired_client_timeout:%s)\n", $2)); 1932361435Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 1933361435Scy yyerror("number expected"); 1934361435Scy else cfg_parser->cfg->serve_expired_client_timeout = atoi($2); 1935361435Scy free($2); 1936361435Scy } 1937361435Scy ; 1938369939Sgit2svnserver_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG 1939369939Sgit2svn { 1940369939Sgit2svn OUTYY(("P(server_serve_original_ttl:%s)\n", $2)); 1941369939Sgit2svn if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1942369939Sgit2svn yyerror("expected yes or no."); 1943369939Sgit2svn else cfg_parser->cfg->serve_original_ttl = (strcmp($2, "yes")==0); 1944369939Sgit2svn free($2); 1945369939Sgit2svn } 1946369939Sgit2svn ; 1947356345Scyserver_fake_dsa: VAR_FAKE_DSA STRING_ARG 1948356345Scy { 1949356345Scy OUTYY(("P(server_fake_dsa:%s)\n", $2)); 1950356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1951356345Scy yyerror("expected yes or no."); 1952361435Scy#if defined(HAVE_SSL) || defined(HAVE_NETTLE) 1953356345Scy else fake_dsa = (strcmp($2, "yes")==0); 1954356345Scy if(fake_dsa) 1955356345Scy log_warn("test option fake_dsa is enabled"); 1956356345Scy#endif 1957356345Scy free($2); 1958356345Scy } 1959356345Scy ; 1960356345Scyserver_fake_sha1: VAR_FAKE_SHA1 STRING_ARG 1961356345Scy { 1962356345Scy OUTYY(("P(server_fake_sha1:%s)\n", $2)); 1963356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1964356345Scy yyerror("expected yes or no."); 1965361435Scy#if defined(HAVE_SSL) || defined(HAVE_NETTLE) 1966356345Scy else fake_sha1 = (strcmp($2, "yes")==0); 1967356345Scy if(fake_sha1) 1968356345Scy log_warn("test option fake_sha1 is enabled"); 1969356345Scy#endif 1970356345Scy free($2); 1971356345Scy } 1972356345Scy ; 1973238106Sdesserver_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG 1974238106Sdes { 1975238106Sdes OUTYY(("P(server_val_log_level:%s)\n", $2)); 1976238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1977238106Sdes yyerror("number expected"); 1978238106Sdes else cfg_parser->cfg->val_log_level = atoi($2); 1979238106Sdes free($2); 1980238106Sdes } 1981238106Sdes ; 1982238106Sdesserver_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG 1983238106Sdes { 1984238106Sdes OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", $2)); 1985238106Sdes free(cfg_parser->cfg->val_nsec3_key_iterations); 1986238106Sdes cfg_parser->cfg->val_nsec3_key_iterations = $2; 1987238106Sdes } 1988238106Sdes ; 1989238106Sdesserver_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG 1990238106Sdes { 1991238106Sdes OUTYY(("P(server_add_holddown:%s)\n", $2)); 1992238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1993238106Sdes yyerror("number expected"); 1994238106Sdes else cfg_parser->cfg->add_holddown = atoi($2); 1995238106Sdes free($2); 1996238106Sdes } 1997238106Sdes ; 1998238106Sdesserver_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG 1999238106Sdes { 2000238106Sdes OUTYY(("P(server_del_holddown:%s)\n", $2)); 2001238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 2002238106Sdes yyerror("number expected"); 2003238106Sdes else cfg_parser->cfg->del_holddown = atoi($2); 2004238106Sdes free($2); 2005238106Sdes } 2006238106Sdes ; 2007238106Sdesserver_keep_missing: VAR_KEEP_MISSING STRING_ARG 2008238106Sdes { 2009238106Sdes OUTYY(("P(server_keep_missing:%s)\n", $2)); 2010238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 2011238106Sdes yyerror("number expected"); 2012238106Sdes else cfg_parser->cfg->keep_missing = atoi($2); 2013238106Sdes free($2); 2014238106Sdes } 2015238106Sdes ; 2016289063Sdesserver_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG 2017289063Sdes { 2018289063Sdes OUTYY(("P(server_permit_small_holddown:%s)\n", $2)); 2019289063Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2020289063Sdes yyerror("expected yes or no."); 2021289063Sdes else cfg_parser->cfg->permit_small_holddown = 2022289063Sdes (strcmp($2, "yes")==0); 2023289063Sdes free($2); 2024289063Sdes } 2025238106Sdesserver_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG 2026238106Sdes { 2027238106Sdes OUTYY(("P(server_key_cache_size:%s)\n", $2)); 2028238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size)) 2029238106Sdes yyerror("memory size expected"); 2030238106Sdes free($2); 2031238106Sdes } 2032238106Sdes ; 2033238106Sdesserver_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG 2034238106Sdes { 2035238106Sdes OUTYY(("P(server_key_cache_slabs:%s)\n", $2)); 2036238106Sdes if(atoi($2) == 0) 2037238106Sdes yyerror("number expected"); 2038238106Sdes else { 2039238106Sdes cfg_parser->cfg->key_cache_slabs = atoi($2); 2040238106Sdes if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) 2041238106Sdes yyerror("must be a power of 2"); 2042238106Sdes } 2043238106Sdes free($2); 2044238106Sdes } 2045238106Sdes ; 2046238106Sdesserver_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG 2047238106Sdes { 2048238106Sdes OUTYY(("P(server_neg_cache_size:%s)\n", $2)); 2049238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->neg_cache_size)) 2050238106Sdes yyerror("memory size expected"); 2051238106Sdes free($2); 2052238106Sdes } 2053238106Sdes ; 2054238106Sdesserver_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG 2055238106Sdes { 2056238106Sdes OUTYY(("P(server_local_zone:%s %s)\n", $2, $3)); 2057238106Sdes if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && 2058238106Sdes strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && 2059238106Sdes strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 2060307729Sdes && strcmp($3, "typetransparent")!=0 2061307729Sdes && strcmp($3, "always_transparent")!=0 2062307729Sdes && strcmp($3, "always_refuse")!=0 2063307729Sdes && strcmp($3, "always_nxdomain")!=0 2064369939Sgit2svn && strcmp($3, "always_nodata")!=0 2065369939Sgit2svn && strcmp($3, "always_deny")!=0 2066369939Sgit2svn && strcmp($3, "always_null")!=0 2067356345Scy && strcmp($3, "noview")!=0 2068356345Scy && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 2069356345Scy && strcmp($3, "inform_redirect") != 0 2070356345Scy && strcmp($3, "ipset") != 0) { 2071238106Sdes yyerror("local-zone type: expected static, deny, " 2072238106Sdes "refuse, redirect, transparent, " 2073307729Sdes "typetransparent, inform, inform_deny, " 2074356345Scy "inform_redirect, always_transparent, " 2075369939Sgit2svn "always_refuse, always_nxdomain, " 2076369939Sgit2svn "always_nodata, always_deny, always_null, " 2077369939Sgit2svn "noview, nodefault or ipset"); 2078356345Scy free($2); 2079356345Scy free($3); 2080356345Scy } else if(strcmp($3, "nodefault")==0) { 2081238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 2082238106Sdes local_zones_nodefault, $2)) 2083238106Sdes fatal_exit("out of memory adding local-zone"); 2084238106Sdes free($3); 2085356345Scy#ifdef USE_IPSET 2086356345Scy } else if(strcmp($3, "ipset")==0) { 2087356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg-> 2088356345Scy local_zones_ipset, $2)) 2089356345Scy fatal_exit("out of memory adding local-zone"); 2090356345Scy free($3); 2091356345Scy#endif 2092238106Sdes } else { 2093238106Sdes if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 2094238106Sdes $2, $3)) 2095238106Sdes fatal_exit("out of memory adding local-zone"); 2096238106Sdes } 2097238106Sdes } 2098238106Sdes ; 2099238106Sdesserver_local_data: VAR_LOCAL_DATA STRING_ARG 2100238106Sdes { 2101238106Sdes OUTYY(("P(server_local_data:%s)\n", $2)); 2102238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, $2)) 2103238106Sdes fatal_exit("out of memory adding local-data"); 2104238106Sdes } 2105238106Sdes ; 2106238106Sdesserver_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG 2107238106Sdes { 2108238106Sdes char* ptr; 2109238106Sdes OUTYY(("P(server_local_data_ptr:%s)\n", $2)); 2110238106Sdes ptr = cfg_ptr_reverse($2); 2111238106Sdes free($2); 2112238106Sdes if(ptr) { 2113238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 2114238106Sdes local_data, ptr)) 2115238106Sdes fatal_exit("out of memory adding local-data"); 2116238106Sdes } else { 2117238106Sdes yyerror("local-data-ptr could not be reversed"); 2118238106Sdes } 2119238106Sdes } 2120238106Sdes ; 2121238106Sdesserver_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG 2122238106Sdes { 2123238106Sdes OUTYY(("P(server_minimal_responses:%s)\n", $2)); 2124238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2125238106Sdes yyerror("expected yes or no."); 2126238106Sdes else cfg_parser->cfg->minimal_responses = 2127238106Sdes (strcmp($2, "yes")==0); 2128238106Sdes free($2); 2129238106Sdes } 2130238106Sdes ; 2131238106Sdesserver_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG 2132238106Sdes { 2133238106Sdes OUTYY(("P(server_rrset_roundrobin:%s)\n", $2)); 2134238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2135238106Sdes yyerror("expected yes or no."); 2136238106Sdes else cfg_parser->cfg->rrset_roundrobin = 2137238106Sdes (strcmp($2, "yes")==0); 2138238106Sdes free($2); 2139238106Sdes } 2140238106Sdes ; 2141356345Scyserver_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG 2142356345Scy { 2143356345Scy OUTYY(("P(server_unknown_server_time_limit:%s)\n", $2)); 2144356345Scy cfg_parser->cfg->unknown_server_time_limit = atoi($2); 2145356345Scy free($2); 2146356345Scy } 2147356345Scy ; 2148266114Sdesserver_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG 2149266114Sdes { 2150266114Sdes OUTYY(("P(server_max_udp_size:%s)\n", $2)); 2151266114Sdes cfg_parser->cfg->max_udp_size = atoi($2); 2152266114Sdes free($2); 2153266114Sdes } 2154266114Sdes ; 2155276605Sdesserver_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG 2156276605Sdes { 2157276605Sdes OUTYY(("P(dns64_prefix:%s)\n", $2)); 2158276605Sdes free(cfg_parser->cfg->dns64_prefix); 2159276605Sdes cfg_parser->cfg->dns64_prefix = $2; 2160276605Sdes } 2161276605Sdes ; 2162276605Sdesserver_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG 2163276605Sdes { 2164276605Sdes OUTYY(("P(server_dns64_synthall:%s)\n", $2)); 2165276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2166276605Sdes yyerror("expected yes or no."); 2167276605Sdes else cfg_parser->cfg->dns64_synthall = (strcmp($2, "yes")==0); 2168276605Sdes free($2); 2169276605Sdes } 2170276605Sdes ; 2171356345Scyserver_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG 2172356345Scy { 2173356345Scy OUTYY(("P(dns64_ignore_aaaa:%s)\n", $2)); 2174356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, 2175356345Scy $2)) 2176356345Scy fatal_exit("out of memory adding dns64-ignore-aaaa"); 2177356345Scy } 2178356345Scy ; 2179307729Sdesserver_define_tag: VAR_DEFINE_TAG STRING_ARG 2180307729Sdes { 2181307729Sdes char* p, *s = $2; 2182307729Sdes OUTYY(("P(server_define_tag:%s)\n", $2)); 2183307729Sdes while((p=strsep(&s, " \t\n")) != NULL) { 2184307729Sdes if(*p) { 2185307729Sdes if(!config_add_tag(cfg_parser->cfg, p)) 2186307729Sdes yyerror("could not define-tag, " 2187307729Sdes "out of memory"); 2188307729Sdes } 2189307729Sdes } 2190307729Sdes free($2); 2191307729Sdes } 2192307729Sdes ; 2193307729Sdesserver_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG 2194307729Sdes { 2195307729Sdes size_t len = 0; 2196307729Sdes uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 2197307729Sdes &len); 2198307729Sdes free($3); 2199307729Sdes OUTYY(("P(server_local_zone_tag:%s)\n", $2)); 2200356345Scy if(!bitlist) { 2201307729Sdes yyerror("could not parse tags, (define-tag them first)"); 2202356345Scy free($2); 2203356345Scy } 2204307729Sdes if(bitlist) { 2205307729Sdes if(!cfg_strbytelist_insert( 2206307729Sdes &cfg_parser->cfg->local_zone_tags, 2207307729Sdes $2, bitlist, len)) { 2208307729Sdes yyerror("out of memory"); 2209307729Sdes free($2); 2210307729Sdes } 2211307729Sdes } 2212307729Sdes } 2213307729Sdes ; 2214307729Sdesserver_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG 2215307729Sdes { 2216307729Sdes size_t len = 0; 2217307729Sdes uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 2218307729Sdes &len); 2219307729Sdes free($3); 2220307729Sdes OUTYY(("P(server_access_control_tag:%s)\n", $2)); 2221356345Scy if(!bitlist) { 2222307729Sdes yyerror("could not parse tags, (define-tag them first)"); 2223356345Scy free($2); 2224356345Scy } 2225307729Sdes if(bitlist) { 2226307729Sdes if(!cfg_strbytelist_insert( 2227307729Sdes &cfg_parser->cfg->acl_tags, 2228307729Sdes $2, bitlist, len)) { 2229307729Sdes yyerror("out of memory"); 2230307729Sdes free($2); 2231307729Sdes } 2232307729Sdes } 2233307729Sdes } 2234307729Sdes ; 2235307729Sdesserver_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG 2236307729Sdes { 2237307729Sdes OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", $2, $3, $4)); 2238307729Sdes if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, 2239307729Sdes $2, $3, $4)) { 2240307729Sdes yyerror("out of memory"); 2241307729Sdes free($2); 2242307729Sdes free($3); 2243307729Sdes free($4); 2244307729Sdes } 2245307729Sdes } 2246307729Sdes ; 2247307729Sdesserver_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG 2248307729Sdes { 2249307729Sdes OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", $2, $3, $4)); 2250307729Sdes if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, 2251307729Sdes $2, $3, $4)) { 2252307729Sdes yyerror("out of memory"); 2253307729Sdes free($2); 2254307729Sdes free($3); 2255307729Sdes free($4); 2256307729Sdes } 2257307729Sdes } 2258307729Sdes ; 2259307729Sdesserver_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG 2260307729Sdes { 2261307729Sdes OUTYY(("P(server_local_zone_override:%s %s %s)\n", $2, $3, $4)); 2262307729Sdes if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, 2263307729Sdes $2, $3, $4)) { 2264307729Sdes yyerror("out of memory"); 2265307729Sdes free($2); 2266307729Sdes free($3); 2267307729Sdes free($4); 2268307729Sdes } 2269307729Sdes } 2270307729Sdes ; 2271356345Scyserver_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG 2272356345Scy { 2273356345Scy OUTYY(("P(server_access_control_view:%s %s)\n", $2, $3)); 2274356345Scy if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, 2275356345Scy $2, $3)) { 2276356345Scy yyerror("out of memory"); 2277356345Scy } 2278356345Scy } 2279356345Scy ; 2280356345Scyserver_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG 2281356345Scy { 2282356345Scy size_t len = 0; 2283356345Scy uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 2284356345Scy &len); 2285356345Scy free($3); 2286356345Scy OUTYY(("P(response_ip_tag:%s)\n", $2)); 2287356345Scy if(!bitlist) { 2288356345Scy yyerror("could not parse tags, (define-tag them first)"); 2289356345Scy free($2); 2290356345Scy } 2291356345Scy if(bitlist) { 2292356345Scy if(!cfg_strbytelist_insert( 2293356345Scy &cfg_parser->cfg->respip_tags, 2294356345Scy $2, bitlist, len)) { 2295356345Scy yyerror("out of memory"); 2296356345Scy free($2); 2297356345Scy } 2298356345Scy } 2299356345Scy } 2300356345Scy ; 2301356345Scyserver_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG 2302356345Scy { 2303356345Scy OUTYY(("P(server_ip_ratelimit:%s)\n", $2)); 2304356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 2305356345Scy yyerror("number expected"); 2306356345Scy else cfg_parser->cfg->ip_ratelimit = atoi($2); 2307356345Scy free($2); 2308356345Scy } 2309356345Scy ; 2310356345Scy 2311287917Sdesserver_ratelimit: VAR_RATELIMIT STRING_ARG 2312287917Sdes { 2313287917Sdes OUTYY(("P(server_ratelimit:%s)\n", $2)); 2314287917Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 2315287917Sdes yyerror("number expected"); 2316287917Sdes else cfg_parser->cfg->ratelimit = atoi($2); 2317287917Sdes free($2); 2318287917Sdes } 2319287917Sdes ; 2320356345Scyserver_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG 2321356345Scy { 2322356345Scy OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2)); 2323356345Scy if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size)) 2324356345Scy yyerror("memory size expected"); 2325356345Scy free($2); 2326356345Scy } 2327356345Scy ; 2328287917Sdesserver_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG 2329287917Sdes { 2330287917Sdes OUTYY(("P(server_ratelimit_size:%s)\n", $2)); 2331287917Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->ratelimit_size)) 2332287917Sdes yyerror("memory size expected"); 2333287917Sdes free($2); 2334287917Sdes } 2335287917Sdes ; 2336356345Scyserver_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG 2337356345Scy { 2338356345Scy OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2)); 2339356345Scy if(atoi($2) == 0) 2340356345Scy yyerror("number expected"); 2341356345Scy else { 2342356345Scy cfg_parser->cfg->ip_ratelimit_slabs = atoi($2); 2343356345Scy if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) 2344356345Scy yyerror("must be a power of 2"); 2345356345Scy } 2346356345Scy free($2); 2347356345Scy } 2348356345Scy ; 2349287917Sdesserver_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG 2350287917Sdes { 2351287917Sdes OUTYY(("P(server_ratelimit_slabs:%s)\n", $2)); 2352287917Sdes if(atoi($2) == 0) 2353287917Sdes yyerror("number expected"); 2354287917Sdes else { 2355287917Sdes cfg_parser->cfg->ratelimit_slabs = atoi($2); 2356287917Sdes if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) 2357287917Sdes yyerror("must be a power of 2"); 2358287917Sdes } 2359287917Sdes free($2); 2360287917Sdes } 2361287917Sdes ; 2362287917Sdesserver_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG 2363287917Sdes { 2364287917Sdes OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", $2, $3)); 2365287917Sdes if(atoi($3) == 0 && strcmp($3, "0") != 0) { 2366287917Sdes yyerror("number expected"); 2367356345Scy free($2); 2368356345Scy free($3); 2369287917Sdes } else { 2370287917Sdes if(!cfg_str2list_insert(&cfg_parser->cfg-> 2371287917Sdes ratelimit_for_domain, $2, $3)) 2372287917Sdes fatal_exit("out of memory adding " 2373287917Sdes "ratelimit-for-domain"); 2374287917Sdes } 2375287917Sdes } 2376287917Sdes ; 2377287917Sdesserver_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG 2378287917Sdes { 2379287917Sdes OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", $2, $3)); 2380287917Sdes if(atoi($3) == 0 && strcmp($3, "0") != 0) { 2381287917Sdes yyerror("number expected"); 2382356345Scy free($2); 2383356345Scy free($3); 2384287917Sdes } else { 2385287917Sdes if(!cfg_str2list_insert(&cfg_parser->cfg-> 2386287917Sdes ratelimit_below_domain, $2, $3)) 2387287917Sdes fatal_exit("out of memory adding " 2388287917Sdes "ratelimit-below-domain"); 2389287917Sdes } 2390287917Sdes } 2391287917Sdes ; 2392356345Scyserver_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG 2393356345Scy { 2394356345Scy OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2)); 2395356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 2396356345Scy yyerror("number expected"); 2397356345Scy else cfg_parser->cfg->ip_ratelimit_factor = atoi($2); 2398356345Scy free($2); 2399356345Scy } 2400356345Scy ; 2401287917Sdesserver_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG 2402287917Sdes { 2403287917Sdes OUTYY(("P(server_ratelimit_factor:%s)\n", $2)); 2404287917Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 2405287917Sdes yyerror("number expected"); 2406287917Sdes else cfg_parser->cfg->ratelimit_factor = atoi($2); 2407287917Sdes free($2); 2408287917Sdes } 2409287917Sdes ; 2410356345Scyserver_low_rtt: VAR_LOW_RTT STRING_ARG 2411356345Scy { 2412356345Scy OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); 2413356345Scy free($2); 2414356345Scy } 2415356345Scy ; 2416356345Scyserver_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG 2417356345Scy { 2418356345Scy OUTYY(("P(server_fast_server_num:%s)\n", $2)); 2419356345Scy if(atoi($2) <= 0) 2420356345Scy yyerror("number expected"); 2421356345Scy else cfg_parser->cfg->fast_server_num = atoi($2); 2422356345Scy free($2); 2423356345Scy } 2424356345Scy ; 2425356345Scyserver_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG 2426356345Scy { 2427356345Scy OUTYY(("P(server_fast_server_permil:%s)\n", $2)); 2428356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 2429356345Scy yyerror("number expected"); 2430356345Scy else cfg_parser->cfg->fast_server_permil = atoi($2); 2431356345Scy free($2); 2432356345Scy } 2433356345Scy ; 2434292206Sdesserver_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG 2435292206Sdes { 2436292206Sdes OUTYY(("P(server_qname_minimisation:%s)\n", $2)); 2437292206Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2438292206Sdes yyerror("expected yes or no."); 2439292206Sdes else cfg_parser->cfg->qname_minimisation = 2440292206Sdes (strcmp($2, "yes")==0); 2441292206Sdes free($2); 2442292206Sdes } 2443292206Sdes ; 2444356345Scyserver_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG 2445356345Scy { 2446356345Scy OUTYY(("P(server_qname_minimisation_strict:%s)\n", $2)); 2447356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2448356345Scy yyerror("expected yes or no."); 2449356345Scy else cfg_parser->cfg->qname_minimisation_strict = 2450356345Scy (strcmp($2, "yes")==0); 2451356345Scy free($2); 2452356345Scy } 2453356345Scy ; 2454369939Sgit2svnserver_pad_responses: VAR_PAD_RESPONSES STRING_ARG 2455369939Sgit2svn { 2456369939Sgit2svn OUTYY(("P(server_pad_responses:%s)\n", $2)); 2457369939Sgit2svn if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2458369939Sgit2svn yyerror("expected yes or no."); 2459369939Sgit2svn else cfg_parser->cfg->pad_responses = 2460369939Sgit2svn (strcmp($2, "yes")==0); 2461369939Sgit2svn free($2); 2462369939Sgit2svn } 2463369939Sgit2svn ; 2464369939Sgit2svnserver_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG 2465369939Sgit2svn { 2466369939Sgit2svn OUTYY(("P(server_pad_responses_block_size:%s)\n", $2)); 2467369939Sgit2svn if(atoi($2) == 0) 2468369939Sgit2svn yyerror("number expected"); 2469369939Sgit2svn else cfg_parser->cfg->pad_responses_block_size = atoi($2); 2470369939Sgit2svn free($2); 2471369939Sgit2svn } 2472369939Sgit2svn ; 2473369939Sgit2svnserver_pad_queries: VAR_PAD_QUERIES STRING_ARG 2474369939Sgit2svn { 2475369939Sgit2svn OUTYY(("P(server_pad_queries:%s)\n", $2)); 2476369939Sgit2svn if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2477369939Sgit2svn yyerror("expected yes or no."); 2478369939Sgit2svn else cfg_parser->cfg->pad_queries = 2479369939Sgit2svn (strcmp($2, "yes")==0); 2480369939Sgit2svn free($2); 2481369939Sgit2svn } 2482369939Sgit2svn ; 2483369939Sgit2svnserver_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG 2484369939Sgit2svn { 2485369939Sgit2svn OUTYY(("P(server_pad_queries_block_size:%s)\n", $2)); 2486369939Sgit2svn if(atoi($2) == 0) 2487369939Sgit2svn yyerror("number expected"); 2488369939Sgit2svn else cfg_parser->cfg->pad_queries_block_size = atoi($2); 2489369939Sgit2svn free($2); 2490369939Sgit2svn } 2491369939Sgit2svn ; 2492356345Scyserver_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG 2493356345Scy { 2494356345Scy #ifdef USE_IPSECMOD 2495356345Scy OUTYY(("P(server_ipsecmod_enabled:%s)\n", $2)); 2496356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2497356345Scy yyerror("expected yes or no."); 2498356345Scy else cfg_parser->cfg->ipsecmod_enabled = (strcmp($2, "yes")==0); 2499356345Scy #else 2500356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2501356345Scy #endif 2502356345Scy free($2); 2503356345Scy } 2504356345Scy ; 2505356345Scyserver_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG 2506356345Scy { 2507356345Scy #ifdef USE_IPSECMOD 2508356345Scy OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", $2)); 2509356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2510356345Scy yyerror("expected yes or no."); 2511356345Scy else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp($2, "yes")==0); 2512356345Scy #else 2513356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2514356345Scy #endif 2515356345Scy free($2); 2516356345Scy } 2517356345Scy ; 2518356345Scyserver_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG 2519356345Scy { 2520356345Scy #ifdef USE_IPSECMOD 2521356345Scy OUTYY(("P(server_ipsecmod_hook:%s)\n", $2)); 2522356345Scy free(cfg_parser->cfg->ipsecmod_hook); 2523356345Scy cfg_parser->cfg->ipsecmod_hook = $2; 2524356345Scy #else 2525356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2526356345Scy free($2); 2527356345Scy #endif 2528356345Scy } 2529356345Scy ; 2530356345Scyserver_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG 2531356345Scy { 2532356345Scy #ifdef USE_IPSECMOD 2533356345Scy OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", $2)); 2534356345Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 2535356345Scy yyerror("number expected"); 2536356345Scy else cfg_parser->cfg->ipsecmod_max_ttl = atoi($2); 2537356345Scy free($2); 2538356345Scy #else 2539356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2540356345Scy free($2); 2541356345Scy #endif 2542356345Scy } 2543356345Scy ; 2544356345Scyserver_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG 2545356345Scy { 2546356345Scy #ifdef USE_IPSECMOD 2547356345Scy OUTYY(("P(server_ipsecmod_whitelist:%s)\n", $2)); 2548356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, $2)) 2549356345Scy yyerror("out of memory"); 2550356345Scy #else 2551356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2552356345Scy free($2); 2553356345Scy #endif 2554356345Scy } 2555356345Scy ; 2556356345Scyserver_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG 2557356345Scy { 2558356345Scy #ifdef USE_IPSECMOD 2559356345Scy OUTYY(("P(server_ipsecmod_strict:%s)\n", $2)); 2560356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2561356345Scy yyerror("expected yes or no."); 2562356345Scy else cfg_parser->cfg->ipsecmod_strict = (strcmp($2, "yes")==0); 2563356345Scy free($2); 2564356345Scy #else 2565356345Scy OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2566356345Scy free($2); 2567356345Scy #endif 2568356345Scy } 2569356345Scy ; 2570368693Scyserver_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG 2571368129Scy { 2572368693Scy OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3)); 2573368129Scy if(!cfg_str2list_insert( 2574368693Scy &cfg_parser->cfg->edns_client_strings, $2, $3)) 2575368129Scy fatal_exit("out of memory adding " 2576368693Scy "edns-client-string"); 2577368129Scy } 2578368129Scy ; 2579368693Scyserver_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG 2580368129Scy { 2581368693Scy OUTYY(("P(edns_client_string_opcode:%s)\n", $2)); 2582368129Scy if(atoi($2) == 0 && strcmp($2, "0") != 0) 2583368129Scy yyerror("option code expected"); 2584368129Scy else if(atoi($2) > 65535 || atoi($2) < 0) 2585368129Scy yyerror("option code must be in interval [0, 65535]"); 2586368693Scy else cfg_parser->cfg->edns_client_string_opcode = atoi($2); 2587368693Scy free($2); 2588368129Scy 2589368129Scy } 2590368129Scy ; 2591238106Sdesstub_name: VAR_NAME STRING_ARG 2592238106Sdes { 2593238106Sdes OUTYY(("P(name:%s)\n", $2)); 2594238106Sdes if(cfg_parser->cfg->stubs->name) 2595238106Sdes yyerror("stub name override, there must be one name " 2596238106Sdes "for one stub-zone"); 2597238106Sdes free(cfg_parser->cfg->stubs->name); 2598238106Sdes cfg_parser->cfg->stubs->name = $2; 2599238106Sdes } 2600238106Sdes ; 2601238106Sdesstub_host: VAR_STUB_HOST STRING_ARG 2602238106Sdes { 2603238106Sdes OUTYY(("P(stub-host:%s)\n", $2)); 2604238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, $2)) 2605238106Sdes yyerror("out of memory"); 2606238106Sdes } 2607238106Sdes ; 2608238106Sdesstub_addr: VAR_STUB_ADDR STRING_ARG 2609238106Sdes { 2610238106Sdes OUTYY(("P(stub-addr:%s)\n", $2)); 2611238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, $2)) 2612238106Sdes yyerror("out of memory"); 2613238106Sdes } 2614238106Sdes ; 2615238106Sdesstub_first: VAR_STUB_FIRST STRING_ARG 2616238106Sdes { 2617238106Sdes OUTYY(("P(stub-first:%s)\n", $2)); 2618238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2619238106Sdes yyerror("expected yes or no."); 2620238106Sdes else cfg_parser->cfg->stubs->isfirst=(strcmp($2, "yes")==0); 2621238106Sdes free($2); 2622238106Sdes } 2623238106Sdes ; 2624356345Scystub_no_cache: VAR_STUB_NO_CACHE STRING_ARG 2625356345Scy { 2626356345Scy OUTYY(("P(stub-no-cache:%s)\n", $2)); 2627356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2628356345Scy yyerror("expected yes or no."); 2629356345Scy else cfg_parser->cfg->stubs->no_cache=(strcmp($2, "yes")==0); 2630356345Scy free($2); 2631356345Scy } 2632356345Scy ; 2633356345Scystub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG 2634356345Scy { 2635356345Scy OUTYY(("P(stub-ssl-upstream:%s)\n", $2)); 2636356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2637356345Scy yyerror("expected yes or no."); 2638356345Scy else cfg_parser->cfg->stubs->ssl_upstream = 2639356345Scy (strcmp($2, "yes")==0); 2640356345Scy free($2); 2641356345Scy } 2642356345Scy ; 2643238106Sdesstub_prime: VAR_STUB_PRIME STRING_ARG 2644238106Sdes { 2645238106Sdes OUTYY(("P(stub-prime:%s)\n", $2)); 2646238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2647238106Sdes yyerror("expected yes or no."); 2648238106Sdes else cfg_parser->cfg->stubs->isprime = 2649238106Sdes (strcmp($2, "yes")==0); 2650238106Sdes free($2); 2651238106Sdes } 2652238106Sdes ; 2653238106Sdesforward_name: VAR_NAME STRING_ARG 2654238106Sdes { 2655238106Sdes OUTYY(("P(name:%s)\n", $2)); 2656238106Sdes if(cfg_parser->cfg->forwards->name) 2657238106Sdes yyerror("forward name override, there must be one " 2658238106Sdes "name for one forward-zone"); 2659238106Sdes free(cfg_parser->cfg->forwards->name); 2660238106Sdes cfg_parser->cfg->forwards->name = $2; 2661238106Sdes } 2662238106Sdes ; 2663238106Sdesforward_host: VAR_FORWARD_HOST STRING_ARG 2664238106Sdes { 2665238106Sdes OUTYY(("P(forward-host:%s)\n", $2)); 2666238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, $2)) 2667238106Sdes yyerror("out of memory"); 2668238106Sdes } 2669238106Sdes ; 2670238106Sdesforward_addr: VAR_FORWARD_ADDR STRING_ARG 2671238106Sdes { 2672238106Sdes OUTYY(("P(forward-addr:%s)\n", $2)); 2673238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, $2)) 2674238106Sdes yyerror("out of memory"); 2675238106Sdes } 2676238106Sdes ; 2677238106Sdesforward_first: VAR_FORWARD_FIRST STRING_ARG 2678238106Sdes { 2679238106Sdes OUTYY(("P(forward-first:%s)\n", $2)); 2680238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2681238106Sdes yyerror("expected yes or no."); 2682238106Sdes else cfg_parser->cfg->forwards->isfirst=(strcmp($2, "yes")==0); 2683238106Sdes free($2); 2684238106Sdes } 2685238106Sdes ; 2686356345Scyforward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG 2687356345Scy { 2688356345Scy OUTYY(("P(forward-no-cache:%s)\n", $2)); 2689356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2690356345Scy yyerror("expected yes or no."); 2691356345Scy else cfg_parser->cfg->forwards->no_cache=(strcmp($2, "yes")==0); 2692356345Scy free($2); 2693356345Scy } 2694356345Scy ; 2695356345Scyforward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG 2696356345Scy { 2697356345Scy OUTYY(("P(forward-ssl-upstream:%s)\n", $2)); 2698356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2699356345Scy yyerror("expected yes or no."); 2700356345Scy else cfg_parser->cfg->forwards->ssl_upstream = 2701356345Scy (strcmp($2, "yes")==0); 2702356345Scy free($2); 2703356345Scy } 2704356345Scy ; 2705356345Scyauth_name: VAR_NAME STRING_ARG 2706356345Scy { 2707356345Scy OUTYY(("P(name:%s)\n", $2)); 2708356345Scy if(cfg_parser->cfg->auths->name) 2709356345Scy yyerror("auth name override, there must be one name " 2710356345Scy "for one auth-zone"); 2711356345Scy free(cfg_parser->cfg->auths->name); 2712356345Scy cfg_parser->cfg->auths->name = $2; 2713356345Scy } 2714356345Scy ; 2715356345Scyauth_zonefile: VAR_ZONEFILE STRING_ARG 2716356345Scy { 2717356345Scy OUTYY(("P(zonefile:%s)\n", $2)); 2718356345Scy free(cfg_parser->cfg->auths->zonefile); 2719356345Scy cfg_parser->cfg->auths->zonefile = $2; 2720356345Scy } 2721356345Scy ; 2722356345Scyauth_master: VAR_MASTER STRING_ARG 2723356345Scy { 2724356345Scy OUTYY(("P(master:%s)\n", $2)); 2725356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, $2)) 2726356345Scy yyerror("out of memory"); 2727356345Scy } 2728356345Scy ; 2729356345Scyauth_url: VAR_URL STRING_ARG 2730356345Scy { 2731356345Scy OUTYY(("P(url:%s)\n", $2)); 2732356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, $2)) 2733356345Scy yyerror("out of memory"); 2734356345Scy } 2735356345Scy ; 2736356345Scyauth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG 2737356345Scy { 2738356345Scy OUTYY(("P(allow-notify:%s)\n", $2)); 2739356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, 2740356345Scy $2)) 2741356345Scy yyerror("out of memory"); 2742356345Scy } 2743356345Scy ; 2744356345Scyauth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG 2745356345Scy { 2746356345Scy OUTYY(("P(for-downstream:%s)\n", $2)); 2747356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2748356345Scy yyerror("expected yes or no."); 2749356345Scy else cfg_parser->cfg->auths->for_downstream = 2750356345Scy (strcmp($2, "yes")==0); 2751356345Scy free($2); 2752356345Scy } 2753356345Scy ; 2754356345Scyauth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG 2755356345Scy { 2756356345Scy OUTYY(("P(for-upstream:%s)\n", $2)); 2757356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2758356345Scy yyerror("expected yes or no."); 2759356345Scy else cfg_parser->cfg->auths->for_upstream = 2760356345Scy (strcmp($2, "yes")==0); 2761356345Scy free($2); 2762356345Scy } 2763356345Scy ; 2764356345Scyauth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG 2765356345Scy { 2766356345Scy OUTYY(("P(fallback-enabled:%s)\n", $2)); 2767356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2768356345Scy yyerror("expected yes or no."); 2769356345Scy else cfg_parser->cfg->auths->fallback_enabled = 2770356345Scy (strcmp($2, "yes")==0); 2771356345Scy free($2); 2772356345Scy } 2773356345Scy ; 2774356345Scyview_name: VAR_NAME STRING_ARG 2775356345Scy { 2776356345Scy OUTYY(("P(name:%s)\n", $2)); 2777356345Scy if(cfg_parser->cfg->views->name) 2778356345Scy yyerror("view name override, there must be one " 2779356345Scy "name for one view"); 2780356345Scy free(cfg_parser->cfg->views->name); 2781356345Scy cfg_parser->cfg->views->name = $2; 2782356345Scy } 2783356345Scy ; 2784356345Scyview_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG 2785356345Scy { 2786356345Scy OUTYY(("P(view_local_zone:%s %s)\n", $2, $3)); 2787356345Scy if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && 2788356345Scy strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && 2789356345Scy strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 2790356345Scy && strcmp($3, "typetransparent")!=0 2791356345Scy && strcmp($3, "always_transparent")!=0 2792356345Scy && strcmp($3, "always_refuse")!=0 2793356345Scy && strcmp($3, "always_nxdomain")!=0 2794356345Scy && strcmp($3, "noview")!=0 2795356345Scy && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0) { 2796356345Scy yyerror("local-zone type: expected static, deny, " 2797356345Scy "refuse, redirect, transparent, " 2798356345Scy "typetransparent, inform, inform_deny, " 2799356345Scy "always_transparent, always_refuse, " 2800356345Scy "always_nxdomain, noview or nodefault"); 2801356345Scy free($2); 2802356345Scy free($3); 2803356345Scy } else if(strcmp($3, "nodefault")==0) { 2804356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 2805356345Scy local_zones_nodefault, $2)) 2806356345Scy fatal_exit("out of memory adding local-zone"); 2807356345Scy free($3); 2808356345Scy#ifdef USE_IPSET 2809356345Scy } else if(strcmp($3, "ipset")==0) { 2810356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 2811356345Scy local_zones_ipset, $2)) 2812356345Scy fatal_exit("out of memory adding local-zone"); 2813356345Scy free($3); 2814356345Scy#endif 2815356345Scy } else { 2816356345Scy if(!cfg_str2list_insert( 2817356345Scy &cfg_parser->cfg->views->local_zones, 2818356345Scy $2, $3)) 2819356345Scy fatal_exit("out of memory adding local-zone"); 2820356345Scy } 2821356345Scy } 2822356345Scy ; 2823356345Scyview_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG 2824356345Scy { 2825356345Scy OUTYY(("P(view_response_ip:%s %s)\n", $2, $3)); 2826356345Scy validate_respip_action($3); 2827356345Scy if(!cfg_str2list_insert( 2828356345Scy &cfg_parser->cfg->views->respip_actions, $2, $3)) 2829356345Scy fatal_exit("out of memory adding per-view " 2830356345Scy "response-ip action"); 2831356345Scy } 2832356345Scy ; 2833356345Scyview_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG 2834356345Scy { 2835356345Scy OUTYY(("P(view_response_ip_data:%s)\n", $2)); 2836356345Scy if(!cfg_str2list_insert( 2837356345Scy &cfg_parser->cfg->views->respip_data, $2, $3)) 2838356345Scy fatal_exit("out of memory adding response-ip-data"); 2839356345Scy } 2840356345Scy ; 2841356345Scyview_local_data: VAR_LOCAL_DATA STRING_ARG 2842356345Scy { 2843356345Scy OUTYY(("P(view_local_data:%s)\n", $2)); 2844356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) { 2845356345Scy fatal_exit("out of memory adding local-data"); 2846356345Scy } 2847356345Scy } 2848356345Scy ; 2849356345Scyview_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG 2850356345Scy { 2851356345Scy char* ptr; 2852356345Scy OUTYY(("P(view_local_data_ptr:%s)\n", $2)); 2853356345Scy ptr = cfg_ptr_reverse($2); 2854356345Scy free($2); 2855356345Scy if(ptr) { 2856356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 2857356345Scy local_data, ptr)) 2858356345Scy fatal_exit("out of memory adding local-data"); 2859356345Scy } else { 2860356345Scy yyerror("local-data-ptr could not be reversed"); 2861356345Scy } 2862356345Scy } 2863356345Scy ; 2864356345Scyview_first: VAR_VIEW_FIRST STRING_ARG 2865356345Scy { 2866356345Scy OUTYY(("P(view-first:%s)\n", $2)); 2867356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2868356345Scy yyerror("expected yes or no."); 2869356345Scy else cfg_parser->cfg->views->isfirst=(strcmp($2, "yes")==0); 2870356345Scy free($2); 2871356345Scy } 2872356345Scy ; 2873238106Sdesrcstart: VAR_REMOTE_CONTROL 2874238106Sdes { 2875238106Sdes OUTYY(("\nP(remote-control:)\n")); 2876238106Sdes } 2877238106Sdes ; 2878238106Sdescontents_rc: contents_rc content_rc 2879238106Sdes | ; 2880238106Sdescontent_rc: rc_control_enable | rc_control_interface | rc_control_port | 2881238106Sdes rc_server_key_file | rc_server_cert_file | rc_control_key_file | 2882276699Sdes rc_control_cert_file | rc_control_use_cert 2883238106Sdes ; 2884238106Sdesrc_control_enable: VAR_CONTROL_ENABLE STRING_ARG 2885238106Sdes { 2886238106Sdes OUTYY(("P(control_enable:%s)\n", $2)); 2887238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2888238106Sdes yyerror("expected yes or no."); 2889238106Sdes else cfg_parser->cfg->remote_control_enable = 2890238106Sdes (strcmp($2, "yes")==0); 2891238106Sdes free($2); 2892238106Sdes } 2893238106Sdes ; 2894238106Sdesrc_control_port: VAR_CONTROL_PORT STRING_ARG 2895238106Sdes { 2896238106Sdes OUTYY(("P(control_port:%s)\n", $2)); 2897238106Sdes if(atoi($2) == 0) 2898238106Sdes yyerror("control port number expected"); 2899238106Sdes else cfg_parser->cfg->control_port = atoi($2); 2900238106Sdes free($2); 2901238106Sdes } 2902238106Sdes ; 2903238106Sdesrc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG 2904238106Sdes { 2905238106Sdes OUTYY(("P(control_interface:%s)\n", $2)); 2906356345Scy if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, $2)) 2907238106Sdes yyerror("out of memory"); 2908238106Sdes } 2909238106Sdes ; 2910276699Sdesrc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG 2911276699Sdes { 2912276699Sdes OUTYY(("P(control_use_cert:%s)\n", $2)); 2913356345Scy cfg_parser->cfg->control_use_cert = (strcmp($2, "yes")==0); 2914276699Sdes free($2); 2915276699Sdes } 2916276699Sdes ; 2917238106Sdesrc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG 2918238106Sdes { 2919238106Sdes OUTYY(("P(rc_server_key_file:%s)\n", $2)); 2920238106Sdes free(cfg_parser->cfg->server_key_file); 2921238106Sdes cfg_parser->cfg->server_key_file = $2; 2922238106Sdes } 2923238106Sdes ; 2924238106Sdesrc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG 2925238106Sdes { 2926238106Sdes OUTYY(("P(rc_server_cert_file:%s)\n", $2)); 2927238106Sdes free(cfg_parser->cfg->server_cert_file); 2928238106Sdes cfg_parser->cfg->server_cert_file = $2; 2929238106Sdes } 2930238106Sdes ; 2931238106Sdesrc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG 2932238106Sdes { 2933238106Sdes OUTYY(("P(rc_control_key_file:%s)\n", $2)); 2934238106Sdes free(cfg_parser->cfg->control_key_file); 2935238106Sdes cfg_parser->cfg->control_key_file = $2; 2936238106Sdes } 2937238106Sdes ; 2938238106Sdesrc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG 2939238106Sdes { 2940238106Sdes OUTYY(("P(rc_control_cert_file:%s)\n", $2)); 2941238106Sdes free(cfg_parser->cfg->control_cert_file); 2942238106Sdes cfg_parser->cfg->control_cert_file = $2; 2943238106Sdes } 2944238106Sdes ; 2945276605Sdesdtstart: VAR_DNSTAP 2946276605Sdes { 2947276605Sdes OUTYY(("\nP(dnstap:)\n")); 2948276605Sdes } 2949276605Sdes ; 2950276605Sdescontents_dt: contents_dt content_dt 2951276605Sdes | ; 2952366095Scycontent_dt: dt_dnstap_enable | dt_dnstap_socket_path | dt_dnstap_bidirectional | 2953366095Scy dt_dnstap_ip | dt_dnstap_tls | dt_dnstap_tls_server_name | 2954366095Scy dt_dnstap_tls_cert_bundle | 2955366095Scy dt_dnstap_tls_client_key_file | dt_dnstap_tls_client_cert_file | 2956276605Sdes dt_dnstap_send_identity | dt_dnstap_send_version | 2957276605Sdes dt_dnstap_identity | dt_dnstap_version | 2958276605Sdes dt_dnstap_log_resolver_query_messages | 2959276605Sdes dt_dnstap_log_resolver_response_messages | 2960276605Sdes dt_dnstap_log_client_query_messages | 2961276605Sdes dt_dnstap_log_client_response_messages | 2962276605Sdes dt_dnstap_log_forwarder_query_messages | 2963276605Sdes dt_dnstap_log_forwarder_response_messages 2964276605Sdes ; 2965276605Sdesdt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG 2966276605Sdes { 2967276605Sdes OUTYY(("P(dt_dnstap_enable:%s)\n", $2)); 2968276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2969276605Sdes yyerror("expected yes or no."); 2970276605Sdes else cfg_parser->cfg->dnstap = (strcmp($2, "yes")==0); 2971356345Scy free($2); 2972276605Sdes } 2973276605Sdes ; 2974366095Scydt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG 2975366095Scy { 2976366095Scy OUTYY(("P(dt_dnstap_bidirectional:%s)\n", $2)); 2977366095Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2978366095Scy yyerror("expected yes or no."); 2979366095Scy else cfg_parser->cfg->dnstap_bidirectional = 2980366095Scy (strcmp($2, "yes")==0); 2981366095Scy free($2); 2982366095Scy } 2983366095Scy ; 2984276605Sdesdt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG 2985276605Sdes { 2986276605Sdes OUTYY(("P(dt_dnstap_socket_path:%s)\n", $2)); 2987276605Sdes free(cfg_parser->cfg->dnstap_socket_path); 2988276605Sdes cfg_parser->cfg->dnstap_socket_path = $2; 2989276605Sdes } 2990276605Sdes ; 2991366095Scydt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG 2992366095Scy { 2993366095Scy OUTYY(("P(dt_dnstap_ip:%s)\n", $2)); 2994366095Scy free(cfg_parser->cfg->dnstap_ip); 2995366095Scy cfg_parser->cfg->dnstap_ip = $2; 2996366095Scy } 2997366095Scy ; 2998366095Scydt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG 2999366095Scy { 3000366095Scy OUTYY(("P(dt_dnstap_tls:%s)\n", $2)); 3001366095Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3002366095Scy yyerror("expected yes or no."); 3003366095Scy else cfg_parser->cfg->dnstap_tls = (strcmp($2, "yes")==0); 3004366095Scy free($2); 3005366095Scy } 3006366095Scy ; 3007366095Scydt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG 3008366095Scy { 3009366095Scy OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", $2)); 3010366095Scy free(cfg_parser->cfg->dnstap_tls_server_name); 3011366095Scy cfg_parser->cfg->dnstap_tls_server_name = $2; 3012366095Scy } 3013366095Scy ; 3014366095Scydt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG 3015366095Scy { 3016366095Scy OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", $2)); 3017366095Scy free(cfg_parser->cfg->dnstap_tls_cert_bundle); 3018366095Scy cfg_parser->cfg->dnstap_tls_cert_bundle = $2; 3019366095Scy } 3020366095Scy ; 3021366095Scydt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG 3022366095Scy { 3023366095Scy OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", $2)); 3024366095Scy free(cfg_parser->cfg->dnstap_tls_client_key_file); 3025366095Scy cfg_parser->cfg->dnstap_tls_client_key_file = $2; 3026366095Scy } 3027366095Scy ; 3028366095Scydt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG 3029366095Scy { 3030366095Scy OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", $2)); 3031366095Scy free(cfg_parser->cfg->dnstap_tls_client_cert_file); 3032366095Scy cfg_parser->cfg->dnstap_tls_client_cert_file = $2; 3033366095Scy } 3034366095Scy ; 3035276605Sdesdt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG 3036276605Sdes { 3037276605Sdes OUTYY(("P(dt_dnstap_send_identity:%s)\n", $2)); 3038276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3039276605Sdes yyerror("expected yes or no."); 3040276605Sdes else cfg_parser->cfg->dnstap_send_identity = (strcmp($2, "yes")==0); 3041356345Scy free($2); 3042276605Sdes } 3043276605Sdes ; 3044276605Sdesdt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG 3045276605Sdes { 3046276605Sdes OUTYY(("P(dt_dnstap_send_version:%s)\n", $2)); 3047276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3048276605Sdes yyerror("expected yes or no."); 3049276605Sdes else cfg_parser->cfg->dnstap_send_version = (strcmp($2, "yes")==0); 3050356345Scy free($2); 3051276605Sdes } 3052276605Sdes ; 3053276605Sdesdt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG 3054276605Sdes { 3055276605Sdes OUTYY(("P(dt_dnstap_identity:%s)\n", $2)); 3056276605Sdes free(cfg_parser->cfg->dnstap_identity); 3057276605Sdes cfg_parser->cfg->dnstap_identity = $2; 3058276605Sdes } 3059276605Sdes ; 3060276605Sdesdt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG 3061276605Sdes { 3062276605Sdes OUTYY(("P(dt_dnstap_version:%s)\n", $2)); 3063276605Sdes free(cfg_parser->cfg->dnstap_version); 3064276605Sdes cfg_parser->cfg->dnstap_version = $2; 3065276605Sdes } 3066276605Sdes ; 3067276605Sdesdt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG 3068276605Sdes { 3069276605Sdes OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", $2)); 3070276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3071276605Sdes yyerror("expected yes or no."); 3072276605Sdes else cfg_parser->cfg->dnstap_log_resolver_query_messages = 3073276605Sdes (strcmp($2, "yes")==0); 3074356345Scy free($2); 3075276605Sdes } 3076276605Sdes ; 3077276605Sdesdt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG 3078276605Sdes { 3079276605Sdes OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", $2)); 3080276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3081276605Sdes yyerror("expected yes or no."); 3082276605Sdes else cfg_parser->cfg->dnstap_log_resolver_response_messages = 3083276605Sdes (strcmp($2, "yes")==0); 3084356345Scy free($2); 3085276605Sdes } 3086276605Sdes ; 3087276605Sdesdt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG 3088276605Sdes { 3089276605Sdes OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", $2)); 3090276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3091276605Sdes yyerror("expected yes or no."); 3092276605Sdes else cfg_parser->cfg->dnstap_log_client_query_messages = 3093276605Sdes (strcmp($2, "yes")==0); 3094356345Scy free($2); 3095276605Sdes } 3096276605Sdes ; 3097276605Sdesdt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG 3098276605Sdes { 3099276605Sdes OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", $2)); 3100276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3101276605Sdes yyerror("expected yes or no."); 3102276605Sdes else cfg_parser->cfg->dnstap_log_client_response_messages = 3103276605Sdes (strcmp($2, "yes")==0); 3104356345Scy free($2); 3105276605Sdes } 3106276605Sdes ; 3107276605Sdesdt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG 3108276605Sdes { 3109276605Sdes OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", $2)); 3110276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3111276605Sdes yyerror("expected yes or no."); 3112276605Sdes else cfg_parser->cfg->dnstap_log_forwarder_query_messages = 3113276605Sdes (strcmp($2, "yes")==0); 3114356345Scy free($2); 3115276605Sdes } 3116276605Sdes ; 3117276605Sdesdt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG 3118276605Sdes { 3119276605Sdes OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", $2)); 3120276605Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3121276605Sdes yyerror("expected yes or no."); 3122276605Sdes else cfg_parser->cfg->dnstap_log_forwarder_response_messages = 3123276605Sdes (strcmp($2, "yes")==0); 3124356345Scy free($2); 3125276605Sdes } 3126276605Sdes ; 3127238106Sdespythonstart: VAR_PYTHON 3128238106Sdes { 3129238106Sdes OUTYY(("\nP(python:)\n")); 3130238106Sdes } 3131238106Sdes ; 3132238106Sdescontents_py: contents_py content_py 3133238106Sdes | ; 3134238106Sdescontent_py: py_script 3135238106Sdes ; 3136238106Sdespy_script: VAR_PYTHON_SCRIPT STRING_ARG 3137238106Sdes { 3138238106Sdes OUTYY(("P(python-script:%s)\n", $2)); 3139356345Scy if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) 3140356345Scy yyerror("out of memory"); 3141238106Sdes } 3142366095Scydynlibstart: VAR_DYNLIB 3143366095Scy { 3144366095Scy OUTYY(("\nP(dynlib:)\n")); 3145366095Scy } 3146366095Scy ; 3147366095Scycontents_dl: contents_dl content_dl 3148366095Scy | ; 3149366095Scycontent_dl: dl_file 3150366095Scy ; 3151366095Scydl_file: VAR_DYNLIB_FILE STRING_ARG 3152366095Scy { 3153366095Scy OUTYY(("P(dynlib-file:%s)\n", $2)); 3154366095Scy if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) 3155366095Scy yyerror("out of memory"); 3156366095Scy } 3157307729Sdesserver_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG 3158307729Sdes { 3159307729Sdes OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); 3160307729Sdes if (strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3161307729Sdes yyerror("expected yes or no."); 3162307729Sdes else cfg_parser->cfg->disable_dnssec_lame_check = 3163307729Sdes (strcmp($2, "yes")==0); 3164307729Sdes free($2); 3165307729Sdes } 3166356345Scy ; 3167356345Scyserver_log_identity: VAR_LOG_IDENTITY STRING_ARG 3168356345Scy { 3169356345Scy OUTYY(("P(server_log_identity:%s)\n", $2)); 3170356345Scy free(cfg_parser->cfg->log_identity); 3171356345Scy cfg_parser->cfg->log_identity = $2; 3172356345Scy } 3173356345Scy ; 3174356345Scyserver_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG 3175356345Scy { 3176356345Scy OUTYY(("P(server_response_ip:%s %s)\n", $2, $3)); 3177356345Scy validate_respip_action($3); 3178356345Scy if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, 3179356345Scy $2, $3)) 3180356345Scy fatal_exit("out of memory adding response-ip"); 3181356345Scy } 3182356345Scy ; 3183356345Scyserver_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG 3184356345Scy { 3185356345Scy OUTYY(("P(server_response_ip_data:%s)\n", $2)); 3186356345Scy if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, 3187356345Scy $2, $3)) 3188356345Scy fatal_exit("out of memory adding response-ip-data"); 3189356345Scy } 3190356345Scy ; 3191356345Scydnscstart: VAR_DNSCRYPT 3192356345Scy { 3193356345Scy OUTYY(("\nP(dnscrypt:)\n")); 3194356345Scy } 3195356345Scy ; 3196356345Scycontents_dnsc: contents_dnsc content_dnsc 3197356345Scy | ; 3198356345Scycontent_dnsc: 3199356345Scy dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | 3200356345Scy dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | 3201356345Scy dnsc_dnscrypt_provider_cert_rotated | 3202356345Scy dnsc_dnscrypt_shared_secret_cache_size | 3203356345Scy dnsc_dnscrypt_shared_secret_cache_slabs | 3204356345Scy dnsc_dnscrypt_nonce_cache_size | 3205356345Scy dnsc_dnscrypt_nonce_cache_slabs 3206356345Scy ; 3207356345Scydnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG 3208356345Scy { 3209356345Scy OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", $2)); 3210356345Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3211356345Scy yyerror("expected yes or no."); 3212356345Scy else cfg_parser->cfg->dnscrypt = (strcmp($2, "yes")==0); 3213356345Scy free($2); 3214356345Scy } 3215356345Scy ; 3216356345Scy 3217356345Scydnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG 3218356345Scy { 3219356345Scy OUTYY(("P(dnsc_dnscrypt_port:%s)\n", $2)); 3220356345Scy if(atoi($2) == 0) 3221356345Scy yyerror("port number expected"); 3222356345Scy else cfg_parser->cfg->dnscrypt_port = atoi($2); 3223356345Scy free($2); 3224356345Scy } 3225356345Scy ; 3226356345Scydnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG 3227356345Scy { 3228356345Scy OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", $2)); 3229356345Scy free(cfg_parser->cfg->dnscrypt_provider); 3230356345Scy cfg_parser->cfg->dnscrypt_provider = $2; 3231356345Scy } 3232356345Scy ; 3233356345Scydnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG 3234356345Scy { 3235356345Scy OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2)); 3236356345Scy if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2)) 3237356345Scy log_warn("dnscrypt-provider-cert %s is a duplicate", $2); 3238356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2)) 3239356345Scy fatal_exit("out of memory adding dnscrypt-provider-cert"); 3240356345Scy } 3241356345Scy ; 3242356345Scydnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG 3243356345Scy { 3244356345Scy OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2)); 3245356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2)) 3246356345Scy fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); 3247356345Scy } 3248356345Scy ; 3249356345Scydnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG 3250356345Scy { 3251356345Scy OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2)); 3252356345Scy if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2)) 3253356345Scy log_warn("dnscrypt-secret-key: %s is a duplicate", $2); 3254356345Scy if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2)) 3255356345Scy fatal_exit("out of memory adding dnscrypt-secret-key"); 3256356345Scy } 3257356345Scy ; 3258356345Scydnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG 3259356345Scy { 3260356345Scy OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2)); 3261356345Scy if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) 3262356345Scy yyerror("memory size expected"); 3263356345Scy free($2); 3264356345Scy } 3265356345Scy ; 3266356345Scydnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG 3267356345Scy { 3268356345Scy OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2)); 3269356345Scy if(atoi($2) == 0) 3270356345Scy yyerror("number expected"); 3271356345Scy else { 3272356345Scy cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2); 3273356345Scy if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) 3274356345Scy yyerror("must be a power of 2"); 3275356345Scy } 3276356345Scy free($2); 3277356345Scy } 3278356345Scy ; 3279356345Scydnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG 3280356345Scy { 3281356345Scy OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2)); 3282356345Scy if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size)) 3283356345Scy yyerror("memory size expected"); 3284356345Scy free($2); 3285356345Scy } 3286356345Scy ; 3287356345Scydnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG 3288356345Scy { 3289356345Scy OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2)); 3290356345Scy if(atoi($2) == 0) 3291356345Scy yyerror("number expected"); 3292356345Scy else { 3293356345Scy cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2); 3294356345Scy if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) 3295356345Scy yyerror("must be a power of 2"); 3296356345Scy } 3297356345Scy free($2); 3298356345Scy } 3299356345Scy ; 3300356345Scycachedbstart: VAR_CACHEDB 3301356345Scy { 3302356345Scy OUTYY(("\nP(cachedb:)\n")); 3303356345Scy } 3304356345Scy ; 3305356345Scycontents_cachedb: contents_cachedb content_cachedb 3306356345Scy | ; 3307356345Scycontent_cachedb: cachedb_backend_name | cachedb_secret_seed | 3308366095Scy redis_server_host | redis_server_port | redis_timeout | 3309366095Scy redis_expire_records 3310356345Scy ; 3311356345Scycachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG 3312356345Scy { 3313356345Scy #ifdef USE_CACHEDB 3314356345Scy OUTYY(("P(backend:%s)\n", $2)); 3315356345Scy free(cfg_parser->cfg->cachedb_backend); 3316356345Scy cfg_parser->cfg->cachedb_backend = $2; 3317356345Scy #else 3318356345Scy OUTYY(("P(Compiled without cachedb, ignoring)\n")); 3319356345Scy free($2); 3320356345Scy #endif 3321356345Scy } 3322356345Scy ; 3323356345Scycachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG 3324356345Scy { 3325356345Scy #ifdef USE_CACHEDB 3326356345Scy OUTYY(("P(secret-seed:%s)\n", $2)); 3327356345Scy free(cfg_parser->cfg->cachedb_secret); 3328356345Scy cfg_parser->cfg->cachedb_secret = $2; 3329356345Scy #else 3330356345Scy OUTYY(("P(Compiled without cachedb, ignoring)\n")); 3331356345Scy free($2); 3332356345Scy #endif 3333356345Scy } 3334356345Scy ; 3335356345Scyredis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG 3336356345Scy { 3337356345Scy #if defined(USE_CACHEDB) && defined(USE_REDIS) 3338356345Scy OUTYY(("P(redis_server_host:%s)\n", $2)); 3339356345Scy free(cfg_parser->cfg->redis_server_host); 3340356345Scy cfg_parser->cfg->redis_server_host = $2; 3341356345Scy #else 3342356345Scy OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3343356345Scy free($2); 3344356345Scy #endif 3345356345Scy } 3346356345Scy ; 3347356345Scyredis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG 3348356345Scy { 3349356345Scy #if defined(USE_CACHEDB) && defined(USE_REDIS) 3350356345Scy int port; 3351356345Scy OUTYY(("P(redis_server_port:%s)\n", $2)); 3352356345Scy port = atoi($2); 3353356345Scy if(port == 0 || port < 0 || port > 65535) 3354356345Scy yyerror("valid redis server port number expected"); 3355356345Scy else cfg_parser->cfg->redis_server_port = port; 3356356345Scy #else 3357356345Scy OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3358356345Scy #endif 3359356345Scy free($2); 3360356345Scy } 3361356345Scy ; 3362356345Scyredis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG 3363356345Scy { 3364356345Scy #if defined(USE_CACHEDB) && defined(USE_REDIS) 3365356345Scy OUTYY(("P(redis_timeout:%s)\n", $2)); 3366356345Scy if(atoi($2) == 0) 3367356345Scy yyerror("redis timeout value expected"); 3368356345Scy else cfg_parser->cfg->redis_timeout = atoi($2); 3369356345Scy #else 3370356345Scy OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3371356345Scy #endif 3372356345Scy free($2); 3373356345Scy } 3374356345Scy ; 3375366095Scyredis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG 3376366095Scy { 3377366095Scy #if defined(USE_CACHEDB) && defined(USE_REDIS) 3378366095Scy OUTYY(("P(redis_expire_records:%s)\n", $2)); 3379366095Scy if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3380366095Scy yyerror("expected yes or no."); 3381366095Scy else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0); 3382366095Scy #else 3383366095Scy OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3384366095Scy #endif 3385366095Scy free($2); 3386366095Scy } 3387366095Scy ; 3388356345Scyserver_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG 3389356345Scy { 3390356345Scy OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); 3391356345Scy if (atoi($3) < 0) 3392356345Scy yyerror("positive number expected"); 3393356345Scy else { 3394356345Scy if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, $2, $3)) 3395356345Scy fatal_exit("out of memory adding tcp connection limit"); 3396356345Scy } 3397356345Scy } 3398356345Scy ; 3399356345Scy ipsetstart: VAR_IPSET 3400356345Scy { 3401356345Scy OUTYY(("\nP(ipset:)\n")); 3402356345Scy } 3403356345Scy ; 3404356345Scy contents_ipset: contents_ipset content_ipset 3405356345Scy | ; 3406356345Scy content_ipset: ipset_name_v4 | ipset_name_v6 3407356345Scy ; 3408356345Scy ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG 3409356345Scy { 3410356345Scy #ifdef USE_IPSET 3411356345Scy OUTYY(("P(name-v4:%s)\n", $2)); 3412356345Scy if(cfg_parser->cfg->ipset_name_v4) 3413356345Scy yyerror("ipset name v4 override, there must be one " 3414356345Scy "name for ip v4"); 3415356345Scy free(cfg_parser->cfg->ipset_name_v4); 3416356345Scy cfg_parser->cfg->ipset_name_v4 = $2; 3417356345Scy #else 3418356345Scy OUTYY(("P(Compiled without ipset, ignoring)\n")); 3419356345Scy free($2); 3420356345Scy #endif 3421356345Scy } 3422356345Scy ; 3423356345Scy ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG 3424356345Scy { 3425356345Scy #ifdef USE_IPSET 3426356345Scy OUTYY(("P(name-v6:%s)\n", $2)); 3427356345Scy if(cfg_parser->cfg->ipset_name_v6) 3428356345Scy yyerror("ipset name v6 override, there must be one " 3429356345Scy "name for ip v6"); 3430356345Scy free(cfg_parser->cfg->ipset_name_v6); 3431356345Scy cfg_parser->cfg->ipset_name_v6 = $2; 3432356345Scy #else 3433356345Scy OUTYY(("P(Compiled without ipset, ignoring)\n")); 3434356345Scy free($2); 3435356345Scy #endif 3436356345Scy } 3437356345Scy ; 3438238106Sdes%% 3439238106Sdes 3440238106Sdes/* parse helper routines could be here */ 3441356345Scystatic void 3442356345Scyvalidate_respip_action(const char* action) 3443356345Scy{ 3444356345Scy if(strcmp(action, "deny")!=0 && 3445356345Scy strcmp(action, "redirect")!=0 && 3446356345Scy strcmp(action, "inform")!=0 && 3447356345Scy strcmp(action, "inform_deny")!=0 && 3448356345Scy strcmp(action, "always_transparent")!=0 && 3449356345Scy strcmp(action, "always_refuse")!=0 && 3450356345Scy strcmp(action, "always_nxdomain")!=0) 3451356345Scy { 3452356345Scy yyerror("response-ip action: expected deny, redirect, " 3453356345Scy "inform, inform_deny, always_transparent, " 3454356345Scy "always_refuse or always_nxdomain"); 3455356345Scy } 3456356345Scy} 3457356345Scy 3458356345Scy 3459