1933707f3Ssthen /* 2933707f3Ssthen * configparser.y -- yacc grammar for unbound configuration files 3933707f3Ssthen * 4933707f3Ssthen * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. 5933707f3Ssthen * 6933707f3Ssthen * Copyright (c) 2007, NLnet Labs. All rights reserved. 7933707f3Ssthen * 8933707f3Ssthen * This software is open source. 9933707f3Ssthen * 10933707f3Ssthen * Redistribution and use in source and binary forms, with or without 11933707f3Ssthen * modification, are permitted provided that the following conditions 12933707f3Ssthen * are met: 13933707f3Ssthen * 14933707f3Ssthen * Redistributions of source code must retain the above copyright notice, 15933707f3Ssthen * this list of conditions and the following disclaimer. 16933707f3Ssthen * 17933707f3Ssthen * Redistributions in binary form must reproduce the above copyright notice, 18933707f3Ssthen * this list of conditions and the following disclaimer in the documentation 19933707f3Ssthen * and/or other materials provided with the distribution. 20933707f3Ssthen * 21933707f3Ssthen * Neither the name of the NLNET LABS nor the names of its contributors may 22933707f3Ssthen * be used to endorse or promote products derived from this software without 23933707f3Ssthen * specific prior written permission. 24933707f3Ssthen * 25933707f3Ssthen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 265d76a658Ssthen * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 275d76a658Ssthen * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 285d76a658Ssthen * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 295d76a658Ssthen * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 305d76a658Ssthen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 315d76a658Ssthen * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 325d76a658Ssthen * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 335d76a658Ssthen * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 345d76a658Ssthen * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 355d76a658Ssthen * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36933707f3Ssthen */ 37933707f3Ssthen 38933707f3Ssthen %{ 39933707f3Ssthen #include "config.h" 40933707f3Ssthen 41933707f3Ssthen #include <stdarg.h> 42933707f3Ssthen #include <stdio.h> 43933707f3Ssthen #include <string.h> 44933707f3Ssthen #include <stdlib.h> 45933707f3Ssthen #include <assert.h> 46933707f3Ssthen 47933707f3Ssthen #include "util/configyyrename.h" 48933707f3Ssthen #include "util/config_file.h" 49933707f3Ssthen #include "util/net_help.h" 508b7325afSsthen #include "sldns/str2wire.h" 51933707f3Ssthen 52933707f3Ssthen int ub_c_lex(void); 53933707f3Ssthen void ub_c_error(const char *message); 54933707f3Ssthen 552be9e038Ssthen static void validate_respip_action(const char* action); 5645872187Ssthen static void validate_acl_action(const char* action); 572be9e038Ssthen 58933707f3Ssthen /* these need to be global, otherwise they cannot be used inside yacc */ 59933707f3Ssthen extern struct config_parser_state* cfg_parser; 60933707f3Ssthen 61933707f3Ssthen #if 0 62933707f3Ssthen #define OUTYY(s) printf s /* used ONLY when debugging */ 63933707f3Ssthen #else 64933707f3Ssthen #define OUTYY(s) 65933707f3Ssthen #endif 66933707f3Ssthen 67933707f3Ssthen %} 68933707f3Ssthen %union { 69933707f3Ssthen char* str; 70933707f3Ssthen }; 71933707f3Ssthen 72933707f3Ssthen %token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR 73933707f3Ssthen %token <str> STRING_ARG 74a3167c07Ssthen %token VAR_FORCE_TOPLEVEL 75933707f3Ssthen %token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT 76a3167c07Ssthen %token VAR_OUTGOING_RANGE VAR_INTERFACE VAR_PREFER_IP4 778b7325afSsthen %token VAR_DO_IP4 VAR_DO_IP6 VAR_DO_NAT64 VAR_PREFER_IP6 VAR_DO_UDP VAR_DO_TCP 782308e98cSsthen %token VAR_TCP_MSS VAR_OUTGOING_TCP_MSS VAR_TCP_IDLE_TIMEOUT 792308e98cSsthen %token VAR_EDNS_TCP_KEEPALIVE VAR_EDNS_TCP_KEEPALIVE_TIMEOUT 808b7325afSsthen %token VAR_SOCK_QUEUE_TIMEOUT 81933707f3Ssthen %token VAR_CHROOT VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE 82933707f3Ssthen %token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS VAR_NUM_QUERIES_PER_THREAD 83933707f3Ssthen %token VAR_RRSET_CACHE_SIZE VAR_RRSET_CACHE_SLABS VAR_OUTGOING_NUM_TCP 84933707f3Ssthen %token VAR_INFRA_HOST_TTL VAR_INFRA_LAME_TTL VAR_INFRA_CACHE_SLABS 85933707f3Ssthen %token VAR_INFRA_CACHE_NUMHOSTS VAR_INFRA_CACHE_LAME_SIZE VAR_NAME 86933707f3Ssthen %token VAR_STUB_ZONE VAR_STUB_HOST VAR_STUB_ADDR VAR_TARGET_FETCH_POLICY 87933707f3Ssthen %token VAR_HARDEN_SHORT_BUFSIZE VAR_HARDEN_LARGE_QUERIES 88933707f3Ssthen %token VAR_FORWARD_ZONE VAR_FORWARD_HOST VAR_FORWARD_ADDR 89933707f3Ssthen %token VAR_DO_NOT_QUERY_ADDRESS VAR_HIDE_IDENTITY VAR_HIDE_VERSION 90933707f3Ssthen %token VAR_IDENTITY VAR_VERSION VAR_HARDEN_GLUE VAR_MODULE_CONF 91933707f3Ssthen %token VAR_TRUST_ANCHOR_FILE VAR_TRUST_ANCHOR VAR_VAL_OVERRIDE_DATE 92933707f3Ssthen %token VAR_BOGUS_TTL VAR_VAL_CLEAN_ADDITIONAL VAR_VAL_PERMISSIVE_MODE 93933707f3Ssthen %token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE 94933707f3Ssthen %token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE 95933707f3Ssthen %token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG 96933707f3Ssthen %token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST 97933707f3Ssthen %token VAR_CACHE_MAX_TTL VAR_HARDEN_DNSSEC_STRIPPED VAR_ACCESS_CONTROL 98933707f3Ssthen %token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC 99933707f3Ssthen %token VAR_STATISTICS_INTERVAL VAR_DO_DAEMONIZE VAR_USE_CAPS_FOR_ID 100933707f3Ssthen %token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT 101933707f3Ssthen %token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR 102933707f3Ssthen %token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS 103933707f3Ssthen %token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE 104933707f3Ssthen %token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE 105933707f3Ssthen %token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE 106191f22c6Ssthen %token VAR_CONTROL_USE_CERT VAR_TCP_REUSE_TIMEOUT VAR_MAX_REUSE_TCP_QUERIES 107933707f3Ssthen %token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT 108933707f3Ssthen %token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII 109933707f3Ssthen %token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN 110191f22c6Ssthen %token VAR_VAL_SIG_SKEW_MAX VAR_VAL_MAX_RESTART VAR_CACHE_MIN_TTL 111191f22c6Ssthen %token VAR_VAL_LOG_LEVEL VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING 112191f22c6Ssthen %token VAR_ADD_HOLDDOWN VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE 113191f22c6Ssthen %token VAR_PREFETCH VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT 114191f22c6Ssthen %token VAR_HARDEN_BELOW_NXDOMAIN VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES 115191f22c6Ssthen %token VAR_LOG_REPLIES VAR_LOG_LOCAL_ACTIONS VAR_TCP_UPSTREAM 116191f22c6Ssthen %token VAR_SSL_UPSTREAM VAR_TCP_AUTH_QUERY_TIMEOUT VAR_SSL_SERVICE_KEY 117191f22c6Ssthen %token VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST 118938a3a5eSflorian %token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM VAR_TLS_CERT_BUNDLE 119e21c60efSsthen %token VAR_STUB_TCP_UPSTREAM VAR_FORWARD_TCP_UPSTREAM 1202c144df0Ssthen %token VAR_HTTPS_PORT VAR_HTTP_ENDPOINT VAR_HTTP_MAX_STREAMS 1212c144df0Ssthen %token VAR_HTTP_QUERY_BUFFER_SIZE VAR_HTTP_RESPONSE_BUFFER_SIZE 122eba819a2Ssthen %token VAR_HTTP_NODELAY VAR_HTTP_NOTLS_DOWNSTREAM 123d8d14d0cSsthen %token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN 124eba819a2Ssthen %token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UDP_CONNECT 12532e31f52Ssthen %token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES 126d1e2768aSsthen %token VAR_INFRA_CACHE_MIN_RTT VAR_INFRA_CACHE_MAX_RTT VAR_INFRA_KEEP_PROBING 1272308e98cSsthen %token VAR_DNS64_PREFIX VAR_DNS64_SYNTHALL VAR_DNS64_IGNORE_AAAA 1288b7325afSsthen %token VAR_NAT64_PREFIX 129a3167c07Ssthen %token VAR_DNSTAP VAR_DNSTAP_ENABLE VAR_DNSTAP_SOCKET_PATH VAR_DNSTAP_IP 130a3167c07Ssthen %token VAR_DNSTAP_TLS VAR_DNSTAP_TLS_SERVER_NAME VAR_DNSTAP_TLS_CERT_BUNDLE 131a3167c07Ssthen %token VAR_DNSTAP_TLS_CLIENT_KEY_FILE VAR_DNSTAP_TLS_CLIENT_CERT_FILE 132a3167c07Ssthen %token VAR_DNSTAP_SEND_IDENTITY VAR_DNSTAP_SEND_VERSION VAR_DNSTAP_BIDIRECTIONAL 13398f3ca02Sbrad %token VAR_DNSTAP_IDENTITY VAR_DNSTAP_VERSION 13498f3ca02Sbrad %token VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES 13598f3ca02Sbrad %token VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES 13698f3ca02Sbrad %token VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES 13798f3ca02Sbrad %token VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES 13898f3ca02Sbrad %token VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES 13998f3ca02Sbrad %token VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES 140*98bc733bSsthen %token VAR_DNSTAP_SAMPLE_RATE 1412be9e038Ssthen %token VAR_RESPONSE_IP_TAG VAR_RESPONSE_IP VAR_RESPONSE_IP_DATA 142fdfb4ba6Ssthen %token VAR_HARDEN_ALGO_DOWNGRADE VAR_IP_TRANSPARENT 143a3167c07Ssthen %token VAR_IP_DSCP 1442ee382b6Ssthen %token VAR_DISABLE_DNSSEC_LAME_CHECK 14577079be7Ssthen %token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE 146fdfb4ba6Ssthen %token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE 1478b7325afSsthen %token VAR_OUTBOUND_MSG_RETRY VAR_MAX_SENT_COUNT VAR_MAX_QUERY_RESTARTS 14877079be7Ssthen %token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN 14977079be7Ssthen %token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR 150e21c60efSsthen %token VAR_IP_RATELIMIT_BACKOFF VAR_RATELIMIT_BACKOFF 1512be9e038Ssthen %token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE 1522be9e038Ssthen %token VAR_CLIENT_SUBNET_ALWAYS_FORWARD VAR_CLIENT_SUBNET_OPCODE 1532be9e038Ssthen %token VAR_MAX_CLIENT_SUBNET_IPV4 VAR_MAX_CLIENT_SUBNET_IPV6 1543150e5f6Ssthen %token VAR_MIN_CLIENT_SUBNET_IPV4 VAR_MIN_CLIENT_SUBNET_IPV6 1553150e5f6Ssthen %token VAR_MAX_ECS_TREE_SIZE_IPV4 VAR_MAX_ECS_TREE_SIZE_IPV6 156a961b961Ssthen %token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN 1572bdc0ed1Ssthen %token VAR_CACHE_MIN_NEGATIVE_TTL 15877079be7Ssthen %token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND 15977079be7Ssthen %token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG 16077079be7Ssthen %token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION 16177079be7Ssthen %token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW 1622308e98cSsthen %token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_SERVE_EXPIRED_TTL 163eaf2578eSsthen %token VAR_SERVE_EXPIRED_TTL_RESET VAR_SERVE_EXPIRED_REPLY_TTL 1640bdb4f62Ssthen %token VAR_SERVE_EXPIRED_CLIENT_TIMEOUT VAR_EDE_SERVE_EXPIRED 1650bdb4f62Ssthen %token VAR_SERVE_ORIGINAL_TTL VAR_FAKE_DSA 166eaf2578eSsthen %token VAR_FAKE_SHA1 VAR_LOG_IDENTITY VAR_HIDE_TRUSTANCHOR 167191f22c6Ssthen %token VAR_HIDE_HTTP_USER_AGENT VAR_HTTP_USER_AGENT 168eaf2578eSsthen %token VAR_TRUST_ANCHOR_SIGNALING VAR_AGGRESSIVE_NSEC VAR_USE_SYSTEMD 169eaf2578eSsthen %token VAR_SHM_ENABLE VAR_SHM_KEY VAR_ROOT_KEY_SENTINEL 1702be9e038Ssthen %token VAR_DNSCRYPT VAR_DNSCRYPT_ENABLE VAR_DNSCRYPT_PORT VAR_DNSCRYPT_PROVIDER 1712be9e038Ssthen %token VAR_DNSCRYPT_SECRET_KEY VAR_DNSCRYPT_PROVIDER_CERT 172bdfc4d55Sflorian %token VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 1737191de28Ssthen %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 1747191de28Ssthen %token VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 175bdfc4d55Sflorian %token VAR_DNSCRYPT_NONCE_CACHE_SIZE 176bdfc4d55Sflorian %token VAR_DNSCRYPT_NONCE_CACHE_SLABS 1779982a05dSsthen %token VAR_PAD_RESPONSES VAR_PAD_RESPONSES_BLOCK_SIZE 1789982a05dSsthen %token VAR_PAD_QUERIES VAR_PAD_QUERIES_BLOCK_SIZE 1792be9e038Ssthen %token VAR_IPSECMOD_ENABLED VAR_IPSECMOD_HOOK VAR_IPSECMOD_IGNORE_BOGUS 1802be9e038Ssthen %token VAR_IPSECMOD_MAX_TTL VAR_IPSECMOD_WHITELIST VAR_IPSECMOD_STRICT 1817191de28Ssthen %token VAR_CACHEDB VAR_CACHEDB_BACKEND VAR_CACHEDB_SECRETSEED 18220237c55Ssthen %token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT 1838b7325afSsthen %token VAR_CACHEDB_REDISEXPIRERECORDS VAR_CACHEDB_REDISPATH VAR_CACHEDB_REDISPASSWORD 184d896b962Ssthen %token VAR_CACHEDB_REDISLOGICALDB 185bdfc4d55Sflorian %token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM 186bdfc4d55Sflorian %token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM 18720237c55Ssthen %token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL 1883150e5f6Ssthen %token VAR_FAST_SERVER_PERMIL VAR_FAST_SERVER_NUM 1892308e98cSsthen %token VAR_ALLOW_NOTIFY VAR_TLS_WIN_CERT VAR_TCP_CONNECTION_LIMIT 1908b7325afSsthen %token VAR_ANSWER_COOKIE VAR_COOKIE_SECRET VAR_IP_RATELIMIT_COOKIE 1913150e5f6Ssthen %token VAR_FORWARD_NO_CACHE VAR_STUB_NO_CACHE VAR_LOG_SERVFAIL VAR_DENY_ANY 192f6b99bafSsthen %token VAR_UNKNOWN_SERVER_TIME_LIMIT VAR_LOG_TAG_QUERYREPLY 1932bdc0ed1Ssthen %token VAR_DISCARD_TIMEOUT VAR_WAIT_LIMIT VAR_WAIT_LIMIT_COOKIE 1942bdc0ed1Ssthen %token VAR_WAIT_LIMIT_NETBLOCK VAR_WAIT_LIMIT_COOKIE_NETBLOCK 195a3167c07Ssthen %token VAR_STREAM_WAIT_SIZE VAR_TLS_CIPHERS VAR_TLS_CIPHERSUITES VAR_TLS_USE_SNI 1968240c1b9Ssthen %token VAR_IPSET VAR_IPSET_NAME_V4 VAR_IPSET_NAME_V6 197eaf2578eSsthen %token VAR_TLS_SESSION_TICKET_KEYS VAR_RPZ VAR_TAGS VAR_RPZ_ACTION_OVERRIDE 198eaf2578eSsthen %token VAR_RPZ_CNAME_OVERRIDE VAR_RPZ_LOG VAR_RPZ_LOG_NAME 199eba819a2Ssthen %token VAR_DYNLIB VAR_DYNLIB_FILE VAR_EDNS_CLIENT_STRING 2009982a05dSsthen %token VAR_EDNS_CLIENT_STRING_OPCODE VAR_NSID 201191f22c6Ssthen %token VAR_ZONEMD_PERMISSIVE_MODE VAR_ZONEMD_CHECK VAR_ZONEMD_REJECT_ABSENCE 2020bdb4f62Ssthen %token VAR_RPZ_SIGNAL_NXDOMAIN_RA VAR_INTERFACE_AUTOMATIC_PORTS VAR_EDE 20345872187Ssthen %token VAR_INTERFACE_ACTION VAR_INTERFACE_VIEW VAR_INTERFACE_TAG 20445872187Ssthen %token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA 2058b7325afSsthen %token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO 206d896b962Ssthen %token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE 2072bdc0ed1Ssthen %token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED 208*98bc733bSsthen %token VAR_COOKIE_SECRET_FILE 209933707f3Ssthen 210933707f3Ssthen %% 211933707f3Ssthen toplevelvars: /* empty */ | toplevelvars toplevelvar ; 212933707f3Ssthen toplevelvar: serverstart contents_server | stubstart contents_stub | 213933707f3Ssthen forwardstart contents_forward | pythonstart contents_py | 214bdfc4d55Sflorian rcstart contents_rc | dtstart contents_dt | viewstart contents_view | 215bdfc4d55Sflorian dnscstart contents_dnsc | cachedbstart contents_cachedb | 216eaf2578eSsthen ipsetstart contents_ipset | authstart contents_auth | 217a3167c07Ssthen rpzstart contents_rpz | dynlibstart contents_dl | 218a3167c07Ssthen force_toplevel 219933707f3Ssthen ; 220a3167c07Ssthen force_toplevel: VAR_FORCE_TOPLEVEL 221a3167c07Ssthen { 222a3167c07Ssthen OUTYY(("\nP(force-toplevel)\n")); 22345872187Ssthen cfg_parser->started_toplevel = 0; 224a3167c07Ssthen } 225a3167c07Ssthen ; 226933707f3Ssthen /* server: declaration */ 227933707f3Ssthen serverstart: VAR_SERVER 228933707f3Ssthen { 229933707f3Ssthen OUTYY(("\nP(server:)\n")); 23045872187Ssthen cfg_parser->started_toplevel = 1; 231933707f3Ssthen } 232933707f3Ssthen ; 233933707f3Ssthen contents_server: contents_server content_server 234933707f3Ssthen | ; 235933707f3Ssthen content_server: server_num_threads | server_verbosity | server_port | 236933707f3Ssthen server_outgoing_range | server_do_ip4 | 2378b7325afSsthen server_do_ip6 | server_do_nat64 | server_prefer_ip4 | 2388b7325afSsthen server_prefer_ip6 | server_do_udp | server_do_tcp | 2392308e98cSsthen server_tcp_mss | server_outgoing_tcp_mss | server_tcp_idle_timeout | 2402308e98cSsthen server_tcp_keepalive | server_tcp_keepalive_timeout | 2418b7325afSsthen server_sock_queue_timeout | 242933707f3Ssthen server_interface | server_chroot | server_username | 243933707f3Ssthen server_directory | server_logfile | server_pidfile | 244933707f3Ssthen server_msg_cache_size | server_msg_cache_slabs | 245933707f3Ssthen server_num_queries_per_thread | server_rrset_cache_size | 246933707f3Ssthen server_rrset_cache_slabs | server_outgoing_num_tcp | 247933707f3Ssthen server_infra_host_ttl | server_infra_lame_ttl | 248933707f3Ssthen server_infra_cache_slabs | server_infra_cache_numhosts | 249933707f3Ssthen server_infra_cache_lame_size | server_target_fetch_policy | 250933707f3Ssthen server_harden_short_bufsize | server_harden_large_queries | 251933707f3Ssthen server_do_not_query_address | server_hide_identity | 252933707f3Ssthen server_hide_version | server_identity | server_version | 253191f22c6Ssthen server_hide_http_user_agent | server_http_user_agent | 254933707f3Ssthen server_harden_glue | server_module_conf | server_trust_anchor_file | 255933707f3Ssthen server_trust_anchor | server_val_override_date | server_bogus_ttl | 256933707f3Ssthen server_val_clean_additional | server_val_permissive_mode | 257933707f3Ssthen server_incoming_num_tcp | server_msg_buffer_size | 258933707f3Ssthen server_key_cache_size | server_key_cache_slabs | 259933707f3Ssthen server_trusted_keys_file | server_val_nsec3_keysize_iterations | 260933707f3Ssthen server_use_syslog | server_outgoing_interface | server_root_hints | 261933707f3Ssthen server_do_not_query_localhost | server_cache_max_ttl | 262933707f3Ssthen server_harden_dnssec_stripped | server_access_control | 263933707f3Ssthen server_local_zone | server_local_data | server_interface_automatic | 264933707f3Ssthen server_statistics_interval | server_do_daemonize | 265933707f3Ssthen server_use_caps_for_id | server_statistics_cumulative | 266933707f3Ssthen server_outgoing_port_permit | server_outgoing_port_avoid | 267933707f3Ssthen server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | 268933707f3Ssthen server_harden_referral_path | server_private_address | 269933707f3Ssthen server_private_domain | server_extended_statistics | 270933707f3Ssthen server_local_data_ptr | server_jostle_timeout | 271933707f3Ssthen server_unwanted_reply_threshold | server_log_time_ascii | 272933707f3Ssthen server_domain_insecure | server_val_sig_skew_min | 273191f22c6Ssthen server_val_sig_skew_max | server_val_max_restart | 274191f22c6Ssthen server_cache_min_ttl | server_val_log_level | 275933707f3Ssthen server_auto_trust_anchor_file | server_add_holddown | 276933707f3Ssthen server_del_holddown | server_keep_missing | server_so_rcvbuf | 277933707f3Ssthen server_edns_buffer_size | server_prefetch | server_prefetch_key | 278933707f3Ssthen server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag | 27977079be7Ssthen server_log_queries | server_log_replies | server_tcp_upstream | server_ssl_upstream | 2802308e98cSsthen server_log_local_actions | 281d8d14d0cSsthen server_ssl_service_key | server_ssl_service_pem | server_ssl_port | 2822c144df0Ssthen server_https_port | server_http_endpoint | server_http_max_streams | 2832c144df0Ssthen server_http_query_buffer_size | server_http_response_buffer_size | 284eba819a2Ssthen server_http_nodelay | server_http_notls_downstream | 2855d76a658Ssthen server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | 286eba819a2Ssthen server_so_reuseport | server_delay_close | server_udp_connect | 28732e31f52Ssthen server_unblock_lan_zones | server_insecure_lan_zones | 2882308e98cSsthen server_dns64_prefix | server_dns64_synthall | server_dns64_ignore_aaaa | 2898b7325afSsthen server_nat64_prefix | 290d1e2768aSsthen server_infra_cache_min_rtt | server_infra_cache_max_rtt | server_harden_algo_downgrade | 29177079be7Ssthen server_ip_transparent | server_ip_ratelimit | server_ratelimit | 292eba819a2Ssthen server_ip_dscp | server_infra_keep_probing | 29377079be7Ssthen server_ip_ratelimit_slabs | server_ratelimit_slabs | 29477079be7Ssthen server_ip_ratelimit_size | server_ratelimit_size | 29577079be7Ssthen server_ratelimit_for_domain | 296fdfb4ba6Ssthen server_ratelimit_below_domain | server_ratelimit_factor | 297e21c60efSsthen server_ip_ratelimit_factor | server_ratelimit_backoff | 298e21c60efSsthen server_ip_ratelimit_backoff | server_outbound_msg_retry | 2998b7325afSsthen server_max_sent_count | server_max_query_restarts | 300e21c60efSsthen server_send_client_subnet | server_client_subnet_zone | 301e21c60efSsthen server_client_subnet_always_forward | server_client_subnet_opcode | 3022be9e038Ssthen server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 | 3033150e5f6Ssthen server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 | 3043150e5f6Ssthen server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 | 305a961b961Ssthen server_caps_whitelist | server_cache_max_negative_ttl | 3062bdc0ed1Ssthen server_cache_min_negative_ttl | 3072ee382b6Ssthen server_permit_small_holddown | server_qname_minimisation | 3082ee382b6Ssthen server_ip_freebind | server_define_tag | server_local_zone_tag | 30977079be7Ssthen server_disable_dnssec_lame_check | server_access_control_tag | 31077079be7Ssthen server_local_zone_override | server_access_control_tag_action | 31177079be7Ssthen server_access_control_tag_data | server_access_control_view | 31245872187Ssthen server_interface_action | server_interface_view | server_interface_tag | 31345872187Ssthen server_interface_tag_action | server_interface_tag_data | 3149982a05dSsthen server_qname_minimisation_strict | 3159982a05dSsthen server_pad_responses | server_pad_responses_block_size | 3169982a05dSsthen server_pad_queries | server_pad_queries_block_size | 3179982a05dSsthen server_serve_expired | 3182308e98cSsthen server_serve_expired_ttl | server_serve_expired_ttl_reset | 319eaf2578eSsthen server_serve_expired_reply_ttl | server_serve_expired_client_timeout | 3200bdb4f62Ssthen server_ede_serve_expired | server_serve_original_ttl | server_fake_dsa | 3219982a05dSsthen server_log_identity | server_use_systemd | 3222be9e038Ssthen server_response_ip_tag | server_response_ip | server_response_ip_data | 3232be9e038Ssthen server_shm_enable | server_shm_key | server_fake_sha1 | 3242be9e038Ssthen server_hide_trustanchor | server_trust_anchor_signaling | 32520237c55Ssthen server_root_key_sentinel | 3262be9e038Ssthen server_ipsecmod_enabled | server_ipsecmod_hook | 3272be9e038Ssthen server_ipsecmod_ignore_bogus | server_ipsecmod_max_ttl | 328bdfc4d55Sflorian server_ipsecmod_whitelist | server_ipsecmod_strict | 329938a3a5eSflorian server_udp_upstream_without_downstream | server_aggressive_nsec | 33020237c55Ssthen server_tls_cert_bundle | server_tls_additional_port | server_low_rtt | 3313150e5f6Ssthen server_fast_server_permil | server_fast_server_num | server_tls_win_cert | 3323150e5f6Ssthen server_tcp_connection_limit | server_log_servfail | server_deny_any | 333f6b99bafSsthen server_unknown_server_time_limit | server_log_tag_queryreply | 3342bdc0ed1Ssthen server_discard_timeout | server_wait_limit | server_wait_limit_cookie | 3352bdc0ed1Ssthen server_wait_limit_netblock | server_wait_limit_cookie_netblock | 336f6b99bafSsthen server_stream_wait_size | server_tls_ciphers | 337a3167c07Ssthen server_tls_ciphersuites | server_tls_session_ticket_keys | 3388b7325afSsthen server_answer_cookie | server_cookie_secret | server_ip_ratelimit_cookie | 339eba819a2Ssthen server_tls_use_sni | server_edns_client_string | 340191f22c6Ssthen server_edns_client_string_opcode | server_nsid | 341191f22c6Ssthen server_zonemd_permissive_mode | server_max_reuse_tcp_queries | 3420bdb4f62Ssthen server_tcp_reuse_timeout | server_tcp_auth_query_timeout | 34345872187Ssthen server_interface_automatic_ports | server_ede | 3448b7325afSsthen server_proxy_protocol_port | server_statistics_inhibit_zero | 345f46c52bfSsthen server_harden_unknown_additional | server_disable_edns_do | 346*98bc733bSsthen server_log_destaddr | server_cookie_secret_file 347933707f3Ssthen ; 348933707f3Ssthen stubstart: VAR_STUB_ZONE 349933707f3Ssthen { 350933707f3Ssthen struct config_stub* s; 351933707f3Ssthen OUTYY(("\nP(stub_zone:)\n")); 35245872187Ssthen cfg_parser->started_toplevel = 1; 353933707f3Ssthen s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 354933707f3Ssthen if(s) { 355933707f3Ssthen s->next = cfg_parser->cfg->stubs; 356933707f3Ssthen cfg_parser->cfg->stubs = s; 357e21c60efSsthen } else { 358933707f3Ssthen yyerror("out of memory"); 359933707f3Ssthen } 360e21c60efSsthen } 361933707f3Ssthen ; 362*98bc733bSsthen contents_stub: content_stub contents_stub 363*98bc733bSsthen | 364*98bc733bSsthen { 365*98bc733bSsthen /* stub end */ 366*98bc733bSsthen if(cfg_parser->cfg->stubs && 367*98bc733bSsthen !cfg_parser->cfg->stubs->name) 368*98bc733bSsthen yyerror("stub-zone without name"); 369*98bc733bSsthen }; 37077079be7Ssthen content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first | 371e21c60efSsthen stub_no_cache | stub_ssl_upstream | stub_tcp_upstream 372933707f3Ssthen ; 373933707f3Ssthen forwardstart: VAR_FORWARD_ZONE 374933707f3Ssthen { 375933707f3Ssthen struct config_stub* s; 376933707f3Ssthen OUTYY(("\nP(forward_zone:)\n")); 37745872187Ssthen cfg_parser->started_toplevel = 1; 378933707f3Ssthen s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 379933707f3Ssthen if(s) { 380933707f3Ssthen s->next = cfg_parser->cfg->forwards; 381933707f3Ssthen cfg_parser->cfg->forwards = s; 382e21c60efSsthen } else { 383933707f3Ssthen yyerror("out of memory"); 384933707f3Ssthen } 385e21c60efSsthen } 386933707f3Ssthen ; 387*98bc733bSsthen contents_forward: content_forward contents_forward 388*98bc733bSsthen | 389*98bc733bSsthen { 390*98bc733bSsthen /* forward end */ 391*98bc733bSsthen if(cfg_parser->cfg->forwards && 392*98bc733bSsthen !cfg_parser->cfg->forwards->name) 393*98bc733bSsthen yyerror("forward-zone without name"); 394*98bc733bSsthen }; 39577079be7Ssthen content_forward: forward_name | forward_host | forward_addr | forward_first | 396e21c60efSsthen forward_no_cache | forward_ssl_upstream | forward_tcp_upstream 39777079be7Ssthen ; 39877079be7Ssthen viewstart: VAR_VIEW 39977079be7Ssthen { 40077079be7Ssthen struct config_view* s; 40177079be7Ssthen OUTYY(("\nP(view:)\n")); 40245872187Ssthen cfg_parser->started_toplevel = 1; 40377079be7Ssthen s = (struct config_view*)calloc(1, sizeof(struct config_view)); 40477079be7Ssthen if(s) { 40577079be7Ssthen s->next = cfg_parser->cfg->views; 40677079be7Ssthen cfg_parser->cfg->views = s; 407e21c60efSsthen } else { 40877079be7Ssthen yyerror("out of memory"); 40977079be7Ssthen } 410e21c60efSsthen } 41177079be7Ssthen ; 412*98bc733bSsthen contents_view: content_view contents_view 413*98bc733bSsthen | 414*98bc733bSsthen { 415*98bc733bSsthen /* view end */ 416*98bc733bSsthen if(cfg_parser->cfg->views && 417*98bc733bSsthen !cfg_parser->cfg->views->name) 418*98bc733bSsthen yyerror("view without name"); 419*98bc733bSsthen }; 4202be9e038Ssthen content_view: view_name | view_local_zone | view_local_data | view_first | 4212be9e038Ssthen view_response_ip | view_response_ip_data | view_local_data_ptr 422933707f3Ssthen ; 423bdfc4d55Sflorian authstart: VAR_AUTH_ZONE 424bdfc4d55Sflorian { 425bdfc4d55Sflorian struct config_auth* s; 426bdfc4d55Sflorian OUTYY(("\nP(auth_zone:)\n")); 42745872187Ssthen cfg_parser->started_toplevel = 1; 428bdfc4d55Sflorian s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); 429bdfc4d55Sflorian if(s) { 430bdfc4d55Sflorian s->next = cfg_parser->cfg->auths; 431bdfc4d55Sflorian cfg_parser->cfg->auths = s; 432bdfc4d55Sflorian /* defaults for auth zone */ 433bdfc4d55Sflorian s->for_downstream = 1; 434bdfc4d55Sflorian s->for_upstream = 1; 435938a3a5eSflorian s->fallback_enabled = 0; 436191f22c6Ssthen s->zonemd_check = 0; 437191f22c6Ssthen s->zonemd_reject_absence = 0; 438eaf2578eSsthen s->isrpz = 0; 439e21c60efSsthen } else { 440bdfc4d55Sflorian yyerror("out of memory"); 441bdfc4d55Sflorian } 442e21c60efSsthen } 443bdfc4d55Sflorian ; 444bdfc4d55Sflorian contents_auth: contents_auth content_auth 445bdfc4d55Sflorian | ; 446bdfc4d55Sflorian content_auth: auth_name | auth_zonefile | auth_master | auth_url | 44720237c55Ssthen auth_for_downstream | auth_for_upstream | auth_fallback_enabled | 448191f22c6Ssthen auth_allow_notify | auth_zonemd_check | auth_zonemd_reject_absence 449bdfc4d55Sflorian ; 450eaf2578eSsthen 451eaf2578eSsthen rpz_tag: VAR_TAGS STRING_ARG 452eaf2578eSsthen { 453eaf2578eSsthen uint8_t* bitlist; 454eaf2578eSsthen size_t len = 0; 455eaf2578eSsthen OUTYY(("P(server_local_zone_tag:%s)\n", $2)); 456eaf2578eSsthen bitlist = config_parse_taglist(cfg_parser->cfg, $2, 457eaf2578eSsthen &len); 458eaf2578eSsthen free($2); 459eaf2578eSsthen if(!bitlist) { 460eaf2578eSsthen yyerror("could not parse tags, (define-tag them first)"); 461eaf2578eSsthen } 462eaf2578eSsthen if(bitlist) { 463eaf2578eSsthen cfg_parser->cfg->auths->rpz_taglist = bitlist; 464eaf2578eSsthen cfg_parser->cfg->auths->rpz_taglistlen = len; 465eaf2578eSsthen 466eaf2578eSsthen } 467eaf2578eSsthen } 468eaf2578eSsthen ; 469eaf2578eSsthen 470eaf2578eSsthen rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG 471eaf2578eSsthen { 472eaf2578eSsthen OUTYY(("P(rpz_action_override:%s)\n", $2)); 473eaf2578eSsthen if(strcmp($2, "nxdomain")!=0 && strcmp($2, "nodata")!=0 && 474eaf2578eSsthen strcmp($2, "passthru")!=0 && strcmp($2, "drop")!=0 && 475eaf2578eSsthen strcmp($2, "cname")!=0 && strcmp($2, "disabled")!=0) { 476eaf2578eSsthen yyerror("rpz-action-override action: expected nxdomain, " 477eaf2578eSsthen "nodata, passthru, drop, cname or disabled"); 478eaf2578eSsthen free($2); 479eaf2578eSsthen cfg_parser->cfg->auths->rpz_action_override = NULL; 480eaf2578eSsthen } 481eaf2578eSsthen else { 482eaf2578eSsthen cfg_parser->cfg->auths->rpz_action_override = $2; 483eaf2578eSsthen } 484eaf2578eSsthen } 485eaf2578eSsthen ; 486eaf2578eSsthen 487eaf2578eSsthen rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG 488eaf2578eSsthen { 489eaf2578eSsthen OUTYY(("P(rpz_cname_override:%s)\n", $2)); 490eaf2578eSsthen free(cfg_parser->cfg->auths->rpz_cname); 491eaf2578eSsthen cfg_parser->cfg->auths->rpz_cname = $2; 492eaf2578eSsthen } 493eaf2578eSsthen ; 494eaf2578eSsthen 495eaf2578eSsthen rpz_log: VAR_RPZ_LOG STRING_ARG 496eaf2578eSsthen { 497eaf2578eSsthen OUTYY(("P(rpz_log:%s)\n", $2)); 498eaf2578eSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 499eaf2578eSsthen yyerror("expected yes or no."); 500eaf2578eSsthen else cfg_parser->cfg->auths->rpz_log = (strcmp($2, "yes")==0); 501eaf2578eSsthen free($2); 502eaf2578eSsthen } 503eaf2578eSsthen ; 504eaf2578eSsthen 505eaf2578eSsthen rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG 506eaf2578eSsthen { 507eaf2578eSsthen OUTYY(("P(rpz_log_name:%s)\n", $2)); 508eaf2578eSsthen free(cfg_parser->cfg->auths->rpz_log_name); 509eaf2578eSsthen cfg_parser->cfg->auths->rpz_log_name = $2; 510eaf2578eSsthen } 511eaf2578eSsthen ; 512e21c60efSsthen rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG 513e21c60efSsthen { 514e21c60efSsthen OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", $2)); 515e21c60efSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 516e21c60efSsthen yyerror("expected yes or no."); 517e21c60efSsthen else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp($2, "yes")==0); 518e21c60efSsthen free($2); 519e21c60efSsthen } 520e21c60efSsthen ; 521eaf2578eSsthen 522eaf2578eSsthen rpzstart: VAR_RPZ 523eaf2578eSsthen { 524eaf2578eSsthen struct config_auth* s; 525eaf2578eSsthen OUTYY(("\nP(rpz:)\n")); 52645872187Ssthen cfg_parser->started_toplevel = 1; 527eaf2578eSsthen s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); 528eaf2578eSsthen if(s) { 529eaf2578eSsthen s->next = cfg_parser->cfg->auths; 530eaf2578eSsthen cfg_parser->cfg->auths = s; 531eaf2578eSsthen /* defaults for RPZ auth zone */ 532eaf2578eSsthen s->for_downstream = 0; 533eaf2578eSsthen s->for_upstream = 0; 534eaf2578eSsthen s->fallback_enabled = 0; 535eaf2578eSsthen s->isrpz = 1; 536e21c60efSsthen } else { 537eaf2578eSsthen yyerror("out of memory"); 538eaf2578eSsthen } 539e21c60efSsthen } 540eaf2578eSsthen ; 541eaf2578eSsthen contents_rpz: contents_rpz content_rpz 542eaf2578eSsthen | ; 543eaf2578eSsthen content_rpz: auth_name | auth_zonefile | rpz_tag | auth_master | auth_url | 544eaf2578eSsthen auth_allow_notify | rpz_action_override | rpz_cname_override | 545e21c60efSsthen rpz_log | rpz_log_name | rpz_signal_nxdomain_ra | auth_for_downstream 546eaf2578eSsthen ; 547933707f3Ssthen server_num_threads: VAR_NUM_THREADS STRING_ARG 548933707f3Ssthen { 549933707f3Ssthen OUTYY(("P(server_num_threads:%s)\n", $2)); 550933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 551933707f3Ssthen yyerror("number expected"); 552933707f3Ssthen else cfg_parser->cfg->num_threads = atoi($2); 553933707f3Ssthen free($2); 554933707f3Ssthen } 555933707f3Ssthen ; 556933707f3Ssthen server_verbosity: VAR_VERBOSITY STRING_ARG 557933707f3Ssthen { 558933707f3Ssthen OUTYY(("P(server_verbosity:%s)\n", $2)); 559933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 560933707f3Ssthen yyerror("number expected"); 561933707f3Ssthen else cfg_parser->cfg->verbosity = atoi($2); 562933707f3Ssthen free($2); 563933707f3Ssthen } 564933707f3Ssthen ; 565933707f3Ssthen server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG 566933707f3Ssthen { 567933707f3Ssthen OUTYY(("P(server_statistics_interval:%s)\n", $2)); 568933707f3Ssthen if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) 569933707f3Ssthen cfg_parser->cfg->stat_interval = 0; 570933707f3Ssthen else if(atoi($2) == 0) 571933707f3Ssthen yyerror("number expected"); 572933707f3Ssthen else cfg_parser->cfg->stat_interval = atoi($2); 573933707f3Ssthen free($2); 574933707f3Ssthen } 575933707f3Ssthen ; 576933707f3Ssthen server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG 577933707f3Ssthen { 578933707f3Ssthen OUTYY(("P(server_statistics_cumulative:%s)\n", $2)); 579933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 580933707f3Ssthen yyerror("expected yes or no."); 581933707f3Ssthen else cfg_parser->cfg->stat_cumulative = (strcmp($2, "yes")==0); 582933707f3Ssthen free($2); 583933707f3Ssthen } 584933707f3Ssthen ; 585933707f3Ssthen server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG 586933707f3Ssthen { 587933707f3Ssthen OUTYY(("P(server_extended_statistics:%s)\n", $2)); 588933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 589933707f3Ssthen yyerror("expected yes or no."); 590933707f3Ssthen else cfg_parser->cfg->stat_extended = (strcmp($2, "yes")==0); 591933707f3Ssthen free($2); 592933707f3Ssthen } 593933707f3Ssthen ; 5948b7325afSsthen server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG 5958b7325afSsthen { 5968b7325afSsthen OUTYY(("P(server_statistics_inhibit_zero:%s)\n", $2)); 5978b7325afSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 5988b7325afSsthen yyerror("expected yes or no."); 5998b7325afSsthen else cfg_parser->cfg->stat_inhibit_zero = (strcmp($2, "yes")==0); 6008b7325afSsthen free($2); 6018b7325afSsthen } 6028b7325afSsthen ; 6032be9e038Ssthen server_shm_enable: VAR_SHM_ENABLE STRING_ARG 6042be9e038Ssthen { 6052be9e038Ssthen OUTYY(("P(server_shm_enable:%s)\n", $2)); 6062be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 6072be9e038Ssthen yyerror("expected yes or no."); 6082be9e038Ssthen else cfg_parser->cfg->shm_enable = (strcmp($2, "yes")==0); 6092be9e038Ssthen free($2); 6102be9e038Ssthen } 6112be9e038Ssthen ; 6122be9e038Ssthen server_shm_key: VAR_SHM_KEY STRING_ARG 6132be9e038Ssthen { 6142be9e038Ssthen OUTYY(("P(server_shm_key:%s)\n", $2)); 6152be9e038Ssthen if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) 6162be9e038Ssthen cfg_parser->cfg->shm_key = 0; 6172be9e038Ssthen else if(atoi($2) == 0) 6182be9e038Ssthen yyerror("number expected"); 6192be9e038Ssthen else cfg_parser->cfg->shm_key = atoi($2); 6202be9e038Ssthen free($2); 6212be9e038Ssthen } 6222be9e038Ssthen ; 623933707f3Ssthen server_port: VAR_PORT STRING_ARG 624933707f3Ssthen { 625933707f3Ssthen OUTYY(("P(server_port:%s)\n", $2)); 626933707f3Ssthen if(atoi($2) == 0) 627933707f3Ssthen yyerror("port number expected"); 628933707f3Ssthen else cfg_parser->cfg->port = atoi($2); 629933707f3Ssthen free($2); 630933707f3Ssthen } 631933707f3Ssthen ; 6322be9e038Ssthen server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG 6332be9e038Ssthen { 6342be9e038Ssthen #ifdef CLIENT_SUBNET 6352be9e038Ssthen OUTYY(("P(server_send_client_subnet:%s)\n", $2)); 6362be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, $2)) 6372be9e038Ssthen fatal_exit("out of memory adding client-subnet"); 6382be9e038Ssthen #else 6392be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 640eaf2578eSsthen free($2); 6412be9e038Ssthen #endif 6422be9e038Ssthen } 6432be9e038Ssthen ; 6442be9e038Ssthen server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG 6452be9e038Ssthen { 6462be9e038Ssthen #ifdef CLIENT_SUBNET 6472be9e038Ssthen OUTYY(("P(server_client_subnet_zone:%s)\n", $2)); 6482be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone, 6492be9e038Ssthen $2)) 6502be9e038Ssthen fatal_exit("out of memory adding client-subnet-zone"); 6512be9e038Ssthen #else 6522be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 653eaf2578eSsthen free($2); 6542be9e038Ssthen #endif 6552be9e038Ssthen } 6562be9e038Ssthen ; 6572be9e038Ssthen server_client_subnet_always_forward: 6582be9e038Ssthen VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG 6592be9e038Ssthen { 6602be9e038Ssthen #ifdef CLIENT_SUBNET 6612be9e038Ssthen OUTYY(("P(server_client_subnet_always_forward:%s)\n", $2)); 6622be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 6632be9e038Ssthen yyerror("expected yes or no."); 6642be9e038Ssthen else 6652be9e038Ssthen cfg_parser->cfg->client_subnet_always_forward = 6662be9e038Ssthen (strcmp($2, "yes")==0); 6672be9e038Ssthen #else 6682be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 6692be9e038Ssthen #endif 6702be9e038Ssthen free($2); 6712be9e038Ssthen } 6722be9e038Ssthen ; 6732be9e038Ssthen server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG 6742be9e038Ssthen { 6752be9e038Ssthen #ifdef CLIENT_SUBNET 6762be9e038Ssthen OUTYY(("P(client_subnet_opcode:%s)\n", $2)); 677bdfc4d55Sflorian OUTYY(("P(Deprecated option, ignoring)\n")); 6782be9e038Ssthen #else 6792be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 6802be9e038Ssthen #endif 6812be9e038Ssthen free($2); 6822be9e038Ssthen } 6832be9e038Ssthen ; 6842be9e038Ssthen server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG 6852be9e038Ssthen { 6862be9e038Ssthen #ifdef CLIENT_SUBNET 6872be9e038Ssthen OUTYY(("P(max_client_subnet_ipv4:%s)\n", $2)); 6882be9e038Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 6892be9e038Ssthen yyerror("IPv4 subnet length expected"); 6902be9e038Ssthen else if (atoi($2) > 32) 6912be9e038Ssthen cfg_parser->cfg->max_client_subnet_ipv4 = 32; 6922be9e038Ssthen else if (atoi($2) < 0) 6932be9e038Ssthen cfg_parser->cfg->max_client_subnet_ipv4 = 0; 6942be9e038Ssthen else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi($2); 6952be9e038Ssthen #else 6962be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 6972be9e038Ssthen #endif 6982be9e038Ssthen free($2); 6992be9e038Ssthen } 7002be9e038Ssthen ; 7012be9e038Ssthen server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG 7022be9e038Ssthen { 7032be9e038Ssthen #ifdef CLIENT_SUBNET 7042be9e038Ssthen OUTYY(("P(max_client_subnet_ipv6:%s)\n", $2)); 7052be9e038Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 7062be9e038Ssthen yyerror("Ipv6 subnet length expected"); 7072be9e038Ssthen else if (atoi($2) > 128) 7082be9e038Ssthen cfg_parser->cfg->max_client_subnet_ipv6 = 128; 7092be9e038Ssthen else if (atoi($2) < 0) 7102be9e038Ssthen cfg_parser->cfg->max_client_subnet_ipv6 = 0; 7112be9e038Ssthen else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi($2); 7122be9e038Ssthen #else 7132be9e038Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 7142be9e038Ssthen #endif 7152be9e038Ssthen free($2); 7162be9e038Ssthen } 7172be9e038Ssthen ; 7183150e5f6Ssthen server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG 7193150e5f6Ssthen { 7203150e5f6Ssthen #ifdef CLIENT_SUBNET 7213150e5f6Ssthen OUTYY(("P(min_client_subnet_ipv4:%s)\n", $2)); 7223150e5f6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 7233150e5f6Ssthen yyerror("IPv4 subnet length expected"); 7243150e5f6Ssthen else if (atoi($2) > 32) 7253150e5f6Ssthen cfg_parser->cfg->min_client_subnet_ipv4 = 32; 7263150e5f6Ssthen else if (atoi($2) < 0) 7273150e5f6Ssthen cfg_parser->cfg->min_client_subnet_ipv4 = 0; 7283150e5f6Ssthen else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi($2); 7293150e5f6Ssthen #else 7303150e5f6Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 7313150e5f6Ssthen #endif 7323150e5f6Ssthen free($2); 7333150e5f6Ssthen } 7343150e5f6Ssthen ; 7353150e5f6Ssthen server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG 7363150e5f6Ssthen { 7373150e5f6Ssthen #ifdef CLIENT_SUBNET 7383150e5f6Ssthen OUTYY(("P(min_client_subnet_ipv6:%s)\n", $2)); 7393150e5f6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 7403150e5f6Ssthen yyerror("Ipv6 subnet length expected"); 7413150e5f6Ssthen else if (atoi($2) > 128) 7423150e5f6Ssthen cfg_parser->cfg->min_client_subnet_ipv6 = 128; 7433150e5f6Ssthen else if (atoi($2) < 0) 7443150e5f6Ssthen cfg_parser->cfg->min_client_subnet_ipv6 = 0; 7453150e5f6Ssthen else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi($2); 7463150e5f6Ssthen #else 7473150e5f6Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 7483150e5f6Ssthen #endif 7493150e5f6Ssthen free($2); 7503150e5f6Ssthen } 7513150e5f6Ssthen ; 7523150e5f6Ssthen server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG 7533150e5f6Ssthen { 7543150e5f6Ssthen #ifdef CLIENT_SUBNET 7553150e5f6Ssthen OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", $2)); 7563150e5f6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 7573150e5f6Ssthen yyerror("IPv4 ECS tree size expected"); 7583150e5f6Ssthen else if (atoi($2) < 0) 7593150e5f6Ssthen cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0; 7603150e5f6Ssthen else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi($2); 7613150e5f6Ssthen #else 7623150e5f6Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 7633150e5f6Ssthen #endif 7643150e5f6Ssthen free($2); 7653150e5f6Ssthen } 7663150e5f6Ssthen ; 7673150e5f6Ssthen server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG 7683150e5f6Ssthen { 7693150e5f6Ssthen #ifdef CLIENT_SUBNET 7703150e5f6Ssthen OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", $2)); 7713150e5f6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 7723150e5f6Ssthen yyerror("IPv6 ECS tree size expected"); 7733150e5f6Ssthen else if (atoi($2) < 0) 7743150e5f6Ssthen cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0; 7753150e5f6Ssthen else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi($2); 7763150e5f6Ssthen #else 7773150e5f6Ssthen OUTYY(("P(Compiled without edns subnet option, ignoring)\n")); 7783150e5f6Ssthen #endif 7793150e5f6Ssthen free($2); 7803150e5f6Ssthen } 7813150e5f6Ssthen ; 782933707f3Ssthen server_interface: VAR_INTERFACE STRING_ARG 783933707f3Ssthen { 784933707f3Ssthen OUTYY(("P(server_interface:%s)\n", $2)); 785933707f3Ssthen if(cfg_parser->cfg->num_ifs == 0) 786933707f3Ssthen cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); 787933707f3Ssthen else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, 788933707f3Ssthen (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); 789933707f3Ssthen if(!cfg_parser->cfg->ifs) 790933707f3Ssthen yyerror("out of memory"); 791933707f3Ssthen else 792933707f3Ssthen cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = $2; 793933707f3Ssthen } 794933707f3Ssthen ; 795933707f3Ssthen server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG 796933707f3Ssthen { 797933707f3Ssthen OUTYY(("P(server_outgoing_interface:%s)\n", $2)); 798933707f3Ssthen if(cfg_parser->cfg->num_out_ifs == 0) 799933707f3Ssthen cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); 800933707f3Ssthen else cfg_parser->cfg->out_ifs = realloc( 801933707f3Ssthen cfg_parser->cfg->out_ifs, 802933707f3Ssthen (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); 803933707f3Ssthen if(!cfg_parser->cfg->out_ifs) 804933707f3Ssthen yyerror("out of memory"); 805933707f3Ssthen else 806933707f3Ssthen cfg_parser->cfg->out_ifs[ 807933707f3Ssthen cfg_parser->cfg->num_out_ifs++] = $2; 808933707f3Ssthen } 809933707f3Ssthen ; 810933707f3Ssthen server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG 811933707f3Ssthen { 812933707f3Ssthen OUTYY(("P(server_outgoing_range:%s)\n", $2)); 813933707f3Ssthen if(atoi($2) == 0) 814933707f3Ssthen yyerror("number expected"); 815933707f3Ssthen else cfg_parser->cfg->outgoing_num_ports = atoi($2); 816933707f3Ssthen free($2); 817933707f3Ssthen } 818933707f3Ssthen ; 819933707f3Ssthen server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG 820933707f3Ssthen { 821933707f3Ssthen OUTYY(("P(server_outgoing_port_permit:%s)\n", $2)); 822933707f3Ssthen if(!cfg_mark_ports($2, 1, 823933707f3Ssthen cfg_parser->cfg->outgoing_avail_ports, 65536)) 824933707f3Ssthen yyerror("port number or range (\"low-high\") expected"); 825933707f3Ssthen free($2); 826933707f3Ssthen } 827933707f3Ssthen ; 828933707f3Ssthen server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG 829933707f3Ssthen { 830933707f3Ssthen OUTYY(("P(server_outgoing_port_avoid:%s)\n", $2)); 831933707f3Ssthen if(!cfg_mark_ports($2, 0, 832933707f3Ssthen cfg_parser->cfg->outgoing_avail_ports, 65536)) 833933707f3Ssthen yyerror("port number or range (\"low-high\") expected"); 834933707f3Ssthen free($2); 835933707f3Ssthen } 836933707f3Ssthen ; 837933707f3Ssthen server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG 838933707f3Ssthen { 839933707f3Ssthen OUTYY(("P(server_outgoing_num_tcp:%s)\n", $2)); 840933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 841933707f3Ssthen yyerror("number expected"); 842933707f3Ssthen else cfg_parser->cfg->outgoing_num_tcp = atoi($2); 843933707f3Ssthen free($2); 844933707f3Ssthen } 845933707f3Ssthen ; 846933707f3Ssthen server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG 847933707f3Ssthen { 848933707f3Ssthen OUTYY(("P(server_incoming_num_tcp:%s)\n", $2)); 849933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 850933707f3Ssthen yyerror("number expected"); 851933707f3Ssthen else cfg_parser->cfg->incoming_num_tcp = atoi($2); 852933707f3Ssthen free($2); 853933707f3Ssthen } 854933707f3Ssthen ; 855933707f3Ssthen server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG 856933707f3Ssthen { 857933707f3Ssthen OUTYY(("P(server_interface_automatic:%s)\n", $2)); 858933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 859933707f3Ssthen yyerror("expected yes or no."); 860933707f3Ssthen else cfg_parser->cfg->if_automatic = (strcmp($2, "yes")==0); 861933707f3Ssthen free($2); 862933707f3Ssthen } 863933707f3Ssthen ; 8640bdb4f62Ssthen server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG 8650bdb4f62Ssthen { 8660bdb4f62Ssthen OUTYY(("P(server_interface_automatic_ports:%s)\n", $2)); 8670bdb4f62Ssthen free(cfg_parser->cfg->if_automatic_ports); 8680bdb4f62Ssthen cfg_parser->cfg->if_automatic_ports = $2; 8690bdb4f62Ssthen } 8700bdb4f62Ssthen ; 871933707f3Ssthen server_do_ip4: VAR_DO_IP4 STRING_ARG 872933707f3Ssthen { 873933707f3Ssthen OUTYY(("P(server_do_ip4:%s)\n", $2)); 874933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 875933707f3Ssthen yyerror("expected yes or no."); 876933707f3Ssthen else cfg_parser->cfg->do_ip4 = (strcmp($2, "yes")==0); 877933707f3Ssthen free($2); 878933707f3Ssthen } 879933707f3Ssthen ; 880933707f3Ssthen server_do_ip6: VAR_DO_IP6 STRING_ARG 881933707f3Ssthen { 882933707f3Ssthen OUTYY(("P(server_do_ip6:%s)\n", $2)); 883933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 884933707f3Ssthen yyerror("expected yes or no."); 885933707f3Ssthen else cfg_parser->cfg->do_ip6 = (strcmp($2, "yes")==0); 886933707f3Ssthen free($2); 887933707f3Ssthen } 888933707f3Ssthen ; 8898b7325afSsthen server_do_nat64: VAR_DO_NAT64 STRING_ARG 8908b7325afSsthen { 8918b7325afSsthen OUTYY(("P(server_do_nat64:%s)\n", $2)); 8928b7325afSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 8938b7325afSsthen yyerror("expected yes or no."); 8948b7325afSsthen else cfg_parser->cfg->do_nat64 = (strcmp($2, "yes")==0); 8958b7325afSsthen free($2); 8968b7325afSsthen } 8978b7325afSsthen ; 898933707f3Ssthen server_do_udp: VAR_DO_UDP STRING_ARG 899933707f3Ssthen { 900933707f3Ssthen OUTYY(("P(server_do_udp:%s)\n", $2)); 901933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 902933707f3Ssthen yyerror("expected yes or no."); 903933707f3Ssthen else cfg_parser->cfg->do_udp = (strcmp($2, "yes")==0); 904933707f3Ssthen free($2); 905933707f3Ssthen } 906933707f3Ssthen ; 907933707f3Ssthen server_do_tcp: VAR_DO_TCP STRING_ARG 908933707f3Ssthen { 909933707f3Ssthen OUTYY(("P(server_do_tcp:%s)\n", $2)); 910933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 911933707f3Ssthen yyerror("expected yes or no."); 912933707f3Ssthen else cfg_parser->cfg->do_tcp = (strcmp($2, "yes")==0); 913933707f3Ssthen free($2); 914933707f3Ssthen } 915933707f3Ssthen ; 916a3167c07Ssthen server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG 917a3167c07Ssthen { 918a3167c07Ssthen OUTYY(("P(server_prefer_ip4:%s)\n", $2)); 919a3167c07Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 920a3167c07Ssthen yyerror("expected yes or no."); 921a3167c07Ssthen else cfg_parser->cfg->prefer_ip4 = (strcmp($2, "yes")==0); 922a3167c07Ssthen free($2); 923a3167c07Ssthen } 924a3167c07Ssthen ; 92577079be7Ssthen server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG 92677079be7Ssthen { 92777079be7Ssthen OUTYY(("P(server_prefer_ip6:%s)\n", $2)); 92877079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 92977079be7Ssthen yyerror("expected yes or no."); 93077079be7Ssthen else cfg_parser->cfg->prefer_ip6 = (strcmp($2, "yes")==0); 93177079be7Ssthen free($2); 93277079be7Ssthen } 93377079be7Ssthen ; 93432e31f52Ssthen server_tcp_mss: VAR_TCP_MSS STRING_ARG 93532e31f52Ssthen { 93632e31f52Ssthen OUTYY(("P(server_tcp_mss:%s)\n", $2)); 93732e31f52Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 93832e31f52Ssthen yyerror("number expected"); 93932e31f52Ssthen else cfg_parser->cfg->tcp_mss = atoi($2); 94032e31f52Ssthen free($2); 94132e31f52Ssthen } 94232e31f52Ssthen ; 94332e31f52Ssthen server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG 94432e31f52Ssthen { 94532e31f52Ssthen OUTYY(("P(server_outgoing_tcp_mss:%s)\n", $2)); 94632e31f52Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 94732e31f52Ssthen yyerror("number expected"); 94832e31f52Ssthen else cfg_parser->cfg->outgoing_tcp_mss = atoi($2); 94932e31f52Ssthen free($2); 95032e31f52Ssthen } 95132e31f52Ssthen ; 9522308e98cSsthen server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG 9532308e98cSsthen { 9542308e98cSsthen OUTYY(("P(server_tcp_idle_timeout:%s)\n", $2)); 9552308e98cSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 9562308e98cSsthen yyerror("number expected"); 9572308e98cSsthen else if (atoi($2) > 120000) 9582308e98cSsthen cfg_parser->cfg->tcp_idle_timeout = 120000; 9592308e98cSsthen else if (atoi($2) < 1) 9602308e98cSsthen cfg_parser->cfg->tcp_idle_timeout = 1; 9612308e98cSsthen else cfg_parser->cfg->tcp_idle_timeout = atoi($2); 9622308e98cSsthen free($2); 9632308e98cSsthen } 9642308e98cSsthen ; 965191f22c6Ssthen server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG 966191f22c6Ssthen { 967191f22c6Ssthen OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", $2)); 968191f22c6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 969191f22c6Ssthen yyerror("number expected"); 970191f22c6Ssthen else if (atoi($2) < 1) 971191f22c6Ssthen cfg_parser->cfg->max_reuse_tcp_queries = 0; 972191f22c6Ssthen else cfg_parser->cfg->max_reuse_tcp_queries = atoi($2); 973191f22c6Ssthen free($2); 974191f22c6Ssthen } 975191f22c6Ssthen ; 976191f22c6Ssthen server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG 977191f22c6Ssthen { 978191f22c6Ssthen OUTYY(("P(server_tcp_reuse_timeout:%s)\n", $2)); 979191f22c6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 980191f22c6Ssthen yyerror("number expected"); 981191f22c6Ssthen else if (atoi($2) < 1) 982191f22c6Ssthen cfg_parser->cfg->tcp_reuse_timeout = 0; 983191f22c6Ssthen else cfg_parser->cfg->tcp_reuse_timeout = atoi($2); 984191f22c6Ssthen free($2); 985191f22c6Ssthen } 986191f22c6Ssthen ; 987191f22c6Ssthen server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG 988191f22c6Ssthen { 989191f22c6Ssthen OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", $2)); 990191f22c6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 991191f22c6Ssthen yyerror("number expected"); 992191f22c6Ssthen else if (atoi($2) < 1) 993191f22c6Ssthen cfg_parser->cfg->tcp_auth_query_timeout = 0; 994191f22c6Ssthen else cfg_parser->cfg->tcp_auth_query_timeout = atoi($2); 995191f22c6Ssthen free($2); 996191f22c6Ssthen } 997191f22c6Ssthen ; 9982308e98cSsthen server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG 9992308e98cSsthen { 10002308e98cSsthen OUTYY(("P(server_tcp_keepalive:%s)\n", $2)); 10012308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 10022308e98cSsthen yyerror("expected yes or no."); 10032308e98cSsthen else cfg_parser->cfg->do_tcp_keepalive = (strcmp($2, "yes")==0); 10042308e98cSsthen free($2); 10052308e98cSsthen } 10062308e98cSsthen ; 10072308e98cSsthen server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG 10082308e98cSsthen { 10092308e98cSsthen OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", $2)); 10102308e98cSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 10112308e98cSsthen yyerror("number expected"); 10122308e98cSsthen else if (atoi($2) > 6553500) 10132308e98cSsthen cfg_parser->cfg->tcp_keepalive_timeout = 6553500; 10142308e98cSsthen else if (atoi($2) < 1) 10152308e98cSsthen cfg_parser->cfg->tcp_keepalive_timeout = 0; 10162308e98cSsthen else cfg_parser->cfg->tcp_keepalive_timeout = atoi($2); 10172308e98cSsthen free($2); 10182308e98cSsthen } 10192308e98cSsthen ; 10208b7325afSsthen server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG 10218b7325afSsthen { 10228b7325afSsthen OUTYY(("P(server_sock_queue_timeout:%s)\n", $2)); 10238b7325afSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 10248b7325afSsthen yyerror("number expected"); 10258b7325afSsthen else if (atoi($2) > 6553500) 10268b7325afSsthen cfg_parser->cfg->sock_queue_timeout = 6553500; 10278b7325afSsthen else if (atoi($2) < 1) 10288b7325afSsthen cfg_parser->cfg->sock_queue_timeout = 0; 10298b7325afSsthen else cfg_parser->cfg->sock_queue_timeout = atoi($2); 10308b7325afSsthen free($2); 10318b7325afSsthen } 10328b7325afSsthen ; 1033933707f3Ssthen server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG 1034933707f3Ssthen { 1035933707f3Ssthen OUTYY(("P(server_tcp_upstream:%s)\n", $2)); 1036933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1037933707f3Ssthen yyerror("expected yes or no."); 1038933707f3Ssthen else cfg_parser->cfg->tcp_upstream = (strcmp($2, "yes")==0); 1039933707f3Ssthen free($2); 1040933707f3Ssthen } 1041933707f3Ssthen ; 1042bdfc4d55Sflorian server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG 1043bdfc4d55Sflorian { 1044bdfc4d55Sflorian OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", $2)); 1045bdfc4d55Sflorian if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1046bdfc4d55Sflorian yyerror("expected yes or no."); 1047bdfc4d55Sflorian else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp($2, "yes")==0); 1048bdfc4d55Sflorian free($2); 1049bdfc4d55Sflorian } 1050bdfc4d55Sflorian ; 1051933707f3Ssthen server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG 1052933707f3Ssthen { 1053933707f3Ssthen OUTYY(("P(server_ssl_upstream:%s)\n", $2)); 1054933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1055933707f3Ssthen yyerror("expected yes or no."); 1056933707f3Ssthen else cfg_parser->cfg->ssl_upstream = (strcmp($2, "yes")==0); 1057933707f3Ssthen free($2); 1058933707f3Ssthen } 1059933707f3Ssthen ; 1060933707f3Ssthen server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG 1061933707f3Ssthen { 1062933707f3Ssthen OUTYY(("P(server_ssl_service_key:%s)\n", $2)); 1063933707f3Ssthen free(cfg_parser->cfg->ssl_service_key); 1064933707f3Ssthen cfg_parser->cfg->ssl_service_key = $2; 1065933707f3Ssthen } 1066933707f3Ssthen ; 1067933707f3Ssthen server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG 1068933707f3Ssthen { 1069933707f3Ssthen OUTYY(("P(server_ssl_service_pem:%s)\n", $2)); 1070933707f3Ssthen free(cfg_parser->cfg->ssl_service_pem); 1071933707f3Ssthen cfg_parser->cfg->ssl_service_pem = $2; 1072933707f3Ssthen } 1073933707f3Ssthen ; 1074933707f3Ssthen server_ssl_port: VAR_SSL_PORT STRING_ARG 1075933707f3Ssthen { 1076933707f3Ssthen OUTYY(("P(server_ssl_port:%s)\n", $2)); 1077933707f3Ssthen if(atoi($2) == 0) 1078933707f3Ssthen yyerror("port number expected"); 1079933707f3Ssthen else cfg_parser->cfg->ssl_port = atoi($2); 1080933707f3Ssthen free($2); 1081933707f3Ssthen } 1082933707f3Ssthen ; 1083938a3a5eSflorian server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG 1084938a3a5eSflorian { 1085938a3a5eSflorian OUTYY(("P(server_tls_cert_bundle:%s)\n", $2)); 1086938a3a5eSflorian free(cfg_parser->cfg->tls_cert_bundle); 1087938a3a5eSflorian cfg_parser->cfg->tls_cert_bundle = $2; 1088938a3a5eSflorian } 1089938a3a5eSflorian ; 109020237c55Ssthen server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG 109120237c55Ssthen { 109220237c55Ssthen OUTYY(("P(server_tls_win_cert:%s)\n", $2)); 109320237c55Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 109420237c55Ssthen yyerror("expected yes or no."); 109520237c55Ssthen else cfg_parser->cfg->tls_win_cert = (strcmp($2, "yes")==0); 109620237c55Ssthen free($2); 109720237c55Ssthen } 109820237c55Ssthen ; 109920237c55Ssthen server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG 110020237c55Ssthen { 110120237c55Ssthen OUTYY(("P(server_tls_additional_port:%s)\n", $2)); 110220237c55Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port, 110320237c55Ssthen $2)) 110420237c55Ssthen yyerror("out of memory"); 110520237c55Ssthen } 110620237c55Ssthen ; 1107f6b99bafSsthen server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG 1108f6b99bafSsthen { 1109f6b99bafSsthen OUTYY(("P(server_tls_ciphers:%s)\n", $2)); 1110f6b99bafSsthen free(cfg_parser->cfg->tls_ciphers); 1111f6b99bafSsthen cfg_parser->cfg->tls_ciphers = $2; 1112f6b99bafSsthen } 1113f6b99bafSsthen ; 1114f6b99bafSsthen server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG 1115f6b99bafSsthen { 1116f6b99bafSsthen OUTYY(("P(server_tls_ciphersuites:%s)\n", $2)); 1117f6b99bafSsthen free(cfg_parser->cfg->tls_ciphersuites); 1118f6b99bafSsthen cfg_parser->cfg->tls_ciphersuites = $2; 1119f6b99bafSsthen } 1120f6b99bafSsthen ; 1121f6b99bafSsthen server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG 1122f6b99bafSsthen { 1123f6b99bafSsthen OUTYY(("P(server_tls_session_ticket_keys:%s)\n", $2)); 1124f6b99bafSsthen if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys, 1125f6b99bafSsthen $2)) 1126f6b99bafSsthen yyerror("out of memory"); 1127f6b99bafSsthen } 1128f6b99bafSsthen ; 1129a3167c07Ssthen server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG 1130a3167c07Ssthen { 1131a3167c07Ssthen OUTYY(("P(server_tls_use_sni:%s)\n", $2)); 1132a3167c07Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1133a3167c07Ssthen yyerror("expected yes or no."); 1134a3167c07Ssthen else cfg_parser->cfg->tls_use_sni = (strcmp($2, "yes")==0); 1135a3167c07Ssthen free($2); 1136a3167c07Ssthen } 1137a3167c07Ssthen ; 11382c144df0Ssthen server_https_port: VAR_HTTPS_PORT STRING_ARG 11392c144df0Ssthen { 11402c144df0Ssthen OUTYY(("P(server_https_port:%s)\n", $2)); 11412c144df0Ssthen if(atoi($2) == 0) 11422c144df0Ssthen yyerror("port number expected"); 11432c144df0Ssthen else cfg_parser->cfg->https_port = atoi($2); 1144eba819a2Ssthen free($2); 11452c144df0Ssthen }; 11462c144df0Ssthen server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG 11472c144df0Ssthen { 11482c144df0Ssthen OUTYY(("P(server_http_endpoint:%s)\n", $2)); 11492c144df0Ssthen free(cfg_parser->cfg->http_endpoint); 11502c144df0Ssthen if($2 && $2[0] != '/') { 11512c144df0Ssthen cfg_parser->cfg->http_endpoint = malloc(strlen($2)+2); 11522c144df0Ssthen if(!cfg_parser->cfg->http_endpoint) 11532c144df0Ssthen yyerror("out of memory"); 11542c144df0Ssthen cfg_parser->cfg->http_endpoint[0] = '/'; 11552c144df0Ssthen memmove(cfg_parser->cfg->http_endpoint+1, $2, 11562c144df0Ssthen strlen($2)+1); 11572c144df0Ssthen free($2); 11582c144df0Ssthen } else { 11592c144df0Ssthen cfg_parser->cfg->http_endpoint = $2; 11602c144df0Ssthen } 11612c144df0Ssthen }; 11622c144df0Ssthen server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG 11632c144df0Ssthen { 11642c144df0Ssthen OUTYY(("P(server_http_max_streams:%s)\n", $2)); 11652c144df0Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 11662c144df0Ssthen yyerror("number expected"); 11672c144df0Ssthen else cfg_parser->cfg->http_max_streams = atoi($2); 11682c144df0Ssthen free($2); 11692c144df0Ssthen }; 11702c144df0Ssthen server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG 11712c144df0Ssthen { 11722c144df0Ssthen OUTYY(("P(server_http_query_buffer_size:%s)\n", $2)); 11732c144df0Ssthen if(!cfg_parse_memsize($2, 11742c144df0Ssthen &cfg_parser->cfg->http_query_buffer_size)) 11752c144df0Ssthen yyerror("memory size expected"); 11762c144df0Ssthen free($2); 11772c144df0Ssthen }; 11782c144df0Ssthen server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG 11792c144df0Ssthen { 11802c144df0Ssthen OUTYY(("P(server_http_response_buffer_size:%s)\n", $2)); 11812c144df0Ssthen if(!cfg_parse_memsize($2, 11822c144df0Ssthen &cfg_parser->cfg->http_response_buffer_size)) 11832c144df0Ssthen yyerror("memory size expected"); 11842c144df0Ssthen free($2); 11852c144df0Ssthen }; 11862c144df0Ssthen server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG 11872c144df0Ssthen { 11882c144df0Ssthen OUTYY(("P(server_http_nodelay:%s)\n", $2)); 11892c144df0Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 11902c144df0Ssthen yyerror("expected yes or no."); 11912c144df0Ssthen else cfg_parser->cfg->http_nodelay = (strcmp($2, "yes")==0); 11922c144df0Ssthen free($2); 11938b7325afSsthen }; 1194eba819a2Ssthen server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG 1195eba819a2Ssthen { 1196eba819a2Ssthen OUTYY(("P(server_http_notls_downstream:%s)\n", $2)); 1197eba819a2Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1198eba819a2Ssthen yyerror("expected yes or no."); 1199eba819a2Ssthen else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0); 1200eba819a2Ssthen free($2); 12012c144df0Ssthen }; 120277079be7Ssthen server_use_systemd: VAR_USE_SYSTEMD STRING_ARG 120377079be7Ssthen { 120477079be7Ssthen OUTYY(("P(server_use_systemd:%s)\n", $2)); 120577079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 120677079be7Ssthen yyerror("expected yes or no."); 120777079be7Ssthen else cfg_parser->cfg->use_systemd = (strcmp($2, "yes")==0); 120877079be7Ssthen free($2); 120977079be7Ssthen } 121077079be7Ssthen ; 1211933707f3Ssthen server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG 1212933707f3Ssthen { 1213933707f3Ssthen OUTYY(("P(server_do_daemonize:%s)\n", $2)); 1214933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1215933707f3Ssthen yyerror("expected yes or no."); 1216933707f3Ssthen else cfg_parser->cfg->do_daemonize = (strcmp($2, "yes")==0); 1217933707f3Ssthen free($2); 1218933707f3Ssthen } 1219933707f3Ssthen ; 1220933707f3Ssthen server_use_syslog: VAR_USE_SYSLOG STRING_ARG 1221933707f3Ssthen { 1222933707f3Ssthen OUTYY(("P(server_use_syslog:%s)\n", $2)); 1223933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1224933707f3Ssthen yyerror("expected yes or no."); 1225933707f3Ssthen else cfg_parser->cfg->use_syslog = (strcmp($2, "yes")==0); 1226933707f3Ssthen #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) 1227933707f3Ssthen if(strcmp($2, "yes") == 0) 1228933707f3Ssthen yyerror("no syslog services are available. " 1229933707f3Ssthen "(reconfigure and compile to add)"); 1230933707f3Ssthen #endif 1231933707f3Ssthen free($2); 1232933707f3Ssthen } 1233933707f3Ssthen ; 1234933707f3Ssthen server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG 1235933707f3Ssthen { 1236933707f3Ssthen OUTYY(("P(server_log_time_ascii:%s)\n", $2)); 1237933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1238933707f3Ssthen yyerror("expected yes or no."); 1239933707f3Ssthen else cfg_parser->cfg->log_time_ascii = (strcmp($2, "yes")==0); 1240933707f3Ssthen free($2); 1241933707f3Ssthen } 1242933707f3Ssthen ; 1243933707f3Ssthen server_log_queries: VAR_LOG_QUERIES STRING_ARG 1244933707f3Ssthen { 1245933707f3Ssthen OUTYY(("P(server_log_queries:%s)\n", $2)); 1246933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1247933707f3Ssthen yyerror("expected yes or no."); 1248933707f3Ssthen else cfg_parser->cfg->log_queries = (strcmp($2, "yes")==0); 1249933707f3Ssthen free($2); 1250933707f3Ssthen } 1251933707f3Ssthen ; 125277079be7Ssthen server_log_replies: VAR_LOG_REPLIES STRING_ARG 125377079be7Ssthen { 125477079be7Ssthen OUTYY(("P(server_log_replies:%s)\n", $2)); 125577079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 125677079be7Ssthen yyerror("expected yes or no."); 125777079be7Ssthen else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0); 125877079be7Ssthen free($2); 125977079be7Ssthen } 126077079be7Ssthen ; 1261f6b99bafSsthen server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG 1262f6b99bafSsthen { 1263f6b99bafSsthen OUTYY(("P(server_log_tag_queryreply:%s)\n", $2)); 1264f6b99bafSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1265f6b99bafSsthen yyerror("expected yes or no."); 1266f6b99bafSsthen else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0); 1267f6b99bafSsthen free($2); 1268f6b99bafSsthen } 1269f6b99bafSsthen ; 12702308e98cSsthen server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG 12712308e98cSsthen { 12722308e98cSsthen OUTYY(("P(server_log_servfail:%s)\n", $2)); 12732308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 12742308e98cSsthen yyerror("expected yes or no."); 12752308e98cSsthen else cfg_parser->cfg->log_servfail = (strcmp($2, "yes")==0); 12762308e98cSsthen free($2); 12772308e98cSsthen } 12782308e98cSsthen ; 1279f46c52bfSsthen server_log_destaddr: VAR_LOG_DESTADDR STRING_ARG 1280f46c52bfSsthen { 1281f46c52bfSsthen OUTYY(("P(server_log_destaddr:%s)\n", $2)); 1282f46c52bfSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1283f46c52bfSsthen yyerror("expected yes or no."); 1284f46c52bfSsthen else cfg_parser->cfg->log_destaddr = (strcmp($2, "yes")==0); 1285f46c52bfSsthen free($2); 1286f46c52bfSsthen } 1287f46c52bfSsthen ; 12882308e98cSsthen server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG 12892308e98cSsthen { 12902308e98cSsthen OUTYY(("P(server_log_local_actions:%s)\n", $2)); 12912308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 12922308e98cSsthen yyerror("expected yes or no."); 12932308e98cSsthen else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0); 12942308e98cSsthen free($2); 12952308e98cSsthen } 12962308e98cSsthen ; 1297933707f3Ssthen server_chroot: VAR_CHROOT STRING_ARG 1298933707f3Ssthen { 1299933707f3Ssthen OUTYY(("P(server_chroot:%s)\n", $2)); 1300933707f3Ssthen free(cfg_parser->cfg->chrootdir); 1301933707f3Ssthen cfg_parser->cfg->chrootdir = $2; 1302933707f3Ssthen } 1303933707f3Ssthen ; 1304933707f3Ssthen server_username: VAR_USERNAME STRING_ARG 1305933707f3Ssthen { 1306933707f3Ssthen OUTYY(("P(server_username:%s)\n", $2)); 1307933707f3Ssthen free(cfg_parser->cfg->username); 1308933707f3Ssthen cfg_parser->cfg->username = $2; 1309933707f3Ssthen } 1310933707f3Ssthen ; 1311933707f3Ssthen server_directory: VAR_DIRECTORY STRING_ARG 1312933707f3Ssthen { 1313933707f3Ssthen OUTYY(("P(server_directory:%s)\n", $2)); 1314933707f3Ssthen free(cfg_parser->cfg->directory); 1315933707f3Ssthen cfg_parser->cfg->directory = $2; 131677079be7Ssthen /* change there right away for includes relative to this */ 131777079be7Ssthen if($2[0]) { 131877079be7Ssthen char* d; 131977079be7Ssthen #ifdef UB_ON_WINDOWS 132077079be7Ssthen w_config_adjust_directory(cfg_parser->cfg); 132177079be7Ssthen #endif 132277079be7Ssthen d = cfg_parser->cfg->directory; 132377079be7Ssthen /* adjust directory if we have already chroot, 132477079be7Ssthen * like, we reread after sighup */ 132577079be7Ssthen if(cfg_parser->chroot && cfg_parser->chroot[0] && 132677079be7Ssthen strncmp(d, cfg_parser->chroot, strlen( 132777079be7Ssthen cfg_parser->chroot)) == 0) 132877079be7Ssthen d += strlen(cfg_parser->chroot); 132977079be7Ssthen if(d[0]) { 133077079be7Ssthen if(chdir(d)) 133177079be7Ssthen log_err("cannot chdir to directory: %s (%s)", 133277079be7Ssthen d, strerror(errno)); 133377079be7Ssthen } 133477079be7Ssthen } 1335933707f3Ssthen } 1336933707f3Ssthen ; 1337933707f3Ssthen server_logfile: VAR_LOGFILE STRING_ARG 1338933707f3Ssthen { 1339933707f3Ssthen OUTYY(("P(server_logfile:%s)\n", $2)); 1340933707f3Ssthen free(cfg_parser->cfg->logfile); 1341933707f3Ssthen cfg_parser->cfg->logfile = $2; 1342933707f3Ssthen cfg_parser->cfg->use_syslog = 0; 1343933707f3Ssthen } 1344933707f3Ssthen ; 1345933707f3Ssthen server_pidfile: VAR_PIDFILE STRING_ARG 1346933707f3Ssthen { 1347933707f3Ssthen OUTYY(("P(server_pidfile:%s)\n", $2)); 1348933707f3Ssthen free(cfg_parser->cfg->pidfile); 1349933707f3Ssthen cfg_parser->cfg->pidfile = $2; 1350933707f3Ssthen } 1351933707f3Ssthen ; 1352933707f3Ssthen server_root_hints: VAR_ROOT_HINTS STRING_ARG 1353933707f3Ssthen { 1354933707f3Ssthen OUTYY(("P(server_root_hints:%s)\n", $2)); 1355933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, $2)) 1356933707f3Ssthen yyerror("out of memory"); 1357933707f3Ssthen } 1358933707f3Ssthen ; 1359933707f3Ssthen server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG 1360933707f3Ssthen { 1361933707f3Ssthen OUTYY(("P(server_dlv_anchor_file:%s)\n", $2)); 13622c144df0Ssthen log_warn("option dlv-anchor-file ignored: DLV is decommissioned"); 13632c144df0Ssthen free($2); 1364933707f3Ssthen } 1365933707f3Ssthen ; 1366933707f3Ssthen server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG 1367933707f3Ssthen { 1368933707f3Ssthen OUTYY(("P(server_dlv_anchor:%s)\n", $2)); 13692c144df0Ssthen log_warn("option dlv-anchor ignored: DLV is decommissioned"); 13702c144df0Ssthen free($2); 1371933707f3Ssthen } 1372933707f3Ssthen ; 1373933707f3Ssthen server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG 1374933707f3Ssthen { 1375933707f3Ssthen OUTYY(("P(server_auto_trust_anchor_file:%s)\n", $2)); 1376933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 1377933707f3Ssthen auto_trust_anchor_file_list, $2)) 1378933707f3Ssthen yyerror("out of memory"); 1379933707f3Ssthen } 1380933707f3Ssthen ; 1381933707f3Ssthen server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG 1382933707f3Ssthen { 1383933707f3Ssthen OUTYY(("P(server_trust_anchor_file:%s)\n", $2)); 1384933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 1385933707f3Ssthen trust_anchor_file_list, $2)) 1386933707f3Ssthen yyerror("out of memory"); 1387933707f3Ssthen } 1388933707f3Ssthen ; 1389933707f3Ssthen server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG 1390933707f3Ssthen { 1391933707f3Ssthen OUTYY(("P(server_trusted_keys_file:%s)\n", $2)); 1392933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 1393933707f3Ssthen trusted_keys_file_list, $2)) 1394933707f3Ssthen yyerror("out of memory"); 1395933707f3Ssthen } 1396933707f3Ssthen ; 1397933707f3Ssthen server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG 1398933707f3Ssthen { 1399933707f3Ssthen OUTYY(("P(server_trust_anchor:%s)\n", $2)); 1400933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, $2)) 1401933707f3Ssthen yyerror("out of memory"); 1402933707f3Ssthen } 1403933707f3Ssthen ; 14042be9e038Ssthen server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG 14052be9e038Ssthen { 14062be9e038Ssthen OUTYY(("P(server_trust_anchor_signaling:%s)\n", $2)); 14072be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 14082be9e038Ssthen yyerror("expected yes or no."); 14092be9e038Ssthen else 14102be9e038Ssthen cfg_parser->cfg->trust_anchor_signaling = 14112be9e038Ssthen (strcmp($2, "yes")==0); 14122be9e038Ssthen free($2); 14132be9e038Ssthen } 14142be9e038Ssthen ; 141520237c55Ssthen server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG 141620237c55Ssthen { 141720237c55Ssthen OUTYY(("P(server_root_key_sentinel:%s)\n", $2)); 141820237c55Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 141920237c55Ssthen yyerror("expected yes or no."); 142020237c55Ssthen else 142120237c55Ssthen cfg_parser->cfg->root_key_sentinel = 142220237c55Ssthen (strcmp($2, "yes")==0); 142320237c55Ssthen free($2); 142420237c55Ssthen } 142520237c55Ssthen ; 1426933707f3Ssthen server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG 1427933707f3Ssthen { 1428933707f3Ssthen OUTYY(("P(server_domain_insecure:%s)\n", $2)); 1429933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, $2)) 1430933707f3Ssthen yyerror("out of memory"); 1431933707f3Ssthen } 1432933707f3Ssthen ; 1433933707f3Ssthen server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG 1434933707f3Ssthen { 1435933707f3Ssthen OUTYY(("P(server_hide_identity:%s)\n", $2)); 1436933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1437933707f3Ssthen yyerror("expected yes or no."); 1438933707f3Ssthen else cfg_parser->cfg->hide_identity = (strcmp($2, "yes")==0); 1439933707f3Ssthen free($2); 1440933707f3Ssthen } 1441933707f3Ssthen ; 1442933707f3Ssthen server_hide_version: VAR_HIDE_VERSION STRING_ARG 1443933707f3Ssthen { 1444933707f3Ssthen OUTYY(("P(server_hide_version:%s)\n", $2)); 1445933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1446933707f3Ssthen yyerror("expected yes or no."); 1447933707f3Ssthen else cfg_parser->cfg->hide_version = (strcmp($2, "yes")==0); 1448933707f3Ssthen free($2); 1449933707f3Ssthen } 1450933707f3Ssthen ; 14512be9e038Ssthen server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG 14522be9e038Ssthen { 14532be9e038Ssthen OUTYY(("P(server_hide_trustanchor:%s)\n", $2)); 14542be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 14552be9e038Ssthen yyerror("expected yes or no."); 14562be9e038Ssthen else cfg_parser->cfg->hide_trustanchor = (strcmp($2, "yes")==0); 14572be9e038Ssthen free($2); 14582be9e038Ssthen } 14592be9e038Ssthen ; 1460191f22c6Ssthen server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG 1461191f22c6Ssthen { 1462191f22c6Ssthen OUTYY(("P(server_hide_user_agent:%s)\n", $2)); 1463191f22c6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1464191f22c6Ssthen yyerror("expected yes or no."); 1465191f22c6Ssthen else cfg_parser->cfg->hide_http_user_agent = (strcmp($2, "yes")==0); 1466191f22c6Ssthen free($2); 1467191f22c6Ssthen } 1468191f22c6Ssthen ; 1469933707f3Ssthen server_identity: VAR_IDENTITY STRING_ARG 1470933707f3Ssthen { 1471933707f3Ssthen OUTYY(("P(server_identity:%s)\n", $2)); 1472933707f3Ssthen free(cfg_parser->cfg->identity); 1473933707f3Ssthen cfg_parser->cfg->identity = $2; 1474933707f3Ssthen } 1475933707f3Ssthen ; 1476933707f3Ssthen server_version: VAR_VERSION STRING_ARG 1477933707f3Ssthen { 1478933707f3Ssthen OUTYY(("P(server_version:%s)\n", $2)); 1479933707f3Ssthen free(cfg_parser->cfg->version); 1480933707f3Ssthen cfg_parser->cfg->version = $2; 1481933707f3Ssthen } 1482933707f3Ssthen ; 1483191f22c6Ssthen server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG 1484191f22c6Ssthen { 1485191f22c6Ssthen OUTYY(("P(server_http_user_agent:%s)\n", $2)); 1486191f22c6Ssthen free(cfg_parser->cfg->http_user_agent); 1487191f22c6Ssthen cfg_parser->cfg->http_user_agent = $2; 1488191f22c6Ssthen } 1489191f22c6Ssthen ; 14909982a05dSsthen server_nsid: VAR_NSID STRING_ARG 14919982a05dSsthen { 14929982a05dSsthen OUTYY(("P(server_nsid:%s)\n", $2)); 14939982a05dSsthen free(cfg_parser->cfg->nsid_cfg_str); 14949982a05dSsthen cfg_parser->cfg->nsid_cfg_str = $2; 14959982a05dSsthen free(cfg_parser->cfg->nsid); 14969982a05dSsthen cfg_parser->cfg->nsid = NULL; 14979982a05dSsthen cfg_parser->cfg->nsid_len = 0; 14989982a05dSsthen if (*$2 == 0) 14999982a05dSsthen ; /* pass; empty string is not setting nsid */ 15009982a05dSsthen else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid( 15019982a05dSsthen $2, &cfg_parser->cfg->nsid_len))) 15029982a05dSsthen yyerror("the NSID must be either a hex string or an " 15039982a05dSsthen "ascii character string prepended with ascii_."); 15049982a05dSsthen } 15059982a05dSsthen ; 1506933707f3Ssthen server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG 1507933707f3Ssthen { 1508933707f3Ssthen OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); 1509933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_rcvbuf)) 1510933707f3Ssthen yyerror("buffer size expected"); 1511933707f3Ssthen free($2); 1512933707f3Ssthen } 1513933707f3Ssthen ; 1514933707f3Ssthen server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG 1515933707f3Ssthen { 1516933707f3Ssthen OUTYY(("P(server_so_sndbuf:%s)\n", $2)); 1517933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_sndbuf)) 1518933707f3Ssthen yyerror("buffer size expected"); 1519933707f3Ssthen free($2); 1520933707f3Ssthen } 1521933707f3Ssthen ; 15225d76a658Ssthen server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG 15235d76a658Ssthen { 15245d76a658Ssthen OUTYY(("P(server_so_reuseport:%s)\n", $2)); 15255d76a658Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 15265d76a658Ssthen yyerror("expected yes or no."); 15275d76a658Ssthen else cfg_parser->cfg->so_reuseport = 15285d76a658Ssthen (strcmp($2, "yes")==0); 15295d76a658Ssthen free($2); 15305d76a658Ssthen } 15315d76a658Ssthen ; 1532fdfb4ba6Ssthen server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG 1533fdfb4ba6Ssthen { 1534fdfb4ba6Ssthen OUTYY(("P(server_ip_transparent:%s)\n", $2)); 1535fdfb4ba6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1536fdfb4ba6Ssthen yyerror("expected yes or no."); 1537fdfb4ba6Ssthen else cfg_parser->cfg->ip_transparent = 1538fdfb4ba6Ssthen (strcmp($2, "yes")==0); 1539fdfb4ba6Ssthen free($2); 1540fdfb4ba6Ssthen } 1541fdfb4ba6Ssthen ; 15422ee382b6Ssthen server_ip_freebind: VAR_IP_FREEBIND STRING_ARG 15432ee382b6Ssthen { 15442ee382b6Ssthen OUTYY(("P(server_ip_freebind:%s)\n", $2)); 15452ee382b6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 15462ee382b6Ssthen yyerror("expected yes or no."); 15472ee382b6Ssthen else cfg_parser->cfg->ip_freebind = 15482ee382b6Ssthen (strcmp($2, "yes")==0); 15492ee382b6Ssthen free($2); 15502ee382b6Ssthen } 15512ee382b6Ssthen ; 1552a3167c07Ssthen server_ip_dscp: VAR_IP_DSCP STRING_ARG 1553a3167c07Ssthen { 1554a3167c07Ssthen OUTYY(("P(server_ip_dscp:%s)\n", $2)); 1555a3167c07Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1556a3167c07Ssthen yyerror("number expected"); 1557a3167c07Ssthen else if (atoi($2) > 63) 1558a3167c07Ssthen yyerror("value too large (max 63)"); 1559a3167c07Ssthen else if (atoi($2) < 0) 1560a3167c07Ssthen yyerror("value too small (min 0)"); 1561a3167c07Ssthen else 1562a3167c07Ssthen cfg_parser->cfg->ip_dscp = atoi($2); 1563a3167c07Ssthen free($2); 1564a3167c07Ssthen } 1565a3167c07Ssthen ; 1566f6b99bafSsthen server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG 1567f6b99bafSsthen { 1568f6b99bafSsthen OUTYY(("P(server_stream_wait_size:%s)\n", $2)); 1569f6b99bafSsthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->stream_wait_size)) 1570f6b99bafSsthen yyerror("memory size expected"); 1571f6b99bafSsthen free($2); 1572f6b99bafSsthen } 1573f6b99bafSsthen ; 1574933707f3Ssthen server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG 1575933707f3Ssthen { 1576933707f3Ssthen OUTYY(("P(server_edns_buffer_size:%s)\n", $2)); 1577933707f3Ssthen if(atoi($2) == 0) 1578933707f3Ssthen yyerror("number expected"); 1579933707f3Ssthen else if (atoi($2) < 12) 1580933707f3Ssthen yyerror("edns buffer size too small"); 1581933707f3Ssthen else if (atoi($2) > 65535) 1582933707f3Ssthen cfg_parser->cfg->edns_buffer_size = 65535; 1583933707f3Ssthen else cfg_parser->cfg->edns_buffer_size = atoi($2); 1584933707f3Ssthen free($2); 1585933707f3Ssthen } 1586933707f3Ssthen ; 1587933707f3Ssthen server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG 1588933707f3Ssthen { 1589933707f3Ssthen OUTYY(("P(server_msg_buffer_size:%s)\n", $2)); 1590933707f3Ssthen if(atoi($2) == 0) 1591933707f3Ssthen yyerror("number expected"); 1592933707f3Ssthen else if (atoi($2) < 4096) 1593933707f3Ssthen yyerror("message buffer size too small (use 4096)"); 1594933707f3Ssthen else cfg_parser->cfg->msg_buffer_size = atoi($2); 1595933707f3Ssthen free($2); 1596933707f3Ssthen } 1597933707f3Ssthen ; 1598933707f3Ssthen server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG 1599933707f3Ssthen { 1600933707f3Ssthen OUTYY(("P(server_msg_cache_size:%s)\n", $2)); 1601933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size)) 1602933707f3Ssthen yyerror("memory size expected"); 1603933707f3Ssthen free($2); 1604933707f3Ssthen } 1605933707f3Ssthen ; 1606933707f3Ssthen server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG 1607933707f3Ssthen { 1608933707f3Ssthen OUTYY(("P(server_msg_cache_slabs:%s)\n", $2)); 1609e21c60efSsthen if(atoi($2) == 0) { 1610933707f3Ssthen yyerror("number expected"); 1611e21c60efSsthen } else { 1612933707f3Ssthen cfg_parser->cfg->msg_cache_slabs = atoi($2); 1613933707f3Ssthen if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) 1614933707f3Ssthen yyerror("must be a power of 2"); 1615933707f3Ssthen } 1616933707f3Ssthen free($2); 1617933707f3Ssthen } 1618933707f3Ssthen ; 1619933707f3Ssthen server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG 1620933707f3Ssthen { 1621933707f3Ssthen OUTYY(("P(server_num_queries_per_thread:%s)\n", $2)); 1622933707f3Ssthen if(atoi($2) == 0) 1623933707f3Ssthen yyerror("number expected"); 1624933707f3Ssthen else cfg_parser->cfg->num_queries_per_thread = atoi($2); 1625933707f3Ssthen free($2); 1626933707f3Ssthen } 1627933707f3Ssthen ; 1628933707f3Ssthen server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG 1629933707f3Ssthen { 1630933707f3Ssthen OUTYY(("P(server_jostle_timeout:%s)\n", $2)); 1631933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1632933707f3Ssthen yyerror("number expected"); 1633933707f3Ssthen else cfg_parser->cfg->jostle_time = atoi($2); 1634933707f3Ssthen free($2); 1635933707f3Ssthen } 1636933707f3Ssthen ; 16375d76a658Ssthen server_delay_close: VAR_DELAY_CLOSE STRING_ARG 16385d76a658Ssthen { 16395d76a658Ssthen OUTYY(("P(server_delay_close:%s)\n", $2)); 16405d76a658Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 16415d76a658Ssthen yyerror("number expected"); 16425d76a658Ssthen else cfg_parser->cfg->delay_close = atoi($2); 16435d76a658Ssthen free($2); 16445d76a658Ssthen } 16455d76a658Ssthen ; 1646eba819a2Ssthen server_udp_connect: VAR_UDP_CONNECT STRING_ARG 1647eba819a2Ssthen { 1648eba819a2Ssthen OUTYY(("P(server_udp_connect:%s)\n", $2)); 1649eba819a2Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1650eba819a2Ssthen yyerror("expected yes or no."); 1651eba819a2Ssthen else cfg_parser->cfg->udp_connect = (strcmp($2, "yes")==0); 1652eba819a2Ssthen free($2); 1653eba819a2Ssthen } 1654eba819a2Ssthen ; 165598f3ca02Sbrad server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG 165698f3ca02Sbrad { 165798f3ca02Sbrad OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); 165898f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 165998f3ca02Sbrad yyerror("expected yes or no."); 166098f3ca02Sbrad else cfg_parser->cfg->unblock_lan_zones = 166198f3ca02Sbrad (strcmp($2, "yes")==0); 166298f3ca02Sbrad free($2); 166398f3ca02Sbrad } 166498f3ca02Sbrad ; 166532e31f52Ssthen server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG 166632e31f52Ssthen { 166732e31f52Ssthen OUTYY(("P(server_insecure_lan_zones:%s)\n", $2)); 166832e31f52Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 166932e31f52Ssthen yyerror("expected yes or no."); 167032e31f52Ssthen else cfg_parser->cfg->insecure_lan_zones = 167132e31f52Ssthen (strcmp($2, "yes")==0); 167232e31f52Ssthen free($2); 167332e31f52Ssthen } 167432e31f52Ssthen ; 1675933707f3Ssthen server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG 1676933707f3Ssthen { 1677933707f3Ssthen OUTYY(("P(server_rrset_cache_size:%s)\n", $2)); 1678933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size)) 1679933707f3Ssthen yyerror("memory size expected"); 1680933707f3Ssthen free($2); 1681933707f3Ssthen } 1682933707f3Ssthen ; 1683933707f3Ssthen server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG 1684933707f3Ssthen { 1685933707f3Ssthen OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2)); 1686e21c60efSsthen if(atoi($2) == 0) { 1687933707f3Ssthen yyerror("number expected"); 1688e21c60efSsthen } else { 1689933707f3Ssthen cfg_parser->cfg->rrset_cache_slabs = atoi($2); 1690933707f3Ssthen if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) 1691933707f3Ssthen yyerror("must be a power of 2"); 1692933707f3Ssthen } 1693933707f3Ssthen free($2); 1694933707f3Ssthen } 1695933707f3Ssthen ; 1696933707f3Ssthen server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG 1697933707f3Ssthen { 1698933707f3Ssthen OUTYY(("P(server_infra_host_ttl:%s)\n", $2)); 1699933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1700933707f3Ssthen yyerror("number expected"); 1701933707f3Ssthen else cfg_parser->cfg->host_ttl = atoi($2); 1702933707f3Ssthen free($2); 1703933707f3Ssthen } 1704933707f3Ssthen ; 1705933707f3Ssthen server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG 1706933707f3Ssthen { 1707933707f3Ssthen OUTYY(("P(server_infra_lame_ttl:%s)\n", $2)); 1708933707f3Ssthen verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " 1709933707f3Ssthen "removed, use infra-host-ttl)", $2); 1710933707f3Ssthen free($2); 1711933707f3Ssthen } 1712933707f3Ssthen ; 1713933707f3Ssthen server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG 1714933707f3Ssthen { 1715933707f3Ssthen OUTYY(("P(server_infra_cache_numhosts:%s)\n", $2)); 1716933707f3Ssthen if(atoi($2) == 0) 1717933707f3Ssthen yyerror("number expected"); 1718933707f3Ssthen else cfg_parser->cfg->infra_cache_numhosts = atoi($2); 1719933707f3Ssthen free($2); 1720933707f3Ssthen } 1721933707f3Ssthen ; 1722933707f3Ssthen server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG 1723933707f3Ssthen { 1724933707f3Ssthen OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2)); 1725933707f3Ssthen verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " 1726933707f3Ssthen "(option removed, use infra-cache-numhosts)", $2); 1727933707f3Ssthen free($2); 1728933707f3Ssthen } 1729933707f3Ssthen ; 1730933707f3Ssthen server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG 1731933707f3Ssthen { 1732933707f3Ssthen OUTYY(("P(server_infra_cache_slabs:%s)\n", $2)); 1733e21c60efSsthen if(atoi($2) == 0) { 1734933707f3Ssthen yyerror("number expected"); 1735e21c60efSsthen } else { 1736933707f3Ssthen cfg_parser->cfg->infra_cache_slabs = atoi($2); 1737933707f3Ssthen if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) 1738933707f3Ssthen yyerror("must be a power of 2"); 1739933707f3Ssthen } 1740933707f3Ssthen free($2); 1741933707f3Ssthen } 1742933707f3Ssthen ; 1743b2cdf21fSsthen server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG 1744b2cdf21fSsthen { 1745b2cdf21fSsthen OUTYY(("P(server_infra_cache_min_rtt:%s)\n", $2)); 1746b2cdf21fSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1747b2cdf21fSsthen yyerror("number expected"); 1748b2cdf21fSsthen else cfg_parser->cfg->infra_cache_min_rtt = atoi($2); 1749b2cdf21fSsthen free($2); 1750b2cdf21fSsthen } 1751b2cdf21fSsthen ; 1752d1e2768aSsthen server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG 1753d1e2768aSsthen { 1754d1e2768aSsthen OUTYY(("P(server_infra_cache_max_rtt:%s)\n", $2)); 1755d1e2768aSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1756d1e2768aSsthen yyerror("number expected"); 1757d1e2768aSsthen else cfg_parser->cfg->infra_cache_max_rtt = atoi($2); 1758d1e2768aSsthen free($2); 1759d1e2768aSsthen } 1760d1e2768aSsthen ; 1761eba819a2Ssthen server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG 1762eba819a2Ssthen { 1763eba819a2Ssthen OUTYY(("P(server_infra_keep_probing:%s)\n", $2)); 1764eba819a2Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1765eba819a2Ssthen yyerror("expected yes or no."); 1766eba819a2Ssthen else cfg_parser->cfg->infra_keep_probing = 1767eba819a2Ssthen (strcmp($2, "yes")==0); 1768eba819a2Ssthen free($2); 1769eba819a2Ssthen } 1770eba819a2Ssthen ; 1771933707f3Ssthen server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG 1772933707f3Ssthen { 1773933707f3Ssthen OUTYY(("P(server_target_fetch_policy:%s)\n", $2)); 1774933707f3Ssthen free(cfg_parser->cfg->target_fetch_policy); 1775933707f3Ssthen cfg_parser->cfg->target_fetch_policy = $2; 1776933707f3Ssthen } 1777933707f3Ssthen ; 1778933707f3Ssthen server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG 1779933707f3Ssthen { 1780933707f3Ssthen OUTYY(("P(server_harden_short_bufsize:%s)\n", $2)); 1781933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1782933707f3Ssthen yyerror("expected yes or no."); 1783933707f3Ssthen else cfg_parser->cfg->harden_short_bufsize = 1784933707f3Ssthen (strcmp($2, "yes")==0); 1785933707f3Ssthen free($2); 1786933707f3Ssthen } 1787933707f3Ssthen ; 1788933707f3Ssthen server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG 1789933707f3Ssthen { 1790933707f3Ssthen OUTYY(("P(server_harden_large_queries:%s)\n", $2)); 1791933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1792933707f3Ssthen yyerror("expected yes or no."); 1793933707f3Ssthen else cfg_parser->cfg->harden_large_queries = 1794933707f3Ssthen (strcmp($2, "yes")==0); 1795933707f3Ssthen free($2); 1796933707f3Ssthen } 1797933707f3Ssthen ; 1798933707f3Ssthen server_harden_glue: VAR_HARDEN_GLUE STRING_ARG 1799933707f3Ssthen { 1800933707f3Ssthen OUTYY(("P(server_harden_glue:%s)\n", $2)); 1801933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1802933707f3Ssthen yyerror("expected yes or no."); 1803933707f3Ssthen else cfg_parser->cfg->harden_glue = 1804933707f3Ssthen (strcmp($2, "yes")==0); 1805933707f3Ssthen free($2); 1806933707f3Ssthen } 1807933707f3Ssthen ; 1808933707f3Ssthen server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG 1809933707f3Ssthen { 1810933707f3Ssthen OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2)); 1811933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1812933707f3Ssthen yyerror("expected yes or no."); 1813933707f3Ssthen else cfg_parser->cfg->harden_dnssec_stripped = 1814933707f3Ssthen (strcmp($2, "yes")==0); 1815933707f3Ssthen free($2); 1816933707f3Ssthen } 1817933707f3Ssthen ; 1818933707f3Ssthen server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG 1819933707f3Ssthen { 1820933707f3Ssthen OUTYY(("P(server_harden_below_nxdomain:%s)\n", $2)); 1821933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1822933707f3Ssthen yyerror("expected yes or no."); 1823933707f3Ssthen else cfg_parser->cfg->harden_below_nxdomain = 1824933707f3Ssthen (strcmp($2, "yes")==0); 1825933707f3Ssthen free($2); 1826933707f3Ssthen } 1827933707f3Ssthen ; 1828933707f3Ssthen server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG 1829933707f3Ssthen { 1830933707f3Ssthen OUTYY(("P(server_harden_referral_path:%s)\n", $2)); 1831933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1832933707f3Ssthen yyerror("expected yes or no."); 1833933707f3Ssthen else cfg_parser->cfg->harden_referral_path = 1834933707f3Ssthen (strcmp($2, "yes")==0); 1835933707f3Ssthen free($2); 1836933707f3Ssthen } 1837933707f3Ssthen ; 1838fdfb4ba6Ssthen server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG 1839fdfb4ba6Ssthen { 1840fdfb4ba6Ssthen OUTYY(("P(server_harden_algo_downgrade:%s)\n", $2)); 1841fdfb4ba6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1842fdfb4ba6Ssthen yyerror("expected yes or no."); 1843fdfb4ba6Ssthen else cfg_parser->cfg->harden_algo_downgrade = 1844fdfb4ba6Ssthen (strcmp($2, "yes")==0); 1845fdfb4ba6Ssthen free($2); 1846fdfb4ba6Ssthen } 1847fdfb4ba6Ssthen ; 18488b7325afSsthen server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG 18498b7325afSsthen { 18508b7325afSsthen OUTYY(("P(server_harden_unknown_additional:%s)\n", $2)); 18518b7325afSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 18528b7325afSsthen yyerror("expected yes or no."); 18538b7325afSsthen else cfg_parser->cfg->harden_unknown_additional = 18548b7325afSsthen (strcmp($2, "yes")==0); 18558b7325afSsthen free($2); 18568b7325afSsthen } 18578b7325afSsthen ; 1858933707f3Ssthen server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG 1859933707f3Ssthen { 1860933707f3Ssthen OUTYY(("P(server_use_caps_for_id:%s)\n", $2)); 1861933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1862933707f3Ssthen yyerror("expected yes or no."); 1863933707f3Ssthen else cfg_parser->cfg->use_caps_bits_for_id = 1864933707f3Ssthen (strcmp($2, "yes")==0); 1865933707f3Ssthen free($2); 1866933707f3Ssthen } 1867933707f3Ssthen ; 1868fdfb4ba6Ssthen server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG 1869fdfb4ba6Ssthen { 1870fdfb4ba6Ssthen OUTYY(("P(server_caps_whitelist:%s)\n", $2)); 1871fdfb4ba6Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, $2)) 1872fdfb4ba6Ssthen yyerror("out of memory"); 1873fdfb4ba6Ssthen } 1874fdfb4ba6Ssthen ; 1875933707f3Ssthen server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG 1876933707f3Ssthen { 1877933707f3Ssthen OUTYY(("P(server_private_address:%s)\n", $2)); 1878933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, $2)) 1879933707f3Ssthen yyerror("out of memory"); 1880933707f3Ssthen } 1881933707f3Ssthen ; 1882933707f3Ssthen server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG 1883933707f3Ssthen { 1884933707f3Ssthen OUTYY(("P(server_private_domain:%s)\n", $2)); 1885933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, $2)) 1886933707f3Ssthen yyerror("out of memory"); 1887933707f3Ssthen } 1888933707f3Ssthen ; 1889933707f3Ssthen server_prefetch: VAR_PREFETCH STRING_ARG 1890933707f3Ssthen { 1891933707f3Ssthen OUTYY(("P(server_prefetch:%s)\n", $2)); 1892933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1893933707f3Ssthen yyerror("expected yes or no."); 1894933707f3Ssthen else cfg_parser->cfg->prefetch = (strcmp($2, "yes")==0); 1895933707f3Ssthen free($2); 1896933707f3Ssthen } 1897933707f3Ssthen ; 1898933707f3Ssthen server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG 1899933707f3Ssthen { 1900933707f3Ssthen OUTYY(("P(server_prefetch_key:%s)\n", $2)); 1901933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1902933707f3Ssthen yyerror("expected yes or no."); 1903933707f3Ssthen else cfg_parser->cfg->prefetch_key = (strcmp($2, "yes")==0); 1904933707f3Ssthen free($2); 1905933707f3Ssthen } 1906933707f3Ssthen ; 19073150e5f6Ssthen server_deny_any: VAR_DENY_ANY STRING_ARG 19083150e5f6Ssthen { 19093150e5f6Ssthen OUTYY(("P(server_deny_any:%s)\n", $2)); 19103150e5f6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 19113150e5f6Ssthen yyerror("expected yes or no."); 19123150e5f6Ssthen else cfg_parser->cfg->deny_any = (strcmp($2, "yes")==0); 19133150e5f6Ssthen free($2); 19143150e5f6Ssthen } 19153150e5f6Ssthen ; 1916933707f3Ssthen server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG 1917933707f3Ssthen { 1918933707f3Ssthen OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2)); 1919933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 1920933707f3Ssthen yyerror("number expected"); 1921933707f3Ssthen else cfg_parser->cfg->unwanted_threshold = atoi($2); 1922933707f3Ssthen free($2); 1923933707f3Ssthen } 1924933707f3Ssthen ; 1925933707f3Ssthen server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG 1926933707f3Ssthen { 1927933707f3Ssthen OUTYY(("P(server_do_not_query_address:%s)\n", $2)); 1928933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, $2)) 1929933707f3Ssthen yyerror("out of memory"); 1930933707f3Ssthen } 1931933707f3Ssthen ; 1932933707f3Ssthen server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG 1933933707f3Ssthen { 1934933707f3Ssthen OUTYY(("P(server_do_not_query_localhost:%s)\n", $2)); 1935933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1936933707f3Ssthen yyerror("expected yes or no."); 1937933707f3Ssthen else cfg_parser->cfg->donotquery_localhost = 1938933707f3Ssthen (strcmp($2, "yes")==0); 1939933707f3Ssthen free($2); 1940933707f3Ssthen } 1941933707f3Ssthen ; 1942933707f3Ssthen server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG 1943933707f3Ssthen { 1944933707f3Ssthen OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); 194545872187Ssthen validate_acl_action($3); 1946933707f3Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) 1947933707f3Ssthen fatal_exit("out of memory adding acl"); 1948933707f3Ssthen } 194945872187Ssthen ; 195045872187Ssthen server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG 195145872187Ssthen { 195245872187Ssthen OUTYY(("P(server_interface_action:%s %s)\n", $2, $3)); 195345872187Ssthen validate_acl_action($3); 195445872187Ssthen if(!cfg_str2list_insert( 195545872187Ssthen &cfg_parser->cfg->interface_actions, $2, $3)) 195645872187Ssthen fatal_exit("out of memory adding acl"); 1957933707f3Ssthen } 1958933707f3Ssthen ; 1959933707f3Ssthen server_module_conf: VAR_MODULE_CONF STRING_ARG 1960933707f3Ssthen { 1961933707f3Ssthen OUTYY(("P(server_module_conf:%s)\n", $2)); 1962933707f3Ssthen free(cfg_parser->cfg->module_conf); 1963933707f3Ssthen cfg_parser->cfg->module_conf = $2; 1964933707f3Ssthen } 1965933707f3Ssthen ; 1966933707f3Ssthen server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG 1967933707f3Ssthen { 1968933707f3Ssthen OUTYY(("P(server_val_override_date:%s)\n", $2)); 196932e31f52Ssthen if(*$2 == '\0' || strcmp($2, "0") == 0) { 1970933707f3Ssthen cfg_parser->cfg->val_date_override = 0; 1971933707f3Ssthen } else if(strlen($2) == 14) { 1972933707f3Ssthen cfg_parser->cfg->val_date_override = 1973933707f3Ssthen cfg_convert_timeval($2); 1974933707f3Ssthen if(!cfg_parser->cfg->val_date_override) 1975933707f3Ssthen yyerror("bad date/time specification"); 1976933707f3Ssthen } else { 1977933707f3Ssthen if(atoi($2) == 0) 1978933707f3Ssthen yyerror("number expected"); 1979933707f3Ssthen cfg_parser->cfg->val_date_override = atoi($2); 1980933707f3Ssthen } 1981933707f3Ssthen free($2); 1982933707f3Ssthen } 1983933707f3Ssthen ; 1984933707f3Ssthen server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG 1985933707f3Ssthen { 1986933707f3Ssthen OUTYY(("P(server_val_sig_skew_min:%s)\n", $2)); 198732e31f52Ssthen if(*$2 == '\0' || strcmp($2, "0") == 0) { 1988933707f3Ssthen cfg_parser->cfg->val_sig_skew_min = 0; 1989933707f3Ssthen } else { 1990933707f3Ssthen cfg_parser->cfg->val_sig_skew_min = atoi($2); 1991933707f3Ssthen if(!cfg_parser->cfg->val_sig_skew_min) 1992933707f3Ssthen yyerror("number expected"); 1993933707f3Ssthen } 1994933707f3Ssthen free($2); 1995933707f3Ssthen } 1996933707f3Ssthen ; 1997933707f3Ssthen server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG 1998933707f3Ssthen { 1999933707f3Ssthen OUTYY(("P(server_val_sig_skew_max:%s)\n", $2)); 200032e31f52Ssthen if(*$2 == '\0' || strcmp($2, "0") == 0) { 2001933707f3Ssthen cfg_parser->cfg->val_sig_skew_max = 0; 2002933707f3Ssthen } else { 2003933707f3Ssthen cfg_parser->cfg->val_sig_skew_max = atoi($2); 2004933707f3Ssthen if(!cfg_parser->cfg->val_sig_skew_max) 2005933707f3Ssthen yyerror("number expected"); 2006933707f3Ssthen } 2007933707f3Ssthen free($2); 2008933707f3Ssthen } 2009933707f3Ssthen ; 2010191f22c6Ssthen server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG 2011191f22c6Ssthen { 2012191f22c6Ssthen OUTYY(("P(server_val_max_restart:%s)\n", $2)); 2013191f22c6Ssthen if(*$2 == '\0' || strcmp($2, "0") == 0) { 2014191f22c6Ssthen cfg_parser->cfg->val_max_restart = 0; 2015191f22c6Ssthen } else { 2016191f22c6Ssthen cfg_parser->cfg->val_max_restart = atoi($2); 2017191f22c6Ssthen if(!cfg_parser->cfg->val_max_restart) 2018191f22c6Ssthen yyerror("number expected"); 2019191f22c6Ssthen } 2020191f22c6Ssthen free($2); 2021191f22c6Ssthen } 2022191f22c6Ssthen ; 2023933707f3Ssthen server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG 2024933707f3Ssthen { 2025933707f3Ssthen OUTYY(("P(server_cache_max_ttl:%s)\n", $2)); 2026933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2027933707f3Ssthen yyerror("number expected"); 2028933707f3Ssthen else cfg_parser->cfg->max_ttl = atoi($2); 2029933707f3Ssthen free($2); 2030933707f3Ssthen } 2031933707f3Ssthen ; 2032fdfb4ba6Ssthen server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG 2033fdfb4ba6Ssthen { 2034fdfb4ba6Ssthen OUTYY(("P(server_cache_max_negative_ttl:%s)\n", $2)); 2035fdfb4ba6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2036fdfb4ba6Ssthen yyerror("number expected"); 2037fdfb4ba6Ssthen else cfg_parser->cfg->max_negative_ttl = atoi($2); 2038fdfb4ba6Ssthen free($2); 2039fdfb4ba6Ssthen } 2040fdfb4ba6Ssthen ; 20412bdc0ed1Ssthen server_cache_min_negative_ttl: VAR_CACHE_MIN_NEGATIVE_TTL STRING_ARG 20422bdc0ed1Ssthen { 20432bdc0ed1Ssthen OUTYY(("P(server_cache_min_negative_ttl:%s)\n", $2)); 20442bdc0ed1Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 20452bdc0ed1Ssthen yyerror("number expected"); 20462bdc0ed1Ssthen else cfg_parser->cfg->min_negative_ttl = atoi($2); 20472bdc0ed1Ssthen free($2); 20482bdc0ed1Ssthen } 20492bdc0ed1Ssthen ; 2050933707f3Ssthen server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG 2051933707f3Ssthen { 2052933707f3Ssthen OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); 2053933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2054933707f3Ssthen yyerror("number expected"); 2055933707f3Ssthen else cfg_parser->cfg->min_ttl = atoi($2); 2056933707f3Ssthen free($2); 2057933707f3Ssthen } 2058933707f3Ssthen ; 2059933707f3Ssthen server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG 2060933707f3Ssthen { 2061933707f3Ssthen OUTYY(("P(server_bogus_ttl:%s)\n", $2)); 2062933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2063933707f3Ssthen yyerror("number expected"); 2064933707f3Ssthen else cfg_parser->cfg->bogus_ttl = atoi($2); 2065933707f3Ssthen free($2); 2066933707f3Ssthen } 2067933707f3Ssthen ; 2068933707f3Ssthen server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG 2069933707f3Ssthen { 2070933707f3Ssthen OUTYY(("P(server_val_clean_additional:%s)\n", $2)); 2071933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2072933707f3Ssthen yyerror("expected yes or no."); 2073933707f3Ssthen else cfg_parser->cfg->val_clean_additional = 2074933707f3Ssthen (strcmp($2, "yes")==0); 2075933707f3Ssthen free($2); 2076933707f3Ssthen } 2077933707f3Ssthen ; 2078933707f3Ssthen server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG 2079933707f3Ssthen { 2080933707f3Ssthen OUTYY(("P(server_val_permissive_mode:%s)\n", $2)); 2081933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2082933707f3Ssthen yyerror("expected yes or no."); 2083933707f3Ssthen else cfg_parser->cfg->val_permissive_mode = 2084933707f3Ssthen (strcmp($2, "yes")==0); 2085933707f3Ssthen free($2); 2086933707f3Ssthen } 2087933707f3Ssthen ; 2088938a3a5eSflorian server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG 2089938a3a5eSflorian { 2090938a3a5eSflorian OUTYY(("P(server_aggressive_nsec:%s)\n", $2)); 2091938a3a5eSflorian if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2092938a3a5eSflorian yyerror("expected yes or no."); 2093938a3a5eSflorian else 2094938a3a5eSflorian cfg_parser->cfg->aggressive_nsec = 2095938a3a5eSflorian (strcmp($2, "yes")==0); 2096938a3a5eSflorian free($2); 2097938a3a5eSflorian } 2098938a3a5eSflorian ; 2099933707f3Ssthen server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG 2100933707f3Ssthen { 2101933707f3Ssthen OUTYY(("P(server_ignore_cd_flag:%s)\n", $2)); 2102933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2103933707f3Ssthen yyerror("expected yes or no."); 2104933707f3Ssthen else cfg_parser->cfg->ignore_cd = (strcmp($2, "yes")==0); 2105933707f3Ssthen free($2); 2106933707f3Ssthen } 2107933707f3Ssthen ; 2108d896b962Ssthen server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG 2109d896b962Ssthen { 2110d896b962Ssthen OUTYY(("P(server_disable_edns_do:%s)\n", $2)); 2111d896b962Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2112d896b962Ssthen yyerror("expected yes or no."); 2113d896b962Ssthen else cfg_parser->cfg->disable_edns_do = (strcmp($2, "yes")==0); 2114d896b962Ssthen free($2); 2115d896b962Ssthen } 2116d896b962Ssthen ; 211777079be7Ssthen server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG 211877079be7Ssthen { 211977079be7Ssthen OUTYY(("P(server_serve_expired:%s)\n", $2)); 212077079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 212177079be7Ssthen yyerror("expected yes or no."); 212277079be7Ssthen else cfg_parser->cfg->serve_expired = (strcmp($2, "yes")==0); 212377079be7Ssthen free($2); 212477079be7Ssthen } 212577079be7Ssthen ; 21262308e98cSsthen server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG 21272308e98cSsthen { 21282308e98cSsthen OUTYY(("P(server_serve_expired_ttl:%s)\n", $2)); 21292308e98cSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 21302308e98cSsthen yyerror("number expected"); 21312308e98cSsthen else cfg_parser->cfg->serve_expired_ttl = atoi($2); 21322308e98cSsthen free($2); 21332308e98cSsthen } 21342308e98cSsthen ; 21352308e98cSsthen server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG 21362308e98cSsthen { 21372308e98cSsthen OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", $2)); 21382308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 21392308e98cSsthen yyerror("expected yes or no."); 21402308e98cSsthen else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp($2, "yes")==0); 21412308e98cSsthen free($2); 21422308e98cSsthen } 21432308e98cSsthen ; 2144eaf2578eSsthen server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG 2145eaf2578eSsthen { 2146eaf2578eSsthen OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", $2)); 2147eaf2578eSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2148eaf2578eSsthen yyerror("number expected"); 2149eaf2578eSsthen else cfg_parser->cfg->serve_expired_reply_ttl = atoi($2); 2150eaf2578eSsthen free($2); 2151eaf2578eSsthen } 2152eaf2578eSsthen ; 2153eaf2578eSsthen server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG 2154eaf2578eSsthen { 2155eaf2578eSsthen OUTYY(("P(server_serve_expired_client_timeout:%s)\n", $2)); 2156eaf2578eSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2157eaf2578eSsthen yyerror("number expected"); 2158eaf2578eSsthen else cfg_parser->cfg->serve_expired_client_timeout = atoi($2); 2159eaf2578eSsthen free($2); 2160eaf2578eSsthen } 2161eaf2578eSsthen ; 21620bdb4f62Ssthen server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG 21630bdb4f62Ssthen { 21640bdb4f62Ssthen OUTYY(("P(server_ede_serve_expired:%s)\n", $2)); 21650bdb4f62Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 21660bdb4f62Ssthen yyerror("expected yes or no."); 21670bdb4f62Ssthen else cfg_parser->cfg->ede_serve_expired = (strcmp($2, "yes")==0); 21680bdb4f62Ssthen free($2); 21690bdb4f62Ssthen } 21700bdb4f62Ssthen ; 21719982a05dSsthen server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG 21729982a05dSsthen { 21739982a05dSsthen OUTYY(("P(server_serve_original_ttl:%s)\n", $2)); 21749982a05dSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 21759982a05dSsthen yyerror("expected yes or no."); 21769982a05dSsthen else cfg_parser->cfg->serve_original_ttl = (strcmp($2, "yes")==0); 21779982a05dSsthen free($2); 21789982a05dSsthen } 21799982a05dSsthen ; 218077079be7Ssthen server_fake_dsa: VAR_FAKE_DSA STRING_ARG 218177079be7Ssthen { 218277079be7Ssthen OUTYY(("P(server_fake_dsa:%s)\n", $2)); 218377079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 218477079be7Ssthen yyerror("expected yes or no."); 2185eaf2578eSsthen #if defined(HAVE_SSL) || defined(HAVE_NETTLE) 218677079be7Ssthen else fake_dsa = (strcmp($2, "yes")==0); 218777079be7Ssthen if(fake_dsa) 218877079be7Ssthen log_warn("test option fake_dsa is enabled"); 218977079be7Ssthen #endif 219077079be7Ssthen free($2); 219177079be7Ssthen } 219277079be7Ssthen ; 21932be9e038Ssthen server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG 21942be9e038Ssthen { 21952be9e038Ssthen OUTYY(("P(server_fake_sha1:%s)\n", $2)); 21962be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 21972be9e038Ssthen yyerror("expected yes or no."); 2198eaf2578eSsthen #if defined(HAVE_SSL) || defined(HAVE_NETTLE) 21992be9e038Ssthen else fake_sha1 = (strcmp($2, "yes")==0); 22002be9e038Ssthen if(fake_sha1) 22012be9e038Ssthen log_warn("test option fake_sha1 is enabled"); 22022be9e038Ssthen #endif 22032be9e038Ssthen free($2); 22042be9e038Ssthen } 22052be9e038Ssthen ; 2206933707f3Ssthen server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG 2207933707f3Ssthen { 2208933707f3Ssthen OUTYY(("P(server_val_log_level:%s)\n", $2)); 2209933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2210933707f3Ssthen yyerror("number expected"); 2211933707f3Ssthen else cfg_parser->cfg->val_log_level = atoi($2); 2212933707f3Ssthen free($2); 2213933707f3Ssthen } 2214933707f3Ssthen ; 2215933707f3Ssthen server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG 2216933707f3Ssthen { 2217933707f3Ssthen OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", $2)); 2218933707f3Ssthen free(cfg_parser->cfg->val_nsec3_key_iterations); 2219933707f3Ssthen cfg_parser->cfg->val_nsec3_key_iterations = $2; 2220933707f3Ssthen } 2221933707f3Ssthen ; 2222191f22c6Ssthen server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG 2223191f22c6Ssthen { 2224191f22c6Ssthen OUTYY(("P(server_zonemd_permissive_mode:%s)\n", $2)); 2225191f22c6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2226191f22c6Ssthen yyerror("expected yes or no."); 2227191f22c6Ssthen else cfg_parser->cfg->zonemd_permissive_mode = (strcmp($2, "yes")==0); 2228191f22c6Ssthen free($2); 2229191f22c6Ssthen } 2230191f22c6Ssthen ; 2231933707f3Ssthen server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG 2232933707f3Ssthen { 2233933707f3Ssthen OUTYY(("P(server_add_holddown:%s)\n", $2)); 2234933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2235933707f3Ssthen yyerror("number expected"); 2236933707f3Ssthen else cfg_parser->cfg->add_holddown = atoi($2); 2237933707f3Ssthen free($2); 2238933707f3Ssthen } 2239933707f3Ssthen ; 2240933707f3Ssthen server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG 2241933707f3Ssthen { 2242933707f3Ssthen OUTYY(("P(server_del_holddown:%s)\n", $2)); 2243933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2244933707f3Ssthen yyerror("number expected"); 2245933707f3Ssthen else cfg_parser->cfg->del_holddown = atoi($2); 2246933707f3Ssthen free($2); 2247933707f3Ssthen } 2248933707f3Ssthen ; 2249933707f3Ssthen server_keep_missing: VAR_KEEP_MISSING STRING_ARG 2250933707f3Ssthen { 2251933707f3Ssthen OUTYY(("P(server_keep_missing:%s)\n", $2)); 2252933707f3Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2253933707f3Ssthen yyerror("number expected"); 2254933707f3Ssthen else cfg_parser->cfg->keep_missing = atoi($2); 2255933707f3Ssthen free($2); 2256933707f3Ssthen } 2257933707f3Ssthen ; 2258a961b961Ssthen server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG 2259a961b961Ssthen { 2260a961b961Ssthen OUTYY(("P(server_permit_small_holddown:%s)\n", $2)); 2261a961b961Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2262a961b961Ssthen yyerror("expected yes or no."); 2263a961b961Ssthen else cfg_parser->cfg->permit_small_holddown = 2264a961b961Ssthen (strcmp($2, "yes")==0); 2265a961b961Ssthen free($2); 2266a961b961Ssthen } 22678b7325afSsthen ; 2268933707f3Ssthen server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG 2269933707f3Ssthen { 2270933707f3Ssthen OUTYY(("P(server_key_cache_size:%s)\n", $2)); 2271933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size)) 2272933707f3Ssthen yyerror("memory size expected"); 2273933707f3Ssthen free($2); 2274933707f3Ssthen } 2275933707f3Ssthen ; 2276933707f3Ssthen server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG 2277933707f3Ssthen { 2278933707f3Ssthen OUTYY(("P(server_key_cache_slabs:%s)\n", $2)); 2279e21c60efSsthen if(atoi($2) == 0) { 2280933707f3Ssthen yyerror("number expected"); 2281e21c60efSsthen } else { 2282933707f3Ssthen cfg_parser->cfg->key_cache_slabs = atoi($2); 2283933707f3Ssthen if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) 2284933707f3Ssthen yyerror("must be a power of 2"); 2285933707f3Ssthen } 2286933707f3Ssthen free($2); 2287933707f3Ssthen } 2288933707f3Ssthen ; 2289933707f3Ssthen server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG 2290933707f3Ssthen { 2291933707f3Ssthen OUTYY(("P(server_neg_cache_size:%s)\n", $2)); 2292933707f3Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->neg_cache_size)) 2293933707f3Ssthen yyerror("memory size expected"); 2294933707f3Ssthen free($2); 2295933707f3Ssthen } 2296933707f3Ssthen ; 2297933707f3Ssthen server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG 2298933707f3Ssthen { 2299933707f3Ssthen OUTYY(("P(server_local_zone:%s %s)\n", $2, $3)); 2300933707f3Ssthen if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && 2301933707f3Ssthen strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && 2302933707f3Ssthen strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 230377079be7Ssthen && strcmp($3, "typetransparent")!=0 230477079be7Ssthen && strcmp($3, "always_transparent")!=0 23058b7325afSsthen && strcmp($3, "block_a")!=0 230677079be7Ssthen && strcmp($3, "always_refuse")!=0 230777079be7Ssthen && strcmp($3, "always_nxdomain")!=0 23089982a05dSsthen && strcmp($3, "always_nodata")!=0 23099982a05dSsthen && strcmp($3, "always_deny")!=0 23109982a05dSsthen && strcmp($3, "always_null")!=0 2311938a3a5eSflorian && strcmp($3, "noview")!=0 2312c3b38330Ssthen && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 23138240c1b9Ssthen && strcmp($3, "inform_redirect") != 0 23148240c1b9Ssthen && strcmp($3, "ipset") != 0) { 2315933707f3Ssthen yyerror("local-zone type: expected static, deny, " 2316933707f3Ssthen "refuse, redirect, transparent, " 231777079be7Ssthen "typetransparent, inform, inform_deny, " 23188b7325afSsthen "inform_redirect, always_transparent, block_a," 23199982a05dSsthen "always_refuse, always_nxdomain, " 23209982a05dSsthen "always_nodata, always_deny, always_null, " 23219982a05dSsthen "noview, nodefault or ipset"); 2322f6b99bafSsthen free($2); 2323f6b99bafSsthen free($3); 2324f6b99bafSsthen } else if(strcmp($3, "nodefault")==0) { 2325933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 2326933707f3Ssthen local_zones_nodefault, $2)) 2327933707f3Ssthen fatal_exit("out of memory adding local-zone"); 2328933707f3Ssthen free($3); 23298240c1b9Ssthen #ifdef USE_IPSET 23308240c1b9Ssthen } else if(strcmp($3, "ipset")==0) { 23310bdb4f62Ssthen size_t len = strlen($2); 23320bdb4f62Ssthen /* Make sure to add the trailing dot. 23330bdb4f62Ssthen * These are str compared to domain names. */ 23340bdb4f62Ssthen if($2[len-1] != '.') { 23350bdb4f62Ssthen if(!($2 = realloc($2, len+2))) { 23360bdb4f62Ssthen fatal_exit("out of memory adding local-zone"); 23370bdb4f62Ssthen } 23380bdb4f62Ssthen $2[len] = '.'; 23390bdb4f62Ssthen $2[len+1] = 0; 23400bdb4f62Ssthen } 23418240c1b9Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 23428240c1b9Ssthen local_zones_ipset, $2)) 23438240c1b9Ssthen fatal_exit("out of memory adding local-zone"); 23448240c1b9Ssthen free($3); 23458240c1b9Ssthen #endif 2346933707f3Ssthen } else { 2347933707f3Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 2348933707f3Ssthen $2, $3)) 2349933707f3Ssthen fatal_exit("out of memory adding local-zone"); 2350933707f3Ssthen } 2351933707f3Ssthen } 2352933707f3Ssthen ; 2353933707f3Ssthen server_local_data: VAR_LOCAL_DATA STRING_ARG 2354933707f3Ssthen { 2355933707f3Ssthen OUTYY(("P(server_local_data:%s)\n", $2)); 2356933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, $2)) 2357933707f3Ssthen fatal_exit("out of memory adding local-data"); 2358933707f3Ssthen } 2359933707f3Ssthen ; 2360933707f3Ssthen server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG 2361933707f3Ssthen { 2362933707f3Ssthen char* ptr; 2363933707f3Ssthen OUTYY(("P(server_local_data_ptr:%s)\n", $2)); 2364933707f3Ssthen ptr = cfg_ptr_reverse($2); 2365933707f3Ssthen free($2); 2366933707f3Ssthen if(ptr) { 2367933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg-> 2368933707f3Ssthen local_data, ptr)) 2369933707f3Ssthen fatal_exit("out of memory adding local-data"); 2370933707f3Ssthen } else { 2371933707f3Ssthen yyerror("local-data-ptr could not be reversed"); 2372933707f3Ssthen } 2373933707f3Ssthen } 2374933707f3Ssthen ; 2375d8d14d0cSsthen server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG 2376d8d14d0cSsthen { 2377d8d14d0cSsthen OUTYY(("P(server_minimal_responses:%s)\n", $2)); 2378d8d14d0cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2379d8d14d0cSsthen yyerror("expected yes or no."); 2380d8d14d0cSsthen else cfg_parser->cfg->minimal_responses = 2381d8d14d0cSsthen (strcmp($2, "yes")==0); 2382d8d14d0cSsthen free($2); 2383d8d14d0cSsthen } 2384d8d14d0cSsthen ; 2385d8d14d0cSsthen server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG 2386d8d14d0cSsthen { 2387d8d14d0cSsthen OUTYY(("P(server_rrset_roundrobin:%s)\n", $2)); 2388d8d14d0cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2389d8d14d0cSsthen yyerror("expected yes or no."); 2390d8d14d0cSsthen else cfg_parser->cfg->rrset_roundrobin = 2391d8d14d0cSsthen (strcmp($2, "yes")==0); 2392d8d14d0cSsthen free($2); 2393d8d14d0cSsthen } 2394d8d14d0cSsthen ; 23953150e5f6Ssthen server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG 23963150e5f6Ssthen { 23973150e5f6Ssthen OUTYY(("P(server_unknown_server_time_limit:%s)\n", $2)); 23983150e5f6Ssthen cfg_parser->cfg->unknown_server_time_limit = atoi($2); 23993150e5f6Ssthen free($2); 24003150e5f6Ssthen } 24013150e5f6Ssthen ; 24022bdc0ed1Ssthen server_discard_timeout: VAR_DISCARD_TIMEOUT STRING_ARG 24032bdc0ed1Ssthen { 24042bdc0ed1Ssthen OUTYY(("P(server_discard_timeout:%s)\n", $2)); 24052bdc0ed1Ssthen cfg_parser->cfg->discard_timeout = atoi($2); 24062bdc0ed1Ssthen free($2); 24072bdc0ed1Ssthen } 24082bdc0ed1Ssthen ; 24092bdc0ed1Ssthen server_wait_limit: VAR_WAIT_LIMIT STRING_ARG 24102bdc0ed1Ssthen { 24112bdc0ed1Ssthen OUTYY(("P(server_wait_limit:%s)\n", $2)); 24122bdc0ed1Ssthen cfg_parser->cfg->wait_limit = atoi($2); 24132bdc0ed1Ssthen free($2); 24142bdc0ed1Ssthen } 24152bdc0ed1Ssthen ; 24162bdc0ed1Ssthen server_wait_limit_cookie: VAR_WAIT_LIMIT_COOKIE STRING_ARG 24172bdc0ed1Ssthen { 24182bdc0ed1Ssthen OUTYY(("P(server_wait_limit_cookie:%s)\n", $2)); 24192bdc0ed1Ssthen cfg_parser->cfg->wait_limit_cookie = atoi($2); 24202bdc0ed1Ssthen free($2); 24212bdc0ed1Ssthen } 24222bdc0ed1Ssthen ; 24232bdc0ed1Ssthen server_wait_limit_netblock: VAR_WAIT_LIMIT_NETBLOCK STRING_ARG STRING_ARG 24242bdc0ed1Ssthen { 24252bdc0ed1Ssthen OUTYY(("P(server_wait_limit_netblock:%s %s)\n", $2, $3)); 24262bdc0ed1Ssthen if(atoi($3) == 0 && strcmp($3, "0") != 0) { 24272bdc0ed1Ssthen yyerror("number expected"); 24282bdc0ed1Ssthen free($2); 24292bdc0ed1Ssthen free($3); 24302bdc0ed1Ssthen } else { 24312bdc0ed1Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg-> 24322bdc0ed1Ssthen wait_limit_netblock, $2, $3)) 24332bdc0ed1Ssthen fatal_exit("out of memory adding " 24342bdc0ed1Ssthen "wait-limit-netblock"); 24352bdc0ed1Ssthen } 24362bdc0ed1Ssthen } 24372bdc0ed1Ssthen ; 24382bdc0ed1Ssthen server_wait_limit_cookie_netblock: VAR_WAIT_LIMIT_COOKIE_NETBLOCK STRING_ARG STRING_ARG 24392bdc0ed1Ssthen { 24402bdc0ed1Ssthen OUTYY(("P(server_wait_limit_cookie_netblock:%s %s)\n", $2, $3)); 24412bdc0ed1Ssthen if(atoi($3) == 0 && strcmp($3, "0") != 0) { 24422bdc0ed1Ssthen yyerror("number expected"); 24432bdc0ed1Ssthen free($2); 24442bdc0ed1Ssthen free($3); 24452bdc0ed1Ssthen } else { 24462bdc0ed1Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg-> 24472bdc0ed1Ssthen wait_limit_cookie_netblock, $2, $3)) 24482bdc0ed1Ssthen fatal_exit("out of memory adding " 24492bdc0ed1Ssthen "wait-limit-cookie-netblock"); 24502bdc0ed1Ssthen } 24512bdc0ed1Ssthen } 24522bdc0ed1Ssthen ; 2453229e174cSsthen server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG 2454229e174cSsthen { 2455229e174cSsthen OUTYY(("P(server_max_udp_size:%s)\n", $2)); 2456229e174cSsthen cfg_parser->cfg->max_udp_size = atoi($2); 2457229e174cSsthen free($2); 2458229e174cSsthen } 2459229e174cSsthen ; 246098f3ca02Sbrad server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG 246198f3ca02Sbrad { 246298f3ca02Sbrad OUTYY(("P(dns64_prefix:%s)\n", $2)); 246398f3ca02Sbrad free(cfg_parser->cfg->dns64_prefix); 246498f3ca02Sbrad cfg_parser->cfg->dns64_prefix = $2; 246598f3ca02Sbrad } 246698f3ca02Sbrad ; 246798f3ca02Sbrad server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG 246898f3ca02Sbrad { 246998f3ca02Sbrad OUTYY(("P(server_dns64_synthall:%s)\n", $2)); 247098f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 247198f3ca02Sbrad yyerror("expected yes or no."); 247298f3ca02Sbrad else cfg_parser->cfg->dns64_synthall = (strcmp($2, "yes")==0); 247398f3ca02Sbrad free($2); 247498f3ca02Sbrad } 247598f3ca02Sbrad ; 24762308e98cSsthen server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG 24772308e98cSsthen { 24782308e98cSsthen OUTYY(("P(dns64_ignore_aaaa:%s)\n", $2)); 24792308e98cSsthen if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa, 24802308e98cSsthen $2)) 24812308e98cSsthen fatal_exit("out of memory adding dns64-ignore-aaaa"); 24822308e98cSsthen } 24832308e98cSsthen ; 24848b7325afSsthen server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG 24858b7325afSsthen { 24868b7325afSsthen OUTYY(("P(nat64_prefix:%s)\n", $2)); 24878b7325afSsthen free(cfg_parser->cfg->nat64_prefix); 24888b7325afSsthen cfg_parser->cfg->nat64_prefix = $2; 24898b7325afSsthen } 24908b7325afSsthen ; 24912ee382b6Ssthen server_define_tag: VAR_DEFINE_TAG STRING_ARG 24922ee382b6Ssthen { 24932ee382b6Ssthen char* p, *s = $2; 24942ee382b6Ssthen OUTYY(("P(server_define_tag:%s)\n", $2)); 24952ee382b6Ssthen while((p=strsep(&s, " \t\n")) != NULL) { 24962ee382b6Ssthen if(*p) { 24972ee382b6Ssthen if(!config_add_tag(cfg_parser->cfg, p)) 24982ee382b6Ssthen yyerror("could not define-tag, " 24992ee382b6Ssthen "out of memory"); 25002ee382b6Ssthen } 25012ee382b6Ssthen } 25022ee382b6Ssthen free($2); 25032ee382b6Ssthen } 25042ee382b6Ssthen ; 25052ee382b6Ssthen server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG 25062ee382b6Ssthen { 25072ee382b6Ssthen size_t len = 0; 25082ee382b6Ssthen uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 25092ee382b6Ssthen &len); 25102ee382b6Ssthen free($3); 25112ee382b6Ssthen OUTYY(("P(server_local_zone_tag:%s)\n", $2)); 2512f6b99bafSsthen if(!bitlist) { 25132ee382b6Ssthen yyerror("could not parse tags, (define-tag them first)"); 2514f6b99bafSsthen free($2); 2515f6b99bafSsthen } 25162ee382b6Ssthen if(bitlist) { 25172ee382b6Ssthen if(!cfg_strbytelist_insert( 25182ee382b6Ssthen &cfg_parser->cfg->local_zone_tags, 25192ee382b6Ssthen $2, bitlist, len)) { 25202ee382b6Ssthen yyerror("out of memory"); 25212ee382b6Ssthen free($2); 25222ee382b6Ssthen } 25232ee382b6Ssthen } 25242ee382b6Ssthen } 25252ee382b6Ssthen ; 252677079be7Ssthen server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG 252777079be7Ssthen { 252877079be7Ssthen size_t len = 0; 252977079be7Ssthen uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 253077079be7Ssthen &len); 253177079be7Ssthen free($3); 253277079be7Ssthen OUTYY(("P(server_access_control_tag:%s)\n", $2)); 2533f6b99bafSsthen if(!bitlist) { 253477079be7Ssthen yyerror("could not parse tags, (define-tag them first)"); 2535f6b99bafSsthen free($2); 2536f6b99bafSsthen } 253777079be7Ssthen if(bitlist) { 253877079be7Ssthen if(!cfg_strbytelist_insert( 253977079be7Ssthen &cfg_parser->cfg->acl_tags, 254077079be7Ssthen $2, bitlist, len)) { 254177079be7Ssthen yyerror("out of memory"); 254277079be7Ssthen free($2); 254377079be7Ssthen } 254477079be7Ssthen } 254577079be7Ssthen } 254677079be7Ssthen ; 254777079be7Ssthen server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG 254877079be7Ssthen { 254977079be7Ssthen OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", $2, $3, $4)); 255077079be7Ssthen if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions, 255177079be7Ssthen $2, $3, $4)) { 255277079be7Ssthen yyerror("out of memory"); 255377079be7Ssthen free($2); 255477079be7Ssthen free($3); 255577079be7Ssthen free($4); 255677079be7Ssthen } 255777079be7Ssthen } 255877079be7Ssthen ; 255977079be7Ssthen server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG 256077079be7Ssthen { 256177079be7Ssthen OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", $2, $3, $4)); 256277079be7Ssthen if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas, 256377079be7Ssthen $2, $3, $4)) { 256477079be7Ssthen yyerror("out of memory"); 256577079be7Ssthen free($2); 256677079be7Ssthen free($3); 256777079be7Ssthen free($4); 256877079be7Ssthen } 256977079be7Ssthen } 257077079be7Ssthen ; 257177079be7Ssthen server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG 257277079be7Ssthen { 257377079be7Ssthen OUTYY(("P(server_local_zone_override:%s %s %s)\n", $2, $3, $4)); 257477079be7Ssthen if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides, 257577079be7Ssthen $2, $3, $4)) { 257677079be7Ssthen yyerror("out of memory"); 257777079be7Ssthen free($2); 257877079be7Ssthen free($3); 257977079be7Ssthen free($4); 258077079be7Ssthen } 258177079be7Ssthen } 258277079be7Ssthen ; 258377079be7Ssthen server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG 258477079be7Ssthen { 258577079be7Ssthen OUTYY(("P(server_access_control_view:%s %s)\n", $2, $3)); 258677079be7Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view, 258777079be7Ssthen $2, $3)) { 258877079be7Ssthen yyerror("out of memory"); 258977079be7Ssthen } 259077079be7Ssthen } 259177079be7Ssthen ; 259245872187Ssthen server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG 259345872187Ssthen { 259445872187Ssthen size_t len = 0; 259545872187Ssthen uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 259645872187Ssthen &len); 259745872187Ssthen free($3); 259845872187Ssthen OUTYY(("P(server_interface_tag:%s)\n", $2)); 259945872187Ssthen if(!bitlist) { 260045872187Ssthen yyerror("could not parse tags, (define-tag them first)"); 260145872187Ssthen free($2); 260245872187Ssthen } 260345872187Ssthen if(bitlist) { 260445872187Ssthen if(!cfg_strbytelist_insert( 260545872187Ssthen &cfg_parser->cfg->interface_tags, 260645872187Ssthen $2, bitlist, len)) { 260745872187Ssthen yyerror("out of memory"); 260845872187Ssthen free($2); 260945872187Ssthen } 261045872187Ssthen } 261145872187Ssthen } 261245872187Ssthen ; 261345872187Ssthen server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG 261445872187Ssthen { 261545872187Ssthen OUTYY(("P(server_interface_tag_action:%s %s %s)\n", $2, $3, $4)); 261645872187Ssthen if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions, 261745872187Ssthen $2, $3, $4)) { 261845872187Ssthen yyerror("out of memory"); 261945872187Ssthen free($2); 262045872187Ssthen free($3); 262145872187Ssthen free($4); 262245872187Ssthen } 262345872187Ssthen } 262445872187Ssthen ; 262545872187Ssthen server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG 262645872187Ssthen { 262745872187Ssthen OUTYY(("P(server_interface_tag_data:%s %s %s)\n", $2, $3, $4)); 262845872187Ssthen if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas, 262945872187Ssthen $2, $3, $4)) { 263045872187Ssthen yyerror("out of memory"); 263145872187Ssthen free($2); 263245872187Ssthen free($3); 263345872187Ssthen free($4); 263445872187Ssthen } 263545872187Ssthen } 263645872187Ssthen ; 263745872187Ssthen server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG 263845872187Ssthen { 263945872187Ssthen OUTYY(("P(server_interface_view:%s %s)\n", $2, $3)); 264045872187Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view, 264145872187Ssthen $2, $3)) { 264245872187Ssthen yyerror("out of memory"); 264345872187Ssthen } 264445872187Ssthen } 264545872187Ssthen ; 26462be9e038Ssthen server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG 26472be9e038Ssthen { 26482be9e038Ssthen size_t len = 0; 26492be9e038Ssthen uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, $3, 26502be9e038Ssthen &len); 26512be9e038Ssthen free($3); 26522be9e038Ssthen OUTYY(("P(response_ip_tag:%s)\n", $2)); 2653f6b99bafSsthen if(!bitlist) { 26542be9e038Ssthen yyerror("could not parse tags, (define-tag them first)"); 2655f6b99bafSsthen free($2); 2656f6b99bafSsthen } 26572be9e038Ssthen if(bitlist) { 26582be9e038Ssthen if(!cfg_strbytelist_insert( 26592be9e038Ssthen &cfg_parser->cfg->respip_tags, 26602be9e038Ssthen $2, bitlist, len)) { 26612be9e038Ssthen yyerror("out of memory"); 26622be9e038Ssthen free($2); 26632be9e038Ssthen } 26642be9e038Ssthen } 26652be9e038Ssthen } 26662be9e038Ssthen ; 266777079be7Ssthen server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG 266877079be7Ssthen { 266977079be7Ssthen OUTYY(("P(server_ip_ratelimit:%s)\n", $2)); 267077079be7Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 267177079be7Ssthen yyerror("number expected"); 267277079be7Ssthen else cfg_parser->cfg->ip_ratelimit = atoi($2); 267377079be7Ssthen free($2); 267477079be7Ssthen } 267577079be7Ssthen ; 26768b7325afSsthen server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG 26778b7325afSsthen { 26788b7325afSsthen OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", $2)); 26798b7325afSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 26808b7325afSsthen yyerror("number expected"); 26818b7325afSsthen else cfg_parser->cfg->ip_ratelimit_cookie = atoi($2); 26828b7325afSsthen free($2); 26838b7325afSsthen } 26848b7325afSsthen ; 2685fdfb4ba6Ssthen server_ratelimit: VAR_RATELIMIT STRING_ARG 2686fdfb4ba6Ssthen { 2687fdfb4ba6Ssthen OUTYY(("P(server_ratelimit:%s)\n", $2)); 2688fdfb4ba6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2689fdfb4ba6Ssthen yyerror("number expected"); 2690fdfb4ba6Ssthen else cfg_parser->cfg->ratelimit = atoi($2); 2691fdfb4ba6Ssthen free($2); 2692fdfb4ba6Ssthen } 2693fdfb4ba6Ssthen ; 269477079be7Ssthen server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG 269577079be7Ssthen { 269677079be7Ssthen OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2)); 269777079be7Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size)) 269877079be7Ssthen yyerror("memory size expected"); 269977079be7Ssthen free($2); 270077079be7Ssthen } 270177079be7Ssthen ; 2702fdfb4ba6Ssthen server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG 2703fdfb4ba6Ssthen { 2704fdfb4ba6Ssthen OUTYY(("P(server_ratelimit_size:%s)\n", $2)); 2705fdfb4ba6Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->ratelimit_size)) 2706fdfb4ba6Ssthen yyerror("memory size expected"); 2707fdfb4ba6Ssthen free($2); 2708fdfb4ba6Ssthen } 2709fdfb4ba6Ssthen ; 271077079be7Ssthen server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG 271177079be7Ssthen { 271277079be7Ssthen OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2)); 2713e21c60efSsthen if(atoi($2) == 0) { 271477079be7Ssthen yyerror("number expected"); 2715e21c60efSsthen } else { 271677079be7Ssthen cfg_parser->cfg->ip_ratelimit_slabs = atoi($2); 271777079be7Ssthen if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs)) 271877079be7Ssthen yyerror("must be a power of 2"); 271977079be7Ssthen } 272077079be7Ssthen free($2); 272177079be7Ssthen } 272277079be7Ssthen ; 2723fdfb4ba6Ssthen server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG 2724fdfb4ba6Ssthen { 2725fdfb4ba6Ssthen OUTYY(("P(server_ratelimit_slabs:%s)\n", $2)); 2726e21c60efSsthen if(atoi($2) == 0) { 2727fdfb4ba6Ssthen yyerror("number expected"); 2728e21c60efSsthen } else { 2729fdfb4ba6Ssthen cfg_parser->cfg->ratelimit_slabs = atoi($2); 2730fdfb4ba6Ssthen if(!is_pow2(cfg_parser->cfg->ratelimit_slabs)) 2731fdfb4ba6Ssthen yyerror("must be a power of 2"); 2732fdfb4ba6Ssthen } 2733fdfb4ba6Ssthen free($2); 2734fdfb4ba6Ssthen } 2735fdfb4ba6Ssthen ; 2736fdfb4ba6Ssthen server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG 2737fdfb4ba6Ssthen { 2738fdfb4ba6Ssthen OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", $2, $3)); 2739fdfb4ba6Ssthen if(atoi($3) == 0 && strcmp($3, "0") != 0) { 2740fdfb4ba6Ssthen yyerror("number expected"); 2741f6b99bafSsthen free($2); 2742f6b99bafSsthen free($3); 2743fdfb4ba6Ssthen } else { 2744fdfb4ba6Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg-> 2745fdfb4ba6Ssthen ratelimit_for_domain, $2, $3)) 2746fdfb4ba6Ssthen fatal_exit("out of memory adding " 2747fdfb4ba6Ssthen "ratelimit-for-domain"); 2748fdfb4ba6Ssthen } 2749fdfb4ba6Ssthen } 2750fdfb4ba6Ssthen ; 2751fdfb4ba6Ssthen server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG 2752fdfb4ba6Ssthen { 2753fdfb4ba6Ssthen OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", $2, $3)); 2754fdfb4ba6Ssthen if(atoi($3) == 0 && strcmp($3, "0") != 0) { 2755fdfb4ba6Ssthen yyerror("number expected"); 2756f6b99bafSsthen free($2); 2757f6b99bafSsthen free($3); 2758fdfb4ba6Ssthen } else { 2759fdfb4ba6Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg-> 2760fdfb4ba6Ssthen ratelimit_below_domain, $2, $3)) 2761fdfb4ba6Ssthen fatal_exit("out of memory adding " 2762fdfb4ba6Ssthen "ratelimit-below-domain"); 2763fdfb4ba6Ssthen } 2764fdfb4ba6Ssthen } 2765fdfb4ba6Ssthen ; 276677079be7Ssthen server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG 276777079be7Ssthen { 276877079be7Ssthen OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2)); 276977079be7Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 277077079be7Ssthen yyerror("number expected"); 277177079be7Ssthen else cfg_parser->cfg->ip_ratelimit_factor = atoi($2); 277277079be7Ssthen free($2); 277377079be7Ssthen } 277477079be7Ssthen ; 2775fdfb4ba6Ssthen server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG 2776fdfb4ba6Ssthen { 2777fdfb4ba6Ssthen OUTYY(("P(server_ratelimit_factor:%s)\n", $2)); 2778fdfb4ba6Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2779fdfb4ba6Ssthen yyerror("number expected"); 2780fdfb4ba6Ssthen else cfg_parser->cfg->ratelimit_factor = atoi($2); 2781fdfb4ba6Ssthen free($2); 2782fdfb4ba6Ssthen } 2783fdfb4ba6Ssthen ; 2784e21c60efSsthen server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG 2785e21c60efSsthen { 2786e21c60efSsthen OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", $2)); 2787e21c60efSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2788e21c60efSsthen yyerror("expected yes or no."); 2789e21c60efSsthen else cfg_parser->cfg->ip_ratelimit_backoff = 2790e21c60efSsthen (strcmp($2, "yes")==0); 2791e21c60efSsthen free($2); 2792e21c60efSsthen } 2793e21c60efSsthen ; 2794e21c60efSsthen server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG 2795e21c60efSsthen { 2796e21c60efSsthen OUTYY(("P(server_ratelimit_backoff:%s)\n", $2)); 2797e21c60efSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 2798e21c60efSsthen yyerror("expected yes or no."); 2799e21c60efSsthen else cfg_parser->cfg->ratelimit_backoff = 2800e21c60efSsthen (strcmp($2, "yes")==0); 2801e21c60efSsthen free($2); 2802e21c60efSsthen } 2803e21c60efSsthen ; 2804e21c60efSsthen server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG 2805e21c60efSsthen { 2806e21c60efSsthen OUTYY(("P(server_outbound_msg_retry:%s)\n", $2)); 2807e21c60efSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 2808e21c60efSsthen yyerror("number expected"); 2809e21c60efSsthen else cfg_parser->cfg->outbound_msg_retry = atoi($2); 2810e21c60efSsthen free($2); 2811e21c60efSsthen } 2812e21c60efSsthen ; 28138b7325afSsthen server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG 28148b7325afSsthen { 28158b7325afSsthen OUTYY(("P(server_max_sent_count:%s)\n", $2)); 28168b7325afSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 28178b7325afSsthen yyerror("number expected"); 28188b7325afSsthen else cfg_parser->cfg->max_sent_count = atoi($2); 28198b7325afSsthen free($2); 28208b7325afSsthen } 28218b7325afSsthen ; 28228b7325afSsthen server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG 28238b7325afSsthen { 28248b7325afSsthen OUTYY(("P(server_max_query_restarts:%s)\n", $2)); 28258b7325afSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 28268b7325afSsthen yyerror("number expected"); 28278b7325afSsthen else cfg_parser->cfg->max_query_restarts = atoi($2); 28288b7325afSsthen free($2); 28298b7325afSsthen } 28308b7325afSsthen ; 283120237c55Ssthen server_low_rtt: VAR_LOW_RTT STRING_ARG 283220237c55Ssthen { 28333150e5f6Ssthen OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n")); 283420237c55Ssthen free($2); 283520237c55Ssthen } 283620237c55Ssthen ; 28373150e5f6Ssthen server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG 283820237c55Ssthen { 28393150e5f6Ssthen OUTYY(("P(server_fast_server_num:%s)\n", $2)); 28403150e5f6Ssthen if(atoi($2) <= 0) 28413150e5f6Ssthen yyerror("number expected"); 28423150e5f6Ssthen else cfg_parser->cfg->fast_server_num = atoi($2); 28433150e5f6Ssthen free($2); 28443150e5f6Ssthen } 28453150e5f6Ssthen ; 28463150e5f6Ssthen server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG 28473150e5f6Ssthen { 28483150e5f6Ssthen OUTYY(("P(server_fast_server_permil:%s)\n", $2)); 284920237c55Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 285020237c55Ssthen yyerror("number expected"); 28513150e5f6Ssthen else cfg_parser->cfg->fast_server_permil = atoi($2); 285220237c55Ssthen free($2); 285320237c55Ssthen } 285420237c55Ssthen ; 285524893edcSsthen server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG 285624893edcSsthen { 285724893edcSsthen OUTYY(("P(server_qname_minimisation:%s)\n", $2)); 285824893edcSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 285924893edcSsthen yyerror("expected yes or no."); 286024893edcSsthen else cfg_parser->cfg->qname_minimisation = 286124893edcSsthen (strcmp($2, "yes")==0); 286224893edcSsthen free($2); 286324893edcSsthen } 286424893edcSsthen ; 286577079be7Ssthen server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG 286677079be7Ssthen { 286777079be7Ssthen OUTYY(("P(server_qname_minimisation_strict:%s)\n", $2)); 286877079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 286977079be7Ssthen yyerror("expected yes or no."); 287077079be7Ssthen else cfg_parser->cfg->qname_minimisation_strict = 287177079be7Ssthen (strcmp($2, "yes")==0); 287277079be7Ssthen free($2); 287377079be7Ssthen } 287477079be7Ssthen ; 28759982a05dSsthen server_pad_responses: VAR_PAD_RESPONSES STRING_ARG 28769982a05dSsthen { 28779982a05dSsthen OUTYY(("P(server_pad_responses:%s)\n", $2)); 28789982a05dSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 28799982a05dSsthen yyerror("expected yes or no."); 28809982a05dSsthen else cfg_parser->cfg->pad_responses = 28819982a05dSsthen (strcmp($2, "yes")==0); 28829982a05dSsthen free($2); 28839982a05dSsthen } 28849982a05dSsthen ; 28859982a05dSsthen server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG 28869982a05dSsthen { 28879982a05dSsthen OUTYY(("P(server_pad_responses_block_size:%s)\n", $2)); 28889982a05dSsthen if(atoi($2) == 0) 28899982a05dSsthen yyerror("number expected"); 28909982a05dSsthen else cfg_parser->cfg->pad_responses_block_size = atoi($2); 28919982a05dSsthen free($2); 28929982a05dSsthen } 28939982a05dSsthen ; 28949982a05dSsthen server_pad_queries: VAR_PAD_QUERIES STRING_ARG 28959982a05dSsthen { 28969982a05dSsthen OUTYY(("P(server_pad_queries:%s)\n", $2)); 28979982a05dSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 28989982a05dSsthen yyerror("expected yes or no."); 28999982a05dSsthen else cfg_parser->cfg->pad_queries = 29009982a05dSsthen (strcmp($2, "yes")==0); 29019982a05dSsthen free($2); 29029982a05dSsthen } 29039982a05dSsthen ; 29049982a05dSsthen server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG 29059982a05dSsthen { 29069982a05dSsthen OUTYY(("P(server_pad_queries_block_size:%s)\n", $2)); 29079982a05dSsthen if(atoi($2) == 0) 29089982a05dSsthen yyerror("number expected"); 29099982a05dSsthen else cfg_parser->cfg->pad_queries_block_size = atoi($2); 29109982a05dSsthen free($2); 29119982a05dSsthen } 29129982a05dSsthen ; 29132be9e038Ssthen server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG 29142be9e038Ssthen { 29152be9e038Ssthen #ifdef USE_IPSECMOD 29162be9e038Ssthen OUTYY(("P(server_ipsecmod_enabled:%s)\n", $2)); 29172be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 29182be9e038Ssthen yyerror("expected yes or no."); 29192be9e038Ssthen else cfg_parser->cfg->ipsecmod_enabled = (strcmp($2, "yes")==0); 29202be9e038Ssthen #else 29212be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 29222be9e038Ssthen #endif 2923f6b99bafSsthen free($2); 29242be9e038Ssthen } 29252be9e038Ssthen ; 29262be9e038Ssthen server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG 29272be9e038Ssthen { 29282be9e038Ssthen #ifdef USE_IPSECMOD 29292be9e038Ssthen OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", $2)); 29302be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 29312be9e038Ssthen yyerror("expected yes or no."); 29322be9e038Ssthen else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp($2, "yes")==0); 29332be9e038Ssthen #else 29342be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 29352be9e038Ssthen #endif 2936f6b99bafSsthen free($2); 29372be9e038Ssthen } 29382be9e038Ssthen ; 29392be9e038Ssthen server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG 29402be9e038Ssthen { 29412be9e038Ssthen #ifdef USE_IPSECMOD 29422be9e038Ssthen OUTYY(("P(server_ipsecmod_hook:%s)\n", $2)); 29432be9e038Ssthen free(cfg_parser->cfg->ipsecmod_hook); 29442be9e038Ssthen cfg_parser->cfg->ipsecmod_hook = $2; 29452be9e038Ssthen #else 29462be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2947f6b99bafSsthen free($2); 29482be9e038Ssthen #endif 29492be9e038Ssthen } 29502be9e038Ssthen ; 29512be9e038Ssthen server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG 29522be9e038Ssthen { 29532be9e038Ssthen #ifdef USE_IPSECMOD 29542be9e038Ssthen OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", $2)); 29552be9e038Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 29562be9e038Ssthen yyerror("number expected"); 29572be9e038Ssthen else cfg_parser->cfg->ipsecmod_max_ttl = atoi($2); 29582be9e038Ssthen free($2); 29592be9e038Ssthen #else 29602be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2961f6b99bafSsthen free($2); 29622be9e038Ssthen #endif 29632be9e038Ssthen } 29642be9e038Ssthen ; 29652be9e038Ssthen server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG 29662be9e038Ssthen { 29672be9e038Ssthen #ifdef USE_IPSECMOD 29682be9e038Ssthen OUTYY(("P(server_ipsecmod_whitelist:%s)\n", $2)); 29692be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, $2)) 29702be9e038Ssthen yyerror("out of memory"); 29712be9e038Ssthen #else 29722be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2973f6b99bafSsthen free($2); 29742be9e038Ssthen #endif 29752be9e038Ssthen } 29762be9e038Ssthen ; 29772be9e038Ssthen server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG 29782be9e038Ssthen { 29792be9e038Ssthen #ifdef USE_IPSECMOD 29802be9e038Ssthen OUTYY(("P(server_ipsecmod_strict:%s)\n", $2)); 29812be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 29822be9e038Ssthen yyerror("expected yes or no."); 29832be9e038Ssthen else cfg_parser->cfg->ipsecmod_strict = (strcmp($2, "yes")==0); 29842be9e038Ssthen free($2); 29852be9e038Ssthen #else 29862be9e038Ssthen OUTYY(("P(Compiled without IPsec module, ignoring)\n")); 2987f6b99bafSsthen free($2); 29882be9e038Ssthen #endif 29892be9e038Ssthen } 29902be9e038Ssthen ; 2991eba819a2Ssthen server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG 29922c144df0Ssthen { 2993eba819a2Ssthen OUTYY(("P(server_edns_client_string:%s %s)\n", $2, $3)); 29942c144df0Ssthen if(!cfg_str2list_insert( 2995eba819a2Ssthen &cfg_parser->cfg->edns_client_strings, $2, $3)) 29962c144df0Ssthen fatal_exit("out of memory adding " 2997eba819a2Ssthen "edns-client-string"); 29982c144df0Ssthen } 29992c144df0Ssthen ; 3000eba819a2Ssthen server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG 30012c144df0Ssthen { 3002eba819a2Ssthen OUTYY(("P(edns_client_string_opcode:%s)\n", $2)); 30032c144df0Ssthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 30042c144df0Ssthen yyerror("option code expected"); 30052c144df0Ssthen else if(atoi($2) > 65535 || atoi($2) < 0) 30062c144df0Ssthen yyerror("option code must be in interval [0, 65535]"); 3007eba819a2Ssthen else cfg_parser->cfg->edns_client_string_opcode = atoi($2); 3008eba819a2Ssthen free($2); 30090bdb4f62Ssthen } 30100bdb4f62Ssthen ; 30110bdb4f62Ssthen server_ede: VAR_EDE STRING_ARG 30120bdb4f62Ssthen { 30130bdb4f62Ssthen OUTYY(("P(server_ede:%s)\n", $2)); 30140bdb4f62Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 30150bdb4f62Ssthen yyerror("expected yes or no."); 30160bdb4f62Ssthen else cfg_parser->cfg->ede = (strcmp($2, "yes")==0); 30170bdb4f62Ssthen free($2); 30182c144df0Ssthen } 30192c144df0Ssthen ; 302045872187Ssthen server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG 302145872187Ssthen { 302245872187Ssthen OUTYY(("P(server_proxy_protocol_port:%s)\n", $2)); 302345872187Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, $2)) 302445872187Ssthen yyerror("out of memory"); 302545872187Ssthen } 302645872187Ssthen ; 3027933707f3Ssthen stub_name: VAR_NAME STRING_ARG 3028933707f3Ssthen { 3029933707f3Ssthen OUTYY(("P(name:%s)\n", $2)); 3030933707f3Ssthen if(cfg_parser->cfg->stubs->name) 3031933707f3Ssthen yyerror("stub name override, there must be one name " 3032933707f3Ssthen "for one stub-zone"); 3033933707f3Ssthen free(cfg_parser->cfg->stubs->name); 3034933707f3Ssthen cfg_parser->cfg->stubs->name = $2; 3035933707f3Ssthen } 3036933707f3Ssthen ; 3037933707f3Ssthen stub_host: VAR_STUB_HOST STRING_ARG 3038933707f3Ssthen { 3039933707f3Ssthen OUTYY(("P(stub-host:%s)\n", $2)); 3040933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, $2)) 3041933707f3Ssthen yyerror("out of memory"); 3042933707f3Ssthen } 3043933707f3Ssthen ; 3044933707f3Ssthen stub_addr: VAR_STUB_ADDR STRING_ARG 3045933707f3Ssthen { 3046933707f3Ssthen OUTYY(("P(stub-addr:%s)\n", $2)); 3047933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, $2)) 3048933707f3Ssthen yyerror("out of memory"); 3049933707f3Ssthen } 3050933707f3Ssthen ; 3051d8d14d0cSsthen stub_first: VAR_STUB_FIRST STRING_ARG 3052d8d14d0cSsthen { 3053d8d14d0cSsthen OUTYY(("P(stub-first:%s)\n", $2)); 3054d8d14d0cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3055d8d14d0cSsthen yyerror("expected yes or no."); 3056d8d14d0cSsthen else cfg_parser->cfg->stubs->isfirst=(strcmp($2, "yes")==0); 3057d8d14d0cSsthen free($2); 3058d8d14d0cSsthen } 3059d8d14d0cSsthen ; 30602308e98cSsthen stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG 30612308e98cSsthen { 30622308e98cSsthen OUTYY(("P(stub-no-cache:%s)\n", $2)); 30632308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 30642308e98cSsthen yyerror("expected yes or no."); 30652308e98cSsthen else cfg_parser->cfg->stubs->no_cache=(strcmp($2, "yes")==0); 30662308e98cSsthen free($2); 30672308e98cSsthen } 30682308e98cSsthen ; 306977079be7Ssthen stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG 307077079be7Ssthen { 307177079be7Ssthen OUTYY(("P(stub-ssl-upstream:%s)\n", $2)); 307277079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 307377079be7Ssthen yyerror("expected yes or no."); 307477079be7Ssthen else cfg_parser->cfg->stubs->ssl_upstream = 307577079be7Ssthen (strcmp($2, "yes")==0); 307677079be7Ssthen free($2); 307777079be7Ssthen } 307877079be7Ssthen ; 3079e21c60efSsthen stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG 3080e21c60efSsthen { 3081e21c60efSsthen OUTYY(("P(stub-tcp-upstream:%s)\n", $2)); 3082e21c60efSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3083e21c60efSsthen yyerror("expected yes or no."); 3084e21c60efSsthen else cfg_parser->cfg->stubs->tcp_upstream = 3085e21c60efSsthen (strcmp($2, "yes")==0); 3086e21c60efSsthen free($2); 3087e21c60efSsthen } 3088e21c60efSsthen ; 3089933707f3Ssthen stub_prime: VAR_STUB_PRIME STRING_ARG 3090933707f3Ssthen { 3091933707f3Ssthen OUTYY(("P(stub-prime:%s)\n", $2)); 3092933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3093933707f3Ssthen yyerror("expected yes or no."); 3094933707f3Ssthen else cfg_parser->cfg->stubs->isprime = 3095933707f3Ssthen (strcmp($2, "yes")==0); 3096933707f3Ssthen free($2); 3097933707f3Ssthen } 3098933707f3Ssthen ; 3099933707f3Ssthen forward_name: VAR_NAME STRING_ARG 3100933707f3Ssthen { 3101933707f3Ssthen OUTYY(("P(name:%s)\n", $2)); 3102933707f3Ssthen if(cfg_parser->cfg->forwards->name) 3103933707f3Ssthen yyerror("forward name override, there must be one " 3104933707f3Ssthen "name for one forward-zone"); 3105933707f3Ssthen free(cfg_parser->cfg->forwards->name); 3106933707f3Ssthen cfg_parser->cfg->forwards->name = $2; 3107933707f3Ssthen } 3108933707f3Ssthen ; 3109933707f3Ssthen forward_host: VAR_FORWARD_HOST STRING_ARG 3110933707f3Ssthen { 3111933707f3Ssthen OUTYY(("P(forward-host:%s)\n", $2)); 3112933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, $2)) 3113933707f3Ssthen yyerror("out of memory"); 3114933707f3Ssthen } 3115933707f3Ssthen ; 3116933707f3Ssthen forward_addr: VAR_FORWARD_ADDR STRING_ARG 3117933707f3Ssthen { 3118933707f3Ssthen OUTYY(("P(forward-addr:%s)\n", $2)); 3119933707f3Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, $2)) 3120933707f3Ssthen yyerror("out of memory"); 3121933707f3Ssthen } 3122933707f3Ssthen ; 3123d8d14d0cSsthen forward_first: VAR_FORWARD_FIRST STRING_ARG 3124d8d14d0cSsthen { 3125d8d14d0cSsthen OUTYY(("P(forward-first:%s)\n", $2)); 3126d8d14d0cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3127d8d14d0cSsthen yyerror("expected yes or no."); 3128d8d14d0cSsthen else cfg_parser->cfg->forwards->isfirst=(strcmp($2, "yes")==0); 3129d8d14d0cSsthen free($2); 3130d8d14d0cSsthen } 3131d8d14d0cSsthen ; 31322308e98cSsthen forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG 31332308e98cSsthen { 31342308e98cSsthen OUTYY(("P(forward-no-cache:%s)\n", $2)); 31352308e98cSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 31362308e98cSsthen yyerror("expected yes or no."); 31372308e98cSsthen else cfg_parser->cfg->forwards->no_cache=(strcmp($2, "yes")==0); 31382308e98cSsthen free($2); 31392308e98cSsthen } 31402308e98cSsthen ; 314177079be7Ssthen forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG 314277079be7Ssthen { 314377079be7Ssthen OUTYY(("P(forward-ssl-upstream:%s)\n", $2)); 314477079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 314577079be7Ssthen yyerror("expected yes or no."); 314677079be7Ssthen else cfg_parser->cfg->forwards->ssl_upstream = 314777079be7Ssthen (strcmp($2, "yes")==0); 314877079be7Ssthen free($2); 314977079be7Ssthen } 315077079be7Ssthen ; 3151e21c60efSsthen forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG 3152e21c60efSsthen { 3153e21c60efSsthen OUTYY(("P(forward-tcp-upstream:%s)\n", $2)); 3154e21c60efSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3155e21c60efSsthen yyerror("expected yes or no."); 3156e21c60efSsthen else cfg_parser->cfg->forwards->tcp_upstream = 3157e21c60efSsthen (strcmp($2, "yes")==0); 3158e21c60efSsthen free($2); 3159e21c60efSsthen } 3160e21c60efSsthen ; 3161bdfc4d55Sflorian auth_name: VAR_NAME STRING_ARG 3162bdfc4d55Sflorian { 3163bdfc4d55Sflorian OUTYY(("P(name:%s)\n", $2)); 3164bdfc4d55Sflorian if(cfg_parser->cfg->auths->name) 3165bdfc4d55Sflorian yyerror("auth name override, there must be one name " 3166bdfc4d55Sflorian "for one auth-zone"); 3167bdfc4d55Sflorian free(cfg_parser->cfg->auths->name); 3168bdfc4d55Sflorian cfg_parser->cfg->auths->name = $2; 3169bdfc4d55Sflorian } 3170bdfc4d55Sflorian ; 3171bdfc4d55Sflorian auth_zonefile: VAR_ZONEFILE STRING_ARG 3172bdfc4d55Sflorian { 3173bdfc4d55Sflorian OUTYY(("P(zonefile:%s)\n", $2)); 3174bdfc4d55Sflorian free(cfg_parser->cfg->auths->zonefile); 3175bdfc4d55Sflorian cfg_parser->cfg->auths->zonefile = $2; 3176bdfc4d55Sflorian } 3177bdfc4d55Sflorian ; 3178bdfc4d55Sflorian auth_master: VAR_MASTER STRING_ARG 3179bdfc4d55Sflorian { 3180bdfc4d55Sflorian OUTYY(("P(master:%s)\n", $2)); 3181bdfc4d55Sflorian if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, $2)) 3182bdfc4d55Sflorian yyerror("out of memory"); 3183bdfc4d55Sflorian } 3184bdfc4d55Sflorian ; 3185bdfc4d55Sflorian auth_url: VAR_URL STRING_ARG 3186bdfc4d55Sflorian { 3187bdfc4d55Sflorian OUTYY(("P(url:%s)\n", $2)); 3188bdfc4d55Sflorian if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, $2)) 3189bdfc4d55Sflorian yyerror("out of memory"); 3190bdfc4d55Sflorian } 3191bdfc4d55Sflorian ; 319220237c55Ssthen auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG 319320237c55Ssthen { 319420237c55Ssthen OUTYY(("P(allow-notify:%s)\n", $2)); 319520237c55Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify, 319620237c55Ssthen $2)) 319720237c55Ssthen yyerror("out of memory"); 319820237c55Ssthen } 319920237c55Ssthen ; 3200191f22c6Ssthen auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG 3201191f22c6Ssthen { 3202191f22c6Ssthen OUTYY(("P(zonemd-check:%s)\n", $2)); 3203191f22c6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3204191f22c6Ssthen yyerror("expected yes or no."); 3205191f22c6Ssthen else cfg_parser->cfg->auths->zonemd_check = 3206191f22c6Ssthen (strcmp($2, "yes")==0); 3207191f22c6Ssthen free($2); 3208191f22c6Ssthen } 3209191f22c6Ssthen ; 3210191f22c6Ssthen auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG 3211191f22c6Ssthen { 3212191f22c6Ssthen OUTYY(("P(zonemd-reject-absence:%s)\n", $2)); 3213191f22c6Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3214191f22c6Ssthen yyerror("expected yes or no."); 3215191f22c6Ssthen else cfg_parser->cfg->auths->zonemd_reject_absence = 3216191f22c6Ssthen (strcmp($2, "yes")==0); 3217191f22c6Ssthen free($2); 3218191f22c6Ssthen } 3219191f22c6Ssthen ; 3220bdfc4d55Sflorian auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG 3221bdfc4d55Sflorian { 3222bdfc4d55Sflorian OUTYY(("P(for-downstream:%s)\n", $2)); 3223bdfc4d55Sflorian if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3224bdfc4d55Sflorian yyerror("expected yes or no."); 3225bdfc4d55Sflorian else cfg_parser->cfg->auths->for_downstream = 3226bdfc4d55Sflorian (strcmp($2, "yes")==0); 3227bdfc4d55Sflorian free($2); 3228bdfc4d55Sflorian } 3229bdfc4d55Sflorian ; 3230bdfc4d55Sflorian auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG 3231bdfc4d55Sflorian { 3232bdfc4d55Sflorian OUTYY(("P(for-upstream:%s)\n", $2)); 3233bdfc4d55Sflorian if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3234bdfc4d55Sflorian yyerror("expected yes or no."); 3235bdfc4d55Sflorian else cfg_parser->cfg->auths->for_upstream = 3236bdfc4d55Sflorian (strcmp($2, "yes")==0); 3237bdfc4d55Sflorian free($2); 3238bdfc4d55Sflorian } 3239bdfc4d55Sflorian ; 3240938a3a5eSflorian auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG 3241938a3a5eSflorian { 3242938a3a5eSflorian OUTYY(("P(fallback-enabled:%s)\n", $2)); 3243938a3a5eSflorian if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3244938a3a5eSflorian yyerror("expected yes or no."); 3245938a3a5eSflorian else cfg_parser->cfg->auths->fallback_enabled = 3246938a3a5eSflorian (strcmp($2, "yes")==0); 3247938a3a5eSflorian free($2); 3248938a3a5eSflorian } 3249938a3a5eSflorian ; 325077079be7Ssthen view_name: VAR_NAME STRING_ARG 325177079be7Ssthen { 325277079be7Ssthen OUTYY(("P(name:%s)\n", $2)); 325377079be7Ssthen if(cfg_parser->cfg->views->name) 325477079be7Ssthen yyerror("view name override, there must be one " 325577079be7Ssthen "name for one view"); 325677079be7Ssthen free(cfg_parser->cfg->views->name); 325777079be7Ssthen cfg_parser->cfg->views->name = $2; 325877079be7Ssthen } 325977079be7Ssthen ; 326077079be7Ssthen view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG 326177079be7Ssthen { 326277079be7Ssthen OUTYY(("P(view_local_zone:%s %s)\n", $2, $3)); 326377079be7Ssthen if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && 326477079be7Ssthen strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && 326577079be7Ssthen strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 326677079be7Ssthen && strcmp($3, "typetransparent")!=0 326777079be7Ssthen && strcmp($3, "always_transparent")!=0 326877079be7Ssthen && strcmp($3, "always_refuse")!=0 326977079be7Ssthen && strcmp($3, "always_nxdomain")!=0 3270191f22c6Ssthen && strcmp($3, "always_nodata")!=0 3271191f22c6Ssthen && strcmp($3, "always_deny")!=0 3272191f22c6Ssthen && strcmp($3, "always_null")!=0 3273938a3a5eSflorian && strcmp($3, "noview")!=0 3274191f22c6Ssthen && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0 3275191f22c6Ssthen && strcmp($3, "inform_redirect") != 0 3276191f22c6Ssthen && strcmp($3, "ipset") != 0) { 327777079be7Ssthen yyerror("local-zone type: expected static, deny, " 327877079be7Ssthen "refuse, redirect, transparent, " 327977079be7Ssthen "typetransparent, inform, inform_deny, " 3280191f22c6Ssthen "inform_redirect, always_transparent, " 3281191f22c6Ssthen "always_refuse, always_nxdomain, " 3282191f22c6Ssthen "always_nodata, always_deny, always_null, " 3283191f22c6Ssthen "noview, nodefault or ipset"); 3284f6b99bafSsthen free($2); 3285f6b99bafSsthen free($3); 3286f6b99bafSsthen } else if(strcmp($3, "nodefault")==0) { 328777079be7Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 328877079be7Ssthen local_zones_nodefault, $2)) 328977079be7Ssthen fatal_exit("out of memory adding local-zone"); 329077079be7Ssthen free($3); 32918240c1b9Ssthen #ifdef USE_IPSET 32928240c1b9Ssthen } else if(strcmp($3, "ipset")==0) { 32930bdb4f62Ssthen size_t len = strlen($2); 32940bdb4f62Ssthen /* Make sure to add the trailing dot. 32950bdb4f62Ssthen * These are str compared to domain names. */ 32960bdb4f62Ssthen if($2[len-1] != '.') { 32970bdb4f62Ssthen if(!($2 = realloc($2, len+2))) { 32980bdb4f62Ssthen fatal_exit("out of memory adding local-zone"); 32990bdb4f62Ssthen } 33000bdb4f62Ssthen $2[len] = '.'; 33010bdb4f62Ssthen $2[len+1] = 0; 33020bdb4f62Ssthen } 33038240c1b9Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 33048240c1b9Ssthen local_zones_ipset, $2)) 33058240c1b9Ssthen fatal_exit("out of memory adding local-zone"); 33068240c1b9Ssthen free($3); 33078240c1b9Ssthen #endif 330877079be7Ssthen } else { 330977079be7Ssthen if(!cfg_str2list_insert( 331077079be7Ssthen &cfg_parser->cfg->views->local_zones, 331177079be7Ssthen $2, $3)) 331277079be7Ssthen fatal_exit("out of memory adding local-zone"); 331377079be7Ssthen } 331477079be7Ssthen } 331577079be7Ssthen ; 33162be9e038Ssthen view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG 33172be9e038Ssthen { 33182be9e038Ssthen OUTYY(("P(view_response_ip:%s %s)\n", $2, $3)); 33192be9e038Ssthen validate_respip_action($3); 33202be9e038Ssthen if(!cfg_str2list_insert( 33212be9e038Ssthen &cfg_parser->cfg->views->respip_actions, $2, $3)) 33222be9e038Ssthen fatal_exit("out of memory adding per-view " 33232be9e038Ssthen "response-ip action"); 33242be9e038Ssthen } 33252be9e038Ssthen ; 33262be9e038Ssthen view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG 33272be9e038Ssthen { 33282be9e038Ssthen OUTYY(("P(view_response_ip_data:%s)\n", $2)); 33292be9e038Ssthen if(!cfg_str2list_insert( 33302be9e038Ssthen &cfg_parser->cfg->views->respip_data, $2, $3)) 33312be9e038Ssthen fatal_exit("out of memory adding response-ip-data"); 33322be9e038Ssthen } 33332be9e038Ssthen ; 333477079be7Ssthen view_local_data: VAR_LOCAL_DATA STRING_ARG 333577079be7Ssthen { 333677079be7Ssthen OUTYY(("P(view_local_data:%s)\n", $2)); 333777079be7Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) { 333877079be7Ssthen fatal_exit("out of memory adding local-data"); 333977079be7Ssthen } 334077079be7Ssthen } 334177079be7Ssthen ; 33422be9e038Ssthen view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG 33432be9e038Ssthen { 33442be9e038Ssthen char* ptr; 33452be9e038Ssthen OUTYY(("P(view_local_data_ptr:%s)\n", $2)); 33462be9e038Ssthen ptr = cfg_ptr_reverse($2); 33472be9e038Ssthen free($2); 33482be9e038Ssthen if(ptr) { 33492be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->views-> 33502be9e038Ssthen local_data, ptr)) 33512be9e038Ssthen fatal_exit("out of memory adding local-data"); 33522be9e038Ssthen } else { 33532be9e038Ssthen yyerror("local-data-ptr could not be reversed"); 33542be9e038Ssthen } 33552be9e038Ssthen } 33562be9e038Ssthen ; 335777079be7Ssthen view_first: VAR_VIEW_FIRST STRING_ARG 335877079be7Ssthen { 335977079be7Ssthen OUTYY(("P(view-first:%s)\n", $2)); 336077079be7Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 336177079be7Ssthen yyerror("expected yes or no."); 336277079be7Ssthen else cfg_parser->cfg->views->isfirst=(strcmp($2, "yes")==0); 336377079be7Ssthen free($2); 336477079be7Ssthen } 336577079be7Ssthen ; 3366933707f3Ssthen rcstart: VAR_REMOTE_CONTROL 3367933707f3Ssthen { 3368933707f3Ssthen OUTYY(("\nP(remote-control:)\n")); 336945872187Ssthen cfg_parser->started_toplevel = 1; 3370933707f3Ssthen } 3371933707f3Ssthen ; 3372933707f3Ssthen contents_rc: contents_rc content_rc 3373933707f3Ssthen | ; 3374933707f3Ssthen content_rc: rc_control_enable | rc_control_interface | rc_control_port | 3375933707f3Ssthen rc_server_key_file | rc_server_cert_file | rc_control_key_file | 3376b2cdf21fSsthen rc_control_cert_file | rc_control_use_cert 3377933707f3Ssthen ; 3378933707f3Ssthen rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG 3379933707f3Ssthen { 3380933707f3Ssthen OUTYY(("P(control_enable:%s)\n", $2)); 3381933707f3Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3382933707f3Ssthen yyerror("expected yes or no."); 3383933707f3Ssthen else cfg_parser->cfg->remote_control_enable = 3384933707f3Ssthen (strcmp($2, "yes")==0); 3385933707f3Ssthen free($2); 3386933707f3Ssthen } 3387933707f3Ssthen ; 3388933707f3Ssthen rc_control_port: VAR_CONTROL_PORT STRING_ARG 3389933707f3Ssthen { 3390933707f3Ssthen OUTYY(("P(control_port:%s)\n", $2)); 3391933707f3Ssthen if(atoi($2) == 0) 3392933707f3Ssthen yyerror("control port number expected"); 3393933707f3Ssthen else cfg_parser->cfg->control_port = atoi($2); 3394933707f3Ssthen free($2); 3395933707f3Ssthen } 3396933707f3Ssthen ; 3397933707f3Ssthen rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG 3398933707f3Ssthen { 3399933707f3Ssthen OUTYY(("P(control_interface:%s)\n", $2)); 340020237c55Ssthen if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, $2)) 3401933707f3Ssthen yyerror("out of memory"); 3402933707f3Ssthen } 3403933707f3Ssthen ; 3404b2cdf21fSsthen rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG 3405b2cdf21fSsthen { 3406b2cdf21fSsthen OUTYY(("P(control_use_cert:%s)\n", $2)); 340720237c55Ssthen cfg_parser->cfg->control_use_cert = (strcmp($2, "yes")==0); 3408b2cdf21fSsthen free($2); 3409b2cdf21fSsthen } 3410b2cdf21fSsthen ; 3411933707f3Ssthen rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG 3412933707f3Ssthen { 3413933707f3Ssthen OUTYY(("P(rc_server_key_file:%s)\n", $2)); 3414933707f3Ssthen free(cfg_parser->cfg->server_key_file); 3415933707f3Ssthen cfg_parser->cfg->server_key_file = $2; 3416933707f3Ssthen } 3417933707f3Ssthen ; 3418933707f3Ssthen rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG 3419933707f3Ssthen { 3420933707f3Ssthen OUTYY(("P(rc_server_cert_file:%s)\n", $2)); 3421933707f3Ssthen free(cfg_parser->cfg->server_cert_file); 3422933707f3Ssthen cfg_parser->cfg->server_cert_file = $2; 3423933707f3Ssthen } 3424933707f3Ssthen ; 3425933707f3Ssthen rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG 3426933707f3Ssthen { 3427933707f3Ssthen OUTYY(("P(rc_control_key_file:%s)\n", $2)); 3428933707f3Ssthen free(cfg_parser->cfg->control_key_file); 3429933707f3Ssthen cfg_parser->cfg->control_key_file = $2; 3430933707f3Ssthen } 3431933707f3Ssthen ; 3432933707f3Ssthen rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG 3433933707f3Ssthen { 3434933707f3Ssthen OUTYY(("P(rc_control_cert_file:%s)\n", $2)); 3435933707f3Ssthen free(cfg_parser->cfg->control_cert_file); 3436933707f3Ssthen cfg_parser->cfg->control_cert_file = $2; 3437933707f3Ssthen } 3438933707f3Ssthen ; 343998f3ca02Sbrad dtstart: VAR_DNSTAP 344098f3ca02Sbrad { 344198f3ca02Sbrad OUTYY(("\nP(dnstap:)\n")); 344245872187Ssthen cfg_parser->started_toplevel = 1; 344398f3ca02Sbrad } 344498f3ca02Sbrad ; 344598f3ca02Sbrad contents_dt: contents_dt content_dt 344698f3ca02Sbrad | ; 3447a3167c07Ssthen content_dt: dt_dnstap_enable | dt_dnstap_socket_path | dt_dnstap_bidirectional | 3448a3167c07Ssthen dt_dnstap_ip | dt_dnstap_tls | dt_dnstap_tls_server_name | 3449a3167c07Ssthen dt_dnstap_tls_cert_bundle | 3450a3167c07Ssthen dt_dnstap_tls_client_key_file | dt_dnstap_tls_client_cert_file | 345198f3ca02Sbrad dt_dnstap_send_identity | dt_dnstap_send_version | 345298f3ca02Sbrad dt_dnstap_identity | dt_dnstap_version | 345398f3ca02Sbrad dt_dnstap_log_resolver_query_messages | 345498f3ca02Sbrad dt_dnstap_log_resolver_response_messages | 345598f3ca02Sbrad dt_dnstap_log_client_query_messages | 345698f3ca02Sbrad dt_dnstap_log_client_response_messages | 345798f3ca02Sbrad dt_dnstap_log_forwarder_query_messages | 3458*98bc733bSsthen dt_dnstap_log_forwarder_response_messages | 3459*98bc733bSsthen dt_dnstap_sample_rate 346098f3ca02Sbrad ; 346198f3ca02Sbrad dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG 346298f3ca02Sbrad { 346398f3ca02Sbrad OUTYY(("P(dt_dnstap_enable:%s)\n", $2)); 346498f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 346598f3ca02Sbrad yyerror("expected yes or no."); 346698f3ca02Sbrad else cfg_parser->cfg->dnstap = (strcmp($2, "yes")==0); 3467f6b99bafSsthen free($2); 346898f3ca02Sbrad } 346998f3ca02Sbrad ; 3470a3167c07Ssthen dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG 3471a3167c07Ssthen { 3472a3167c07Ssthen OUTYY(("P(dt_dnstap_bidirectional:%s)\n", $2)); 3473a3167c07Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3474a3167c07Ssthen yyerror("expected yes or no."); 3475a3167c07Ssthen else cfg_parser->cfg->dnstap_bidirectional = 3476a3167c07Ssthen (strcmp($2, "yes")==0); 3477a3167c07Ssthen free($2); 3478a3167c07Ssthen } 3479a3167c07Ssthen ; 348098f3ca02Sbrad dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG 348198f3ca02Sbrad { 348298f3ca02Sbrad OUTYY(("P(dt_dnstap_socket_path:%s)\n", $2)); 348398f3ca02Sbrad free(cfg_parser->cfg->dnstap_socket_path); 348498f3ca02Sbrad cfg_parser->cfg->dnstap_socket_path = $2; 348598f3ca02Sbrad } 348698f3ca02Sbrad ; 3487a3167c07Ssthen dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG 3488a3167c07Ssthen { 3489a3167c07Ssthen OUTYY(("P(dt_dnstap_ip:%s)\n", $2)); 3490a3167c07Ssthen free(cfg_parser->cfg->dnstap_ip); 3491a3167c07Ssthen cfg_parser->cfg->dnstap_ip = $2; 3492a3167c07Ssthen } 3493a3167c07Ssthen ; 3494a3167c07Ssthen dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG 3495a3167c07Ssthen { 3496a3167c07Ssthen OUTYY(("P(dt_dnstap_tls:%s)\n", $2)); 3497a3167c07Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3498a3167c07Ssthen yyerror("expected yes or no."); 3499a3167c07Ssthen else cfg_parser->cfg->dnstap_tls = (strcmp($2, "yes")==0); 3500a3167c07Ssthen free($2); 3501a3167c07Ssthen } 3502a3167c07Ssthen ; 3503a3167c07Ssthen dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG 3504a3167c07Ssthen { 3505a3167c07Ssthen OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", $2)); 3506a3167c07Ssthen free(cfg_parser->cfg->dnstap_tls_server_name); 3507a3167c07Ssthen cfg_parser->cfg->dnstap_tls_server_name = $2; 3508a3167c07Ssthen } 3509a3167c07Ssthen ; 3510a3167c07Ssthen dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG 3511a3167c07Ssthen { 3512a3167c07Ssthen OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", $2)); 3513a3167c07Ssthen free(cfg_parser->cfg->dnstap_tls_cert_bundle); 3514a3167c07Ssthen cfg_parser->cfg->dnstap_tls_cert_bundle = $2; 3515a3167c07Ssthen } 3516a3167c07Ssthen ; 3517a3167c07Ssthen dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG 3518a3167c07Ssthen { 3519a3167c07Ssthen OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", $2)); 3520a3167c07Ssthen free(cfg_parser->cfg->dnstap_tls_client_key_file); 3521a3167c07Ssthen cfg_parser->cfg->dnstap_tls_client_key_file = $2; 3522a3167c07Ssthen } 3523a3167c07Ssthen ; 3524a3167c07Ssthen dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG 3525a3167c07Ssthen { 3526a3167c07Ssthen OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", $2)); 3527a3167c07Ssthen free(cfg_parser->cfg->dnstap_tls_client_cert_file); 3528a3167c07Ssthen cfg_parser->cfg->dnstap_tls_client_cert_file = $2; 3529a3167c07Ssthen } 3530a3167c07Ssthen ; 353198f3ca02Sbrad dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG 353298f3ca02Sbrad { 353398f3ca02Sbrad OUTYY(("P(dt_dnstap_send_identity:%s)\n", $2)); 353498f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 353598f3ca02Sbrad yyerror("expected yes or no."); 353698f3ca02Sbrad else cfg_parser->cfg->dnstap_send_identity = (strcmp($2, "yes")==0); 3537f6b99bafSsthen free($2); 353898f3ca02Sbrad } 353998f3ca02Sbrad ; 354098f3ca02Sbrad dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG 354198f3ca02Sbrad { 354298f3ca02Sbrad OUTYY(("P(dt_dnstap_send_version:%s)\n", $2)); 354398f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 354498f3ca02Sbrad yyerror("expected yes or no."); 354598f3ca02Sbrad else cfg_parser->cfg->dnstap_send_version = (strcmp($2, "yes")==0); 3546f6b99bafSsthen free($2); 354798f3ca02Sbrad } 354898f3ca02Sbrad ; 354998f3ca02Sbrad dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG 355098f3ca02Sbrad { 355198f3ca02Sbrad OUTYY(("P(dt_dnstap_identity:%s)\n", $2)); 355298f3ca02Sbrad free(cfg_parser->cfg->dnstap_identity); 355398f3ca02Sbrad cfg_parser->cfg->dnstap_identity = $2; 355498f3ca02Sbrad } 355598f3ca02Sbrad ; 355698f3ca02Sbrad dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG 355798f3ca02Sbrad { 355898f3ca02Sbrad OUTYY(("P(dt_dnstap_version:%s)\n", $2)); 355998f3ca02Sbrad free(cfg_parser->cfg->dnstap_version); 356098f3ca02Sbrad cfg_parser->cfg->dnstap_version = $2; 356198f3ca02Sbrad } 356298f3ca02Sbrad ; 356398f3ca02Sbrad dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG 356498f3ca02Sbrad { 356598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", $2)); 356698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 356798f3ca02Sbrad yyerror("expected yes or no."); 356898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_resolver_query_messages = 356998f3ca02Sbrad (strcmp($2, "yes")==0); 3570f6b99bafSsthen free($2); 357198f3ca02Sbrad } 357298f3ca02Sbrad ; 357398f3ca02Sbrad dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG 357498f3ca02Sbrad { 357598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", $2)); 357698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 357798f3ca02Sbrad yyerror("expected yes or no."); 357898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_resolver_response_messages = 357998f3ca02Sbrad (strcmp($2, "yes")==0); 3580f6b99bafSsthen free($2); 358198f3ca02Sbrad } 358298f3ca02Sbrad ; 358398f3ca02Sbrad dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG 358498f3ca02Sbrad { 358598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", $2)); 358698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 358798f3ca02Sbrad yyerror("expected yes or no."); 358898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_client_query_messages = 358998f3ca02Sbrad (strcmp($2, "yes")==0); 3590f6b99bafSsthen free($2); 359198f3ca02Sbrad } 359298f3ca02Sbrad ; 359398f3ca02Sbrad dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG 359498f3ca02Sbrad { 359598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", $2)); 359698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 359798f3ca02Sbrad yyerror("expected yes or no."); 359898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_client_response_messages = 359998f3ca02Sbrad (strcmp($2, "yes")==0); 3600f6b99bafSsthen free($2); 360198f3ca02Sbrad } 360298f3ca02Sbrad ; 360398f3ca02Sbrad dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG 360498f3ca02Sbrad { 360598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", $2)); 360698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 360798f3ca02Sbrad yyerror("expected yes or no."); 360898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_forwarder_query_messages = 360998f3ca02Sbrad (strcmp($2, "yes")==0); 3610f6b99bafSsthen free($2); 361198f3ca02Sbrad } 361298f3ca02Sbrad ; 361398f3ca02Sbrad dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG 361498f3ca02Sbrad { 361598f3ca02Sbrad OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", $2)); 361698f3ca02Sbrad if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 361798f3ca02Sbrad yyerror("expected yes or no."); 361898f3ca02Sbrad else cfg_parser->cfg->dnstap_log_forwarder_response_messages = 361998f3ca02Sbrad (strcmp($2, "yes")==0); 3620f6b99bafSsthen free($2); 362198f3ca02Sbrad } 362298f3ca02Sbrad ; 3623*98bc733bSsthen dt_dnstap_sample_rate: VAR_DNSTAP_SAMPLE_RATE STRING_ARG 3624*98bc733bSsthen { 3625*98bc733bSsthen OUTYY(("P(dt_dnstap_sample_rate:%s)\n", $2)); 3626*98bc733bSsthen if(atoi($2) == 0 && strcmp($2, "0") != 0) 3627*98bc733bSsthen yyerror("number expected"); 3628*98bc733bSsthen else if(atoi($2) < 0) 3629*98bc733bSsthen yyerror("dnstap sample rate too small"); 3630*98bc733bSsthen else cfg_parser->cfg->dnstap_sample_rate = atoi($2); 3631*98bc733bSsthen free($2); 3632*98bc733bSsthen } 3633*98bc733bSsthen ; 3634933707f3Ssthen pythonstart: VAR_PYTHON 3635933707f3Ssthen { 3636933707f3Ssthen OUTYY(("\nP(python:)\n")); 363745872187Ssthen cfg_parser->started_toplevel = 1; 3638933707f3Ssthen } 3639933707f3Ssthen ; 3640933707f3Ssthen contents_py: contents_py content_py 3641933707f3Ssthen | ; 3642933707f3Ssthen content_py: py_script 3643933707f3Ssthen ; 3644933707f3Ssthen py_script: VAR_PYTHON_SCRIPT STRING_ARG 3645933707f3Ssthen { 3646933707f3Ssthen OUTYY(("P(python-script:%s)\n", $2)); 36478240c1b9Ssthen if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, $2)) 36488240c1b9Ssthen yyerror("out of memory"); 3649933707f3Ssthen } 36508b7325afSsthen ; 3651a3167c07Ssthen dynlibstart: VAR_DYNLIB 3652a3167c07Ssthen { 3653a3167c07Ssthen OUTYY(("\nP(dynlib:)\n")); 365445872187Ssthen cfg_parser->started_toplevel = 1; 3655a3167c07Ssthen } 3656a3167c07Ssthen ; 3657a3167c07Ssthen contents_dl: contents_dl content_dl 3658a3167c07Ssthen | ; 3659a3167c07Ssthen content_dl: dl_file 3660a3167c07Ssthen ; 3661a3167c07Ssthen dl_file: VAR_DYNLIB_FILE STRING_ARG 3662a3167c07Ssthen { 3663a3167c07Ssthen OUTYY(("P(dynlib-file:%s)\n", $2)); 3664a3167c07Ssthen if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, $2)) 3665a3167c07Ssthen yyerror("out of memory"); 3666a3167c07Ssthen } 36678b7325afSsthen ; 36682ee382b6Ssthen server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG 36692ee382b6Ssthen { 36702ee382b6Ssthen OUTYY(("P(disable_dnssec_lame_check:%s)\n", $2)); 36712ee382b6Ssthen if (strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 36722ee382b6Ssthen yyerror("expected yes or no."); 36732ee382b6Ssthen else cfg_parser->cfg->disable_dnssec_lame_check = 36742ee382b6Ssthen (strcmp($2, "yes")==0); 36752ee382b6Ssthen free($2); 36762ee382b6Ssthen } 367777079be7Ssthen ; 367877079be7Ssthen server_log_identity: VAR_LOG_IDENTITY STRING_ARG 367977079be7Ssthen { 368077079be7Ssthen OUTYY(("P(server_log_identity:%s)\n", $2)); 368177079be7Ssthen free(cfg_parser->cfg->log_identity); 368277079be7Ssthen cfg_parser->cfg->log_identity = $2; 368377079be7Ssthen } 368477079be7Ssthen ; 36852be9e038Ssthen server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG 36862be9e038Ssthen { 36872be9e038Ssthen OUTYY(("P(server_response_ip:%s %s)\n", $2, $3)); 36882be9e038Ssthen validate_respip_action($3); 36892be9e038Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions, 36902be9e038Ssthen $2, $3)) 36912be9e038Ssthen fatal_exit("out of memory adding response-ip"); 36922be9e038Ssthen } 36932be9e038Ssthen ; 36942be9e038Ssthen server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG 36952be9e038Ssthen { 36962be9e038Ssthen OUTYY(("P(server_response_ip_data:%s)\n", $2)); 36972be9e038Ssthen if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data, 36982be9e038Ssthen $2, $3)) 36992be9e038Ssthen fatal_exit("out of memory adding response-ip-data"); 37002be9e038Ssthen } 37012be9e038Ssthen ; 37022be9e038Ssthen dnscstart: VAR_DNSCRYPT 37032be9e038Ssthen { 37042be9e038Ssthen OUTYY(("\nP(dnscrypt:)\n")); 370545872187Ssthen cfg_parser->started_toplevel = 1; 37062be9e038Ssthen } 37072be9e038Ssthen ; 37082be9e038Ssthen contents_dnsc: contents_dnsc content_dnsc 37092be9e038Ssthen | ; 37102be9e038Ssthen content_dnsc: 37112be9e038Ssthen dnsc_dnscrypt_enable | dnsc_dnscrypt_port | dnsc_dnscrypt_provider | 37127191de28Ssthen dnsc_dnscrypt_secret_key | dnsc_dnscrypt_provider_cert | 3713bdfc4d55Sflorian dnsc_dnscrypt_provider_cert_rotated | 37147191de28Ssthen dnsc_dnscrypt_shared_secret_cache_size | 3715bdfc4d55Sflorian dnsc_dnscrypt_shared_secret_cache_slabs | 3716bdfc4d55Sflorian dnsc_dnscrypt_nonce_cache_size | 3717bdfc4d55Sflorian dnsc_dnscrypt_nonce_cache_slabs 37182be9e038Ssthen ; 37192be9e038Ssthen dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG 37202be9e038Ssthen { 37212be9e038Ssthen OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", $2)); 37222be9e038Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 37232be9e038Ssthen yyerror("expected yes or no."); 37242be9e038Ssthen else cfg_parser->cfg->dnscrypt = (strcmp($2, "yes")==0); 37252be9e038Ssthen free($2); 37262be9e038Ssthen } 37272be9e038Ssthen ; 37282be9e038Ssthen dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG 37292be9e038Ssthen { 37302be9e038Ssthen OUTYY(("P(dnsc_dnscrypt_port:%s)\n", $2)); 37312be9e038Ssthen if(atoi($2) == 0) 37322be9e038Ssthen yyerror("port number expected"); 37332be9e038Ssthen else cfg_parser->cfg->dnscrypt_port = atoi($2); 37342be9e038Ssthen free($2); 37352be9e038Ssthen } 37362be9e038Ssthen ; 37372be9e038Ssthen dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG 37382be9e038Ssthen { 37392be9e038Ssthen OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", $2)); 37402be9e038Ssthen free(cfg_parser->cfg->dnscrypt_provider); 37412be9e038Ssthen cfg_parser->cfg->dnscrypt_provider = $2; 37422be9e038Ssthen } 37432be9e038Ssthen ; 37442be9e038Ssthen dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG 37452be9e038Ssthen { 37462be9e038Ssthen OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", $2)); 3747bdfc4d55Sflorian if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, $2)) 3748bdfc4d55Sflorian log_warn("dnscrypt-provider-cert %s is a duplicate", $2); 37492be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, $2)) 37502be9e038Ssthen fatal_exit("out of memory adding dnscrypt-provider-cert"); 37512be9e038Ssthen } 37522be9e038Ssthen ; 3753bdfc4d55Sflorian dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG 3754bdfc4d55Sflorian { 3755bdfc4d55Sflorian OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", $2)); 3756bdfc4d55Sflorian if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, $2)) 3757bdfc4d55Sflorian fatal_exit("out of memory adding dnscrypt-provider-cert-rotated"); 3758bdfc4d55Sflorian } 3759bdfc4d55Sflorian ; 37602be9e038Ssthen dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG 37612be9e038Ssthen { 37622be9e038Ssthen OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", $2)); 3763bdfc4d55Sflorian if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, $2)) 3764bdfc4d55Sflorian log_warn("dnscrypt-secret-key: %s is a duplicate", $2); 37652be9e038Ssthen if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, $2)) 37662be9e038Ssthen fatal_exit("out of memory adding dnscrypt-secret-key"); 37672be9e038Ssthen } 37682be9e038Ssthen ; 37697191de28Ssthen dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG 37707191de28Ssthen { 37717191de28Ssthen OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2)); 37727191de28Ssthen if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size)) 37737191de28Ssthen yyerror("memory size expected"); 37747191de28Ssthen free($2); 37757191de28Ssthen } 37767191de28Ssthen ; 37777191de28Ssthen dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG 37787191de28Ssthen { 37797191de28Ssthen OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2)); 3780e21c60efSsthen if(atoi($2) == 0) { 37817191de28Ssthen yyerror("number expected"); 3782e21c60efSsthen } else { 37837191de28Ssthen cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2); 37847191de28Ssthen if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs)) 37857191de28Ssthen yyerror("must be a power of 2"); 37867191de28Ssthen } 37877191de28Ssthen free($2); 37887191de28Ssthen } 37897191de28Ssthen ; 3790bdfc4d55Sflorian dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG 3791bdfc4d55Sflorian { 3792bdfc4d55Sflorian OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2)); 3793bdfc4d55Sflorian if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size)) 3794bdfc4d55Sflorian yyerror("memory size expected"); 3795bdfc4d55Sflorian free($2); 3796bdfc4d55Sflorian } 3797bdfc4d55Sflorian ; 3798bdfc4d55Sflorian dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG 3799bdfc4d55Sflorian { 3800bdfc4d55Sflorian OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2)); 3801e21c60efSsthen if(atoi($2) == 0) { 3802bdfc4d55Sflorian yyerror("number expected"); 3803e21c60efSsthen } else { 3804bdfc4d55Sflorian cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2); 3805bdfc4d55Sflorian if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs)) 3806bdfc4d55Sflorian yyerror("must be a power of 2"); 3807bdfc4d55Sflorian } 3808bdfc4d55Sflorian free($2); 3809bdfc4d55Sflorian } 3810bdfc4d55Sflorian ; 38117191de28Ssthen cachedbstart: VAR_CACHEDB 38127191de28Ssthen { 38137191de28Ssthen OUTYY(("\nP(cachedb:)\n")); 381445872187Ssthen cfg_parser->started_toplevel = 1; 38157191de28Ssthen } 38167191de28Ssthen ; 38177191de28Ssthen contents_cachedb: contents_cachedb content_cachedb 38187191de28Ssthen | ; 381920237c55Ssthen content_cachedb: cachedb_backend_name | cachedb_secret_seed | 3820a3167c07Ssthen redis_server_host | redis_server_port | redis_timeout | 3821d896b962Ssthen redis_expire_records | redis_server_path | redis_server_password | 38222bdc0ed1Ssthen cachedb_no_store | redis_logical_db | cachedb_check_when_serve_expired 38237191de28Ssthen ; 38247191de28Ssthen cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG 38257191de28Ssthen { 38267191de28Ssthen #ifdef USE_CACHEDB 38277191de28Ssthen OUTYY(("P(backend:%s)\n", $2)); 38287191de28Ssthen free(cfg_parser->cfg->cachedb_backend); 38297191de28Ssthen cfg_parser->cfg->cachedb_backend = $2; 38307191de28Ssthen #else 38317191de28Ssthen OUTYY(("P(Compiled without cachedb, ignoring)\n")); 3832f6b99bafSsthen free($2); 38337191de28Ssthen #endif 38347191de28Ssthen } 38357191de28Ssthen ; 38367191de28Ssthen cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG 38377191de28Ssthen { 38387191de28Ssthen #ifdef USE_CACHEDB 38397191de28Ssthen OUTYY(("P(secret-seed:%s)\n", $2)); 38407191de28Ssthen free(cfg_parser->cfg->cachedb_secret); 38417191de28Ssthen cfg_parser->cfg->cachedb_secret = $2; 38427191de28Ssthen #else 38437191de28Ssthen OUTYY(("P(Compiled without cachedb, ignoring)\n")); 38447191de28Ssthen free($2); 38457191de28Ssthen #endif 38467191de28Ssthen } 38477191de28Ssthen ; 3848d896b962Ssthen cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG 3849d896b962Ssthen { 3850d896b962Ssthen #ifdef USE_CACHEDB 3851d896b962Ssthen OUTYY(("P(cachedb_no_store:%s)\n", $2)); 3852d896b962Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3853d896b962Ssthen yyerror("expected yes or no."); 3854d896b962Ssthen else cfg_parser->cfg->cachedb_no_store = (strcmp($2, "yes")==0); 3855d896b962Ssthen #else 3856d896b962Ssthen OUTYY(("P(Compiled without cachedb, ignoring)\n")); 3857d896b962Ssthen #endif 3858d896b962Ssthen free($2); 3859d896b962Ssthen } 3860d896b962Ssthen ; 38612bdc0ed1Ssthen cachedb_check_when_serve_expired: VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED STRING_ARG 38622bdc0ed1Ssthen { 38632bdc0ed1Ssthen #ifdef USE_CACHEDB 38642bdc0ed1Ssthen OUTYY(("P(cachedb_check_when_serve_expired:%s)\n", $2)); 38652bdc0ed1Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 38662bdc0ed1Ssthen yyerror("expected yes or no."); 38672bdc0ed1Ssthen else cfg_parser->cfg->cachedb_check_when_serve_expired = (strcmp($2, "yes")==0); 38682bdc0ed1Ssthen #else 38692bdc0ed1Ssthen OUTYY(("P(Compiled without cachedb, ignoring)\n")); 38702bdc0ed1Ssthen #endif 38712bdc0ed1Ssthen free($2); 38722bdc0ed1Ssthen } 38732bdc0ed1Ssthen ; 387420237c55Ssthen redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG 387520237c55Ssthen { 387620237c55Ssthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 387720237c55Ssthen OUTYY(("P(redis_server_host:%s)\n", $2)); 387820237c55Ssthen free(cfg_parser->cfg->redis_server_host); 387920237c55Ssthen cfg_parser->cfg->redis_server_host = $2; 388020237c55Ssthen #else 388120237c55Ssthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 388220237c55Ssthen free($2); 388320237c55Ssthen #endif 388420237c55Ssthen } 388520237c55Ssthen ; 388620237c55Ssthen redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG 388720237c55Ssthen { 388820237c55Ssthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 388920237c55Ssthen int port; 389020237c55Ssthen OUTYY(("P(redis_server_port:%s)\n", $2)); 389120237c55Ssthen port = atoi($2); 389220237c55Ssthen if(port == 0 || port < 0 || port > 65535) 389320237c55Ssthen yyerror("valid redis server port number expected"); 389420237c55Ssthen else cfg_parser->cfg->redis_server_port = port; 389520237c55Ssthen #else 389620237c55Ssthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 389720237c55Ssthen #endif 389820237c55Ssthen free($2); 389920237c55Ssthen } 390020237c55Ssthen ; 39018b7325afSsthen redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG 39028b7325afSsthen { 39038b7325afSsthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 39048b7325afSsthen OUTYY(("P(redis_server_path:%s)\n", $2)); 39058b7325afSsthen free(cfg_parser->cfg->redis_server_path); 39068b7325afSsthen cfg_parser->cfg->redis_server_path = $2; 39078b7325afSsthen #else 39088b7325afSsthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 39098b7325afSsthen free($2); 39108b7325afSsthen #endif 39118b7325afSsthen } 39128b7325afSsthen ; 39138b7325afSsthen redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG 39148b7325afSsthen { 39158b7325afSsthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 39168b7325afSsthen OUTYY(("P(redis_server_password:%s)\n", $2)); 39178b7325afSsthen free(cfg_parser->cfg->redis_server_password); 39188b7325afSsthen cfg_parser->cfg->redis_server_password = $2; 39198b7325afSsthen #else 39208b7325afSsthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 39218b7325afSsthen free($2); 39228b7325afSsthen #endif 39238b7325afSsthen } 39248b7325afSsthen ; 392520237c55Ssthen redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG 392620237c55Ssthen { 392720237c55Ssthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 392820237c55Ssthen OUTYY(("P(redis_timeout:%s)\n", $2)); 392920237c55Ssthen if(atoi($2) == 0) 393020237c55Ssthen yyerror("redis timeout value expected"); 393120237c55Ssthen else cfg_parser->cfg->redis_timeout = atoi($2); 393220237c55Ssthen #else 393320237c55Ssthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 393420237c55Ssthen #endif 393520237c55Ssthen free($2); 393620237c55Ssthen } 393720237c55Ssthen ; 3938a3167c07Ssthen redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG 3939a3167c07Ssthen { 3940a3167c07Ssthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 3941a3167c07Ssthen OUTYY(("P(redis_expire_records:%s)\n", $2)); 3942a3167c07Ssthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 3943a3167c07Ssthen yyerror("expected yes or no."); 3944a3167c07Ssthen else cfg_parser->cfg->redis_expire_records = (strcmp($2, "yes")==0); 3945a3167c07Ssthen #else 3946a3167c07Ssthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3947a3167c07Ssthen #endif 3948a3167c07Ssthen free($2); 3949a3167c07Ssthen } 3950a3167c07Ssthen ; 3951d896b962Ssthen redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG 3952d896b962Ssthen { 3953d896b962Ssthen #if defined(USE_CACHEDB) && defined(USE_REDIS) 3954d896b962Ssthen int db; 3955d896b962Ssthen OUTYY(("P(redis_logical_db:%s)\n", $2)); 3956d896b962Ssthen db = atoi($2); 3957d896b962Ssthen if((db == 0 && strcmp($2, "0") != 0) || db < 0) 3958d896b962Ssthen yyerror("valid redis logical database index expected"); 3959d896b962Ssthen else cfg_parser->cfg->redis_logical_db = db; 3960d896b962Ssthen #else 3961d896b962Ssthen OUTYY(("P(Compiled without cachedb or redis, ignoring)\n")); 3962d896b962Ssthen #endif 3963d896b962Ssthen free($2); 3964d896b962Ssthen } 3965d896b962Ssthen ; 39662308e98cSsthen server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG 39672308e98cSsthen { 39682308e98cSsthen OUTYY(("P(server_tcp_connection_limit:%s %s)\n", $2, $3)); 39692308e98cSsthen if (atoi($3) < 0) 39702308e98cSsthen yyerror("positive number expected"); 39712308e98cSsthen else { 39722308e98cSsthen if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, $2, $3)) 39732308e98cSsthen fatal_exit("out of memory adding tcp connection limit"); 39742308e98cSsthen } 39752308e98cSsthen } 39762308e98cSsthen ; 39778b7325afSsthen server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG 39788b7325afSsthen { 39798b7325afSsthen OUTYY(("P(server_answer_cookie:%s)\n", $2)); 39808b7325afSsthen if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 39818b7325afSsthen yyerror("expected yes or no."); 39828b7325afSsthen else cfg_parser->cfg->do_answer_cookie = (strcmp($2, "yes")==0); 39838b7325afSsthen free($2); 39848b7325afSsthen } 39858b7325afSsthen ; 39868b7325afSsthen server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG 39878b7325afSsthen { 39888b7325afSsthen uint8_t secret[32]; 39898b7325afSsthen size_t secret_len = sizeof(secret); 39908b7325afSsthen 39918b7325afSsthen OUTYY(("P(server_cookie_secret:%s)\n", $2)); 39928b7325afSsthen if(sldns_str2wire_hex_buf($2, secret, &secret_len) 39938b7325afSsthen || (secret_len != 16)) 39948b7325afSsthen yyerror("expected 128 bit hex string"); 39958b7325afSsthen else { 39968b7325afSsthen cfg_parser->cfg->cookie_secret_len = secret_len; 39978b7325afSsthen memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret)); 39988b7325afSsthen } 39998b7325afSsthen free($2); 40008b7325afSsthen } 40018b7325afSsthen ; 4002*98bc733bSsthen server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG 4003*98bc733bSsthen { 4004*98bc733bSsthen OUTYY(("P(cookie_secret_file:%s)\n", $2)); 4005*98bc733bSsthen free(cfg_parser->cfg->cookie_secret_file); 4006*98bc733bSsthen cfg_parser->cfg->cookie_secret_file = $2; 4007*98bc733bSsthen } 4008*98bc733bSsthen ; 40098240c1b9Ssthen ipsetstart: VAR_IPSET 40108240c1b9Ssthen { 40118240c1b9Ssthen OUTYY(("\nP(ipset:)\n")); 401245872187Ssthen cfg_parser->started_toplevel = 1; 40138240c1b9Ssthen } 40148240c1b9Ssthen ; 40158240c1b9Ssthen contents_ipset: contents_ipset content_ipset 40168240c1b9Ssthen | ; 40178240c1b9Ssthen content_ipset: ipset_name_v4 | ipset_name_v6 40188240c1b9Ssthen ; 40198240c1b9Ssthen ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG 40208240c1b9Ssthen { 40218240c1b9Ssthen #ifdef USE_IPSET 40228240c1b9Ssthen OUTYY(("P(name-v4:%s)\n", $2)); 40238240c1b9Ssthen if(cfg_parser->cfg->ipset_name_v4) 40248240c1b9Ssthen yyerror("ipset name v4 override, there must be one " 40258240c1b9Ssthen "name for ip v4"); 40268240c1b9Ssthen free(cfg_parser->cfg->ipset_name_v4); 40278240c1b9Ssthen cfg_parser->cfg->ipset_name_v4 = $2; 40288240c1b9Ssthen #else 40298240c1b9Ssthen OUTYY(("P(Compiled without ipset, ignoring)\n")); 40308240c1b9Ssthen free($2); 40318240c1b9Ssthen #endif 40328240c1b9Ssthen } 40338240c1b9Ssthen ; 40348240c1b9Ssthen ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG 40358240c1b9Ssthen { 40368240c1b9Ssthen #ifdef USE_IPSET 40378240c1b9Ssthen OUTYY(("P(name-v6:%s)\n", $2)); 40388240c1b9Ssthen if(cfg_parser->cfg->ipset_name_v6) 40398240c1b9Ssthen yyerror("ipset name v6 override, there must be one " 40408240c1b9Ssthen "name for ip v6"); 40418240c1b9Ssthen free(cfg_parser->cfg->ipset_name_v6); 40428240c1b9Ssthen cfg_parser->cfg->ipset_name_v6 = $2; 40438240c1b9Ssthen #else 40448240c1b9Ssthen OUTYY(("P(Compiled without ipset, ignoring)\n")); 40458240c1b9Ssthen free($2); 40468240c1b9Ssthen #endif 40478240c1b9Ssthen } 40488240c1b9Ssthen ; 4049933707f3Ssthen %% 4050933707f3Ssthen 4051933707f3Ssthen /* parse helper routines could be here */ 40522be9e038Ssthen static void 40532be9e038Ssthen validate_respip_action(const char* action) 40542be9e038Ssthen { 40552be9e038Ssthen if(strcmp(action, "deny")!=0 && 40562be9e038Ssthen strcmp(action, "redirect")!=0 && 40572be9e038Ssthen strcmp(action, "inform")!=0 && 40582be9e038Ssthen strcmp(action, "inform_deny")!=0 && 40592be9e038Ssthen strcmp(action, "always_transparent")!=0 && 40602be9e038Ssthen strcmp(action, "always_refuse")!=0 && 40612be9e038Ssthen strcmp(action, "always_nxdomain")!=0) 40622be9e038Ssthen { 40632be9e038Ssthen yyerror("response-ip action: expected deny, redirect, " 40642be9e038Ssthen "inform, inform_deny, always_transparent, " 40652be9e038Ssthen "always_refuse or always_nxdomain"); 40662be9e038Ssthen } 40672be9e038Ssthen } 40688240c1b9Ssthen 406945872187Ssthen static void 407045872187Ssthen validate_acl_action(const char* action) 407145872187Ssthen { 407245872187Ssthen if(strcmp(action, "deny")!=0 && 407345872187Ssthen strcmp(action, "refuse")!=0 && 407445872187Ssthen strcmp(action, "deny_non_local")!=0 && 407545872187Ssthen strcmp(action, "refuse_non_local")!=0 && 407645872187Ssthen strcmp(action, "allow_setrd")!=0 && 407745872187Ssthen strcmp(action, "allow")!=0 && 40788b7325afSsthen strcmp(action, "allow_snoop")!=0 && 40798b7325afSsthen strcmp(action, "allow_cookie")!=0) 408045872187Ssthen { 408145872187Ssthen yyerror("expected deny, refuse, deny_non_local, " 40828b7325afSsthen "refuse_non_local, allow, allow_setrd, " 40838b7325afSsthen "allow_snoop or allow_cookie as access control action"); 408445872187Ssthen } 408545872187Ssthen } 4086