1238106Sdes/* 2238106Sdes * configparser.y -- yacc grammar for unbound configuration files 3238106Sdes * 4238106Sdes * Copyright (c) 2001-2006, NLnet Labs. All rights reserved. 5238106Sdes * 6238106Sdes * Copyright (c) 2007, NLnet Labs. All rights reserved. 7238106Sdes * 8238106Sdes * This software is open source. 9238106Sdes * 10238106Sdes * Redistribution and use in source and binary forms, with or without 11238106Sdes * modification, are permitted provided that the following conditions 12238106Sdes * are met: 13238106Sdes * 14238106Sdes * Redistributions of source code must retain the above copyright notice, 15238106Sdes * this list of conditions and the following disclaimer. 16238106Sdes * 17238106Sdes * Redistributions in binary form must reproduce the above copyright notice, 18238106Sdes * this list of conditions and the following disclaimer in the documentation 19238106Sdes * and/or other materials provided with the distribution. 20238106Sdes * 21238106Sdes * Neither the name of the NLNET LABS nor the names of its contributors may 22238106Sdes * be used to endorse or promote products derived from this software without 23238106Sdes * specific prior written permission. 24238106Sdes * 25238106Sdes * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26269257Sdes * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27269257Sdes * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28269257Sdes * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29269257Sdes * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30269257Sdes * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 31269257Sdes * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 32269257Sdes * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 33269257Sdes * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 34269257Sdes * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35269257Sdes * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36238106Sdes */ 37238106Sdes 38238106Sdes%{ 39238106Sdes#include "config.h" 40238106Sdes 41238106Sdes#include <stdarg.h> 42238106Sdes#include <stdio.h> 43238106Sdes#include <string.h> 44238106Sdes#include <stdlib.h> 45238106Sdes#include <assert.h> 46238106Sdes 47238106Sdes#include "util/config_file.h" 48238106Sdes#include "util/net_help.h" 49238106Sdes 50238106Sdesint ub_c_lex(void); 51238106Sdesvoid ub_c_error(const char *message); 52238106Sdes 53238106Sdes/* these need to be global, otherwise they cannot be used inside yacc */ 54238106Sdesextern struct config_parser_state* cfg_parser; 55238106Sdes 56238106Sdes#if 0 57238106Sdes#define OUTYY(s) printf s /* used ONLY when debugging */ 58238106Sdes#else 59238106Sdes#define OUTYY(s) 60238106Sdes#endif 61238106Sdes 62238106Sdes%} 63238106Sdes%union { 64238106Sdes char* str; 65238106Sdes}; 66238106Sdes 67238106Sdes%token SPACE LETTER NEWLINE COMMENT COLON ANY ZONESTR 68238106Sdes%token <str> STRING_ARG 69238106Sdes%token VAR_SERVER VAR_VERBOSITY VAR_NUM_THREADS VAR_PORT 70238106Sdes%token VAR_OUTGOING_RANGE VAR_INTERFACE 71238106Sdes%token VAR_DO_IP4 VAR_DO_IP6 VAR_DO_UDP VAR_DO_TCP 72238106Sdes%token VAR_CHROOT VAR_USERNAME VAR_DIRECTORY VAR_LOGFILE VAR_PIDFILE 73238106Sdes%token VAR_MSG_CACHE_SIZE VAR_MSG_CACHE_SLABS VAR_NUM_QUERIES_PER_THREAD 74238106Sdes%token VAR_RRSET_CACHE_SIZE VAR_RRSET_CACHE_SLABS VAR_OUTGOING_NUM_TCP 75238106Sdes%token VAR_INFRA_HOST_TTL VAR_INFRA_LAME_TTL VAR_INFRA_CACHE_SLABS 76238106Sdes%token VAR_INFRA_CACHE_NUMHOSTS VAR_INFRA_CACHE_LAME_SIZE VAR_NAME 77238106Sdes%token VAR_STUB_ZONE VAR_STUB_HOST VAR_STUB_ADDR VAR_TARGET_FETCH_POLICY 78238106Sdes%token VAR_HARDEN_SHORT_BUFSIZE VAR_HARDEN_LARGE_QUERIES 79238106Sdes%token VAR_FORWARD_ZONE VAR_FORWARD_HOST VAR_FORWARD_ADDR 80238106Sdes%token VAR_DO_NOT_QUERY_ADDRESS VAR_HIDE_IDENTITY VAR_HIDE_VERSION 81238106Sdes%token VAR_IDENTITY VAR_VERSION VAR_HARDEN_GLUE VAR_MODULE_CONF 82238106Sdes%token VAR_TRUST_ANCHOR_FILE VAR_TRUST_ANCHOR VAR_VAL_OVERRIDE_DATE 83238106Sdes%token VAR_BOGUS_TTL VAR_VAL_CLEAN_ADDITIONAL VAR_VAL_PERMISSIVE_MODE 84238106Sdes%token VAR_INCOMING_NUM_TCP VAR_MSG_BUFFER_SIZE VAR_KEY_CACHE_SIZE 85238106Sdes%token VAR_KEY_CACHE_SLABS VAR_TRUSTED_KEYS_FILE 86238106Sdes%token VAR_VAL_NSEC3_KEYSIZE_ITERATIONS VAR_USE_SYSLOG 87238106Sdes%token VAR_OUTGOING_INTERFACE VAR_ROOT_HINTS VAR_DO_NOT_QUERY_LOCALHOST 88238106Sdes%token VAR_CACHE_MAX_TTL VAR_HARDEN_DNSSEC_STRIPPED VAR_ACCESS_CONTROL 89238106Sdes%token VAR_LOCAL_ZONE VAR_LOCAL_DATA VAR_INTERFACE_AUTOMATIC 90238106Sdes%token VAR_STATISTICS_INTERVAL VAR_DO_DAEMONIZE VAR_USE_CAPS_FOR_ID 91238106Sdes%token VAR_STATISTICS_CUMULATIVE VAR_OUTGOING_PORT_PERMIT 92238106Sdes%token VAR_OUTGOING_PORT_AVOID VAR_DLV_ANCHOR_FILE VAR_DLV_ANCHOR 93238106Sdes%token VAR_NEG_CACHE_SIZE VAR_HARDEN_REFERRAL_PATH VAR_PRIVATE_ADDRESS 94238106Sdes%token VAR_PRIVATE_DOMAIN VAR_REMOTE_CONTROL VAR_CONTROL_ENABLE 95238106Sdes%token VAR_CONTROL_INTERFACE VAR_CONTROL_PORT VAR_SERVER_KEY_FILE 96238106Sdes%token VAR_SERVER_CERT_FILE VAR_CONTROL_KEY_FILE VAR_CONTROL_CERT_FILE 97238106Sdes%token VAR_EXTENDED_STATISTICS VAR_LOCAL_DATA_PTR VAR_JOSTLE_TIMEOUT 98238106Sdes%token VAR_STUB_PRIME VAR_UNWANTED_REPLY_THRESHOLD VAR_LOG_TIME_ASCII 99238106Sdes%token VAR_DOMAIN_INSECURE VAR_PYTHON VAR_PYTHON_SCRIPT VAR_VAL_SIG_SKEW_MIN 100238106Sdes%token VAR_VAL_SIG_SKEW_MAX VAR_CACHE_MIN_TTL VAR_VAL_LOG_LEVEL 101238106Sdes%token VAR_AUTO_TRUST_ANCHOR_FILE VAR_KEEP_MISSING VAR_ADD_HOLDDOWN 102238106Sdes%token VAR_DEL_HOLDDOWN VAR_SO_RCVBUF VAR_EDNS_BUFFER_SIZE VAR_PREFETCH 103269257Sdes%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN 104238106Sdes%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM 105238106Sdes%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST 106238106Sdes%token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN 107269257Sdes%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE VAR_UNBLOCK_LAN_ZONES 108238106Sdes 109238106Sdes%% 110238106Sdestoplevelvars: /* empty */ | toplevelvars toplevelvar ; 111238106Sdestoplevelvar: serverstart contents_server | stubstart contents_stub | 112238106Sdes forwardstart contents_forward | pythonstart contents_py | 113238106Sdes rcstart contents_rc 114238106Sdes ; 115238106Sdes 116238106Sdes/* server: declaration */ 117238106Sdesserverstart: VAR_SERVER 118238106Sdes { 119238106Sdes OUTYY(("\nP(server:)\n")); 120238106Sdes } 121238106Sdes ; 122238106Sdescontents_server: contents_server content_server 123238106Sdes | ; 124238106Sdescontent_server: server_num_threads | server_verbosity | server_port | 125238106Sdes server_outgoing_range | server_do_ip4 | 126238106Sdes server_do_ip6 | server_do_udp | server_do_tcp | 127238106Sdes server_interface | server_chroot | server_username | 128238106Sdes server_directory | server_logfile | server_pidfile | 129238106Sdes server_msg_cache_size | server_msg_cache_slabs | 130238106Sdes server_num_queries_per_thread | server_rrset_cache_size | 131238106Sdes server_rrset_cache_slabs | server_outgoing_num_tcp | 132238106Sdes server_infra_host_ttl | server_infra_lame_ttl | 133238106Sdes server_infra_cache_slabs | server_infra_cache_numhosts | 134238106Sdes server_infra_cache_lame_size | server_target_fetch_policy | 135238106Sdes server_harden_short_bufsize | server_harden_large_queries | 136238106Sdes server_do_not_query_address | server_hide_identity | 137238106Sdes server_hide_version | server_identity | server_version | 138238106Sdes server_harden_glue | server_module_conf | server_trust_anchor_file | 139238106Sdes server_trust_anchor | server_val_override_date | server_bogus_ttl | 140238106Sdes server_val_clean_additional | server_val_permissive_mode | 141238106Sdes server_incoming_num_tcp | server_msg_buffer_size | 142238106Sdes server_key_cache_size | server_key_cache_slabs | 143238106Sdes server_trusted_keys_file | server_val_nsec3_keysize_iterations | 144238106Sdes server_use_syslog | server_outgoing_interface | server_root_hints | 145238106Sdes server_do_not_query_localhost | server_cache_max_ttl | 146238106Sdes server_harden_dnssec_stripped | server_access_control | 147238106Sdes server_local_zone | server_local_data | server_interface_automatic | 148238106Sdes server_statistics_interval | server_do_daemonize | 149238106Sdes server_use_caps_for_id | server_statistics_cumulative | 150238106Sdes server_outgoing_port_permit | server_outgoing_port_avoid | 151238106Sdes server_dlv_anchor_file | server_dlv_anchor | server_neg_cache_size | 152238106Sdes server_harden_referral_path | server_private_address | 153238106Sdes server_private_domain | server_extended_statistics | 154238106Sdes server_local_data_ptr | server_jostle_timeout | 155238106Sdes server_unwanted_reply_threshold | server_log_time_ascii | 156238106Sdes server_domain_insecure | server_val_sig_skew_min | 157238106Sdes server_val_sig_skew_max | server_cache_min_ttl | server_val_log_level | 158238106Sdes server_auto_trust_anchor_file | server_add_holddown | 159238106Sdes server_del_holddown | server_keep_missing | server_so_rcvbuf | 160238106Sdes server_edns_buffer_size | server_prefetch | server_prefetch_key | 161238106Sdes server_so_sndbuf | server_harden_below_nxdomain | server_ignore_cd_flag | 162238106Sdes server_log_queries | server_tcp_upstream | server_ssl_upstream | 163238106Sdes server_ssl_service_key | server_ssl_service_pem | server_ssl_port | 164269257Sdes server_minimal_responses | server_rrset_roundrobin | server_max_udp_size | 165269257Sdes server_so_reuseport | server_delay_close | server_unblock_lan_zones 166238106Sdes ; 167238106Sdesstubstart: VAR_STUB_ZONE 168238106Sdes { 169238106Sdes struct config_stub* s; 170238106Sdes OUTYY(("\nP(stub_zone:)\n")); 171238106Sdes s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 172238106Sdes if(s) { 173238106Sdes s->next = cfg_parser->cfg->stubs; 174238106Sdes cfg_parser->cfg->stubs = s; 175238106Sdes } else 176238106Sdes yyerror("out of memory"); 177238106Sdes } 178238106Sdes ; 179238106Sdescontents_stub: contents_stub content_stub 180238106Sdes | ; 181238106Sdescontent_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first 182238106Sdes ; 183238106Sdesforwardstart: VAR_FORWARD_ZONE 184238106Sdes { 185238106Sdes struct config_stub* s; 186238106Sdes OUTYY(("\nP(forward_zone:)\n")); 187238106Sdes s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); 188238106Sdes if(s) { 189238106Sdes s->next = cfg_parser->cfg->forwards; 190238106Sdes cfg_parser->cfg->forwards = s; 191238106Sdes } else 192238106Sdes yyerror("out of memory"); 193238106Sdes } 194238106Sdes ; 195238106Sdescontents_forward: contents_forward content_forward 196238106Sdes | ; 197238106Sdescontent_forward: forward_name | forward_host | forward_addr | forward_first 198238106Sdes ; 199238106Sdesserver_num_threads: VAR_NUM_THREADS STRING_ARG 200238106Sdes { 201238106Sdes OUTYY(("P(server_num_threads:%s)\n", $2)); 202238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 203238106Sdes yyerror("number expected"); 204238106Sdes else cfg_parser->cfg->num_threads = atoi($2); 205238106Sdes free($2); 206238106Sdes } 207238106Sdes ; 208238106Sdesserver_verbosity: VAR_VERBOSITY STRING_ARG 209238106Sdes { 210238106Sdes OUTYY(("P(server_verbosity:%s)\n", $2)); 211238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 212238106Sdes yyerror("number expected"); 213238106Sdes else cfg_parser->cfg->verbosity = atoi($2); 214238106Sdes free($2); 215238106Sdes } 216238106Sdes ; 217238106Sdesserver_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG 218238106Sdes { 219238106Sdes OUTYY(("P(server_statistics_interval:%s)\n", $2)); 220238106Sdes if(strcmp($2, "") == 0 || strcmp($2, "0") == 0) 221238106Sdes cfg_parser->cfg->stat_interval = 0; 222238106Sdes else if(atoi($2) == 0) 223238106Sdes yyerror("number expected"); 224238106Sdes else cfg_parser->cfg->stat_interval = atoi($2); 225238106Sdes free($2); 226238106Sdes } 227238106Sdes ; 228238106Sdesserver_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG 229238106Sdes { 230238106Sdes OUTYY(("P(server_statistics_cumulative:%s)\n", $2)); 231238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 232238106Sdes yyerror("expected yes or no."); 233238106Sdes else cfg_parser->cfg->stat_cumulative = (strcmp($2, "yes")==0); 234238106Sdes free($2); 235238106Sdes } 236238106Sdes ; 237238106Sdesserver_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG 238238106Sdes { 239238106Sdes OUTYY(("P(server_extended_statistics:%s)\n", $2)); 240238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 241238106Sdes yyerror("expected yes or no."); 242238106Sdes else cfg_parser->cfg->stat_extended = (strcmp($2, "yes")==0); 243238106Sdes free($2); 244238106Sdes } 245238106Sdes ; 246238106Sdesserver_port: VAR_PORT STRING_ARG 247238106Sdes { 248238106Sdes OUTYY(("P(server_port:%s)\n", $2)); 249238106Sdes if(atoi($2) == 0) 250238106Sdes yyerror("port number expected"); 251238106Sdes else cfg_parser->cfg->port = atoi($2); 252238106Sdes free($2); 253238106Sdes } 254238106Sdes ; 255238106Sdesserver_interface: VAR_INTERFACE STRING_ARG 256238106Sdes { 257238106Sdes OUTYY(("P(server_interface:%s)\n", $2)); 258238106Sdes if(cfg_parser->cfg->num_ifs == 0) 259238106Sdes cfg_parser->cfg->ifs = calloc(1, sizeof(char*)); 260238106Sdes else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs, 261238106Sdes (cfg_parser->cfg->num_ifs+1)*sizeof(char*)); 262238106Sdes if(!cfg_parser->cfg->ifs) 263238106Sdes yyerror("out of memory"); 264238106Sdes else 265238106Sdes cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = $2; 266238106Sdes } 267238106Sdes ; 268238106Sdesserver_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG 269238106Sdes { 270238106Sdes OUTYY(("P(server_outgoing_interface:%s)\n", $2)); 271238106Sdes if(cfg_parser->cfg->num_out_ifs == 0) 272238106Sdes cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*)); 273238106Sdes else cfg_parser->cfg->out_ifs = realloc( 274238106Sdes cfg_parser->cfg->out_ifs, 275238106Sdes (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*)); 276238106Sdes if(!cfg_parser->cfg->out_ifs) 277238106Sdes yyerror("out of memory"); 278238106Sdes else 279238106Sdes cfg_parser->cfg->out_ifs[ 280238106Sdes cfg_parser->cfg->num_out_ifs++] = $2; 281238106Sdes } 282238106Sdes ; 283238106Sdesserver_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG 284238106Sdes { 285238106Sdes OUTYY(("P(server_outgoing_range:%s)\n", $2)); 286238106Sdes if(atoi($2) == 0) 287238106Sdes yyerror("number expected"); 288238106Sdes else cfg_parser->cfg->outgoing_num_ports = atoi($2); 289238106Sdes free($2); 290238106Sdes } 291238106Sdes ; 292238106Sdesserver_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG 293238106Sdes { 294238106Sdes OUTYY(("P(server_outgoing_port_permit:%s)\n", $2)); 295238106Sdes if(!cfg_mark_ports($2, 1, 296238106Sdes cfg_parser->cfg->outgoing_avail_ports, 65536)) 297238106Sdes yyerror("port number or range (\"low-high\") expected"); 298238106Sdes free($2); 299238106Sdes } 300238106Sdes ; 301238106Sdesserver_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG 302238106Sdes { 303238106Sdes OUTYY(("P(server_outgoing_port_avoid:%s)\n", $2)); 304238106Sdes if(!cfg_mark_ports($2, 0, 305238106Sdes cfg_parser->cfg->outgoing_avail_ports, 65536)) 306238106Sdes yyerror("port number or range (\"low-high\") expected"); 307238106Sdes free($2); 308238106Sdes } 309238106Sdes ; 310238106Sdesserver_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG 311238106Sdes { 312238106Sdes OUTYY(("P(server_outgoing_num_tcp:%s)\n", $2)); 313238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 314238106Sdes yyerror("number expected"); 315238106Sdes else cfg_parser->cfg->outgoing_num_tcp = atoi($2); 316238106Sdes free($2); 317238106Sdes } 318238106Sdes ; 319238106Sdesserver_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG 320238106Sdes { 321238106Sdes OUTYY(("P(server_incoming_num_tcp:%s)\n", $2)); 322238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 323238106Sdes yyerror("number expected"); 324238106Sdes else cfg_parser->cfg->incoming_num_tcp = atoi($2); 325238106Sdes free($2); 326238106Sdes } 327238106Sdes ; 328238106Sdesserver_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG 329238106Sdes { 330238106Sdes OUTYY(("P(server_interface_automatic:%s)\n", $2)); 331238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 332238106Sdes yyerror("expected yes or no."); 333238106Sdes else cfg_parser->cfg->if_automatic = (strcmp($2, "yes")==0); 334238106Sdes free($2); 335238106Sdes } 336238106Sdes ; 337238106Sdesserver_do_ip4: VAR_DO_IP4 STRING_ARG 338238106Sdes { 339238106Sdes OUTYY(("P(server_do_ip4:%s)\n", $2)); 340238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 341238106Sdes yyerror("expected yes or no."); 342238106Sdes else cfg_parser->cfg->do_ip4 = (strcmp($2, "yes")==0); 343238106Sdes free($2); 344238106Sdes } 345238106Sdes ; 346238106Sdesserver_do_ip6: VAR_DO_IP6 STRING_ARG 347238106Sdes { 348238106Sdes OUTYY(("P(server_do_ip6:%s)\n", $2)); 349238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 350238106Sdes yyerror("expected yes or no."); 351238106Sdes else cfg_parser->cfg->do_ip6 = (strcmp($2, "yes")==0); 352238106Sdes free($2); 353238106Sdes } 354238106Sdes ; 355238106Sdesserver_do_udp: VAR_DO_UDP STRING_ARG 356238106Sdes { 357238106Sdes OUTYY(("P(server_do_udp:%s)\n", $2)); 358238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 359238106Sdes yyerror("expected yes or no."); 360238106Sdes else cfg_parser->cfg->do_udp = (strcmp($2, "yes")==0); 361238106Sdes free($2); 362238106Sdes } 363238106Sdes ; 364238106Sdesserver_do_tcp: VAR_DO_TCP STRING_ARG 365238106Sdes { 366238106Sdes OUTYY(("P(server_do_tcp:%s)\n", $2)); 367238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 368238106Sdes yyerror("expected yes or no."); 369238106Sdes else cfg_parser->cfg->do_tcp = (strcmp($2, "yes")==0); 370238106Sdes free($2); 371238106Sdes } 372238106Sdes ; 373238106Sdesserver_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG 374238106Sdes { 375238106Sdes OUTYY(("P(server_tcp_upstream:%s)\n", $2)); 376238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 377238106Sdes yyerror("expected yes or no."); 378238106Sdes else cfg_parser->cfg->tcp_upstream = (strcmp($2, "yes")==0); 379238106Sdes free($2); 380238106Sdes } 381238106Sdes ; 382238106Sdesserver_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG 383238106Sdes { 384238106Sdes OUTYY(("P(server_ssl_upstream:%s)\n", $2)); 385238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 386238106Sdes yyerror("expected yes or no."); 387238106Sdes else cfg_parser->cfg->ssl_upstream = (strcmp($2, "yes")==0); 388238106Sdes free($2); 389238106Sdes } 390238106Sdes ; 391238106Sdesserver_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG 392238106Sdes { 393238106Sdes OUTYY(("P(server_ssl_service_key:%s)\n", $2)); 394238106Sdes free(cfg_parser->cfg->ssl_service_key); 395238106Sdes cfg_parser->cfg->ssl_service_key = $2; 396238106Sdes } 397238106Sdes ; 398238106Sdesserver_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG 399238106Sdes { 400238106Sdes OUTYY(("P(server_ssl_service_pem:%s)\n", $2)); 401238106Sdes free(cfg_parser->cfg->ssl_service_pem); 402238106Sdes cfg_parser->cfg->ssl_service_pem = $2; 403238106Sdes } 404238106Sdes ; 405238106Sdesserver_ssl_port: VAR_SSL_PORT STRING_ARG 406238106Sdes { 407238106Sdes OUTYY(("P(server_ssl_port:%s)\n", $2)); 408238106Sdes if(atoi($2) == 0) 409238106Sdes yyerror("port number expected"); 410238106Sdes else cfg_parser->cfg->ssl_port = atoi($2); 411238106Sdes free($2); 412238106Sdes } 413238106Sdes ; 414238106Sdesserver_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG 415238106Sdes { 416238106Sdes OUTYY(("P(server_do_daemonize:%s)\n", $2)); 417238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 418238106Sdes yyerror("expected yes or no."); 419238106Sdes else cfg_parser->cfg->do_daemonize = (strcmp($2, "yes")==0); 420238106Sdes free($2); 421238106Sdes } 422238106Sdes ; 423238106Sdesserver_use_syslog: VAR_USE_SYSLOG STRING_ARG 424238106Sdes { 425238106Sdes OUTYY(("P(server_use_syslog:%s)\n", $2)); 426238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 427238106Sdes yyerror("expected yes or no."); 428238106Sdes else cfg_parser->cfg->use_syslog = (strcmp($2, "yes")==0); 429238106Sdes#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS) 430238106Sdes if(strcmp($2, "yes") == 0) 431238106Sdes yyerror("no syslog services are available. " 432238106Sdes "(reconfigure and compile to add)"); 433238106Sdes#endif 434238106Sdes free($2); 435238106Sdes } 436238106Sdes ; 437238106Sdesserver_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG 438238106Sdes { 439238106Sdes OUTYY(("P(server_log_time_ascii:%s)\n", $2)); 440238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 441238106Sdes yyerror("expected yes or no."); 442238106Sdes else cfg_parser->cfg->log_time_ascii = (strcmp($2, "yes")==0); 443238106Sdes free($2); 444238106Sdes } 445238106Sdes ; 446238106Sdesserver_log_queries: VAR_LOG_QUERIES STRING_ARG 447238106Sdes { 448238106Sdes OUTYY(("P(server_log_queries:%s)\n", $2)); 449238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 450238106Sdes yyerror("expected yes or no."); 451238106Sdes else cfg_parser->cfg->log_queries = (strcmp($2, "yes")==0); 452238106Sdes free($2); 453238106Sdes } 454238106Sdes ; 455238106Sdesserver_chroot: VAR_CHROOT STRING_ARG 456238106Sdes { 457238106Sdes OUTYY(("P(server_chroot:%s)\n", $2)); 458238106Sdes free(cfg_parser->cfg->chrootdir); 459238106Sdes cfg_parser->cfg->chrootdir = $2; 460238106Sdes } 461238106Sdes ; 462238106Sdesserver_username: VAR_USERNAME STRING_ARG 463238106Sdes { 464238106Sdes OUTYY(("P(server_username:%s)\n", $2)); 465238106Sdes free(cfg_parser->cfg->username); 466238106Sdes cfg_parser->cfg->username = $2; 467238106Sdes } 468238106Sdes ; 469238106Sdesserver_directory: VAR_DIRECTORY STRING_ARG 470238106Sdes { 471238106Sdes OUTYY(("P(server_directory:%s)\n", $2)); 472238106Sdes free(cfg_parser->cfg->directory); 473238106Sdes cfg_parser->cfg->directory = $2; 474238106Sdes } 475238106Sdes ; 476238106Sdesserver_logfile: VAR_LOGFILE STRING_ARG 477238106Sdes { 478238106Sdes OUTYY(("P(server_logfile:%s)\n", $2)); 479238106Sdes free(cfg_parser->cfg->logfile); 480238106Sdes cfg_parser->cfg->logfile = $2; 481238106Sdes cfg_parser->cfg->use_syslog = 0; 482238106Sdes } 483238106Sdes ; 484238106Sdesserver_pidfile: VAR_PIDFILE STRING_ARG 485238106Sdes { 486238106Sdes OUTYY(("P(server_pidfile:%s)\n", $2)); 487238106Sdes free(cfg_parser->cfg->pidfile); 488238106Sdes cfg_parser->cfg->pidfile = $2; 489238106Sdes } 490238106Sdes ; 491238106Sdesserver_root_hints: VAR_ROOT_HINTS STRING_ARG 492238106Sdes { 493238106Sdes OUTYY(("P(server_root_hints:%s)\n", $2)); 494238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, $2)) 495238106Sdes yyerror("out of memory"); 496238106Sdes } 497238106Sdes ; 498238106Sdesserver_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG 499238106Sdes { 500238106Sdes OUTYY(("P(server_dlv_anchor_file:%s)\n", $2)); 501238106Sdes free(cfg_parser->cfg->dlv_anchor_file); 502238106Sdes cfg_parser->cfg->dlv_anchor_file = $2; 503238106Sdes } 504238106Sdes ; 505238106Sdesserver_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG 506238106Sdes { 507238106Sdes OUTYY(("P(server_dlv_anchor:%s)\n", $2)); 508238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, $2)) 509238106Sdes yyerror("out of memory"); 510238106Sdes } 511238106Sdes ; 512238106Sdesserver_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG 513238106Sdes { 514238106Sdes OUTYY(("P(server_auto_trust_anchor_file:%s)\n", $2)); 515238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 516238106Sdes auto_trust_anchor_file_list, $2)) 517238106Sdes yyerror("out of memory"); 518238106Sdes } 519238106Sdes ; 520238106Sdesserver_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG 521238106Sdes { 522238106Sdes OUTYY(("P(server_trust_anchor_file:%s)\n", $2)); 523238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 524238106Sdes trust_anchor_file_list, $2)) 525238106Sdes yyerror("out of memory"); 526238106Sdes } 527238106Sdes ; 528238106Sdesserver_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG 529238106Sdes { 530238106Sdes OUTYY(("P(server_trusted_keys_file:%s)\n", $2)); 531238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 532238106Sdes trusted_keys_file_list, $2)) 533238106Sdes yyerror("out of memory"); 534238106Sdes } 535238106Sdes ; 536238106Sdesserver_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG 537238106Sdes { 538238106Sdes OUTYY(("P(server_trust_anchor:%s)\n", $2)); 539238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, $2)) 540238106Sdes yyerror("out of memory"); 541238106Sdes } 542238106Sdes ; 543238106Sdesserver_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG 544238106Sdes { 545238106Sdes OUTYY(("P(server_domain_insecure:%s)\n", $2)); 546238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, $2)) 547238106Sdes yyerror("out of memory"); 548238106Sdes } 549238106Sdes ; 550238106Sdesserver_hide_identity: VAR_HIDE_IDENTITY STRING_ARG 551238106Sdes { 552238106Sdes OUTYY(("P(server_hide_identity:%s)\n", $2)); 553238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 554238106Sdes yyerror("expected yes or no."); 555238106Sdes else cfg_parser->cfg->hide_identity = (strcmp($2, "yes")==0); 556238106Sdes free($2); 557238106Sdes } 558238106Sdes ; 559238106Sdesserver_hide_version: VAR_HIDE_VERSION STRING_ARG 560238106Sdes { 561238106Sdes OUTYY(("P(server_hide_version:%s)\n", $2)); 562238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 563238106Sdes yyerror("expected yes or no."); 564238106Sdes else cfg_parser->cfg->hide_version = (strcmp($2, "yes")==0); 565238106Sdes free($2); 566238106Sdes } 567238106Sdes ; 568238106Sdesserver_identity: VAR_IDENTITY STRING_ARG 569238106Sdes { 570238106Sdes OUTYY(("P(server_identity:%s)\n", $2)); 571238106Sdes free(cfg_parser->cfg->identity); 572238106Sdes cfg_parser->cfg->identity = $2; 573238106Sdes } 574238106Sdes ; 575238106Sdesserver_version: VAR_VERSION STRING_ARG 576238106Sdes { 577238106Sdes OUTYY(("P(server_version:%s)\n", $2)); 578238106Sdes free(cfg_parser->cfg->version); 579238106Sdes cfg_parser->cfg->version = $2; 580238106Sdes } 581238106Sdes ; 582238106Sdesserver_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG 583238106Sdes { 584238106Sdes OUTYY(("P(server_so_rcvbuf:%s)\n", $2)); 585238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_rcvbuf)) 586238106Sdes yyerror("buffer size expected"); 587238106Sdes free($2); 588238106Sdes } 589238106Sdes ; 590238106Sdesserver_so_sndbuf: VAR_SO_SNDBUF STRING_ARG 591238106Sdes { 592238106Sdes OUTYY(("P(server_so_sndbuf:%s)\n", $2)); 593238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->so_sndbuf)) 594238106Sdes yyerror("buffer size expected"); 595238106Sdes free($2); 596238106Sdes } 597238106Sdes ; 598269257Sdesserver_so_reuseport: VAR_SO_REUSEPORT STRING_ARG 599269257Sdes { 600269257Sdes OUTYY(("P(server_so_reuseport:%s)\n", $2)); 601269257Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 602269257Sdes yyerror("expected yes or no."); 603269257Sdes else cfg_parser->cfg->so_reuseport = 604269257Sdes (strcmp($2, "yes")==0); 605269257Sdes free($2); 606269257Sdes } 607269257Sdes ; 608238106Sdesserver_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG 609238106Sdes { 610238106Sdes OUTYY(("P(server_edns_buffer_size:%s)\n", $2)); 611238106Sdes if(atoi($2) == 0) 612238106Sdes yyerror("number expected"); 613238106Sdes else if (atoi($2) < 12) 614238106Sdes yyerror("edns buffer size too small"); 615238106Sdes else if (atoi($2) > 65535) 616238106Sdes cfg_parser->cfg->edns_buffer_size = 65535; 617238106Sdes else cfg_parser->cfg->edns_buffer_size = atoi($2); 618238106Sdes free($2); 619238106Sdes } 620238106Sdes ; 621238106Sdesserver_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG 622238106Sdes { 623238106Sdes OUTYY(("P(server_msg_buffer_size:%s)\n", $2)); 624238106Sdes if(atoi($2) == 0) 625238106Sdes yyerror("number expected"); 626238106Sdes else if (atoi($2) < 4096) 627238106Sdes yyerror("message buffer size too small (use 4096)"); 628238106Sdes else cfg_parser->cfg->msg_buffer_size = atoi($2); 629238106Sdes free($2); 630238106Sdes } 631238106Sdes ; 632238106Sdesserver_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG 633238106Sdes { 634238106Sdes OUTYY(("P(server_msg_cache_size:%s)\n", $2)); 635238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size)) 636238106Sdes yyerror("memory size expected"); 637238106Sdes free($2); 638238106Sdes } 639238106Sdes ; 640238106Sdesserver_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG 641238106Sdes { 642238106Sdes OUTYY(("P(server_msg_cache_slabs:%s)\n", $2)); 643238106Sdes if(atoi($2) == 0) 644238106Sdes yyerror("number expected"); 645238106Sdes else { 646238106Sdes cfg_parser->cfg->msg_cache_slabs = atoi($2); 647238106Sdes if(!is_pow2(cfg_parser->cfg->msg_cache_slabs)) 648238106Sdes yyerror("must be a power of 2"); 649238106Sdes } 650238106Sdes free($2); 651238106Sdes } 652238106Sdes ; 653238106Sdesserver_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG 654238106Sdes { 655238106Sdes OUTYY(("P(server_num_queries_per_thread:%s)\n", $2)); 656238106Sdes if(atoi($2) == 0) 657238106Sdes yyerror("number expected"); 658238106Sdes else cfg_parser->cfg->num_queries_per_thread = atoi($2); 659238106Sdes free($2); 660238106Sdes } 661238106Sdes ; 662238106Sdesserver_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG 663238106Sdes { 664238106Sdes OUTYY(("P(server_jostle_timeout:%s)\n", $2)); 665238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 666238106Sdes yyerror("number expected"); 667238106Sdes else cfg_parser->cfg->jostle_time = atoi($2); 668238106Sdes free($2); 669238106Sdes } 670238106Sdes ; 671269257Sdesserver_delay_close: VAR_DELAY_CLOSE STRING_ARG 672269257Sdes { 673269257Sdes OUTYY(("P(server_delay_close:%s)\n", $2)); 674269257Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 675269257Sdes yyerror("number expected"); 676269257Sdes else cfg_parser->cfg->delay_close = atoi($2); 677269257Sdes free($2); 678269257Sdes } 679269257Sdes ; 680269257Sdesserver_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG 681269257Sdes { 682269257Sdes OUTYY(("P(server_unblock_lan_zones:%s)\n", $2)); 683269257Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 684269257Sdes yyerror("expected yes or no."); 685269257Sdes else cfg_parser->cfg->unblock_lan_zones = 686269257Sdes (strcmp($2, "yes")==0); 687269257Sdes free($2); 688269257Sdes } 689269257Sdes ; 690238106Sdesserver_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG 691238106Sdes { 692238106Sdes OUTYY(("P(server_rrset_cache_size:%s)\n", $2)); 693238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size)) 694238106Sdes yyerror("memory size expected"); 695238106Sdes free($2); 696238106Sdes } 697238106Sdes ; 698238106Sdesserver_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG 699238106Sdes { 700238106Sdes OUTYY(("P(server_rrset_cache_slabs:%s)\n", $2)); 701238106Sdes if(atoi($2) == 0) 702238106Sdes yyerror("number expected"); 703238106Sdes else { 704238106Sdes cfg_parser->cfg->rrset_cache_slabs = atoi($2); 705238106Sdes if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs)) 706238106Sdes yyerror("must be a power of 2"); 707238106Sdes } 708238106Sdes free($2); 709238106Sdes } 710238106Sdes ; 711238106Sdesserver_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG 712238106Sdes { 713238106Sdes OUTYY(("P(server_infra_host_ttl:%s)\n", $2)); 714238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 715238106Sdes yyerror("number expected"); 716238106Sdes else cfg_parser->cfg->host_ttl = atoi($2); 717238106Sdes free($2); 718238106Sdes } 719238106Sdes ; 720238106Sdesserver_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG 721238106Sdes { 722238106Sdes OUTYY(("P(server_infra_lame_ttl:%s)\n", $2)); 723238106Sdes verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option " 724238106Sdes "removed, use infra-host-ttl)", $2); 725238106Sdes free($2); 726238106Sdes } 727238106Sdes ; 728238106Sdesserver_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG 729238106Sdes { 730238106Sdes OUTYY(("P(server_infra_cache_numhosts:%s)\n", $2)); 731238106Sdes if(atoi($2) == 0) 732238106Sdes yyerror("number expected"); 733238106Sdes else cfg_parser->cfg->infra_cache_numhosts = atoi($2); 734238106Sdes free($2); 735238106Sdes } 736238106Sdes ; 737238106Sdesserver_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG 738238106Sdes { 739238106Sdes OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2)); 740238106Sdes verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s " 741238106Sdes "(option removed, use infra-cache-numhosts)", $2); 742238106Sdes free($2); 743238106Sdes } 744238106Sdes ; 745238106Sdesserver_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG 746238106Sdes { 747238106Sdes OUTYY(("P(server_infra_cache_slabs:%s)\n", $2)); 748238106Sdes if(atoi($2) == 0) 749238106Sdes yyerror("number expected"); 750238106Sdes else { 751238106Sdes cfg_parser->cfg->infra_cache_slabs = atoi($2); 752238106Sdes if(!is_pow2(cfg_parser->cfg->infra_cache_slabs)) 753238106Sdes yyerror("must be a power of 2"); 754238106Sdes } 755238106Sdes free($2); 756238106Sdes } 757238106Sdes ; 758238106Sdesserver_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG 759238106Sdes { 760238106Sdes OUTYY(("P(server_target_fetch_policy:%s)\n", $2)); 761238106Sdes free(cfg_parser->cfg->target_fetch_policy); 762238106Sdes cfg_parser->cfg->target_fetch_policy = $2; 763238106Sdes } 764238106Sdes ; 765238106Sdesserver_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG 766238106Sdes { 767238106Sdes OUTYY(("P(server_harden_short_bufsize:%s)\n", $2)); 768238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 769238106Sdes yyerror("expected yes or no."); 770238106Sdes else cfg_parser->cfg->harden_short_bufsize = 771238106Sdes (strcmp($2, "yes")==0); 772238106Sdes free($2); 773238106Sdes } 774238106Sdes ; 775238106Sdesserver_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG 776238106Sdes { 777238106Sdes OUTYY(("P(server_harden_large_queries:%s)\n", $2)); 778238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 779238106Sdes yyerror("expected yes or no."); 780238106Sdes else cfg_parser->cfg->harden_large_queries = 781238106Sdes (strcmp($2, "yes")==0); 782238106Sdes free($2); 783238106Sdes } 784238106Sdes ; 785238106Sdesserver_harden_glue: VAR_HARDEN_GLUE STRING_ARG 786238106Sdes { 787238106Sdes OUTYY(("P(server_harden_glue:%s)\n", $2)); 788238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 789238106Sdes yyerror("expected yes or no."); 790238106Sdes else cfg_parser->cfg->harden_glue = 791238106Sdes (strcmp($2, "yes")==0); 792238106Sdes free($2); 793238106Sdes } 794238106Sdes ; 795238106Sdesserver_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG 796238106Sdes { 797238106Sdes OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2)); 798238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 799238106Sdes yyerror("expected yes or no."); 800238106Sdes else cfg_parser->cfg->harden_dnssec_stripped = 801238106Sdes (strcmp($2, "yes")==0); 802238106Sdes free($2); 803238106Sdes } 804238106Sdes ; 805238106Sdesserver_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG 806238106Sdes { 807238106Sdes OUTYY(("P(server_harden_below_nxdomain:%s)\n", $2)); 808238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 809238106Sdes yyerror("expected yes or no."); 810238106Sdes else cfg_parser->cfg->harden_below_nxdomain = 811238106Sdes (strcmp($2, "yes")==0); 812238106Sdes free($2); 813238106Sdes } 814238106Sdes ; 815238106Sdesserver_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG 816238106Sdes { 817238106Sdes OUTYY(("P(server_harden_referral_path:%s)\n", $2)); 818238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 819238106Sdes yyerror("expected yes or no."); 820238106Sdes else cfg_parser->cfg->harden_referral_path = 821238106Sdes (strcmp($2, "yes")==0); 822238106Sdes free($2); 823238106Sdes } 824238106Sdes ; 825238106Sdesserver_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG 826238106Sdes { 827238106Sdes OUTYY(("P(server_use_caps_for_id:%s)\n", $2)); 828238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 829238106Sdes yyerror("expected yes or no."); 830238106Sdes else cfg_parser->cfg->use_caps_bits_for_id = 831238106Sdes (strcmp($2, "yes")==0); 832238106Sdes free($2); 833238106Sdes } 834238106Sdes ; 835238106Sdesserver_private_address: VAR_PRIVATE_ADDRESS STRING_ARG 836238106Sdes { 837238106Sdes OUTYY(("P(server_private_address:%s)\n", $2)); 838238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, $2)) 839238106Sdes yyerror("out of memory"); 840238106Sdes } 841238106Sdes ; 842238106Sdesserver_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG 843238106Sdes { 844238106Sdes OUTYY(("P(server_private_domain:%s)\n", $2)); 845238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, $2)) 846238106Sdes yyerror("out of memory"); 847238106Sdes } 848238106Sdes ; 849238106Sdesserver_prefetch: VAR_PREFETCH STRING_ARG 850238106Sdes { 851238106Sdes OUTYY(("P(server_prefetch:%s)\n", $2)); 852238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 853238106Sdes yyerror("expected yes or no."); 854238106Sdes else cfg_parser->cfg->prefetch = (strcmp($2, "yes")==0); 855238106Sdes free($2); 856238106Sdes } 857238106Sdes ; 858238106Sdesserver_prefetch_key: VAR_PREFETCH_KEY STRING_ARG 859238106Sdes { 860238106Sdes OUTYY(("P(server_prefetch_key:%s)\n", $2)); 861238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 862238106Sdes yyerror("expected yes or no."); 863238106Sdes else cfg_parser->cfg->prefetch_key = (strcmp($2, "yes")==0); 864238106Sdes free($2); 865238106Sdes } 866238106Sdes ; 867238106Sdesserver_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG 868238106Sdes { 869238106Sdes OUTYY(("P(server_unwanted_reply_threshold:%s)\n", $2)); 870238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 871238106Sdes yyerror("number expected"); 872238106Sdes else cfg_parser->cfg->unwanted_threshold = atoi($2); 873238106Sdes free($2); 874238106Sdes } 875238106Sdes ; 876238106Sdesserver_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG 877238106Sdes { 878238106Sdes OUTYY(("P(server_do_not_query_address:%s)\n", $2)); 879238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, $2)) 880238106Sdes yyerror("out of memory"); 881238106Sdes } 882238106Sdes ; 883238106Sdesserver_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG 884238106Sdes { 885238106Sdes OUTYY(("P(server_do_not_query_localhost:%s)\n", $2)); 886238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 887238106Sdes yyerror("expected yes or no."); 888238106Sdes else cfg_parser->cfg->donotquery_localhost = 889238106Sdes (strcmp($2, "yes")==0); 890238106Sdes free($2); 891238106Sdes } 892238106Sdes ; 893238106Sdesserver_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG 894238106Sdes { 895238106Sdes OUTYY(("P(server_access_control:%s %s)\n", $2, $3)); 896238106Sdes if(strcmp($3, "deny")!=0 && strcmp($3, "refuse")!=0 && 897269257Sdes strcmp($3, "deny_non_local")!=0 && 898269257Sdes strcmp($3, "refuse_non_local")!=0 && 899238106Sdes strcmp($3, "allow")!=0 && 900238106Sdes strcmp($3, "allow_snoop")!=0) { 901269257Sdes yyerror("expected deny, refuse, deny_non_local, " 902269257Sdes "refuse_non_local, allow or allow_snoop " 903238106Sdes "in access control action"); 904238106Sdes } else { 905238106Sdes if(!cfg_str2list_insert(&cfg_parser->cfg->acls, $2, $3)) 906238106Sdes fatal_exit("out of memory adding acl"); 907238106Sdes } 908238106Sdes } 909238106Sdes ; 910238106Sdesserver_module_conf: VAR_MODULE_CONF STRING_ARG 911238106Sdes { 912238106Sdes OUTYY(("P(server_module_conf:%s)\n", $2)); 913238106Sdes free(cfg_parser->cfg->module_conf); 914238106Sdes cfg_parser->cfg->module_conf = $2; 915238106Sdes } 916238106Sdes ; 917238106Sdesserver_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG 918238106Sdes { 919238106Sdes OUTYY(("P(server_val_override_date:%s)\n", $2)); 920238106Sdes if(strlen($2) == 0 || strcmp($2, "0") == 0) { 921238106Sdes cfg_parser->cfg->val_date_override = 0; 922238106Sdes } else if(strlen($2) == 14) { 923238106Sdes cfg_parser->cfg->val_date_override = 924238106Sdes cfg_convert_timeval($2); 925238106Sdes if(!cfg_parser->cfg->val_date_override) 926238106Sdes yyerror("bad date/time specification"); 927238106Sdes } else { 928238106Sdes if(atoi($2) == 0) 929238106Sdes yyerror("number expected"); 930238106Sdes cfg_parser->cfg->val_date_override = atoi($2); 931238106Sdes } 932238106Sdes free($2); 933238106Sdes } 934238106Sdes ; 935238106Sdesserver_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG 936238106Sdes { 937238106Sdes OUTYY(("P(server_val_sig_skew_min:%s)\n", $2)); 938238106Sdes if(strlen($2) == 0 || strcmp($2, "0") == 0) { 939238106Sdes cfg_parser->cfg->val_sig_skew_min = 0; 940238106Sdes } else { 941238106Sdes cfg_parser->cfg->val_sig_skew_min = atoi($2); 942238106Sdes if(!cfg_parser->cfg->val_sig_skew_min) 943238106Sdes yyerror("number expected"); 944238106Sdes } 945238106Sdes free($2); 946238106Sdes } 947238106Sdes ; 948238106Sdesserver_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG 949238106Sdes { 950238106Sdes OUTYY(("P(server_val_sig_skew_max:%s)\n", $2)); 951238106Sdes if(strlen($2) == 0 || strcmp($2, "0") == 0) { 952238106Sdes cfg_parser->cfg->val_sig_skew_max = 0; 953238106Sdes } else { 954238106Sdes cfg_parser->cfg->val_sig_skew_max = atoi($2); 955238106Sdes if(!cfg_parser->cfg->val_sig_skew_max) 956238106Sdes yyerror("number expected"); 957238106Sdes } 958238106Sdes free($2); 959238106Sdes } 960238106Sdes ; 961238106Sdesserver_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG 962238106Sdes { 963238106Sdes OUTYY(("P(server_cache_max_ttl:%s)\n", $2)); 964238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 965238106Sdes yyerror("number expected"); 966238106Sdes else cfg_parser->cfg->max_ttl = atoi($2); 967238106Sdes free($2); 968238106Sdes } 969238106Sdes ; 970238106Sdesserver_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG 971238106Sdes { 972238106Sdes OUTYY(("P(server_cache_min_ttl:%s)\n", $2)); 973238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 974238106Sdes yyerror("number expected"); 975238106Sdes else cfg_parser->cfg->min_ttl = atoi($2); 976238106Sdes free($2); 977238106Sdes } 978238106Sdes ; 979238106Sdesserver_bogus_ttl: VAR_BOGUS_TTL STRING_ARG 980238106Sdes { 981238106Sdes OUTYY(("P(server_bogus_ttl:%s)\n", $2)); 982238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 983238106Sdes yyerror("number expected"); 984238106Sdes else cfg_parser->cfg->bogus_ttl = atoi($2); 985238106Sdes free($2); 986238106Sdes } 987238106Sdes ; 988238106Sdesserver_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG 989238106Sdes { 990238106Sdes OUTYY(("P(server_val_clean_additional:%s)\n", $2)); 991238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 992238106Sdes yyerror("expected yes or no."); 993238106Sdes else cfg_parser->cfg->val_clean_additional = 994238106Sdes (strcmp($2, "yes")==0); 995238106Sdes free($2); 996238106Sdes } 997238106Sdes ; 998238106Sdesserver_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG 999238106Sdes { 1000238106Sdes OUTYY(("P(server_val_permissive_mode:%s)\n", $2)); 1001238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1002238106Sdes yyerror("expected yes or no."); 1003238106Sdes else cfg_parser->cfg->val_permissive_mode = 1004238106Sdes (strcmp($2, "yes")==0); 1005238106Sdes free($2); 1006238106Sdes } 1007238106Sdes ; 1008238106Sdesserver_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG 1009238106Sdes { 1010238106Sdes OUTYY(("P(server_ignore_cd_flag:%s)\n", $2)); 1011238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1012238106Sdes yyerror("expected yes or no."); 1013238106Sdes else cfg_parser->cfg->ignore_cd = (strcmp($2, "yes")==0); 1014238106Sdes free($2); 1015238106Sdes } 1016238106Sdes ; 1017238106Sdesserver_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG 1018238106Sdes { 1019238106Sdes OUTYY(("P(server_val_log_level:%s)\n", $2)); 1020238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1021238106Sdes yyerror("number expected"); 1022238106Sdes else cfg_parser->cfg->val_log_level = atoi($2); 1023238106Sdes free($2); 1024238106Sdes } 1025238106Sdes ; 1026238106Sdesserver_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG 1027238106Sdes { 1028238106Sdes OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", $2)); 1029238106Sdes free(cfg_parser->cfg->val_nsec3_key_iterations); 1030238106Sdes cfg_parser->cfg->val_nsec3_key_iterations = $2; 1031238106Sdes } 1032238106Sdes ; 1033238106Sdesserver_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG 1034238106Sdes { 1035238106Sdes OUTYY(("P(server_add_holddown:%s)\n", $2)); 1036238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1037238106Sdes yyerror("number expected"); 1038238106Sdes else cfg_parser->cfg->add_holddown = atoi($2); 1039238106Sdes free($2); 1040238106Sdes } 1041238106Sdes ; 1042238106Sdesserver_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG 1043238106Sdes { 1044238106Sdes OUTYY(("P(server_del_holddown:%s)\n", $2)); 1045238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1046238106Sdes yyerror("number expected"); 1047238106Sdes else cfg_parser->cfg->del_holddown = atoi($2); 1048238106Sdes free($2); 1049238106Sdes } 1050238106Sdes ; 1051238106Sdesserver_keep_missing: VAR_KEEP_MISSING STRING_ARG 1052238106Sdes { 1053238106Sdes OUTYY(("P(server_keep_missing:%s)\n", $2)); 1054238106Sdes if(atoi($2) == 0 && strcmp($2, "0") != 0) 1055238106Sdes yyerror("number expected"); 1056238106Sdes else cfg_parser->cfg->keep_missing = atoi($2); 1057238106Sdes free($2); 1058238106Sdes } 1059238106Sdes ; 1060238106Sdesserver_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG 1061238106Sdes { 1062238106Sdes OUTYY(("P(server_key_cache_size:%s)\n", $2)); 1063238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size)) 1064238106Sdes yyerror("memory size expected"); 1065238106Sdes free($2); 1066238106Sdes } 1067238106Sdes ; 1068238106Sdesserver_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG 1069238106Sdes { 1070238106Sdes OUTYY(("P(server_key_cache_slabs:%s)\n", $2)); 1071238106Sdes if(atoi($2) == 0) 1072238106Sdes yyerror("number expected"); 1073238106Sdes else { 1074238106Sdes cfg_parser->cfg->key_cache_slabs = atoi($2); 1075238106Sdes if(!is_pow2(cfg_parser->cfg->key_cache_slabs)) 1076238106Sdes yyerror("must be a power of 2"); 1077238106Sdes } 1078238106Sdes free($2); 1079238106Sdes } 1080238106Sdes ; 1081238106Sdesserver_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG 1082238106Sdes { 1083238106Sdes OUTYY(("P(server_neg_cache_size:%s)\n", $2)); 1084238106Sdes if(!cfg_parse_memsize($2, &cfg_parser->cfg->neg_cache_size)) 1085238106Sdes yyerror("memory size expected"); 1086238106Sdes free($2); 1087238106Sdes } 1088238106Sdes ; 1089238106Sdesserver_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG 1090238106Sdes { 1091238106Sdes OUTYY(("P(server_local_zone:%s %s)\n", $2, $3)); 1092238106Sdes if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 && 1093238106Sdes strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 && 1094238106Sdes strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0 1095238106Sdes && strcmp($3, "typetransparent")!=0) 1096238106Sdes yyerror("local-zone type: expected static, deny, " 1097238106Sdes "refuse, redirect, transparent, " 1098238106Sdes "typetransparent or nodefault"); 1099238106Sdes else if(strcmp($3, "nodefault")==0) { 1100238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 1101238106Sdes local_zones_nodefault, $2)) 1102238106Sdes fatal_exit("out of memory adding local-zone"); 1103238106Sdes free($3); 1104238106Sdes } else { 1105238106Sdes if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 1106238106Sdes $2, $3)) 1107238106Sdes fatal_exit("out of memory adding local-zone"); 1108238106Sdes } 1109238106Sdes } 1110238106Sdes ; 1111238106Sdesserver_local_data: VAR_LOCAL_DATA STRING_ARG 1112238106Sdes { 1113238106Sdes OUTYY(("P(server_local_data:%s)\n", $2)); 1114238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, $2)) 1115238106Sdes fatal_exit("out of memory adding local-data"); 1116238106Sdes } 1117238106Sdes ; 1118238106Sdesserver_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG 1119238106Sdes { 1120238106Sdes char* ptr; 1121238106Sdes OUTYY(("P(server_local_data_ptr:%s)\n", $2)); 1122238106Sdes ptr = cfg_ptr_reverse($2); 1123238106Sdes free($2); 1124238106Sdes if(ptr) { 1125238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg-> 1126238106Sdes local_data, ptr)) 1127238106Sdes fatal_exit("out of memory adding local-data"); 1128238106Sdes } else { 1129238106Sdes yyerror("local-data-ptr could not be reversed"); 1130238106Sdes } 1131238106Sdes } 1132238106Sdes ; 1133238106Sdesserver_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG 1134238106Sdes { 1135238106Sdes OUTYY(("P(server_minimal_responses:%s)\n", $2)); 1136238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1137238106Sdes yyerror("expected yes or no."); 1138238106Sdes else cfg_parser->cfg->minimal_responses = 1139238106Sdes (strcmp($2, "yes")==0); 1140238106Sdes free($2); 1141238106Sdes } 1142238106Sdes ; 1143238106Sdesserver_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG 1144238106Sdes { 1145238106Sdes OUTYY(("P(server_rrset_roundrobin:%s)\n", $2)); 1146238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1147238106Sdes yyerror("expected yes or no."); 1148238106Sdes else cfg_parser->cfg->rrset_roundrobin = 1149238106Sdes (strcmp($2, "yes")==0); 1150238106Sdes free($2); 1151238106Sdes } 1152238106Sdes ; 1153269257Sdesserver_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG 1154269257Sdes { 1155269257Sdes OUTYY(("P(server_max_udp_size:%s)\n", $2)); 1156269257Sdes cfg_parser->cfg->max_udp_size = atoi($2); 1157269257Sdes free($2); 1158269257Sdes } 1159269257Sdes ; 1160238106Sdesstub_name: VAR_NAME STRING_ARG 1161238106Sdes { 1162238106Sdes OUTYY(("P(name:%s)\n", $2)); 1163238106Sdes if(cfg_parser->cfg->stubs->name) 1164238106Sdes yyerror("stub name override, there must be one name " 1165238106Sdes "for one stub-zone"); 1166238106Sdes free(cfg_parser->cfg->stubs->name); 1167238106Sdes cfg_parser->cfg->stubs->name = $2; 1168238106Sdes } 1169238106Sdes ; 1170238106Sdesstub_host: VAR_STUB_HOST STRING_ARG 1171238106Sdes { 1172238106Sdes OUTYY(("P(stub-host:%s)\n", $2)); 1173238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, $2)) 1174238106Sdes yyerror("out of memory"); 1175238106Sdes } 1176238106Sdes ; 1177238106Sdesstub_addr: VAR_STUB_ADDR STRING_ARG 1178238106Sdes { 1179238106Sdes OUTYY(("P(stub-addr:%s)\n", $2)); 1180238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, $2)) 1181238106Sdes yyerror("out of memory"); 1182238106Sdes } 1183238106Sdes ; 1184238106Sdesstub_first: VAR_STUB_FIRST STRING_ARG 1185238106Sdes { 1186238106Sdes OUTYY(("P(stub-first:%s)\n", $2)); 1187238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1188238106Sdes yyerror("expected yes or no."); 1189238106Sdes else cfg_parser->cfg->stubs->isfirst=(strcmp($2, "yes")==0); 1190238106Sdes free($2); 1191238106Sdes } 1192238106Sdes ; 1193238106Sdesstub_prime: VAR_STUB_PRIME STRING_ARG 1194238106Sdes { 1195238106Sdes OUTYY(("P(stub-prime:%s)\n", $2)); 1196238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1197238106Sdes yyerror("expected yes or no."); 1198238106Sdes else cfg_parser->cfg->stubs->isprime = 1199238106Sdes (strcmp($2, "yes")==0); 1200238106Sdes free($2); 1201238106Sdes } 1202238106Sdes ; 1203238106Sdesforward_name: VAR_NAME STRING_ARG 1204238106Sdes { 1205238106Sdes OUTYY(("P(name:%s)\n", $2)); 1206238106Sdes if(cfg_parser->cfg->forwards->name) 1207238106Sdes yyerror("forward name override, there must be one " 1208238106Sdes "name for one forward-zone"); 1209238106Sdes free(cfg_parser->cfg->forwards->name); 1210238106Sdes cfg_parser->cfg->forwards->name = $2; 1211238106Sdes } 1212238106Sdes ; 1213238106Sdesforward_host: VAR_FORWARD_HOST STRING_ARG 1214238106Sdes { 1215238106Sdes OUTYY(("P(forward-host:%s)\n", $2)); 1216238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, $2)) 1217238106Sdes yyerror("out of memory"); 1218238106Sdes } 1219238106Sdes ; 1220238106Sdesforward_addr: VAR_FORWARD_ADDR STRING_ARG 1221238106Sdes { 1222238106Sdes OUTYY(("P(forward-addr:%s)\n", $2)); 1223238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, $2)) 1224238106Sdes yyerror("out of memory"); 1225238106Sdes } 1226238106Sdes ; 1227238106Sdesforward_first: VAR_FORWARD_FIRST STRING_ARG 1228238106Sdes { 1229238106Sdes OUTYY(("P(forward-first:%s)\n", $2)); 1230238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1231238106Sdes yyerror("expected yes or no."); 1232238106Sdes else cfg_parser->cfg->forwards->isfirst=(strcmp($2, "yes")==0); 1233238106Sdes free($2); 1234238106Sdes } 1235238106Sdes ; 1236238106Sdesrcstart: VAR_REMOTE_CONTROL 1237238106Sdes { 1238238106Sdes OUTYY(("\nP(remote-control:)\n")); 1239238106Sdes } 1240238106Sdes ; 1241238106Sdescontents_rc: contents_rc content_rc 1242238106Sdes | ; 1243238106Sdescontent_rc: rc_control_enable | rc_control_interface | rc_control_port | 1244238106Sdes rc_server_key_file | rc_server_cert_file | rc_control_key_file | 1245238106Sdes rc_control_cert_file 1246238106Sdes ; 1247238106Sdesrc_control_enable: VAR_CONTROL_ENABLE STRING_ARG 1248238106Sdes { 1249238106Sdes OUTYY(("P(control_enable:%s)\n", $2)); 1250238106Sdes if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0) 1251238106Sdes yyerror("expected yes or no."); 1252238106Sdes else cfg_parser->cfg->remote_control_enable = 1253238106Sdes (strcmp($2, "yes")==0); 1254238106Sdes free($2); 1255238106Sdes } 1256238106Sdes ; 1257238106Sdesrc_control_port: VAR_CONTROL_PORT STRING_ARG 1258238106Sdes { 1259238106Sdes OUTYY(("P(control_port:%s)\n", $2)); 1260238106Sdes if(atoi($2) == 0) 1261238106Sdes yyerror("control port number expected"); 1262238106Sdes else cfg_parser->cfg->control_port = atoi($2); 1263238106Sdes free($2); 1264238106Sdes } 1265238106Sdes ; 1266238106Sdesrc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG 1267238106Sdes { 1268238106Sdes OUTYY(("P(control_interface:%s)\n", $2)); 1269238106Sdes if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, $2)) 1270238106Sdes yyerror("out of memory"); 1271238106Sdes } 1272238106Sdes ; 1273238106Sdesrc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG 1274238106Sdes { 1275238106Sdes OUTYY(("P(rc_server_key_file:%s)\n", $2)); 1276238106Sdes free(cfg_parser->cfg->server_key_file); 1277238106Sdes cfg_parser->cfg->server_key_file = $2; 1278238106Sdes } 1279238106Sdes ; 1280238106Sdesrc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG 1281238106Sdes { 1282238106Sdes OUTYY(("P(rc_server_cert_file:%s)\n", $2)); 1283238106Sdes free(cfg_parser->cfg->server_cert_file); 1284238106Sdes cfg_parser->cfg->server_cert_file = $2; 1285238106Sdes } 1286238106Sdes ; 1287238106Sdesrc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG 1288238106Sdes { 1289238106Sdes OUTYY(("P(rc_control_key_file:%s)\n", $2)); 1290238106Sdes free(cfg_parser->cfg->control_key_file); 1291238106Sdes cfg_parser->cfg->control_key_file = $2; 1292238106Sdes } 1293238106Sdes ; 1294238106Sdesrc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG 1295238106Sdes { 1296238106Sdes OUTYY(("P(rc_control_cert_file:%s)\n", $2)); 1297238106Sdes free(cfg_parser->cfg->control_cert_file); 1298238106Sdes cfg_parser->cfg->control_cert_file = $2; 1299238106Sdes } 1300238106Sdes ; 1301238106Sdespythonstart: VAR_PYTHON 1302238106Sdes { 1303238106Sdes OUTYY(("\nP(python:)\n")); 1304238106Sdes } 1305238106Sdes ; 1306238106Sdescontents_py: contents_py content_py 1307238106Sdes | ; 1308238106Sdescontent_py: py_script 1309238106Sdes ; 1310238106Sdespy_script: VAR_PYTHON_SCRIPT STRING_ARG 1311238106Sdes { 1312238106Sdes OUTYY(("P(python-script:%s)\n", $2)); 1313238106Sdes free(cfg_parser->cfg->python_script); 1314238106Sdes cfg_parser->cfg->python_script = $2; 1315238106Sdes } 1316238106Sdes%% 1317238106Sdes 1318238106Sdes/* parse helper routines could be here */ 1319