]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - util/configparser.c
unbound: Vendor import 1.19.0
[FreeBSD/FreeBSD.git] / util / configparser.c
1 /* A Bison parser, made by GNU Bison 3.7.6.  */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6    Inc.
7
8    This program is free software: you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation, either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
20
21 /* As a special exception, you may create a larger work that contains
22    part or all of the Bison parser skeleton and distribute that work
23    under terms of your choice, so long as that work isn't itself a
24    parser generator using the skeleton or a modified version thereof
25    as a parser skeleton.  Alternatively, if you modify or redistribute
26    the parser skeleton itself, you may (at your option) remove this
27    special exception, which will cause the skeleton and the resulting
28    Bison output files to be licensed under the GNU General Public
29    License without this special exception.
30
31    This special exception was added by the Free Software Foundation in
32    version 2.2 of Bison.  */
33
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35    simplifying the original so-called "semantic" parser.  */
36
37 /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38    especially those whose name start with YY_ or yy_.  They are
39    private implementation details that can be changed or removed.  */
40
41 /* All symbols defined below should begin with yy or YY, to avoid
42    infringing on user name space.  This should be done even for local
43    variables, as they might otherwise be expanded by user macros.
44    There are some unavoidable exceptions within include files to
45    define necessary library symbols; they are noted "INFRINGES ON
46    USER NAME SPACE" below.  */
47
48 /* Identify Bison output, and Bison version.  */
49 #define YYBISON 30706
50
51 /* Bison version string.  */
52 #define YYBISON_VERSION "3.7.6"
53
54 /* Skeleton name.  */
55 #define YYSKELETON_NAME "yacc.c"
56
57 /* Pure parsers.  */
58 #define YYPURE 0
59
60 /* Push parsers.  */
61 #define YYPUSH 0
62
63 /* Pull parsers.  */
64 #define YYPULL 1
65
66
67
68
69 /* First part of user prologue.  */
70 #line 38 "util/configparser.y"
71
72 #include "config.h"
73
74 #include <stdarg.h>
75 #include <stdio.h>
76 #include <string.h>
77 #include <stdlib.h>
78 #include <assert.h>
79
80 #include "util/configyyrename.h"
81 #include "util/config_file.h"
82 #include "util/net_help.h"
83 #include "sldns/str2wire.h"
84
85 int ub_c_lex(void);
86 void ub_c_error(const char *message);
87
88 static void validate_respip_action(const char* action);
89 static void validate_acl_action(const char* action);
90
91 /* these need to be global, otherwise they cannot be used inside yacc */
92 extern struct config_parser_state* cfg_parser;
93
94 #if 0
95 #define OUTYY(s)  printf s /* used ONLY when debugging */
96 #else
97 #define OUTYY(s)
98 #endif
99
100
101 #line 102 "util/configparser.c"
102
103 # ifndef YY_CAST
104 #  ifdef __cplusplus
105 #   define YY_CAST(Type, Val) static_cast<Type> (Val)
106 #   define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
107 #  else
108 #   define YY_CAST(Type, Val) ((Type) (Val))
109 #   define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
110 #  endif
111 # endif
112 # ifndef YY_NULLPTR
113 #  if defined __cplusplus
114 #   if 201103L <= __cplusplus
115 #    define YY_NULLPTR nullptr
116 #   else
117 #    define YY_NULLPTR 0
118 #   endif
119 #  else
120 #   define YY_NULLPTR ((void*)0)
121 #  endif
122 # endif
123
124 #include "configparser.h"
125 /* Symbol kind.  */
126 enum yysymbol_kind_t
127 {
128   YYSYMBOL_YYEMPTY = -2,
129   YYSYMBOL_YYEOF = 0,                      /* "end of file"  */
130   YYSYMBOL_YYerror = 1,                    /* error  */
131   YYSYMBOL_YYUNDEF = 2,                    /* "invalid token"  */
132   YYSYMBOL_SPACE = 3,                      /* SPACE  */
133   YYSYMBOL_LETTER = 4,                     /* LETTER  */
134   YYSYMBOL_NEWLINE = 5,                    /* NEWLINE  */
135   YYSYMBOL_COMMENT = 6,                    /* COMMENT  */
136   YYSYMBOL_COLON = 7,                      /* COLON  */
137   YYSYMBOL_ANY = 8,                        /* ANY  */
138   YYSYMBOL_ZONESTR = 9,                    /* ZONESTR  */
139   YYSYMBOL_STRING_ARG = 10,                /* STRING_ARG  */
140   YYSYMBOL_VAR_FORCE_TOPLEVEL = 11,        /* VAR_FORCE_TOPLEVEL  */
141   YYSYMBOL_VAR_SERVER = 12,                /* VAR_SERVER  */
142   YYSYMBOL_VAR_VERBOSITY = 13,             /* VAR_VERBOSITY  */
143   YYSYMBOL_VAR_NUM_THREADS = 14,           /* VAR_NUM_THREADS  */
144   YYSYMBOL_VAR_PORT = 15,                  /* VAR_PORT  */
145   YYSYMBOL_VAR_OUTGOING_RANGE = 16,        /* VAR_OUTGOING_RANGE  */
146   YYSYMBOL_VAR_INTERFACE = 17,             /* VAR_INTERFACE  */
147   YYSYMBOL_VAR_PREFER_IP4 = 18,            /* VAR_PREFER_IP4  */
148   YYSYMBOL_VAR_DO_IP4 = 19,                /* VAR_DO_IP4  */
149   YYSYMBOL_VAR_DO_IP6 = 20,                /* VAR_DO_IP6  */
150   YYSYMBOL_VAR_DO_NAT64 = 21,              /* VAR_DO_NAT64  */
151   YYSYMBOL_VAR_PREFER_IP6 = 22,            /* VAR_PREFER_IP6  */
152   YYSYMBOL_VAR_DO_UDP = 23,                /* VAR_DO_UDP  */
153   YYSYMBOL_VAR_DO_TCP = 24,                /* VAR_DO_TCP  */
154   YYSYMBOL_VAR_TCP_MSS = 25,               /* VAR_TCP_MSS  */
155   YYSYMBOL_VAR_OUTGOING_TCP_MSS = 26,      /* VAR_OUTGOING_TCP_MSS  */
156   YYSYMBOL_VAR_TCP_IDLE_TIMEOUT = 27,      /* VAR_TCP_IDLE_TIMEOUT  */
157   YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE = 28,    /* VAR_EDNS_TCP_KEEPALIVE  */
158   YYSYMBOL_VAR_EDNS_TCP_KEEPALIVE_TIMEOUT = 29, /* VAR_EDNS_TCP_KEEPALIVE_TIMEOUT  */
159   YYSYMBOL_VAR_SOCK_QUEUE_TIMEOUT = 30,    /* VAR_SOCK_QUEUE_TIMEOUT  */
160   YYSYMBOL_VAR_CHROOT = 31,                /* VAR_CHROOT  */
161   YYSYMBOL_VAR_USERNAME = 32,              /* VAR_USERNAME  */
162   YYSYMBOL_VAR_DIRECTORY = 33,             /* VAR_DIRECTORY  */
163   YYSYMBOL_VAR_LOGFILE = 34,               /* VAR_LOGFILE  */
164   YYSYMBOL_VAR_PIDFILE = 35,               /* VAR_PIDFILE  */
165   YYSYMBOL_VAR_MSG_CACHE_SIZE = 36,        /* VAR_MSG_CACHE_SIZE  */
166   YYSYMBOL_VAR_MSG_CACHE_SLABS = 37,       /* VAR_MSG_CACHE_SLABS  */
167   YYSYMBOL_VAR_NUM_QUERIES_PER_THREAD = 38, /* VAR_NUM_QUERIES_PER_THREAD  */
168   YYSYMBOL_VAR_RRSET_CACHE_SIZE = 39,      /* VAR_RRSET_CACHE_SIZE  */
169   YYSYMBOL_VAR_RRSET_CACHE_SLABS = 40,     /* VAR_RRSET_CACHE_SLABS  */
170   YYSYMBOL_VAR_OUTGOING_NUM_TCP = 41,      /* VAR_OUTGOING_NUM_TCP  */
171   YYSYMBOL_VAR_INFRA_HOST_TTL = 42,        /* VAR_INFRA_HOST_TTL  */
172   YYSYMBOL_VAR_INFRA_LAME_TTL = 43,        /* VAR_INFRA_LAME_TTL  */
173   YYSYMBOL_VAR_INFRA_CACHE_SLABS = 44,     /* VAR_INFRA_CACHE_SLABS  */
174   YYSYMBOL_VAR_INFRA_CACHE_NUMHOSTS = 45,  /* VAR_INFRA_CACHE_NUMHOSTS  */
175   YYSYMBOL_VAR_INFRA_CACHE_LAME_SIZE = 46, /* VAR_INFRA_CACHE_LAME_SIZE  */
176   YYSYMBOL_VAR_NAME = 47,                  /* VAR_NAME  */
177   YYSYMBOL_VAR_STUB_ZONE = 48,             /* VAR_STUB_ZONE  */
178   YYSYMBOL_VAR_STUB_HOST = 49,             /* VAR_STUB_HOST  */
179   YYSYMBOL_VAR_STUB_ADDR = 50,             /* VAR_STUB_ADDR  */
180   YYSYMBOL_VAR_TARGET_FETCH_POLICY = 51,   /* VAR_TARGET_FETCH_POLICY  */
181   YYSYMBOL_VAR_HARDEN_SHORT_BUFSIZE = 52,  /* VAR_HARDEN_SHORT_BUFSIZE  */
182   YYSYMBOL_VAR_HARDEN_LARGE_QUERIES = 53,  /* VAR_HARDEN_LARGE_QUERIES  */
183   YYSYMBOL_VAR_FORWARD_ZONE = 54,          /* VAR_FORWARD_ZONE  */
184   YYSYMBOL_VAR_FORWARD_HOST = 55,          /* VAR_FORWARD_HOST  */
185   YYSYMBOL_VAR_FORWARD_ADDR = 56,          /* VAR_FORWARD_ADDR  */
186   YYSYMBOL_VAR_DO_NOT_QUERY_ADDRESS = 57,  /* VAR_DO_NOT_QUERY_ADDRESS  */
187   YYSYMBOL_VAR_HIDE_IDENTITY = 58,         /* VAR_HIDE_IDENTITY  */
188   YYSYMBOL_VAR_HIDE_VERSION = 59,          /* VAR_HIDE_VERSION  */
189   YYSYMBOL_VAR_IDENTITY = 60,              /* VAR_IDENTITY  */
190   YYSYMBOL_VAR_VERSION = 61,               /* VAR_VERSION  */
191   YYSYMBOL_VAR_HARDEN_GLUE = 62,           /* VAR_HARDEN_GLUE  */
192   YYSYMBOL_VAR_MODULE_CONF = 63,           /* VAR_MODULE_CONF  */
193   YYSYMBOL_VAR_TRUST_ANCHOR_FILE = 64,     /* VAR_TRUST_ANCHOR_FILE  */
194   YYSYMBOL_VAR_TRUST_ANCHOR = 65,          /* VAR_TRUST_ANCHOR  */
195   YYSYMBOL_VAR_VAL_OVERRIDE_DATE = 66,     /* VAR_VAL_OVERRIDE_DATE  */
196   YYSYMBOL_VAR_BOGUS_TTL = 67,             /* VAR_BOGUS_TTL  */
197   YYSYMBOL_VAR_VAL_CLEAN_ADDITIONAL = 68,  /* VAR_VAL_CLEAN_ADDITIONAL  */
198   YYSYMBOL_VAR_VAL_PERMISSIVE_MODE = 69,   /* VAR_VAL_PERMISSIVE_MODE  */
199   YYSYMBOL_VAR_INCOMING_NUM_TCP = 70,      /* VAR_INCOMING_NUM_TCP  */
200   YYSYMBOL_VAR_MSG_BUFFER_SIZE = 71,       /* VAR_MSG_BUFFER_SIZE  */
201   YYSYMBOL_VAR_KEY_CACHE_SIZE = 72,        /* VAR_KEY_CACHE_SIZE  */
202   YYSYMBOL_VAR_KEY_CACHE_SLABS = 73,       /* VAR_KEY_CACHE_SLABS  */
203   YYSYMBOL_VAR_TRUSTED_KEYS_FILE = 74,     /* VAR_TRUSTED_KEYS_FILE  */
204   YYSYMBOL_VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 75, /* VAR_VAL_NSEC3_KEYSIZE_ITERATIONS  */
205   YYSYMBOL_VAR_USE_SYSLOG = 76,            /* VAR_USE_SYSLOG  */
206   YYSYMBOL_VAR_OUTGOING_INTERFACE = 77,    /* VAR_OUTGOING_INTERFACE  */
207   YYSYMBOL_VAR_ROOT_HINTS = 78,            /* VAR_ROOT_HINTS  */
208   YYSYMBOL_VAR_DO_NOT_QUERY_LOCALHOST = 79, /* VAR_DO_NOT_QUERY_LOCALHOST  */
209   YYSYMBOL_VAR_CACHE_MAX_TTL = 80,         /* VAR_CACHE_MAX_TTL  */
210   YYSYMBOL_VAR_HARDEN_DNSSEC_STRIPPED = 81, /* VAR_HARDEN_DNSSEC_STRIPPED  */
211   YYSYMBOL_VAR_ACCESS_CONTROL = 82,        /* VAR_ACCESS_CONTROL  */
212   YYSYMBOL_VAR_LOCAL_ZONE = 83,            /* VAR_LOCAL_ZONE  */
213   YYSYMBOL_VAR_LOCAL_DATA = 84,            /* VAR_LOCAL_DATA  */
214   YYSYMBOL_VAR_INTERFACE_AUTOMATIC = 85,   /* VAR_INTERFACE_AUTOMATIC  */
215   YYSYMBOL_VAR_STATISTICS_INTERVAL = 86,   /* VAR_STATISTICS_INTERVAL  */
216   YYSYMBOL_VAR_DO_DAEMONIZE = 87,          /* VAR_DO_DAEMONIZE  */
217   YYSYMBOL_VAR_USE_CAPS_FOR_ID = 88,       /* VAR_USE_CAPS_FOR_ID  */
218   YYSYMBOL_VAR_STATISTICS_CUMULATIVE = 89, /* VAR_STATISTICS_CUMULATIVE  */
219   YYSYMBOL_VAR_OUTGOING_PORT_PERMIT = 90,  /* VAR_OUTGOING_PORT_PERMIT  */
220   YYSYMBOL_VAR_OUTGOING_PORT_AVOID = 91,   /* VAR_OUTGOING_PORT_AVOID  */
221   YYSYMBOL_VAR_DLV_ANCHOR_FILE = 92,       /* VAR_DLV_ANCHOR_FILE  */
222   YYSYMBOL_VAR_DLV_ANCHOR = 93,            /* VAR_DLV_ANCHOR  */
223   YYSYMBOL_VAR_NEG_CACHE_SIZE = 94,        /* VAR_NEG_CACHE_SIZE  */
224   YYSYMBOL_VAR_HARDEN_REFERRAL_PATH = 95,  /* VAR_HARDEN_REFERRAL_PATH  */
225   YYSYMBOL_VAR_PRIVATE_ADDRESS = 96,       /* VAR_PRIVATE_ADDRESS  */
226   YYSYMBOL_VAR_PRIVATE_DOMAIN = 97,        /* VAR_PRIVATE_DOMAIN  */
227   YYSYMBOL_VAR_REMOTE_CONTROL = 98,        /* VAR_REMOTE_CONTROL  */
228   YYSYMBOL_VAR_CONTROL_ENABLE = 99,        /* VAR_CONTROL_ENABLE  */
229   YYSYMBOL_VAR_CONTROL_INTERFACE = 100,    /* VAR_CONTROL_INTERFACE  */
230   YYSYMBOL_VAR_CONTROL_PORT = 101,         /* VAR_CONTROL_PORT  */
231   YYSYMBOL_VAR_SERVER_KEY_FILE = 102,      /* VAR_SERVER_KEY_FILE  */
232   YYSYMBOL_VAR_SERVER_CERT_FILE = 103,     /* VAR_SERVER_CERT_FILE  */
233   YYSYMBOL_VAR_CONTROL_KEY_FILE = 104,     /* VAR_CONTROL_KEY_FILE  */
234   YYSYMBOL_VAR_CONTROL_CERT_FILE = 105,    /* VAR_CONTROL_CERT_FILE  */
235   YYSYMBOL_VAR_CONTROL_USE_CERT = 106,     /* VAR_CONTROL_USE_CERT  */
236   YYSYMBOL_VAR_TCP_REUSE_TIMEOUT = 107,    /* VAR_TCP_REUSE_TIMEOUT  */
237   YYSYMBOL_VAR_MAX_REUSE_TCP_QUERIES = 108, /* VAR_MAX_REUSE_TCP_QUERIES  */
238   YYSYMBOL_VAR_EXTENDED_STATISTICS = 109,  /* VAR_EXTENDED_STATISTICS  */
239   YYSYMBOL_VAR_LOCAL_DATA_PTR = 110,       /* VAR_LOCAL_DATA_PTR  */
240   YYSYMBOL_VAR_JOSTLE_TIMEOUT = 111,       /* VAR_JOSTLE_TIMEOUT  */
241   YYSYMBOL_VAR_STUB_PRIME = 112,           /* VAR_STUB_PRIME  */
242   YYSYMBOL_VAR_UNWANTED_REPLY_THRESHOLD = 113, /* VAR_UNWANTED_REPLY_THRESHOLD  */
243   YYSYMBOL_VAR_LOG_TIME_ASCII = 114,       /* VAR_LOG_TIME_ASCII  */
244   YYSYMBOL_VAR_DOMAIN_INSECURE = 115,      /* VAR_DOMAIN_INSECURE  */
245   YYSYMBOL_VAR_PYTHON = 116,               /* VAR_PYTHON  */
246   YYSYMBOL_VAR_PYTHON_SCRIPT = 117,        /* VAR_PYTHON_SCRIPT  */
247   YYSYMBOL_VAR_VAL_SIG_SKEW_MIN = 118,     /* VAR_VAL_SIG_SKEW_MIN  */
248   YYSYMBOL_VAR_VAL_SIG_SKEW_MAX = 119,     /* VAR_VAL_SIG_SKEW_MAX  */
249   YYSYMBOL_VAR_VAL_MAX_RESTART = 120,      /* VAR_VAL_MAX_RESTART  */
250   YYSYMBOL_VAR_CACHE_MIN_TTL = 121,        /* VAR_CACHE_MIN_TTL  */
251   YYSYMBOL_VAR_VAL_LOG_LEVEL = 122,        /* VAR_VAL_LOG_LEVEL  */
252   YYSYMBOL_VAR_AUTO_TRUST_ANCHOR_FILE = 123, /* VAR_AUTO_TRUST_ANCHOR_FILE  */
253   YYSYMBOL_VAR_KEEP_MISSING = 124,         /* VAR_KEEP_MISSING  */
254   YYSYMBOL_VAR_ADD_HOLDDOWN = 125,         /* VAR_ADD_HOLDDOWN  */
255   YYSYMBOL_VAR_DEL_HOLDDOWN = 126,         /* VAR_DEL_HOLDDOWN  */
256   YYSYMBOL_VAR_SO_RCVBUF = 127,            /* VAR_SO_RCVBUF  */
257   YYSYMBOL_VAR_EDNS_BUFFER_SIZE = 128,     /* VAR_EDNS_BUFFER_SIZE  */
258   YYSYMBOL_VAR_PREFETCH = 129,             /* VAR_PREFETCH  */
259   YYSYMBOL_VAR_PREFETCH_KEY = 130,         /* VAR_PREFETCH_KEY  */
260   YYSYMBOL_VAR_SO_SNDBUF = 131,            /* VAR_SO_SNDBUF  */
261   YYSYMBOL_VAR_SO_REUSEPORT = 132,         /* VAR_SO_REUSEPORT  */
262   YYSYMBOL_VAR_HARDEN_BELOW_NXDOMAIN = 133, /* VAR_HARDEN_BELOW_NXDOMAIN  */
263   YYSYMBOL_VAR_IGNORE_CD_FLAG = 134,       /* VAR_IGNORE_CD_FLAG  */
264   YYSYMBOL_VAR_LOG_QUERIES = 135,          /* VAR_LOG_QUERIES  */
265   YYSYMBOL_VAR_LOG_REPLIES = 136,          /* VAR_LOG_REPLIES  */
266   YYSYMBOL_VAR_LOG_LOCAL_ACTIONS = 137,    /* VAR_LOG_LOCAL_ACTIONS  */
267   YYSYMBOL_VAR_TCP_UPSTREAM = 138,         /* VAR_TCP_UPSTREAM  */
268   YYSYMBOL_VAR_SSL_UPSTREAM = 139,         /* VAR_SSL_UPSTREAM  */
269   YYSYMBOL_VAR_TCP_AUTH_QUERY_TIMEOUT = 140, /* VAR_TCP_AUTH_QUERY_TIMEOUT  */
270   YYSYMBOL_VAR_SSL_SERVICE_KEY = 141,      /* VAR_SSL_SERVICE_KEY  */
271   YYSYMBOL_VAR_SSL_SERVICE_PEM = 142,      /* VAR_SSL_SERVICE_PEM  */
272   YYSYMBOL_VAR_SSL_PORT = 143,             /* VAR_SSL_PORT  */
273   YYSYMBOL_VAR_FORWARD_FIRST = 144,        /* VAR_FORWARD_FIRST  */
274   YYSYMBOL_VAR_STUB_SSL_UPSTREAM = 145,    /* VAR_STUB_SSL_UPSTREAM  */
275   YYSYMBOL_VAR_FORWARD_SSL_UPSTREAM = 146, /* VAR_FORWARD_SSL_UPSTREAM  */
276   YYSYMBOL_VAR_TLS_CERT_BUNDLE = 147,      /* VAR_TLS_CERT_BUNDLE  */
277   YYSYMBOL_VAR_STUB_TCP_UPSTREAM = 148,    /* VAR_STUB_TCP_UPSTREAM  */
278   YYSYMBOL_VAR_FORWARD_TCP_UPSTREAM = 149, /* VAR_FORWARD_TCP_UPSTREAM  */
279   YYSYMBOL_VAR_HTTPS_PORT = 150,           /* VAR_HTTPS_PORT  */
280   YYSYMBOL_VAR_HTTP_ENDPOINT = 151,        /* VAR_HTTP_ENDPOINT  */
281   YYSYMBOL_VAR_HTTP_MAX_STREAMS = 152,     /* VAR_HTTP_MAX_STREAMS  */
282   YYSYMBOL_VAR_HTTP_QUERY_BUFFER_SIZE = 153, /* VAR_HTTP_QUERY_BUFFER_SIZE  */
283   YYSYMBOL_VAR_HTTP_RESPONSE_BUFFER_SIZE = 154, /* VAR_HTTP_RESPONSE_BUFFER_SIZE  */
284   YYSYMBOL_VAR_HTTP_NODELAY = 155,         /* VAR_HTTP_NODELAY  */
285   YYSYMBOL_VAR_HTTP_NOTLS_DOWNSTREAM = 156, /* VAR_HTTP_NOTLS_DOWNSTREAM  */
286   YYSYMBOL_VAR_STUB_FIRST = 157,           /* VAR_STUB_FIRST  */
287   YYSYMBOL_VAR_MINIMAL_RESPONSES = 158,    /* VAR_MINIMAL_RESPONSES  */
288   YYSYMBOL_VAR_RRSET_ROUNDROBIN = 159,     /* VAR_RRSET_ROUNDROBIN  */
289   YYSYMBOL_VAR_MAX_UDP_SIZE = 160,         /* VAR_MAX_UDP_SIZE  */
290   YYSYMBOL_VAR_DELAY_CLOSE = 161,          /* VAR_DELAY_CLOSE  */
291   YYSYMBOL_VAR_UDP_CONNECT = 162,          /* VAR_UDP_CONNECT  */
292   YYSYMBOL_VAR_UNBLOCK_LAN_ZONES = 163,    /* VAR_UNBLOCK_LAN_ZONES  */
293   YYSYMBOL_VAR_INSECURE_LAN_ZONES = 164,   /* VAR_INSECURE_LAN_ZONES  */
294   YYSYMBOL_VAR_INFRA_CACHE_MIN_RTT = 165,  /* VAR_INFRA_CACHE_MIN_RTT  */
295   YYSYMBOL_VAR_INFRA_CACHE_MAX_RTT = 166,  /* VAR_INFRA_CACHE_MAX_RTT  */
296   YYSYMBOL_VAR_INFRA_KEEP_PROBING = 167,   /* VAR_INFRA_KEEP_PROBING  */
297   YYSYMBOL_VAR_DNS64_PREFIX = 168,         /* VAR_DNS64_PREFIX  */
298   YYSYMBOL_VAR_DNS64_SYNTHALL = 169,       /* VAR_DNS64_SYNTHALL  */
299   YYSYMBOL_VAR_DNS64_IGNORE_AAAA = 170,    /* VAR_DNS64_IGNORE_AAAA  */
300   YYSYMBOL_VAR_NAT64_PREFIX = 171,         /* VAR_NAT64_PREFIX  */
301   YYSYMBOL_VAR_DNSTAP = 172,               /* VAR_DNSTAP  */
302   YYSYMBOL_VAR_DNSTAP_ENABLE = 173,        /* VAR_DNSTAP_ENABLE  */
303   YYSYMBOL_VAR_DNSTAP_SOCKET_PATH = 174,   /* VAR_DNSTAP_SOCKET_PATH  */
304   YYSYMBOL_VAR_DNSTAP_IP = 175,            /* VAR_DNSTAP_IP  */
305   YYSYMBOL_VAR_DNSTAP_TLS = 176,           /* VAR_DNSTAP_TLS  */
306   YYSYMBOL_VAR_DNSTAP_TLS_SERVER_NAME = 177, /* VAR_DNSTAP_TLS_SERVER_NAME  */
307   YYSYMBOL_VAR_DNSTAP_TLS_CERT_BUNDLE = 178, /* VAR_DNSTAP_TLS_CERT_BUNDLE  */
308   YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_KEY_FILE = 179, /* VAR_DNSTAP_TLS_CLIENT_KEY_FILE  */
309   YYSYMBOL_VAR_DNSTAP_TLS_CLIENT_CERT_FILE = 180, /* VAR_DNSTAP_TLS_CLIENT_CERT_FILE  */
310   YYSYMBOL_VAR_DNSTAP_SEND_IDENTITY = 181, /* VAR_DNSTAP_SEND_IDENTITY  */
311   YYSYMBOL_VAR_DNSTAP_SEND_VERSION = 182,  /* VAR_DNSTAP_SEND_VERSION  */
312   YYSYMBOL_VAR_DNSTAP_BIDIRECTIONAL = 183, /* VAR_DNSTAP_BIDIRECTIONAL  */
313   YYSYMBOL_VAR_DNSTAP_IDENTITY = 184,      /* VAR_DNSTAP_IDENTITY  */
314   YYSYMBOL_VAR_DNSTAP_VERSION = 185,       /* VAR_DNSTAP_VERSION  */
315   YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES = 186, /* VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES  */
316   YYSYMBOL_VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES = 187, /* VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES  */
317   YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES = 188, /* VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES  */
318   YYSYMBOL_VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES = 189, /* VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES  */
319   YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES = 190, /* VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES  */
320   YYSYMBOL_VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES = 191, /* VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES  */
321   YYSYMBOL_VAR_RESPONSE_IP_TAG = 192,      /* VAR_RESPONSE_IP_TAG  */
322   YYSYMBOL_VAR_RESPONSE_IP = 193,          /* VAR_RESPONSE_IP  */
323   YYSYMBOL_VAR_RESPONSE_IP_DATA = 194,     /* VAR_RESPONSE_IP_DATA  */
324   YYSYMBOL_VAR_HARDEN_ALGO_DOWNGRADE = 195, /* VAR_HARDEN_ALGO_DOWNGRADE  */
325   YYSYMBOL_VAR_IP_TRANSPARENT = 196,       /* VAR_IP_TRANSPARENT  */
326   YYSYMBOL_VAR_IP_DSCP = 197,              /* VAR_IP_DSCP  */
327   YYSYMBOL_VAR_DISABLE_DNSSEC_LAME_CHECK = 198, /* VAR_DISABLE_DNSSEC_LAME_CHECK  */
328   YYSYMBOL_VAR_IP_RATELIMIT = 199,         /* VAR_IP_RATELIMIT  */
329   YYSYMBOL_VAR_IP_RATELIMIT_SLABS = 200,   /* VAR_IP_RATELIMIT_SLABS  */
330   YYSYMBOL_VAR_IP_RATELIMIT_SIZE = 201,    /* VAR_IP_RATELIMIT_SIZE  */
331   YYSYMBOL_VAR_RATELIMIT = 202,            /* VAR_RATELIMIT  */
332   YYSYMBOL_VAR_RATELIMIT_SLABS = 203,      /* VAR_RATELIMIT_SLABS  */
333   YYSYMBOL_VAR_RATELIMIT_SIZE = 204,       /* VAR_RATELIMIT_SIZE  */
334   YYSYMBOL_VAR_OUTBOUND_MSG_RETRY = 205,   /* VAR_OUTBOUND_MSG_RETRY  */
335   YYSYMBOL_VAR_MAX_SENT_COUNT = 206,       /* VAR_MAX_SENT_COUNT  */
336   YYSYMBOL_VAR_MAX_QUERY_RESTARTS = 207,   /* VAR_MAX_QUERY_RESTARTS  */
337   YYSYMBOL_VAR_RATELIMIT_FOR_DOMAIN = 208, /* VAR_RATELIMIT_FOR_DOMAIN  */
338   YYSYMBOL_VAR_RATELIMIT_BELOW_DOMAIN = 209, /* VAR_RATELIMIT_BELOW_DOMAIN  */
339   YYSYMBOL_VAR_IP_RATELIMIT_FACTOR = 210,  /* VAR_IP_RATELIMIT_FACTOR  */
340   YYSYMBOL_VAR_RATELIMIT_FACTOR = 211,     /* VAR_RATELIMIT_FACTOR  */
341   YYSYMBOL_VAR_IP_RATELIMIT_BACKOFF = 212, /* VAR_IP_RATELIMIT_BACKOFF  */
342   YYSYMBOL_VAR_RATELIMIT_BACKOFF = 213,    /* VAR_RATELIMIT_BACKOFF  */
343   YYSYMBOL_VAR_SEND_CLIENT_SUBNET = 214,   /* VAR_SEND_CLIENT_SUBNET  */
344   YYSYMBOL_VAR_CLIENT_SUBNET_ZONE = 215,   /* VAR_CLIENT_SUBNET_ZONE  */
345   YYSYMBOL_VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 216, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD  */
346   YYSYMBOL_VAR_CLIENT_SUBNET_OPCODE = 217, /* VAR_CLIENT_SUBNET_OPCODE  */
347   YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV4 = 218, /* VAR_MAX_CLIENT_SUBNET_IPV4  */
348   YYSYMBOL_VAR_MAX_CLIENT_SUBNET_IPV6 = 219, /* VAR_MAX_CLIENT_SUBNET_IPV6  */
349   YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV4 = 220, /* VAR_MIN_CLIENT_SUBNET_IPV4  */
350   YYSYMBOL_VAR_MIN_CLIENT_SUBNET_IPV6 = 221, /* VAR_MIN_CLIENT_SUBNET_IPV6  */
351   YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV4 = 222, /* VAR_MAX_ECS_TREE_SIZE_IPV4  */
352   YYSYMBOL_VAR_MAX_ECS_TREE_SIZE_IPV6 = 223, /* VAR_MAX_ECS_TREE_SIZE_IPV6  */
353   YYSYMBOL_VAR_CAPS_WHITELIST = 224,       /* VAR_CAPS_WHITELIST  */
354   YYSYMBOL_VAR_CACHE_MAX_NEGATIVE_TTL = 225, /* VAR_CACHE_MAX_NEGATIVE_TTL  */
355   YYSYMBOL_VAR_PERMIT_SMALL_HOLDDOWN = 226, /* VAR_PERMIT_SMALL_HOLDDOWN  */
356   YYSYMBOL_VAR_QNAME_MINIMISATION = 227,   /* VAR_QNAME_MINIMISATION  */
357   YYSYMBOL_VAR_QNAME_MINIMISATION_STRICT = 228, /* VAR_QNAME_MINIMISATION_STRICT  */
358   YYSYMBOL_VAR_IP_FREEBIND = 229,          /* VAR_IP_FREEBIND  */
359   YYSYMBOL_VAR_DEFINE_TAG = 230,           /* VAR_DEFINE_TAG  */
360   YYSYMBOL_VAR_LOCAL_ZONE_TAG = 231,       /* VAR_LOCAL_ZONE_TAG  */
361   YYSYMBOL_VAR_ACCESS_CONTROL_TAG = 232,   /* VAR_ACCESS_CONTROL_TAG  */
362   YYSYMBOL_VAR_LOCAL_ZONE_OVERRIDE = 233,  /* VAR_LOCAL_ZONE_OVERRIDE  */
363   YYSYMBOL_VAR_ACCESS_CONTROL_TAG_ACTION = 234, /* VAR_ACCESS_CONTROL_TAG_ACTION  */
364   YYSYMBOL_VAR_ACCESS_CONTROL_TAG_DATA = 235, /* VAR_ACCESS_CONTROL_TAG_DATA  */
365   YYSYMBOL_VAR_VIEW = 236,                 /* VAR_VIEW  */
366   YYSYMBOL_VAR_ACCESS_CONTROL_VIEW = 237,  /* VAR_ACCESS_CONTROL_VIEW  */
367   YYSYMBOL_VAR_VIEW_FIRST = 238,           /* VAR_VIEW_FIRST  */
368   YYSYMBOL_VAR_SERVE_EXPIRED = 239,        /* VAR_SERVE_EXPIRED  */
369   YYSYMBOL_VAR_SERVE_EXPIRED_TTL = 240,    /* VAR_SERVE_EXPIRED_TTL  */
370   YYSYMBOL_VAR_SERVE_EXPIRED_TTL_RESET = 241, /* VAR_SERVE_EXPIRED_TTL_RESET  */
371   YYSYMBOL_VAR_SERVE_EXPIRED_REPLY_TTL = 242, /* VAR_SERVE_EXPIRED_REPLY_TTL  */
372   YYSYMBOL_VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 243, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT  */
373   YYSYMBOL_VAR_EDE_SERVE_EXPIRED = 244,    /* VAR_EDE_SERVE_EXPIRED  */
374   YYSYMBOL_VAR_SERVE_ORIGINAL_TTL = 245,   /* VAR_SERVE_ORIGINAL_TTL  */
375   YYSYMBOL_VAR_FAKE_DSA = 246,             /* VAR_FAKE_DSA  */
376   YYSYMBOL_VAR_FAKE_SHA1 = 247,            /* VAR_FAKE_SHA1  */
377   YYSYMBOL_VAR_LOG_IDENTITY = 248,         /* VAR_LOG_IDENTITY  */
378   YYSYMBOL_VAR_HIDE_TRUSTANCHOR = 249,     /* VAR_HIDE_TRUSTANCHOR  */
379   YYSYMBOL_VAR_HIDE_HTTP_USER_AGENT = 250, /* VAR_HIDE_HTTP_USER_AGENT  */
380   YYSYMBOL_VAR_HTTP_USER_AGENT = 251,      /* VAR_HTTP_USER_AGENT  */
381   YYSYMBOL_VAR_TRUST_ANCHOR_SIGNALING = 252, /* VAR_TRUST_ANCHOR_SIGNALING  */
382   YYSYMBOL_VAR_AGGRESSIVE_NSEC = 253,      /* VAR_AGGRESSIVE_NSEC  */
383   YYSYMBOL_VAR_USE_SYSTEMD = 254,          /* VAR_USE_SYSTEMD  */
384   YYSYMBOL_VAR_SHM_ENABLE = 255,           /* VAR_SHM_ENABLE  */
385   YYSYMBOL_VAR_SHM_KEY = 256,              /* VAR_SHM_KEY  */
386   YYSYMBOL_VAR_ROOT_KEY_SENTINEL = 257,    /* VAR_ROOT_KEY_SENTINEL  */
387   YYSYMBOL_VAR_DNSCRYPT = 258,             /* VAR_DNSCRYPT  */
388   YYSYMBOL_VAR_DNSCRYPT_ENABLE = 259,      /* VAR_DNSCRYPT_ENABLE  */
389   YYSYMBOL_VAR_DNSCRYPT_PORT = 260,        /* VAR_DNSCRYPT_PORT  */
390   YYSYMBOL_VAR_DNSCRYPT_PROVIDER = 261,    /* VAR_DNSCRYPT_PROVIDER  */
391   YYSYMBOL_VAR_DNSCRYPT_SECRET_KEY = 262,  /* VAR_DNSCRYPT_SECRET_KEY  */
392   YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT = 263, /* VAR_DNSCRYPT_PROVIDER_CERT  */
393   YYSYMBOL_VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 264, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED  */
394   YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 265, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE  */
395   YYSYMBOL_VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 266, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS  */
396   YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SIZE = 267, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE  */
397   YYSYMBOL_VAR_DNSCRYPT_NONCE_CACHE_SLABS = 268, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS  */
398   YYSYMBOL_VAR_PAD_RESPONSES = 269,        /* VAR_PAD_RESPONSES  */
399   YYSYMBOL_VAR_PAD_RESPONSES_BLOCK_SIZE = 270, /* VAR_PAD_RESPONSES_BLOCK_SIZE  */
400   YYSYMBOL_VAR_PAD_QUERIES = 271,          /* VAR_PAD_QUERIES  */
401   YYSYMBOL_VAR_PAD_QUERIES_BLOCK_SIZE = 272, /* VAR_PAD_QUERIES_BLOCK_SIZE  */
402   YYSYMBOL_VAR_IPSECMOD_ENABLED = 273,     /* VAR_IPSECMOD_ENABLED  */
403   YYSYMBOL_VAR_IPSECMOD_HOOK = 274,        /* VAR_IPSECMOD_HOOK  */
404   YYSYMBOL_VAR_IPSECMOD_IGNORE_BOGUS = 275, /* VAR_IPSECMOD_IGNORE_BOGUS  */
405   YYSYMBOL_VAR_IPSECMOD_MAX_TTL = 276,     /* VAR_IPSECMOD_MAX_TTL  */
406   YYSYMBOL_VAR_IPSECMOD_WHITELIST = 277,   /* VAR_IPSECMOD_WHITELIST  */
407   YYSYMBOL_VAR_IPSECMOD_STRICT = 278,      /* VAR_IPSECMOD_STRICT  */
408   YYSYMBOL_VAR_CACHEDB = 279,              /* VAR_CACHEDB  */
409   YYSYMBOL_VAR_CACHEDB_BACKEND = 280,      /* VAR_CACHEDB_BACKEND  */
410   YYSYMBOL_VAR_CACHEDB_SECRETSEED = 281,   /* VAR_CACHEDB_SECRETSEED  */
411   YYSYMBOL_VAR_CACHEDB_REDISHOST = 282,    /* VAR_CACHEDB_REDISHOST  */
412   YYSYMBOL_VAR_CACHEDB_REDISPORT = 283,    /* VAR_CACHEDB_REDISPORT  */
413   YYSYMBOL_VAR_CACHEDB_REDISTIMEOUT = 284, /* VAR_CACHEDB_REDISTIMEOUT  */
414   YYSYMBOL_VAR_CACHEDB_REDISEXPIRERECORDS = 285, /* VAR_CACHEDB_REDISEXPIRERECORDS  */
415   YYSYMBOL_VAR_CACHEDB_REDISPATH = 286,    /* VAR_CACHEDB_REDISPATH  */
416   YYSYMBOL_VAR_CACHEDB_REDISPASSWORD = 287, /* VAR_CACHEDB_REDISPASSWORD  */
417   YYSYMBOL_VAR_CACHEDB_REDISLOGICALDB = 288, /* VAR_CACHEDB_REDISLOGICALDB  */
418   YYSYMBOL_VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 289, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM  */
419   YYSYMBOL_VAR_FOR_UPSTREAM = 290,         /* VAR_FOR_UPSTREAM  */
420   YYSYMBOL_VAR_AUTH_ZONE = 291,            /* VAR_AUTH_ZONE  */
421   YYSYMBOL_VAR_ZONEFILE = 292,             /* VAR_ZONEFILE  */
422   YYSYMBOL_VAR_MASTER = 293,               /* VAR_MASTER  */
423   YYSYMBOL_VAR_URL = 294,                  /* VAR_URL  */
424   YYSYMBOL_VAR_FOR_DOWNSTREAM = 295,       /* VAR_FOR_DOWNSTREAM  */
425   YYSYMBOL_VAR_FALLBACK_ENABLED = 296,     /* VAR_FALLBACK_ENABLED  */
426   YYSYMBOL_VAR_TLS_ADDITIONAL_PORT = 297,  /* VAR_TLS_ADDITIONAL_PORT  */
427   YYSYMBOL_VAR_LOW_RTT = 298,              /* VAR_LOW_RTT  */
428   YYSYMBOL_VAR_LOW_RTT_PERMIL = 299,       /* VAR_LOW_RTT_PERMIL  */
429   YYSYMBOL_VAR_FAST_SERVER_PERMIL = 300,   /* VAR_FAST_SERVER_PERMIL  */
430   YYSYMBOL_VAR_FAST_SERVER_NUM = 301,      /* VAR_FAST_SERVER_NUM  */
431   YYSYMBOL_VAR_ALLOW_NOTIFY = 302,         /* VAR_ALLOW_NOTIFY  */
432   YYSYMBOL_VAR_TLS_WIN_CERT = 303,         /* VAR_TLS_WIN_CERT  */
433   YYSYMBOL_VAR_TCP_CONNECTION_LIMIT = 304, /* VAR_TCP_CONNECTION_LIMIT  */
434   YYSYMBOL_VAR_ANSWER_COOKIE = 305,        /* VAR_ANSWER_COOKIE  */
435   YYSYMBOL_VAR_COOKIE_SECRET = 306,        /* VAR_COOKIE_SECRET  */
436   YYSYMBOL_VAR_IP_RATELIMIT_COOKIE = 307,  /* VAR_IP_RATELIMIT_COOKIE  */
437   YYSYMBOL_VAR_FORWARD_NO_CACHE = 308,     /* VAR_FORWARD_NO_CACHE  */
438   YYSYMBOL_VAR_STUB_NO_CACHE = 309,        /* VAR_STUB_NO_CACHE  */
439   YYSYMBOL_VAR_LOG_SERVFAIL = 310,         /* VAR_LOG_SERVFAIL  */
440   YYSYMBOL_VAR_DENY_ANY = 311,             /* VAR_DENY_ANY  */
441   YYSYMBOL_VAR_UNKNOWN_SERVER_TIME_LIMIT = 312, /* VAR_UNKNOWN_SERVER_TIME_LIMIT  */
442   YYSYMBOL_VAR_LOG_TAG_QUERYREPLY = 313,   /* VAR_LOG_TAG_QUERYREPLY  */
443   YYSYMBOL_VAR_STREAM_WAIT_SIZE = 314,     /* VAR_STREAM_WAIT_SIZE  */
444   YYSYMBOL_VAR_TLS_CIPHERS = 315,          /* VAR_TLS_CIPHERS  */
445   YYSYMBOL_VAR_TLS_CIPHERSUITES = 316,     /* VAR_TLS_CIPHERSUITES  */
446   YYSYMBOL_VAR_TLS_USE_SNI = 317,          /* VAR_TLS_USE_SNI  */
447   YYSYMBOL_VAR_IPSET = 318,                /* VAR_IPSET  */
448   YYSYMBOL_VAR_IPSET_NAME_V4 = 319,        /* VAR_IPSET_NAME_V4  */
449   YYSYMBOL_VAR_IPSET_NAME_V6 = 320,        /* VAR_IPSET_NAME_V6  */
450   YYSYMBOL_VAR_TLS_SESSION_TICKET_KEYS = 321, /* VAR_TLS_SESSION_TICKET_KEYS  */
451   YYSYMBOL_VAR_RPZ = 322,                  /* VAR_RPZ  */
452   YYSYMBOL_VAR_TAGS = 323,                 /* VAR_TAGS  */
453   YYSYMBOL_VAR_RPZ_ACTION_OVERRIDE = 324,  /* VAR_RPZ_ACTION_OVERRIDE  */
454   YYSYMBOL_VAR_RPZ_CNAME_OVERRIDE = 325,   /* VAR_RPZ_CNAME_OVERRIDE  */
455   YYSYMBOL_VAR_RPZ_LOG = 326,              /* VAR_RPZ_LOG  */
456   YYSYMBOL_VAR_RPZ_LOG_NAME = 327,         /* VAR_RPZ_LOG_NAME  */
457   YYSYMBOL_VAR_DYNLIB = 328,               /* VAR_DYNLIB  */
458   YYSYMBOL_VAR_DYNLIB_FILE = 329,          /* VAR_DYNLIB_FILE  */
459   YYSYMBOL_VAR_EDNS_CLIENT_STRING = 330,   /* VAR_EDNS_CLIENT_STRING  */
460   YYSYMBOL_VAR_EDNS_CLIENT_STRING_OPCODE = 331, /* VAR_EDNS_CLIENT_STRING_OPCODE  */
461   YYSYMBOL_VAR_NSID = 332,                 /* VAR_NSID  */
462   YYSYMBOL_VAR_ZONEMD_PERMISSIVE_MODE = 333, /* VAR_ZONEMD_PERMISSIVE_MODE  */
463   YYSYMBOL_VAR_ZONEMD_CHECK = 334,         /* VAR_ZONEMD_CHECK  */
464   YYSYMBOL_VAR_ZONEMD_REJECT_ABSENCE = 335, /* VAR_ZONEMD_REJECT_ABSENCE  */
465   YYSYMBOL_VAR_RPZ_SIGNAL_NXDOMAIN_RA = 336, /* VAR_RPZ_SIGNAL_NXDOMAIN_RA  */
466   YYSYMBOL_VAR_INTERFACE_AUTOMATIC_PORTS = 337, /* VAR_INTERFACE_AUTOMATIC_PORTS  */
467   YYSYMBOL_VAR_EDE = 338,                  /* VAR_EDE  */
468   YYSYMBOL_VAR_INTERFACE_ACTION = 339,     /* VAR_INTERFACE_ACTION  */
469   YYSYMBOL_VAR_INTERFACE_VIEW = 340,       /* VAR_INTERFACE_VIEW  */
470   YYSYMBOL_VAR_INTERFACE_TAG = 341,        /* VAR_INTERFACE_TAG  */
471   YYSYMBOL_VAR_INTERFACE_TAG_ACTION = 342, /* VAR_INTERFACE_TAG_ACTION  */
472   YYSYMBOL_VAR_INTERFACE_TAG_DATA = 343,   /* VAR_INTERFACE_TAG_DATA  */
473   YYSYMBOL_VAR_PROXY_PROTOCOL_PORT = 344,  /* VAR_PROXY_PROTOCOL_PORT  */
474   YYSYMBOL_VAR_STATISTICS_INHIBIT_ZERO = 345, /* VAR_STATISTICS_INHIBIT_ZERO  */
475   YYSYMBOL_VAR_HARDEN_UNKNOWN_ADDITIONAL = 346, /* VAR_HARDEN_UNKNOWN_ADDITIONAL  */
476   YYSYMBOL_VAR_DISABLE_EDNS_DO = 347,      /* VAR_DISABLE_EDNS_DO  */
477   YYSYMBOL_VAR_CACHEDB_NO_STORE = 348,     /* VAR_CACHEDB_NO_STORE  */
478   YYSYMBOL_YYACCEPT = 349,                 /* $accept  */
479   YYSYMBOL_toplevelvars = 350,             /* toplevelvars  */
480   YYSYMBOL_toplevelvar = 351,              /* toplevelvar  */
481   YYSYMBOL_force_toplevel = 352,           /* force_toplevel  */
482   YYSYMBOL_serverstart = 353,              /* serverstart  */
483   YYSYMBOL_contents_server = 354,          /* contents_server  */
484   YYSYMBOL_content_server = 355,           /* content_server  */
485   YYSYMBOL_stubstart = 356,                /* stubstart  */
486   YYSYMBOL_contents_stub = 357,            /* contents_stub  */
487   YYSYMBOL_content_stub = 358,             /* content_stub  */
488   YYSYMBOL_forwardstart = 359,             /* forwardstart  */
489   YYSYMBOL_contents_forward = 360,         /* contents_forward  */
490   YYSYMBOL_content_forward = 361,          /* content_forward  */
491   YYSYMBOL_viewstart = 362,                /* viewstart  */
492   YYSYMBOL_contents_view = 363,            /* contents_view  */
493   YYSYMBOL_content_view = 364,             /* content_view  */
494   YYSYMBOL_authstart = 365,                /* authstart  */
495   YYSYMBOL_contents_auth = 366,            /* contents_auth  */
496   YYSYMBOL_content_auth = 367,             /* content_auth  */
497   YYSYMBOL_rpz_tag = 368,                  /* rpz_tag  */
498   YYSYMBOL_rpz_action_override = 369,      /* rpz_action_override  */
499   YYSYMBOL_rpz_cname_override = 370,       /* rpz_cname_override  */
500   YYSYMBOL_rpz_log = 371,                  /* rpz_log  */
501   YYSYMBOL_rpz_log_name = 372,             /* rpz_log_name  */
502   YYSYMBOL_rpz_signal_nxdomain_ra = 373,   /* rpz_signal_nxdomain_ra  */
503   YYSYMBOL_rpzstart = 374,                 /* rpzstart  */
504   YYSYMBOL_contents_rpz = 375,             /* contents_rpz  */
505   YYSYMBOL_content_rpz = 376,              /* content_rpz  */
506   YYSYMBOL_server_num_threads = 377,       /* server_num_threads  */
507   YYSYMBOL_server_verbosity = 378,         /* server_verbosity  */
508   YYSYMBOL_server_statistics_interval = 379, /* server_statistics_interval  */
509   YYSYMBOL_server_statistics_cumulative = 380, /* server_statistics_cumulative  */
510   YYSYMBOL_server_extended_statistics = 381, /* server_extended_statistics  */
511   YYSYMBOL_server_statistics_inhibit_zero = 382, /* server_statistics_inhibit_zero  */
512   YYSYMBOL_server_shm_enable = 383,        /* server_shm_enable  */
513   YYSYMBOL_server_shm_key = 384,           /* server_shm_key  */
514   YYSYMBOL_server_port = 385,              /* server_port  */
515   YYSYMBOL_server_send_client_subnet = 386, /* server_send_client_subnet  */
516   YYSYMBOL_server_client_subnet_zone = 387, /* server_client_subnet_zone  */
517   YYSYMBOL_server_client_subnet_always_forward = 388, /* server_client_subnet_always_forward  */
518   YYSYMBOL_server_client_subnet_opcode = 389, /* server_client_subnet_opcode  */
519   YYSYMBOL_server_max_client_subnet_ipv4 = 390, /* server_max_client_subnet_ipv4  */
520   YYSYMBOL_server_max_client_subnet_ipv6 = 391, /* server_max_client_subnet_ipv6  */
521   YYSYMBOL_server_min_client_subnet_ipv4 = 392, /* server_min_client_subnet_ipv4  */
522   YYSYMBOL_server_min_client_subnet_ipv6 = 393, /* server_min_client_subnet_ipv6  */
523   YYSYMBOL_server_max_ecs_tree_size_ipv4 = 394, /* server_max_ecs_tree_size_ipv4  */
524   YYSYMBOL_server_max_ecs_tree_size_ipv6 = 395, /* server_max_ecs_tree_size_ipv6  */
525   YYSYMBOL_server_interface = 396,         /* server_interface  */
526   YYSYMBOL_server_outgoing_interface = 397, /* server_outgoing_interface  */
527   YYSYMBOL_server_outgoing_range = 398,    /* server_outgoing_range  */
528   YYSYMBOL_server_outgoing_port_permit = 399, /* server_outgoing_port_permit  */
529   YYSYMBOL_server_outgoing_port_avoid = 400, /* server_outgoing_port_avoid  */
530   YYSYMBOL_server_outgoing_num_tcp = 401,  /* server_outgoing_num_tcp  */
531   YYSYMBOL_server_incoming_num_tcp = 402,  /* server_incoming_num_tcp  */
532   YYSYMBOL_server_interface_automatic = 403, /* server_interface_automatic  */
533   YYSYMBOL_server_interface_automatic_ports = 404, /* server_interface_automatic_ports  */
534   YYSYMBOL_server_do_ip4 = 405,            /* server_do_ip4  */
535   YYSYMBOL_server_do_ip6 = 406,            /* server_do_ip6  */
536   YYSYMBOL_server_do_nat64 = 407,          /* server_do_nat64  */
537   YYSYMBOL_server_do_udp = 408,            /* server_do_udp  */
538   YYSYMBOL_server_do_tcp = 409,            /* server_do_tcp  */
539   YYSYMBOL_server_prefer_ip4 = 410,        /* server_prefer_ip4  */
540   YYSYMBOL_server_prefer_ip6 = 411,        /* server_prefer_ip6  */
541   YYSYMBOL_server_tcp_mss = 412,           /* server_tcp_mss  */
542   YYSYMBOL_server_outgoing_tcp_mss = 413,  /* server_outgoing_tcp_mss  */
543   YYSYMBOL_server_tcp_idle_timeout = 414,  /* server_tcp_idle_timeout  */
544   YYSYMBOL_server_max_reuse_tcp_queries = 415, /* server_max_reuse_tcp_queries  */
545   YYSYMBOL_server_tcp_reuse_timeout = 416, /* server_tcp_reuse_timeout  */
546   YYSYMBOL_server_tcp_auth_query_timeout = 417, /* server_tcp_auth_query_timeout  */
547   YYSYMBOL_server_tcp_keepalive = 418,     /* server_tcp_keepalive  */
548   YYSYMBOL_server_tcp_keepalive_timeout = 419, /* server_tcp_keepalive_timeout  */
549   YYSYMBOL_server_sock_queue_timeout = 420, /* server_sock_queue_timeout  */
550   YYSYMBOL_server_tcp_upstream = 421,      /* server_tcp_upstream  */
551   YYSYMBOL_server_udp_upstream_without_downstream = 422, /* server_udp_upstream_without_downstream  */
552   YYSYMBOL_server_ssl_upstream = 423,      /* server_ssl_upstream  */
553   YYSYMBOL_server_ssl_service_key = 424,   /* server_ssl_service_key  */
554   YYSYMBOL_server_ssl_service_pem = 425,   /* server_ssl_service_pem  */
555   YYSYMBOL_server_ssl_port = 426,          /* server_ssl_port  */
556   YYSYMBOL_server_tls_cert_bundle = 427,   /* server_tls_cert_bundle  */
557   YYSYMBOL_server_tls_win_cert = 428,      /* server_tls_win_cert  */
558   YYSYMBOL_server_tls_additional_port = 429, /* server_tls_additional_port  */
559   YYSYMBOL_server_tls_ciphers = 430,       /* server_tls_ciphers  */
560   YYSYMBOL_server_tls_ciphersuites = 431,  /* server_tls_ciphersuites  */
561   YYSYMBOL_server_tls_session_ticket_keys = 432, /* server_tls_session_ticket_keys  */
562   YYSYMBOL_server_tls_use_sni = 433,       /* server_tls_use_sni  */
563   YYSYMBOL_server_https_port = 434,        /* server_https_port  */
564   YYSYMBOL_server_http_endpoint = 435,     /* server_http_endpoint  */
565   YYSYMBOL_server_http_max_streams = 436,  /* server_http_max_streams  */
566   YYSYMBOL_server_http_query_buffer_size = 437, /* server_http_query_buffer_size  */
567   YYSYMBOL_server_http_response_buffer_size = 438, /* server_http_response_buffer_size  */
568   YYSYMBOL_server_http_nodelay = 439,      /* server_http_nodelay  */
569   YYSYMBOL_server_http_notls_downstream = 440, /* server_http_notls_downstream  */
570   YYSYMBOL_server_use_systemd = 441,       /* server_use_systemd  */
571   YYSYMBOL_server_do_daemonize = 442,      /* server_do_daemonize  */
572   YYSYMBOL_server_use_syslog = 443,        /* server_use_syslog  */
573   YYSYMBOL_server_log_time_ascii = 444,    /* server_log_time_ascii  */
574   YYSYMBOL_server_log_queries = 445,       /* server_log_queries  */
575   YYSYMBOL_server_log_replies = 446,       /* server_log_replies  */
576   YYSYMBOL_server_log_tag_queryreply = 447, /* server_log_tag_queryreply  */
577   YYSYMBOL_server_log_servfail = 448,      /* server_log_servfail  */
578   YYSYMBOL_server_log_local_actions = 449, /* server_log_local_actions  */
579   YYSYMBOL_server_chroot = 450,            /* server_chroot  */
580   YYSYMBOL_server_username = 451,          /* server_username  */
581   YYSYMBOL_server_directory = 452,         /* server_directory  */
582   YYSYMBOL_server_logfile = 453,           /* server_logfile  */
583   YYSYMBOL_server_pidfile = 454,           /* server_pidfile  */
584   YYSYMBOL_server_root_hints = 455,        /* server_root_hints  */
585   YYSYMBOL_server_dlv_anchor_file = 456,   /* server_dlv_anchor_file  */
586   YYSYMBOL_server_dlv_anchor = 457,        /* server_dlv_anchor  */
587   YYSYMBOL_server_auto_trust_anchor_file = 458, /* server_auto_trust_anchor_file  */
588   YYSYMBOL_server_trust_anchor_file = 459, /* server_trust_anchor_file  */
589   YYSYMBOL_server_trusted_keys_file = 460, /* server_trusted_keys_file  */
590   YYSYMBOL_server_trust_anchor = 461,      /* server_trust_anchor  */
591   YYSYMBOL_server_trust_anchor_signaling = 462, /* server_trust_anchor_signaling  */
592   YYSYMBOL_server_root_key_sentinel = 463, /* server_root_key_sentinel  */
593   YYSYMBOL_server_domain_insecure = 464,   /* server_domain_insecure  */
594   YYSYMBOL_server_hide_identity = 465,     /* server_hide_identity  */
595   YYSYMBOL_server_hide_version = 466,      /* server_hide_version  */
596   YYSYMBOL_server_hide_trustanchor = 467,  /* server_hide_trustanchor  */
597   YYSYMBOL_server_hide_http_user_agent = 468, /* server_hide_http_user_agent  */
598   YYSYMBOL_server_identity = 469,          /* server_identity  */
599   YYSYMBOL_server_version = 470,           /* server_version  */
600   YYSYMBOL_server_http_user_agent = 471,   /* server_http_user_agent  */
601   YYSYMBOL_server_nsid = 472,              /* server_nsid  */
602   YYSYMBOL_server_so_rcvbuf = 473,         /* server_so_rcvbuf  */
603   YYSYMBOL_server_so_sndbuf = 474,         /* server_so_sndbuf  */
604   YYSYMBOL_server_so_reuseport = 475,      /* server_so_reuseport  */
605   YYSYMBOL_server_ip_transparent = 476,    /* server_ip_transparent  */
606   YYSYMBOL_server_ip_freebind = 477,       /* server_ip_freebind  */
607   YYSYMBOL_server_ip_dscp = 478,           /* server_ip_dscp  */
608   YYSYMBOL_server_stream_wait_size = 479,  /* server_stream_wait_size  */
609   YYSYMBOL_server_edns_buffer_size = 480,  /* server_edns_buffer_size  */
610   YYSYMBOL_server_msg_buffer_size = 481,   /* server_msg_buffer_size  */
611   YYSYMBOL_server_msg_cache_size = 482,    /* server_msg_cache_size  */
612   YYSYMBOL_server_msg_cache_slabs = 483,   /* server_msg_cache_slabs  */
613   YYSYMBOL_server_num_queries_per_thread = 484, /* server_num_queries_per_thread  */
614   YYSYMBOL_server_jostle_timeout = 485,    /* server_jostle_timeout  */
615   YYSYMBOL_server_delay_close = 486,       /* server_delay_close  */
616   YYSYMBOL_server_udp_connect = 487,       /* server_udp_connect  */
617   YYSYMBOL_server_unblock_lan_zones = 488, /* server_unblock_lan_zones  */
618   YYSYMBOL_server_insecure_lan_zones = 489, /* server_insecure_lan_zones  */
619   YYSYMBOL_server_rrset_cache_size = 490,  /* server_rrset_cache_size  */
620   YYSYMBOL_server_rrset_cache_slabs = 491, /* server_rrset_cache_slabs  */
621   YYSYMBOL_server_infra_host_ttl = 492,    /* server_infra_host_ttl  */
622   YYSYMBOL_server_infra_lame_ttl = 493,    /* server_infra_lame_ttl  */
623   YYSYMBOL_server_infra_cache_numhosts = 494, /* server_infra_cache_numhosts  */
624   YYSYMBOL_server_infra_cache_lame_size = 495, /* server_infra_cache_lame_size  */
625   YYSYMBOL_server_infra_cache_slabs = 496, /* server_infra_cache_slabs  */
626   YYSYMBOL_server_infra_cache_min_rtt = 497, /* server_infra_cache_min_rtt  */
627   YYSYMBOL_server_infra_cache_max_rtt = 498, /* server_infra_cache_max_rtt  */
628   YYSYMBOL_server_infra_keep_probing = 499, /* server_infra_keep_probing  */
629   YYSYMBOL_server_target_fetch_policy = 500, /* server_target_fetch_policy  */
630   YYSYMBOL_server_harden_short_bufsize = 501, /* server_harden_short_bufsize  */
631   YYSYMBOL_server_harden_large_queries = 502, /* server_harden_large_queries  */
632   YYSYMBOL_server_harden_glue = 503,       /* server_harden_glue  */
633   YYSYMBOL_server_harden_dnssec_stripped = 504, /* server_harden_dnssec_stripped  */
634   YYSYMBOL_server_harden_below_nxdomain = 505, /* server_harden_below_nxdomain  */
635   YYSYMBOL_server_harden_referral_path = 506, /* server_harden_referral_path  */
636   YYSYMBOL_server_harden_algo_downgrade = 507, /* server_harden_algo_downgrade  */
637   YYSYMBOL_server_harden_unknown_additional = 508, /* server_harden_unknown_additional  */
638   YYSYMBOL_server_use_caps_for_id = 509,   /* server_use_caps_for_id  */
639   YYSYMBOL_server_caps_whitelist = 510,    /* server_caps_whitelist  */
640   YYSYMBOL_server_private_address = 511,   /* server_private_address  */
641   YYSYMBOL_server_private_domain = 512,    /* server_private_domain  */
642   YYSYMBOL_server_prefetch = 513,          /* server_prefetch  */
643   YYSYMBOL_server_prefetch_key = 514,      /* server_prefetch_key  */
644   YYSYMBOL_server_deny_any = 515,          /* server_deny_any  */
645   YYSYMBOL_server_unwanted_reply_threshold = 516, /* server_unwanted_reply_threshold  */
646   YYSYMBOL_server_do_not_query_address = 517, /* server_do_not_query_address  */
647   YYSYMBOL_server_do_not_query_localhost = 518, /* server_do_not_query_localhost  */
648   YYSYMBOL_server_access_control = 519,    /* server_access_control  */
649   YYSYMBOL_server_interface_action = 520,  /* server_interface_action  */
650   YYSYMBOL_server_module_conf = 521,       /* server_module_conf  */
651   YYSYMBOL_server_val_override_date = 522, /* server_val_override_date  */
652   YYSYMBOL_server_val_sig_skew_min = 523,  /* server_val_sig_skew_min  */
653   YYSYMBOL_server_val_sig_skew_max = 524,  /* server_val_sig_skew_max  */
654   YYSYMBOL_server_val_max_restart = 525,   /* server_val_max_restart  */
655   YYSYMBOL_server_cache_max_ttl = 526,     /* server_cache_max_ttl  */
656   YYSYMBOL_server_cache_max_negative_ttl = 527, /* server_cache_max_negative_ttl  */
657   YYSYMBOL_server_cache_min_ttl = 528,     /* server_cache_min_ttl  */
658   YYSYMBOL_server_bogus_ttl = 529,         /* server_bogus_ttl  */
659   YYSYMBOL_server_val_clean_additional = 530, /* server_val_clean_additional  */
660   YYSYMBOL_server_val_permissive_mode = 531, /* server_val_permissive_mode  */
661   YYSYMBOL_server_aggressive_nsec = 532,   /* server_aggressive_nsec  */
662   YYSYMBOL_server_ignore_cd_flag = 533,    /* server_ignore_cd_flag  */
663   YYSYMBOL_server_disable_edns_do = 534,   /* server_disable_edns_do  */
664   YYSYMBOL_server_serve_expired = 535,     /* server_serve_expired  */
665   YYSYMBOL_server_serve_expired_ttl = 536, /* server_serve_expired_ttl  */
666   YYSYMBOL_server_serve_expired_ttl_reset = 537, /* server_serve_expired_ttl_reset  */
667   YYSYMBOL_server_serve_expired_reply_ttl = 538, /* server_serve_expired_reply_ttl  */
668   YYSYMBOL_server_serve_expired_client_timeout = 539, /* server_serve_expired_client_timeout  */
669   YYSYMBOL_server_ede_serve_expired = 540, /* server_ede_serve_expired  */
670   YYSYMBOL_server_serve_original_ttl = 541, /* server_serve_original_ttl  */
671   YYSYMBOL_server_fake_dsa = 542,          /* server_fake_dsa  */
672   YYSYMBOL_server_fake_sha1 = 543,         /* server_fake_sha1  */
673   YYSYMBOL_server_val_log_level = 544,     /* server_val_log_level  */
674   YYSYMBOL_server_val_nsec3_keysize_iterations = 545, /* server_val_nsec3_keysize_iterations  */
675   YYSYMBOL_server_zonemd_permissive_mode = 546, /* server_zonemd_permissive_mode  */
676   YYSYMBOL_server_add_holddown = 547,      /* server_add_holddown  */
677   YYSYMBOL_server_del_holddown = 548,      /* server_del_holddown  */
678   YYSYMBOL_server_keep_missing = 549,      /* server_keep_missing  */
679   YYSYMBOL_server_permit_small_holddown = 550, /* server_permit_small_holddown  */
680   YYSYMBOL_server_key_cache_size = 551,    /* server_key_cache_size  */
681   YYSYMBOL_server_key_cache_slabs = 552,   /* server_key_cache_slabs  */
682   YYSYMBOL_server_neg_cache_size = 553,    /* server_neg_cache_size  */
683   YYSYMBOL_server_local_zone = 554,        /* server_local_zone  */
684   YYSYMBOL_server_local_data = 555,        /* server_local_data  */
685   YYSYMBOL_server_local_data_ptr = 556,    /* server_local_data_ptr  */
686   YYSYMBOL_server_minimal_responses = 557, /* server_minimal_responses  */
687   YYSYMBOL_server_rrset_roundrobin = 558,  /* server_rrset_roundrobin  */
688   YYSYMBOL_server_unknown_server_time_limit = 559, /* server_unknown_server_time_limit  */
689   YYSYMBOL_server_max_udp_size = 560,      /* server_max_udp_size  */
690   YYSYMBOL_server_dns64_prefix = 561,      /* server_dns64_prefix  */
691   YYSYMBOL_server_dns64_synthall = 562,    /* server_dns64_synthall  */
692   YYSYMBOL_server_dns64_ignore_aaaa = 563, /* server_dns64_ignore_aaaa  */
693   YYSYMBOL_server_nat64_prefix = 564,      /* server_nat64_prefix  */
694   YYSYMBOL_server_define_tag = 565,        /* server_define_tag  */
695   YYSYMBOL_server_local_zone_tag = 566,    /* server_local_zone_tag  */
696   YYSYMBOL_server_access_control_tag = 567, /* server_access_control_tag  */
697   YYSYMBOL_server_access_control_tag_action = 568, /* server_access_control_tag_action  */
698   YYSYMBOL_server_access_control_tag_data = 569, /* server_access_control_tag_data  */
699   YYSYMBOL_server_local_zone_override = 570, /* server_local_zone_override  */
700   YYSYMBOL_server_access_control_view = 571, /* server_access_control_view  */
701   YYSYMBOL_server_interface_tag = 572,     /* server_interface_tag  */
702   YYSYMBOL_server_interface_tag_action = 573, /* server_interface_tag_action  */
703   YYSYMBOL_server_interface_tag_data = 574, /* server_interface_tag_data  */
704   YYSYMBOL_server_interface_view = 575,    /* server_interface_view  */
705   YYSYMBOL_server_response_ip_tag = 576,   /* server_response_ip_tag  */
706   YYSYMBOL_server_ip_ratelimit = 577,      /* server_ip_ratelimit  */
707   YYSYMBOL_server_ip_ratelimit_cookie = 578, /* server_ip_ratelimit_cookie  */
708   YYSYMBOL_server_ratelimit = 579,         /* server_ratelimit  */
709   YYSYMBOL_server_ip_ratelimit_size = 580, /* server_ip_ratelimit_size  */
710   YYSYMBOL_server_ratelimit_size = 581,    /* server_ratelimit_size  */
711   YYSYMBOL_server_ip_ratelimit_slabs = 582, /* server_ip_ratelimit_slabs  */
712   YYSYMBOL_server_ratelimit_slabs = 583,   /* server_ratelimit_slabs  */
713   YYSYMBOL_server_ratelimit_for_domain = 584, /* server_ratelimit_for_domain  */
714   YYSYMBOL_server_ratelimit_below_domain = 585, /* server_ratelimit_below_domain  */
715   YYSYMBOL_server_ip_ratelimit_factor = 586, /* server_ip_ratelimit_factor  */
716   YYSYMBOL_server_ratelimit_factor = 587,  /* server_ratelimit_factor  */
717   YYSYMBOL_server_ip_ratelimit_backoff = 588, /* server_ip_ratelimit_backoff  */
718   YYSYMBOL_server_ratelimit_backoff = 589, /* server_ratelimit_backoff  */
719   YYSYMBOL_server_outbound_msg_retry = 590, /* server_outbound_msg_retry  */
720   YYSYMBOL_server_max_sent_count = 591,    /* server_max_sent_count  */
721   YYSYMBOL_server_max_query_restarts = 592, /* server_max_query_restarts  */
722   YYSYMBOL_server_low_rtt = 593,           /* server_low_rtt  */
723   YYSYMBOL_server_fast_server_num = 594,   /* server_fast_server_num  */
724   YYSYMBOL_server_fast_server_permil = 595, /* server_fast_server_permil  */
725   YYSYMBOL_server_qname_minimisation = 596, /* server_qname_minimisation  */
726   YYSYMBOL_server_qname_minimisation_strict = 597, /* server_qname_minimisation_strict  */
727   YYSYMBOL_server_pad_responses = 598,     /* server_pad_responses  */
728   YYSYMBOL_server_pad_responses_block_size = 599, /* server_pad_responses_block_size  */
729   YYSYMBOL_server_pad_queries = 600,       /* server_pad_queries  */
730   YYSYMBOL_server_pad_queries_block_size = 601, /* server_pad_queries_block_size  */
731   YYSYMBOL_server_ipsecmod_enabled = 602,  /* server_ipsecmod_enabled  */
732   YYSYMBOL_server_ipsecmod_ignore_bogus = 603, /* server_ipsecmod_ignore_bogus  */
733   YYSYMBOL_server_ipsecmod_hook = 604,     /* server_ipsecmod_hook  */
734   YYSYMBOL_server_ipsecmod_max_ttl = 605,  /* server_ipsecmod_max_ttl  */
735   YYSYMBOL_server_ipsecmod_whitelist = 606, /* server_ipsecmod_whitelist  */
736   YYSYMBOL_server_ipsecmod_strict = 607,   /* server_ipsecmod_strict  */
737   YYSYMBOL_server_edns_client_string = 608, /* server_edns_client_string  */
738   YYSYMBOL_server_edns_client_string_opcode = 609, /* server_edns_client_string_opcode  */
739   YYSYMBOL_server_ede = 610,               /* server_ede  */
740   YYSYMBOL_server_proxy_protocol_port = 611, /* server_proxy_protocol_port  */
741   YYSYMBOL_stub_name = 612,                /* stub_name  */
742   YYSYMBOL_stub_host = 613,                /* stub_host  */
743   YYSYMBOL_stub_addr = 614,                /* stub_addr  */
744   YYSYMBOL_stub_first = 615,               /* stub_first  */
745   YYSYMBOL_stub_no_cache = 616,            /* stub_no_cache  */
746   YYSYMBOL_stub_ssl_upstream = 617,        /* stub_ssl_upstream  */
747   YYSYMBOL_stub_tcp_upstream = 618,        /* stub_tcp_upstream  */
748   YYSYMBOL_stub_prime = 619,               /* stub_prime  */
749   YYSYMBOL_forward_name = 620,             /* forward_name  */
750   YYSYMBOL_forward_host = 621,             /* forward_host  */
751   YYSYMBOL_forward_addr = 622,             /* forward_addr  */
752   YYSYMBOL_forward_first = 623,            /* forward_first  */
753   YYSYMBOL_forward_no_cache = 624,         /* forward_no_cache  */
754   YYSYMBOL_forward_ssl_upstream = 625,     /* forward_ssl_upstream  */
755   YYSYMBOL_forward_tcp_upstream = 626,     /* forward_tcp_upstream  */
756   YYSYMBOL_auth_name = 627,                /* auth_name  */
757   YYSYMBOL_auth_zonefile = 628,            /* auth_zonefile  */
758   YYSYMBOL_auth_master = 629,              /* auth_master  */
759   YYSYMBOL_auth_url = 630,                 /* auth_url  */
760   YYSYMBOL_auth_allow_notify = 631,        /* auth_allow_notify  */
761   YYSYMBOL_auth_zonemd_check = 632,        /* auth_zonemd_check  */
762   YYSYMBOL_auth_zonemd_reject_absence = 633, /* auth_zonemd_reject_absence  */
763   YYSYMBOL_auth_for_downstream = 634,      /* auth_for_downstream  */
764   YYSYMBOL_auth_for_upstream = 635,        /* auth_for_upstream  */
765   YYSYMBOL_auth_fallback_enabled = 636,    /* auth_fallback_enabled  */
766   YYSYMBOL_view_name = 637,                /* view_name  */
767   YYSYMBOL_view_local_zone = 638,          /* view_local_zone  */
768   YYSYMBOL_view_response_ip = 639,         /* view_response_ip  */
769   YYSYMBOL_view_response_ip_data = 640,    /* view_response_ip_data  */
770   YYSYMBOL_view_local_data = 641,          /* view_local_data  */
771   YYSYMBOL_view_local_data_ptr = 642,      /* view_local_data_ptr  */
772   YYSYMBOL_view_first = 643,               /* view_first  */
773   YYSYMBOL_rcstart = 644,                  /* rcstart  */
774   YYSYMBOL_contents_rc = 645,              /* contents_rc  */
775   YYSYMBOL_content_rc = 646,               /* content_rc  */
776   YYSYMBOL_rc_control_enable = 647,        /* rc_control_enable  */
777   YYSYMBOL_rc_control_port = 648,          /* rc_control_port  */
778   YYSYMBOL_rc_control_interface = 649,     /* rc_control_interface  */
779   YYSYMBOL_rc_control_use_cert = 650,      /* rc_control_use_cert  */
780   YYSYMBOL_rc_server_key_file = 651,       /* rc_server_key_file  */
781   YYSYMBOL_rc_server_cert_file = 652,      /* rc_server_cert_file  */
782   YYSYMBOL_rc_control_key_file = 653,      /* rc_control_key_file  */
783   YYSYMBOL_rc_control_cert_file = 654,     /* rc_control_cert_file  */
784   YYSYMBOL_dtstart = 655,                  /* dtstart  */
785   YYSYMBOL_contents_dt = 656,              /* contents_dt  */
786   YYSYMBOL_content_dt = 657,               /* content_dt  */
787   YYSYMBOL_dt_dnstap_enable = 658,         /* dt_dnstap_enable  */
788   YYSYMBOL_dt_dnstap_bidirectional = 659,  /* dt_dnstap_bidirectional  */
789   YYSYMBOL_dt_dnstap_socket_path = 660,    /* dt_dnstap_socket_path  */
790   YYSYMBOL_dt_dnstap_ip = 661,             /* dt_dnstap_ip  */
791   YYSYMBOL_dt_dnstap_tls = 662,            /* dt_dnstap_tls  */
792   YYSYMBOL_dt_dnstap_tls_server_name = 663, /* dt_dnstap_tls_server_name  */
793   YYSYMBOL_dt_dnstap_tls_cert_bundle = 664, /* dt_dnstap_tls_cert_bundle  */
794   YYSYMBOL_dt_dnstap_tls_client_key_file = 665, /* dt_dnstap_tls_client_key_file  */
795   YYSYMBOL_dt_dnstap_tls_client_cert_file = 666, /* dt_dnstap_tls_client_cert_file  */
796   YYSYMBOL_dt_dnstap_send_identity = 667,  /* dt_dnstap_send_identity  */
797   YYSYMBOL_dt_dnstap_send_version = 668,   /* dt_dnstap_send_version  */
798   YYSYMBOL_dt_dnstap_identity = 669,       /* dt_dnstap_identity  */
799   YYSYMBOL_dt_dnstap_version = 670,        /* dt_dnstap_version  */
800   YYSYMBOL_dt_dnstap_log_resolver_query_messages = 671, /* dt_dnstap_log_resolver_query_messages  */
801   YYSYMBOL_dt_dnstap_log_resolver_response_messages = 672, /* dt_dnstap_log_resolver_response_messages  */
802   YYSYMBOL_dt_dnstap_log_client_query_messages = 673, /* dt_dnstap_log_client_query_messages  */
803   YYSYMBOL_dt_dnstap_log_client_response_messages = 674, /* dt_dnstap_log_client_response_messages  */
804   YYSYMBOL_dt_dnstap_log_forwarder_query_messages = 675, /* dt_dnstap_log_forwarder_query_messages  */
805   YYSYMBOL_dt_dnstap_log_forwarder_response_messages = 676, /* dt_dnstap_log_forwarder_response_messages  */
806   YYSYMBOL_pythonstart = 677,              /* pythonstart  */
807   YYSYMBOL_contents_py = 678,              /* contents_py  */
808   YYSYMBOL_content_py = 679,               /* content_py  */
809   YYSYMBOL_py_script = 680,                /* py_script  */
810   YYSYMBOL_dynlibstart = 681,              /* dynlibstart  */
811   YYSYMBOL_contents_dl = 682,              /* contents_dl  */
812   YYSYMBOL_content_dl = 683,               /* content_dl  */
813   YYSYMBOL_dl_file = 684,                  /* dl_file  */
814   YYSYMBOL_server_disable_dnssec_lame_check = 685, /* server_disable_dnssec_lame_check  */
815   YYSYMBOL_server_log_identity = 686,      /* server_log_identity  */
816   YYSYMBOL_server_response_ip = 687,       /* server_response_ip  */
817   YYSYMBOL_server_response_ip_data = 688,  /* server_response_ip_data  */
818   YYSYMBOL_dnscstart = 689,                /* dnscstart  */
819   YYSYMBOL_contents_dnsc = 690,            /* contents_dnsc  */
820   YYSYMBOL_content_dnsc = 691,             /* content_dnsc  */
821   YYSYMBOL_dnsc_dnscrypt_enable = 692,     /* dnsc_dnscrypt_enable  */
822   YYSYMBOL_dnsc_dnscrypt_port = 693,       /* dnsc_dnscrypt_port  */
823   YYSYMBOL_dnsc_dnscrypt_provider = 694,   /* dnsc_dnscrypt_provider  */
824   YYSYMBOL_dnsc_dnscrypt_provider_cert = 695, /* dnsc_dnscrypt_provider_cert  */
825   YYSYMBOL_dnsc_dnscrypt_provider_cert_rotated = 696, /* dnsc_dnscrypt_provider_cert_rotated  */
826   YYSYMBOL_dnsc_dnscrypt_secret_key = 697, /* dnsc_dnscrypt_secret_key  */
827   YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_size = 698, /* dnsc_dnscrypt_shared_secret_cache_size  */
828   YYSYMBOL_dnsc_dnscrypt_shared_secret_cache_slabs = 699, /* dnsc_dnscrypt_shared_secret_cache_slabs  */
829   YYSYMBOL_dnsc_dnscrypt_nonce_cache_size = 700, /* dnsc_dnscrypt_nonce_cache_size  */
830   YYSYMBOL_dnsc_dnscrypt_nonce_cache_slabs = 701, /* dnsc_dnscrypt_nonce_cache_slabs  */
831   YYSYMBOL_cachedbstart = 702,             /* cachedbstart  */
832   YYSYMBOL_contents_cachedb = 703,         /* contents_cachedb  */
833   YYSYMBOL_content_cachedb = 704,          /* content_cachedb  */
834   YYSYMBOL_cachedb_backend_name = 705,     /* cachedb_backend_name  */
835   YYSYMBOL_cachedb_secret_seed = 706,      /* cachedb_secret_seed  */
836   YYSYMBOL_cachedb_no_store = 707,         /* cachedb_no_store  */
837   YYSYMBOL_redis_server_host = 708,        /* redis_server_host  */
838   YYSYMBOL_redis_server_port = 709,        /* redis_server_port  */
839   YYSYMBOL_redis_server_path = 710,        /* redis_server_path  */
840   YYSYMBOL_redis_server_password = 711,    /* redis_server_password  */
841   YYSYMBOL_redis_timeout = 712,            /* redis_timeout  */
842   YYSYMBOL_redis_expire_records = 713,     /* redis_expire_records  */
843   YYSYMBOL_redis_logical_db = 714,         /* redis_logical_db  */
844   YYSYMBOL_server_tcp_connection_limit = 715, /* server_tcp_connection_limit  */
845   YYSYMBOL_server_answer_cookie = 716,     /* server_answer_cookie  */
846   YYSYMBOL_server_cookie_secret = 717,     /* server_cookie_secret  */
847   YYSYMBOL_ipsetstart = 718,               /* ipsetstart  */
848   YYSYMBOL_contents_ipset = 719,           /* contents_ipset  */
849   YYSYMBOL_content_ipset = 720,            /* content_ipset  */
850   YYSYMBOL_ipset_name_v4 = 721,            /* ipset_name_v4  */
851   YYSYMBOL_ipset_name_v6 = 722             /* ipset_name_v6  */
852 };
853 typedef enum yysymbol_kind_t yysymbol_kind_t;
854
855
856
857
858 #ifdef short
859 # undef short
860 #endif
861
862 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
863    <limits.h> and (if available) <stdint.h> are included
864    so that the code can choose integer types of a good width.  */
865
866 #ifndef __PTRDIFF_MAX__
867 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
868 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
869 #  include <stdint.h> /* INFRINGES ON USER NAME SPACE */
870 #  define YY_STDINT_H
871 # endif
872 #endif
873
874 /* Narrow types that promote to a signed type and that can represent a
875    signed or unsigned integer of at least N bits.  In tables they can
876    save space and decrease cache pressure.  Promoting to a signed type
877    helps avoid bugs in integer arithmetic.  */
878
879 #ifdef __INT_LEAST8_MAX__
880 typedef __INT_LEAST8_TYPE__ yytype_int8;
881 #elif defined YY_STDINT_H
882 typedef int_least8_t yytype_int8;
883 #else
884 typedef signed char yytype_int8;
885 #endif
886
887 #ifdef __INT_LEAST16_MAX__
888 typedef __INT_LEAST16_TYPE__ yytype_int16;
889 #elif defined YY_STDINT_H
890 typedef int_least16_t yytype_int16;
891 #else
892 typedef short yytype_int16;
893 #endif
894
895 /* Work around bug in HP-UX 11.23, which defines these macros
896    incorrectly for preprocessor constants.  This workaround can likely
897    be removed in 2023, as HPE has promised support for HP-UX 11.23
898    (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
899    <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
900 #ifdef __hpux
901 # undef UINT_LEAST8_MAX
902 # undef UINT_LEAST16_MAX
903 # define UINT_LEAST8_MAX 255
904 # define UINT_LEAST16_MAX 65535
905 #endif
906
907 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
908 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
909 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
910        && UINT_LEAST8_MAX <= INT_MAX)
911 typedef uint_least8_t yytype_uint8;
912 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
913 typedef unsigned char yytype_uint8;
914 #else
915 typedef short yytype_uint8;
916 #endif
917
918 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
919 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
920 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
921        && UINT_LEAST16_MAX <= INT_MAX)
922 typedef uint_least16_t yytype_uint16;
923 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
924 typedef unsigned short yytype_uint16;
925 #else
926 typedef int yytype_uint16;
927 #endif
928
929 #ifndef YYPTRDIFF_T
930 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
931 #  define YYPTRDIFF_T __PTRDIFF_TYPE__
932 #  define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
933 # elif defined PTRDIFF_MAX
934 #  ifndef ptrdiff_t
935 #   include <stddef.h> /* INFRINGES ON USER NAME SPACE */
936 #  endif
937 #  define YYPTRDIFF_T ptrdiff_t
938 #  define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
939 # else
940 #  define YYPTRDIFF_T long
941 #  define YYPTRDIFF_MAXIMUM LONG_MAX
942 # endif
943 #endif
944
945 #ifndef YYSIZE_T
946 # ifdef __SIZE_TYPE__
947 #  define YYSIZE_T __SIZE_TYPE__
948 # elif defined size_t
949 #  define YYSIZE_T size_t
950 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
951 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
952 #  define YYSIZE_T size_t
953 # else
954 #  define YYSIZE_T unsigned
955 # endif
956 #endif
957
958 #define YYSIZE_MAXIMUM                                  \
959   YY_CAST (YYPTRDIFF_T,                                 \
960            (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1)  \
961             ? YYPTRDIFF_MAXIMUM                         \
962             : YY_CAST (YYSIZE_T, -1)))
963
964 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
965
966
967 /* Stored state numbers (used for stacks). */
968 typedef yytype_int16 yy_state_t;
969
970 /* State numbers in computations.  */
971 typedef int yy_state_fast_t;
972
973 #ifndef YY_
974 # if defined YYENABLE_NLS && YYENABLE_NLS
975 #  if ENABLE_NLS
976 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
977 #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
978 #  endif
979 # endif
980 # ifndef YY_
981 #  define YY_(Msgid) Msgid
982 # endif
983 #endif
984
985
986 #ifndef YY_ATTRIBUTE_PURE
987 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
988 #  define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
989 # else
990 #  define YY_ATTRIBUTE_PURE
991 # endif
992 #endif
993
994 #ifndef YY_ATTRIBUTE_UNUSED
995 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
996 #  define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
997 # else
998 #  define YY_ATTRIBUTE_UNUSED
999 # endif
1000 #endif
1001
1002 /* Suppress unused-variable warnings by "using" E.  */
1003 #if ! defined lint || defined __GNUC__
1004 # define YY_USE(E) ((void) (E))
1005 #else
1006 # define YY_USE(E) /* empty */
1007 #endif
1008
1009 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
1010 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
1011 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
1012     _Pragma ("GCC diagnostic push")                                     \
1013     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
1014     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1015 # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
1016     _Pragma ("GCC diagnostic pop")
1017 #else
1018 # define YY_INITIAL_VALUE(Value) Value
1019 #endif
1020 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1021 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1022 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
1023 #endif
1024 #ifndef YY_INITIAL_VALUE
1025 # define YY_INITIAL_VALUE(Value) /* Nothing. */
1026 #endif
1027
1028 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1029 # define YY_IGNORE_USELESS_CAST_BEGIN                          \
1030     _Pragma ("GCC diagnostic push")                            \
1031     _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1032 # define YY_IGNORE_USELESS_CAST_END            \
1033     _Pragma ("GCC diagnostic pop")
1034 #endif
1035 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
1036 # define YY_IGNORE_USELESS_CAST_BEGIN
1037 # define YY_IGNORE_USELESS_CAST_END
1038 #endif
1039
1040
1041 #define YY_ASSERT(E) ((void) (0 && (E)))
1042
1043 #if !defined yyoverflow
1044
1045 /* The parser invokes alloca or malloc; define the necessary symbols.  */
1046
1047 # ifdef YYSTACK_USE_ALLOCA
1048 #  if YYSTACK_USE_ALLOCA
1049 #   ifdef __GNUC__
1050 #    define YYSTACK_ALLOC __builtin_alloca
1051 #   elif defined __BUILTIN_VA_ARG_INCR
1052 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1053 #   elif defined _AIX
1054 #    define YYSTACK_ALLOC __alloca
1055 #   elif defined _MSC_VER
1056 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1057 #    define alloca _alloca
1058 #   else
1059 #    define YYSTACK_ALLOC alloca
1060 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1061 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1062       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
1063 #     ifndef EXIT_SUCCESS
1064 #      define EXIT_SUCCESS 0
1065 #     endif
1066 #    endif
1067 #   endif
1068 #  endif
1069 # endif
1070
1071 # ifdef YYSTACK_ALLOC
1072    /* Pacify GCC's 'empty if-body' warning.  */
1073 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1074 #  ifndef YYSTACK_ALLOC_MAXIMUM
1075     /* The OS might guarantee only one guard page at the bottom of the stack,
1076        and a page size can be as small as 4096 bytes.  So we cannot safely
1077        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
1078        to allow for a few compiler-allocated temporary stack slots.  */
1079 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1080 #  endif
1081 # else
1082 #  define YYSTACK_ALLOC YYMALLOC
1083 #  define YYSTACK_FREE YYFREE
1084 #  ifndef YYSTACK_ALLOC_MAXIMUM
1085 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1086 #  endif
1087 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
1088        && ! ((defined YYMALLOC || defined malloc) \
1089              && (defined YYFREE || defined free)))
1090 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1091 #   ifndef EXIT_SUCCESS
1092 #    define EXIT_SUCCESS 0
1093 #   endif
1094 #  endif
1095 #  ifndef YYMALLOC
1096 #   define YYMALLOC malloc
1097 #   if ! defined malloc && ! defined EXIT_SUCCESS
1098 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1099 #   endif
1100 #  endif
1101 #  ifndef YYFREE
1102 #   define YYFREE free
1103 #   if ! defined free && ! defined EXIT_SUCCESS
1104 void free (void *); /* INFRINGES ON USER NAME SPACE */
1105 #   endif
1106 #  endif
1107 # endif
1108 #endif /* !defined yyoverflow */
1109
1110 #if (! defined yyoverflow \
1111      && (! defined __cplusplus \
1112          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1113
1114 /* A type that is properly aligned for any stack member.  */
1115 union yyalloc
1116 {
1117   yy_state_t yyss_alloc;
1118   YYSTYPE yyvs_alloc;
1119 };
1120
1121 /* The size of the maximum gap between one aligned stack and the next.  */
1122 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1123
1124 /* The size of an array large to enough to hold all stacks, each with
1125    N elements.  */
1126 # define YYSTACK_BYTES(N) \
1127      ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1128       + YYSTACK_GAP_MAXIMUM)
1129
1130 # define YYCOPY_NEEDED 1
1131
1132 /* Relocate STACK from its old location to the new one.  The
1133    local variables YYSIZE and YYSTACKSIZE give the old and new number of
1134    elements in the stack, and YYPTR gives the new location of the
1135    stack.  Advance YYPTR to a properly aligned location for the next
1136    stack.  */
1137 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
1138     do                                                                  \
1139       {                                                                 \
1140         YYPTRDIFF_T yynewbytes;                                         \
1141         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
1142         Stack = &yyptr->Stack_alloc;                                    \
1143         yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1144         yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
1145       }                                                                 \
1146     while (0)
1147
1148 #endif
1149
1150 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1151 /* Copy COUNT objects from SRC to DST.  The source and destination do
1152    not overlap.  */
1153 # ifndef YYCOPY
1154 #  if defined __GNUC__ && 1 < __GNUC__
1155 #   define YYCOPY(Dst, Src, Count) \
1156       __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1157 #  else
1158 #   define YYCOPY(Dst, Src, Count)              \
1159       do                                        \
1160         {                                       \
1161           YYPTRDIFF_T yyi;                      \
1162           for (yyi = 0; yyi < (Count); yyi++)   \
1163             (Dst)[yyi] = (Src)[yyi];            \
1164         }                                       \
1165       while (0)
1166 #  endif
1167 # endif
1168 #endif /* !YYCOPY_NEEDED */
1169
1170 /* YYFINAL -- State number of the termination state.  */
1171 #define YYFINAL  2
1172 /* YYLAST -- Last index in YYTABLE.  */
1173 #define YYLAST   744
1174
1175 /* YYNTOKENS -- Number of terminals.  */
1176 #define YYNTOKENS  349
1177 /* YYNNTS -- Number of nonterminals.  */
1178 #define YYNNTS  374
1179 /* YYNRULES -- Number of rules.  */
1180 #define YYNRULES  725
1181 /* YYNSTATES -- Number of states.  */
1182 #define YYNSTATES  1085
1183
1184 /* YYMAXUTOK -- Last valid token kind.  */
1185 #define YYMAXUTOK   603
1186
1187
1188 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1189    as returned by yylex, with out-of-bounds checking.  */
1190 #define YYTRANSLATE(YYX)                                \
1191   (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
1192    ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
1193    : YYSYMBOL_YYUNDEF)
1194
1195 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1196    as returned by yylex.  */
1197 static const yytype_int16 yytranslate[] =
1198 {
1199        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1200        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1201        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1202        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1203        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1204        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1205        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1206        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1207        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1208        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1209        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1210        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1211        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1212        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1213        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1214        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1215        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1216        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1217        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1218        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1219        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1220        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1221        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1222        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1223        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
1224        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
1225        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
1226       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
1227       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
1228       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
1229       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
1230       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
1231       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
1232       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
1233       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
1234       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
1235      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
1236      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
1237      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
1238      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
1239      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
1240      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
1241      165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
1242      175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
1243      185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
1244      195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
1245      205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
1246      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
1247      225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
1248      235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
1249      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
1250      255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1251      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1252      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1253      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1254      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1255      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1256      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1257      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1258      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1259      345,   346,   347,   348
1260 };
1261
1262 #if YYDEBUG
1263   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
1264 static const yytype_int16 yyrline[] =
1265 {
1266        0,   205,   205,   205,   206,   206,   207,   207,   208,   208,
1267      208,   209,   209,   210,   210,   211,   211,   212,   214,   221,
1268      227,   228,   229,   229,   229,   230,   230,   231,   231,   231,
1269      232,   232,   232,   233,   233,   233,   234,   234,   235,   236,
1270      236,   236,   237,   237,   237,   238,   238,   239,   239,   240,
1271      240,   241,   241,   242,   242,   243,   243,   244,   244,   245,
1272      245,   246,   246,   246,   247,   247,   248,   248,   248,   249,
1273      249,   249,   250,   250,   251,   251,   252,   252,   253,   253,
1274      254,   254,   254,   255,   255,   256,   256,   257,   257,   257,
1275      258,   258,   259,   259,   260,   260,   261,   261,   261,   262,
1276      262,   263,   263,   264,   264,   265,   265,   266,   266,   267,
1277      267,   268,   268,   269,   269,   270,   270,   270,   271,   271,
1278      271,   272,   272,   272,   273,   273,   273,   273,   274,   275,
1279      275,   275,   276,   276,   276,   277,   277,   278,   278,   279,
1280      279,   279,   280,   280,   280,   281,   281,   282,   282,   282,
1281      283,   284,   284,   284,   285,   285,   285,   286,   286,   287,
1282      287,   288,   288,   289,   290,   290,   291,   291,   292,   292,
1283      293,   293,   294,   294,   295,   295,   296,   296,   297,   297,
1284      298,   298,   299,   299,   300,   300,   301,   301,   301,   302,
1285      302,   303,   303,   304,   304,   305,   305,   305,   306,   306,
1286      307,   308,   308,   309,   309,   310,   311,   311,   312,   312,
1287      313,   313,   313,   314,   314,   315,   315,   315,   316,   316,
1288      316,   317,   317,   318,   319,   319,   320,   320,   321,   321,
1289      322,   322,   323,   323,   323,   324,   324,   324,   325,   325,
1290      325,   326,   326,   327,   327,   328,   328,   329,   329,   329,
1291      330,   330,   331,   331,   332,   332,   333,   333,   334,   334,
1292      335,   335,   336,   336,   338,   352,   353,   354,   354,   354,
1293      354,   354,   355,   355,   355,   357,   371,   372,   373,   373,
1294      373,   373,   374,   374,   374,   376,   392,   393,   394,   394,
1295      394,   394,   395,   395,   395,   397,   418,   419,   420,   420,
1296      420,   420,   421,   421,   421,   422,   422,   422,   425,   444,
1297      461,   469,   479,   486,   496,   515,   516,   517,   517,   517,
1298      517,   517,   518,   518,   518,   519,   519,   519,   519,   521,
1299      530,   539,   550,   559,   568,   577,   586,   597,   606,   618,
1300      632,   647,   658,   675,   692,   709,   726,   741,   756,   769,
1301      784,   793,   802,   811,   820,   829,   838,   845,   854,   863,
1302      872,   881,   890,   899,   908,   917,   926,   939,   950,   961,
1303      972,   981,   994,  1007,  1016,  1025,  1034,  1041,  1048,  1057,
1304     1064,  1073,  1081,  1088,  1095,  1103,  1112,  1120,  1136,  1144,
1305     1152,  1160,  1168,  1176,  1185,  1194,  1208,  1217,  1226,  1235,
1306     1244,  1253,  1262,  1269,  1276,  1302,  1310,  1317,  1324,  1331,
1307     1338,  1346,  1354,  1362,  1369,  1380,  1391,  1398,  1407,  1416,
1308     1425,  1434,  1441,  1448,  1455,  1471,  1479,  1487,  1497,  1507,
1309     1517,  1531,  1539,  1552,  1563,  1571,  1584,  1593,  1602,  1611,
1310     1620,  1630,  1640,  1648,  1661,  1670,  1678,  1687,  1695,  1708,
1311     1717,  1726,  1736,  1743,  1753,  1763,  1773,  1783,  1793,  1803,
1312     1813,  1823,  1833,  1840,  1847,  1854,  1863,  1872,  1881,  1890,
1313     1897,  1907,  1915,  1924,  1931,  1949,  1962,  1975,  1988,  1997,
1314     2006,  2015,  2024,  2034,  2044,  2055,  2064,  2073,  2082,  2091,
1315     2100,  2109,  2118,  2127,  2136,  2149,  2162,  2171,  2178,  2187,
1316     2196,  2205,  2214,  2224,  2232,  2245,  2253,  2309,  2316,  2331,
1317     2341,  2351,  2358,  2365,  2372,  2381,  2389,  2396,  2410,  2431,
1318     2452,  2464,  2476,  2488,  2497,  2518,  2530,  2542,  2551,  2572,
1319     2581,  2590,  2599,  2607,  2615,  2628,  2641,  2656,  2671,  2680,
1320     2689,  2699,  2709,  2718,  2727,  2736,  2742,  2751,  2760,  2770,
1321     2780,  2790,  2799,  2809,  2818,  2831,  2844,  2856,  2870,  2882,
1322     2896,  2905,  2916,  2925,  2932,  2942,  2949,  2956,  2965,  2974,
1323     2984,  2994,  3004,  3014,  3021,  3028,  3037,  3046,  3056,  3066,
1324     3076,  3083,  3090,  3097,  3105,  3115,  3125,  3135,  3145,  3155,
1325     3165,  3221,  3231,  3239,  3247,  3262,  3271,  3277,  3278,  3279,
1326     3279,  3279,  3280,  3280,  3280,  3281,  3281,  3283,  3293,  3302,
1327     3309,  3316,  3323,  3330,  3337,  3344,  3350,  3351,  3352,  3352,
1328     3352,  3353,  3353,  3353,  3354,  3355,  3355,  3356,  3356,  3357,
1329     3357,  3358,  3359,  3360,  3361,  3362,  3363,  3365,  3374,  3384,
1330     3391,  3398,  3407,  3414,  3421,  3428,  3435,  3444,  3453,  3460,
1331     3467,  3477,  3487,  3497,  3507,  3517,  3527,  3533,  3534,  3535,
1332     3537,  3544,  3550,  3551,  3552,  3554,  3561,  3571,  3578,  3587,
1333     3595,  3601,  3602,  3604,  3604,  3604,  3605,  3605,  3606,  3607,
1334     3608,  3609,  3610,  3612,  3621,  3630,  3637,  3646,  3653,  3662,
1335     3670,  3683,  3691,  3704,  3710,  3711,  3712,  3712,  3713,  3713,
1336     3713,  3714,  3714,  3714,  3715,  3715,  3717,  3729,  3741,  3754,
1337     3766,  3781,  3793,  3805,  3818,  3831,  3846,  3857,  3866,  3882,
1338     3888,  3889,  3890,  3890,  3892,  3907
1339 };
1340 #endif
1341
1342 /** Accessing symbol of state STATE.  */
1343 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1344
1345 #if YYDEBUG || 0
1346 /* The user-facing name of the symbol whose (internal) number is
1347    YYSYMBOL.  No bounds checking.  */
1348 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1349
1350 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1351    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
1352 static const char *const yytname[] =
1353 {
1354   "\"end of file\"", "error", "\"invalid token\"", "SPACE", "LETTER",
1355   "NEWLINE", "COMMENT", "COLON", "ANY", "ZONESTR", "STRING_ARG",
1356   "VAR_FORCE_TOPLEVEL", "VAR_SERVER", "VAR_VERBOSITY", "VAR_NUM_THREADS",
1357   "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE", "VAR_PREFER_IP4",
1358   "VAR_DO_IP4", "VAR_DO_IP6", "VAR_DO_NAT64", "VAR_PREFER_IP6",
1359   "VAR_DO_UDP", "VAR_DO_TCP", "VAR_TCP_MSS", "VAR_OUTGOING_TCP_MSS",
1360   "VAR_TCP_IDLE_TIMEOUT", "VAR_EDNS_TCP_KEEPALIVE",
1361   "VAR_EDNS_TCP_KEEPALIVE_TIMEOUT", "VAR_SOCK_QUEUE_TIMEOUT", "VAR_CHROOT",
1362   "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
1363   "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
1364   "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
1365   "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
1366   "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
1367   "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
1368   "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
1369   "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
1370   "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
1371   "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
1372   "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
1373   "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
1374   "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
1375   "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
1376   "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
1377   "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
1378   "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
1379   "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNSSEC_STRIPPED", "VAR_ACCESS_CONTROL",
1380   "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
1381   "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
1382   "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
1383   "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
1384   "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
1385   "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
1386   "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
1387   "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
1388   "VAR_CONTROL_USE_CERT", "VAR_TCP_REUSE_TIMEOUT",
1389   "VAR_MAX_REUSE_TCP_QUERIES", "VAR_EXTENDED_STATISTICS",
1390   "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT", "VAR_STUB_PRIME",
1391   "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
1392   "VAR_DOMAIN_INSECURE", "VAR_PYTHON", "VAR_PYTHON_SCRIPT",
1393   "VAR_VAL_SIG_SKEW_MIN", "VAR_VAL_SIG_SKEW_MAX", "VAR_VAL_MAX_RESTART",
1394   "VAR_CACHE_MIN_TTL", "VAR_VAL_LOG_LEVEL", "VAR_AUTO_TRUST_ANCHOR_FILE",
1395   "VAR_KEEP_MISSING", "VAR_ADD_HOLDDOWN", "VAR_DEL_HOLDDOWN",
1396   "VAR_SO_RCVBUF", "VAR_EDNS_BUFFER_SIZE", "VAR_PREFETCH",
1397   "VAR_PREFETCH_KEY", "VAR_SO_SNDBUF", "VAR_SO_REUSEPORT",
1398   "VAR_HARDEN_BELOW_NXDOMAIN", "VAR_IGNORE_CD_FLAG", "VAR_LOG_QUERIES",
1399   "VAR_LOG_REPLIES", "VAR_LOG_LOCAL_ACTIONS", "VAR_TCP_UPSTREAM",
1400   "VAR_SSL_UPSTREAM", "VAR_TCP_AUTH_QUERY_TIMEOUT", "VAR_SSL_SERVICE_KEY",
1401   "VAR_SSL_SERVICE_PEM", "VAR_SSL_PORT", "VAR_FORWARD_FIRST",
1402   "VAR_STUB_SSL_UPSTREAM", "VAR_FORWARD_SSL_UPSTREAM",
1403   "VAR_TLS_CERT_BUNDLE", "VAR_STUB_TCP_UPSTREAM",
1404   "VAR_FORWARD_TCP_UPSTREAM", "VAR_HTTPS_PORT", "VAR_HTTP_ENDPOINT",
1405   "VAR_HTTP_MAX_STREAMS", "VAR_HTTP_QUERY_BUFFER_SIZE",
1406   "VAR_HTTP_RESPONSE_BUFFER_SIZE", "VAR_HTTP_NODELAY",
1407   "VAR_HTTP_NOTLS_DOWNSTREAM", "VAR_STUB_FIRST", "VAR_MINIMAL_RESPONSES",
1408   "VAR_RRSET_ROUNDROBIN", "VAR_MAX_UDP_SIZE", "VAR_DELAY_CLOSE",
1409   "VAR_UDP_CONNECT", "VAR_UNBLOCK_LAN_ZONES", "VAR_INSECURE_LAN_ZONES",
1410   "VAR_INFRA_CACHE_MIN_RTT", "VAR_INFRA_CACHE_MAX_RTT",
1411   "VAR_INFRA_KEEP_PROBING", "VAR_DNS64_PREFIX", "VAR_DNS64_SYNTHALL",
1412   "VAR_DNS64_IGNORE_AAAA", "VAR_NAT64_PREFIX", "VAR_DNSTAP",
1413   "VAR_DNSTAP_ENABLE", "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_IP",
1414   "VAR_DNSTAP_TLS", "VAR_DNSTAP_TLS_SERVER_NAME",
1415   "VAR_DNSTAP_TLS_CERT_BUNDLE", "VAR_DNSTAP_TLS_CLIENT_KEY_FILE",
1416   "VAR_DNSTAP_TLS_CLIENT_CERT_FILE", "VAR_DNSTAP_SEND_IDENTITY",
1417   "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_BIDIRECTIONAL",
1418   "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
1419   "VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES",
1420   "VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES",
1421   "VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES",
1422   "VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES",
1423   "VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES",
1424   "VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES", "VAR_RESPONSE_IP_TAG",
1425   "VAR_RESPONSE_IP", "VAR_RESPONSE_IP_DATA", "VAR_HARDEN_ALGO_DOWNGRADE",
1426   "VAR_IP_TRANSPARENT", "VAR_IP_DSCP", "VAR_DISABLE_DNSSEC_LAME_CHECK",
1427   "VAR_IP_RATELIMIT", "VAR_IP_RATELIMIT_SLABS", "VAR_IP_RATELIMIT_SIZE",
1428   "VAR_RATELIMIT", "VAR_RATELIMIT_SLABS", "VAR_RATELIMIT_SIZE",
1429   "VAR_OUTBOUND_MSG_RETRY", "VAR_MAX_SENT_COUNT", "VAR_MAX_QUERY_RESTARTS",
1430   "VAR_RATELIMIT_FOR_DOMAIN", "VAR_RATELIMIT_BELOW_DOMAIN",
1431   "VAR_IP_RATELIMIT_FACTOR", "VAR_RATELIMIT_FACTOR",
1432   "VAR_IP_RATELIMIT_BACKOFF", "VAR_RATELIMIT_BACKOFF",
1433   "VAR_SEND_CLIENT_SUBNET", "VAR_CLIENT_SUBNET_ZONE",
1434   "VAR_CLIENT_SUBNET_ALWAYS_FORWARD", "VAR_CLIENT_SUBNET_OPCODE",
1435   "VAR_MAX_CLIENT_SUBNET_IPV4", "VAR_MAX_CLIENT_SUBNET_IPV6",
1436   "VAR_MIN_CLIENT_SUBNET_IPV4", "VAR_MIN_CLIENT_SUBNET_IPV6",
1437   "VAR_MAX_ECS_TREE_SIZE_IPV4", "VAR_MAX_ECS_TREE_SIZE_IPV6",
1438   "VAR_CAPS_WHITELIST", "VAR_CACHE_MAX_NEGATIVE_TTL",
1439   "VAR_PERMIT_SMALL_HOLDDOWN", "VAR_QNAME_MINIMISATION",
1440   "VAR_QNAME_MINIMISATION_STRICT", "VAR_IP_FREEBIND", "VAR_DEFINE_TAG",
1441   "VAR_LOCAL_ZONE_TAG", "VAR_ACCESS_CONTROL_TAG",
1442   "VAR_LOCAL_ZONE_OVERRIDE", "VAR_ACCESS_CONTROL_TAG_ACTION",
1443   "VAR_ACCESS_CONTROL_TAG_DATA", "VAR_VIEW", "VAR_ACCESS_CONTROL_VIEW",
1444   "VAR_VIEW_FIRST", "VAR_SERVE_EXPIRED", "VAR_SERVE_EXPIRED_TTL",
1445   "VAR_SERVE_EXPIRED_TTL_RESET", "VAR_SERVE_EXPIRED_REPLY_TTL",
1446   "VAR_SERVE_EXPIRED_CLIENT_TIMEOUT", "VAR_EDE_SERVE_EXPIRED",
1447   "VAR_SERVE_ORIGINAL_TTL", "VAR_FAKE_DSA", "VAR_FAKE_SHA1",
1448   "VAR_LOG_IDENTITY", "VAR_HIDE_TRUSTANCHOR", "VAR_HIDE_HTTP_USER_AGENT",
1449   "VAR_HTTP_USER_AGENT", "VAR_TRUST_ANCHOR_SIGNALING",
1450   "VAR_AGGRESSIVE_NSEC", "VAR_USE_SYSTEMD", "VAR_SHM_ENABLE",
1451   "VAR_SHM_KEY", "VAR_ROOT_KEY_SENTINEL", "VAR_DNSCRYPT",
1452   "VAR_DNSCRYPT_ENABLE", "VAR_DNSCRYPT_PORT", "VAR_DNSCRYPT_PROVIDER",
1453   "VAR_DNSCRYPT_SECRET_KEY", "VAR_DNSCRYPT_PROVIDER_CERT",
1454   "VAR_DNSCRYPT_PROVIDER_CERT_ROTATED",
1455   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE",
1456   "VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS",
1457   "VAR_DNSCRYPT_NONCE_CACHE_SIZE", "VAR_DNSCRYPT_NONCE_CACHE_SLABS",
1458   "VAR_PAD_RESPONSES", "VAR_PAD_RESPONSES_BLOCK_SIZE", "VAR_PAD_QUERIES",
1459   "VAR_PAD_QUERIES_BLOCK_SIZE", "VAR_IPSECMOD_ENABLED",
1460   "VAR_IPSECMOD_HOOK", "VAR_IPSECMOD_IGNORE_BOGUS", "VAR_IPSECMOD_MAX_TTL",
1461   "VAR_IPSECMOD_WHITELIST", "VAR_IPSECMOD_STRICT", "VAR_CACHEDB",
1462   "VAR_CACHEDB_BACKEND", "VAR_CACHEDB_SECRETSEED", "VAR_CACHEDB_REDISHOST",
1463   "VAR_CACHEDB_REDISPORT", "VAR_CACHEDB_REDISTIMEOUT",
1464   "VAR_CACHEDB_REDISEXPIRERECORDS", "VAR_CACHEDB_REDISPATH",
1465   "VAR_CACHEDB_REDISPASSWORD", "VAR_CACHEDB_REDISLOGICALDB",
1466   "VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM", "VAR_FOR_UPSTREAM",
1467   "VAR_AUTH_ZONE", "VAR_ZONEFILE", "VAR_MASTER", "VAR_URL",
1468   "VAR_FOR_DOWNSTREAM", "VAR_FALLBACK_ENABLED", "VAR_TLS_ADDITIONAL_PORT",
1469   "VAR_LOW_RTT", "VAR_LOW_RTT_PERMIL", "VAR_FAST_SERVER_PERMIL",
1470   "VAR_FAST_SERVER_NUM", "VAR_ALLOW_NOTIFY", "VAR_TLS_WIN_CERT",
1471   "VAR_TCP_CONNECTION_LIMIT", "VAR_ANSWER_COOKIE", "VAR_COOKIE_SECRET",
1472   "VAR_IP_RATELIMIT_COOKIE", "VAR_FORWARD_NO_CACHE", "VAR_STUB_NO_CACHE",
1473   "VAR_LOG_SERVFAIL", "VAR_DENY_ANY", "VAR_UNKNOWN_SERVER_TIME_LIMIT",
1474   "VAR_LOG_TAG_QUERYREPLY", "VAR_STREAM_WAIT_SIZE", "VAR_TLS_CIPHERS",
1475   "VAR_TLS_CIPHERSUITES", "VAR_TLS_USE_SNI", "VAR_IPSET",
1476   "VAR_IPSET_NAME_V4", "VAR_IPSET_NAME_V6", "VAR_TLS_SESSION_TICKET_KEYS",
1477   "VAR_RPZ", "VAR_TAGS", "VAR_RPZ_ACTION_OVERRIDE",
1478   "VAR_RPZ_CNAME_OVERRIDE", "VAR_RPZ_LOG", "VAR_RPZ_LOG_NAME",
1479   "VAR_DYNLIB", "VAR_DYNLIB_FILE", "VAR_EDNS_CLIENT_STRING",
1480   "VAR_EDNS_CLIENT_STRING_OPCODE", "VAR_NSID",
1481   "VAR_ZONEMD_PERMISSIVE_MODE", "VAR_ZONEMD_CHECK",
1482   "VAR_ZONEMD_REJECT_ABSENCE", "VAR_RPZ_SIGNAL_NXDOMAIN_RA",
1483   "VAR_INTERFACE_AUTOMATIC_PORTS", "VAR_EDE", "VAR_INTERFACE_ACTION",
1484   "VAR_INTERFACE_VIEW", "VAR_INTERFACE_TAG", "VAR_INTERFACE_TAG_ACTION",
1485   "VAR_INTERFACE_TAG_DATA", "VAR_PROXY_PROTOCOL_PORT",
1486   "VAR_STATISTICS_INHIBIT_ZERO", "VAR_HARDEN_UNKNOWN_ADDITIONAL",
1487   "VAR_DISABLE_EDNS_DO", "VAR_CACHEDB_NO_STORE", "$accept", "toplevelvars",
1488   "toplevelvar", "force_toplevel", "serverstart", "contents_server",
1489   "content_server", "stubstart", "contents_stub", "content_stub",
1490   "forwardstart", "contents_forward", "content_forward", "viewstart",
1491   "contents_view", "content_view", "authstart", "contents_auth",
1492   "content_auth", "rpz_tag", "rpz_action_override", "rpz_cname_override",
1493   "rpz_log", "rpz_log_name", "rpz_signal_nxdomain_ra", "rpzstart",
1494   "contents_rpz", "content_rpz", "server_num_threads", "server_verbosity",
1495   "server_statistics_interval", "server_statistics_cumulative",
1496   "server_extended_statistics", "server_statistics_inhibit_zero",
1497   "server_shm_enable", "server_shm_key", "server_port",
1498   "server_send_client_subnet", "server_client_subnet_zone",
1499   "server_client_subnet_always_forward", "server_client_subnet_opcode",
1500   "server_max_client_subnet_ipv4", "server_max_client_subnet_ipv6",
1501   "server_min_client_subnet_ipv4", "server_min_client_subnet_ipv6",
1502   "server_max_ecs_tree_size_ipv4", "server_max_ecs_tree_size_ipv6",
1503   "server_interface", "server_outgoing_interface", "server_outgoing_range",
1504   "server_outgoing_port_permit", "server_outgoing_port_avoid",
1505   "server_outgoing_num_tcp", "server_incoming_num_tcp",
1506   "server_interface_automatic", "server_interface_automatic_ports",
1507   "server_do_ip4", "server_do_ip6", "server_do_nat64", "server_do_udp",
1508   "server_do_tcp", "server_prefer_ip4", "server_prefer_ip6",
1509   "server_tcp_mss", "server_outgoing_tcp_mss", "server_tcp_idle_timeout",
1510   "server_max_reuse_tcp_queries", "server_tcp_reuse_timeout",
1511   "server_tcp_auth_query_timeout", "server_tcp_keepalive",
1512   "server_tcp_keepalive_timeout", "server_sock_queue_timeout",
1513   "server_tcp_upstream", "server_udp_upstream_without_downstream",
1514   "server_ssl_upstream", "server_ssl_service_key",
1515   "server_ssl_service_pem", "server_ssl_port", "server_tls_cert_bundle",
1516   "server_tls_win_cert", "server_tls_additional_port",
1517   "server_tls_ciphers", "server_tls_ciphersuites",
1518   "server_tls_session_ticket_keys", "server_tls_use_sni",
1519   "server_https_port", "server_http_endpoint", "server_http_max_streams",
1520   "server_http_query_buffer_size", "server_http_response_buffer_size",
1521   "server_http_nodelay", "server_http_notls_downstream",
1522   "server_use_systemd", "server_do_daemonize", "server_use_syslog",
1523   "server_log_time_ascii", "server_log_queries", "server_log_replies",
1524   "server_log_tag_queryreply", "server_log_servfail",
1525   "server_log_local_actions", "server_chroot", "server_username",
1526   "server_directory", "server_logfile", "server_pidfile",
1527   "server_root_hints", "server_dlv_anchor_file", "server_dlv_anchor",
1528   "server_auto_trust_anchor_file", "server_trust_anchor_file",
1529   "server_trusted_keys_file", "server_trust_anchor",
1530   "server_trust_anchor_signaling", "server_root_key_sentinel",
1531   "server_domain_insecure", "server_hide_identity", "server_hide_version",
1532   "server_hide_trustanchor", "server_hide_http_user_agent",
1533   "server_identity", "server_version", "server_http_user_agent",
1534   "server_nsid", "server_so_rcvbuf", "server_so_sndbuf",
1535   "server_so_reuseport", "server_ip_transparent", "server_ip_freebind",
1536   "server_ip_dscp", "server_stream_wait_size", "server_edns_buffer_size",
1537   "server_msg_buffer_size", "server_msg_cache_size",
1538   "server_msg_cache_slabs", "server_num_queries_per_thread",
1539   "server_jostle_timeout", "server_delay_close", "server_udp_connect",
1540   "server_unblock_lan_zones", "server_insecure_lan_zones",
1541   "server_rrset_cache_size", "server_rrset_cache_slabs",
1542   "server_infra_host_ttl", "server_infra_lame_ttl",
1543   "server_infra_cache_numhosts", "server_infra_cache_lame_size",
1544   "server_infra_cache_slabs", "server_infra_cache_min_rtt",
1545   "server_infra_cache_max_rtt", "server_infra_keep_probing",
1546   "server_target_fetch_policy", "server_harden_short_bufsize",
1547   "server_harden_large_queries", "server_harden_glue",
1548   "server_harden_dnssec_stripped", "server_harden_below_nxdomain",
1549   "server_harden_referral_path", "server_harden_algo_downgrade",
1550   "server_harden_unknown_additional", "server_use_caps_for_id",
1551   "server_caps_whitelist", "server_private_address",
1552   "server_private_domain", "server_prefetch", "server_prefetch_key",
1553   "server_deny_any", "server_unwanted_reply_threshold",
1554   "server_do_not_query_address", "server_do_not_query_localhost",
1555   "server_access_control", "server_interface_action", "server_module_conf",
1556   "server_val_override_date", "server_val_sig_skew_min",
1557   "server_val_sig_skew_max", "server_val_max_restart",
1558   "server_cache_max_ttl", "server_cache_max_negative_ttl",
1559   "server_cache_min_ttl", "server_bogus_ttl",
1560   "server_val_clean_additional", "server_val_permissive_mode",
1561   "server_aggressive_nsec", "server_ignore_cd_flag",
1562   "server_disable_edns_do", "server_serve_expired",
1563   "server_serve_expired_ttl", "server_serve_expired_ttl_reset",
1564   "server_serve_expired_reply_ttl", "server_serve_expired_client_timeout",
1565   "server_ede_serve_expired", "server_serve_original_ttl",
1566   "server_fake_dsa", "server_fake_sha1", "server_val_log_level",
1567   "server_val_nsec3_keysize_iterations", "server_zonemd_permissive_mode",
1568   "server_add_holddown", "server_del_holddown", "server_keep_missing",
1569   "server_permit_small_holddown", "server_key_cache_size",
1570   "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
1571   "server_local_data", "server_local_data_ptr", "server_minimal_responses",
1572   "server_rrset_roundrobin", "server_unknown_server_time_limit",
1573   "server_max_udp_size", "server_dns64_prefix", "server_dns64_synthall",
1574   "server_dns64_ignore_aaaa", "server_nat64_prefix", "server_define_tag",
1575   "server_local_zone_tag", "server_access_control_tag",
1576   "server_access_control_tag_action", "server_access_control_tag_data",
1577   "server_local_zone_override", "server_access_control_view",
1578   "server_interface_tag", "server_interface_tag_action",
1579   "server_interface_tag_data", "server_interface_view",
1580   "server_response_ip_tag", "server_ip_ratelimit",
1581   "server_ip_ratelimit_cookie", "server_ratelimit",
1582   "server_ip_ratelimit_size", "server_ratelimit_size",
1583   "server_ip_ratelimit_slabs", "server_ratelimit_slabs",
1584   "server_ratelimit_for_domain", "server_ratelimit_below_domain",
1585   "server_ip_ratelimit_factor", "server_ratelimit_factor",
1586   "server_ip_ratelimit_backoff", "server_ratelimit_backoff",
1587   "server_outbound_msg_retry", "server_max_sent_count",
1588   "server_max_query_restarts", "server_low_rtt", "server_fast_server_num",
1589   "server_fast_server_permil", "server_qname_minimisation",
1590   "server_qname_minimisation_strict", "server_pad_responses",
1591   "server_pad_responses_block_size", "server_pad_queries",
1592   "server_pad_queries_block_size", "server_ipsecmod_enabled",
1593   "server_ipsecmod_ignore_bogus", "server_ipsecmod_hook",
1594   "server_ipsecmod_max_ttl", "server_ipsecmod_whitelist",
1595   "server_ipsecmod_strict", "server_edns_client_string",
1596   "server_edns_client_string_opcode", "server_ede",
1597   "server_proxy_protocol_port", "stub_name", "stub_host", "stub_addr",
1598   "stub_first", "stub_no_cache", "stub_ssl_upstream", "stub_tcp_upstream",
1599   "stub_prime", "forward_name", "forward_host", "forward_addr",
1600   "forward_first", "forward_no_cache", "forward_ssl_upstream",
1601   "forward_tcp_upstream", "auth_name", "auth_zonefile", "auth_master",
1602   "auth_url", "auth_allow_notify", "auth_zonemd_check",
1603   "auth_zonemd_reject_absence", "auth_for_downstream", "auth_for_upstream",
1604   "auth_fallback_enabled", "view_name", "view_local_zone",
1605   "view_response_ip", "view_response_ip_data", "view_local_data",
1606   "view_local_data_ptr", "view_first", "rcstart", "contents_rc",
1607   "content_rc", "rc_control_enable", "rc_control_port",
1608   "rc_control_interface", "rc_control_use_cert", "rc_server_key_file",
1609   "rc_server_cert_file", "rc_control_key_file", "rc_control_cert_file",
1610   "dtstart", "contents_dt", "content_dt", "dt_dnstap_enable",
1611   "dt_dnstap_bidirectional", "dt_dnstap_socket_path", "dt_dnstap_ip",
1612   "dt_dnstap_tls", "dt_dnstap_tls_server_name",
1613   "dt_dnstap_tls_cert_bundle", "dt_dnstap_tls_client_key_file",
1614   "dt_dnstap_tls_client_cert_file", "dt_dnstap_send_identity",
1615   "dt_dnstap_send_version", "dt_dnstap_identity", "dt_dnstap_version",
1616   "dt_dnstap_log_resolver_query_messages",
1617   "dt_dnstap_log_resolver_response_messages",
1618   "dt_dnstap_log_client_query_messages",
1619   "dt_dnstap_log_client_response_messages",
1620   "dt_dnstap_log_forwarder_query_messages",
1621   "dt_dnstap_log_forwarder_response_messages", "pythonstart",
1622   "contents_py", "content_py", "py_script", "dynlibstart", "contents_dl",
1623   "content_dl", "dl_file", "server_disable_dnssec_lame_check",
1624   "server_log_identity", "server_response_ip", "server_response_ip_data",
1625   "dnscstart", "contents_dnsc", "content_dnsc", "dnsc_dnscrypt_enable",
1626   "dnsc_dnscrypt_port", "dnsc_dnscrypt_provider",
1627   "dnsc_dnscrypt_provider_cert", "dnsc_dnscrypt_provider_cert_rotated",
1628   "dnsc_dnscrypt_secret_key", "dnsc_dnscrypt_shared_secret_cache_size",
1629   "dnsc_dnscrypt_shared_secret_cache_slabs",
1630   "dnsc_dnscrypt_nonce_cache_size", "dnsc_dnscrypt_nonce_cache_slabs",
1631   "cachedbstart", "contents_cachedb", "content_cachedb",
1632   "cachedb_backend_name", "cachedb_secret_seed", "cachedb_no_store",
1633   "redis_server_host", "redis_server_port", "redis_server_path",
1634   "redis_server_password", "redis_timeout", "redis_expire_records",
1635   "redis_logical_db", "server_tcp_connection_limit",
1636   "server_answer_cookie", "server_cookie_secret", "ipsetstart",
1637   "contents_ipset", "content_ipset", "ipset_name_v4", "ipset_name_v6", YY_NULLPTR
1638 };
1639
1640 static const char *
1641 yysymbol_name (yysymbol_kind_t yysymbol)
1642 {
1643   return yytname[yysymbol];
1644 }
1645 #endif
1646
1647 #ifdef YYPRINT
1648 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
1649    (internal) symbol number NUM (which must be that of a token).  */
1650 static const yytype_int16 yytoknum[] =
1651 {
1652        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
1653      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
1654      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
1655      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
1656      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
1657      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
1658      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
1659      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
1660      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
1661      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
1662      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
1663      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
1664      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
1665      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
1666      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
1667      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
1668      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
1669      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
1670      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
1671      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
1672      455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
1673      465,   466,   467,   468,   469,   470,   471,   472,   473,   474,
1674      475,   476,   477,   478,   479,   480,   481,   482,   483,   484,
1675      485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
1676      495,   496,   497,   498,   499,   500,   501,   502,   503,   504,
1677      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
1678      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
1679      525,   526,   527,   528,   529,   530,   531,   532,   533,   534,
1680      535,   536,   537,   538,   539,   540,   541,   542,   543,   544,
1681      545,   546,   547,   548,   549,   550,   551,   552,   553,   554,
1682      555,   556,   557,   558,   559,   560,   561,   562,   563,   564,
1683      565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
1684      575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
1685      585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
1686      595,   596,   597,   598,   599,   600,   601,   602,   603
1687 };
1688 #endif
1689
1690 #define YYPACT_NINF (-293)
1691
1692 #define yypact_value_is_default(Yyn) \
1693   ((Yyn) == YYPACT_NINF)
1694
1695 #define YYTABLE_NINF (-1)
1696
1697 #define yytable_value_is_error(Yyn) \
1698   0
1699
1700   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1701      STATE-NUM.  */
1702 static const yytype_int16 yypact[] =
1703 {
1704     -293,   267,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1705     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1706     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1707     -293,  -293,   -13,   199,   122,   230,    56,    43,   272,   228,
1708      -81,  -292,  -100,   112,  -285,    31,    32,    33,    75,    76,
1709       77,    78,    79,    81,    82,    83,    89,    94,   121,   123,
1710      125,   126,   134,   160,   161,   162,   163,   164,   165,   166,
1711      213,   215,   235,   237,   240,   241,   242,   243,   244,   245,
1712      259,   260,   262,   263,   264,   265,   270,   271,   273,   276,
1713      279,   285,   286,   295,   296,   297,   299,   300,   302,   306,
1714      312,   313,   329,   331,   332,   333,   343,   344,   345,   347,
1715      349,   350,   351,   352,   353,   354,   370,   371,   372,   374,
1716      375,   376,   377,   378,   379,   410,   411,   412,   415,   416,
1717      417,   418,   419,   421,   422,   423,   424,   425,   426,   427,
1718      428,   430,   431,   432,   433,   434,   435,   436,   437,   438,
1719      439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
1720      449,   451,   452,   453,   454,   455,   456,   457,   459,   460,
1721      461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
1722      471,   472,   473,   474,   475,   476,   477,   478,   479,   480,
1723      481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
1724      491,   492,   494,   495,   496,   497,   499,   500,   501,   502,
1725      503,   504,   505,   506,   507,   508,   509,   510,   511,   512,
1726      513,   514,   516,   517,   518,   519,   520,   521,   522,   523,
1727      524,   525,   526,   527,   528,   529,   530,   531,   532,   533,
1728      534,   535,   537,   538,   539,   540,   541,   542,   543,   544,
1729      545,   546,   547,   549,   550,   551,   552,   553,   554,   555,
1730      556,   557,   558,   559,   560,   561,   562,   563,   564,   565,
1731      566,   567,   568,   569,   570,   571,   572,   573,   574,   576,
1732      577,   578,   580,   581,   582,   583,   584,  -293,  -293,  -293,
1733     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1734     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1735     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1736     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1737     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1738     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1739     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1740     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1741     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1742     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1743     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1744     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1745     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1746     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1747     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1748     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1749     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1750     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1751     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1752     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1753     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1754     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1755     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1756     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1757      586,   587,   588,   589,   590,   591,   592,   593,  -293,  -293,
1758     -293,  -293,  -293,  -293,  -293,  -293,  -293,   594,   595,   596,
1759      597,   598,   599,   600,  -293,  -293,  -293,  -293,  -293,  -293,
1760     -293,  -293,   601,   602,   603,   604,   605,   606,   607,  -293,
1761     -293,  -293,  -293,  -293,  -293,  -293,  -293,   608,   609,   610,
1762      611,   612,   613,   614,   615,   616,   617,  -293,  -293,  -293,
1763     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,   618,   619,
1764      620,   621,   622,   623,  -293,  -293,  -293,  -293,  -293,  -293,
1765     -293,  -293,  -293,  -293,  -293,  -293,  -293,   624,   625,   626,
1766      627,   628,   629,   630,   631,  -293,  -293,  -293,  -293,  -293,
1767     -293,  -293,  -293,  -293,   632,   633,   634,   635,   636,   637,
1768      638,   639,   640,   641,   642,   643,   644,   645,   646,   647,
1769      648,   649,   650,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1770     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1771     -293,  -293,  -293,   651,  -293,  -293,   652,  -293,  -293,   653,
1772      654,   655,   656,   657,   658,   659,   660,   661,   662,  -293,
1773     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1774      663,   664,   665,   666,   667,   668,   669,   670,   671,   672,
1775     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1776     -293,   673,   674,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1777     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1778     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1779     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1780     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1781     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1782     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,   675,   676,
1783     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1784     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1785     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1786     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1787     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1788     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1789     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1790      677,   678,   679,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1791     -293,  -293,  -293,  -293,  -293,  -293,   680,   681,  -293,  -293,
1792     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1793     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,   682,
1794      683,   684,   685,   686,   687,  -293,  -293,  -293,  -293,  -293,
1795     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1796     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1797     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1798      688,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1799     -293,  -293,  -293,   689,  -293,  -293,  -293,  -293,  -293,   690,
1800      691,   692,   693,   694,  -293,  -293,  -293,  -293,  -293,  -293,
1801     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1802     -293,  -293,  -293,  -293,   695,  -293,  -293,   696,   697,  -293,
1803     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1804     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1805     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1806     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1807     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1808     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1809     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1810     -293,  -293,  -293,  -293,  -293,  -293,   698,   699,   700,  -293,
1811     -293,  -293,  -293,  -293,  -293,   701,   702,  -293,  -293,  -293,
1812     -293,  -293,  -293,  -293,  -293
1813 };
1814
1815   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1816      Performed when YYTABLE does not specify something else to do.  Zero
1817      means the default is an error.  */
1818 static const yytype_int16 yydefact[] =
1819 {
1820        2,     0,     1,    18,    19,   264,   275,   596,   656,   615,
1821      285,   670,   693,   295,   719,   314,   661,     3,    17,    21,
1822      266,   277,   287,   297,   316,   598,   617,   658,   663,   672,
1823      695,   721,     4,     5,     6,    10,    14,    15,     8,     9,
1824        7,    16,    11,    12,    13,     0,     0,     0,     0,     0,
1825        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1826        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1827        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1828        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1829        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1830        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1831        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1832        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1833        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1834        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1835        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1836        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1837        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1838        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1839        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1840        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1841        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1842        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1843        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1844        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1845        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1846        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1847        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1848        0,     0,     0,     0,     0,     0,     0,    20,    22,    23,
1849       90,    93,   102,   261,   218,   219,    24,   172,   173,   174,
1850      175,   176,   177,   178,   179,   180,   181,    39,    81,    25,
1851       94,    95,    50,    74,    89,   258,    26,    27,    28,    31,
1852       32,    29,    30,    33,    34,    35,   255,   256,   257,    36,
1853       37,    38,   126,   230,   127,   129,   130,   131,   232,   237,
1854      233,   244,   245,   246,   250,   132,   133,   134,   135,   136,
1855      137,   138,   214,    91,    80,   106,   124,   125,   242,   239,
1856      128,    40,    41,    42,    43,    44,    82,    96,    97,   113,
1857       68,    78,    69,   222,   223,   107,    60,    61,   221,    64,
1858       62,    63,    65,   253,   117,   121,   142,   154,   186,   157,
1859      243,   118,    75,    45,    46,    47,   104,   143,   144,   145,
1860      146,    48,    49,    51,    52,    54,    55,    53,   151,   152,
1861      158,    56,    57,    58,    66,    85,   122,    99,   153,   262,
1862       92,   182,   100,   101,   119,   120,   240,   105,    59,    83,
1863       86,   195,    67,    70,   108,   109,   110,    84,   183,   111,
1864       71,    72,    73,   231,   123,   263,   205,   206,   207,   208,
1865      209,   210,   211,   212,   220,   112,    79,   254,   114,   115,
1866      116,   184,    76,    77,    98,    87,    88,   103,   139,   140,
1867      241,   141,   147,   148,   149,   150,   187,   188,   190,   192,
1868      193,   191,   194,   197,   198,   199,   196,   215,   155,   249,
1869      156,   161,   162,   159,   160,   163,   164,   166,   165,   168,
1870      167,   169,   170,   171,   234,   236,   235,   185,   200,   201,
1871      202,   203,   204,   224,   226,   225,   227,   228,   229,   251,
1872      252,   259,   260,   189,   213,   216,   217,   238,   247,   248,
1873        0,     0,     0,     0,     0,     0,     0,     0,   265,   267,
1874      268,   269,   271,   272,   273,   274,   270,     0,     0,     0,
1875        0,     0,     0,     0,   276,   278,   279,   280,   281,   282,
1876      283,   284,     0,     0,     0,     0,     0,     0,     0,   286,
1877      288,   289,   292,   293,   290,   294,   291,     0,     0,     0,
1878        0,     0,     0,     0,     0,     0,     0,   296,   298,   299,
1879      300,   301,   305,   306,   307,   302,   303,   304,     0,     0,
1880        0,     0,     0,     0,   319,   323,   324,   325,   326,   327,
1881      315,   317,   318,   320,   321,   322,   328,     0,     0,     0,
1882        0,     0,     0,     0,     0,   597,   599,   601,   600,   606,
1883      602,   603,   604,   605,     0,     0,     0,     0,     0,     0,
1884        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1885        0,     0,     0,   616,   618,   620,   619,   621,   622,   623,
1886      624,   625,   626,   627,   628,   629,   630,   631,   632,   633,
1887      634,   635,   636,     0,   657,   659,     0,   662,   664,     0,
1888        0,     0,     0,     0,     0,     0,     0,     0,     0,   671,
1889      673,   674,   675,   677,   678,   676,   679,   680,   681,   682,
1890        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
1891      694,   696,   697,   704,   698,   699,   702,   703,   700,   701,
1892      705,     0,     0,   720,   722,   723,   330,   329,   337,   350,
1893      348,   362,   357,   358,   359,   363,   360,   361,   364,   365,
1894      366,   370,   371,   372,   402,   403,   404,   405,   406,   434,
1895      435,   436,   442,   443,   353,   444,   445,   448,   446,   447,
1896      452,   453,   454,   469,   417,   418,   421,   422,   455,   473,
1897      411,   413,   474,   481,   482,   483,   354,   433,   503,   504,
1898      412,   497,   395,   349,   407,   470,   478,   456,     0,     0,
1899      507,   355,   331,   394,   461,   332,   351,   352,   408,   409,
1900      505,   458,   463,   464,   368,   367,   333,   508,   437,   468,
1901      396,   416,   475,   476,   477,   480,   496,   410,   501,   499,
1902      500,   425,   432,   465,   466,   426,   427,   457,   485,   397,
1903      398,   401,   373,   375,   369,   376,   377,   378,   379,   386,
1904      387,   388,   389,   390,   391,   392,   509,   510,   512,   438,
1905      439,   440,   441,   449,   450,   451,   513,   514,   515,   516,
1906        0,     0,     0,   459,   428,   430,   666,   529,   534,   532,
1907      531,   535,   533,   542,   543,   544,     0,     0,   538,   539,
1908      540,   541,   338,   339,   340,   341,   342,   343,   344,   345,
1909      346,   347,   462,   479,   502,   548,   549,   429,   517,     0,
1910        0,     0,     0,     0,     0,   487,   488,   489,   490,   491,
1911      492,   493,   494,   495,   667,   419,   420,   423,   414,   484,
1912      393,   335,   336,   415,   550,   551,   552,   553,   554,   556,
1913      555,   557,   558,   559,   374,   381,   545,   547,   546,   380,
1914        0,   717,   718,   530,   400,   467,   511,   399,   431,   382,
1915      383,   385,   384,     0,   561,   424,   498,   356,   562,     0,
1916        0,     0,     0,     0,   563,   334,   460,   486,   564,   565,
1917      566,   571,   569,   570,   567,   568,   572,   573,   574,   575,
1918      577,   578,   576,   589,     0,   593,   594,     0,     0,   595,
1919      579,   587,   580,   581,   582,   586,   588,   583,   584,   585,
1920      308,   309,   310,   311,   312,   313,   607,   609,   608,   611,
1921      612,   613,   614,   610,   637,   639,   640,   641,   642,   643,
1922      644,   645,   646,   647,   638,   648,   649,   650,   651,   652,
1923      653,   654,   655,   660,   665,   683,   684,   685,   688,   686,
1924      687,   689,   690,   691,   692,   706,   707,   709,   710,   713,
1925      714,   711,   712,   715,   708,   724,   725,   471,   506,   528,
1926      668,   669,   536,   537,   518,   519,     0,     0,     0,   523,
1927      716,   560,   472,   527,   524,     0,     0,   590,   591,   592,
1928      522,   520,   521,   525,   526
1929 };
1930
1931   /* YYPGOTO[NTERM-NUM].  */
1932 static const yytype_int16 yypgoto[] =
1933 {
1934     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1935     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1936     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1937     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1938     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1939     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1940     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1941     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1942     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1943     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1944     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1945     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1946     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1947     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1948     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1949     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1950     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1951     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1952     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1953     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1954     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1955     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1956     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1957     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1958     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1959     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1960     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1961     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,    95,   703,
1962      704,   705,   706,  -293,  -293,   707,  -293,  -293,  -293,  -293,
1963     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1964     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1965     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1966     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1967     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1968     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1969     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1970     -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,  -293,
1971     -293,  -293,  -293,  -293
1972 };
1973
1974   /* YYDEFGOTO[NTERM-NUM].  */
1975 static const yytype_int16 yydefgoto[] =
1976 {
1977        0,     1,    17,    18,    19,    32,   287,    20,    33,   538,
1978       21,    34,   554,    22,    35,   569,    23,    36,   587,   604,
1979      605,   606,   607,   608,   609,    24,    37,   610,   288,   289,
1980      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
1981      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
1982      310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
1983      320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
1984      330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
1985      340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
1986      350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
1987      360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
1988      370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
1989      380,   381,   382,   383,   384,   385,   386,   387,   388,   389,
1990      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
1991      400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
1992      410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
1993      420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
1994      430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
1995      440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
1996      450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
1997      460,   461,   462,   463,   464,   465,   466,   467,   468,   469,
1998      470,   471,   472,   473,   474,   475,   476,   477,   478,   479,
1999      480,   481,   482,   483,   484,   485,   486,   487,   488,   489,
2000      490,   491,   492,   493,   494,   495,   496,   497,   498,   499,
2001      500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
2002      510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
2003      520,   521,   522,   539,   540,   541,   542,   543,   544,   545,
2004      546,   555,   556,   557,   558,   559,   560,   561,   588,   589,
2005      590,   591,   592,   593,   594,   595,   596,   597,   570,   571,
2006      572,   573,   574,   575,   576,    25,    38,   625,   626,   627,
2007      628,   629,   630,   631,   632,   633,    26,    39,   653,   654,
2008      655,   656,   657,   658,   659,   660,   661,   662,   663,   664,
2009      665,   666,   667,   668,   669,   670,   671,   672,    27,    40,
2010      674,   675,    28,    41,   677,   678,   523,   524,   525,   526,
2011       29,    42,   689,   690,   691,   692,   693,   694,   695,   696,
2012      697,   698,   699,    30,    43,   710,   711,   712,   713,   714,
2013      715,   716,   717,   718,   719,   720,   527,   528,   529,    31,
2014       44,   723,   724,   725
2015 };
2016
2017   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
2018      positive, shift that token.  If negative, reduce the rule whose
2019      number is the opposite.  If YYTABLE_NINF, syntax error.  */
2020 static const yytype_int16 yytable[] =
2021 {
2022       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
2023       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
2024       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
2025       75,    76,    77,    78,   721,   722,   673,   676,    79,    80,
2026       81,   726,   727,   728,    82,    83,    84,    85,    86,    87,
2027       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
2028       98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
2029      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
2030      118,   119,   120,   121,   122,   729,   730,   731,   732,   733,
2031      577,   734,   735,   736,   123,   124,   125,   126,   127,   737,
2032      128,   129,   130,   577,   738,   131,   132,   133,   134,   135,
2033      136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
2034      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
2035      156,   739,   611,   740,   157,   741,   742,   158,   159,   160,
2036      161,   162,   163,   164,   743,   165,   166,   167,   168,   169,
2037      170,   171,   172,   173,   174,   175,   176,   177,   178,   679,
2038      680,   681,   682,   683,   684,   685,   686,   687,   688,   547,
2039      744,   745,   746,   747,   748,   749,   750,   548,   549,   179,
2040      180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
2041      190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
2042      200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
2043      210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
2044      220,   221,   222,   751,   223,   752,   224,   225,   226,   227,
2045      228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
2046      238,   239,   240,   241,   242,   753,   530,   754,   531,   532,
2047      755,   756,   757,   758,   759,   760,   243,   244,   245,   246,
2048      247,   248,   249,   250,   251,   252,   550,     2,   551,   761,
2049      762,   552,   763,   764,   765,   766,   253,   562,     3,     4,
2050      767,   768,     0,   769,   254,   255,   770,   256,   257,   771,
2051      258,   259,   260,   261,   262,   772,   773,   263,   264,   265,
2052      266,   267,   268,   269,   270,   774,   775,   776,   271,   777,
2053      778,   533,   779,   563,   564,     5,   780,   272,   273,   274,
2054      275,     6,   781,   782,   276,   277,   278,   279,   280,   281,
2055      282,   283,   284,   285,   286,   579,   580,   581,   582,   783,
2056      565,   784,   785,   786,   534,   584,   578,   535,   579,   580,
2057      581,   582,   583,   787,   788,   789,   536,   790,   584,   791,
2058      792,   793,   794,   795,   796,     7,   598,   599,   600,   601,
2059      602,   617,   618,   619,   620,   621,   622,   623,   624,   603,
2060      797,   798,   799,     8,   800,   801,   802,   803,   804,   805,
2061      585,   586,   700,   701,   702,   703,   704,   705,   706,   707,
2062      708,   634,   635,   636,   637,   638,   639,   640,   641,   642,
2063      643,   644,   645,   646,   647,   648,   649,   650,   651,   652,
2064      806,   807,   808,   566,   567,   809,   810,   811,   812,   813,
2065      553,   814,   815,   816,   817,   818,   819,   820,   821,     9,
2066      822,   823,   824,   825,   826,   827,   828,   829,   830,   831,
2067      832,   833,   834,   835,   836,   837,   838,   839,   840,   841,
2068      709,   842,   843,   844,   845,   846,   847,   848,   568,   849,
2069      850,   851,   852,   853,   854,   855,   856,   857,   858,   859,
2070      860,   861,   862,   863,   864,   865,   866,   867,   868,   869,
2071      870,   871,   872,   873,   874,   875,   876,   877,   878,   879,
2072      880,   881,   882,    10,   883,   884,   885,   886,   537,   887,
2073      888,   889,   890,   891,   892,   893,   894,   895,   896,   897,
2074      898,   899,   900,   901,   902,    11,   903,   904,   905,   906,
2075      907,   908,   909,   910,   911,   912,   913,   914,   915,   916,
2076      917,   918,   919,   920,   921,   922,    12,   923,   924,   925,
2077      926,   927,   928,   929,   930,   931,   932,   933,    13,   934,
2078      935,   936,   937,   938,   939,   940,   941,   942,   943,   944,
2079      945,   946,   947,   948,   949,   950,   951,   952,   953,   954,
2080      955,   956,   957,   958,   959,    14,   960,   961,   962,    15,
2081      963,   964,   965,   966,   967,    16,   968,   969,   970,   971,
2082      972,   973,   974,   975,   976,   977,   978,   979,   980,   981,
2083      982,   983,   984,   985,   986,   987,   988,   989,   990,   991,
2084      992,   993,   994,   995,   996,   997,   998,   999,  1000,  1001,
2085     1002,  1003,  1004,  1005,  1006,  1007,  1008,  1009,  1010,  1011,
2086     1012,  1013,  1014,  1015,  1016,  1017,  1018,  1019,  1020,  1021,
2087     1022,  1023,  1024,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
2088     1032,  1033,  1034,  1035,  1036,  1037,  1038,  1039,  1040,  1041,
2089     1042,  1043,  1044,  1045,  1046,  1047,  1048,  1049,  1050,  1051,
2090     1052,  1053,  1054,  1055,  1056,  1057,  1058,  1059,  1060,  1061,
2091     1062,  1063,  1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,
2092     1072,  1073,  1074,  1075,  1076,  1077,  1078,  1079,  1080,  1081,
2093     1082,  1083,  1084,     0,     0,     0,     0,     0,     0,     0,
2094        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2095        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2096      612,   613,   614,   615,   616
2097 };
2098
2099 static const yytype_int16 yycheck[] =
2100 {
2101       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
2102       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
2103       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
2104       43,    44,    45,    46,   319,   320,   117,   329,    51,    52,
2105       53,    10,    10,    10,    57,    58,    59,    60,    61,    62,
2106       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
2107       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
2108       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
2109       93,    94,    95,    96,    97,    10,    10,    10,    10,    10,
2110       47,    10,    10,    10,   107,   108,   109,   110,   111,    10,
2111      113,   114,   115,    47,    10,   118,   119,   120,   121,   122,
2112      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
2113      133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
2114      143,    10,    37,    10,   147,    10,    10,   150,   151,   152,
2115      153,   154,   155,   156,    10,   158,   159,   160,   161,   162,
2116      163,   164,   165,   166,   167,   168,   169,   170,   171,   259,
2117      260,   261,   262,   263,   264,   265,   266,   267,   268,    47,
2118       10,    10,    10,    10,    10,    10,    10,    55,    56,   192,
2119      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
2120      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
2121      213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
2122      223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
2123      233,   234,   235,    10,   237,    10,   239,   240,   241,   242,
2124      243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
2125      253,   254,   255,   256,   257,    10,    47,    10,    49,    50,
2126       10,    10,    10,    10,    10,    10,   269,   270,   271,   272,
2127      273,   274,   275,   276,   277,   278,   144,     0,   146,    10,
2128       10,   149,    10,    10,    10,    10,   289,    47,    11,    12,
2129       10,    10,    -1,    10,   297,   298,    10,   300,   301,    10,
2130      303,   304,   305,   306,   307,    10,    10,   310,   311,   312,
2131      313,   314,   315,   316,   317,    10,    10,    10,   321,    10,
2132       10,   112,    10,    83,    84,    48,    10,   330,   331,   332,
2133      333,    54,    10,    10,   337,   338,   339,   340,   341,   342,
2134      343,   344,   345,   346,   347,   292,   293,   294,   295,    10,
2135      110,    10,    10,    10,   145,   302,   290,   148,   292,   293,
2136      294,   295,   296,    10,    10,    10,   157,    10,   302,    10,
2137       10,    10,    10,    10,    10,    98,   323,   324,   325,   326,
2138      327,    99,   100,   101,   102,   103,   104,   105,   106,   336,
2139       10,    10,    10,   116,    10,    10,    10,    10,    10,    10,
2140      334,   335,   280,   281,   282,   283,   284,   285,   286,   287,
2141      288,   173,   174,   175,   176,   177,   178,   179,   180,   181,
2142      182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
2143       10,    10,    10,   193,   194,    10,    10,    10,    10,    10,
2144      308,    10,    10,    10,    10,    10,    10,    10,    10,   172,
2145       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2146       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2147      348,    10,    10,    10,    10,    10,    10,    10,   238,    10,
2148       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2149       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2150       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2151       10,    10,    10,   236,    10,    10,    10,    10,   309,    10,
2152       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2153       10,    10,    10,    10,    10,   258,    10,    10,    10,    10,
2154       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2155       10,    10,    10,    10,    10,    10,   279,    10,    10,    10,
2156       10,    10,    10,    10,    10,    10,    10,    10,   291,    10,
2157       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2158       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2159       10,    10,    10,    10,    10,   318,    10,    10,    10,   322,
2160       10,    10,    10,    10,    10,   328,    10,    10,    10,    10,
2161       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2162       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2163       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2164       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2165       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2166       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2167       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2168       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2169       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2170       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2171       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2172       10,    10,    10,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2173       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2174       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2175       37,    37,    37,    37,    37
2176 };
2177
2178   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2179      symbol of state STATE-NUM.  */
2180 static const yytype_int16 yystos[] =
2181 {
2182        0,   350,     0,    11,    12,    48,    54,    98,   116,   172,
2183      236,   258,   279,   291,   318,   322,   328,   351,   352,   353,
2184      356,   359,   362,   365,   374,   644,   655,   677,   681,   689,
2185      702,   718,   354,   357,   360,   363,   366,   375,   645,   656,
2186      678,   682,   690,   703,   719,    13,    14,    15,    16,    17,
2187       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
2188       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
2189       38,    39,    40,    41,    42,    43,    44,    45,    46,    51,
2190       52,    53,    57,    58,    59,    60,    61,    62,    63,    64,
2191       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
2192       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
2193       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
2194       95,    96,    97,   107,   108,   109,   110,   111,   113,   114,
2195      115,   118,   119,   120,   121,   122,   123,   124,   125,   126,
2196      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
2197      137,   138,   139,   140,   141,   142,   143,   147,   150,   151,
2198      152,   153,   154,   155,   156,   158,   159,   160,   161,   162,
2199      163,   164,   165,   166,   167,   168,   169,   170,   171,   192,
2200      193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
2201      203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
2202      213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
2203      223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
2204      233,   234,   235,   237,   239,   240,   241,   242,   243,   244,
2205      245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
2206      255,   256,   257,   269,   270,   271,   272,   273,   274,   275,
2207      276,   277,   278,   289,   297,   298,   300,   301,   303,   304,
2208      305,   306,   307,   310,   311,   312,   313,   314,   315,   316,
2209      317,   321,   330,   331,   332,   333,   337,   338,   339,   340,
2210      341,   342,   343,   344,   345,   346,   347,   355,   377,   378,
2211      379,   380,   381,   382,   383,   384,   385,   386,   387,   388,
2212      389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
2213      399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
2214      409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
2215      419,   420,   421,   422,   423,   424,   425,   426,   427,   428,
2216      429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
2217      439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
2218      449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
2219      459,   460,   461,   462,   463,   464,   465,   466,   467,   468,
2220      469,   470,   471,   472,   473,   474,   475,   476,   477,   478,
2221      479,   480,   481,   482,   483,   484,   485,   486,   487,   488,
2222      489,   490,   491,   492,   493,   494,   495,   496,   497,   498,
2223      499,   500,   501,   502,   503,   504,   505,   506,   507,   508,
2224      509,   510,   511,   512,   513,   514,   515,   516,   517,   518,
2225      519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
2226      529,   530,   531,   532,   533,   534,   535,   536,   537,   538,
2227      539,   540,   541,   542,   543,   544,   545,   546,   547,   548,
2228      549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
2229      559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
2230      569,   570,   571,   572,   573,   574,   575,   576,   577,   578,
2231      579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
2232      589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
2233      599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
2234      609,   610,   611,   685,   686,   687,   688,   715,   716,   717,
2235       47,    49,    50,   112,   145,   148,   157,   309,   358,   612,
2236      613,   614,   615,   616,   617,   618,   619,    47,    55,    56,
2237      144,   146,   149,   308,   361,   620,   621,   622,   623,   624,
2238      625,   626,    47,    83,    84,   110,   193,   194,   238,   364,
2239      637,   638,   639,   640,   641,   642,   643,    47,   290,   292,
2240      293,   294,   295,   296,   302,   334,   335,   367,   627,   628,
2241      629,   630,   631,   632,   633,   634,   635,   636,   323,   324,
2242      325,   326,   327,   336,   368,   369,   370,   371,   372,   373,
2243      376,   627,   628,   629,   630,   631,   634,    99,   100,   101,
2244      102,   103,   104,   105,   106,   646,   647,   648,   649,   650,
2245      651,   652,   653,   654,   173,   174,   175,   176,   177,   178,
2246      179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
2247      189,   190,   191,   657,   658,   659,   660,   661,   662,   663,
2248      664,   665,   666,   667,   668,   669,   670,   671,   672,   673,
2249      674,   675,   676,   117,   679,   680,   329,   683,   684,   259,
2250      260,   261,   262,   263,   264,   265,   266,   267,   268,   691,
2251      692,   693,   694,   695,   696,   697,   698,   699,   700,   701,
2252      280,   281,   282,   283,   284,   285,   286,   287,   288,   348,
2253      704,   705,   706,   707,   708,   709,   710,   711,   712,   713,
2254      714,   319,   320,   720,   721,   722,    10,    10,    10,    10,
2255       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2256       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2257       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2258       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2259       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2260       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2261       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2262       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2263       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2264       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2265       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2266       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2267       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2268       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2269       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2270       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2271       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2272       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2273       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2274       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2275       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2276       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2277       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2278       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2279       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2280       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2281       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2282       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2283       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2284       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2285       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2286       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2287       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2288       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2289       10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
2290       10,    10,    10,    10,    10
2291 };
2292
2293   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
2294 static const yytype_int16 yyr1[] =
2295 {
2296        0,   349,   350,   350,   351,   351,   351,   351,   351,   351,
2297      351,   351,   351,   351,   351,   351,   351,   351,   352,   353,
2298      354,   354,   355,   355,   355,   355,   355,   355,   355,   355,
2299      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2300      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2301      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2302      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2303      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2304      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2305      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2306      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2307      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2308      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2309      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2310      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2311      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2312      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2313      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2314      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2315      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2316      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2317      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2318      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2319      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2320      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2321      355,   355,   355,   355,   355,   355,   355,   355,   355,   355,
2322      355,   355,   355,   355,   356,   357,   357,   358,   358,   358,
2323      358,   358,   358,   358,   358,   359,   360,   360,   361,   361,
2324      361,   361,   361,   361,   361,   362,   363,   363,   364,   364,
2325      364,   364,   364,   364,   364,   365,   366,   366,   367,   367,
2326      367,   367,   367,   367,   367,   367,   367,   367,   368,   369,
2327      370,   371,   372,   373,   374,   375,   375,   376,   376,   376,
2328      376,   376,   376,   376,   376,   376,   376,   376,   376,   377,
2329      378,   379,   380,   381,   382,   383,   384,   385,   386,   387,
2330      388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
2331      398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
2332      408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
2333      418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
2334      428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
2335      438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
2336      448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
2337      458,   459,   460,   461,   462,   463,   464,   465,   466,   467,
2338      468,   469,   470,   471,   472,   473,   474,   475,   476,   477,
2339      478,   479,   480,   481,   482,   483,   484,   485,   486,   487,
2340      488,   489,   490,   491,   492,   493,   494,   495,   496,   497,
2341      498,   499,   500,   501,   502,   503,   504,   505,   506,   507,
2342      508,   509,   510,   511,   512,   513,   514,   515,   516,   517,
2343      518,   519,   520,   521,   522,   523,   524,   525,   526,   527,
2344      528,   529,   530,   531,   532,   533,   534,   535,   536,   537,
2345      538,   539,   540,   541,   542,   543,   544,   545,   546,   547,
2346      548,   549,   550,   551,   552,   553,   554,   555,   556,   557,
2347      558,   559,   560,   561,   562,   563,   564,   565,   566,   567,
2348      568,   569,   570,   571,   572,   573,   574,   575,   576,   577,
2349      578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
2350      588,   589,   590,   591,   592,   593,   594,   595,   596,   597,
2351      598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
2352      608,   609,   610,   611,   612,   613,   614,   615,   616,   617,
2353      618,   619,   620,   621,   622,   623,   624,   625,   626,   627,
2354      628,   629,   630,   631,   632,   633,   634,   635,   636,   637,
2355      638,   639,   640,   641,   642,   643,   644,   645,   645,   646,
2356      646,   646,   646,   646,   646,   646,   646,   647,   648,   649,
2357      650,   651,   652,   653,   654,   655,   656,   656,   657,   657,
2358      657,   657,   657,   657,   657,   657,   657,   657,   657,   657,
2359      657,   657,   657,   657,   657,   657,   657,   658,   659,   660,
2360      661,   662,   663,   664,   665,   666,   667,   668,   669,   670,
2361      671,   672,   673,   674,   675,   676,   677,   678,   678,   679,
2362      680,   681,   682,   682,   683,   684,   685,   686,   687,   688,
2363      689,   690,   690,   691,   691,   691,   691,   691,   691,   691,
2364      691,   691,   691,   692,   693,   694,   695,   696,   697,   698,
2365      699,   700,   701,   702,   703,   703,   704,   704,   704,   704,
2366      704,   704,   704,   704,   704,   704,   705,   706,   707,   708,
2367      709,   710,   711,   712,   713,   714,   715,   716,   717,   718,
2368      719,   719,   720,   720,   721,   722
2369 };
2370
2371   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
2372 static const yytype_int8 yyr2[] =
2373 {
2374        0,     2,     0,     2,     2,     2,     2,     2,     2,     2,
2375        2,     2,     2,     2,     2,     2,     2,     1,     1,     1,
2376        2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
2377        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2378        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2379        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2380        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2381        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2382        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2383        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2384        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2385        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2386        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2387        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2388        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2389        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2390        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2391        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2392        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2393        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2394        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2395        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2396        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2397        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2398        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2399        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2400        1,     1,     1,     1,     1,     2,     0,     1,     1,     1,
2401        1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
2402        1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
2403        1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
2404        1,     1,     1,     1,     1,     1,     1,     1,     2,     2,
2405        2,     2,     2,     2,     1,     2,     0,     1,     1,     1,
2406        1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
2407        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2408        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2409        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2410        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2411        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2412        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2413        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2414        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2415        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2416        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2417        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2418        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2419        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2420        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2421        2,     3,     3,     2,     2,     2,     2,     2,     2,     2,
2422        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2423        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2424        2,     2,     2,     2,     2,     2,     3,     2,     2,     2,
2425        2,     2,     2,     2,     2,     2,     2,     2,     3,     3,
2426        4,     4,     4,     3,     3,     4,     4,     3,     3,     2,
2427        2,     2,     2,     2,     2,     2,     3,     3,     2,     2,
2428        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2429        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2430        3,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2431        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2432        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2433        3,     3,     3,     2,     2,     2,     1,     2,     0,     1,
2434        1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
2435        2,     2,     2,     2,     2,     1,     2,     0,     1,     1,
2436        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2437        1,     1,     1,     1,     1,     1,     1,     2,     2,     2,
2438        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
2439        2,     2,     2,     2,     2,     2,     1,     2,     0,     1,
2440        2,     1,     2,     0,     1,     2,     2,     2,     3,     3,
2441        1,     2,     0,     1,     1,     1,     1,     1,     1,     1,
2442        1,     1,     1,     2,     2,     2,     2,     2,     2,     2,
2443        2,     2,     2,     1,     2,     0,     1,     1,     1,     1,
2444        1,     1,     1,     1,     1,     1,     2,     2,     2,     2,
2445        2,     2,     2,     2,     2,     2,     3,     2,     2,     1,
2446        2,     0,     1,     1,     2,     2
2447 };
2448
2449
2450 enum { YYENOMEM = -2 };
2451
2452 #define yyerrok         (yyerrstatus = 0)
2453 #define yyclearin       (yychar = YYEMPTY)
2454
2455 #define YYACCEPT        goto yyacceptlab
2456 #define YYABORT         goto yyabortlab
2457 #define YYERROR         goto yyerrorlab
2458
2459
2460 #define YYRECOVERING()  (!!yyerrstatus)
2461
2462 #define YYBACKUP(Token, Value)                                    \
2463   do                                                              \
2464     if (yychar == YYEMPTY)                                        \
2465       {                                                           \
2466         yychar = (Token);                                         \
2467         yylval = (Value);                                         \
2468         YYPOPSTACK (yylen);                                       \
2469         yystate = *yyssp;                                         \
2470         goto yybackup;                                            \
2471       }                                                           \
2472     else                                                          \
2473       {                                                           \
2474         yyerror (YY_("syntax error: cannot back up")); \
2475         YYERROR;                                                  \
2476       }                                                           \
2477   while (0)
2478
2479 /* Backward compatibility with an undocumented macro.
2480    Use YYerror or YYUNDEF. */
2481 #define YYERRCODE YYUNDEF
2482
2483
2484 /* Enable debugging if requested.  */
2485 #if YYDEBUG
2486
2487 # ifndef YYFPRINTF
2488 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2489 #  define YYFPRINTF fprintf
2490 # endif
2491
2492 # define YYDPRINTF(Args)                        \
2493 do {                                            \
2494   if (yydebug)                                  \
2495     YYFPRINTF Args;                             \
2496 } while (0)
2497
2498 /* This macro is provided for backward compatibility. */
2499 # ifndef YY_LOCATION_PRINT
2500 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2501 # endif
2502
2503
2504 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
2505 do {                                                                      \
2506   if (yydebug)                                                            \
2507     {                                                                     \
2508       YYFPRINTF (stderr, "%s ", Title);                                   \
2509       yy_symbol_print (stderr,                                            \
2510                   Kind, Value); \
2511       YYFPRINTF (stderr, "\n");                                           \
2512     }                                                                     \
2513 } while (0)
2514
2515
2516 /*-----------------------------------.
2517 | Print this symbol's value on YYO.  |
2518 `-----------------------------------*/
2519
2520 static void
2521 yy_symbol_value_print (FILE *yyo,
2522                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2523 {
2524   FILE *yyoutput = yyo;
2525   YY_USE (yyoutput);
2526   if (!yyvaluep)
2527     return;
2528 # ifdef YYPRINT
2529   if (yykind < YYNTOKENS)
2530     YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
2531 # endif
2532   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2533   YY_USE (yykind);
2534   YY_IGNORE_MAYBE_UNINITIALIZED_END
2535 }
2536
2537
2538 /*---------------------------.
2539 | Print this symbol on YYO.  |
2540 `---------------------------*/
2541
2542 static void
2543 yy_symbol_print (FILE *yyo,
2544                  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2545 {
2546   YYFPRINTF (yyo, "%s %s (",
2547              yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2548
2549   yy_symbol_value_print (yyo, yykind, yyvaluep);
2550   YYFPRINTF (yyo, ")");
2551 }
2552
2553 /*------------------------------------------------------------------.
2554 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2555 | TOP (included).                                                   |
2556 `------------------------------------------------------------------*/
2557
2558 static void
2559 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
2560 {
2561   YYFPRINTF (stderr, "Stack now");
2562   for (; yybottom <= yytop; yybottom++)
2563     {
2564       int yybot = *yybottom;
2565       YYFPRINTF (stderr, " %d", yybot);
2566     }
2567   YYFPRINTF (stderr, "\n");
2568 }
2569
2570 # define YY_STACK_PRINT(Bottom, Top)                            \
2571 do {                                                            \
2572   if (yydebug)                                                  \
2573     yy_stack_print ((Bottom), (Top));                           \
2574 } while (0)
2575
2576
2577 /*------------------------------------------------.
2578 | Report that the YYRULE is going to be reduced.  |
2579 `------------------------------------------------*/
2580
2581 static void
2582 yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
2583                  int yyrule)
2584 {
2585   int yylno = yyrline[yyrule];
2586   int yynrhs = yyr2[yyrule];
2587   int yyi;
2588   YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2589              yyrule - 1, yylno);
2590   /* The symbols being reduced.  */
2591   for (yyi = 0; yyi < yynrhs; yyi++)
2592     {
2593       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
2594       yy_symbol_print (stderr,
2595                        YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2596                        &yyvsp[(yyi + 1) - (yynrhs)]);
2597       YYFPRINTF (stderr, "\n");
2598     }
2599 }
2600
2601 # define YY_REDUCE_PRINT(Rule)          \
2602 do {                                    \
2603   if (yydebug)                          \
2604     yy_reduce_print (yyssp, yyvsp, Rule); \
2605 } while (0)
2606
2607 /* Nonzero means print parse trace.  It is left uninitialized so that
2608    multiple parsers can coexist.  */
2609 int yydebug;
2610 #else /* !YYDEBUG */
2611 # define YYDPRINTF(Args) ((void) 0)
2612 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2613 # define YY_STACK_PRINT(Bottom, Top)
2614 # define YY_REDUCE_PRINT(Rule)
2615 #endif /* !YYDEBUG */
2616
2617
2618 /* YYINITDEPTH -- initial size of the parser's stacks.  */
2619 #ifndef YYINITDEPTH
2620 # define YYINITDEPTH 200
2621 #endif
2622
2623 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2624    if the built-in stack extension method is used).
2625
2626    Do not make this value too large; the results are undefined if
2627    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2628    evaluated with infinite-precision integer arithmetic.  */
2629
2630 #ifndef YYMAXDEPTH
2631 # define YYMAXDEPTH 10000
2632 #endif
2633
2634
2635
2636
2637
2638
2639 /*-----------------------------------------------.
2640 | Release the memory associated to this symbol.  |
2641 `-----------------------------------------------*/
2642
2643 static void
2644 yydestruct (const char *yymsg,
2645             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
2646 {
2647   YY_USE (yyvaluep);
2648   if (!yymsg)
2649     yymsg = "Deleting";
2650   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
2651
2652   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2653   YY_USE (yykind);
2654   YY_IGNORE_MAYBE_UNINITIALIZED_END
2655 }
2656
2657
2658 /* Lookahead token kind.  */
2659 int yychar;
2660
2661 /* The semantic value of the lookahead symbol.  */
2662 YYSTYPE yylval;
2663 /* Number of syntax errors so far.  */
2664 int yynerrs;
2665
2666
2667
2668
2669 /*----------.
2670 | yyparse.  |
2671 `----------*/
2672
2673 int
2674 yyparse (void)
2675 {
2676     yy_state_fast_t yystate = 0;
2677     /* Number of tokens to shift before error messages enabled.  */
2678     int yyerrstatus = 0;
2679
2680     /* Refer to the stacks through separate pointers, to allow yyoverflow
2681        to reallocate them elsewhere.  */
2682
2683     /* Their size.  */
2684     YYPTRDIFF_T yystacksize = YYINITDEPTH;
2685
2686     /* The state stack: array, bottom, top.  */
2687     yy_state_t yyssa[YYINITDEPTH];
2688     yy_state_t *yyss = yyssa;
2689     yy_state_t *yyssp = yyss;
2690
2691     /* The semantic value stack: array, bottom, top.  */
2692     YYSTYPE yyvsa[YYINITDEPTH];
2693     YYSTYPE *yyvs = yyvsa;
2694     YYSTYPE *yyvsp = yyvs;
2695
2696   int yyn;
2697   /* The return value of yyparse.  */
2698   int yyresult;
2699   /* Lookahead symbol kind.  */
2700   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
2701   /* The variables used to return semantic value and location from the
2702      action routines.  */
2703   YYSTYPE yyval;
2704
2705
2706
2707 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
2708
2709   /* The number of symbols on the RHS of the reduced rule.
2710      Keep to zero when no symbol should be popped.  */
2711   int yylen = 0;
2712
2713   YYDPRINTF ((stderr, "Starting parse\n"));
2714
2715   yychar = YYEMPTY; /* Cause a token to be read.  */
2716   goto yysetstate;
2717
2718
2719 /*------------------------------------------------------------.
2720 | yynewstate -- push a new state, which is found in yystate.  |
2721 `------------------------------------------------------------*/
2722 yynewstate:
2723   /* In all cases, when you get here, the value and location stacks
2724      have just been pushed.  So pushing a state here evens the stacks.  */
2725   yyssp++;
2726
2727
2728 /*--------------------------------------------------------------------.
2729 | yysetstate -- set current state (the top of the stack) to yystate.  |
2730 `--------------------------------------------------------------------*/
2731 yysetstate:
2732   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2733   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2734   YY_IGNORE_USELESS_CAST_BEGIN
2735   *yyssp = YY_CAST (yy_state_t, yystate);
2736   YY_IGNORE_USELESS_CAST_END
2737   YY_STACK_PRINT (yyss, yyssp);
2738
2739   if (yyss + yystacksize - 1 <= yyssp)
2740 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2741     goto yyexhaustedlab;
2742 #else
2743     {
2744       /* Get the current used size of the three stacks, in elements.  */
2745       YYPTRDIFF_T yysize = yyssp - yyss + 1;
2746
2747 # if defined yyoverflow
2748       {
2749         /* Give user a chance to reallocate the stack.  Use copies of
2750            these so that the &'s don't force the real ones into
2751            memory.  */
2752         yy_state_t *yyss1 = yyss;
2753         YYSTYPE *yyvs1 = yyvs;
2754
2755         /* Each stack pointer address is followed by the size of the
2756            data in use in that stack, in bytes.  This used to be a
2757            conditional around just the two extra args, but that might
2758            be undefined if yyoverflow is a macro.  */
2759         yyoverflow (YY_("memory exhausted"),
2760                     &yyss1, yysize * YYSIZEOF (*yyssp),
2761                     &yyvs1, yysize * YYSIZEOF (*yyvsp),
2762                     &yystacksize);
2763         yyss = yyss1;
2764         yyvs = yyvs1;
2765       }
2766 # else /* defined YYSTACK_RELOCATE */
2767       /* Extend the stack our own way.  */
2768       if (YYMAXDEPTH <= yystacksize)
2769         goto yyexhaustedlab;
2770       yystacksize *= 2;
2771       if (YYMAXDEPTH < yystacksize)
2772         yystacksize = YYMAXDEPTH;
2773
2774       {
2775         yy_state_t *yyss1 = yyss;
2776         union yyalloc *yyptr =
2777           YY_CAST (union yyalloc *,
2778                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2779         if (! yyptr)
2780           goto yyexhaustedlab;
2781         YYSTACK_RELOCATE (yyss_alloc, yyss);
2782         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2783 #  undef YYSTACK_RELOCATE
2784         if (yyss1 != yyssa)
2785           YYSTACK_FREE (yyss1);
2786       }
2787 # endif
2788
2789       yyssp = yyss + yysize - 1;
2790       yyvsp = yyvs + yysize - 1;
2791
2792       YY_IGNORE_USELESS_CAST_BEGIN
2793       YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2794                   YY_CAST (long, yystacksize)));
2795       YY_IGNORE_USELESS_CAST_END
2796
2797       if (yyss + yystacksize - 1 <= yyssp)
2798         YYABORT;
2799     }
2800 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2801
2802   if (yystate == YYFINAL)
2803     YYACCEPT;
2804
2805   goto yybackup;
2806
2807
2808 /*-----------.
2809 | yybackup.  |
2810 `-----------*/
2811 yybackup:
2812   /* Do appropriate processing given the current state.  Read a
2813      lookahead token if we need one and don't already have one.  */
2814
2815   /* First try to decide what to do without reference to lookahead token.  */
2816   yyn = yypact[yystate];
2817   if (yypact_value_is_default (yyn))
2818     goto yydefault;
2819
2820   /* Not known => get a lookahead token if don't already have one.  */
2821
2822   /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
2823   if (yychar == YYEMPTY)
2824     {
2825       YYDPRINTF ((stderr, "Reading a token\n"));
2826       yychar = yylex ();
2827     }
2828
2829   if (yychar <= YYEOF)
2830     {
2831       yychar = YYEOF;
2832       yytoken = YYSYMBOL_YYEOF;
2833       YYDPRINTF ((stderr, "Now at end of input.\n"));
2834     }
2835   else if (yychar == YYerror)
2836     {
2837       /* The scanner already issued an error message, process directly
2838          to error recovery.  But do not keep the error token as
2839          lookahead, it is too special and may lead us to an endless
2840          loop in error recovery. */
2841       yychar = YYUNDEF;
2842       yytoken = YYSYMBOL_YYerror;
2843       goto yyerrlab1;
2844     }
2845   else
2846     {
2847       yytoken = YYTRANSLATE (yychar);
2848       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2849     }
2850
2851   /* If the proper action on seeing token YYTOKEN is to reduce or to
2852      detect an error, take that action.  */
2853   yyn += yytoken;
2854   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2855     goto yydefault;
2856   yyn = yytable[yyn];
2857   if (yyn <= 0)
2858     {
2859       if (yytable_value_is_error (yyn))
2860         goto yyerrlab;
2861       yyn = -yyn;
2862       goto yyreduce;
2863     }
2864
2865   /* Count tokens shifted since error; after three, turn off error
2866      status.  */
2867   if (yyerrstatus)
2868     yyerrstatus--;
2869
2870   /* Shift the lookahead token.  */
2871   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2872   yystate = yyn;
2873   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2874   *++yyvsp = yylval;
2875   YY_IGNORE_MAYBE_UNINITIALIZED_END
2876
2877   /* Discard the shifted token.  */
2878   yychar = YYEMPTY;
2879   goto yynewstate;
2880
2881
2882 /*-----------------------------------------------------------.
2883 | yydefault -- do the default action for the current state.  |
2884 `-----------------------------------------------------------*/
2885 yydefault:
2886   yyn = yydefact[yystate];
2887   if (yyn == 0)
2888     goto yyerrlab;
2889   goto yyreduce;
2890
2891
2892 /*-----------------------------.
2893 | yyreduce -- do a reduction.  |
2894 `-----------------------------*/
2895 yyreduce:
2896   /* yyn is the number of a rule to reduce with.  */
2897   yylen = yyr2[yyn];
2898
2899   /* If YYLEN is nonzero, implement the default value of the action:
2900      '$$ = $1'.
2901
2902      Otherwise, the following line sets YYVAL to garbage.
2903      This behavior is undocumented and Bison
2904      users should not rely upon it.  Assigning to YYVAL
2905      unconditionally makes the parser a bit smaller, and it avoids a
2906      GCC warning that YYVAL may be used uninitialized.  */
2907   yyval = yyvsp[1-yylen];
2908
2909
2910   YY_REDUCE_PRINT (yyn);
2911   switch (yyn)
2912     {
2913   case 18: /* force_toplevel: VAR_FORCE_TOPLEVEL  */
2914 #line 215 "util/configparser.y"
2915         {
2916                 OUTYY(("\nP(force-toplevel)\n"));
2917                 cfg_parser->started_toplevel = 0;
2918         }
2919 #line 2920 "util/configparser.c"
2920     break;
2921
2922   case 19: /* serverstart: VAR_SERVER  */
2923 #line 222 "util/configparser.y"
2924         {
2925                 OUTYY(("\nP(server:)\n"));
2926                 cfg_parser->started_toplevel = 1;
2927         }
2928 #line 2929 "util/configparser.c"
2929     break;
2930
2931   case 264: /* stubstart: VAR_STUB_ZONE  */
2932 #line 339 "util/configparser.y"
2933         {
2934                 struct config_stub* s;
2935                 OUTYY(("\nP(stub_zone:)\n"));
2936                 cfg_parser->started_toplevel = 1;
2937                 s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
2938                 if(s) {
2939                         s->next = cfg_parser->cfg->stubs;
2940                         cfg_parser->cfg->stubs = s;
2941                 } else {
2942                         yyerror("out of memory");
2943                 }
2944         }
2945 #line 2946 "util/configparser.c"
2946     break;
2947
2948   case 275: /* forwardstart: VAR_FORWARD_ZONE  */
2949 #line 358 "util/configparser.y"
2950         {
2951                 struct config_stub* s;
2952                 OUTYY(("\nP(forward_zone:)\n"));
2953                 cfg_parser->started_toplevel = 1;
2954                 s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
2955                 if(s) {
2956                         s->next = cfg_parser->cfg->forwards;
2957                         cfg_parser->cfg->forwards = s;
2958                 } else {
2959                         yyerror("out of memory");
2960                 }
2961         }
2962 #line 2963 "util/configparser.c"
2963     break;
2964
2965   case 285: /* viewstart: VAR_VIEW  */
2966 #line 377 "util/configparser.y"
2967         {
2968                 struct config_view* s;
2969                 OUTYY(("\nP(view:)\n"));
2970                 cfg_parser->started_toplevel = 1;
2971                 s = (struct config_view*)calloc(1, sizeof(struct config_view));
2972                 if(s) {
2973                         s->next = cfg_parser->cfg->views;
2974                         if(s->next && !s->next->name)
2975                                 yyerror("view without name");
2976                         cfg_parser->cfg->views = s;
2977                 } else {
2978                         yyerror("out of memory");
2979                 }
2980         }
2981 #line 2982 "util/configparser.c"
2982     break;
2983
2984   case 295: /* authstart: VAR_AUTH_ZONE  */
2985 #line 398 "util/configparser.y"
2986         {
2987                 struct config_auth* s;
2988                 OUTYY(("\nP(auth_zone:)\n"));
2989                 cfg_parser->started_toplevel = 1;
2990                 s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
2991                 if(s) {
2992                         s->next = cfg_parser->cfg->auths;
2993                         cfg_parser->cfg->auths = s;
2994                         /* defaults for auth zone */
2995                         s->for_downstream = 1;
2996                         s->for_upstream = 1;
2997                         s->fallback_enabled = 0;
2998                         s->zonemd_check = 0;
2999                         s->zonemd_reject_absence = 0;
3000                         s->isrpz = 0;
3001                 } else {
3002                         yyerror("out of memory");
3003                 }
3004         }
3005 #line 3006 "util/configparser.c"
3006     break;
3007
3008   case 308: /* rpz_tag: VAR_TAGS STRING_ARG  */
3009 #line 426 "util/configparser.y"
3010         {
3011                 uint8_t* bitlist;
3012                 size_t len = 0;
3013                 OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[0].str)));
3014                 bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
3015                         &len);
3016                 free((yyvsp[0].str));
3017                 if(!bitlist) {
3018                         yyerror("could not parse tags, (define-tag them first)");
3019                 }
3020                 if(bitlist) {
3021                         cfg_parser->cfg->auths->rpz_taglist = bitlist;
3022                         cfg_parser->cfg->auths->rpz_taglistlen = len;
3023
3024                 }
3025         }
3026 #line 3027 "util/configparser.c"
3027     break;
3028
3029   case 309: /* rpz_action_override: VAR_RPZ_ACTION_OVERRIDE STRING_ARG  */
3030 #line 445 "util/configparser.y"
3031         {
3032                 OUTYY(("P(rpz_action_override:%s)\n", (yyvsp[0].str)));
3033                 if(strcmp((yyvsp[0].str), "nxdomain")!=0 && strcmp((yyvsp[0].str), "nodata")!=0 &&
3034                    strcmp((yyvsp[0].str), "passthru")!=0 && strcmp((yyvsp[0].str), "drop")!=0 &&
3035                    strcmp((yyvsp[0].str), "cname")!=0 && strcmp((yyvsp[0].str), "disabled")!=0) {
3036                         yyerror("rpz-action-override action: expected nxdomain, "
3037                                 "nodata, passthru, drop, cname or disabled");
3038                         free((yyvsp[0].str));
3039                         cfg_parser->cfg->auths->rpz_action_override = NULL;
3040                 }
3041                 else {
3042                         cfg_parser->cfg->auths->rpz_action_override = (yyvsp[0].str);
3043                 }
3044         }
3045 #line 3046 "util/configparser.c"
3046     break;
3047
3048   case 310: /* rpz_cname_override: VAR_RPZ_CNAME_OVERRIDE STRING_ARG  */
3049 #line 462 "util/configparser.y"
3050         {
3051                 OUTYY(("P(rpz_cname_override:%s)\n", (yyvsp[0].str)));
3052                 free(cfg_parser->cfg->auths->rpz_cname);
3053                 cfg_parser->cfg->auths->rpz_cname = (yyvsp[0].str);
3054         }
3055 #line 3056 "util/configparser.c"
3056     break;
3057
3058   case 311: /* rpz_log: VAR_RPZ_LOG STRING_ARG  */
3059 #line 470 "util/configparser.y"
3060         {
3061                 OUTYY(("P(rpz_log:%s)\n", (yyvsp[0].str)));
3062                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3063                         yyerror("expected yes or no.");
3064                 else cfg_parser->cfg->auths->rpz_log = (strcmp((yyvsp[0].str), "yes")==0);
3065                 free((yyvsp[0].str));
3066         }
3067 #line 3068 "util/configparser.c"
3068     break;
3069
3070   case 312: /* rpz_log_name: VAR_RPZ_LOG_NAME STRING_ARG  */
3071 #line 480 "util/configparser.y"
3072         {
3073                 OUTYY(("P(rpz_log_name:%s)\n", (yyvsp[0].str)));
3074                 free(cfg_parser->cfg->auths->rpz_log_name);
3075                 cfg_parser->cfg->auths->rpz_log_name = (yyvsp[0].str);
3076         }
3077 #line 3078 "util/configparser.c"
3078     break;
3079
3080   case 313: /* rpz_signal_nxdomain_ra: VAR_RPZ_SIGNAL_NXDOMAIN_RA STRING_ARG  */
3081 #line 487 "util/configparser.y"
3082         {
3083                 OUTYY(("P(rpz_signal_nxdomain_ra:%s)\n", (yyvsp[0].str)));
3084                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3085                         yyerror("expected yes or no.");
3086                 else cfg_parser->cfg->auths->rpz_signal_nxdomain_ra = (strcmp((yyvsp[0].str), "yes")==0);
3087                 free((yyvsp[0].str));
3088         }
3089 #line 3090 "util/configparser.c"
3090     break;
3091
3092   case 314: /* rpzstart: VAR_RPZ  */
3093 #line 497 "util/configparser.y"
3094         {
3095                 struct config_auth* s;
3096                 OUTYY(("\nP(rpz:)\n"));
3097                 cfg_parser->started_toplevel = 1;
3098                 s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
3099                 if(s) {
3100                         s->next = cfg_parser->cfg->auths;
3101                         cfg_parser->cfg->auths = s;
3102                         /* defaults for RPZ auth zone */
3103                         s->for_downstream = 0;
3104                         s->for_upstream = 0;
3105                         s->fallback_enabled = 0;
3106                         s->isrpz = 1;
3107                 } else {
3108                         yyerror("out of memory");
3109                 }
3110         }
3111 #line 3112 "util/configparser.c"
3112     break;
3113
3114   case 329: /* server_num_threads: VAR_NUM_THREADS STRING_ARG  */
3115 #line 522 "util/configparser.y"
3116         {
3117                 OUTYY(("P(server_num_threads:%s)\n", (yyvsp[0].str)));
3118                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3119                         yyerror("number expected");
3120                 else cfg_parser->cfg->num_threads = atoi((yyvsp[0].str));
3121                 free((yyvsp[0].str));
3122         }
3123 #line 3124 "util/configparser.c"
3124     break;
3125
3126   case 330: /* server_verbosity: VAR_VERBOSITY STRING_ARG  */
3127 #line 531 "util/configparser.y"
3128         {
3129                 OUTYY(("P(server_verbosity:%s)\n", (yyvsp[0].str)));
3130                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3131                         yyerror("number expected");
3132                 else cfg_parser->cfg->verbosity = atoi((yyvsp[0].str));
3133                 free((yyvsp[0].str));
3134         }
3135 #line 3136 "util/configparser.c"
3136     break;
3137
3138   case 331: /* server_statistics_interval: VAR_STATISTICS_INTERVAL STRING_ARG  */
3139 #line 540 "util/configparser.y"
3140         {
3141                 OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[0].str)));
3142                 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3143                         cfg_parser->cfg->stat_interval = 0;
3144                 else if(atoi((yyvsp[0].str)) == 0)
3145                         yyerror("number expected");
3146                 else cfg_parser->cfg->stat_interval = atoi((yyvsp[0].str));
3147                 free((yyvsp[0].str));
3148         }
3149 #line 3150 "util/configparser.c"
3150     break;
3151
3152   case 332: /* server_statistics_cumulative: VAR_STATISTICS_CUMULATIVE STRING_ARG  */
3153 #line 551 "util/configparser.y"
3154         {
3155                 OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[0].str)));
3156                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3157                         yyerror("expected yes or no.");
3158                 else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[0].str), "yes")==0);
3159                 free((yyvsp[0].str));
3160         }
3161 #line 3162 "util/configparser.c"
3162     break;
3163
3164   case 333: /* server_extended_statistics: VAR_EXTENDED_STATISTICS STRING_ARG  */
3165 #line 560 "util/configparser.y"
3166         {
3167                 OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[0].str)));
3168                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3169                         yyerror("expected yes or no.");
3170                 else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[0].str), "yes")==0);
3171                 free((yyvsp[0].str));
3172         }
3173 #line 3174 "util/configparser.c"
3174     break;
3175
3176   case 334: /* server_statistics_inhibit_zero: VAR_STATISTICS_INHIBIT_ZERO STRING_ARG  */
3177 #line 569 "util/configparser.y"
3178         {
3179                 OUTYY(("P(server_statistics_inhibit_zero:%s)\n", (yyvsp[0].str)));
3180                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3181                         yyerror("expected yes or no.");
3182                 else cfg_parser->cfg->stat_inhibit_zero = (strcmp((yyvsp[0].str), "yes")==0);
3183                 free((yyvsp[0].str));
3184         }
3185 #line 3186 "util/configparser.c"
3186     break;
3187
3188   case 335: /* server_shm_enable: VAR_SHM_ENABLE STRING_ARG  */
3189 #line 578 "util/configparser.y"
3190         {
3191                 OUTYY(("P(server_shm_enable:%s)\n", (yyvsp[0].str)));
3192                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3193                         yyerror("expected yes or no.");
3194                 else cfg_parser->cfg->shm_enable = (strcmp((yyvsp[0].str), "yes")==0);
3195                 free((yyvsp[0].str));
3196         }
3197 #line 3198 "util/configparser.c"
3198     break;
3199
3200   case 336: /* server_shm_key: VAR_SHM_KEY STRING_ARG  */
3201 #line 587 "util/configparser.y"
3202         {
3203                 OUTYY(("P(server_shm_key:%s)\n", (yyvsp[0].str)));
3204                 if(strcmp((yyvsp[0].str), "") == 0 || strcmp((yyvsp[0].str), "0") == 0)
3205                         cfg_parser->cfg->shm_key = 0;
3206                 else if(atoi((yyvsp[0].str)) == 0)
3207                         yyerror("number expected");
3208                 else cfg_parser->cfg->shm_key = atoi((yyvsp[0].str));
3209                 free((yyvsp[0].str));
3210         }
3211 #line 3212 "util/configparser.c"
3212     break;
3213
3214   case 337: /* server_port: VAR_PORT STRING_ARG  */
3215 #line 598 "util/configparser.y"
3216         {
3217                 OUTYY(("P(server_port:%s)\n", (yyvsp[0].str)));
3218                 if(atoi((yyvsp[0].str)) == 0)
3219                         yyerror("port number expected");
3220                 else cfg_parser->cfg->port = atoi((yyvsp[0].str));
3221                 free((yyvsp[0].str));
3222         }
3223 #line 3224 "util/configparser.c"
3224     break;
3225
3226   case 338: /* server_send_client_subnet: VAR_SEND_CLIENT_SUBNET STRING_ARG  */
3227 #line 607 "util/configparser.y"
3228         {
3229         #ifdef CLIENT_SUBNET
3230                 OUTYY(("P(server_send_client_subnet:%s)\n", (yyvsp[0].str)));
3231                 if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet, (yyvsp[0].str)))
3232                         fatal_exit("out of memory adding client-subnet");
3233         #else
3234                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3235                 free((yyvsp[0].str));
3236         #endif
3237         }
3238 #line 3239 "util/configparser.c"
3239     break;
3240
3241   case 339: /* server_client_subnet_zone: VAR_CLIENT_SUBNET_ZONE STRING_ARG  */
3242 #line 619 "util/configparser.y"
3243         {
3244         #ifdef CLIENT_SUBNET
3245                 OUTYY(("P(server_client_subnet_zone:%s)\n", (yyvsp[0].str)));
3246                 if(!cfg_strlist_insert(&cfg_parser->cfg->client_subnet_zone,
3247                         (yyvsp[0].str)))
3248                         fatal_exit("out of memory adding client-subnet-zone");
3249         #else
3250                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3251                 free((yyvsp[0].str));
3252         #endif
3253         }
3254 #line 3255 "util/configparser.c"
3255     break;
3256
3257   case 340: /* server_client_subnet_always_forward: VAR_CLIENT_SUBNET_ALWAYS_FORWARD STRING_ARG  */
3258 #line 633 "util/configparser.y"
3259         {
3260         #ifdef CLIENT_SUBNET
3261                 OUTYY(("P(server_client_subnet_always_forward:%s)\n", (yyvsp[0].str)));
3262                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3263                         yyerror("expected yes or no.");
3264                 else
3265                         cfg_parser->cfg->client_subnet_always_forward =
3266                                 (strcmp((yyvsp[0].str), "yes")==0);
3267         #else
3268                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3269         #endif
3270                 free((yyvsp[0].str));
3271         }
3272 #line 3273 "util/configparser.c"
3273     break;
3274
3275   case 341: /* server_client_subnet_opcode: VAR_CLIENT_SUBNET_OPCODE STRING_ARG  */
3276 #line 648 "util/configparser.y"
3277         {
3278         #ifdef CLIENT_SUBNET
3279                 OUTYY(("P(client_subnet_opcode:%s)\n", (yyvsp[0].str)));
3280                 OUTYY(("P(Deprecated option, ignoring)\n"));
3281         #else
3282                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3283         #endif
3284                 free((yyvsp[0].str));
3285         }
3286 #line 3287 "util/configparser.c"
3287     break;
3288
3289   case 342: /* server_max_client_subnet_ipv4: VAR_MAX_CLIENT_SUBNET_IPV4 STRING_ARG  */
3290 #line 659 "util/configparser.y"
3291         {
3292         #ifdef CLIENT_SUBNET
3293                 OUTYY(("P(max_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3294                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3295                         yyerror("IPv4 subnet length expected");
3296                 else if (atoi((yyvsp[0].str)) > 32)
3297                         cfg_parser->cfg->max_client_subnet_ipv4 = 32;
3298                 else if (atoi((yyvsp[0].str)) < 0)
3299                         cfg_parser->cfg->max_client_subnet_ipv4 = 0;
3300                 else cfg_parser->cfg->max_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3301         #else
3302                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3303         #endif
3304                 free((yyvsp[0].str));
3305         }
3306 #line 3307 "util/configparser.c"
3307     break;
3308
3309   case 343: /* server_max_client_subnet_ipv6: VAR_MAX_CLIENT_SUBNET_IPV6 STRING_ARG  */
3310 #line 676 "util/configparser.y"
3311         {
3312         #ifdef CLIENT_SUBNET
3313                 OUTYY(("P(max_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3314                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3315                         yyerror("Ipv6 subnet length expected");
3316                 else if (atoi((yyvsp[0].str)) > 128)
3317                         cfg_parser->cfg->max_client_subnet_ipv6 = 128;
3318                 else if (atoi((yyvsp[0].str)) < 0)
3319                         cfg_parser->cfg->max_client_subnet_ipv6 = 0;
3320                 else cfg_parser->cfg->max_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3321         #else
3322                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3323         #endif
3324                 free((yyvsp[0].str));
3325         }
3326 #line 3327 "util/configparser.c"
3327     break;
3328
3329   case 344: /* server_min_client_subnet_ipv4: VAR_MIN_CLIENT_SUBNET_IPV4 STRING_ARG  */
3330 #line 693 "util/configparser.y"
3331         {
3332         #ifdef CLIENT_SUBNET
3333                 OUTYY(("P(min_client_subnet_ipv4:%s)\n", (yyvsp[0].str)));
3334                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3335                         yyerror("IPv4 subnet length expected");
3336                 else if (atoi((yyvsp[0].str)) > 32)
3337                         cfg_parser->cfg->min_client_subnet_ipv4 = 32;
3338                 else if (atoi((yyvsp[0].str)) < 0)
3339                         cfg_parser->cfg->min_client_subnet_ipv4 = 0;
3340                 else cfg_parser->cfg->min_client_subnet_ipv4 = (uint8_t)atoi((yyvsp[0].str));
3341         #else
3342                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3343         #endif
3344                 free((yyvsp[0].str));
3345         }
3346 #line 3347 "util/configparser.c"
3347     break;
3348
3349   case 345: /* server_min_client_subnet_ipv6: VAR_MIN_CLIENT_SUBNET_IPV6 STRING_ARG  */
3350 #line 710 "util/configparser.y"
3351         {
3352         #ifdef CLIENT_SUBNET
3353                 OUTYY(("P(min_client_subnet_ipv6:%s)\n", (yyvsp[0].str)));
3354                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3355                         yyerror("Ipv6 subnet length expected");
3356                 else if (atoi((yyvsp[0].str)) > 128)
3357                         cfg_parser->cfg->min_client_subnet_ipv6 = 128;
3358                 else if (atoi((yyvsp[0].str)) < 0)
3359                         cfg_parser->cfg->min_client_subnet_ipv6 = 0;
3360                 else cfg_parser->cfg->min_client_subnet_ipv6 = (uint8_t)atoi((yyvsp[0].str));
3361         #else
3362                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3363         #endif
3364                 free((yyvsp[0].str));
3365         }
3366 #line 3367 "util/configparser.c"
3367     break;
3368
3369   case 346: /* server_max_ecs_tree_size_ipv4: VAR_MAX_ECS_TREE_SIZE_IPV4 STRING_ARG  */
3370 #line 727 "util/configparser.y"
3371         {
3372         #ifdef CLIENT_SUBNET
3373                 OUTYY(("P(max_ecs_tree_size_ipv4:%s)\n", (yyvsp[0].str)));
3374                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3375                         yyerror("IPv4 ECS tree size expected");
3376                 else if (atoi((yyvsp[0].str)) < 0)
3377                         cfg_parser->cfg->max_ecs_tree_size_ipv4 = 0;
3378                 else cfg_parser->cfg->max_ecs_tree_size_ipv4 = (uint32_t)atoi((yyvsp[0].str));
3379         #else
3380                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3381         #endif
3382                 free((yyvsp[0].str));
3383         }
3384 #line 3385 "util/configparser.c"
3385     break;
3386
3387   case 347: /* server_max_ecs_tree_size_ipv6: VAR_MAX_ECS_TREE_SIZE_IPV6 STRING_ARG  */
3388 #line 742 "util/configparser.y"
3389         {
3390         #ifdef CLIENT_SUBNET
3391                 OUTYY(("P(max_ecs_tree_size_ipv6:%s)\n", (yyvsp[0].str)));
3392                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3393                         yyerror("IPv6 ECS tree size expected");
3394                 else if (atoi((yyvsp[0].str)) < 0)
3395                         cfg_parser->cfg->max_ecs_tree_size_ipv6 = 0;
3396                 else cfg_parser->cfg->max_ecs_tree_size_ipv6 = (uint32_t)atoi((yyvsp[0].str));
3397         #else
3398                 OUTYY(("P(Compiled without edns subnet option, ignoring)\n"));
3399         #endif
3400                 free((yyvsp[0].str));
3401         }
3402 #line 3403 "util/configparser.c"
3403     break;
3404
3405   case 348: /* server_interface: VAR_INTERFACE STRING_ARG  */
3406 #line 757 "util/configparser.y"
3407         {
3408                 OUTYY(("P(server_interface:%s)\n", (yyvsp[0].str)));
3409                 if(cfg_parser->cfg->num_ifs == 0)
3410                         cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
3411                 else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
3412                                 (cfg_parser->cfg->num_ifs+1)*sizeof(char*));
3413                 if(!cfg_parser->cfg->ifs)
3414                         yyerror("out of memory");
3415                 else
3416                         cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[0].str);
3417         }
3418 #line 3419 "util/configparser.c"
3419     break;
3420
3421   case 349: /* server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG  */
3422 #line 770 "util/configparser.y"
3423         {
3424                 OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[0].str)));
3425                 if(cfg_parser->cfg->num_out_ifs == 0)
3426                         cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
3427                 else cfg_parser->cfg->out_ifs = realloc(
3428                         cfg_parser->cfg->out_ifs,
3429                         (cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
3430                 if(!cfg_parser->cfg->out_ifs)
3431                         yyerror("out of memory");
3432                 else
3433                         cfg_parser->cfg->out_ifs[
3434                                 cfg_parser->cfg->num_out_ifs++] = (yyvsp[0].str);
3435         }
3436 #line 3437 "util/configparser.c"
3437     break;
3438
3439   case 350: /* server_outgoing_range: VAR_OUTGOING_RANGE STRING_ARG  */
3440 #line 785 "util/configparser.y"
3441         {
3442                 OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[0].str)));
3443                 if(atoi((yyvsp[0].str)) == 0)
3444                         yyerror("number expected");
3445                 else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[0].str));
3446                 free((yyvsp[0].str));
3447         }
3448 #line 3449 "util/configparser.c"
3449     break;
3450
3451   case 351: /* server_outgoing_port_permit: VAR_OUTGOING_PORT_PERMIT STRING_ARG  */
3452 #line 794 "util/configparser.y"
3453         {
3454                 OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[0].str)));
3455                 if(!cfg_mark_ports((yyvsp[0].str), 1,
3456                         cfg_parser->cfg->outgoing_avail_ports, 65536))
3457                         yyerror("port number or range (\"low-high\") expected");
3458                 free((yyvsp[0].str));
3459         }
3460 #line 3461 "util/configparser.c"
3461     break;
3462
3463   case 352: /* server_outgoing_port_avoid: VAR_OUTGOING_PORT_AVOID STRING_ARG  */
3464 #line 803 "util/configparser.y"
3465         {
3466                 OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[0].str)));
3467                 if(!cfg_mark_ports((yyvsp[0].str), 0,
3468                         cfg_parser->cfg->outgoing_avail_ports, 65536))
3469                         yyerror("port number or range (\"low-high\") expected");
3470                 free((yyvsp[0].str));
3471         }
3472 #line 3473 "util/configparser.c"
3473     break;
3474
3475   case 353: /* server_outgoing_num_tcp: VAR_OUTGOING_NUM_TCP STRING_ARG  */
3476 #line 812 "util/configparser.y"
3477         {
3478                 OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[0].str)));
3479                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3480                         yyerror("number expected");
3481                 else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[0].str));
3482                 free((yyvsp[0].str));
3483         }
3484 #line 3485 "util/configparser.c"
3485     break;
3486
3487   case 354: /* server_incoming_num_tcp: VAR_INCOMING_NUM_TCP STRING_ARG  */
3488 #line 821 "util/configparser.y"
3489         {
3490                 OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[0].str)));
3491                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3492                         yyerror("number expected");
3493                 else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[0].str));
3494                 free((yyvsp[0].str));
3495         }
3496 #line 3497 "util/configparser.c"
3497     break;
3498
3499   case 355: /* server_interface_automatic: VAR_INTERFACE_AUTOMATIC STRING_ARG  */
3500 #line 830 "util/configparser.y"
3501         {
3502                 OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[0].str)));
3503                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3504                         yyerror("expected yes or no.");
3505                 else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[0].str), "yes")==0);
3506                 free((yyvsp[0].str));
3507         }
3508 #line 3509 "util/configparser.c"
3509     break;
3510
3511   case 356: /* server_interface_automatic_ports: VAR_INTERFACE_AUTOMATIC_PORTS STRING_ARG  */
3512 #line 839 "util/configparser.y"
3513         {
3514                 OUTYY(("P(server_interface_automatic_ports:%s)\n", (yyvsp[0].str)));
3515                 free(cfg_parser->cfg->if_automatic_ports);
3516                 cfg_parser->cfg->if_automatic_ports = (yyvsp[0].str);
3517         }
3518 #line 3519 "util/configparser.c"
3519     break;
3520
3521   case 357: /* server_do_ip4: VAR_DO_IP4 STRING_ARG  */
3522 #line 846 "util/configparser.y"
3523         {
3524                 OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[0].str)));
3525                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3526                         yyerror("expected yes or no.");
3527                 else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3528                 free((yyvsp[0].str));
3529         }
3530 #line 3531 "util/configparser.c"
3531     break;
3532
3533   case 358: /* server_do_ip6: VAR_DO_IP6 STRING_ARG  */
3534 #line 855 "util/configparser.y"
3535         {
3536                 OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[0].str)));
3537                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3538                         yyerror("expected yes or no.");
3539                 else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
3540                 free((yyvsp[0].str));
3541         }
3542 #line 3543 "util/configparser.c"
3543     break;
3544
3545   case 359: /* server_do_nat64: VAR_DO_NAT64 STRING_ARG  */
3546 #line 864 "util/configparser.y"
3547         {
3548                 OUTYY(("P(server_do_nat64:%s)\n", (yyvsp[0].str)));
3549                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3550                         yyerror("expected yes or no.");
3551                 else cfg_parser->cfg->do_nat64 = (strcmp((yyvsp[0].str), "yes")==0);
3552                 free((yyvsp[0].str));
3553         }
3554 #line 3555 "util/configparser.c"
3555     break;
3556
3557   case 360: /* server_do_udp: VAR_DO_UDP STRING_ARG  */
3558 #line 873 "util/configparser.y"
3559         {
3560                 OUTYY(("P(server_do_udp:%s)\n", (yyvsp[0].str)));
3561                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3562                         yyerror("expected yes or no.");
3563                 else cfg_parser->cfg->do_udp = (strcmp((yyvsp[0].str), "yes")==0);
3564                 free((yyvsp[0].str));
3565         }
3566 #line 3567 "util/configparser.c"
3567     break;
3568
3569   case 361: /* server_do_tcp: VAR_DO_TCP STRING_ARG  */
3570 #line 882 "util/configparser.y"
3571         {
3572                 OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[0].str)));
3573                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3574                         yyerror("expected yes or no.");
3575                 else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[0].str), "yes")==0);
3576                 free((yyvsp[0].str));
3577         }
3578 #line 3579 "util/configparser.c"
3579     break;
3580
3581   case 362: /* server_prefer_ip4: VAR_PREFER_IP4 STRING_ARG  */
3582 #line 891 "util/configparser.y"
3583         {
3584                 OUTYY(("P(server_prefer_ip4:%s)\n", (yyvsp[0].str)));
3585                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3586                         yyerror("expected yes or no.");
3587                 else cfg_parser->cfg->prefer_ip4 = (strcmp((yyvsp[0].str), "yes")==0);
3588                 free((yyvsp[0].str));
3589         }
3590 #line 3591 "util/configparser.c"
3591     break;
3592
3593   case 363: /* server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG  */
3594 #line 900 "util/configparser.y"
3595         {
3596                 OUTYY(("P(server_prefer_ip6:%s)\n", (yyvsp[0].str)));
3597                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3598                         yyerror("expected yes or no.");
3599                 else cfg_parser->cfg->prefer_ip6 = (strcmp((yyvsp[0].str), "yes")==0);
3600                 free((yyvsp[0].str));
3601         }
3602 #line 3603 "util/configparser.c"
3603     break;
3604
3605   case 364: /* server_tcp_mss: VAR_TCP_MSS STRING_ARG  */
3606 #line 909 "util/configparser.y"
3607         {
3608                 OUTYY(("P(server_tcp_mss:%s)\n", (yyvsp[0].str)));
3609                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3610                                 yyerror("number expected");
3611                 else cfg_parser->cfg->tcp_mss = atoi((yyvsp[0].str));
3612                 free((yyvsp[0].str));
3613         }
3614 #line 3615 "util/configparser.c"
3615     break;
3616
3617   case 365: /* server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG  */
3618 #line 918 "util/configparser.y"
3619         {
3620                 OUTYY(("P(server_outgoing_tcp_mss:%s)\n", (yyvsp[0].str)));
3621                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3622                         yyerror("number expected");
3623                 else cfg_parser->cfg->outgoing_tcp_mss = atoi((yyvsp[0].str));
3624                 free((yyvsp[0].str));
3625         }
3626 #line 3627 "util/configparser.c"
3627     break;
3628
3629   case 366: /* server_tcp_idle_timeout: VAR_TCP_IDLE_TIMEOUT STRING_ARG  */
3630 #line 927 "util/configparser.y"
3631         {
3632                 OUTYY(("P(server_tcp_idle_timeout:%s)\n", (yyvsp[0].str)));
3633                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3634                         yyerror("number expected");
3635                 else if (atoi((yyvsp[0].str)) > 120000)
3636                         cfg_parser->cfg->tcp_idle_timeout = 120000;
3637                 else if (atoi((yyvsp[0].str)) < 1)
3638                         cfg_parser->cfg->tcp_idle_timeout = 1;
3639                 else cfg_parser->cfg->tcp_idle_timeout = atoi((yyvsp[0].str));
3640                 free((yyvsp[0].str));
3641         }
3642 #line 3643 "util/configparser.c"
3643     break;
3644
3645   case 367: /* server_max_reuse_tcp_queries: VAR_MAX_REUSE_TCP_QUERIES STRING_ARG  */
3646 #line 940 "util/configparser.y"
3647         {
3648                 OUTYY(("P(server_max_reuse_tcp_queries:%s)\n", (yyvsp[0].str)));
3649                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3650                         yyerror("number expected");
3651                 else if (atoi((yyvsp[0].str)) < 1)
3652                         cfg_parser->cfg->max_reuse_tcp_queries = 0;
3653                 else cfg_parser->cfg->max_reuse_tcp_queries = atoi((yyvsp[0].str));
3654                 free((yyvsp[0].str));
3655         }
3656 #line 3657 "util/configparser.c"
3657     break;
3658
3659   case 368: /* server_tcp_reuse_timeout: VAR_TCP_REUSE_TIMEOUT STRING_ARG  */
3660 #line 951 "util/configparser.y"
3661         {
3662                 OUTYY(("P(server_tcp_reuse_timeout:%s)\n", (yyvsp[0].str)));
3663                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3664                         yyerror("number expected");
3665                 else if (atoi((yyvsp[0].str)) < 1)
3666                         cfg_parser->cfg->tcp_reuse_timeout = 0;
3667                 else cfg_parser->cfg->tcp_reuse_timeout = atoi((yyvsp[0].str));
3668                 free((yyvsp[0].str));
3669         }
3670 #line 3671 "util/configparser.c"
3671     break;
3672
3673   case 369: /* server_tcp_auth_query_timeout: VAR_TCP_AUTH_QUERY_TIMEOUT STRING_ARG  */
3674 #line 962 "util/configparser.y"
3675         {
3676                 OUTYY(("P(server_tcp_auth_query_timeout:%s)\n", (yyvsp[0].str)));
3677                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3678                         yyerror("number expected");
3679                 else if (atoi((yyvsp[0].str)) < 1)
3680                         cfg_parser->cfg->tcp_auth_query_timeout = 0;
3681                 else cfg_parser->cfg->tcp_auth_query_timeout = atoi((yyvsp[0].str));
3682                 free((yyvsp[0].str));
3683         }
3684 #line 3685 "util/configparser.c"
3685     break;
3686
3687   case 370: /* server_tcp_keepalive: VAR_EDNS_TCP_KEEPALIVE STRING_ARG  */
3688 #line 973 "util/configparser.y"
3689         {
3690                 OUTYY(("P(server_tcp_keepalive:%s)\n", (yyvsp[0].str)));
3691                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3692                         yyerror("expected yes or no.");
3693                 else cfg_parser->cfg->do_tcp_keepalive = (strcmp((yyvsp[0].str), "yes")==0);
3694                 free((yyvsp[0].str));
3695         }
3696 #line 3697 "util/configparser.c"
3697     break;
3698
3699   case 371: /* server_tcp_keepalive_timeout: VAR_EDNS_TCP_KEEPALIVE_TIMEOUT STRING_ARG  */
3700 #line 982 "util/configparser.y"
3701         {
3702                 OUTYY(("P(server_tcp_keepalive_timeout:%s)\n", (yyvsp[0].str)));
3703                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3704                         yyerror("number expected");
3705                 else if (atoi((yyvsp[0].str)) > 6553500)
3706                         cfg_parser->cfg->tcp_keepalive_timeout = 6553500;
3707                 else if (atoi((yyvsp[0].str)) < 1)
3708                         cfg_parser->cfg->tcp_keepalive_timeout = 0;
3709                 else cfg_parser->cfg->tcp_keepalive_timeout = atoi((yyvsp[0].str));
3710                 free((yyvsp[0].str));
3711         }
3712 #line 3713 "util/configparser.c"
3713     break;
3714
3715   case 372: /* server_sock_queue_timeout: VAR_SOCK_QUEUE_TIMEOUT STRING_ARG  */
3716 #line 995 "util/configparser.y"
3717         {
3718                 OUTYY(("P(server_sock_queue_timeout:%s)\n", (yyvsp[0].str)));
3719                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3720                         yyerror("number expected");
3721                 else if (atoi((yyvsp[0].str)) > 6553500)
3722                         cfg_parser->cfg->sock_queue_timeout = 6553500;
3723                 else if (atoi((yyvsp[0].str)) < 1)
3724                         cfg_parser->cfg->sock_queue_timeout = 0;
3725                 else cfg_parser->cfg->sock_queue_timeout = atoi((yyvsp[0].str));
3726                 free((yyvsp[0].str));
3727         }
3728 #line 3729 "util/configparser.c"
3729     break;
3730
3731   case 373: /* server_tcp_upstream: VAR_TCP_UPSTREAM STRING_ARG  */
3732 #line 1008 "util/configparser.y"
3733         {
3734                 OUTYY(("P(server_tcp_upstream:%s)\n", (yyvsp[0].str)));
3735                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3736                         yyerror("expected yes or no.");
3737                 else cfg_parser->cfg->tcp_upstream = (strcmp((yyvsp[0].str), "yes")==0);
3738                 free((yyvsp[0].str));
3739         }
3740 #line 3741 "util/configparser.c"
3741     break;
3742
3743   case 374: /* server_udp_upstream_without_downstream: VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM STRING_ARG  */
3744 #line 1017 "util/configparser.y"
3745         {
3746                 OUTYY(("P(server_udp_upstream_without_downstream:%s)\n", (yyvsp[0].str)));
3747                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3748                         yyerror("expected yes or no.");
3749                 else cfg_parser->cfg->udp_upstream_without_downstream = (strcmp((yyvsp[0].str), "yes")==0);
3750                 free((yyvsp[0].str));
3751         }
3752 #line 3753 "util/configparser.c"
3753     break;
3754
3755   case 375: /* server_ssl_upstream: VAR_SSL_UPSTREAM STRING_ARG  */
3756 #line 1026 "util/configparser.y"
3757         {
3758                 OUTYY(("P(server_ssl_upstream:%s)\n", (yyvsp[0].str)));
3759                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3760                         yyerror("expected yes or no.");
3761                 else cfg_parser->cfg->ssl_upstream = (strcmp((yyvsp[0].str), "yes")==0);
3762                 free((yyvsp[0].str));
3763         }
3764 #line 3765 "util/configparser.c"
3765     break;
3766
3767   case 376: /* server_ssl_service_key: VAR_SSL_SERVICE_KEY STRING_ARG  */
3768 #line 1035 "util/configparser.y"
3769         {
3770                 OUTYY(("P(server_ssl_service_key:%s)\n", (yyvsp[0].str)));
3771                 free(cfg_parser->cfg->ssl_service_key);
3772                 cfg_parser->cfg->ssl_service_key = (yyvsp[0].str);
3773         }
3774 #line 3775 "util/configparser.c"
3775     break;
3776
3777   case 377: /* server_ssl_service_pem: VAR_SSL_SERVICE_PEM STRING_ARG  */
3778 #line 1042 "util/configparser.y"
3779         {
3780                 OUTYY(("P(server_ssl_service_pem:%s)\n", (yyvsp[0].str)));
3781                 free(cfg_parser->cfg->ssl_service_pem);
3782                 cfg_parser->cfg->ssl_service_pem = (yyvsp[0].str);
3783         }
3784 #line 3785 "util/configparser.c"
3785     break;
3786
3787   case 378: /* server_ssl_port: VAR_SSL_PORT STRING_ARG  */
3788 #line 1049 "util/configparser.y"
3789         {
3790                 OUTYY(("P(server_ssl_port:%s)\n", (yyvsp[0].str)));
3791                 if(atoi((yyvsp[0].str)) == 0)
3792                         yyerror("port number expected");
3793                 else cfg_parser->cfg->ssl_port = atoi((yyvsp[0].str));
3794                 free((yyvsp[0].str));
3795         }
3796 #line 3797 "util/configparser.c"
3797     break;
3798
3799   case 379: /* server_tls_cert_bundle: VAR_TLS_CERT_BUNDLE STRING_ARG  */
3800 #line 1058 "util/configparser.y"
3801         {
3802                 OUTYY(("P(server_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
3803                 free(cfg_parser->cfg->tls_cert_bundle);
3804                 cfg_parser->cfg->tls_cert_bundle = (yyvsp[0].str);
3805         }
3806 #line 3807 "util/configparser.c"
3807     break;
3808
3809   case 380: /* server_tls_win_cert: VAR_TLS_WIN_CERT STRING_ARG  */
3810 #line 1065 "util/configparser.y"
3811         {
3812                 OUTYY(("P(server_tls_win_cert:%s)\n", (yyvsp[0].str)));
3813                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3814                         yyerror("expected yes or no.");
3815                 else cfg_parser->cfg->tls_win_cert = (strcmp((yyvsp[0].str), "yes")==0);
3816                 free((yyvsp[0].str));
3817         }
3818 #line 3819 "util/configparser.c"
3819     break;
3820
3821   case 381: /* server_tls_additional_port: VAR_TLS_ADDITIONAL_PORT STRING_ARG  */
3822 #line 1074 "util/configparser.y"
3823         {
3824                 OUTYY(("P(server_tls_additional_port:%s)\n", (yyvsp[0].str)));
3825                 if(!cfg_strlist_insert(&cfg_parser->cfg->tls_additional_port,
3826                         (yyvsp[0].str)))
3827                         yyerror("out of memory");
3828         }
3829 #line 3830 "util/configparser.c"
3830     break;
3831
3832   case 382: /* server_tls_ciphers: VAR_TLS_CIPHERS STRING_ARG  */
3833 #line 1082 "util/configparser.y"
3834         {
3835                 OUTYY(("P(server_tls_ciphers:%s)\n", (yyvsp[0].str)));
3836                 free(cfg_parser->cfg->tls_ciphers);
3837                 cfg_parser->cfg->tls_ciphers = (yyvsp[0].str);
3838         }
3839 #line 3840 "util/configparser.c"
3840     break;
3841
3842   case 383: /* server_tls_ciphersuites: VAR_TLS_CIPHERSUITES STRING_ARG  */
3843 #line 1089 "util/configparser.y"
3844         {
3845                 OUTYY(("P(server_tls_ciphersuites:%s)\n", (yyvsp[0].str)));
3846                 free(cfg_parser->cfg->tls_ciphersuites);
3847                 cfg_parser->cfg->tls_ciphersuites = (yyvsp[0].str);
3848         }
3849 #line 3850 "util/configparser.c"
3850     break;
3851
3852   case 384: /* server_tls_session_ticket_keys: VAR_TLS_SESSION_TICKET_KEYS STRING_ARG  */
3853 #line 1096 "util/configparser.y"
3854         {
3855                 OUTYY(("P(server_tls_session_ticket_keys:%s)\n", (yyvsp[0].str)));
3856                 if(!cfg_strlist_append(&cfg_parser->cfg->tls_session_ticket_keys,
3857                         (yyvsp[0].str)))
3858                         yyerror("out of memory");
3859         }
3860 #line 3861 "util/configparser.c"
3861     break;
3862
3863   case 385: /* server_tls_use_sni: VAR_TLS_USE_SNI STRING_ARG  */
3864 #line 1104 "util/configparser.y"
3865         {
3866                 OUTYY(("P(server_tls_use_sni:%s)\n", (yyvsp[0].str)));
3867                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3868                         yyerror("expected yes or no.");
3869                 else cfg_parser->cfg->tls_use_sni = (strcmp((yyvsp[0].str), "yes")==0);
3870                 free((yyvsp[0].str));
3871         }
3872 #line 3873 "util/configparser.c"
3873     break;
3874
3875   case 386: /* server_https_port: VAR_HTTPS_PORT STRING_ARG  */
3876 #line 1113 "util/configparser.y"
3877         {
3878                 OUTYY(("P(server_https_port:%s)\n", (yyvsp[0].str)));
3879                 if(atoi((yyvsp[0].str)) == 0)
3880                         yyerror("port number expected");
3881                 else cfg_parser->cfg->https_port = atoi((yyvsp[0].str));
3882                 free((yyvsp[0].str));
3883         }
3884 #line 3885 "util/configparser.c"
3885     break;
3886
3887   case 387: /* server_http_endpoint: VAR_HTTP_ENDPOINT STRING_ARG  */
3888 #line 1121 "util/configparser.y"
3889         {
3890                 OUTYY(("P(server_http_endpoint:%s)\n", (yyvsp[0].str)));
3891                 free(cfg_parser->cfg->http_endpoint);
3892                 if((yyvsp[0].str) && (yyvsp[0].str)[0] != '/') {
3893                         cfg_parser->cfg->http_endpoint = malloc(strlen((yyvsp[0].str))+2);
3894                         if(!cfg_parser->cfg->http_endpoint)
3895                                 yyerror("out of memory");
3896                         cfg_parser->cfg->http_endpoint[0] = '/';
3897                         memmove(cfg_parser->cfg->http_endpoint+1, (yyvsp[0].str),
3898                                 strlen((yyvsp[0].str))+1);
3899                         free((yyvsp[0].str));
3900                 } else {
3901                         cfg_parser->cfg->http_endpoint = (yyvsp[0].str);
3902                 }
3903         }
3904 #line 3905 "util/configparser.c"
3905     break;
3906
3907   case 388: /* server_http_max_streams: VAR_HTTP_MAX_STREAMS STRING_ARG  */
3908 #line 1137 "util/configparser.y"
3909         {
3910                 OUTYY(("P(server_http_max_streams:%s)\n", (yyvsp[0].str)));
3911                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
3912                         yyerror("number expected");
3913                 else cfg_parser->cfg->http_max_streams = atoi((yyvsp[0].str));
3914                 free((yyvsp[0].str));
3915         }
3916 #line 3917 "util/configparser.c"
3917     break;
3918
3919   case 389: /* server_http_query_buffer_size: VAR_HTTP_QUERY_BUFFER_SIZE STRING_ARG  */
3920 #line 1145 "util/configparser.y"
3921         {
3922                 OUTYY(("P(server_http_query_buffer_size:%s)\n", (yyvsp[0].str)));
3923                 if(!cfg_parse_memsize((yyvsp[0].str),
3924                         &cfg_parser->cfg->http_query_buffer_size))
3925                         yyerror("memory size expected");
3926                 free((yyvsp[0].str));
3927         }
3928 #line 3929 "util/configparser.c"
3929     break;
3930
3931   case 390: /* server_http_response_buffer_size: VAR_HTTP_RESPONSE_BUFFER_SIZE STRING_ARG  */
3932 #line 1153 "util/configparser.y"
3933         {
3934                 OUTYY(("P(server_http_response_buffer_size:%s)\n", (yyvsp[0].str)));
3935                 if(!cfg_parse_memsize((yyvsp[0].str),
3936                         &cfg_parser->cfg->http_response_buffer_size))
3937                         yyerror("memory size expected");
3938                 free((yyvsp[0].str));
3939         }
3940 #line 3941 "util/configparser.c"
3941     break;
3942
3943   case 391: /* server_http_nodelay: VAR_HTTP_NODELAY STRING_ARG  */
3944 #line 1161 "util/configparser.y"
3945         {
3946                 OUTYY(("P(server_http_nodelay:%s)\n", (yyvsp[0].str)));
3947                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3948                         yyerror("expected yes or no.");
3949                 else cfg_parser->cfg->http_nodelay = (strcmp((yyvsp[0].str), "yes")==0);
3950                 free((yyvsp[0].str));
3951         }
3952 #line 3953 "util/configparser.c"
3953     break;
3954
3955   case 392: /* server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG  */
3956 #line 1169 "util/configparser.y"
3957         {
3958                 OUTYY(("P(server_http_notls_downstream:%s)\n", (yyvsp[0].str)));
3959                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3960                         yyerror("expected yes or no.");
3961                 else cfg_parser->cfg->http_notls_downstream = (strcmp((yyvsp[0].str), "yes")==0);
3962                 free((yyvsp[0].str));
3963         }
3964 #line 3965 "util/configparser.c"
3965     break;
3966
3967   case 393: /* server_use_systemd: VAR_USE_SYSTEMD STRING_ARG  */
3968 #line 1177 "util/configparser.y"
3969         {
3970                 OUTYY(("P(server_use_systemd:%s)\n", (yyvsp[0].str)));
3971                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3972                         yyerror("expected yes or no.");
3973                 else cfg_parser->cfg->use_systemd = (strcmp((yyvsp[0].str), "yes")==0);
3974                 free((yyvsp[0].str));
3975         }
3976 #line 3977 "util/configparser.c"
3977     break;
3978
3979   case 394: /* server_do_daemonize: VAR_DO_DAEMONIZE STRING_ARG  */
3980 #line 1186 "util/configparser.y"
3981         {
3982                 OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[0].str)));
3983                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3984                         yyerror("expected yes or no.");
3985                 else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[0].str), "yes")==0);
3986                 free((yyvsp[0].str));
3987         }
3988 #line 3989 "util/configparser.c"
3989     break;
3990
3991   case 395: /* server_use_syslog: VAR_USE_SYSLOG STRING_ARG  */
3992 #line 1195 "util/configparser.y"
3993         {
3994                 OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[0].str)));
3995                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
3996                         yyerror("expected yes or no.");
3997                 else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[0].str), "yes")==0);
3998 #if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
3999                 if(strcmp((yyvsp[0].str), "yes") == 0)
4000                         yyerror("no syslog services are available. "
4001                                 "(reconfigure and compile to add)");
4002 #endif
4003                 free((yyvsp[0].str));
4004         }
4005 #line 4006 "util/configparser.c"
4006     break;
4007
4008   case 396: /* server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG  */
4009 #line 1209 "util/configparser.y"
4010         {
4011                 OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[0].str)));
4012                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4013                         yyerror("expected yes or no.");
4014                 else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[0].str), "yes")==0);
4015                 free((yyvsp[0].str));
4016         }
4017 #line 4018 "util/configparser.c"
4018     break;
4019
4020   case 397: /* server_log_queries: VAR_LOG_QUERIES STRING_ARG  */
4021 #line 1218 "util/configparser.y"
4022         {
4023                 OUTYY(("P(server_log_queries:%s)\n", (yyvsp[0].str)));
4024                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4025                         yyerror("expected yes or no.");
4026                 else cfg_parser->cfg->log_queries = (strcmp((yyvsp[0].str), "yes")==0);
4027                 free((yyvsp[0].str));
4028         }
4029 #line 4030 "util/configparser.c"
4030     break;
4031
4032   case 398: /* server_log_replies: VAR_LOG_REPLIES STRING_ARG  */
4033 #line 1227 "util/configparser.y"
4034         {
4035                 OUTYY(("P(server_log_replies:%s)\n", (yyvsp[0].str)));
4036                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4037                         yyerror("expected yes or no.");
4038                 else cfg_parser->cfg->log_replies = (strcmp((yyvsp[0].str), "yes")==0);
4039                 free((yyvsp[0].str));
4040         }
4041 #line 4042 "util/configparser.c"
4042     break;
4043
4044   case 399: /* server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG  */
4045 #line 1236 "util/configparser.y"
4046         {
4047                 OUTYY(("P(server_log_tag_queryreply:%s)\n", (yyvsp[0].str)));
4048                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4049                         yyerror("expected yes or no.");
4050                 else cfg_parser->cfg->log_tag_queryreply = (strcmp((yyvsp[0].str), "yes")==0);
4051                 free((yyvsp[0].str));
4052         }
4053 #line 4054 "util/configparser.c"
4054     break;
4055
4056   case 400: /* server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG  */
4057 #line 1245 "util/configparser.y"
4058         {
4059                 OUTYY(("P(server_log_servfail:%s)\n", (yyvsp[0].str)));
4060                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4061                         yyerror("expected yes or no.");
4062                 else cfg_parser->cfg->log_servfail = (strcmp((yyvsp[0].str), "yes")==0);
4063                 free((yyvsp[0].str));
4064         }
4065 #line 4066 "util/configparser.c"
4066     break;
4067
4068   case 401: /* server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG  */
4069 #line 1254 "util/configparser.y"
4070         {
4071                 OUTYY(("P(server_log_local_actions:%s)\n", (yyvsp[0].str)));
4072                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4073                         yyerror("expected yes or no.");
4074                 else cfg_parser->cfg->log_local_actions = (strcmp((yyvsp[0].str), "yes")==0);
4075                 free((yyvsp[0].str));
4076         }
4077 #line 4078 "util/configparser.c"
4078     break;
4079
4080   case 402: /* server_chroot: VAR_CHROOT STRING_ARG  */
4081 #line 1263 "util/configparser.y"
4082         {
4083                 OUTYY(("P(server_chroot:%s)\n", (yyvsp[0].str)));
4084                 free(cfg_parser->cfg->chrootdir);
4085                 cfg_parser->cfg->chrootdir = (yyvsp[0].str);
4086         }
4087 #line 4088 "util/configparser.c"
4088     break;
4089
4090   case 403: /* server_username: VAR_USERNAME STRING_ARG  */
4091 #line 1270 "util/configparser.y"
4092         {
4093                 OUTYY(("P(server_username:%s)\n", (yyvsp[0].str)));
4094                 free(cfg_parser->cfg->username);
4095                 cfg_parser->cfg->username = (yyvsp[0].str);
4096         }
4097 #line 4098 "util/configparser.c"
4098     break;
4099
4100   case 404: /* server_directory: VAR_DIRECTORY STRING_ARG  */
4101 #line 1277 "util/configparser.y"
4102         {
4103                 OUTYY(("P(server_directory:%s)\n", (yyvsp[0].str)));
4104                 free(cfg_parser->cfg->directory);
4105                 cfg_parser->cfg->directory = (yyvsp[0].str);
4106                 /* change there right away for includes relative to this */
4107                 if((yyvsp[0].str)[0]) {
4108                         char* d;
4109 #ifdef UB_ON_WINDOWS
4110                         w_config_adjust_directory(cfg_parser->cfg);
4111 #endif
4112                         d = cfg_parser->cfg->directory;
4113                         /* adjust directory if we have already chroot,
4114                          * like, we reread after sighup */
4115                         if(cfg_parser->chroot && cfg_parser->chroot[0] &&
4116                                 strncmp(d, cfg_parser->chroot, strlen(
4117                                 cfg_parser->chroot)) == 0)
4118                                 d += strlen(cfg_parser->chroot);
4119                         if(d[0]) {
4120                                 if(chdir(d))
4121                                 log_err("cannot chdir to directory: %s (%s)",
4122                                         d, strerror(errno));
4123                         }
4124                 }
4125         }
4126 #line 4127 "util/configparser.c"
4127     break;
4128
4129   case 405: /* server_logfile: VAR_LOGFILE STRING_ARG  */
4130 #line 1303 "util/configparser.y"
4131         {
4132                 OUTYY(("P(server_logfile:%s)\n", (yyvsp[0].str)));
4133                 free(cfg_parser->cfg->logfile);
4134                 cfg_parser->cfg->logfile = (yyvsp[0].str);
4135                 cfg_parser->cfg->use_syslog = 0;
4136         }
4137 #line 4138 "util/configparser.c"
4138     break;
4139
4140   case 406: /* server_pidfile: VAR_PIDFILE STRING_ARG  */
4141 #line 1311 "util/configparser.y"
4142         {
4143                 OUTYY(("P(server_pidfile:%s)\n", (yyvsp[0].str)));
4144                 free(cfg_parser->cfg->pidfile);
4145                 cfg_parser->cfg->pidfile = (yyvsp[0].str);
4146         }
4147 #line 4148 "util/configparser.c"
4148     break;
4149
4150   case 407: /* server_root_hints: VAR_ROOT_HINTS STRING_ARG  */
4151 #line 1318 "util/configparser.y"
4152         {
4153                 OUTYY(("P(server_root_hints:%s)\n", (yyvsp[0].str)));
4154                 if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[0].str)))
4155                         yyerror("out of memory");
4156         }
4157 #line 4158 "util/configparser.c"
4158     break;
4159
4160   case 408: /* server_dlv_anchor_file: VAR_DLV_ANCHOR_FILE STRING_ARG  */
4161 #line 1325 "util/configparser.y"
4162         {
4163                 OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[0].str)));
4164                 log_warn("option dlv-anchor-file ignored: DLV is decommissioned");
4165                 free((yyvsp[0].str));
4166         }
4167 #line 4168 "util/configparser.c"
4168     break;
4169
4170   case 409: /* server_dlv_anchor: VAR_DLV_ANCHOR STRING_ARG  */
4171 #line 1332 "util/configparser.y"
4172         {
4173                 OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[0].str)));
4174                 log_warn("option dlv-anchor ignored: DLV is decommissioned");
4175                 free((yyvsp[0].str));
4176         }
4177 #line 4178 "util/configparser.c"
4178     break;
4179
4180   case 410: /* server_auto_trust_anchor_file: VAR_AUTO_TRUST_ANCHOR_FILE STRING_ARG  */
4181 #line 1339 "util/configparser.y"
4182         {
4183                 OUTYY(("P(server_auto_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4184                 if(!cfg_strlist_insert(&cfg_parser->cfg->
4185                         auto_trust_anchor_file_list, (yyvsp[0].str)))
4186                         yyerror("out of memory");
4187         }
4188 #line 4189 "util/configparser.c"
4189     break;
4190
4191   case 411: /* server_trust_anchor_file: VAR_TRUST_ANCHOR_FILE STRING_ARG  */
4192 #line 1347 "util/configparser.y"
4193         {
4194                 OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[0].str)));
4195                 if(!cfg_strlist_insert(&cfg_parser->cfg->
4196                         trust_anchor_file_list, (yyvsp[0].str)))
4197                         yyerror("out of memory");
4198         }
4199 #line 4200 "util/configparser.c"
4200     break;
4201
4202   case 412: /* server_trusted_keys_file: VAR_TRUSTED_KEYS_FILE STRING_ARG  */
4203 #line 1355 "util/configparser.y"
4204         {
4205                 OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[0].str)));
4206                 if(!cfg_strlist_insert(&cfg_parser->cfg->
4207                         trusted_keys_file_list, (yyvsp[0].str)))
4208                         yyerror("out of memory");
4209         }
4210 #line 4211 "util/configparser.c"
4211     break;
4212
4213   case 413: /* server_trust_anchor: VAR_TRUST_ANCHOR STRING_ARG  */
4214 #line 1363 "util/configparser.y"
4215         {
4216                 OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[0].str)));
4217                 if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[0].str)))
4218                         yyerror("out of memory");
4219         }
4220 #line 4221 "util/configparser.c"
4221     break;
4222
4223   case 414: /* server_trust_anchor_signaling: VAR_TRUST_ANCHOR_SIGNALING STRING_ARG  */
4224 #line 1370 "util/configparser.y"
4225         {
4226                 OUTYY(("P(server_trust_anchor_signaling:%s)\n", (yyvsp[0].str)));
4227                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4228                         yyerror("expected yes or no.");
4229                 else
4230                         cfg_parser->cfg->trust_anchor_signaling =
4231                                 (strcmp((yyvsp[0].str), "yes")==0);
4232                 free((yyvsp[0].str));
4233         }
4234 #line 4235 "util/configparser.c"
4235     break;
4236
4237   case 415: /* server_root_key_sentinel: VAR_ROOT_KEY_SENTINEL STRING_ARG  */
4238 #line 1381 "util/configparser.y"
4239         {
4240                 OUTYY(("P(server_root_key_sentinel:%s)\n", (yyvsp[0].str)));
4241                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4242                         yyerror("expected yes or no.");
4243                 else
4244                         cfg_parser->cfg->root_key_sentinel =
4245                                 (strcmp((yyvsp[0].str), "yes")==0);
4246                 free((yyvsp[0].str));
4247         }
4248 #line 4249 "util/configparser.c"
4249     break;
4250
4251   case 416: /* server_domain_insecure: VAR_DOMAIN_INSECURE STRING_ARG  */
4252 #line 1392 "util/configparser.y"
4253         {
4254                 OUTYY(("P(server_domain_insecure:%s)\n", (yyvsp[0].str)));
4255                 if(!cfg_strlist_insert(&cfg_parser->cfg->domain_insecure, (yyvsp[0].str)))
4256                         yyerror("out of memory");
4257         }
4258 #line 4259 "util/configparser.c"
4259     break;
4260
4261   case 417: /* server_hide_identity: VAR_HIDE_IDENTITY STRING_ARG  */
4262 #line 1399 "util/configparser.y"
4263         {
4264                 OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[0].str)));
4265                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4266                         yyerror("expected yes or no.");
4267                 else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[0].str), "yes")==0);
4268                 free((yyvsp[0].str));
4269         }
4270 #line 4271 "util/configparser.c"
4271     break;
4272
4273   case 418: /* server_hide_version: VAR_HIDE_VERSION STRING_ARG  */
4274 #line 1408 "util/configparser.y"
4275         {
4276                 OUTYY(("P(server_hide_version:%s)\n", (yyvsp[0].str)));
4277                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4278                         yyerror("expected yes or no.");
4279                 else cfg_parser->cfg->hide_version = (strcmp((yyvsp[0].str), "yes")==0);
4280                 free((yyvsp[0].str));
4281         }
4282 #line 4283 "util/configparser.c"
4283     break;
4284
4285   case 419: /* server_hide_trustanchor: VAR_HIDE_TRUSTANCHOR STRING_ARG  */
4286 #line 1417 "util/configparser.y"
4287         {
4288                 OUTYY(("P(server_hide_trustanchor:%s)\n", (yyvsp[0].str)));
4289                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4290                         yyerror("expected yes or no.");
4291                 else cfg_parser->cfg->hide_trustanchor = (strcmp((yyvsp[0].str), "yes")==0);
4292                 free((yyvsp[0].str));
4293         }
4294 #line 4295 "util/configparser.c"
4295     break;
4296
4297   case 420: /* server_hide_http_user_agent: VAR_HIDE_HTTP_USER_AGENT STRING_ARG  */
4298 #line 1426 "util/configparser.y"
4299         {
4300                 OUTYY(("P(server_hide_user_agent:%s)\n", (yyvsp[0].str)));
4301                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4302                         yyerror("expected yes or no.");
4303                 else cfg_parser->cfg->hide_http_user_agent = (strcmp((yyvsp[0].str), "yes")==0);
4304                 free((yyvsp[0].str));
4305         }
4306 #line 4307 "util/configparser.c"
4307     break;
4308
4309   case 421: /* server_identity: VAR_IDENTITY STRING_ARG  */
4310 #line 1435 "util/configparser.y"
4311         {
4312                 OUTYY(("P(server_identity:%s)\n", (yyvsp[0].str)));
4313                 free(cfg_parser->cfg->identity);
4314                 cfg_parser->cfg->identity = (yyvsp[0].str);
4315         }
4316 #line 4317 "util/configparser.c"
4317     break;
4318
4319   case 422: /* server_version: VAR_VERSION STRING_ARG  */
4320 #line 1442 "util/configparser.y"
4321         {
4322                 OUTYY(("P(server_version:%s)\n", (yyvsp[0].str)));
4323                 free(cfg_parser->cfg->version);
4324                 cfg_parser->cfg->version = (yyvsp[0].str);
4325         }
4326 #line 4327 "util/configparser.c"
4327     break;
4328
4329   case 423: /* server_http_user_agent: VAR_HTTP_USER_AGENT STRING_ARG  */
4330 #line 1449 "util/configparser.y"
4331         {
4332                 OUTYY(("P(server_http_user_agent:%s)\n", (yyvsp[0].str)));
4333                 free(cfg_parser->cfg->http_user_agent);
4334                 cfg_parser->cfg->http_user_agent = (yyvsp[0].str);
4335         }
4336 #line 4337 "util/configparser.c"
4337     break;
4338
4339   case 424: /* server_nsid: VAR_NSID STRING_ARG  */
4340 #line 1456 "util/configparser.y"
4341         {
4342                 OUTYY(("P(server_nsid:%s)\n", (yyvsp[0].str)));
4343                 free(cfg_parser->cfg->nsid_cfg_str);
4344                 cfg_parser->cfg->nsid_cfg_str = (yyvsp[0].str);
4345                 free(cfg_parser->cfg->nsid);
4346                 cfg_parser->cfg->nsid = NULL;
4347                 cfg_parser->cfg->nsid_len = 0;
4348                 if (*(yyvsp[0].str) == 0)
4349                         ; /* pass; empty string is not setting nsid */
4350                 else if (!(cfg_parser->cfg->nsid = cfg_parse_nsid(
4351                                         (yyvsp[0].str), &cfg_parser->cfg->nsid_len)))
4352                         yyerror("the NSID must be either a hex string or an "
4353                             "ascii character string prepended with ascii_.");
4354         }
4355 #line 4356 "util/configparser.c"
4356     break;
4357
4358   case 425: /* server_so_rcvbuf: VAR_SO_RCVBUF STRING_ARG  */
4359 #line 1472 "util/configparser.y"
4360         {
4361                 OUTYY(("P(server_so_rcvbuf:%s)\n", (yyvsp[0].str)));
4362                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_rcvbuf))
4363                         yyerror("buffer size expected");
4364                 free((yyvsp[0].str));
4365         }
4366 #line 4367 "util/configparser.c"
4367     break;
4368
4369   case 426: /* server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG  */
4370 #line 1480 "util/configparser.y"
4371         {
4372                 OUTYY(("P(server_so_sndbuf:%s)\n", (yyvsp[0].str)));
4373                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->so_sndbuf))
4374                         yyerror("buffer size expected");
4375                 free((yyvsp[0].str));
4376         }
4377 #line 4378 "util/configparser.c"
4378     break;
4379
4380   case 427: /* server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG  */
4381 #line 1488 "util/configparser.y"
4382         {
4383                 OUTYY(("P(server_so_reuseport:%s)\n", (yyvsp[0].str)));
4384                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4385                         yyerror("expected yes or no.");
4386                 else cfg_parser->cfg->so_reuseport =
4387                         (strcmp((yyvsp[0].str), "yes")==0);
4388                 free((yyvsp[0].str));
4389         }
4390 #line 4391 "util/configparser.c"
4391     break;
4392
4393   case 428: /* server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG  */
4394 #line 1498 "util/configparser.y"
4395         {
4396                 OUTYY(("P(server_ip_transparent:%s)\n", (yyvsp[0].str)));
4397                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4398                         yyerror("expected yes or no.");
4399                 else cfg_parser->cfg->ip_transparent =
4400                         (strcmp((yyvsp[0].str), "yes")==0);
4401                 free((yyvsp[0].str));
4402         }
4403 #line 4404 "util/configparser.c"
4404     break;
4405
4406   case 429: /* server_ip_freebind: VAR_IP_FREEBIND STRING_ARG  */
4407 #line 1508 "util/configparser.y"
4408         {
4409                 OUTYY(("P(server_ip_freebind:%s)\n", (yyvsp[0].str)));
4410                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4411                         yyerror("expected yes or no.");
4412                 else cfg_parser->cfg->ip_freebind =
4413                         (strcmp((yyvsp[0].str), "yes")==0);
4414                 free((yyvsp[0].str));
4415         }
4416 #line 4417 "util/configparser.c"
4417     break;
4418
4419   case 430: /* server_ip_dscp: VAR_IP_DSCP STRING_ARG  */
4420 #line 1518 "util/configparser.y"
4421         {
4422                 OUTYY(("P(server_ip_dscp:%s)\n", (yyvsp[0].str)));
4423                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4424                         yyerror("number expected");
4425                 else if (atoi((yyvsp[0].str)) > 63)
4426                         yyerror("value too large (max 63)");
4427                 else if (atoi((yyvsp[0].str)) < 0)
4428                         yyerror("value too small (min 0)");
4429                 else
4430                         cfg_parser->cfg->ip_dscp = atoi((yyvsp[0].str));
4431                 free((yyvsp[0].str));
4432         }
4433 #line 4434 "util/configparser.c"
4434     break;
4435
4436   case 431: /* server_stream_wait_size: VAR_STREAM_WAIT_SIZE STRING_ARG  */
4437 #line 1532 "util/configparser.y"
4438         {
4439                 OUTYY(("P(server_stream_wait_size:%s)\n", (yyvsp[0].str)));
4440                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->stream_wait_size))
4441                         yyerror("memory size expected");
4442                 free((yyvsp[0].str));
4443         }
4444 #line 4445 "util/configparser.c"
4445     break;
4446
4447   case 432: /* server_edns_buffer_size: VAR_EDNS_BUFFER_SIZE STRING_ARG  */
4448 #line 1540 "util/configparser.y"
4449         {
4450                 OUTYY(("P(server_edns_buffer_size:%s)\n", (yyvsp[0].str)));
4451                 if(atoi((yyvsp[0].str)) == 0)
4452                         yyerror("number expected");
4453                 else if (atoi((yyvsp[0].str)) < 12)
4454                         yyerror("edns buffer size too small");
4455                 else if (atoi((yyvsp[0].str)) > 65535)
4456                         cfg_parser->cfg->edns_buffer_size = 65535;
4457                 else cfg_parser->cfg->edns_buffer_size = atoi((yyvsp[0].str));
4458                 free((yyvsp[0].str));
4459         }
4460 #line 4461 "util/configparser.c"
4461     break;
4462
4463   case 433: /* server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING_ARG  */
4464 #line 1553 "util/configparser.y"
4465         {
4466                 OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[0].str)));
4467                 if(atoi((yyvsp[0].str)) == 0)
4468                         yyerror("number expected");
4469                 else if (atoi((yyvsp[0].str)) < 4096)
4470                         yyerror("message buffer size too small (use 4096)");
4471                 else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[0].str));
4472                 free((yyvsp[0].str));
4473         }
4474 #line 4475 "util/configparser.c"
4475     break;
4476
4477   case 434: /* server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING_ARG  */
4478 #line 1564 "util/configparser.y"
4479         {
4480                 OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[0].str)));
4481                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->msg_cache_size))
4482                         yyerror("memory size expected");
4483                 free((yyvsp[0].str));
4484         }
4485 #line 4486 "util/configparser.c"
4486     break;
4487
4488   case 435: /* server_msg_cache_slabs: VAR_MSG_CACHE_SLABS STRING_ARG  */
4489 #line 1572 "util/configparser.y"
4490         {
4491                 OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[0].str)));
4492                 if(atoi((yyvsp[0].str)) == 0) {
4493                         yyerror("number expected");
4494                 } else {
4495                         cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[0].str));
4496                         if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
4497                                 yyerror("must be a power of 2");
4498                 }
4499                 free((yyvsp[0].str));
4500         }
4501 #line 4502 "util/configparser.c"
4502     break;
4503
4504   case 436: /* server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING_ARG  */
4505 #line 1585 "util/configparser.y"
4506         {
4507                 OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[0].str)));
4508                 if(atoi((yyvsp[0].str)) == 0)
4509                         yyerror("number expected");
4510                 else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[0].str));
4511                 free((yyvsp[0].str));
4512         }
4513 #line 4514 "util/configparser.c"
4514     break;
4515
4516   case 437: /* server_jostle_timeout: VAR_JOSTLE_TIMEOUT STRING_ARG  */
4517 #line 1594 "util/configparser.y"
4518         {
4519                 OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[0].str)));
4520                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4521                         yyerror("number expected");
4522                 else cfg_parser->cfg->jostle_time = atoi((yyvsp[0].str));
4523                 free((yyvsp[0].str));
4524         }
4525 #line 4526 "util/configparser.c"
4526     break;
4527
4528   case 438: /* server_delay_close: VAR_DELAY_CLOSE STRING_ARG  */
4529 #line 1603 "util/configparser.y"
4530         {
4531                 OUTYY(("P(server_delay_close:%s)\n", (yyvsp[0].str)));
4532                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4533                         yyerror("number expected");
4534                 else cfg_parser->cfg->delay_close = atoi((yyvsp[0].str));
4535                 free((yyvsp[0].str));
4536         }
4537 #line 4538 "util/configparser.c"
4538     break;
4539
4540   case 439: /* server_udp_connect: VAR_UDP_CONNECT STRING_ARG  */
4541 #line 1612 "util/configparser.y"
4542         {
4543                 OUTYY(("P(server_udp_connect:%s)\n", (yyvsp[0].str)));
4544                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4545                         yyerror("expected yes or no.");
4546                 else cfg_parser->cfg->udp_connect = (strcmp((yyvsp[0].str), "yes")==0);
4547                 free((yyvsp[0].str));
4548         }
4549 #line 4550 "util/configparser.c"
4550     break;
4551
4552   case 440: /* server_unblock_lan_zones: VAR_UNBLOCK_LAN_ZONES STRING_ARG  */
4553 #line 1621 "util/configparser.y"
4554         {
4555                 OUTYY(("P(server_unblock_lan_zones:%s)\n", (yyvsp[0].str)));
4556                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4557                         yyerror("expected yes or no.");
4558                 else cfg_parser->cfg->unblock_lan_zones =
4559                         (strcmp((yyvsp[0].str), "yes")==0);
4560                 free((yyvsp[0].str));
4561         }
4562 #line 4563 "util/configparser.c"
4563     break;
4564
4565   case 441: /* server_insecure_lan_zones: VAR_INSECURE_LAN_ZONES STRING_ARG  */
4566 #line 1631 "util/configparser.y"
4567         {
4568                 OUTYY(("P(server_insecure_lan_zones:%s)\n", (yyvsp[0].str)));
4569                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4570                         yyerror("expected yes or no.");
4571                 else cfg_parser->cfg->insecure_lan_zones =
4572                         (strcmp((yyvsp[0].str), "yes")==0);
4573                 free((yyvsp[0].str));
4574         }
4575 #line 4576 "util/configparser.c"
4576     break;
4577
4578   case 442: /* server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING_ARG  */
4579 #line 1641 "util/configparser.y"
4580         {
4581                 OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[0].str)));
4582                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->rrset_cache_size))
4583                         yyerror("memory size expected");
4584                 free((yyvsp[0].str));
4585         }
4586 #line 4587 "util/configparser.c"
4587     break;
4588
4589   case 443: /* server_rrset_cache_slabs: VAR_RRSET_CACHE_SLABS STRING_ARG  */
4590 #line 1649 "util/configparser.y"
4591         {
4592                 OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[0].str)));
4593                 if(atoi((yyvsp[0].str)) == 0) {
4594                         yyerror("number expected");
4595                 } else {
4596                         cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[0].str));
4597                         if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
4598                                 yyerror("must be a power of 2");
4599                 }
4600                 free((yyvsp[0].str));
4601         }
4602 #line 4603 "util/configparser.c"
4603     break;
4604
4605   case 444: /* server_infra_host_ttl: VAR_INFRA_HOST_TTL STRING_ARG  */
4606 #line 1662 "util/configparser.y"
4607         {
4608                 OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[0].str)));
4609                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4610                         yyerror("number expected");
4611                 else cfg_parser->cfg->host_ttl = atoi((yyvsp[0].str));
4612                 free((yyvsp[0].str));
4613         }
4614 #line 4615 "util/configparser.c"
4615     break;
4616
4617   case 445: /* server_infra_lame_ttl: VAR_INFRA_LAME_TTL STRING_ARG  */
4618 #line 1671 "util/configparser.y"
4619         {
4620                 OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[0].str)));
4621                 verbose(VERB_DETAIL, "ignored infra-lame-ttl: %s (option "
4622                         "removed, use infra-host-ttl)", (yyvsp[0].str));
4623                 free((yyvsp[0].str));
4624         }
4625 #line 4626 "util/configparser.c"
4626     break;
4627
4628   case 446: /* server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING_ARG  */
4629 #line 1679 "util/configparser.y"
4630         {
4631                 OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[0].str)));
4632                 if(atoi((yyvsp[0].str)) == 0)
4633                         yyerror("number expected");
4634                 else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[0].str));
4635                 free((yyvsp[0].str));
4636         }
4637 #line 4638 "util/configparser.c"
4638     break;
4639
4640   case 447: /* server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING_ARG  */
4641 #line 1688 "util/configparser.y"
4642         {
4643                 OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[0].str)));
4644                 verbose(VERB_DETAIL, "ignored infra-cache-lame-size: %s "
4645                         "(option removed, use infra-cache-numhosts)", (yyvsp[0].str));
4646                 free((yyvsp[0].str));
4647         }
4648 #line 4649 "util/configparser.c"
4649     break;
4650
4651   case 448: /* server_infra_cache_slabs: VAR_INFRA_CACHE_SLABS STRING_ARG  */
4652 #line 1696 "util/configparser.y"
4653         {
4654                 OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[0].str)));
4655                 if(atoi((yyvsp[0].str)) == 0) {
4656                         yyerror("number expected");
4657                 } else {
4658                         cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[0].str));
4659                         if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
4660                                 yyerror("must be a power of 2");
4661                 }
4662                 free((yyvsp[0].str));
4663         }
4664 #line 4665 "util/configparser.c"
4665     break;
4666
4667   case 449: /* server_infra_cache_min_rtt: VAR_INFRA_CACHE_MIN_RTT STRING_ARG  */
4668 #line 1709 "util/configparser.y"
4669         {
4670                 OUTYY(("P(server_infra_cache_min_rtt:%s)\n", (yyvsp[0].str)));
4671                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4672                         yyerror("number expected");
4673                 else cfg_parser->cfg->infra_cache_min_rtt = atoi((yyvsp[0].str));
4674                 free((yyvsp[0].str));
4675         }
4676 #line 4677 "util/configparser.c"
4677     break;
4678
4679   case 450: /* server_infra_cache_max_rtt: VAR_INFRA_CACHE_MAX_RTT STRING_ARG  */
4680 #line 1718 "util/configparser.y"
4681         {
4682                 OUTYY(("P(server_infra_cache_max_rtt:%s)\n", (yyvsp[0].str)));
4683                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4684                         yyerror("number expected");
4685                 else cfg_parser->cfg->infra_cache_max_rtt = atoi((yyvsp[0].str));
4686                 free((yyvsp[0].str));
4687         }
4688 #line 4689 "util/configparser.c"
4689     break;
4690
4691   case 451: /* server_infra_keep_probing: VAR_INFRA_KEEP_PROBING STRING_ARG  */
4692 #line 1727 "util/configparser.y"
4693         {
4694                 OUTYY(("P(server_infra_keep_probing:%s)\n", (yyvsp[0].str)));
4695                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4696                         yyerror("expected yes or no.");
4697                 else cfg_parser->cfg->infra_keep_probing =
4698                         (strcmp((yyvsp[0].str), "yes")==0);
4699                 free((yyvsp[0].str));
4700         }
4701 #line 4702 "util/configparser.c"
4702     break;
4703
4704   case 452: /* server_target_fetch_policy: VAR_TARGET_FETCH_POLICY STRING_ARG  */
4705 #line 1737 "util/configparser.y"
4706         {
4707                 OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[0].str)));
4708                 free(cfg_parser->cfg->target_fetch_policy);
4709                 cfg_parser->cfg->target_fetch_policy = (yyvsp[0].str);
4710         }
4711 #line 4712 "util/configparser.c"
4712     break;
4713
4714   case 453: /* server_harden_short_bufsize: VAR_HARDEN_SHORT_BUFSIZE STRING_ARG  */
4715 #line 1744 "util/configparser.y"
4716         {
4717                 OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[0].str)));
4718                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4719                         yyerror("expected yes or no.");
4720                 else cfg_parser->cfg->harden_short_bufsize =
4721                         (strcmp((yyvsp[0].str), "yes")==0);
4722                 free((yyvsp[0].str));
4723         }
4724 #line 4725 "util/configparser.c"
4725     break;
4726
4727   case 454: /* server_harden_large_queries: VAR_HARDEN_LARGE_QUERIES STRING_ARG  */
4728 #line 1754 "util/configparser.y"
4729         {
4730                 OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[0].str)));
4731                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4732                         yyerror("expected yes or no.");
4733                 else cfg_parser->cfg->harden_large_queries =
4734                         (strcmp((yyvsp[0].str), "yes")==0);
4735                 free((yyvsp[0].str));
4736         }
4737 #line 4738 "util/configparser.c"
4738     break;
4739
4740   case 455: /* server_harden_glue: VAR_HARDEN_GLUE STRING_ARG  */
4741 #line 1764 "util/configparser.y"
4742         {
4743                 OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[0].str)));
4744                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4745                         yyerror("expected yes or no.");
4746                 else cfg_parser->cfg->harden_glue =
4747                         (strcmp((yyvsp[0].str), "yes")==0);
4748                 free((yyvsp[0].str));
4749         }
4750 #line 4751 "util/configparser.c"
4751     break;
4752
4753   case 456: /* server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG  */
4754 #line 1774 "util/configparser.y"
4755         {
4756                 OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[0].str)));
4757                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4758                         yyerror("expected yes or no.");
4759                 else cfg_parser->cfg->harden_dnssec_stripped =
4760                         (strcmp((yyvsp[0].str), "yes")==0);
4761                 free((yyvsp[0].str));
4762         }
4763 #line 4764 "util/configparser.c"
4764     break;
4765
4766   case 457: /* server_harden_below_nxdomain: VAR_HARDEN_BELOW_NXDOMAIN STRING_ARG  */
4767 #line 1784 "util/configparser.y"
4768         {
4769                 OUTYY(("P(server_harden_below_nxdomain:%s)\n", (yyvsp[0].str)));
4770                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4771                         yyerror("expected yes or no.");
4772                 else cfg_parser->cfg->harden_below_nxdomain =
4773                         (strcmp((yyvsp[0].str), "yes")==0);
4774                 free((yyvsp[0].str));
4775         }
4776 #line 4777 "util/configparser.c"
4777     break;
4778
4779   case 458: /* server_harden_referral_path: VAR_HARDEN_REFERRAL_PATH STRING_ARG  */
4780 #line 1794 "util/configparser.y"
4781         {
4782                 OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[0].str)));
4783                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4784                         yyerror("expected yes or no.");
4785                 else cfg_parser->cfg->harden_referral_path =
4786                         (strcmp((yyvsp[0].str), "yes")==0);
4787                 free((yyvsp[0].str));
4788         }
4789 #line 4790 "util/configparser.c"
4790     break;
4791
4792   case 459: /* server_harden_algo_downgrade: VAR_HARDEN_ALGO_DOWNGRADE STRING_ARG  */
4793 #line 1804 "util/configparser.y"
4794         {
4795                 OUTYY(("P(server_harden_algo_downgrade:%s)\n", (yyvsp[0].str)));
4796                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4797                         yyerror("expected yes or no.");
4798                 else cfg_parser->cfg->harden_algo_downgrade =
4799                         (strcmp((yyvsp[0].str), "yes")==0);
4800                 free((yyvsp[0].str));
4801         }
4802 #line 4803 "util/configparser.c"
4803     break;
4804
4805   case 460: /* server_harden_unknown_additional: VAR_HARDEN_UNKNOWN_ADDITIONAL STRING_ARG  */
4806 #line 1814 "util/configparser.y"
4807         {
4808                 OUTYY(("P(server_harden_unknown_additional:%s)\n", (yyvsp[0].str)));
4809                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4810                         yyerror("expected yes or no.");
4811                 else cfg_parser->cfg->harden_unknown_additional =
4812                         (strcmp((yyvsp[0].str), "yes")==0);
4813                 free((yyvsp[0].str));
4814         }
4815 #line 4816 "util/configparser.c"
4816     break;
4817
4818   case 461: /* server_use_caps_for_id: VAR_USE_CAPS_FOR_ID STRING_ARG  */
4819 #line 1824 "util/configparser.y"
4820         {
4821                 OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[0].str)));
4822                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4823                         yyerror("expected yes or no.");
4824                 else cfg_parser->cfg->use_caps_bits_for_id =
4825                         (strcmp((yyvsp[0].str), "yes")==0);
4826                 free((yyvsp[0].str));
4827         }
4828 #line 4829 "util/configparser.c"
4829     break;
4830
4831   case 462: /* server_caps_whitelist: VAR_CAPS_WHITELIST STRING_ARG  */
4832 #line 1834 "util/configparser.y"
4833         {
4834                 OUTYY(("P(server_caps_whitelist:%s)\n", (yyvsp[0].str)));
4835                 if(!cfg_strlist_insert(&cfg_parser->cfg->caps_whitelist, (yyvsp[0].str)))
4836                         yyerror("out of memory");
4837         }
4838 #line 4839 "util/configparser.c"
4839     break;
4840
4841   case 463: /* server_private_address: VAR_PRIVATE_ADDRESS STRING_ARG  */
4842 #line 1841 "util/configparser.y"
4843         {
4844                 OUTYY(("P(server_private_address:%s)\n", (yyvsp[0].str)));
4845                 if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[0].str)))
4846                         yyerror("out of memory");
4847         }
4848 #line 4849 "util/configparser.c"
4849     break;
4850
4851   case 464: /* server_private_domain: VAR_PRIVATE_DOMAIN STRING_ARG  */
4852 #line 1848 "util/configparser.y"
4853         {
4854                 OUTYY(("P(server_private_domain:%s)\n", (yyvsp[0].str)));
4855                 if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[0].str)))
4856                         yyerror("out of memory");
4857         }
4858 #line 4859 "util/configparser.c"
4859     break;
4860
4861   case 465: /* server_prefetch: VAR_PREFETCH STRING_ARG  */
4862 #line 1855 "util/configparser.y"
4863         {
4864                 OUTYY(("P(server_prefetch:%s)\n", (yyvsp[0].str)));
4865                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4866                         yyerror("expected yes or no.");
4867                 else cfg_parser->cfg->prefetch = (strcmp((yyvsp[0].str), "yes")==0);
4868                 free((yyvsp[0].str));
4869         }
4870 #line 4871 "util/configparser.c"
4871     break;
4872
4873   case 466: /* server_prefetch_key: VAR_PREFETCH_KEY STRING_ARG  */
4874 #line 1864 "util/configparser.y"
4875         {
4876                 OUTYY(("P(server_prefetch_key:%s)\n", (yyvsp[0].str)));
4877                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4878                         yyerror("expected yes or no.");
4879                 else cfg_parser->cfg->prefetch_key = (strcmp((yyvsp[0].str), "yes")==0);
4880                 free((yyvsp[0].str));
4881         }
4882 #line 4883 "util/configparser.c"
4883     break;
4884
4885   case 467: /* server_deny_any: VAR_DENY_ANY STRING_ARG  */
4886 #line 1873 "util/configparser.y"
4887         {
4888                 OUTYY(("P(server_deny_any:%s)\n", (yyvsp[0].str)));
4889                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4890                         yyerror("expected yes or no.");
4891                 else cfg_parser->cfg->deny_any = (strcmp((yyvsp[0].str), "yes")==0);
4892                 free((yyvsp[0].str));
4893         }
4894 #line 4895 "util/configparser.c"
4895     break;
4896
4897   case 468: /* server_unwanted_reply_threshold: VAR_UNWANTED_REPLY_THRESHOLD STRING_ARG  */
4898 #line 1882 "util/configparser.y"
4899         {
4900                 OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[0].str)));
4901                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
4902                         yyerror("number expected");
4903                 else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[0].str));
4904                 free((yyvsp[0].str));
4905         }
4906 #line 4907 "util/configparser.c"
4907     break;
4908
4909   case 469: /* server_do_not_query_address: VAR_DO_NOT_QUERY_ADDRESS STRING_ARG  */
4910 #line 1891 "util/configparser.y"
4911         {
4912                 OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[0].str)));
4913                 if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[0].str)))
4914                         yyerror("out of memory");
4915         }
4916 #line 4917 "util/configparser.c"
4917     break;
4918
4919   case 470: /* server_do_not_query_localhost: VAR_DO_NOT_QUERY_LOCALHOST STRING_ARG  */
4920 #line 1898 "util/configparser.y"
4921         {
4922                 OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[0].str)));
4923                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
4924                         yyerror("expected yes or no.");
4925                 else cfg_parser->cfg->donotquery_localhost =
4926                         (strcmp((yyvsp[0].str), "yes")==0);
4927                 free((yyvsp[0].str));
4928         }
4929 #line 4930 "util/configparser.c"
4930     break;
4931
4932   case 471: /* server_access_control: VAR_ACCESS_CONTROL STRING_ARG STRING_ARG  */
4933 #line 1908 "util/configparser.y"
4934         {
4935                 OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
4936                 validate_acl_action((yyvsp[0].str));
4937                 if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[-1].str), (yyvsp[0].str)))
4938                         fatal_exit("out of memory adding acl");
4939         }
4940 #line 4941 "util/configparser.c"
4941     break;
4942
4943   case 472: /* server_interface_action: VAR_INTERFACE_ACTION STRING_ARG STRING_ARG  */
4944 #line 1916 "util/configparser.y"
4945         {
4946                 OUTYY(("P(server_interface_action:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
4947                 validate_acl_action((yyvsp[0].str));
4948                 if(!cfg_str2list_insert(
4949                         &cfg_parser->cfg->interface_actions, (yyvsp[-1].str), (yyvsp[0].str)))
4950                         fatal_exit("out of memory adding acl");
4951         }
4952 #line 4953 "util/configparser.c"
4953     break;
4954
4955   case 473: /* server_module_conf: VAR_MODULE_CONF STRING_ARG  */
4956 #line 1925 "util/configparser.y"
4957         {
4958                 OUTYY(("P(server_module_conf:%s)\n", (yyvsp[0].str)));
4959                 free(cfg_parser->cfg->module_conf);
4960                 cfg_parser->cfg->module_conf = (yyvsp[0].str);
4961         }
4962 #line 4963 "util/configparser.c"
4963     break;
4964
4965   case 474: /* server_val_override_date: VAR_VAL_OVERRIDE_DATE STRING_ARG  */
4966 #line 1932 "util/configparser.y"
4967         {
4968                 OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[0].str)));
4969                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
4970                         cfg_parser->cfg->val_date_override = 0;
4971                 } else if(strlen((yyvsp[0].str)) == 14) {
4972                         cfg_parser->cfg->val_date_override =
4973                                 cfg_convert_timeval((yyvsp[0].str));
4974                         if(!cfg_parser->cfg->val_date_override)
4975                                 yyerror("bad date/time specification");
4976                 } else {
4977                         if(atoi((yyvsp[0].str)) == 0)
4978                                 yyerror("number expected");
4979                         cfg_parser->cfg->val_date_override = atoi((yyvsp[0].str));
4980                 }
4981                 free((yyvsp[0].str));
4982         }
4983 #line 4984 "util/configparser.c"
4984     break;
4985
4986   case 475: /* server_val_sig_skew_min: VAR_VAL_SIG_SKEW_MIN STRING_ARG  */
4987 #line 1950 "util/configparser.y"
4988         {
4989                 OUTYY(("P(server_val_sig_skew_min:%s)\n", (yyvsp[0].str)));
4990                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
4991                         cfg_parser->cfg->val_sig_skew_min = 0;
4992                 } else {
4993                         cfg_parser->cfg->val_sig_skew_min = atoi((yyvsp[0].str));
4994                         if(!cfg_parser->cfg->val_sig_skew_min)
4995                                 yyerror("number expected");
4996                 }
4997                 free((yyvsp[0].str));
4998         }
4999 #line 5000 "util/configparser.c"
5000     break;
5001
5002   case 476: /* server_val_sig_skew_max: VAR_VAL_SIG_SKEW_MAX STRING_ARG  */
5003 #line 1963 "util/configparser.y"
5004         {
5005                 OUTYY(("P(server_val_sig_skew_max:%s)\n", (yyvsp[0].str)));
5006                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5007                         cfg_parser->cfg->val_sig_skew_max = 0;
5008                 } else {
5009                         cfg_parser->cfg->val_sig_skew_max = atoi((yyvsp[0].str));
5010                         if(!cfg_parser->cfg->val_sig_skew_max)
5011                                 yyerror("number expected");
5012                 }
5013                 free((yyvsp[0].str));
5014         }
5015 #line 5016 "util/configparser.c"
5016     break;
5017
5018   case 477: /* server_val_max_restart: VAR_VAL_MAX_RESTART STRING_ARG  */
5019 #line 1976 "util/configparser.y"
5020         {
5021                 OUTYY(("P(server_val_max_restart:%s)\n", (yyvsp[0].str)));
5022                 if(*(yyvsp[0].str) == '\0' || strcmp((yyvsp[0].str), "0") == 0) {
5023                         cfg_parser->cfg->val_max_restart = 0;
5024                 } else {
5025                         cfg_parser->cfg->val_max_restart = atoi((yyvsp[0].str));
5026                         if(!cfg_parser->cfg->val_max_restart)
5027                                 yyerror("number expected");
5028                 }
5029                 free((yyvsp[0].str));
5030         }
5031 #line 5032 "util/configparser.c"
5032     break;
5033
5034   case 478: /* server_cache_max_ttl: VAR_CACHE_MAX_TTL STRING_ARG  */
5035 #line 1989 "util/configparser.y"
5036         {
5037                 OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[0].str)));
5038                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5039                         yyerror("number expected");
5040                 else cfg_parser->cfg->max_ttl = atoi((yyvsp[0].str));
5041                 free((yyvsp[0].str));
5042         }
5043 #line 5044 "util/configparser.c"
5044     break;
5045
5046   case 479: /* server_cache_max_negative_ttl: VAR_CACHE_MAX_NEGATIVE_TTL STRING_ARG  */
5047 #line 1998 "util/configparser.y"
5048         {
5049                 OUTYY(("P(server_cache_max_negative_ttl:%s)\n", (yyvsp[0].str)));
5050                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5051                         yyerror("number expected");
5052                 else cfg_parser->cfg->max_negative_ttl = atoi((yyvsp[0].str));
5053                 free((yyvsp[0].str));
5054         }
5055 #line 5056 "util/configparser.c"
5056     break;
5057
5058   case 480: /* server_cache_min_ttl: VAR_CACHE_MIN_TTL STRING_ARG  */
5059 #line 2007 "util/configparser.y"
5060         {
5061                 OUTYY(("P(server_cache_min_ttl:%s)\n", (yyvsp[0].str)));
5062                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5063                         yyerror("number expected");
5064                 else cfg_parser->cfg->min_ttl = atoi((yyvsp[0].str));
5065                 free((yyvsp[0].str));
5066         }
5067 #line 5068 "util/configparser.c"
5068     break;
5069
5070   case 481: /* server_bogus_ttl: VAR_BOGUS_TTL STRING_ARG  */
5071 #line 2016 "util/configparser.y"
5072         {
5073                 OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[0].str)));
5074                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5075                         yyerror("number expected");
5076                 else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[0].str));
5077                 free((yyvsp[0].str));
5078         }
5079 #line 5080 "util/configparser.c"
5080     break;
5081
5082   case 482: /* server_val_clean_additional: VAR_VAL_CLEAN_ADDITIONAL STRING_ARG  */
5083 #line 2025 "util/configparser.y"
5084         {
5085                 OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[0].str)));
5086                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5087                         yyerror("expected yes or no.");
5088                 else cfg_parser->cfg->val_clean_additional =
5089                         (strcmp((yyvsp[0].str), "yes")==0);
5090                 free((yyvsp[0].str));
5091         }
5092 #line 5093 "util/configparser.c"
5093     break;
5094
5095   case 483: /* server_val_permissive_mode: VAR_VAL_PERMISSIVE_MODE STRING_ARG  */
5096 #line 2035 "util/configparser.y"
5097         {
5098                 OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[0].str)));
5099                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5100                         yyerror("expected yes or no.");
5101                 else cfg_parser->cfg->val_permissive_mode =
5102                         (strcmp((yyvsp[0].str), "yes")==0);
5103                 free((yyvsp[0].str));
5104         }
5105 #line 5106 "util/configparser.c"
5106     break;
5107
5108   case 484: /* server_aggressive_nsec: VAR_AGGRESSIVE_NSEC STRING_ARG  */
5109 #line 2045 "util/configparser.y"
5110         {
5111                 OUTYY(("P(server_aggressive_nsec:%s)\n", (yyvsp[0].str)));
5112                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5113                         yyerror("expected yes or no.");
5114                 else
5115                         cfg_parser->cfg->aggressive_nsec =
5116                                 (strcmp((yyvsp[0].str), "yes")==0);
5117                 free((yyvsp[0].str));
5118         }
5119 #line 5120 "util/configparser.c"
5120     break;
5121
5122   case 485: /* server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG  */
5123 #line 2056 "util/configparser.y"
5124         {
5125                 OUTYY(("P(server_ignore_cd_flag:%s)\n", (yyvsp[0].str)));
5126                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5127                         yyerror("expected yes or no.");
5128                 else cfg_parser->cfg->ignore_cd = (strcmp((yyvsp[0].str), "yes")==0);
5129                 free((yyvsp[0].str));
5130         }
5131 #line 5132 "util/configparser.c"
5132     break;
5133
5134   case 486: /* server_disable_edns_do: VAR_DISABLE_EDNS_DO STRING_ARG  */
5135 #line 2065 "util/configparser.y"
5136         {
5137                 OUTYY(("P(server_disable_edns_do:%s)\n", (yyvsp[0].str)));
5138                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5139                         yyerror("expected yes or no.");
5140                 else cfg_parser->cfg->disable_edns_do = (strcmp((yyvsp[0].str), "yes")==0);
5141                 free((yyvsp[0].str));
5142         }
5143 #line 5144 "util/configparser.c"
5144     break;
5145
5146   case 487: /* server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG  */
5147 #line 2074 "util/configparser.y"
5148         {
5149                 OUTYY(("P(server_serve_expired:%s)\n", (yyvsp[0].str)));
5150                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5151                         yyerror("expected yes or no.");
5152                 else cfg_parser->cfg->serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5153                 free((yyvsp[0].str));
5154         }
5155 #line 5156 "util/configparser.c"
5156     break;
5157
5158   case 488: /* server_serve_expired_ttl: VAR_SERVE_EXPIRED_TTL STRING_ARG  */
5159 #line 2083 "util/configparser.y"
5160         {
5161                 OUTYY(("P(server_serve_expired_ttl:%s)\n", (yyvsp[0].str)));
5162                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5163                         yyerror("number expected");
5164                 else cfg_parser->cfg->serve_expired_ttl = atoi((yyvsp[0].str));
5165                 free((yyvsp[0].str));
5166         }
5167 #line 5168 "util/configparser.c"
5168     break;
5169
5170   case 489: /* server_serve_expired_ttl_reset: VAR_SERVE_EXPIRED_TTL_RESET STRING_ARG  */
5171 #line 2092 "util/configparser.y"
5172         {
5173                 OUTYY(("P(server_serve_expired_ttl_reset:%s)\n", (yyvsp[0].str)));
5174                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5175                         yyerror("expected yes or no.");
5176                 else cfg_parser->cfg->serve_expired_ttl_reset = (strcmp((yyvsp[0].str), "yes")==0);
5177                 free((yyvsp[0].str));
5178         }
5179 #line 5180 "util/configparser.c"
5180     break;
5181
5182   case 490: /* server_serve_expired_reply_ttl: VAR_SERVE_EXPIRED_REPLY_TTL STRING_ARG  */
5183 #line 2101 "util/configparser.y"
5184         {
5185                 OUTYY(("P(server_serve_expired_reply_ttl:%s)\n", (yyvsp[0].str)));
5186                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5187                         yyerror("number expected");
5188                 else cfg_parser->cfg->serve_expired_reply_ttl = atoi((yyvsp[0].str));
5189                 free((yyvsp[0].str));
5190         }
5191 #line 5192 "util/configparser.c"
5192     break;
5193
5194   case 491: /* server_serve_expired_client_timeout: VAR_SERVE_EXPIRED_CLIENT_TIMEOUT STRING_ARG  */
5195 #line 2110 "util/configparser.y"
5196         {
5197                 OUTYY(("P(server_serve_expired_client_timeout:%s)\n", (yyvsp[0].str)));
5198                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5199                         yyerror("number expected");
5200                 else cfg_parser->cfg->serve_expired_client_timeout = atoi((yyvsp[0].str));
5201                 free((yyvsp[0].str));
5202         }
5203 #line 5204 "util/configparser.c"
5204     break;
5205
5206   case 492: /* server_ede_serve_expired: VAR_EDE_SERVE_EXPIRED STRING_ARG  */
5207 #line 2119 "util/configparser.y"
5208         {
5209                 OUTYY(("P(server_ede_serve_expired:%s)\n", (yyvsp[0].str)));
5210                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5211                         yyerror("expected yes or no.");
5212                 else cfg_parser->cfg->ede_serve_expired = (strcmp((yyvsp[0].str), "yes")==0);
5213                 free((yyvsp[0].str));
5214         }
5215 #line 5216 "util/configparser.c"
5216     break;
5217
5218   case 493: /* server_serve_original_ttl: VAR_SERVE_ORIGINAL_TTL STRING_ARG  */
5219 #line 2128 "util/configparser.y"
5220         {
5221                 OUTYY(("P(server_serve_original_ttl:%s)\n", (yyvsp[0].str)));
5222                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5223                         yyerror("expected yes or no.");
5224                 else cfg_parser->cfg->serve_original_ttl = (strcmp((yyvsp[0].str), "yes")==0);
5225                 free((yyvsp[0].str));
5226         }
5227 #line 5228 "util/configparser.c"
5228     break;
5229
5230   case 494: /* server_fake_dsa: VAR_FAKE_DSA STRING_ARG  */
5231 #line 2137 "util/configparser.y"
5232         {
5233                 OUTYY(("P(server_fake_dsa:%s)\n", (yyvsp[0].str)));
5234                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5235                         yyerror("expected yes or no.");
5236 #if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5237                 else fake_dsa = (strcmp((yyvsp[0].str), "yes")==0);
5238                 if(fake_dsa)
5239                         log_warn("test option fake_dsa is enabled");
5240 #endif
5241                 free((yyvsp[0].str));
5242         }
5243 #line 5244 "util/configparser.c"
5244     break;
5245
5246   case 495: /* server_fake_sha1: VAR_FAKE_SHA1 STRING_ARG  */
5247 #line 2150 "util/configparser.y"
5248         {
5249                 OUTYY(("P(server_fake_sha1:%s)\n", (yyvsp[0].str)));
5250                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5251                         yyerror("expected yes or no.");
5252 #if defined(HAVE_SSL) || defined(HAVE_NETTLE)
5253                 else fake_sha1 = (strcmp((yyvsp[0].str), "yes")==0);
5254                 if(fake_sha1)
5255                         log_warn("test option fake_sha1 is enabled");
5256 #endif
5257                 free((yyvsp[0].str));
5258         }
5259 #line 5260 "util/configparser.c"
5260     break;
5261
5262   case 496: /* server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG  */
5263 #line 2163 "util/configparser.y"
5264         {
5265                 OUTYY(("P(server_val_log_level:%s)\n", (yyvsp[0].str)));
5266                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5267                         yyerror("number expected");
5268                 else cfg_parser->cfg->val_log_level = atoi((yyvsp[0].str));
5269                 free((yyvsp[0].str));
5270         }
5271 #line 5272 "util/configparser.c"
5272     break;
5273
5274   case 497: /* server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING_ARG  */
5275 #line 2172 "util/configparser.y"
5276         {
5277                 OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[0].str)));
5278                 free(cfg_parser->cfg->val_nsec3_key_iterations);
5279                 cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[0].str);
5280         }
5281 #line 5282 "util/configparser.c"
5282     break;
5283
5284   case 498: /* server_zonemd_permissive_mode: VAR_ZONEMD_PERMISSIVE_MODE STRING_ARG  */
5285 #line 2179 "util/configparser.y"
5286         {
5287                 OUTYY(("P(server_zonemd_permissive_mode:%s)\n", (yyvsp[0].str)));
5288                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5289                         yyerror("expected yes or no.");
5290                 else    cfg_parser->cfg->zonemd_permissive_mode = (strcmp((yyvsp[0].str), "yes")==0);
5291                 free((yyvsp[0].str));
5292         }
5293 #line 5294 "util/configparser.c"
5294     break;
5295
5296   case 499: /* server_add_holddown: VAR_ADD_HOLDDOWN STRING_ARG  */
5297 #line 2188 "util/configparser.y"
5298         {
5299                 OUTYY(("P(server_add_holddown:%s)\n", (yyvsp[0].str)));
5300                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5301                         yyerror("number expected");
5302                 else cfg_parser->cfg->add_holddown = atoi((yyvsp[0].str));
5303                 free((yyvsp[0].str));
5304         }
5305 #line 5306 "util/configparser.c"
5306     break;
5307
5308   case 500: /* server_del_holddown: VAR_DEL_HOLDDOWN STRING_ARG  */
5309 #line 2197 "util/configparser.y"
5310         {
5311                 OUTYY(("P(server_del_holddown:%s)\n", (yyvsp[0].str)));
5312                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5313                         yyerror("number expected");
5314                 else cfg_parser->cfg->del_holddown = atoi((yyvsp[0].str));
5315                 free((yyvsp[0].str));
5316         }
5317 #line 5318 "util/configparser.c"
5318     break;
5319
5320   case 501: /* server_keep_missing: VAR_KEEP_MISSING STRING_ARG  */
5321 #line 2206 "util/configparser.y"
5322         {
5323                 OUTYY(("P(server_keep_missing:%s)\n", (yyvsp[0].str)));
5324                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5325                         yyerror("number expected");
5326                 else cfg_parser->cfg->keep_missing = atoi((yyvsp[0].str));
5327                 free((yyvsp[0].str));
5328         }
5329 #line 5330 "util/configparser.c"
5330     break;
5331
5332   case 502: /* server_permit_small_holddown: VAR_PERMIT_SMALL_HOLDDOWN STRING_ARG  */
5333 #line 2215 "util/configparser.y"
5334         {
5335                 OUTYY(("P(server_permit_small_holddown:%s)\n", (yyvsp[0].str)));
5336                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5337                         yyerror("expected yes or no.");
5338                 else cfg_parser->cfg->permit_small_holddown =
5339                         (strcmp((yyvsp[0].str), "yes")==0);
5340                 free((yyvsp[0].str));
5341         }
5342 #line 5343 "util/configparser.c"
5343     break;
5344
5345   case 503: /* server_key_cache_size: VAR_KEY_CACHE_SIZE STRING_ARG  */
5346 #line 2225 "util/configparser.y"
5347         {
5348                 OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[0].str)));
5349                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->key_cache_size))
5350                         yyerror("memory size expected");
5351                 free((yyvsp[0].str));
5352         }
5353 #line 5354 "util/configparser.c"
5354     break;
5355
5356   case 504: /* server_key_cache_slabs: VAR_KEY_CACHE_SLABS STRING_ARG  */
5357 #line 2233 "util/configparser.y"
5358         {
5359                 OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[0].str)));
5360                 if(atoi((yyvsp[0].str)) == 0) {
5361                         yyerror("number expected");
5362                 } else {
5363                         cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[0].str));
5364                         if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
5365                                 yyerror("must be a power of 2");
5366                 }
5367                 free((yyvsp[0].str));
5368         }
5369 #line 5370 "util/configparser.c"
5370     break;
5371
5372   case 505: /* server_neg_cache_size: VAR_NEG_CACHE_SIZE STRING_ARG  */
5373 #line 2246 "util/configparser.y"
5374         {
5375                 OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[0].str)));
5376                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->neg_cache_size))
5377                         yyerror("memory size expected");
5378                 free((yyvsp[0].str));
5379         }
5380 #line 5381 "util/configparser.c"
5381     break;
5382
5383   case 506: /* server_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG  */
5384 #line 2254 "util/configparser.y"
5385         {
5386                 OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5387                 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
5388                    strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
5389                    strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
5390                    && strcmp((yyvsp[0].str), "typetransparent")!=0
5391                    && strcmp((yyvsp[0].str), "always_transparent")!=0
5392                    && strcmp((yyvsp[0].str), "block_a")!=0
5393                    && strcmp((yyvsp[0].str), "always_refuse")!=0
5394                    && strcmp((yyvsp[0].str), "always_nxdomain")!=0
5395                    && strcmp((yyvsp[0].str), "always_nodata")!=0
5396                    && strcmp((yyvsp[0].str), "always_deny")!=0
5397                    && strcmp((yyvsp[0].str), "always_null")!=0
5398                    && strcmp((yyvsp[0].str), "noview")!=0
5399                    && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
5400                    && strcmp((yyvsp[0].str), "inform_redirect") != 0
5401                    && strcmp((yyvsp[0].str), "ipset") != 0) {
5402                         yyerror("local-zone type: expected static, deny, "
5403                                 "refuse, redirect, transparent, "
5404                                 "typetransparent, inform, inform_deny, "
5405                                 "inform_redirect, always_transparent, block_a,"
5406                                 "always_refuse, always_nxdomain, "
5407                                 "always_nodata, always_deny, always_null, "
5408                                 "noview, nodefault or ipset");
5409                         free((yyvsp[-1].str));
5410                         free((yyvsp[0].str));
5411                 } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
5412                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5413                                 local_zones_nodefault, (yyvsp[-1].str)))
5414                                 fatal_exit("out of memory adding local-zone");
5415                         free((yyvsp[0].str));
5416 #ifdef USE_IPSET
5417                 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
5418                         size_t len = strlen((yyvsp[-1].str));
5419                         /* Make sure to add the trailing dot.
5420                          * These are str compared to domain names. */
5421                         if((yyvsp[-1].str)[len-1] != '.') {
5422                                 if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
5423                                         fatal_exit("out of memory adding local-zone");
5424                                 }
5425                                 (yyvsp[-1].str)[len] = '.';
5426                                 (yyvsp[-1].str)[len+1] = 0;
5427                         }
5428                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5429                                 local_zones_ipset, (yyvsp[-1].str)))
5430                                 fatal_exit("out of memory adding local-zone");
5431                         free((yyvsp[0].str));
5432 #endif
5433                 } else {
5434                         if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones,
5435                                 (yyvsp[-1].str), (yyvsp[0].str)))
5436                                 fatal_exit("out of memory adding local-zone");
5437                 }
5438         }
5439 #line 5440 "util/configparser.c"
5440     break;
5441
5442   case 507: /* server_local_data: VAR_LOCAL_DATA STRING_ARG  */
5443 #line 2310 "util/configparser.y"
5444         {
5445                 OUTYY(("P(server_local_data:%s)\n", (yyvsp[0].str)));
5446                 if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[0].str)))
5447                         fatal_exit("out of memory adding local-data");
5448         }
5449 #line 5450 "util/configparser.c"
5450     break;
5451
5452   case 508: /* server_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG  */
5453 #line 2317 "util/configparser.y"
5454         {
5455                 char* ptr;
5456                 OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[0].str)));
5457                 ptr = cfg_ptr_reverse((yyvsp[0].str));
5458                 free((yyvsp[0].str));
5459                 if(ptr) {
5460                         if(!cfg_strlist_insert(&cfg_parser->cfg->
5461                                 local_data, ptr))
5462                                 fatal_exit("out of memory adding local-data");
5463                 } else {
5464                         yyerror("local-data-ptr could not be reversed");
5465                 }
5466         }
5467 #line 5468 "util/configparser.c"
5468     break;
5469
5470   case 509: /* server_minimal_responses: VAR_MINIMAL_RESPONSES STRING_ARG  */
5471 #line 2332 "util/configparser.y"
5472         {
5473                 OUTYY(("P(server_minimal_responses:%s)\n", (yyvsp[0].str)));
5474                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5475                         yyerror("expected yes or no.");
5476                 else cfg_parser->cfg->minimal_responses =
5477                         (strcmp((yyvsp[0].str), "yes")==0);
5478                 free((yyvsp[0].str));
5479         }
5480 #line 5481 "util/configparser.c"
5481     break;
5482
5483   case 510: /* server_rrset_roundrobin: VAR_RRSET_ROUNDROBIN STRING_ARG  */
5484 #line 2342 "util/configparser.y"
5485         {
5486                 OUTYY(("P(server_rrset_roundrobin:%s)\n", (yyvsp[0].str)));
5487                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5488                         yyerror("expected yes or no.");
5489                 else cfg_parser->cfg->rrset_roundrobin =
5490                         (strcmp((yyvsp[0].str), "yes")==0);
5491                 free((yyvsp[0].str));
5492         }
5493 #line 5494 "util/configparser.c"
5494     break;
5495
5496   case 511: /* server_unknown_server_time_limit: VAR_UNKNOWN_SERVER_TIME_LIMIT STRING_ARG  */
5497 #line 2352 "util/configparser.y"
5498         {
5499                 OUTYY(("P(server_unknown_server_time_limit:%s)\n", (yyvsp[0].str)));
5500                 cfg_parser->cfg->unknown_server_time_limit = atoi((yyvsp[0].str));
5501                 free((yyvsp[0].str));
5502         }
5503 #line 5504 "util/configparser.c"
5504     break;
5505
5506   case 512: /* server_max_udp_size: VAR_MAX_UDP_SIZE STRING_ARG  */
5507 #line 2359 "util/configparser.y"
5508         {
5509                 OUTYY(("P(server_max_udp_size:%s)\n", (yyvsp[0].str)));
5510                 cfg_parser->cfg->max_udp_size = atoi((yyvsp[0].str));
5511                 free((yyvsp[0].str));
5512         }
5513 #line 5514 "util/configparser.c"
5514     break;
5515
5516   case 513: /* server_dns64_prefix: VAR_DNS64_PREFIX STRING_ARG  */
5517 #line 2366 "util/configparser.y"
5518         {
5519                 OUTYY(("P(dns64_prefix:%s)\n", (yyvsp[0].str)));
5520                 free(cfg_parser->cfg->dns64_prefix);
5521                 cfg_parser->cfg->dns64_prefix = (yyvsp[0].str);
5522         }
5523 #line 5524 "util/configparser.c"
5524     break;
5525
5526   case 514: /* server_dns64_synthall: VAR_DNS64_SYNTHALL STRING_ARG  */
5527 #line 2373 "util/configparser.y"
5528         {
5529                 OUTYY(("P(server_dns64_synthall:%s)\n", (yyvsp[0].str)));
5530                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5531                         yyerror("expected yes or no.");
5532                 else cfg_parser->cfg->dns64_synthall = (strcmp((yyvsp[0].str), "yes")==0);
5533                 free((yyvsp[0].str));
5534         }
5535 #line 5536 "util/configparser.c"
5536     break;
5537
5538   case 515: /* server_dns64_ignore_aaaa: VAR_DNS64_IGNORE_AAAA STRING_ARG  */
5539 #line 2382 "util/configparser.y"
5540         {
5541                 OUTYY(("P(dns64_ignore_aaaa:%s)\n", (yyvsp[0].str)));
5542                 if(!cfg_strlist_insert(&cfg_parser->cfg->dns64_ignore_aaaa,
5543                         (yyvsp[0].str)))
5544                         fatal_exit("out of memory adding dns64-ignore-aaaa");
5545         }
5546 #line 5547 "util/configparser.c"
5547     break;
5548
5549   case 516: /* server_nat64_prefix: VAR_NAT64_PREFIX STRING_ARG  */
5550 #line 2390 "util/configparser.y"
5551         {
5552                 OUTYY(("P(nat64_prefix:%s)\n", (yyvsp[0].str)));
5553                 free(cfg_parser->cfg->nat64_prefix);
5554                 cfg_parser->cfg->nat64_prefix = (yyvsp[0].str);
5555         }
5556 #line 5557 "util/configparser.c"
5557     break;
5558
5559   case 517: /* server_define_tag: VAR_DEFINE_TAG STRING_ARG  */
5560 #line 2397 "util/configparser.y"
5561         {
5562                 char* p, *s = (yyvsp[0].str);
5563                 OUTYY(("P(server_define_tag:%s)\n", (yyvsp[0].str)));
5564                 while((p=strsep(&s, " \t\n")) != NULL) {
5565                         if(*p) {
5566                                 if(!config_add_tag(cfg_parser->cfg, p))
5567                                         yyerror("could not define-tag, "
5568                                                 "out of memory");
5569                         }
5570                 }
5571                 free((yyvsp[0].str));
5572         }
5573 #line 5574 "util/configparser.c"
5574     break;
5575
5576   case 518: /* server_local_zone_tag: VAR_LOCAL_ZONE_TAG STRING_ARG STRING_ARG  */
5577 #line 2411 "util/configparser.y"
5578         {
5579                 size_t len = 0;
5580                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5581                         &len);
5582                 free((yyvsp[0].str));
5583                 OUTYY(("P(server_local_zone_tag:%s)\n", (yyvsp[-1].str)));
5584                 if(!bitlist) {
5585                         yyerror("could not parse tags, (define-tag them first)");
5586                         free((yyvsp[-1].str));
5587                 }
5588                 if(bitlist) {
5589                         if(!cfg_strbytelist_insert(
5590                                 &cfg_parser->cfg->local_zone_tags,
5591                                 (yyvsp[-1].str), bitlist, len)) {
5592                                 yyerror("out of memory");
5593                                 free((yyvsp[-1].str));
5594                         }
5595                 }
5596         }
5597 #line 5598 "util/configparser.c"
5598     break;
5599
5600   case 519: /* server_access_control_tag: VAR_ACCESS_CONTROL_TAG STRING_ARG STRING_ARG  */
5601 #line 2432 "util/configparser.y"
5602         {
5603                 size_t len = 0;
5604                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5605                         &len);
5606                 free((yyvsp[0].str));
5607                 OUTYY(("P(server_access_control_tag:%s)\n", (yyvsp[-1].str)));
5608                 if(!bitlist) {
5609                         yyerror("could not parse tags, (define-tag them first)");
5610                         free((yyvsp[-1].str));
5611                 }
5612                 if(bitlist) {
5613                         if(!cfg_strbytelist_insert(
5614                                 &cfg_parser->cfg->acl_tags,
5615                                 (yyvsp[-1].str), bitlist, len)) {
5616                                 yyerror("out of memory");
5617                                 free((yyvsp[-1].str));
5618                         }
5619                 }
5620         }
5621 #line 5622 "util/configparser.c"
5622     break;
5623
5624   case 520: /* server_access_control_tag_action: VAR_ACCESS_CONTROL_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG  */
5625 #line 2453 "util/configparser.y"
5626         {
5627                 OUTYY(("P(server_access_control_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5628                 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_actions,
5629                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5630                         yyerror("out of memory");
5631                         free((yyvsp[-2].str));
5632                         free((yyvsp[-1].str));
5633                         free((yyvsp[0].str));
5634                 }
5635         }
5636 #line 5637 "util/configparser.c"
5637     break;
5638
5639   case 521: /* server_access_control_tag_data: VAR_ACCESS_CONTROL_TAG_DATA STRING_ARG STRING_ARG STRING_ARG  */
5640 #line 2465 "util/configparser.y"
5641         {
5642                 OUTYY(("P(server_access_control_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5643                 if(!cfg_str3list_insert(&cfg_parser->cfg->acl_tag_datas,
5644                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5645                         yyerror("out of memory");
5646                         free((yyvsp[-2].str));
5647                         free((yyvsp[-1].str));
5648                         free((yyvsp[0].str));
5649                 }
5650         }
5651 #line 5652 "util/configparser.c"
5652     break;
5653
5654   case 522: /* server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING_ARG  */
5655 #line 2477 "util/configparser.y"
5656         {
5657                 OUTYY(("P(server_local_zone_override:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5658                 if(!cfg_str3list_insert(&cfg_parser->cfg->local_zone_overrides,
5659                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5660                         yyerror("out of memory");
5661                         free((yyvsp[-2].str));
5662                         free((yyvsp[-1].str));
5663                         free((yyvsp[0].str));
5664                 }
5665         }
5666 #line 5667 "util/configparser.c"
5667     break;
5668
5669   case 523: /* server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG  */
5670 #line 2489 "util/configparser.y"
5671         {
5672                 OUTYY(("P(server_access_control_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5673                 if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
5674                         (yyvsp[-1].str), (yyvsp[0].str))) {
5675                         yyerror("out of memory");
5676                 }
5677         }
5678 #line 5679 "util/configparser.c"
5679     break;
5680
5681   case 524: /* server_interface_tag: VAR_INTERFACE_TAG STRING_ARG STRING_ARG  */
5682 #line 2498 "util/configparser.y"
5683         {
5684                 size_t len = 0;
5685                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5686                         &len);
5687                 free((yyvsp[0].str));
5688                 OUTYY(("P(server_interface_tag:%s)\n", (yyvsp[-1].str)));
5689                 if(!bitlist) {
5690                         yyerror("could not parse tags, (define-tag them first)");
5691                         free((yyvsp[-1].str));
5692                 }
5693                 if(bitlist) {
5694                         if(!cfg_strbytelist_insert(
5695                                 &cfg_parser->cfg->interface_tags,
5696                                 (yyvsp[-1].str), bitlist, len)) {
5697                                 yyerror("out of memory");
5698                                 free((yyvsp[-1].str));
5699                         }
5700                 }
5701         }
5702 #line 5703 "util/configparser.c"
5703     break;
5704
5705   case 525: /* server_interface_tag_action: VAR_INTERFACE_TAG_ACTION STRING_ARG STRING_ARG STRING_ARG  */
5706 #line 2519 "util/configparser.y"
5707         {
5708                 OUTYY(("P(server_interface_tag_action:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5709                 if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_actions,
5710                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5711                         yyerror("out of memory");
5712                         free((yyvsp[-2].str));
5713                         free((yyvsp[-1].str));
5714                         free((yyvsp[0].str));
5715                 }
5716         }
5717 #line 5718 "util/configparser.c"
5718     break;
5719
5720   case 526: /* server_interface_tag_data: VAR_INTERFACE_TAG_DATA STRING_ARG STRING_ARG STRING_ARG  */
5721 #line 2531 "util/configparser.y"
5722         {
5723                 OUTYY(("P(server_interface_tag_data:%s %s %s)\n", (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str)));
5724                 if(!cfg_str3list_insert(&cfg_parser->cfg->interface_tag_datas,
5725                         (yyvsp[-2].str), (yyvsp[-1].str), (yyvsp[0].str))) {
5726                         yyerror("out of memory");
5727                         free((yyvsp[-2].str));
5728                         free((yyvsp[-1].str));
5729                         free((yyvsp[0].str));
5730                 }
5731         }
5732 #line 5733 "util/configparser.c"
5733     break;
5734
5735   case 527: /* server_interface_view: VAR_INTERFACE_VIEW STRING_ARG STRING_ARG  */
5736 #line 2543 "util/configparser.y"
5737         {
5738                 OUTYY(("P(server_interface_view:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5739                 if(!cfg_str2list_insert(&cfg_parser->cfg->interface_view,
5740                         (yyvsp[-1].str), (yyvsp[0].str))) {
5741                         yyerror("out of memory");
5742                 }
5743         }
5744 #line 5745 "util/configparser.c"
5745     break;
5746
5747   case 528: /* server_response_ip_tag: VAR_RESPONSE_IP_TAG STRING_ARG STRING_ARG  */
5748 #line 2552 "util/configparser.y"
5749         {
5750                 size_t len = 0;
5751                 uint8_t* bitlist = config_parse_taglist(cfg_parser->cfg, (yyvsp[0].str),
5752                         &len);
5753                 free((yyvsp[0].str));
5754                 OUTYY(("P(response_ip_tag:%s)\n", (yyvsp[-1].str)));
5755                 if(!bitlist) {
5756                         yyerror("could not parse tags, (define-tag them first)");
5757                         free((yyvsp[-1].str));
5758                 }
5759                 if(bitlist) {
5760                         if(!cfg_strbytelist_insert(
5761                                 &cfg_parser->cfg->respip_tags,
5762                                 (yyvsp[-1].str), bitlist, len)) {
5763                                 yyerror("out of memory");
5764                                 free((yyvsp[-1].str));
5765                         }
5766                 }
5767         }
5768 #line 5769 "util/configparser.c"
5769     break;
5770
5771   case 529: /* server_ip_ratelimit: VAR_IP_RATELIMIT STRING_ARG  */
5772 #line 2573 "util/configparser.y"
5773         {
5774                 OUTYY(("P(server_ip_ratelimit:%s)\n", (yyvsp[0].str)));
5775                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5776                         yyerror("number expected");
5777                 else cfg_parser->cfg->ip_ratelimit = atoi((yyvsp[0].str));
5778                 free((yyvsp[0].str));
5779         }
5780 #line 5781 "util/configparser.c"
5781     break;
5782
5783   case 530: /* server_ip_ratelimit_cookie: VAR_IP_RATELIMIT_COOKIE STRING_ARG  */
5784 #line 2582 "util/configparser.y"
5785         {
5786                 OUTYY(("P(server_ip_ratelimit_cookie:%s)\n", (yyvsp[0].str)));
5787                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5788                         yyerror("number expected");
5789                 else cfg_parser->cfg->ip_ratelimit_cookie = atoi((yyvsp[0].str));
5790                 free((yyvsp[0].str));
5791         }
5792 #line 5793 "util/configparser.c"
5793     break;
5794
5795   case 531: /* server_ratelimit: VAR_RATELIMIT STRING_ARG  */
5796 #line 2591 "util/configparser.y"
5797         {
5798                 OUTYY(("P(server_ratelimit:%s)\n", (yyvsp[0].str)));
5799                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5800                         yyerror("number expected");
5801                 else cfg_parser->cfg->ratelimit = atoi((yyvsp[0].str));
5802                 free((yyvsp[0].str));
5803         }
5804 #line 5805 "util/configparser.c"
5805     break;
5806
5807   case 532: /* server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG  */
5808 #line 2600 "util/configparser.y"
5809         {
5810                 OUTYY(("P(server_ip_ratelimit_size:%s)\n", (yyvsp[0].str)));
5811                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ip_ratelimit_size))
5812                         yyerror("memory size expected");
5813                 free((yyvsp[0].str));
5814         }
5815 #line 5816 "util/configparser.c"
5816     break;
5817
5818   case 533: /* server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG  */
5819 #line 2608 "util/configparser.y"
5820         {
5821                 OUTYY(("P(server_ratelimit_size:%s)\n", (yyvsp[0].str)));
5822                 if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->ratelimit_size))
5823                         yyerror("memory size expected");
5824                 free((yyvsp[0].str));
5825         }
5826 #line 5827 "util/configparser.c"
5827     break;
5828
5829   case 534: /* server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG  */
5830 #line 2616 "util/configparser.y"
5831         {
5832                 OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
5833                 if(atoi((yyvsp[0].str)) == 0) {
5834                         yyerror("number expected");
5835                 } else {
5836                         cfg_parser->cfg->ip_ratelimit_slabs = atoi((yyvsp[0].str));
5837                         if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
5838                                 yyerror("must be a power of 2");
5839                 }
5840                 free((yyvsp[0].str));
5841         }
5842 #line 5843 "util/configparser.c"
5843     break;
5844
5845   case 535: /* server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG  */
5846 #line 2629 "util/configparser.y"
5847         {
5848                 OUTYY(("P(server_ratelimit_slabs:%s)\n", (yyvsp[0].str)));
5849                 if(atoi((yyvsp[0].str)) == 0) {
5850                         yyerror("number expected");
5851                 } else {
5852                         cfg_parser->cfg->ratelimit_slabs = atoi((yyvsp[0].str));
5853                         if(!is_pow2(cfg_parser->cfg->ratelimit_slabs))
5854                                 yyerror("must be a power of 2");
5855                 }
5856                 free((yyvsp[0].str));
5857         }
5858 #line 5859 "util/configparser.c"
5859     break;
5860
5861   case 536: /* server_ratelimit_for_domain: VAR_RATELIMIT_FOR_DOMAIN STRING_ARG STRING_ARG  */
5862 #line 2642 "util/configparser.y"
5863         {
5864                 OUTYY(("P(server_ratelimit_for_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5865                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
5866                         yyerror("number expected");
5867                         free((yyvsp[-1].str));
5868                         free((yyvsp[0].str));
5869                 } else {
5870                         if(!cfg_str2list_insert(&cfg_parser->cfg->
5871                                 ratelimit_for_domain, (yyvsp[-1].str), (yyvsp[0].str)))
5872                                 fatal_exit("out of memory adding "
5873                                         "ratelimit-for-domain");
5874                 }
5875         }
5876 #line 5877 "util/configparser.c"
5877     break;
5878
5879   case 537: /* server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG  */
5880 #line 2657 "util/configparser.y"
5881         {
5882                 OUTYY(("P(server_ratelimit_below_domain:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
5883                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0) {
5884                         yyerror("number expected");
5885                         free((yyvsp[-1].str));
5886                         free((yyvsp[0].str));
5887                 } else {
5888                         if(!cfg_str2list_insert(&cfg_parser->cfg->
5889                                 ratelimit_below_domain, (yyvsp[-1].str), (yyvsp[0].str)))
5890                                 fatal_exit("out of memory adding "
5891                                         "ratelimit-below-domain");
5892                 }
5893         }
5894 #line 5895 "util/configparser.c"
5895     break;
5896
5897   case 538: /* server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG  */
5898 #line 2672 "util/configparser.y"
5899         {
5900                 OUTYY(("P(server_ip_ratelimit_factor:%s)\n", (yyvsp[0].str)));
5901                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5902                         yyerror("number expected");
5903                 else cfg_parser->cfg->ip_ratelimit_factor = atoi((yyvsp[0].str));
5904                 free((yyvsp[0].str));
5905         }
5906 #line 5907 "util/configparser.c"
5907     break;
5908
5909   case 539: /* server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG  */
5910 #line 2681 "util/configparser.y"
5911         {
5912                 OUTYY(("P(server_ratelimit_factor:%s)\n", (yyvsp[0].str)));
5913                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5914                         yyerror("number expected");
5915                 else cfg_parser->cfg->ratelimit_factor = atoi((yyvsp[0].str));
5916                 free((yyvsp[0].str));
5917         }
5918 #line 5919 "util/configparser.c"
5919     break;
5920
5921   case 540: /* server_ip_ratelimit_backoff: VAR_IP_RATELIMIT_BACKOFF STRING_ARG  */
5922 #line 2690 "util/configparser.y"
5923         {
5924                 OUTYY(("P(server_ip_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
5925                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5926                         yyerror("expected yes or no.");
5927                 else cfg_parser->cfg->ip_ratelimit_backoff =
5928                         (strcmp((yyvsp[0].str), "yes")==0);
5929                 free((yyvsp[0].str));
5930         }
5931 #line 5932 "util/configparser.c"
5932     break;
5933
5934   case 541: /* server_ratelimit_backoff: VAR_RATELIMIT_BACKOFF STRING_ARG  */
5935 #line 2700 "util/configparser.y"
5936         {
5937                 OUTYY(("P(server_ratelimit_backoff:%s)\n", (yyvsp[0].str)));
5938                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
5939                         yyerror("expected yes or no.");
5940                 else cfg_parser->cfg->ratelimit_backoff =
5941                         (strcmp((yyvsp[0].str), "yes")==0);
5942                 free((yyvsp[0].str));
5943         }
5944 #line 5945 "util/configparser.c"
5945     break;
5946
5947   case 542: /* server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG  */
5948 #line 2710 "util/configparser.y"
5949         {
5950                 OUTYY(("P(server_outbound_msg_retry:%s)\n", (yyvsp[0].str)));
5951                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5952                         yyerror("number expected");
5953                 else cfg_parser->cfg->outbound_msg_retry = atoi((yyvsp[0].str));
5954                 free((yyvsp[0].str));
5955         }
5956 #line 5957 "util/configparser.c"
5957     break;
5958
5959   case 543: /* server_max_sent_count: VAR_MAX_SENT_COUNT STRING_ARG  */
5960 #line 2719 "util/configparser.y"
5961         {
5962                 OUTYY(("P(server_max_sent_count:%s)\n", (yyvsp[0].str)));
5963                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5964                         yyerror("number expected");
5965                 else cfg_parser->cfg->max_sent_count = atoi((yyvsp[0].str));
5966                 free((yyvsp[0].str));
5967         }
5968 #line 5969 "util/configparser.c"
5969     break;
5970
5971   case 544: /* server_max_query_restarts: VAR_MAX_QUERY_RESTARTS STRING_ARG  */
5972 #line 2728 "util/configparser.y"
5973         {
5974                 OUTYY(("P(server_max_query_restarts:%s)\n", (yyvsp[0].str)));
5975                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
5976                         yyerror("number expected");
5977                 else cfg_parser->cfg->max_query_restarts = atoi((yyvsp[0].str));
5978                 free((yyvsp[0].str));
5979         }
5980 #line 5981 "util/configparser.c"
5981     break;
5982
5983   case 545: /* server_low_rtt: VAR_LOW_RTT STRING_ARG  */
5984 #line 2737 "util/configparser.y"
5985         {
5986                 OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
5987                 free((yyvsp[0].str));
5988         }
5989 #line 5990 "util/configparser.c"
5990     break;
5991
5992   case 546: /* server_fast_server_num: VAR_FAST_SERVER_NUM STRING_ARG  */
5993 #line 2743 "util/configparser.y"
5994         {
5995                 OUTYY(("P(server_fast_server_num:%s)\n", (yyvsp[0].str)));
5996                 if(atoi((yyvsp[0].str)) <= 0)
5997                         yyerror("number expected");
5998                 else cfg_parser->cfg->fast_server_num = atoi((yyvsp[0].str));
5999                 free((yyvsp[0].str));
6000         }
6001 #line 6002 "util/configparser.c"
6002     break;
6003
6004   case 547: /* server_fast_server_permil: VAR_FAST_SERVER_PERMIL STRING_ARG  */
6005 #line 2752 "util/configparser.y"
6006         {
6007                 OUTYY(("P(server_fast_server_permil:%s)\n", (yyvsp[0].str)));
6008                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6009                         yyerror("number expected");
6010                 else cfg_parser->cfg->fast_server_permil = atoi((yyvsp[0].str));
6011                 free((yyvsp[0].str));
6012         }
6013 #line 6014 "util/configparser.c"
6014     break;
6015
6016   case 548: /* server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG  */
6017 #line 2761 "util/configparser.y"
6018         {
6019                 OUTYY(("P(server_qname_minimisation:%s)\n", (yyvsp[0].str)));
6020                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6021                         yyerror("expected yes or no.");
6022                 else cfg_parser->cfg->qname_minimisation =
6023                         (strcmp((yyvsp[0].str), "yes")==0);
6024                 free((yyvsp[0].str));
6025         }
6026 #line 6027 "util/configparser.c"
6027     break;
6028
6029   case 549: /* server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG  */
6030 #line 2771 "util/configparser.y"
6031         {
6032                 OUTYY(("P(server_qname_minimisation_strict:%s)\n", (yyvsp[0].str)));
6033                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6034                         yyerror("expected yes or no.");
6035                 else cfg_parser->cfg->qname_minimisation_strict =
6036                         (strcmp((yyvsp[0].str), "yes")==0);
6037                 free((yyvsp[0].str));
6038         }
6039 #line 6040 "util/configparser.c"
6040     break;
6041
6042   case 550: /* server_pad_responses: VAR_PAD_RESPONSES STRING_ARG  */
6043 #line 2781 "util/configparser.y"
6044         {
6045                 OUTYY(("P(server_pad_responses:%s)\n", (yyvsp[0].str)));
6046                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6047                         yyerror("expected yes or no.");
6048                 else cfg_parser->cfg->pad_responses =
6049                         (strcmp((yyvsp[0].str), "yes")==0);
6050                 free((yyvsp[0].str));
6051         }
6052 #line 6053 "util/configparser.c"
6053     break;
6054
6055   case 551: /* server_pad_responses_block_size: VAR_PAD_RESPONSES_BLOCK_SIZE STRING_ARG  */
6056 #line 2791 "util/configparser.y"
6057         {
6058                 OUTYY(("P(server_pad_responses_block_size:%s)\n", (yyvsp[0].str)));
6059                 if(atoi((yyvsp[0].str)) == 0)
6060                         yyerror("number expected");
6061                 else cfg_parser->cfg->pad_responses_block_size = atoi((yyvsp[0].str));
6062                 free((yyvsp[0].str));
6063         }
6064 #line 6065 "util/configparser.c"
6065     break;
6066
6067   case 552: /* server_pad_queries: VAR_PAD_QUERIES STRING_ARG  */
6068 #line 2800 "util/configparser.y"
6069         {
6070                 OUTYY(("P(server_pad_queries:%s)\n", (yyvsp[0].str)));
6071                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6072                         yyerror("expected yes or no.");
6073                 else cfg_parser->cfg->pad_queries =
6074                         (strcmp((yyvsp[0].str), "yes")==0);
6075                 free((yyvsp[0].str));
6076         }
6077 #line 6078 "util/configparser.c"
6078     break;
6079
6080   case 553: /* server_pad_queries_block_size: VAR_PAD_QUERIES_BLOCK_SIZE STRING_ARG  */
6081 #line 2810 "util/configparser.y"
6082         {
6083                 OUTYY(("P(server_pad_queries_block_size:%s)\n", (yyvsp[0].str)));
6084                 if(atoi((yyvsp[0].str)) == 0)
6085                         yyerror("number expected");
6086                 else cfg_parser->cfg->pad_queries_block_size = atoi((yyvsp[0].str));
6087                 free((yyvsp[0].str));
6088         }
6089 #line 6090 "util/configparser.c"
6090     break;
6091
6092   case 554: /* server_ipsecmod_enabled: VAR_IPSECMOD_ENABLED STRING_ARG  */
6093 #line 2819 "util/configparser.y"
6094         {
6095         #ifdef USE_IPSECMOD
6096                 OUTYY(("P(server_ipsecmod_enabled:%s)\n", (yyvsp[0].str)));
6097                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6098                         yyerror("expected yes or no.");
6099                 else cfg_parser->cfg->ipsecmod_enabled = (strcmp((yyvsp[0].str), "yes")==0);
6100         #else
6101                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6102         #endif
6103                 free((yyvsp[0].str));
6104         }
6105 #line 6106 "util/configparser.c"
6106     break;
6107
6108   case 555: /* server_ipsecmod_ignore_bogus: VAR_IPSECMOD_IGNORE_BOGUS STRING_ARG  */
6109 #line 2832 "util/configparser.y"
6110         {
6111         #ifdef USE_IPSECMOD
6112                 OUTYY(("P(server_ipsecmod_ignore_bogus:%s)\n", (yyvsp[0].str)));
6113                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6114                         yyerror("expected yes or no.");
6115                 else cfg_parser->cfg->ipsecmod_ignore_bogus = (strcmp((yyvsp[0].str), "yes")==0);
6116         #else
6117                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6118         #endif
6119                 free((yyvsp[0].str));
6120         }
6121 #line 6122 "util/configparser.c"
6122     break;
6123
6124   case 556: /* server_ipsecmod_hook: VAR_IPSECMOD_HOOK STRING_ARG  */
6125 #line 2845 "util/configparser.y"
6126         {
6127         #ifdef USE_IPSECMOD
6128                 OUTYY(("P(server_ipsecmod_hook:%s)\n", (yyvsp[0].str)));
6129                 free(cfg_parser->cfg->ipsecmod_hook);
6130                 cfg_parser->cfg->ipsecmod_hook = (yyvsp[0].str);
6131         #else
6132                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6133                 free((yyvsp[0].str));
6134         #endif
6135         }
6136 #line 6137 "util/configparser.c"
6137     break;
6138
6139   case 557: /* server_ipsecmod_max_ttl: VAR_IPSECMOD_MAX_TTL STRING_ARG  */
6140 #line 2857 "util/configparser.y"
6141         {
6142         #ifdef USE_IPSECMOD
6143                 OUTYY(("P(server_ipsecmod_max_ttl:%s)\n", (yyvsp[0].str)));
6144                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6145                         yyerror("number expected");
6146                 else cfg_parser->cfg->ipsecmod_max_ttl = atoi((yyvsp[0].str));
6147                 free((yyvsp[0].str));
6148         #else
6149                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6150                 free((yyvsp[0].str));
6151         #endif
6152         }
6153 #line 6154 "util/configparser.c"
6154     break;
6155
6156   case 558: /* server_ipsecmod_whitelist: VAR_IPSECMOD_WHITELIST STRING_ARG  */
6157 #line 2871 "util/configparser.y"
6158         {
6159         #ifdef USE_IPSECMOD
6160                 OUTYY(("P(server_ipsecmod_whitelist:%s)\n", (yyvsp[0].str)));
6161                 if(!cfg_strlist_insert(&cfg_parser->cfg->ipsecmod_whitelist, (yyvsp[0].str)))
6162                         yyerror("out of memory");
6163         #else
6164                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6165                 free((yyvsp[0].str));
6166         #endif
6167         }
6168 #line 6169 "util/configparser.c"
6169     break;
6170
6171   case 559: /* server_ipsecmod_strict: VAR_IPSECMOD_STRICT STRING_ARG  */
6172 #line 2883 "util/configparser.y"
6173         {
6174         #ifdef USE_IPSECMOD
6175                 OUTYY(("P(server_ipsecmod_strict:%s)\n", (yyvsp[0].str)));
6176                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6177                         yyerror("expected yes or no.");
6178                 else cfg_parser->cfg->ipsecmod_strict = (strcmp((yyvsp[0].str), "yes")==0);
6179                 free((yyvsp[0].str));
6180         #else
6181                 OUTYY(("P(Compiled without IPsec module, ignoring)\n"));
6182                 free((yyvsp[0].str));
6183         #endif
6184         }
6185 #line 6186 "util/configparser.c"
6186     break;
6187
6188   case 560: /* server_edns_client_string: VAR_EDNS_CLIENT_STRING STRING_ARG STRING_ARG  */
6189 #line 2897 "util/configparser.y"
6190         {
6191                 OUTYY(("P(server_edns_client_string:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6192                 if(!cfg_str2list_insert(
6193                         &cfg_parser->cfg->edns_client_strings, (yyvsp[-1].str), (yyvsp[0].str)))
6194                         fatal_exit("out of memory adding "
6195                                 "edns-client-string");
6196         }
6197 #line 6198 "util/configparser.c"
6198     break;
6199
6200   case 561: /* server_edns_client_string_opcode: VAR_EDNS_CLIENT_STRING_OPCODE STRING_ARG  */
6201 #line 2906 "util/configparser.y"
6202         {
6203                 OUTYY(("P(edns_client_string_opcode:%s)\n", (yyvsp[0].str)));
6204                 if(atoi((yyvsp[0].str)) == 0 && strcmp((yyvsp[0].str), "0") != 0)
6205                         yyerror("option code expected");
6206                 else if(atoi((yyvsp[0].str)) > 65535 || atoi((yyvsp[0].str)) < 0)
6207                         yyerror("option code must be in interval [0, 65535]");
6208                 else cfg_parser->cfg->edns_client_string_opcode = atoi((yyvsp[0].str));
6209                 free((yyvsp[0].str));
6210         }
6211 #line 6212 "util/configparser.c"
6212     break;
6213
6214   case 562: /* server_ede: VAR_EDE STRING_ARG  */
6215 #line 2917 "util/configparser.y"
6216         {
6217                 OUTYY(("P(server_ede:%s)\n", (yyvsp[0].str)));
6218                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6219                         yyerror("expected yes or no.");
6220                 else cfg_parser->cfg->ede = (strcmp((yyvsp[0].str), "yes")==0);
6221                 free((yyvsp[0].str));
6222         }
6223 #line 6224 "util/configparser.c"
6224     break;
6225
6226   case 563: /* server_proxy_protocol_port: VAR_PROXY_PROTOCOL_PORT STRING_ARG  */
6227 #line 2926 "util/configparser.y"
6228         {
6229                 OUTYY(("P(server_proxy_protocol_port:%s)\n", (yyvsp[0].str)));
6230                 if(!cfg_strlist_insert(&cfg_parser->cfg->proxy_protocol_port, (yyvsp[0].str)))
6231                         yyerror("out of memory");
6232         }
6233 #line 6234 "util/configparser.c"
6234     break;
6235
6236   case 564: /* stub_name: VAR_NAME STRING_ARG  */
6237 #line 2933 "util/configparser.y"
6238         {
6239                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6240                 if(cfg_parser->cfg->stubs->name)
6241                         yyerror("stub name override, there must be one name "
6242                                 "for one stub-zone");
6243                 free(cfg_parser->cfg->stubs->name);
6244                 cfg_parser->cfg->stubs->name = (yyvsp[0].str);
6245         }
6246 #line 6247 "util/configparser.c"
6247     break;
6248
6249   case 565: /* stub_host: VAR_STUB_HOST STRING_ARG  */
6250 #line 2943 "util/configparser.y"
6251         {
6252                 OUTYY(("P(stub-host:%s)\n", (yyvsp[0].str)));
6253                 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[0].str)))
6254                         yyerror("out of memory");
6255         }
6256 #line 6257 "util/configparser.c"
6257     break;
6258
6259   case 566: /* stub_addr: VAR_STUB_ADDR STRING_ARG  */
6260 #line 2950 "util/configparser.y"
6261         {
6262                 OUTYY(("P(stub-addr:%s)\n", (yyvsp[0].str)));
6263                 if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[0].str)))
6264                         yyerror("out of memory");
6265         }
6266 #line 6267 "util/configparser.c"
6267     break;
6268
6269   case 567: /* stub_first: VAR_STUB_FIRST STRING_ARG  */
6270 #line 2957 "util/configparser.y"
6271         {
6272                 OUTYY(("P(stub-first:%s)\n", (yyvsp[0].str)));
6273                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6274                         yyerror("expected yes or no.");
6275                 else cfg_parser->cfg->stubs->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6276                 free((yyvsp[0].str));
6277         }
6278 #line 6279 "util/configparser.c"
6279     break;
6280
6281   case 568: /* stub_no_cache: VAR_STUB_NO_CACHE STRING_ARG  */
6282 #line 2966 "util/configparser.y"
6283         {
6284                 OUTYY(("P(stub-no-cache:%s)\n", (yyvsp[0].str)));
6285                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6286                         yyerror("expected yes or no.");
6287                 else cfg_parser->cfg->stubs->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6288                 free((yyvsp[0].str));
6289         }
6290 #line 6291 "util/configparser.c"
6291     break;
6292
6293   case 569: /* stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG  */
6294 #line 2975 "util/configparser.y"
6295         {
6296                 OUTYY(("P(stub-ssl-upstream:%s)\n", (yyvsp[0].str)));
6297                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6298                         yyerror("expected yes or no.");
6299                 else cfg_parser->cfg->stubs->ssl_upstream =
6300                         (strcmp((yyvsp[0].str), "yes")==0);
6301                 free((yyvsp[0].str));
6302         }
6303 #line 6304 "util/configparser.c"
6304     break;
6305
6306   case 570: /* stub_tcp_upstream: VAR_STUB_TCP_UPSTREAM STRING_ARG  */
6307 #line 2985 "util/configparser.y"
6308         {
6309                 OUTYY(("P(stub-tcp-upstream:%s)\n", (yyvsp[0].str)));
6310                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6311                         yyerror("expected yes or no.");
6312                 else cfg_parser->cfg->stubs->tcp_upstream =
6313                         (strcmp((yyvsp[0].str), "yes")==0);
6314                 free((yyvsp[0].str));
6315         }
6316 #line 6317 "util/configparser.c"
6317     break;
6318
6319   case 571: /* stub_prime: VAR_STUB_PRIME STRING_ARG  */
6320 #line 2995 "util/configparser.y"
6321         {
6322                 OUTYY(("P(stub-prime:%s)\n", (yyvsp[0].str)));
6323                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6324                         yyerror("expected yes or no.");
6325                 else cfg_parser->cfg->stubs->isprime =
6326                         (strcmp((yyvsp[0].str), "yes")==0);
6327                 free((yyvsp[0].str));
6328         }
6329 #line 6330 "util/configparser.c"
6330     break;
6331
6332   case 572: /* forward_name: VAR_NAME STRING_ARG  */
6333 #line 3005 "util/configparser.y"
6334         {
6335                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6336                 if(cfg_parser->cfg->forwards->name)
6337                         yyerror("forward name override, there must be one "
6338                                 "name for one forward-zone");
6339                 free(cfg_parser->cfg->forwards->name);
6340                 cfg_parser->cfg->forwards->name = (yyvsp[0].str);
6341         }
6342 #line 6343 "util/configparser.c"
6343     break;
6344
6345   case 573: /* forward_host: VAR_FORWARD_HOST STRING_ARG  */
6346 #line 3015 "util/configparser.y"
6347         {
6348                 OUTYY(("P(forward-host:%s)\n", (yyvsp[0].str)));
6349                 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[0].str)))
6350                         yyerror("out of memory");
6351         }
6352 #line 6353 "util/configparser.c"
6353     break;
6354
6355   case 574: /* forward_addr: VAR_FORWARD_ADDR STRING_ARG  */
6356 #line 3022 "util/configparser.y"
6357         {
6358                 OUTYY(("P(forward-addr:%s)\n", (yyvsp[0].str)));
6359                 if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[0].str)))
6360                         yyerror("out of memory");
6361         }
6362 #line 6363 "util/configparser.c"
6363     break;
6364
6365   case 575: /* forward_first: VAR_FORWARD_FIRST STRING_ARG  */
6366 #line 3029 "util/configparser.y"
6367         {
6368                 OUTYY(("P(forward-first:%s)\n", (yyvsp[0].str)));
6369                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6370                         yyerror("expected yes or no.");
6371                 else cfg_parser->cfg->forwards->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6372                 free((yyvsp[0].str));
6373         }
6374 #line 6375 "util/configparser.c"
6375     break;
6376
6377   case 576: /* forward_no_cache: VAR_FORWARD_NO_CACHE STRING_ARG  */
6378 #line 3038 "util/configparser.y"
6379         {
6380                 OUTYY(("P(forward-no-cache:%s)\n", (yyvsp[0].str)));
6381                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6382                         yyerror("expected yes or no.");
6383                 else cfg_parser->cfg->forwards->no_cache=(strcmp((yyvsp[0].str), "yes")==0);
6384                 free((yyvsp[0].str));
6385         }
6386 #line 6387 "util/configparser.c"
6387     break;
6388
6389   case 577: /* forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG  */
6390 #line 3047 "util/configparser.y"
6391         {
6392                 OUTYY(("P(forward-ssl-upstream:%s)\n", (yyvsp[0].str)));
6393                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6394                         yyerror("expected yes or no.");
6395                 else cfg_parser->cfg->forwards->ssl_upstream =
6396                         (strcmp((yyvsp[0].str), "yes")==0);
6397                 free((yyvsp[0].str));
6398         }
6399 #line 6400 "util/configparser.c"
6400     break;
6401
6402   case 578: /* forward_tcp_upstream: VAR_FORWARD_TCP_UPSTREAM STRING_ARG  */
6403 #line 3057 "util/configparser.y"
6404         {
6405                 OUTYY(("P(forward-tcp-upstream:%s)\n", (yyvsp[0].str)));
6406                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6407                         yyerror("expected yes or no.");
6408                 else cfg_parser->cfg->forwards->tcp_upstream =
6409                         (strcmp((yyvsp[0].str), "yes")==0);
6410                 free((yyvsp[0].str));
6411         }
6412 #line 6413 "util/configparser.c"
6413     break;
6414
6415   case 579: /* auth_name: VAR_NAME STRING_ARG  */
6416 #line 3067 "util/configparser.y"
6417         {
6418                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6419                 if(cfg_parser->cfg->auths->name)
6420                         yyerror("auth name override, there must be one name "
6421                                 "for one auth-zone");
6422                 free(cfg_parser->cfg->auths->name);
6423                 cfg_parser->cfg->auths->name = (yyvsp[0].str);
6424         }
6425 #line 6426 "util/configparser.c"
6426     break;
6427
6428   case 580: /* auth_zonefile: VAR_ZONEFILE STRING_ARG  */
6429 #line 3077 "util/configparser.y"
6430         {
6431                 OUTYY(("P(zonefile:%s)\n", (yyvsp[0].str)));
6432                 free(cfg_parser->cfg->auths->zonefile);
6433                 cfg_parser->cfg->auths->zonefile = (yyvsp[0].str);
6434         }
6435 #line 6436 "util/configparser.c"
6436     break;
6437
6438   case 581: /* auth_master: VAR_MASTER STRING_ARG  */
6439 #line 3084 "util/configparser.y"
6440         {
6441                 OUTYY(("P(master:%s)\n", (yyvsp[0].str)));
6442                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->masters, (yyvsp[0].str)))
6443                         yyerror("out of memory");
6444         }
6445 #line 6446 "util/configparser.c"
6446     break;
6447
6448   case 582: /* auth_url: VAR_URL STRING_ARG  */
6449 #line 3091 "util/configparser.y"
6450         {
6451                 OUTYY(("P(url:%s)\n", (yyvsp[0].str)));
6452                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->urls, (yyvsp[0].str)))
6453                         yyerror("out of memory");
6454         }
6455 #line 6456 "util/configparser.c"
6456     break;
6457
6458   case 583: /* auth_allow_notify: VAR_ALLOW_NOTIFY STRING_ARG  */
6459 #line 3098 "util/configparser.y"
6460         {
6461                 OUTYY(("P(allow-notify:%s)\n", (yyvsp[0].str)));
6462                 if(!cfg_strlist_insert(&cfg_parser->cfg->auths->allow_notify,
6463                         (yyvsp[0].str)))
6464                         yyerror("out of memory");
6465         }
6466 #line 6467 "util/configparser.c"
6467     break;
6468
6469   case 584: /* auth_zonemd_check: VAR_ZONEMD_CHECK STRING_ARG  */
6470 #line 3106 "util/configparser.y"
6471         {
6472                 OUTYY(("P(zonemd-check:%s)\n", (yyvsp[0].str)));
6473                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6474                         yyerror("expected yes or no.");
6475                 else cfg_parser->cfg->auths->zonemd_check =
6476                         (strcmp((yyvsp[0].str), "yes")==0);
6477                 free((yyvsp[0].str));
6478         }
6479 #line 6480 "util/configparser.c"
6480     break;
6481
6482   case 585: /* auth_zonemd_reject_absence: VAR_ZONEMD_REJECT_ABSENCE STRING_ARG  */
6483 #line 3116 "util/configparser.y"
6484         {
6485                 OUTYY(("P(zonemd-reject-absence:%s)\n", (yyvsp[0].str)));
6486                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6487                         yyerror("expected yes or no.");
6488                 else cfg_parser->cfg->auths->zonemd_reject_absence =
6489                         (strcmp((yyvsp[0].str), "yes")==0);
6490                 free((yyvsp[0].str));
6491         }
6492 #line 6493 "util/configparser.c"
6493     break;
6494
6495   case 586: /* auth_for_downstream: VAR_FOR_DOWNSTREAM STRING_ARG  */
6496 #line 3126 "util/configparser.y"
6497         {
6498                 OUTYY(("P(for-downstream:%s)\n", (yyvsp[0].str)));
6499                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6500                         yyerror("expected yes or no.");
6501                 else cfg_parser->cfg->auths->for_downstream =
6502                         (strcmp((yyvsp[0].str), "yes")==0);
6503                 free((yyvsp[0].str));
6504         }
6505 #line 6506 "util/configparser.c"
6506     break;
6507
6508   case 587: /* auth_for_upstream: VAR_FOR_UPSTREAM STRING_ARG  */
6509 #line 3136 "util/configparser.y"
6510         {
6511                 OUTYY(("P(for-upstream:%s)\n", (yyvsp[0].str)));
6512                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6513                         yyerror("expected yes or no.");
6514                 else cfg_parser->cfg->auths->for_upstream =
6515                         (strcmp((yyvsp[0].str), "yes")==0);
6516                 free((yyvsp[0].str));
6517         }
6518 #line 6519 "util/configparser.c"
6519     break;
6520
6521   case 588: /* auth_fallback_enabled: VAR_FALLBACK_ENABLED STRING_ARG  */
6522 #line 3146 "util/configparser.y"
6523         {
6524                 OUTYY(("P(fallback-enabled:%s)\n", (yyvsp[0].str)));
6525                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6526                         yyerror("expected yes or no.");
6527                 else cfg_parser->cfg->auths->fallback_enabled =
6528                         (strcmp((yyvsp[0].str), "yes")==0);
6529                 free((yyvsp[0].str));
6530         }
6531 #line 6532 "util/configparser.c"
6532     break;
6533
6534   case 589: /* view_name: VAR_NAME STRING_ARG  */
6535 #line 3156 "util/configparser.y"
6536         {
6537                 OUTYY(("P(name:%s)\n", (yyvsp[0].str)));
6538                 if(cfg_parser->cfg->views->name)
6539                         yyerror("view name override, there must be one "
6540                                 "name for one view");
6541                 free(cfg_parser->cfg->views->name);
6542                 cfg_parser->cfg->views->name = (yyvsp[0].str);
6543         }
6544 #line 6545 "util/configparser.c"
6545     break;
6546
6547   case 590: /* view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG  */
6548 #line 3166 "util/configparser.y"
6549         {
6550                 OUTYY(("P(view_local_zone:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6551                 if(strcmp((yyvsp[0].str), "static")!=0 && strcmp((yyvsp[0].str), "deny")!=0 &&
6552                    strcmp((yyvsp[0].str), "refuse")!=0 && strcmp((yyvsp[0].str), "redirect")!=0 &&
6553                    strcmp((yyvsp[0].str), "transparent")!=0 && strcmp((yyvsp[0].str), "nodefault")!=0
6554                    && strcmp((yyvsp[0].str), "typetransparent")!=0
6555                    && strcmp((yyvsp[0].str), "always_transparent")!=0
6556                    && strcmp((yyvsp[0].str), "always_refuse")!=0
6557                    && strcmp((yyvsp[0].str), "always_nxdomain")!=0
6558                    && strcmp((yyvsp[0].str), "always_nodata")!=0
6559                    && strcmp((yyvsp[0].str), "always_deny")!=0
6560                    && strcmp((yyvsp[0].str), "always_null")!=0
6561                    && strcmp((yyvsp[0].str), "noview")!=0
6562                    && strcmp((yyvsp[0].str), "inform")!=0 && strcmp((yyvsp[0].str), "inform_deny")!=0
6563                    && strcmp((yyvsp[0].str), "inform_redirect") != 0
6564                    && strcmp((yyvsp[0].str), "ipset") != 0) {
6565                         yyerror("local-zone type: expected static, deny, "
6566                                 "refuse, redirect, transparent, "
6567                                 "typetransparent, inform, inform_deny, "
6568                                 "inform_redirect, always_transparent, "
6569                                 "always_refuse, always_nxdomain, "
6570                                 "always_nodata, always_deny, always_null, "
6571                                 "noview, nodefault or ipset");
6572                         free((yyvsp[-1].str));
6573                         free((yyvsp[0].str));
6574                 } else if(strcmp((yyvsp[0].str), "nodefault")==0) {
6575                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
6576                                 local_zones_nodefault, (yyvsp[-1].str)))
6577                                 fatal_exit("out of memory adding local-zone");
6578                         free((yyvsp[0].str));
6579 #ifdef USE_IPSET
6580                 } else if(strcmp((yyvsp[0].str), "ipset")==0) {
6581                         size_t len = strlen((yyvsp[-1].str));
6582                         /* Make sure to add the trailing dot.
6583                          * These are str compared to domain names. */
6584                         if((yyvsp[-1].str)[len-1] != '.') {
6585                                 if(!((yyvsp[-1].str) = realloc((yyvsp[-1].str), len+2))) {
6586                                         fatal_exit("out of memory adding local-zone");
6587                                 }
6588                                 (yyvsp[-1].str)[len] = '.';
6589                                 (yyvsp[-1].str)[len+1] = 0;
6590                         }
6591                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
6592                                 local_zones_ipset, (yyvsp[-1].str)))
6593                                 fatal_exit("out of memory adding local-zone");
6594                         free((yyvsp[0].str));
6595 #endif
6596                 } else {
6597                         if(!cfg_str2list_insert(
6598                                 &cfg_parser->cfg->views->local_zones,
6599                                 (yyvsp[-1].str), (yyvsp[0].str)))
6600                                 fatal_exit("out of memory adding local-zone");
6601                 }
6602         }
6603 #line 6604 "util/configparser.c"
6604     break;
6605
6606   case 591: /* view_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG  */
6607 #line 3222 "util/configparser.y"
6608         {
6609                 OUTYY(("P(view_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
6610                 validate_respip_action((yyvsp[0].str));
6611                 if(!cfg_str2list_insert(
6612                         &cfg_parser->cfg->views->respip_actions, (yyvsp[-1].str), (yyvsp[0].str)))
6613                         fatal_exit("out of memory adding per-view "
6614                                 "response-ip action");
6615         }
6616 #line 6617 "util/configparser.c"
6617     break;
6618
6619   case 592: /* view_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG  */
6620 #line 3232 "util/configparser.y"
6621         {
6622                 OUTYY(("P(view_response_ip_data:%s)\n", (yyvsp[-1].str)));
6623                 if(!cfg_str2list_insert(
6624                         &cfg_parser->cfg->views->respip_data, (yyvsp[-1].str), (yyvsp[0].str)))
6625                         fatal_exit("out of memory adding response-ip-data");
6626         }
6627 #line 6628 "util/configparser.c"
6628     break;
6629
6630   case 593: /* view_local_data: VAR_LOCAL_DATA STRING_ARG  */
6631 #line 3240 "util/configparser.y"
6632         {
6633                 OUTYY(("P(view_local_data:%s)\n", (yyvsp[0].str)));
6634                 if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, (yyvsp[0].str))) {
6635                         fatal_exit("out of memory adding local-data");
6636                 }
6637         }
6638 #line 6639 "util/configparser.c"
6639     break;
6640
6641   case 594: /* view_local_data_ptr: VAR_LOCAL_DATA_PTR STRING_ARG  */
6642 #line 3248 "util/configparser.y"
6643         {
6644                 char* ptr;
6645                 OUTYY(("P(view_local_data_ptr:%s)\n", (yyvsp[0].str)));
6646                 ptr = cfg_ptr_reverse((yyvsp[0].str));
6647                 free((yyvsp[0].str));
6648                 if(ptr) {
6649                         if(!cfg_strlist_insert(&cfg_parser->cfg->views->
6650                                 local_data, ptr))
6651                                 fatal_exit("out of memory adding local-data");
6652                 } else {
6653                         yyerror("local-data-ptr could not be reversed");
6654                 }
6655         }
6656 #line 6657 "util/configparser.c"
6657     break;
6658
6659   case 595: /* view_first: VAR_VIEW_FIRST STRING_ARG  */
6660 #line 3263 "util/configparser.y"
6661         {
6662                 OUTYY(("P(view-first:%s)\n", (yyvsp[0].str)));
6663                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6664                         yyerror("expected yes or no.");
6665                 else cfg_parser->cfg->views->isfirst=(strcmp((yyvsp[0].str), "yes")==0);
6666                 free((yyvsp[0].str));
6667         }
6668 #line 6669 "util/configparser.c"
6669     break;
6670
6671   case 596: /* rcstart: VAR_REMOTE_CONTROL  */
6672 #line 3272 "util/configparser.y"
6673         {
6674                 OUTYY(("\nP(remote-control:)\n"));
6675                 cfg_parser->started_toplevel = 1;
6676         }
6677 #line 6678 "util/configparser.c"
6678     break;
6679
6680   case 607: /* rc_control_enable: VAR_CONTROL_ENABLE STRING_ARG  */
6681 #line 3284 "util/configparser.y"
6682         {
6683                 OUTYY(("P(control_enable:%s)\n", (yyvsp[0].str)));
6684                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6685                         yyerror("expected yes or no.");
6686                 else cfg_parser->cfg->remote_control_enable =
6687                         (strcmp((yyvsp[0].str), "yes")==0);
6688                 free((yyvsp[0].str));
6689         }
6690 #line 6691 "util/configparser.c"
6691     break;
6692
6693   case 608: /* rc_control_port: VAR_CONTROL_PORT STRING_ARG  */
6694 #line 3294 "util/configparser.y"
6695         {
6696                 OUTYY(("P(control_port:%s)\n", (yyvsp[0].str)));
6697                 if(atoi((yyvsp[0].str)) == 0)
6698                         yyerror("control port number expected");
6699                 else cfg_parser->cfg->control_port = atoi((yyvsp[0].str));
6700                 free((yyvsp[0].str));
6701         }
6702 #line 6703 "util/configparser.c"
6703     break;
6704
6705   case 609: /* rc_control_interface: VAR_CONTROL_INTERFACE STRING_ARG  */
6706 #line 3303 "util/configparser.y"
6707         {
6708                 OUTYY(("P(control_interface:%s)\n", (yyvsp[0].str)));
6709                 if(!cfg_strlist_append(&cfg_parser->cfg->control_ifs, (yyvsp[0].str)))
6710                         yyerror("out of memory");
6711         }
6712 #line 6713 "util/configparser.c"
6713     break;
6714
6715   case 610: /* rc_control_use_cert: VAR_CONTROL_USE_CERT STRING_ARG  */
6716 #line 3310 "util/configparser.y"
6717         {
6718                 OUTYY(("P(control_use_cert:%s)\n", (yyvsp[0].str)));
6719                 cfg_parser->cfg->control_use_cert = (strcmp((yyvsp[0].str), "yes")==0);
6720                 free((yyvsp[0].str));
6721         }
6722 #line 6723 "util/configparser.c"
6723     break;
6724
6725   case 611: /* rc_server_key_file: VAR_SERVER_KEY_FILE STRING_ARG  */
6726 #line 3317 "util/configparser.y"
6727         {
6728                 OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[0].str)));
6729                 free(cfg_parser->cfg->server_key_file);
6730                 cfg_parser->cfg->server_key_file = (yyvsp[0].str);
6731         }
6732 #line 6733 "util/configparser.c"
6733     break;
6734
6735   case 612: /* rc_server_cert_file: VAR_SERVER_CERT_FILE STRING_ARG  */
6736 #line 3324 "util/configparser.y"
6737         {
6738                 OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[0].str)));
6739                 free(cfg_parser->cfg->server_cert_file);
6740                 cfg_parser->cfg->server_cert_file = (yyvsp[0].str);
6741         }
6742 #line 6743 "util/configparser.c"
6743     break;
6744
6745   case 613: /* rc_control_key_file: VAR_CONTROL_KEY_FILE STRING_ARG  */
6746 #line 3331 "util/configparser.y"
6747         {
6748                 OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[0].str)));
6749                 free(cfg_parser->cfg->control_key_file);
6750                 cfg_parser->cfg->control_key_file = (yyvsp[0].str);
6751         }
6752 #line 6753 "util/configparser.c"
6753     break;
6754
6755   case 614: /* rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG  */
6756 #line 3338 "util/configparser.y"
6757         {
6758                 OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[0].str)));
6759                 free(cfg_parser->cfg->control_cert_file);
6760                 cfg_parser->cfg->control_cert_file = (yyvsp[0].str);
6761         }
6762 #line 6763 "util/configparser.c"
6763     break;
6764
6765   case 615: /* dtstart: VAR_DNSTAP  */
6766 #line 3345 "util/configparser.y"
6767         {
6768                 OUTYY(("\nP(dnstap:)\n"));
6769                 cfg_parser->started_toplevel = 1;
6770         }
6771 #line 6772 "util/configparser.c"
6772     break;
6773
6774   case 637: /* dt_dnstap_enable: VAR_DNSTAP_ENABLE STRING_ARG  */
6775 #line 3366 "util/configparser.y"
6776         {
6777                 OUTYY(("P(dt_dnstap_enable:%s)\n", (yyvsp[0].str)));
6778                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6779                         yyerror("expected yes or no.");
6780                 else cfg_parser->cfg->dnstap = (strcmp((yyvsp[0].str), "yes")==0);
6781                 free((yyvsp[0].str));
6782         }
6783 #line 6784 "util/configparser.c"
6784     break;
6785
6786   case 638: /* dt_dnstap_bidirectional: VAR_DNSTAP_BIDIRECTIONAL STRING_ARG  */
6787 #line 3375 "util/configparser.y"
6788         {
6789                 OUTYY(("P(dt_dnstap_bidirectional:%s)\n", (yyvsp[0].str)));
6790                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6791                         yyerror("expected yes or no.");
6792                 else cfg_parser->cfg->dnstap_bidirectional =
6793                         (strcmp((yyvsp[0].str), "yes")==0);
6794                 free((yyvsp[0].str));
6795         }
6796 #line 6797 "util/configparser.c"
6797     break;
6798
6799   case 639: /* dt_dnstap_socket_path: VAR_DNSTAP_SOCKET_PATH STRING_ARG  */
6800 #line 3385 "util/configparser.y"
6801         {
6802                 OUTYY(("P(dt_dnstap_socket_path:%s)\n", (yyvsp[0].str)));
6803                 free(cfg_parser->cfg->dnstap_socket_path);
6804                 cfg_parser->cfg->dnstap_socket_path = (yyvsp[0].str);
6805         }
6806 #line 6807 "util/configparser.c"
6807     break;
6808
6809   case 640: /* dt_dnstap_ip: VAR_DNSTAP_IP STRING_ARG  */
6810 #line 3392 "util/configparser.y"
6811         {
6812                 OUTYY(("P(dt_dnstap_ip:%s)\n", (yyvsp[0].str)));
6813                 free(cfg_parser->cfg->dnstap_ip);
6814                 cfg_parser->cfg->dnstap_ip = (yyvsp[0].str);
6815         }
6816 #line 6817 "util/configparser.c"
6817     break;
6818
6819   case 641: /* dt_dnstap_tls: VAR_DNSTAP_TLS STRING_ARG  */
6820 #line 3399 "util/configparser.y"
6821         {
6822                 OUTYY(("P(dt_dnstap_tls:%s)\n", (yyvsp[0].str)));
6823                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6824                         yyerror("expected yes or no.");
6825                 else cfg_parser->cfg->dnstap_tls = (strcmp((yyvsp[0].str), "yes")==0);
6826                 free((yyvsp[0].str));
6827         }
6828 #line 6829 "util/configparser.c"
6829     break;
6830
6831   case 642: /* dt_dnstap_tls_server_name: VAR_DNSTAP_TLS_SERVER_NAME STRING_ARG  */
6832 #line 3408 "util/configparser.y"
6833         {
6834                 OUTYY(("P(dt_dnstap_tls_server_name:%s)\n", (yyvsp[0].str)));
6835                 free(cfg_parser->cfg->dnstap_tls_server_name);
6836                 cfg_parser->cfg->dnstap_tls_server_name = (yyvsp[0].str);
6837         }
6838 #line 6839 "util/configparser.c"
6839     break;
6840
6841   case 643: /* dt_dnstap_tls_cert_bundle: VAR_DNSTAP_TLS_CERT_BUNDLE STRING_ARG  */
6842 #line 3415 "util/configparser.y"
6843         {
6844                 OUTYY(("P(dt_dnstap_tls_cert_bundle:%s)\n", (yyvsp[0].str)));
6845                 free(cfg_parser->cfg->dnstap_tls_cert_bundle);
6846                 cfg_parser->cfg->dnstap_tls_cert_bundle = (yyvsp[0].str);
6847         }
6848 #line 6849 "util/configparser.c"
6849     break;
6850
6851   case 644: /* dt_dnstap_tls_client_key_file: VAR_DNSTAP_TLS_CLIENT_KEY_FILE STRING_ARG  */
6852 #line 3422 "util/configparser.y"
6853         {
6854                 OUTYY(("P(dt_dnstap_tls_client_key_file:%s)\n", (yyvsp[0].str)));
6855                 free(cfg_parser->cfg->dnstap_tls_client_key_file);
6856                 cfg_parser->cfg->dnstap_tls_client_key_file = (yyvsp[0].str);
6857         }
6858 #line 6859 "util/configparser.c"
6859     break;
6860
6861   case 645: /* dt_dnstap_tls_client_cert_file: VAR_DNSTAP_TLS_CLIENT_CERT_FILE STRING_ARG  */
6862 #line 3429 "util/configparser.y"
6863         {
6864                 OUTYY(("P(dt_dnstap_tls_client_cert_file:%s)\n", (yyvsp[0].str)));
6865                 free(cfg_parser->cfg->dnstap_tls_client_cert_file);
6866                 cfg_parser->cfg->dnstap_tls_client_cert_file = (yyvsp[0].str);
6867         }
6868 #line 6869 "util/configparser.c"
6869     break;
6870
6871   case 646: /* dt_dnstap_send_identity: VAR_DNSTAP_SEND_IDENTITY STRING_ARG  */
6872 #line 3436 "util/configparser.y"
6873         {
6874                 OUTYY(("P(dt_dnstap_send_identity:%s)\n", (yyvsp[0].str)));
6875                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6876                         yyerror("expected yes or no.");
6877                 else cfg_parser->cfg->dnstap_send_identity = (strcmp((yyvsp[0].str), "yes")==0);
6878                 free((yyvsp[0].str));
6879         }
6880 #line 6881 "util/configparser.c"
6881     break;
6882
6883   case 647: /* dt_dnstap_send_version: VAR_DNSTAP_SEND_VERSION STRING_ARG  */
6884 #line 3445 "util/configparser.y"
6885         {
6886                 OUTYY(("P(dt_dnstap_send_version:%s)\n", (yyvsp[0].str)));
6887                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6888                         yyerror("expected yes or no.");
6889                 else cfg_parser->cfg->dnstap_send_version = (strcmp((yyvsp[0].str), "yes")==0);
6890                 free((yyvsp[0].str));
6891         }
6892 #line 6893 "util/configparser.c"
6893     break;
6894
6895   case 648: /* dt_dnstap_identity: VAR_DNSTAP_IDENTITY STRING_ARG  */
6896 #line 3454 "util/configparser.y"
6897         {
6898                 OUTYY(("P(dt_dnstap_identity:%s)\n", (yyvsp[0].str)));
6899                 free(cfg_parser->cfg->dnstap_identity);
6900                 cfg_parser->cfg->dnstap_identity = (yyvsp[0].str);
6901         }
6902 #line 6903 "util/configparser.c"
6903     break;
6904
6905   case 649: /* dt_dnstap_version: VAR_DNSTAP_VERSION STRING_ARG  */
6906 #line 3461 "util/configparser.y"
6907         {
6908                 OUTYY(("P(dt_dnstap_version:%s)\n", (yyvsp[0].str)));
6909                 free(cfg_parser->cfg->dnstap_version);
6910                 cfg_parser->cfg->dnstap_version = (yyvsp[0].str);
6911         }
6912 #line 6913 "util/configparser.c"
6913     break;
6914
6915   case 650: /* dt_dnstap_log_resolver_query_messages: VAR_DNSTAP_LOG_RESOLVER_QUERY_MESSAGES STRING_ARG  */
6916 #line 3468 "util/configparser.y"
6917         {
6918                 OUTYY(("P(dt_dnstap_log_resolver_query_messages:%s)\n", (yyvsp[0].str)));
6919                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6920                         yyerror("expected yes or no.");
6921                 else cfg_parser->cfg->dnstap_log_resolver_query_messages =
6922                         (strcmp((yyvsp[0].str), "yes")==0);
6923                 free((yyvsp[0].str));
6924         }
6925 #line 6926 "util/configparser.c"
6926     break;
6927
6928   case 651: /* dt_dnstap_log_resolver_response_messages: VAR_DNSTAP_LOG_RESOLVER_RESPONSE_MESSAGES STRING_ARG  */
6929 #line 3478 "util/configparser.y"
6930         {
6931                 OUTYY(("P(dt_dnstap_log_resolver_response_messages:%s)\n", (yyvsp[0].str)));
6932                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6933                         yyerror("expected yes or no.");
6934                 else cfg_parser->cfg->dnstap_log_resolver_response_messages =
6935                         (strcmp((yyvsp[0].str), "yes")==0);
6936                 free((yyvsp[0].str));
6937         }
6938 #line 6939 "util/configparser.c"
6939     break;
6940
6941   case 652: /* dt_dnstap_log_client_query_messages: VAR_DNSTAP_LOG_CLIENT_QUERY_MESSAGES STRING_ARG  */
6942 #line 3488 "util/configparser.y"
6943         {
6944                 OUTYY(("P(dt_dnstap_log_client_query_messages:%s)\n", (yyvsp[0].str)));
6945                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6946                         yyerror("expected yes or no.");
6947                 else cfg_parser->cfg->dnstap_log_client_query_messages =
6948                         (strcmp((yyvsp[0].str), "yes")==0);
6949                 free((yyvsp[0].str));
6950         }
6951 #line 6952 "util/configparser.c"
6952     break;
6953
6954   case 653: /* dt_dnstap_log_client_response_messages: VAR_DNSTAP_LOG_CLIENT_RESPONSE_MESSAGES STRING_ARG  */
6955 #line 3498 "util/configparser.y"
6956         {
6957                 OUTYY(("P(dt_dnstap_log_client_response_messages:%s)\n", (yyvsp[0].str)));
6958                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6959                         yyerror("expected yes or no.");
6960                 else cfg_parser->cfg->dnstap_log_client_response_messages =
6961                         (strcmp((yyvsp[0].str), "yes")==0);
6962                 free((yyvsp[0].str));
6963         }
6964 #line 6965 "util/configparser.c"
6965     break;
6966
6967   case 654: /* dt_dnstap_log_forwarder_query_messages: VAR_DNSTAP_LOG_FORWARDER_QUERY_MESSAGES STRING_ARG  */
6968 #line 3508 "util/configparser.y"
6969         {
6970                 OUTYY(("P(dt_dnstap_log_forwarder_query_messages:%s)\n", (yyvsp[0].str)));
6971                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6972                         yyerror("expected yes or no.");
6973                 else cfg_parser->cfg->dnstap_log_forwarder_query_messages =
6974                         (strcmp((yyvsp[0].str), "yes")==0);
6975                 free((yyvsp[0].str));
6976         }
6977 #line 6978 "util/configparser.c"
6978     break;
6979
6980   case 655: /* dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MESSAGES STRING_ARG  */
6981 #line 3518 "util/configparser.y"
6982         {
6983                 OUTYY(("P(dt_dnstap_log_forwarder_response_messages:%s)\n", (yyvsp[0].str)));
6984                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
6985                         yyerror("expected yes or no.");
6986                 else cfg_parser->cfg->dnstap_log_forwarder_response_messages =
6987                         (strcmp((yyvsp[0].str), "yes")==0);
6988                 free((yyvsp[0].str));
6989         }
6990 #line 6991 "util/configparser.c"
6991     break;
6992
6993   case 656: /* pythonstart: VAR_PYTHON  */
6994 #line 3528 "util/configparser.y"
6995         {
6996                 OUTYY(("\nP(python:)\n"));
6997                 cfg_parser->started_toplevel = 1;
6998         }
6999 #line 7000 "util/configparser.c"
7000     break;
7001
7002   case 660: /* py_script: VAR_PYTHON_SCRIPT STRING_ARG  */
7003 #line 3538 "util/configparser.y"
7004         {
7005                 OUTYY(("P(python-script:%s)\n", (yyvsp[0].str)));
7006                 if(!cfg_strlist_append_ex(&cfg_parser->cfg->python_script, (yyvsp[0].str)))
7007                         yyerror("out of memory");
7008         }
7009 #line 7010 "util/configparser.c"
7010     break;
7011
7012   case 661: /* dynlibstart: VAR_DYNLIB  */
7013 #line 3545 "util/configparser.y"
7014         {
7015                 OUTYY(("\nP(dynlib:)\n"));
7016                 cfg_parser->started_toplevel = 1;
7017         }
7018 #line 7019 "util/configparser.c"
7019     break;
7020
7021   case 665: /* dl_file: VAR_DYNLIB_FILE STRING_ARG  */
7022 #line 3555 "util/configparser.y"
7023         {
7024                 OUTYY(("P(dynlib-file:%s)\n", (yyvsp[0].str)));
7025                 if(!cfg_strlist_append_ex(&cfg_parser->cfg->dynlib_file, (yyvsp[0].str)))
7026                         yyerror("out of memory");
7027         }
7028 #line 7029 "util/configparser.c"
7029     break;
7030
7031   case 666: /* server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG  */
7032 #line 3562 "util/configparser.y"
7033         {
7034                 OUTYY(("P(disable_dnssec_lame_check:%s)\n", (yyvsp[0].str)));
7035                 if (strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7036                         yyerror("expected yes or no.");
7037                 else cfg_parser->cfg->disable_dnssec_lame_check =
7038                         (strcmp((yyvsp[0].str), "yes")==0);
7039                 free((yyvsp[0].str));
7040         }
7041 #line 7042 "util/configparser.c"
7042     break;
7043
7044   case 667: /* server_log_identity: VAR_LOG_IDENTITY STRING_ARG  */
7045 #line 3572 "util/configparser.y"
7046         {
7047                 OUTYY(("P(server_log_identity:%s)\n", (yyvsp[0].str)));
7048                 free(cfg_parser->cfg->log_identity);
7049                 cfg_parser->cfg->log_identity = (yyvsp[0].str);
7050         }
7051 #line 7052 "util/configparser.c"
7052     break;
7053
7054   case 668: /* server_response_ip: VAR_RESPONSE_IP STRING_ARG STRING_ARG  */
7055 #line 3579 "util/configparser.y"
7056         {
7057                 OUTYY(("P(server_response_ip:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7058                 validate_respip_action((yyvsp[0].str));
7059                 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_actions,
7060                         (yyvsp[-1].str), (yyvsp[0].str)))
7061                         fatal_exit("out of memory adding response-ip");
7062         }
7063 #line 7064 "util/configparser.c"
7064     break;
7065
7066   case 669: /* server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG  */
7067 #line 3588 "util/configparser.y"
7068         {
7069                 OUTYY(("P(server_response_ip_data:%s)\n", (yyvsp[-1].str)));
7070                 if(!cfg_str2list_insert(&cfg_parser->cfg->respip_data,
7071                         (yyvsp[-1].str), (yyvsp[0].str)))
7072                         fatal_exit("out of memory adding response-ip-data");
7073         }
7074 #line 7075 "util/configparser.c"
7075     break;
7076
7077   case 670: /* dnscstart: VAR_DNSCRYPT  */
7078 #line 3596 "util/configparser.y"
7079         {
7080                 OUTYY(("\nP(dnscrypt:)\n"));
7081                 cfg_parser->started_toplevel = 1;
7082         }
7083 #line 7084 "util/configparser.c"
7084     break;
7085
7086   case 683: /* dnsc_dnscrypt_enable: VAR_DNSCRYPT_ENABLE STRING_ARG  */
7087 #line 3613 "util/configparser.y"
7088         {
7089                 OUTYY(("P(dnsc_dnscrypt_enable:%s)\n", (yyvsp[0].str)));
7090                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7091                         yyerror("expected yes or no.");
7092                 else cfg_parser->cfg->dnscrypt = (strcmp((yyvsp[0].str), "yes")==0);
7093                 free((yyvsp[0].str));
7094         }
7095 #line 7096 "util/configparser.c"
7096     break;
7097
7098   case 684: /* dnsc_dnscrypt_port: VAR_DNSCRYPT_PORT STRING_ARG  */
7099 #line 3622 "util/configparser.y"
7100         {
7101                 OUTYY(("P(dnsc_dnscrypt_port:%s)\n", (yyvsp[0].str)));
7102                 if(atoi((yyvsp[0].str)) == 0)
7103                         yyerror("port number expected");
7104                 else cfg_parser->cfg->dnscrypt_port = atoi((yyvsp[0].str));
7105                 free((yyvsp[0].str));
7106         }
7107 #line 7108 "util/configparser.c"
7108     break;
7109
7110   case 685: /* dnsc_dnscrypt_provider: VAR_DNSCRYPT_PROVIDER STRING_ARG  */
7111 #line 3631 "util/configparser.y"
7112         {
7113                 OUTYY(("P(dnsc_dnscrypt_provider:%s)\n", (yyvsp[0].str)));
7114                 free(cfg_parser->cfg->dnscrypt_provider);
7115                 cfg_parser->cfg->dnscrypt_provider = (yyvsp[0].str);
7116         }
7117 #line 7118 "util/configparser.c"
7118     break;
7119
7120   case 686: /* dnsc_dnscrypt_provider_cert: VAR_DNSCRYPT_PROVIDER_CERT STRING_ARG  */
7121 #line 3638 "util/configparser.y"
7122         {
7123                 OUTYY(("P(dnsc_dnscrypt_provider_cert:%s)\n", (yyvsp[0].str)));
7124                 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7125                         log_warn("dnscrypt-provider-cert %s is a duplicate", (yyvsp[0].str));
7126                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert, (yyvsp[0].str)))
7127                         fatal_exit("out of memory adding dnscrypt-provider-cert");
7128         }
7129 #line 7130 "util/configparser.c"
7130     break;
7131
7132   case 687: /* dnsc_dnscrypt_provider_cert_rotated: VAR_DNSCRYPT_PROVIDER_CERT_ROTATED STRING_ARG  */
7133 #line 3647 "util/configparser.y"
7134         {
7135                 OUTYY(("P(dnsc_dnscrypt_provider_cert_rotated:%s)\n", (yyvsp[0].str)));
7136                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_provider_cert_rotated, (yyvsp[0].str)))
7137                         fatal_exit("out of memory adding dnscrypt-provider-cert-rotated");
7138         }
7139 #line 7140 "util/configparser.c"
7140     break;
7141
7142   case 688: /* dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG  */
7143 #line 3654 "util/configparser.y"
7144         {
7145                 OUTYY(("P(dnsc_dnscrypt_secret_key:%s)\n", (yyvsp[0].str)));
7146                 if(cfg_strlist_find(cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7147                         log_warn("dnscrypt-secret-key: %s is a duplicate", (yyvsp[0].str));
7148                 if(!cfg_strlist_insert(&cfg_parser->cfg->dnscrypt_secret_key, (yyvsp[0].str)))
7149                         fatal_exit("out of memory adding dnscrypt-secret-key");
7150         }
7151 #line 7152 "util/configparser.c"
7152     break;
7153
7154   case 689: /* dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG  */
7155 #line 3663 "util/configparser.y"
7156   {
7157         OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", (yyvsp[0].str)));
7158         if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
7159                 yyerror("memory size expected");
7160         free((yyvsp[0].str));
7161   }
7162 #line 7163 "util/configparser.c"
7163     break;
7164
7165   case 690: /* dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG  */
7166 #line 3671 "util/configparser.y"
7167   {
7168         OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", (yyvsp[0].str)));
7169         if(atoi((yyvsp[0].str)) == 0) {
7170                 yyerror("number expected");
7171         } else {
7172                 cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi((yyvsp[0].str));
7173                 if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
7174                         yyerror("must be a power of 2");
7175         }
7176         free((yyvsp[0].str));
7177   }
7178 #line 7179 "util/configparser.c"
7179     break;
7180
7181   case 691: /* dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG  */
7182 #line 3684 "util/configparser.y"
7183   {
7184         OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", (yyvsp[0].str)));
7185         if(!cfg_parse_memsize((yyvsp[0].str), &cfg_parser->cfg->dnscrypt_nonce_cache_size))
7186                 yyerror("memory size expected");
7187         free((yyvsp[0].str));
7188   }
7189 #line 7190 "util/configparser.c"
7190     break;
7191
7192   case 692: /* dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG  */
7193 #line 3692 "util/configparser.y"
7194   {
7195         OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", (yyvsp[0].str)));
7196         if(atoi((yyvsp[0].str)) == 0) {
7197                 yyerror("number expected");
7198         } else {
7199                 cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi((yyvsp[0].str));
7200                 if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
7201                         yyerror("must be a power of 2");
7202         }
7203         free((yyvsp[0].str));
7204   }
7205 #line 7206 "util/configparser.c"
7206     break;
7207
7208   case 693: /* cachedbstart: VAR_CACHEDB  */
7209 #line 3705 "util/configparser.y"
7210         {
7211                 OUTYY(("\nP(cachedb:)\n"));
7212                 cfg_parser->started_toplevel = 1;
7213         }
7214 #line 7215 "util/configparser.c"
7215     break;
7216
7217   case 706: /* cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG  */
7218 #line 3718 "util/configparser.y"
7219         {
7220         #ifdef USE_CACHEDB
7221                 OUTYY(("P(backend:%s)\n", (yyvsp[0].str)));
7222                 free(cfg_parser->cfg->cachedb_backend);
7223                 cfg_parser->cfg->cachedb_backend = (yyvsp[0].str);
7224         #else
7225                 OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7226                 free((yyvsp[0].str));
7227         #endif
7228         }
7229 #line 7230 "util/configparser.c"
7230     break;
7231
7232   case 707: /* cachedb_secret_seed: VAR_CACHEDB_SECRETSEED STRING_ARG  */
7233 #line 3730 "util/configparser.y"
7234         {
7235         #ifdef USE_CACHEDB
7236                 OUTYY(("P(secret-seed:%s)\n", (yyvsp[0].str)));
7237                 free(cfg_parser->cfg->cachedb_secret);
7238                 cfg_parser->cfg->cachedb_secret = (yyvsp[0].str);
7239         #else
7240                 OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7241                 free((yyvsp[0].str));
7242         #endif
7243         }
7244 #line 7245 "util/configparser.c"
7245     break;
7246
7247   case 708: /* cachedb_no_store: VAR_CACHEDB_NO_STORE STRING_ARG  */
7248 #line 3742 "util/configparser.y"
7249         {
7250         #ifdef USE_CACHEDB
7251                 OUTYY(("P(cachedb_no_store:%s)\n", (yyvsp[0].str)));
7252                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7253                         yyerror("expected yes or no.");
7254                 else cfg_parser->cfg->cachedb_no_store = (strcmp((yyvsp[0].str), "yes")==0);
7255         #else
7256                 OUTYY(("P(Compiled without cachedb, ignoring)\n"));
7257         #endif
7258                 free((yyvsp[0].str));
7259         }
7260 #line 7261 "util/configparser.c"
7261     break;
7262
7263   case 709: /* redis_server_host: VAR_CACHEDB_REDISHOST STRING_ARG  */
7264 #line 3755 "util/configparser.y"
7265         {
7266         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7267                 OUTYY(("P(redis_server_host:%s)\n", (yyvsp[0].str)));
7268                 free(cfg_parser->cfg->redis_server_host);
7269                 cfg_parser->cfg->redis_server_host = (yyvsp[0].str);
7270         #else
7271                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7272                 free((yyvsp[0].str));
7273         #endif
7274         }
7275 #line 7276 "util/configparser.c"
7276     break;
7277
7278   case 710: /* redis_server_port: VAR_CACHEDB_REDISPORT STRING_ARG  */
7279 #line 3767 "util/configparser.y"
7280         {
7281         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7282                 int port;
7283                 OUTYY(("P(redis_server_port:%s)\n", (yyvsp[0].str)));
7284                 port = atoi((yyvsp[0].str));
7285                 if(port == 0 || port < 0 || port > 65535)
7286                         yyerror("valid redis server port number expected");
7287                 else cfg_parser->cfg->redis_server_port = port;
7288         #else
7289                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7290         #endif
7291                 free((yyvsp[0].str));
7292         }
7293 #line 7294 "util/configparser.c"
7294     break;
7295
7296   case 711: /* redis_server_path: VAR_CACHEDB_REDISPATH STRING_ARG  */
7297 #line 3782 "util/configparser.y"
7298         {
7299         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7300                 OUTYY(("P(redis_server_path:%s)\n", (yyvsp[0].str)));
7301                 free(cfg_parser->cfg->redis_server_path);
7302                 cfg_parser->cfg->redis_server_path = (yyvsp[0].str);
7303         #else
7304                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7305                 free((yyvsp[0].str));
7306         #endif
7307         }
7308 #line 7309 "util/configparser.c"
7309     break;
7310
7311   case 712: /* redis_server_password: VAR_CACHEDB_REDISPASSWORD STRING_ARG  */
7312 #line 3794 "util/configparser.y"
7313         {
7314         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7315                 OUTYY(("P(redis_server_password:%s)\n", (yyvsp[0].str)));
7316                 free(cfg_parser->cfg->redis_server_password);
7317                 cfg_parser->cfg->redis_server_password = (yyvsp[0].str);
7318         #else
7319                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7320                 free((yyvsp[0].str));
7321         #endif
7322         }
7323 #line 7324 "util/configparser.c"
7324     break;
7325
7326   case 713: /* redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG  */
7327 #line 3806 "util/configparser.y"
7328         {
7329         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7330                 OUTYY(("P(redis_timeout:%s)\n", (yyvsp[0].str)));
7331                 if(atoi((yyvsp[0].str)) == 0)
7332                         yyerror("redis timeout value expected");
7333                 else cfg_parser->cfg->redis_timeout = atoi((yyvsp[0].str));
7334         #else
7335                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7336         #endif
7337                 free((yyvsp[0].str));
7338         }
7339 #line 7340 "util/configparser.c"
7340     break;
7341
7342   case 714: /* redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG  */
7343 #line 3819 "util/configparser.y"
7344         {
7345         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7346                 OUTYY(("P(redis_expire_records:%s)\n", (yyvsp[0].str)));
7347                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7348                         yyerror("expected yes or no.");
7349                 else cfg_parser->cfg->redis_expire_records = (strcmp((yyvsp[0].str), "yes")==0);
7350         #else
7351                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7352         #endif
7353                 free((yyvsp[0].str));
7354         }
7355 #line 7356 "util/configparser.c"
7356     break;
7357
7358   case 715: /* redis_logical_db: VAR_CACHEDB_REDISLOGICALDB STRING_ARG  */
7359 #line 3832 "util/configparser.y"
7360         {
7361         #if defined(USE_CACHEDB) && defined(USE_REDIS)
7362                 int db;
7363                 OUTYY(("P(redis_logical_db:%s)\n", (yyvsp[0].str)));
7364                 db = atoi((yyvsp[0].str));
7365                 if((db == 0 && strcmp((yyvsp[0].str), "0") != 0) || db < 0)
7366                         yyerror("valid redis logical database index expected");
7367                 else cfg_parser->cfg->redis_logical_db = db;
7368         #else
7369                 OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
7370         #endif
7371                 free((yyvsp[0].str));
7372         }
7373 #line 7374 "util/configparser.c"
7374     break;
7375
7376   case 716: /* server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG  */
7377 #line 3847 "util/configparser.y"
7378         {
7379                 OUTYY(("P(server_tcp_connection_limit:%s %s)\n", (yyvsp[-1].str), (yyvsp[0].str)));
7380                 if (atoi((yyvsp[0].str)) < 0)
7381                         yyerror("positive number expected");
7382                 else {
7383                         if(!cfg_str2list_insert(&cfg_parser->cfg->tcp_connection_limits, (yyvsp[-1].str), (yyvsp[0].str)))
7384                                 fatal_exit("out of memory adding tcp connection limit");
7385                 }
7386         }
7387 #line 7388 "util/configparser.c"
7388     break;
7389
7390   case 717: /* server_answer_cookie: VAR_ANSWER_COOKIE STRING_ARG  */
7391 #line 3858 "util/configparser.y"
7392         {
7393                 OUTYY(("P(server_answer_cookie:%s)\n", (yyvsp[0].str)));
7394                 if(strcmp((yyvsp[0].str), "yes") != 0 && strcmp((yyvsp[0].str), "no") != 0)
7395                         yyerror("expected yes or no.");
7396                 else cfg_parser->cfg->do_answer_cookie = (strcmp((yyvsp[0].str), "yes")==0);
7397                 free((yyvsp[0].str));
7398         }
7399 #line 7400 "util/configparser.c"
7400     break;
7401
7402   case 718: /* server_cookie_secret: VAR_COOKIE_SECRET STRING_ARG  */
7403 #line 3867 "util/configparser.y"
7404         {
7405                 uint8_t secret[32];
7406                 size_t secret_len = sizeof(secret);
7407
7408                 OUTYY(("P(server_cookie_secret:%s)\n", (yyvsp[0].str)));
7409                 if(sldns_str2wire_hex_buf((yyvsp[0].str), secret, &secret_len)
7410                 || (secret_len != 16))
7411                         yyerror("expected 128 bit hex string");
7412                 else {
7413                         cfg_parser->cfg->cookie_secret_len = secret_len;
7414                         memcpy(cfg_parser->cfg->cookie_secret, secret, sizeof(secret));
7415                 }
7416                 free((yyvsp[0].str));
7417         }
7418 #line 7419 "util/configparser.c"
7419     break;
7420
7421   case 719: /* ipsetstart: VAR_IPSET  */
7422 #line 3883 "util/configparser.y"
7423                 {
7424                         OUTYY(("\nP(ipset:)\n"));
7425                         cfg_parser->started_toplevel = 1;
7426                 }
7427 #line 7428 "util/configparser.c"
7428     break;
7429
7430   case 724: /* ipset_name_v4: VAR_IPSET_NAME_V4 STRING_ARG  */
7431 #line 3893 "util/configparser.y"
7432                 {
7433                 #ifdef USE_IPSET
7434                         OUTYY(("P(name-v4:%s)\n", (yyvsp[0].str)));
7435                         if(cfg_parser->cfg->ipset_name_v4)
7436                                 yyerror("ipset name v4 override, there must be one "
7437                                         "name for ip v4");
7438                         free(cfg_parser->cfg->ipset_name_v4);
7439                         cfg_parser->cfg->ipset_name_v4 = (yyvsp[0].str);
7440                 #else
7441                         OUTYY(("P(Compiled without ipset, ignoring)\n"));
7442                         free((yyvsp[0].str));
7443                 #endif
7444                 }
7445 #line 7446 "util/configparser.c"
7446     break;
7447
7448   case 725: /* ipset_name_v6: VAR_IPSET_NAME_V6 STRING_ARG  */
7449 #line 3908 "util/configparser.y"
7450         {
7451                 #ifdef USE_IPSET
7452                         OUTYY(("P(name-v6:%s)\n", (yyvsp[0].str)));
7453                         if(cfg_parser->cfg->ipset_name_v6)
7454                                 yyerror("ipset name v6 override, there must be one "
7455                                         "name for ip v6");
7456                         free(cfg_parser->cfg->ipset_name_v6);
7457                         cfg_parser->cfg->ipset_name_v6 = (yyvsp[0].str);
7458                 #else
7459                         OUTYY(("P(Compiled without ipset, ignoring)\n"));
7460                         free((yyvsp[0].str));
7461                 #endif
7462                 }
7463 #line 7464 "util/configparser.c"
7464     break;
7465
7466
7467 #line 7468 "util/configparser.c"
7468
7469       default: break;
7470     }
7471   /* User semantic actions sometimes alter yychar, and that requires
7472      that yytoken be updated with the new translation.  We take the
7473      approach of translating immediately before every use of yytoken.
7474      One alternative is translating here after every semantic action,
7475      but that translation would be missed if the semantic action invokes
7476      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
7477      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
7478      incorrect destructor might then be invoked immediately.  In the
7479      case of YYERROR or YYBACKUP, subsequent parser actions might lead
7480      to an incorrect destructor call or verbose syntax error message
7481      before the lookahead is translated.  */
7482   YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
7483
7484   YYPOPSTACK (yylen);
7485   yylen = 0;
7486
7487   *++yyvsp = yyval;
7488
7489   /* Now 'shift' the result of the reduction.  Determine what state
7490      that goes to, based on the state we popped back to and the rule
7491      number reduced by.  */
7492   {
7493     const int yylhs = yyr1[yyn] - YYNTOKENS;
7494     const int yyi = yypgoto[yylhs] + *yyssp;
7495     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
7496                ? yytable[yyi]
7497                : yydefgoto[yylhs]);
7498   }
7499
7500   goto yynewstate;
7501
7502
7503 /*--------------------------------------.
7504 | yyerrlab -- here on detecting error.  |
7505 `--------------------------------------*/
7506 yyerrlab:
7507   /* Make sure we have latest lookahead translation.  See comments at
7508      user semantic actions for why this is necessary.  */
7509   yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
7510   /* If not already recovering from an error, report this error.  */
7511   if (!yyerrstatus)
7512     {
7513       ++yynerrs;
7514       yyerror (YY_("syntax error"));
7515     }
7516
7517   if (yyerrstatus == 3)
7518     {
7519       /* If just tried and failed to reuse lookahead token after an
7520          error, discard it.  */
7521
7522       if (yychar <= YYEOF)
7523         {
7524           /* Return failure if at end of input.  */
7525           if (yychar == YYEOF)
7526             YYABORT;
7527         }
7528       else
7529         {
7530           yydestruct ("Error: discarding",
7531                       yytoken, &yylval);
7532           yychar = YYEMPTY;
7533         }
7534     }
7535
7536   /* Else will try to reuse lookahead token after shifting the error
7537      token.  */
7538   goto yyerrlab1;
7539
7540
7541 /*---------------------------------------------------.
7542 | yyerrorlab -- error raised explicitly by YYERROR.  |
7543 `---------------------------------------------------*/
7544 yyerrorlab:
7545   /* Pacify compilers when the user code never invokes YYERROR and the
7546      label yyerrorlab therefore never appears in user code.  */
7547   if (0)
7548     YYERROR;
7549
7550   /* Do not reclaim the symbols of the rule whose action triggered
7551      this YYERROR.  */
7552   YYPOPSTACK (yylen);
7553   yylen = 0;
7554   YY_STACK_PRINT (yyss, yyssp);
7555   yystate = *yyssp;
7556   goto yyerrlab1;
7557
7558
7559 /*-------------------------------------------------------------.
7560 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
7561 `-------------------------------------------------------------*/
7562 yyerrlab1:
7563   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
7564
7565   /* Pop stack until we find a state that shifts the error token.  */
7566   for (;;)
7567     {
7568       yyn = yypact[yystate];
7569       if (!yypact_value_is_default (yyn))
7570         {
7571           yyn += YYSYMBOL_YYerror;
7572           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
7573             {
7574               yyn = yytable[yyn];
7575               if (0 < yyn)
7576                 break;
7577             }
7578         }
7579
7580       /* Pop the current state because it cannot handle the error token.  */
7581       if (yyssp == yyss)
7582         YYABORT;
7583
7584
7585       yydestruct ("Error: popping",
7586                   YY_ACCESSING_SYMBOL (yystate), yyvsp);
7587       YYPOPSTACK (1);
7588       yystate = *yyssp;
7589       YY_STACK_PRINT (yyss, yyssp);
7590     }
7591
7592   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
7593   *++yyvsp = yylval;
7594   YY_IGNORE_MAYBE_UNINITIALIZED_END
7595
7596
7597   /* Shift the error token.  */
7598   YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
7599
7600   yystate = yyn;
7601   goto yynewstate;
7602
7603
7604 /*-------------------------------------.
7605 | yyacceptlab -- YYACCEPT comes here.  |
7606 `-------------------------------------*/
7607 yyacceptlab:
7608   yyresult = 0;
7609   goto yyreturn;
7610
7611
7612 /*-----------------------------------.
7613 | yyabortlab -- YYABORT comes here.  |
7614 `-----------------------------------*/
7615 yyabortlab:
7616   yyresult = 1;
7617   goto yyreturn;
7618
7619
7620 #if !defined yyoverflow
7621 /*-------------------------------------------------.
7622 | yyexhaustedlab -- memory exhaustion comes here.  |
7623 `-------------------------------------------------*/
7624 yyexhaustedlab:
7625   yyerror (YY_("memory exhausted"));
7626   yyresult = 2;
7627   goto yyreturn;
7628 #endif
7629
7630
7631 /*-------------------------------------------------------.
7632 | yyreturn -- parsing is finished, clean up and return.  |
7633 `-------------------------------------------------------*/
7634 yyreturn:
7635   if (yychar != YYEMPTY)
7636     {
7637       /* Make sure we have latest lookahead translation.  See comments at
7638          user semantic actions for why this is necessary.  */
7639       yytoken = YYTRANSLATE (yychar);
7640       yydestruct ("Cleanup: discarding lookahead",
7641                   yytoken, &yylval);
7642     }
7643   /* Do not reclaim the symbols of the rule whose action triggered
7644      this YYABORT or YYACCEPT.  */
7645   YYPOPSTACK (yylen);
7646   YY_STACK_PRINT (yyss, yyssp);
7647   while (yyssp != yyss)
7648     {
7649       yydestruct ("Cleanup: popping",
7650                   YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
7651       YYPOPSTACK (1);
7652     }
7653 #ifndef yyoverflow
7654   if (yyss != yyssa)
7655     YYSTACK_FREE (yyss);
7656 #endif
7657
7658   return yyresult;
7659 }
7660
7661 #line 3922 "util/configparser.y"
7662
7663
7664 /* parse helper routines could be here */
7665 static void
7666 validate_respip_action(const char* action)
7667 {
7668         if(strcmp(action, "deny")!=0 &&
7669                 strcmp(action, "redirect")!=0 &&
7670                 strcmp(action, "inform")!=0 &&
7671                 strcmp(action, "inform_deny")!=0 &&
7672                 strcmp(action, "always_transparent")!=0 &&
7673                 strcmp(action, "always_refuse")!=0 &&
7674                 strcmp(action, "always_nxdomain")!=0)
7675         {
7676                 yyerror("response-ip action: expected deny, redirect, "
7677                         "inform, inform_deny, always_transparent, "
7678                         "always_refuse or always_nxdomain");
7679         }
7680 }
7681
7682 static void
7683 validate_acl_action(const char* action)
7684 {
7685         if(strcmp(action, "deny")!=0 &&
7686                 strcmp(action, "refuse")!=0 &&
7687                 strcmp(action, "deny_non_local")!=0 &&
7688                 strcmp(action, "refuse_non_local")!=0 &&
7689                 strcmp(action, "allow_setrd")!=0 &&
7690                 strcmp(action, "allow")!=0 &&
7691                 strcmp(action, "allow_snoop")!=0 &&
7692                 strcmp(action, "allow_cookie")!=0)
7693         {
7694                 yyerror("expected deny, refuse, deny_non_local, "
7695                         "refuse_non_local, allow, allow_setrd, "
7696                         "allow_snoop or allow_cookie as access control action");
7697         }
7698 }