Home | History | Annotate | Line # | Download | only in dist
configparser.c revision 1.1.1.6
      1  1.1.1.6  christos /* A Bison parser, made by GNU Bison 3.4.1.  */
      2      1.1  christos 
      3      1.1  christos /* Bison implementation for Yacc-like parsers in C
      4      1.1  christos 
      5  1.1.1.6  christos    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
      6  1.1.1.6  christos    Inc.
      7      1.1  christos 
      8      1.1  christos    This program is free software: you can redistribute it and/or modify
      9      1.1  christos    it under the terms of the GNU General Public License as published by
     10      1.1  christos    the Free Software Foundation, either version 3 of the License, or
     11      1.1  christos    (at your option) any later version.
     12      1.1  christos 
     13      1.1  christos    This program is distributed in the hope that it will be useful,
     14      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16      1.1  christos    GNU General Public License for more details.
     17      1.1  christos 
     18      1.1  christos    You should have received a copy of the GNU General Public License
     19      1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     20      1.1  christos 
     21      1.1  christos /* As a special exception, you may create a larger work that contains
     22      1.1  christos    part or all of the Bison parser skeleton and distribute that work
     23      1.1  christos    under terms of your choice, so long as that work isn't itself a
     24      1.1  christos    parser generator using the skeleton or a modified version thereof
     25      1.1  christos    as a parser skeleton.  Alternatively, if you modify or redistribute
     26      1.1  christos    the parser skeleton itself, you may (at your option) remove this
     27      1.1  christos    special exception, which will cause the skeleton and the resulting
     28      1.1  christos    Bison output files to be licensed under the GNU General Public
     29      1.1  christos    License without this special exception.
     30      1.1  christos 
     31      1.1  christos    This special exception was added by the Free Software Foundation in
     32      1.1  christos    version 2.2 of Bison.  */
     33      1.1  christos 
     34      1.1  christos /* C LALR(1) parser skeleton written by Richard Stallman, by
     35      1.1  christos    simplifying the original so-called "semantic" parser.  */
     36      1.1  christos 
     37      1.1  christos /* All symbols defined below should begin with yy or YY, to avoid
     38      1.1  christos    infringing on user name space.  This should be done even for local
     39      1.1  christos    variables, as they might otherwise be expanded by user macros.
     40      1.1  christos    There are some unavoidable exceptions within include files to
     41      1.1  christos    define necessary library symbols; they are noted "INFRINGES ON
     42      1.1  christos    USER NAME SPACE" below.  */
     43      1.1  christos 
     44  1.1.1.6  christos /* Undocumented macros, especially those whose name start with YY_,
     45  1.1.1.6  christos    are private implementation details.  Do not rely on them.  */
     46  1.1.1.6  christos 
     47      1.1  christos /* Identify Bison output.  */
     48      1.1  christos #define YYBISON 1
     49      1.1  christos 
     50      1.1  christos /* Bison version.  */
     51  1.1.1.6  christos #define YYBISON_VERSION "3.4.1"
     52      1.1  christos 
     53      1.1  christos /* Skeleton name.  */
     54      1.1  christos #define YYSKELETON_NAME "yacc.c"
     55      1.1  christos 
     56      1.1  christos /* Pure parsers.  */
     57      1.1  christos #define YYPURE 0
     58      1.1  christos 
     59      1.1  christos /* Push parsers.  */
     60      1.1  christos #define YYPUSH 0
     61      1.1  christos 
     62      1.1  christos /* Pull parsers.  */
     63      1.1  christos #define YYPULL 1
     64      1.1  christos 
     65      1.1  christos 
     66      1.1  christos 
     67      1.1  christos 
     68  1.1.1.6  christos /* First part of user prologue.  */
     69  1.1.1.6  christos #line 10 "configparser.y"
     70      1.1  christos 
     71      1.1  christos #include "config.h"
     72      1.1  christos 
     73  1.1.1.5  christos #include <assert.h>
     74  1.1.1.5  christos #include <errno.h>
     75      1.1  christos #include <stdio.h>
     76      1.1  christos #include <string.h>
     77      1.1  christos 
     78      1.1  christos #include "options.h"
     79      1.1  christos #include "util.h"
     80      1.1  christos #include "dname.h"
     81      1.1  christos #include "tsig.h"
     82      1.1  christos #include "rrl.h"
     83      1.1  christos #include "configyyrename.h"
     84  1.1.1.5  christos 
     85  1.1.1.5  christos int yylex(void);
     86      1.1  christos 
     87      1.1  christos #ifdef __cplusplus
     88      1.1  christos extern "C"
     89  1.1.1.5  christos #endif
     90      1.1  christos 
     91      1.1  christos /* these need to be global, otherwise they cannot be used inside yacc */
     92  1.1.1.5  christos extern config_parser_state_type *cfg_parser;
     93      1.1  christos 
     94  1.1.1.5  christos static void append_acl(struct acl_options **list, struct acl_options *acl);
     95  1.1.1.6  christos static int parse_boolean(const char *str, int *bln);
     96  1.1.1.6  christos static int parse_expire_expr(const char *str, long long *num, uint8_t *expr);
     97  1.1.1.6  christos static int parse_number(const char *str, long long *num);
     98  1.1.1.6  christos static int parse_range(const char *str, long long *low, long long *high);
     99      1.1  christos 
    100  1.1.1.6  christos #line 101 "configparser.c"
    101      1.1  christos 
    102      1.1  christos # ifndef YY_NULLPTR
    103  1.1.1.6  christos #  if defined __cplusplus
    104  1.1.1.6  christos #   if 201103L <= __cplusplus
    105  1.1.1.6  christos #    define YY_NULLPTR nullptr
    106  1.1.1.6  christos #   else
    107  1.1.1.6  christos #    define YY_NULLPTR 0
    108  1.1.1.6  christos #   endif
    109      1.1  christos #  else
    110  1.1.1.6  christos #   define YY_NULLPTR ((void*)0)
    111      1.1  christos #  endif
    112      1.1  christos # endif
    113      1.1  christos 
    114      1.1  christos /* Enabling verbose error messages.  */
    115      1.1  christos #ifdef YYERROR_VERBOSE
    116      1.1  christos # undef YYERROR_VERBOSE
    117      1.1  christos # define YYERROR_VERBOSE 1
    118      1.1  christos #else
    119      1.1  christos # define YYERROR_VERBOSE 0
    120      1.1  christos #endif
    121      1.1  christos 
    122  1.1.1.6  christos /* Use api.header.include to #include this header
    123  1.1.1.6  christos    instead of duplicating it here.  */
    124      1.1  christos #ifndef YY_YY_CONFIGPARSER_H_INCLUDED
    125      1.1  christos # define YY_YY_CONFIGPARSER_H_INCLUDED
    126      1.1  christos /* Debug traces.  */
    127      1.1  christos #ifndef YYDEBUG
    128      1.1  christos # define YYDEBUG 0
    129      1.1  christos #endif
    130      1.1  christos #if YYDEBUG
    131      1.1  christos extern int yydebug;
    132      1.1  christos #endif
    133      1.1  christos 
    134      1.1  christos /* Token type.  */
    135      1.1  christos #ifndef YYTOKENTYPE
    136      1.1  christos # define YYTOKENTYPE
    137      1.1  christos   enum yytokentype
    138      1.1  christos   {
    139  1.1.1.5  christos     STRING = 258,
    140  1.1.1.5  christos     VAR_SERVER = 259,
    141  1.1.1.5  christos     VAR_SERVER_COUNT = 260,
    142  1.1.1.5  christos     VAR_IP_ADDRESS = 261,
    143  1.1.1.5  christos     VAR_IP_TRANSPARENT = 262,
    144  1.1.1.5  christos     VAR_IP_FREEBIND = 263,
    145  1.1.1.5  christos     VAR_REUSEPORT = 264,
    146  1.1.1.5  christos     VAR_SEND_BUFFER_SIZE = 265,
    147  1.1.1.5  christos     VAR_RECEIVE_BUFFER_SIZE = 266,
    148  1.1.1.5  christos     VAR_DEBUG_MODE = 267,
    149  1.1.1.5  christos     VAR_IP4_ONLY = 268,
    150  1.1.1.5  christos     VAR_IP6_ONLY = 269,
    151  1.1.1.5  christos     VAR_DO_IP4 = 270,
    152  1.1.1.5  christos     VAR_DO_IP6 = 271,
    153  1.1.1.5  christos     VAR_PORT = 272,
    154  1.1.1.5  christos     VAR_USE_SYSTEMD = 273,
    155  1.1.1.5  christos     VAR_VERBOSITY = 274,
    156  1.1.1.5  christos     VAR_USERNAME = 275,
    157  1.1.1.5  christos     VAR_CHROOT = 276,
    158  1.1.1.5  christos     VAR_ZONESDIR = 277,
    159  1.1.1.5  christos     VAR_ZONELISTFILE = 278,
    160  1.1.1.5  christos     VAR_DATABASE = 279,
    161  1.1.1.5  christos     VAR_LOGFILE = 280,
    162  1.1.1.6  christos     VAR_LOG_ONLY_SYSLOG = 281,
    163  1.1.1.6  christos     VAR_PIDFILE = 282,
    164  1.1.1.6  christos     VAR_DIFFFILE = 283,
    165  1.1.1.6  christos     VAR_XFRDFILE = 284,
    166  1.1.1.6  christos     VAR_XFRDIR = 285,
    167  1.1.1.6  christos     VAR_HIDE_VERSION = 286,
    168  1.1.1.6  christos     VAR_HIDE_IDENTITY = 287,
    169  1.1.1.6  christos     VAR_VERSION = 288,
    170  1.1.1.6  christos     VAR_IDENTITY = 289,
    171  1.1.1.6  christos     VAR_NSID = 290,
    172  1.1.1.6  christos     VAR_TCP_COUNT = 291,
    173  1.1.1.6  christos     VAR_TCP_REJECT_OVERFLOW = 292,
    174  1.1.1.6  christos     VAR_TCP_QUERY_COUNT = 293,
    175  1.1.1.6  christos     VAR_TCP_TIMEOUT = 294,
    176  1.1.1.6  christos     VAR_TCP_MSS = 295,
    177  1.1.1.6  christos     VAR_OUTGOING_TCP_MSS = 296,
    178  1.1.1.6  christos     VAR_IPV4_EDNS_SIZE = 297,
    179  1.1.1.6  christos     VAR_IPV6_EDNS_SIZE = 298,
    180  1.1.1.6  christos     VAR_STATISTICS = 299,
    181  1.1.1.6  christos     VAR_XFRD_RELOAD_TIMEOUT = 300,
    182  1.1.1.6  christos     VAR_LOG_TIME_ASCII = 301,
    183  1.1.1.6  christos     VAR_ROUND_ROBIN = 302,
    184  1.1.1.6  christos     VAR_MINIMAL_RESPONSES = 303,
    185  1.1.1.6  christos     VAR_CONFINE_TO_ZONE = 304,
    186  1.1.1.6  christos     VAR_REFUSE_ANY = 305,
    187  1.1.1.6  christos     VAR_ZONEFILES_CHECK = 306,
    188  1.1.1.6  christos     VAR_ZONEFILES_WRITE = 307,
    189  1.1.1.6  christos     VAR_RRL_SIZE = 308,
    190  1.1.1.6  christos     VAR_RRL_RATELIMIT = 309,
    191  1.1.1.6  christos     VAR_RRL_SLIP = 310,
    192  1.1.1.6  christos     VAR_RRL_IPV4_PREFIX_LENGTH = 311,
    193  1.1.1.6  christos     VAR_RRL_IPV6_PREFIX_LENGTH = 312,
    194  1.1.1.6  christos     VAR_RRL_WHITELIST_RATELIMIT = 313,
    195  1.1.1.6  christos     VAR_TLS_SERVICE_KEY = 314,
    196  1.1.1.6  christos     VAR_TLS_SERVICE_PEM = 315,
    197  1.1.1.6  christos     VAR_TLS_SERVICE_OCSP = 316,
    198  1.1.1.6  christos     VAR_TLS_PORT = 317,
    199  1.1.1.6  christos     VAR_CPU_AFFINITY = 318,
    200  1.1.1.6  christos     VAR_XFRD_CPU_AFFINITY = 319,
    201  1.1.1.6  christos     VAR_SERVER_CPU_AFFINITY = 320,
    202  1.1.1.6  christos     VAR_DROP_UPDATES = 321,
    203  1.1.1.6  christos     VAR_DNSTAP = 322,
    204  1.1.1.6  christos     VAR_DNSTAP_ENABLE = 323,
    205  1.1.1.6  christos     VAR_DNSTAP_SOCKET_PATH = 324,
    206  1.1.1.6  christos     VAR_DNSTAP_SEND_IDENTITY = 325,
    207  1.1.1.6  christos     VAR_DNSTAP_SEND_VERSION = 326,
    208  1.1.1.6  christos     VAR_DNSTAP_IDENTITY = 327,
    209  1.1.1.6  christos     VAR_DNSTAP_VERSION = 328,
    210  1.1.1.6  christos     VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES = 329,
    211  1.1.1.6  christos     VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES = 330,
    212  1.1.1.6  christos     VAR_REMOTE_CONTROL = 331,
    213  1.1.1.6  christos     VAR_CONTROL_ENABLE = 332,
    214  1.1.1.6  christos     VAR_CONTROL_INTERFACE = 333,
    215  1.1.1.6  christos     VAR_CONTROL_PORT = 334,
    216  1.1.1.6  christos     VAR_SERVER_KEY_FILE = 335,
    217  1.1.1.6  christos     VAR_SERVER_CERT_FILE = 336,
    218  1.1.1.6  christos     VAR_CONTROL_KEY_FILE = 337,
    219  1.1.1.6  christos     VAR_CONTROL_CERT_FILE = 338,
    220  1.1.1.6  christos     VAR_KEY = 339,
    221  1.1.1.6  christos     VAR_ALGORITHM = 340,
    222  1.1.1.6  christos     VAR_SECRET = 341,
    223  1.1.1.6  christos     VAR_PATTERN = 342,
    224  1.1.1.6  christos     VAR_NAME = 343,
    225  1.1.1.6  christos     VAR_ZONEFILE = 344,
    226  1.1.1.6  christos     VAR_NOTIFY = 345,
    227  1.1.1.6  christos     VAR_PROVIDE_XFR = 346,
    228  1.1.1.6  christos     VAR_AXFR = 347,
    229  1.1.1.6  christos     VAR_UDP = 348,
    230  1.1.1.6  christos     VAR_NOTIFY_RETRY = 349,
    231  1.1.1.6  christos     VAR_ALLOW_NOTIFY = 350,
    232  1.1.1.6  christos     VAR_REQUEST_XFR = 351,
    233  1.1.1.6  christos     VAR_ALLOW_AXFR_FALLBACK = 352,
    234  1.1.1.6  christos     VAR_OUTGOING_INTERFACE = 353,
    235  1.1.1.6  christos     VAR_MAX_REFRESH_TIME = 354,
    236  1.1.1.6  christos     VAR_MIN_REFRESH_TIME = 355,
    237  1.1.1.6  christos     VAR_MAX_RETRY_TIME = 356,
    238  1.1.1.6  christos     VAR_MIN_RETRY_TIME = 357,
    239  1.1.1.6  christos     VAR_MIN_EXPIRE_TIME = 358,
    240  1.1.1.6  christos     VAR_MULTI_MASTER_CHECK = 359,
    241  1.1.1.6  christos     VAR_SIZE_LIMIT_XFR = 360,
    242  1.1.1.6  christos     VAR_ZONESTATS = 361,
    243  1.1.1.6  christos     VAR_INCLUDE_PATTERN = 362,
    244  1.1.1.6  christos     VAR_ZONE = 363,
    245  1.1.1.6  christos     VAR_RRL_WHITELIST = 364,
    246  1.1.1.6  christos     VAR_SERVERS = 365,
    247  1.1.1.6  christos     VAR_BINDTODEVICE = 366,
    248  1.1.1.6  christos     VAR_SETFIB = 367
    249      1.1  christos   };
    250      1.1  christos #endif
    251      1.1  christos /* Tokens.  */
    252  1.1.1.5  christos #define STRING 258
    253  1.1.1.5  christos #define VAR_SERVER 259
    254  1.1.1.5  christos #define VAR_SERVER_COUNT 260
    255  1.1.1.5  christos #define VAR_IP_ADDRESS 261
    256  1.1.1.5  christos #define VAR_IP_TRANSPARENT 262
    257  1.1.1.5  christos #define VAR_IP_FREEBIND 263
    258  1.1.1.5  christos #define VAR_REUSEPORT 264
    259  1.1.1.5  christos #define VAR_SEND_BUFFER_SIZE 265
    260  1.1.1.5  christos #define VAR_RECEIVE_BUFFER_SIZE 266
    261  1.1.1.5  christos #define VAR_DEBUG_MODE 267
    262  1.1.1.5  christos #define VAR_IP4_ONLY 268
    263  1.1.1.5  christos #define VAR_IP6_ONLY 269
    264  1.1.1.5  christos #define VAR_DO_IP4 270
    265  1.1.1.5  christos #define VAR_DO_IP6 271
    266  1.1.1.5  christos #define VAR_PORT 272
    267  1.1.1.5  christos #define VAR_USE_SYSTEMD 273
    268  1.1.1.5  christos #define VAR_VERBOSITY 274
    269  1.1.1.5  christos #define VAR_USERNAME 275
    270  1.1.1.5  christos #define VAR_CHROOT 276
    271  1.1.1.5  christos #define VAR_ZONESDIR 277
    272  1.1.1.5  christos #define VAR_ZONELISTFILE 278
    273  1.1.1.5  christos #define VAR_DATABASE 279
    274  1.1.1.5  christos #define VAR_LOGFILE 280
    275  1.1.1.6  christos #define VAR_LOG_ONLY_SYSLOG 281
    276  1.1.1.6  christos #define VAR_PIDFILE 282
    277  1.1.1.6  christos #define VAR_DIFFFILE 283
    278  1.1.1.6  christos #define VAR_XFRDFILE 284
    279  1.1.1.6  christos #define VAR_XFRDIR 285
    280  1.1.1.6  christos #define VAR_HIDE_VERSION 286
    281  1.1.1.6  christos #define VAR_HIDE_IDENTITY 287
    282  1.1.1.6  christos #define VAR_VERSION 288
    283  1.1.1.6  christos #define VAR_IDENTITY 289
    284  1.1.1.6  christos #define VAR_NSID 290
    285  1.1.1.6  christos #define VAR_TCP_COUNT 291
    286  1.1.1.6  christos #define VAR_TCP_REJECT_OVERFLOW 292
    287  1.1.1.6  christos #define VAR_TCP_QUERY_COUNT 293
    288  1.1.1.6  christos #define VAR_TCP_TIMEOUT 294
    289  1.1.1.6  christos #define VAR_TCP_MSS 295
    290  1.1.1.6  christos #define VAR_OUTGOING_TCP_MSS 296
    291  1.1.1.6  christos #define VAR_IPV4_EDNS_SIZE 297
    292  1.1.1.6  christos #define VAR_IPV6_EDNS_SIZE 298
    293  1.1.1.6  christos #define VAR_STATISTICS 299
    294  1.1.1.6  christos #define VAR_XFRD_RELOAD_TIMEOUT 300
    295  1.1.1.6  christos #define VAR_LOG_TIME_ASCII 301
    296  1.1.1.6  christos #define VAR_ROUND_ROBIN 302
    297  1.1.1.6  christos #define VAR_MINIMAL_RESPONSES 303
    298  1.1.1.6  christos #define VAR_CONFINE_TO_ZONE 304
    299  1.1.1.6  christos #define VAR_REFUSE_ANY 305
    300  1.1.1.6  christos #define VAR_ZONEFILES_CHECK 306
    301  1.1.1.6  christos #define VAR_ZONEFILES_WRITE 307
    302  1.1.1.6  christos #define VAR_RRL_SIZE 308
    303  1.1.1.6  christos #define VAR_RRL_RATELIMIT 309
    304  1.1.1.6  christos #define VAR_RRL_SLIP 310
    305  1.1.1.6  christos #define VAR_RRL_IPV4_PREFIX_LENGTH 311
    306  1.1.1.6  christos #define VAR_RRL_IPV6_PREFIX_LENGTH 312
    307  1.1.1.6  christos #define VAR_RRL_WHITELIST_RATELIMIT 313
    308  1.1.1.6  christos #define VAR_TLS_SERVICE_KEY 314
    309  1.1.1.6  christos #define VAR_TLS_SERVICE_PEM 315
    310  1.1.1.6  christos #define VAR_TLS_SERVICE_OCSP 316
    311  1.1.1.6  christos #define VAR_TLS_PORT 317
    312  1.1.1.6  christos #define VAR_CPU_AFFINITY 318
    313  1.1.1.6  christos #define VAR_XFRD_CPU_AFFINITY 319
    314  1.1.1.6  christos #define VAR_SERVER_CPU_AFFINITY 320
    315  1.1.1.6  christos #define VAR_DROP_UPDATES 321
    316  1.1.1.6  christos #define VAR_DNSTAP 322
    317  1.1.1.6  christos #define VAR_DNSTAP_ENABLE 323
    318  1.1.1.6  christos #define VAR_DNSTAP_SOCKET_PATH 324
    319  1.1.1.6  christos #define VAR_DNSTAP_SEND_IDENTITY 325
    320  1.1.1.6  christos #define VAR_DNSTAP_SEND_VERSION 326
    321  1.1.1.6  christos #define VAR_DNSTAP_IDENTITY 327
    322  1.1.1.6  christos #define VAR_DNSTAP_VERSION 328
    323  1.1.1.6  christos #define VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES 329
    324  1.1.1.6  christos #define VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES 330
    325  1.1.1.6  christos #define VAR_REMOTE_CONTROL 331
    326  1.1.1.6  christos #define VAR_CONTROL_ENABLE 332
    327  1.1.1.6  christos #define VAR_CONTROL_INTERFACE 333
    328  1.1.1.6  christos #define VAR_CONTROL_PORT 334
    329  1.1.1.6  christos #define VAR_SERVER_KEY_FILE 335
    330  1.1.1.6  christos #define VAR_SERVER_CERT_FILE 336
    331  1.1.1.6  christos #define VAR_CONTROL_KEY_FILE 337
    332  1.1.1.6  christos #define VAR_CONTROL_CERT_FILE 338
    333  1.1.1.6  christos #define VAR_KEY 339
    334  1.1.1.6  christos #define VAR_ALGORITHM 340
    335  1.1.1.6  christos #define VAR_SECRET 341
    336  1.1.1.6  christos #define VAR_PATTERN 342
    337  1.1.1.6  christos #define VAR_NAME 343
    338  1.1.1.6  christos #define VAR_ZONEFILE 344
    339  1.1.1.6  christos #define VAR_NOTIFY 345
    340  1.1.1.6  christos #define VAR_PROVIDE_XFR 346
    341  1.1.1.6  christos #define VAR_AXFR 347
    342  1.1.1.6  christos #define VAR_UDP 348
    343  1.1.1.6  christos #define VAR_NOTIFY_RETRY 349
    344  1.1.1.6  christos #define VAR_ALLOW_NOTIFY 350
    345  1.1.1.6  christos #define VAR_REQUEST_XFR 351
    346  1.1.1.6  christos #define VAR_ALLOW_AXFR_FALLBACK 352
    347  1.1.1.6  christos #define VAR_OUTGOING_INTERFACE 353
    348  1.1.1.6  christos #define VAR_MAX_REFRESH_TIME 354
    349  1.1.1.6  christos #define VAR_MIN_REFRESH_TIME 355
    350  1.1.1.6  christos #define VAR_MAX_RETRY_TIME 356
    351  1.1.1.6  christos #define VAR_MIN_RETRY_TIME 357
    352  1.1.1.6  christos #define VAR_MIN_EXPIRE_TIME 358
    353  1.1.1.6  christos #define VAR_MULTI_MASTER_CHECK 359
    354  1.1.1.6  christos #define VAR_SIZE_LIMIT_XFR 360
    355  1.1.1.6  christos #define VAR_ZONESTATS 361
    356  1.1.1.6  christos #define VAR_INCLUDE_PATTERN 362
    357  1.1.1.6  christos #define VAR_ZONE 363
    358  1.1.1.6  christos #define VAR_RRL_WHITELIST 364
    359  1.1.1.6  christos #define VAR_SERVERS 365
    360  1.1.1.6  christos #define VAR_BINDTODEVICE 366
    361  1.1.1.6  christos #define VAR_SETFIB 367
    362      1.1  christos 
    363      1.1  christos /* Value type.  */
    364      1.1  christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
    365      1.1  christos union YYSTYPE
    366      1.1  christos {
    367  1.1.1.6  christos #line 41 "configparser.y"
    368      1.1  christos 
    369  1.1.1.5  christos   char *str;
    370  1.1.1.5  christos   long long llng;
    371  1.1.1.5  christos   int bln;
    372  1.1.1.5  christos   struct ip_address_option *ip;
    373  1.1.1.6  christos   struct range_option *range;
    374  1.1.1.6  christos   struct cpu_option *cpu;
    375      1.1  christos 
    376  1.1.1.6  christos #line 377 "configparser.c"
    377      1.1  christos 
    378  1.1.1.6  christos };
    379      1.1  christos typedef union YYSTYPE YYSTYPE;
    380      1.1  christos # define YYSTYPE_IS_TRIVIAL 1
    381      1.1  christos # define YYSTYPE_IS_DECLARED 1
    382      1.1  christos #endif
    383      1.1  christos 
    384      1.1  christos 
    385      1.1  christos extern YYSTYPE yylval;
    386      1.1  christos 
    387      1.1  christos int yyparse (void);
    388      1.1  christos 
    389      1.1  christos #endif /* !YY_YY_CONFIGPARSER_H_INCLUDED  */
    390      1.1  christos 
    391      1.1  christos 
    392      1.1  christos 
    393      1.1  christos #ifdef short
    394      1.1  christos # undef short
    395      1.1  christos #endif
    396      1.1  christos 
    397      1.1  christos #ifdef YYTYPE_UINT8
    398      1.1  christos typedef YYTYPE_UINT8 yytype_uint8;
    399      1.1  christos #else
    400      1.1  christos typedef unsigned char yytype_uint8;
    401      1.1  christos #endif
    402      1.1  christos 
    403      1.1  christos #ifdef YYTYPE_INT8
    404      1.1  christos typedef YYTYPE_INT8 yytype_int8;
    405      1.1  christos #else
    406      1.1  christos typedef signed char yytype_int8;
    407      1.1  christos #endif
    408      1.1  christos 
    409      1.1  christos #ifdef YYTYPE_UINT16
    410      1.1  christos typedef YYTYPE_UINT16 yytype_uint16;
    411      1.1  christos #else
    412  1.1.1.6  christos typedef unsigned short yytype_uint16;
    413      1.1  christos #endif
    414      1.1  christos 
    415      1.1  christos #ifdef YYTYPE_INT16
    416      1.1  christos typedef YYTYPE_INT16 yytype_int16;
    417      1.1  christos #else
    418  1.1.1.6  christos typedef short yytype_int16;
    419      1.1  christos #endif
    420      1.1  christos 
    421      1.1  christos #ifndef YYSIZE_T
    422      1.1  christos # ifdef __SIZE_TYPE__
    423      1.1  christos #  define YYSIZE_T __SIZE_TYPE__
    424      1.1  christos # elif defined size_t
    425      1.1  christos #  define YYSIZE_T size_t
    426      1.1  christos # elif ! defined YYSIZE_T
    427      1.1  christos #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
    428      1.1  christos #  define YYSIZE_T size_t
    429      1.1  christos # else
    430  1.1.1.6  christos #  define YYSIZE_T unsigned
    431      1.1  christos # endif
    432      1.1  christos #endif
    433      1.1  christos 
    434      1.1  christos #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
    435      1.1  christos 
    436      1.1  christos #ifndef YY_
    437      1.1  christos # if defined YYENABLE_NLS && YYENABLE_NLS
    438      1.1  christos #  if ENABLE_NLS
    439      1.1  christos #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
    440      1.1  christos #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
    441      1.1  christos #  endif
    442      1.1  christos # endif
    443      1.1  christos # ifndef YY_
    444      1.1  christos #  define YY_(Msgid) Msgid
    445      1.1  christos # endif
    446      1.1  christos #endif
    447      1.1  christos 
    448      1.1  christos #ifndef YY_ATTRIBUTE
    449      1.1  christos # if (defined __GNUC__                                               \
    450      1.1  christos       && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
    451      1.1  christos      || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
    452      1.1  christos #  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
    453      1.1  christos # else
    454      1.1  christos #  define YY_ATTRIBUTE(Spec) /* empty */
    455      1.1  christos # endif
    456      1.1  christos #endif
    457      1.1  christos 
    458      1.1  christos #ifndef YY_ATTRIBUTE_PURE
    459      1.1  christos # define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
    460      1.1  christos #endif
    461      1.1  christos 
    462      1.1  christos #ifndef YY_ATTRIBUTE_UNUSED
    463      1.1  christos # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
    464      1.1  christos #endif
    465      1.1  christos 
    466      1.1  christos /* Suppress unused-variable warnings by "using" E.  */
    467      1.1  christos #if ! defined lint || defined __GNUC__
    468      1.1  christos # define YYUSE(E) ((void) (E))
    469      1.1  christos #else
    470      1.1  christos # define YYUSE(E) /* empty */
    471      1.1  christos #endif
    472      1.1  christos 
    473  1.1.1.6  christos #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
    474      1.1  christos /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
    475      1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
    476      1.1  christos     _Pragma ("GCC diagnostic push") \
    477      1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
    478      1.1  christos     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
    479      1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
    480      1.1  christos     _Pragma ("GCC diagnostic pop")
    481      1.1  christos #else
    482      1.1  christos # define YY_INITIAL_VALUE(Value) Value
    483      1.1  christos #endif
    484      1.1  christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    485      1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
    486      1.1  christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
    487      1.1  christos #endif
    488      1.1  christos #ifndef YY_INITIAL_VALUE
    489      1.1  christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
    490      1.1  christos #endif
    491      1.1  christos 
    492      1.1  christos 
    493  1.1.1.6  christos #define YY_ASSERT(E) ((void) (0 && (E)))
    494  1.1.1.6  christos 
    495      1.1  christos #if ! defined yyoverflow || YYERROR_VERBOSE
    496      1.1  christos 
    497      1.1  christos /* The parser invokes alloca or malloc; define the necessary symbols.  */
    498      1.1  christos 
    499      1.1  christos # ifdef YYSTACK_USE_ALLOCA
    500      1.1  christos #  if YYSTACK_USE_ALLOCA
    501      1.1  christos #   ifdef __GNUC__
    502      1.1  christos #    define YYSTACK_ALLOC __builtin_alloca
    503      1.1  christos #   elif defined __BUILTIN_VA_ARG_INCR
    504      1.1  christos #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
    505      1.1  christos #   elif defined _AIX
    506      1.1  christos #    define YYSTACK_ALLOC __alloca
    507      1.1  christos #   elif defined _MSC_VER
    508      1.1  christos #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
    509      1.1  christos #    define alloca _alloca
    510      1.1  christos #   else
    511      1.1  christos #    define YYSTACK_ALLOC alloca
    512      1.1  christos #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
    513      1.1  christos #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    514      1.1  christos       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
    515      1.1  christos #     ifndef EXIT_SUCCESS
    516      1.1  christos #      define EXIT_SUCCESS 0
    517      1.1  christos #     endif
    518      1.1  christos #    endif
    519      1.1  christos #   endif
    520      1.1  christos #  endif
    521      1.1  christos # endif
    522      1.1  christos 
    523      1.1  christos # ifdef YYSTACK_ALLOC
    524      1.1  christos    /* Pacify GCC's 'empty if-body' warning.  */
    525      1.1  christos #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
    526      1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
    527      1.1  christos     /* The OS might guarantee only one guard page at the bottom of the stack,
    528      1.1  christos        and a page size can be as small as 4096 bytes.  So we cannot safely
    529      1.1  christos        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
    530      1.1  christos        to allow for a few compiler-allocated temporary stack slots.  */
    531      1.1  christos #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
    532      1.1  christos #  endif
    533      1.1  christos # else
    534      1.1  christos #  define YYSTACK_ALLOC YYMALLOC
    535      1.1  christos #  define YYSTACK_FREE YYFREE
    536      1.1  christos #  ifndef YYSTACK_ALLOC_MAXIMUM
    537      1.1  christos #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
    538      1.1  christos #  endif
    539      1.1  christos #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
    540      1.1  christos        && ! ((defined YYMALLOC || defined malloc) \
    541      1.1  christos              && (defined YYFREE || defined free)))
    542      1.1  christos #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
    543      1.1  christos #   ifndef EXIT_SUCCESS
    544      1.1  christos #    define EXIT_SUCCESS 0
    545      1.1  christos #   endif
    546      1.1  christos #  endif
    547      1.1  christos #  ifndef YYMALLOC
    548      1.1  christos #   define YYMALLOC malloc
    549      1.1  christos #   if ! defined malloc && ! defined EXIT_SUCCESS
    550      1.1  christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
    551      1.1  christos #   endif
    552      1.1  christos #  endif
    553      1.1  christos #  ifndef YYFREE
    554      1.1  christos #   define YYFREE free
    555      1.1  christos #   if ! defined free && ! defined EXIT_SUCCESS
    556      1.1  christos void free (void *); /* INFRINGES ON USER NAME SPACE */
    557      1.1  christos #   endif
    558      1.1  christos #  endif
    559      1.1  christos # endif
    560      1.1  christos #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
    561      1.1  christos 
    562      1.1  christos 
    563      1.1  christos #if (! defined yyoverflow \
    564      1.1  christos      && (! defined __cplusplus \
    565      1.1  christos          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
    566      1.1  christos 
    567      1.1  christos /* A type that is properly aligned for any stack member.  */
    568      1.1  christos union yyalloc
    569      1.1  christos {
    570      1.1  christos   yytype_int16 yyss_alloc;
    571      1.1  christos   YYSTYPE yyvs_alloc;
    572      1.1  christos };
    573      1.1  christos 
    574      1.1  christos /* The size of the maximum gap between one aligned stack and the next.  */
    575      1.1  christos # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
    576      1.1  christos 
    577      1.1  christos /* The size of an array large to enough to hold all stacks, each with
    578      1.1  christos    N elements.  */
    579      1.1  christos # define YYSTACK_BYTES(N) \
    580      1.1  christos      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
    581      1.1  christos       + YYSTACK_GAP_MAXIMUM)
    582      1.1  christos 
    583      1.1  christos # define YYCOPY_NEEDED 1
    584      1.1  christos 
    585      1.1  christos /* Relocate STACK from its old location to the new one.  The
    586      1.1  christos    local variables YYSIZE and YYSTACKSIZE give the old and new number of
    587      1.1  christos    elements in the stack, and YYPTR gives the new location of the
    588      1.1  christos    stack.  Advance YYPTR to a properly aligned location for the next
    589      1.1  christos    stack.  */
    590      1.1  christos # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
    591      1.1  christos     do                                                                  \
    592      1.1  christos       {                                                                 \
    593      1.1  christos         YYSIZE_T yynewbytes;                                            \
    594      1.1  christos         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
    595      1.1  christos         Stack = &yyptr->Stack_alloc;                                    \
    596      1.1  christos         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
    597      1.1  christos         yyptr += yynewbytes / sizeof (*yyptr);                          \
    598      1.1  christos       }                                                                 \
    599      1.1  christos     while (0)
    600      1.1  christos 
    601      1.1  christos #endif
    602      1.1  christos 
    603      1.1  christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
    604      1.1  christos /* Copy COUNT objects from SRC to DST.  The source and destination do
    605      1.1  christos    not overlap.  */
    606      1.1  christos # ifndef YYCOPY
    607      1.1  christos #  if defined __GNUC__ && 1 < __GNUC__
    608      1.1  christos #   define YYCOPY(Dst, Src, Count) \
    609      1.1  christos       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
    610      1.1  christos #  else
    611      1.1  christos #   define YYCOPY(Dst, Src, Count)              \
    612      1.1  christos       do                                        \
    613      1.1  christos         {                                       \
    614      1.1  christos           YYSIZE_T yyi;                         \
    615      1.1  christos           for (yyi = 0; yyi < (Count); yyi++)   \
    616      1.1  christos             (Dst)[yyi] = (Src)[yyi];            \
    617      1.1  christos         }                                       \
    618      1.1  christos       while (0)
    619      1.1  christos #  endif
    620      1.1  christos # endif
    621      1.1  christos #endif /* !YYCOPY_NEEDED */
    622      1.1  christos 
    623      1.1  christos /* YYFINAL -- State number of the termination state.  */
    624      1.1  christos #define YYFINAL  2
    625      1.1  christos /* YYLAST -- Last index in YYTABLE.  */
    626  1.1.1.6  christos #define YYLAST   329
    627      1.1  christos 
    628      1.1  christos /* YYNTOKENS -- Number of terminals.  */
    629  1.1.1.6  christos #define YYNTOKENS  113
    630      1.1  christos /* YYNNTS -- Number of nonterminals.  */
    631  1.1.1.6  christos #define YYNNTS  33
    632      1.1  christos /* YYNRULES -- Number of rules.  */
    633  1.1.1.6  christos #define YYNRULES  146
    634      1.1  christos /* YYNSTATES -- Number of states.  */
    635  1.1.1.6  christos #define YYNSTATES  256
    636      1.1  christos 
    637      1.1  christos #define YYUNDEFTOK  2
    638  1.1.1.6  christos #define YYMAXUTOK   367
    639      1.1  christos 
    640  1.1.1.6  christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
    641  1.1.1.6  christos    as returned by yylex, with out-of-bounds checking.  */
    642      1.1  christos #define YYTRANSLATE(YYX)                                                \
    643  1.1.1.6  christos   ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
    644      1.1  christos 
    645      1.1  christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    646  1.1.1.6  christos    as returned by yylex.  */
    647      1.1  christos static const yytype_uint8 yytranslate[] =
    648      1.1  christos {
    649      1.1  christos        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    650      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    651      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    652      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    653      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    654      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    655      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    656      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    657      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    658      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    659      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    660      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    661      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    662      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    663      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    664      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    665      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    666      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    667      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    668      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    669      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    670      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    671      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    672      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    673      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
    674      1.1  christos        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
    675      1.1  christos        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
    676      1.1  christos       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
    677      1.1  christos       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
    678      1.1  christos       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
    679      1.1  christos       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
    680      1.1  christos       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
    681      1.1  christos       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
    682      1.1  christos       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
    683  1.1.1.3     prlw1       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
    684  1.1.1.6  christos       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    685  1.1.1.6  christos      105,   106,   107,   108,   109,   110,   111,   112
    686      1.1  christos };
    687      1.1  christos 
    688      1.1  christos #if YYDEBUG
    689      1.1  christos   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
    690      1.1  christos static const yytype_uint16 yyrline[] =
    691      1.1  christos {
    692  1.1.1.6  christos        0,   182,   182,   184,   187,   188,   189,   190,   191,   192,
    693  1.1.1.6  christos      195,   198,   198,   202,   201,   218,   226,   228,   230,   232,
    694  1.1.1.6  christos      234,   236,   238,   240,   242,   244,   246,   248,   250,   252,
    695  1.1.1.6  christos      261,   263,   265,   295,   297,   299,   307,   309,   311,   313,
    696  1.1.1.6  christos      315,   317,   319,   321,   323,   330,   332,   334,   336,   338,
    697  1.1.1.6  christos      340,   342,   344,   346,   348,   350,   352,   362,   368,   374,
    698  1.1.1.6  christos      384,   394,   400,   402,   404,   409,   414,   419,   421,   423,
    699  1.1.1.6  christos      425,   427,   429,   436,   440,   470,   471,   474,   501,   503,
    700  1.1.1.6  christos      508,   509,   543,   545,   556,   559,   559,   562,   564,   566,
    701  1.1.1.6  christos      568,   570,   572,   574,   576,   581,   584,   584,   587,   589,
    702  1.1.1.6  christos      599,   607,   609,   611,   613,   619,   618,   643,   643,   646,
    703  1.1.1.6  christos      658,   666,   685,   684,   709,   709,   712,   725,   729,   728,
    704  1.1.1.6  christos      745,   745,   748,   755,   758,   764,   766,   768,   776,   778,
    705  1.1.1.6  christos      780,   789,   799,   809,   814,   823,   828,   833,   838,   843,
    706  1.1.1.6  christos      848,   853,   858,   863,   877,   887,   896
    707      1.1  christos };
    708      1.1  christos #endif
    709      1.1  christos 
    710      1.1  christos #if YYDEBUG || YYERROR_VERBOSE || 0
    711      1.1  christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
    712      1.1  christos    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
    713      1.1  christos static const char *const yytname[] =
    714      1.1  christos {
    715  1.1.1.5  christos   "$end", "error", "$undefined", "STRING", "VAR_SERVER",
    716  1.1.1.5  christos   "VAR_SERVER_COUNT", "VAR_IP_ADDRESS", "VAR_IP_TRANSPARENT",
    717  1.1.1.5  christos   "VAR_IP_FREEBIND", "VAR_REUSEPORT", "VAR_SEND_BUFFER_SIZE",
    718  1.1.1.5  christos   "VAR_RECEIVE_BUFFER_SIZE", "VAR_DEBUG_MODE", "VAR_IP4_ONLY",
    719  1.1.1.5  christos   "VAR_IP6_ONLY", "VAR_DO_IP4", "VAR_DO_IP6", "VAR_PORT",
    720  1.1.1.5  christos   "VAR_USE_SYSTEMD", "VAR_VERBOSITY", "VAR_USERNAME", "VAR_CHROOT",
    721  1.1.1.5  christos   "VAR_ZONESDIR", "VAR_ZONELISTFILE", "VAR_DATABASE", "VAR_LOGFILE",
    722  1.1.1.6  christos   "VAR_LOG_ONLY_SYSLOG", "VAR_PIDFILE", "VAR_DIFFFILE", "VAR_XFRDFILE",
    723  1.1.1.6  christos   "VAR_XFRDIR", "VAR_HIDE_VERSION", "VAR_HIDE_IDENTITY", "VAR_VERSION",
    724  1.1.1.6  christos   "VAR_IDENTITY", "VAR_NSID", "VAR_TCP_COUNT", "VAR_TCP_REJECT_OVERFLOW",
    725  1.1.1.5  christos   "VAR_TCP_QUERY_COUNT", "VAR_TCP_TIMEOUT", "VAR_TCP_MSS",
    726  1.1.1.5  christos   "VAR_OUTGOING_TCP_MSS", "VAR_IPV4_EDNS_SIZE", "VAR_IPV6_EDNS_SIZE",
    727  1.1.1.5  christos   "VAR_STATISTICS", "VAR_XFRD_RELOAD_TIMEOUT", "VAR_LOG_TIME_ASCII",
    728  1.1.1.5  christos   "VAR_ROUND_ROBIN", "VAR_MINIMAL_RESPONSES", "VAR_CONFINE_TO_ZONE",
    729  1.1.1.5  christos   "VAR_REFUSE_ANY", "VAR_ZONEFILES_CHECK", "VAR_ZONEFILES_WRITE",
    730  1.1.1.5  christos   "VAR_RRL_SIZE", "VAR_RRL_RATELIMIT", "VAR_RRL_SLIP",
    731      1.1  christos   "VAR_RRL_IPV4_PREFIX_LENGTH", "VAR_RRL_IPV6_PREFIX_LENGTH",
    732  1.1.1.5  christos   "VAR_RRL_WHITELIST_RATELIMIT", "VAR_TLS_SERVICE_KEY",
    733  1.1.1.5  christos   "VAR_TLS_SERVICE_PEM", "VAR_TLS_SERVICE_OCSP", "VAR_TLS_PORT",
    734  1.1.1.6  christos   "VAR_CPU_AFFINITY", "VAR_XFRD_CPU_AFFINITY", "VAR_SERVER_CPU_AFFINITY",
    735  1.1.1.6  christos   "VAR_DROP_UPDATES", "VAR_DNSTAP", "VAR_DNSTAP_ENABLE",
    736  1.1.1.6  christos   "VAR_DNSTAP_SOCKET_PATH", "VAR_DNSTAP_SEND_IDENTITY",
    737  1.1.1.6  christos   "VAR_DNSTAP_SEND_VERSION", "VAR_DNSTAP_IDENTITY", "VAR_DNSTAP_VERSION",
    738  1.1.1.3     prlw1   "VAR_DNSTAP_LOG_AUTH_QUERY_MESSAGES",
    739  1.1.1.5  christos   "VAR_DNSTAP_LOG_AUTH_RESPONSE_MESSAGES", "VAR_REMOTE_CONTROL",
    740  1.1.1.5  christos   "VAR_CONTROL_ENABLE", "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT",
    741  1.1.1.5  christos   "VAR_SERVER_KEY_FILE", "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE",
    742  1.1.1.5  christos   "VAR_CONTROL_CERT_FILE", "VAR_KEY", "VAR_ALGORITHM", "VAR_SECRET",
    743  1.1.1.5  christos   "VAR_PATTERN", "VAR_NAME", "VAR_ZONEFILE", "VAR_NOTIFY",
    744  1.1.1.5  christos   "VAR_PROVIDE_XFR", "VAR_AXFR", "VAR_UDP", "VAR_NOTIFY_RETRY",
    745  1.1.1.5  christos   "VAR_ALLOW_NOTIFY", "VAR_REQUEST_XFR", "VAR_ALLOW_AXFR_FALLBACK",
    746  1.1.1.5  christos   "VAR_OUTGOING_INTERFACE", "VAR_MAX_REFRESH_TIME", "VAR_MIN_REFRESH_TIME",
    747  1.1.1.6  christos   "VAR_MAX_RETRY_TIME", "VAR_MIN_RETRY_TIME", "VAR_MIN_EXPIRE_TIME",
    748  1.1.1.6  christos   "VAR_MULTI_MASTER_CHECK", "VAR_SIZE_LIMIT_XFR", "VAR_ZONESTATS",
    749  1.1.1.6  christos   "VAR_INCLUDE_PATTERN", "VAR_ZONE", "VAR_RRL_WHITELIST", "VAR_SERVERS",
    750  1.1.1.6  christos   "VAR_BINDTODEVICE", "VAR_SETFIB", "$accept", "blocks", "block", "server",
    751  1.1.1.6  christos   "server_block", "server_option", "$@1", "socket_options",
    752  1.1.1.6  christos   "socket_option", "cpus", "service_cpu_affinity", "dnstap",
    753  1.1.1.6  christos   "dnstap_block", "dnstap_option", "remote_control",
    754  1.1.1.6  christos   "remote_control_block", "remote_control_option", "key", "$@2",
    755  1.1.1.6  christos   "key_block", "key_option", "zone", "$@3", "zone_block", "zone_option",
    756  1.1.1.6  christos   "pattern", "$@4", "pattern_block", "pattern_option",
    757  1.1.1.6  christos   "pattern_or_zone_option", "ip_address", "number", "boolean", YY_NULLPTR
    758      1.1  christos };
    759      1.1  christos #endif
    760      1.1  christos 
    761      1.1  christos # ifdef YYPRINT
    762      1.1  christos /* YYTOKNUM[NUM] -- (External) token number corresponding to the
    763      1.1  christos    (internal) symbol number NUM (which must be that of a token).  */
    764      1.1  christos static const yytype_uint16 yytoknum[] =
    765      1.1  christos {
    766      1.1  christos        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
    767      1.1  christos      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
    768      1.1  christos      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
    769      1.1  christos      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
    770      1.1  christos      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
    771      1.1  christos      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
    772      1.1  christos      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
    773      1.1  christos      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
    774  1.1.1.2  christos      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
    775  1.1.1.3     prlw1      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
    776  1.1.1.6  christos      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
    777  1.1.1.6  christos      365,   366,   367
    778      1.1  christos };
    779      1.1  christos # endif
    780      1.1  christos 
    781  1.1.1.6  christos #define YYPACT_NINF -92
    782      1.1  christos 
    783      1.1  christos #define yypact_value_is_default(Yystate) \
    784  1.1.1.6  christos   (!!((Yystate) == (-92)))
    785      1.1  christos 
    786      1.1  christos #define YYTABLE_NINF -1
    787      1.1  christos 
    788      1.1  christos #define yytable_value_is_error(Yytable_value) \
    789      1.1  christos   0
    790      1.1  christos 
    791      1.1  christos   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    792      1.1  christos      STATE-NUM.  */
    793      1.1  christos static const yytype_int16 yypact[] =
    794      1.1  christos {
    795  1.1.1.6  christos      -92,    32,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    796  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   263,    52,    51,   -92,
    797  1.1.1.6  christos      -92,   -92,    -1,     0,     6,     6,     6,    -1,    -1,     6,
    798  1.1.1.6  christos        6,     6,     6,     6,    -1,     6,    -1,    11,    13,    14,
    799  1.1.1.6  christos       19,    22,    23,     6,    24,    25,    27,    28,     6,     6,
    800  1.1.1.6  christos       30,    31,    34,    -1,     6,    -1,    -1,    -1,    -1,    -1,
    801  1.1.1.6  christos       -1,    -1,    -1,     6,     6,     6,     6,     6,     6,    -1,
    802  1.1.1.6  christos       -1,    -1,    -1,    -1,    -1,    -1,    41,    44,    45,    -1,
    803  1.1.1.6  christos      -92,   -92,   -92,     6,   -92,    -1,     6,    46,     6,     6,
    804  1.1.1.6  christos       48,    50,     6,     6,   -92,     6,     0,    -1,    53,    54,
    805  1.1.1.6  christos       56,    57,   -92,   -73,    47,    85,   -92,   -92,   -92,   -92,
    806  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    807  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    808  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    809  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    810  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    811  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,    59,   -92,   -92,
    812  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    813  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,    62,    63,    66,   -92,    69,
    814  1.1.1.6  christos       78,    79,    80,    -1,    81,     8,     6,    82,    -1,    -1,
    815  1.1.1.6  christos       -1,    -1,    83,     6,    -1,    91,    92,    93,   -92,   -92,
    816  1.1.1.6  christos       95,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    817  1.1.1.6  christos       99,   101,   -92,   102,   103,   104,   106,   -92,   -92,   -92,
    818  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    819  1.1.1.6  christos      -91,   -92,   -92,   -92,   -92,   107,   108,   109,     6,    -1,
    820  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92
    821      1.1  christos };
    822      1.1  christos 
    823      1.1  christos   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
    824      1.1  christos      Performed when YYTABLE does not specify something else to do.  Zero
    825      1.1  christos      means the default is an error.  */
    826      1.1  christos static const yytype_uint8 yydefact[] =
    827      1.1  christos {
    828  1.1.1.6  christos        2,     0,     1,    12,    86,    97,   105,   118,   112,     3,
    829  1.1.1.6  christos        4,     5,     6,     7,     9,     8,    10,    84,    95,   108,
    830  1.1.1.6  christos      121,   115,     0,     0,     0,     0,     0,     0,     0,     0,
    831      1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    832      1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    833      1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    834      1.1  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    835  1.1.1.5  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    836  1.1.1.6  christos       80,    82,    83,     0,    11,     0,     0,     0,     0,     0,
    837  1.1.1.6  christos        0,     0,     0,     0,    85,     0,     0,     0,     0,     0,
    838  1.1.1.6  christos        0,     0,    96,   106,   119,   113,   145,    15,   144,    13,
    839  1.1.1.6  christos      146,    16,    17,    45,    18,    19,    20,    25,    26,    27,
    840  1.1.1.6  christos       28,    44,    21,    55,    48,    47,    49,    50,    29,    33,
    841  1.1.1.6  christos       34,    43,    51,    52,    53,    22,    23,    31,    30,    32,
    842  1.1.1.6  christos       35,    36,    37,    38,    39,    40,    41,    42,    46,    54,
    843  1.1.1.6  christos       64,    65,    66,    67,    68,    62,    63,    56,    57,    58,
    844  1.1.1.6  christos       59,    60,    61,    69,    71,    70,    72,    73,    24,    74,
    845  1.1.1.6  christos       87,    88,    89,    90,    91,    92,    93,    94,    98,    99,
    846  1.1.1.6  christos      100,   101,   102,   103,   104,     0,     0,     0,   107,     0,
    847  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    848  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,     0,   120,   123,
    849  1.1.1.6  christos        0,   114,   117,    75,    81,   110,   111,   109,   122,   125,
    850  1.1.1.6  christos        0,     0,   138,     0,     0,     0,     0,   137,   136,   139,
    851  1.1.1.6  christos      140,   141,   142,   143,   128,   127,   126,   129,   124,   116,
    852  1.1.1.6  christos       14,   134,   135,   133,   130,     0,     0,     0,     0,     0,
    853  1.1.1.6  christos       76,   131,   132,    77,    78,    79
    854      1.1  christos };
    855      1.1  christos 
    856      1.1  christos   /* YYPGOTO[NTERM-NUM].  */
    857  1.1.1.2  christos static const yytype_int8 yypgoto[] =
    858      1.1  christos {
    859  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    860  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
    861  1.1.1.6  christos      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -70,
    862  1.1.1.6  christos      -46,    18,   -25
    863      1.1  christos };
    864      1.1  christos 
    865      1.1  christos   /* YYDEFGOTO[NTERM-NUM].  */
    866      1.1  christos static const yytype_int16 yydefgoto[] =
    867      1.1  christos {
    868  1.1.1.6  christos       -1,     1,     9,    10,    16,    84,   213,   240,   250,   167,
    869  1.1.1.6  christos       85,    11,    17,    94,    12,    18,   102,    13,    19,   103,
    870  1.1.1.6  christos      188,    14,    21,   105,   211,    15,    20,   104,   208,   209,
    871  1.1.1.6  christos      109,   107,   111
    872      1.1  christos };
    873      1.1  christos 
    874      1.1  christos   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
    875      1.1  christos      positive, shift that token.  If negative, reduce the rule whose
    876      1.1  christos      number is the opposite.  If YYTABLE_NINF, syntax error.  */
    877  1.1.1.5  christos static const yytype_uint8 yytable[] =
    878      1.1  christos {
    879  1.1.1.6  christos      112,   113,   106,   108,   116,   117,   118,   119,   120,   110,
    880  1.1.1.6  christos      122,   224,   185,   186,   124,   187,   125,   126,   130,   247,
    881  1.1.1.6  christos      248,   249,   127,   135,   136,   128,   129,   131,   132,   141,
    882  1.1.1.6  christos      133,   134,     2,   137,   138,   212,     3,   139,   150,   151,
    883  1.1.1.6  christos      152,   153,   154,   155,   163,   114,   115,   164,   165,   171,
    884  1.1.1.6  christos      179,   174,   121,   175,   123,     0,   181,   182,   168,   183,
    885  1.1.1.6  christos      184,   170,   214,   172,   173,   215,   216,   176,   177,   217,
    886  1.1.1.6  christos      178,   140,   218,   142,   143,   144,   145,   146,   147,   148,
    887  1.1.1.6  christos      149,   219,   220,   221,   223,   228,   233,   156,   157,   158,
    888  1.1.1.6  christos      159,   160,   161,   162,   236,   237,   238,   166,   239,     4,
    889  1.1.1.6  christos      225,   226,   241,   169,   242,   243,   244,   245,     5,   246,
    890  1.1.1.6  christos      251,   252,   253,     0,     0,   180,     6,     0,     0,     7,
    891  1.1.1.6  christos       86,    87,    88,    89,    90,    91,    92,    93,    95,    96,
    892  1.1.1.6  christos       97,    98,    99,   100,   101,   189,   190,   191,   192,     0,
    893  1.1.1.6  christos        8,   193,   194,   195,   196,   197,   198,   199,   200,   201,
    894  1.1.1.6  christos      202,   203,   204,   205,   206,     0,   207,     0,     0,     0,
    895  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    896  1.1.1.6  christos        0,   227,     0,   210,   190,   191,   192,     0,   234,   193,
    897  1.1.1.6  christos      194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
    898  1.1.1.6  christos      204,   205,   206,     0,   207,     0,     0,     0,     0,     0,
    899  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    900  1.1.1.6  christos        0,   222,     0,     0,     0,     0,   229,   230,   231,   232,
    901  1.1.1.6  christos        0,     0,   235,   254,     0,     0,     0,     0,     0,     0,
    902  1.1.1.5  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    903  1.1.1.5  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    904  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
    905  1.1.1.6  christos        0,     0,     0,     0,     0,     0,     0,   255,    22,    23,
    906  1.1.1.6  christos       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
    907  1.1.1.6  christos       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
    908  1.1.1.6  christos       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
    909  1.1.1.6  christos       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
    910  1.1.1.6  christos       64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
    911  1.1.1.6  christos       74,    75,    76,    77,    78,    79,    80,    81,    82,    83
    912      1.1  christos };
    913      1.1  christos 
    914  1.1.1.5  christos static const yytype_int16 yycheck[] =
    915      1.1  christos {
    916  1.1.1.5  christos       25,    26,     3,     3,    29,    30,    31,    32,    33,     3,
    917  1.1.1.6  christos       35,     3,    85,    86,     3,    88,     3,     3,    43,   110,
    918  1.1.1.6  christos      111,   112,     3,    48,    49,     3,     3,     3,     3,    54,
    919  1.1.1.6  christos        3,     3,     0,     3,     3,   105,     4,     3,    63,    64,
    920  1.1.1.6  christos       65,    66,    67,    68,     3,    27,    28,     3,     3,     3,
    921  1.1.1.6  christos       96,     3,    34,     3,    36,    -1,     3,     3,    83,     3,
    922  1.1.1.6  christos        3,    86,     3,    88,    89,     3,     3,    92,    93,     3,
    923  1.1.1.6  christos       95,    53,     3,    55,    56,    57,    58,    59,    60,    61,
    924  1.1.1.6  christos       62,     3,     3,     3,     3,     3,     3,    69,    70,    71,
    925  1.1.1.6  christos       72,    73,    74,    75,     3,     3,     3,    79,     3,    67,
    926  1.1.1.6  christos       92,    93,     3,    85,     3,     3,     3,     3,    76,     3,
    927  1.1.1.6  christos        3,     3,     3,    -1,    -1,    97,    84,    -1,    -1,    87,
    928  1.1.1.6  christos       68,    69,    70,    71,    72,    73,    74,    75,    77,    78,
    929  1.1.1.6  christos       79,    80,    81,    82,    83,    88,    89,    90,    91,    -1,
    930  1.1.1.6  christos      108,    94,    95,    96,    97,    98,    99,   100,   101,   102,
    931  1.1.1.6  christos      103,   104,   105,   106,   107,    -1,   109,    -1,    -1,    -1,
    932  1.1.1.5  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    933  1.1.1.6  christos       -1,   196,    -1,    88,    89,    90,    91,    -1,   203,    94,
    934  1.1.1.6  christos       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
    935  1.1.1.6  christos      105,   106,   107,    -1,   109,    -1,    -1,    -1,    -1,    -1,
    936  1.1.1.5  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    937  1.1.1.6  christos       -1,   193,    -1,    -1,    -1,    -1,   198,   199,   200,   201,
    938  1.1.1.6  christos       -1,    -1,   204,   248,    -1,    -1,    -1,    -1,    -1,    -1,
    939  1.1.1.6  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    940  1.1.1.6  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    941  1.1.1.6  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
    942  1.1.1.6  christos       -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,     5,     6,
    943  1.1.1.6  christos        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
    944  1.1.1.6  christos       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
    945  1.1.1.6  christos       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
    946  1.1.1.6  christos       37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
    947  1.1.1.6  christos       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
    948  1.1.1.6  christos       57,    58,    59,    60,    61,    62,    63,    64,    65,    66
    949      1.1  christos };
    950      1.1  christos 
    951      1.1  christos   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    952      1.1  christos      symbol of state STATE-NUM.  */
    953      1.1  christos static const yytype_uint8 yystos[] =
    954      1.1  christos {
    955  1.1.1.6  christos        0,   114,     0,     4,    67,    76,    84,    87,   108,   115,
    956  1.1.1.6  christos      116,   124,   127,   130,   134,   138,   117,   125,   128,   131,
    957  1.1.1.6  christos      139,   135,     5,     6,     7,     8,     9,    10,    11,    12,
    958  1.1.1.5  christos       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
    959  1.1.1.5  christos       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
    960  1.1.1.5  christos       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
    961  1.1.1.5  christos       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
    962  1.1.1.6  christos       53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
    963  1.1.1.6  christos       63,    64,    65,    66,   118,   123,    68,    69,    70,    71,
    964  1.1.1.6  christos       72,    73,    74,    75,   126,    77,    78,    79,    80,    81,
    965  1.1.1.6  christos       82,    83,   129,   132,   140,   136,     3,   144,     3,   143,
    966  1.1.1.6  christos        3,   145,   145,   145,   144,   144,   145,   145,   145,   145,
    967  1.1.1.6  christos      145,   144,   145,   144,     3,     3,     3,     3,     3,     3,
    968  1.1.1.6  christos      145,     3,     3,     3,     3,   145,   145,     3,     3,     3,
    969  1.1.1.6  christos      144,   145,   144,   144,   144,   144,   144,   144,   144,   144,
    970  1.1.1.6  christos      145,   145,   145,   145,   145,   145,   144,   144,   144,   144,
    971  1.1.1.6  christos      144,   144,   144,     3,     3,     3,   144,   122,   145,   144,
    972  1.1.1.6  christos      145,     3,   145,   145,     3,     3,   145,   145,   145,   143,
    973  1.1.1.6  christos      144,     3,     3,     3,     3,    85,    86,    88,   133,    88,
    974  1.1.1.6  christos       89,    90,    91,    94,    95,    96,    97,    98,    99,   100,
    975  1.1.1.6  christos      101,   102,   103,   104,   105,   106,   107,   109,   141,   142,
    976  1.1.1.6  christos       88,   137,   142,   119,     3,     3,     3,     3,     3,     3,
    977  1.1.1.6  christos        3,     3,   144,     3,     3,    92,    93,   145,     3,   144,
    978  1.1.1.6  christos      144,   144,   144,     3,   145,   144,     3,     3,     3,     3,
    979  1.1.1.6  christos      120,     3,     3,     3,     3,     3,     3,   110,   111,   112,
    980  1.1.1.6  christos      121,     3,     3,     3,   145,   144
    981      1.1  christos };
    982      1.1  christos 
    983      1.1  christos   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
    984      1.1  christos static const yytype_uint8 yyr1[] =
    985      1.1  christos {
    986  1.1.1.6  christos        0,   113,   114,   114,   115,   115,   115,   115,   115,   115,
    987  1.1.1.6  christos      116,   117,   117,   119,   118,   118,   118,   118,   118,   118,
    988  1.1.1.6  christos      118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
    989  1.1.1.6  christos      118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
    990  1.1.1.6  christos      118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
    991  1.1.1.6  christos      118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
    992  1.1.1.6  christos      118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
    993  1.1.1.6  christos      118,   118,   118,   118,   118,   120,   120,   121,   121,   121,
    994  1.1.1.6  christos      122,   122,   123,   123,   124,   125,   125,   126,   126,   126,
    995  1.1.1.6  christos      126,   126,   126,   126,   126,   127,   128,   128,   129,   129,
    996  1.1.1.6  christos      129,   129,   129,   129,   129,   131,   130,   132,   132,   133,
    997  1.1.1.6  christos      133,   133,   135,   134,   136,   136,   137,   137,   139,   138,
    998  1.1.1.6  christos      140,   140,   141,   141,   142,   142,   142,   142,   142,   142,
    999  1.1.1.6  christos      142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
   1000  1.1.1.6  christos      142,   142,   142,   142,   143,   144,   145
   1001      1.1  christos };
   1002      1.1  christos 
   1003      1.1  christos   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
   1004      1.1  christos static const yytype_uint8 yyr2[] =
   1005      1.1  christos {
   1006  1.1.1.5  christos        0,     2,     0,     2,     1,     1,     1,     1,     1,     1,
   1007  1.1.1.6  christos        2,     2,     0,     0,     4,     2,     2,     2,     2,     2,
   1008      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1009      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1010      1.1  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1011  1.1.1.5  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1012  1.1.1.5  christos        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
   1013  1.1.1.6  christos        2,     2,     2,     2,     2,     0,     2,     2,     2,     2,
   1014  1.1.1.6  christos        0,     2,     1,     1,     2,     2,     0,     2,     2,     2,
   1015  1.1.1.6  christos        2,     2,     2,     2,     2,     2,     2,     0,     2,     2,
   1016  1.1.1.6  christos        2,     2,     2,     2,     2,     0,     3,     2,     0,     2,
   1017  1.1.1.6  christos        2,     2,     0,     3,     2,     0,     2,     1,     0,     3,
   1018  1.1.1.6  christos        2,     0,     2,     1,     2,     2,     2,     2,     2,     2,
   1019  1.1.1.6  christos        3,     4,     4,     3,     3,     3,     2,     2,     2,     2,
   1020  1.1.1.6  christos        2,     2,     2,     2,     1,     1,     1
   1021      1.1  christos };
   1022      1.1  christos 
   1023      1.1  christos 
   1024      1.1  christos #define yyerrok         (yyerrstatus = 0)
   1025      1.1  christos #define yyclearin       (yychar = YYEMPTY)
   1026      1.1  christos #define YYEMPTY         (-2)
   1027      1.1  christos #define YYEOF           0
   1028      1.1  christos 
   1029      1.1  christos #define YYACCEPT        goto yyacceptlab
   1030      1.1  christos #define YYABORT         goto yyabortlab
   1031      1.1  christos #define YYERROR         goto yyerrorlab
   1032      1.1  christos 
   1033      1.1  christos 
   1034      1.1  christos #define YYRECOVERING()  (!!yyerrstatus)
   1035      1.1  christos 
   1036  1.1.1.6  christos #define YYBACKUP(Token, Value)                                    \
   1037  1.1.1.6  christos   do                                                              \
   1038  1.1.1.6  christos     if (yychar == YYEMPTY)                                        \
   1039  1.1.1.6  christos       {                                                           \
   1040  1.1.1.6  christos         yychar = (Token);                                         \
   1041  1.1.1.6  christos         yylval = (Value);                                         \
   1042  1.1.1.6  christos         YYPOPSTACK (yylen);                                       \
   1043  1.1.1.6  christos         yystate = *yyssp;                                         \
   1044  1.1.1.6  christos         goto yybackup;                                            \
   1045  1.1.1.6  christos       }                                                           \
   1046  1.1.1.6  christos     else                                                          \
   1047  1.1.1.6  christos       {                                                           \
   1048  1.1.1.6  christos         yyerror (YY_("syntax error: cannot back up")); \
   1049  1.1.1.6  christos         YYERROR;                                                  \
   1050  1.1.1.6  christos       }                                                           \
   1051  1.1.1.6  christos   while (0)
   1052      1.1  christos 
   1053      1.1  christos /* Error token number */
   1054      1.1  christos #define YYTERROR        1
   1055      1.1  christos #define YYERRCODE       256
   1056      1.1  christos 
   1057      1.1  christos 
   1058      1.1  christos 
   1059      1.1  christos /* Enable debugging if requested.  */
   1060      1.1  christos #if YYDEBUG
   1061      1.1  christos 
   1062      1.1  christos # ifndef YYFPRINTF
   1063      1.1  christos #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
   1064      1.1  christos #  define YYFPRINTF fprintf
   1065      1.1  christos # endif
   1066      1.1  christos 
   1067      1.1  christos # define YYDPRINTF(Args)                        \
   1068      1.1  christos do {                                            \
   1069      1.1  christos   if (yydebug)                                  \
   1070      1.1  christos     YYFPRINTF Args;                             \
   1071      1.1  christos } while (0)
   1072      1.1  christos 
   1073      1.1  christos /* This macro is provided for backward compatibility. */
   1074      1.1  christos #ifndef YY_LOCATION_PRINT
   1075      1.1  christos # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
   1076      1.1  christos #endif
   1077      1.1  christos 
   1078      1.1  christos 
   1079      1.1  christos # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
   1080      1.1  christos do {                                                                      \
   1081      1.1  christos   if (yydebug)                                                            \
   1082      1.1  christos     {                                                                     \
   1083      1.1  christos       YYFPRINTF (stderr, "%s ", Title);                                   \
   1084      1.1  christos       yy_symbol_print (stderr,                                            \
   1085      1.1  christos                   Type, Value); \
   1086      1.1  christos       YYFPRINTF (stderr, "\n");                                           \
   1087      1.1  christos     }                                                                     \
   1088      1.1  christos } while (0)
   1089      1.1  christos 
   1090      1.1  christos 
   1091  1.1.1.6  christos /*-----------------------------------.
   1092  1.1.1.6  christos | Print this symbol's value on YYO.  |
   1093  1.1.1.6  christos `-----------------------------------*/
   1094      1.1  christos 
   1095      1.1  christos static void
   1096  1.1.1.6  christos yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
   1097      1.1  christos {
   1098  1.1.1.6  christos   FILE *yyoutput = yyo;
   1099  1.1.1.6  christos   YYUSE (yyoutput);
   1100      1.1  christos   if (!yyvaluep)
   1101      1.1  christos     return;
   1102      1.1  christos # ifdef YYPRINT
   1103      1.1  christos   if (yytype < YYNTOKENS)
   1104  1.1.1.6  christos     YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
   1105      1.1  christos # endif
   1106      1.1  christos   YYUSE (yytype);
   1107      1.1  christos }
   1108      1.1  christos 
   1109      1.1  christos 
   1110  1.1.1.6  christos /*---------------------------.
   1111  1.1.1.6  christos | Print this symbol on YYO.  |
   1112  1.1.1.6  christos `---------------------------*/
   1113      1.1  christos 
   1114      1.1  christos static void
   1115  1.1.1.6  christos yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
   1116      1.1  christos {
   1117  1.1.1.6  christos   YYFPRINTF (yyo, "%s %s (",
   1118      1.1  christos              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
   1119      1.1  christos 
   1120  1.1.1.6  christos   yy_symbol_value_print (yyo, yytype, yyvaluep);
   1121  1.1.1.6  christos   YYFPRINTF (yyo, ")");
   1122      1.1  christos }
   1123      1.1  christos 
   1124      1.1  christos /*------------------------------------------------------------------.
   1125      1.1  christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
   1126      1.1  christos | TOP (included).                                                   |
   1127      1.1  christos `------------------------------------------------------------------*/
   1128      1.1  christos 
   1129      1.1  christos static void
   1130      1.1  christos yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
   1131      1.1  christos {
   1132      1.1  christos   YYFPRINTF (stderr, "Stack now");
   1133      1.1  christos   for (; yybottom <= yytop; yybottom++)
   1134      1.1  christos     {
   1135      1.1  christos       int yybot = *yybottom;
   1136      1.1  christos       YYFPRINTF (stderr, " %d", yybot);
   1137      1.1  christos     }
   1138      1.1  christos   YYFPRINTF (stderr, "\n");
   1139      1.1  christos }
   1140      1.1  christos 
   1141      1.1  christos # define YY_STACK_PRINT(Bottom, Top)                            \
   1142      1.1  christos do {                                                            \
   1143      1.1  christos   if (yydebug)                                                  \
   1144      1.1  christos     yy_stack_print ((Bottom), (Top));                           \
   1145      1.1  christos } while (0)
   1146      1.1  christos 
   1147      1.1  christos 
   1148      1.1  christos /*------------------------------------------------.
   1149      1.1  christos | Report that the YYRULE is going to be reduced.  |
   1150      1.1  christos `------------------------------------------------*/
   1151      1.1  christos 
   1152      1.1  christos static void
   1153      1.1  christos yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
   1154      1.1  christos {
   1155  1.1.1.6  christos   unsigned long yylno = yyrline[yyrule];
   1156      1.1  christos   int yynrhs = yyr2[yyrule];
   1157      1.1  christos   int yyi;
   1158      1.1  christos   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
   1159      1.1  christos              yyrule - 1, yylno);
   1160      1.1  christos   /* The symbols being reduced.  */
   1161      1.1  christos   for (yyi = 0; yyi < yynrhs; yyi++)
   1162      1.1  christos     {
   1163      1.1  christos       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
   1164      1.1  christos       yy_symbol_print (stderr,
   1165      1.1  christos                        yystos[yyssp[yyi + 1 - yynrhs]],
   1166  1.1.1.6  christos                        &yyvsp[(yyi + 1) - (yynrhs)]
   1167      1.1  christos                                               );
   1168      1.1  christos       YYFPRINTF (stderr, "\n");
   1169      1.1  christos     }
   1170      1.1  christos }
   1171      1.1  christos 
   1172      1.1  christos # define YY_REDUCE_PRINT(Rule)          \
   1173      1.1  christos do {                                    \
   1174      1.1  christos   if (yydebug)                          \
   1175      1.1  christos     yy_reduce_print (yyssp, yyvsp, Rule); \
   1176      1.1  christos } while (0)
   1177      1.1  christos 
   1178      1.1  christos /* Nonzero means print parse trace.  It is left uninitialized so that
   1179      1.1  christos    multiple parsers can coexist.  */
   1180      1.1  christos int yydebug;
   1181      1.1  christos #else /* !YYDEBUG */
   1182      1.1  christos # define YYDPRINTF(Args)
   1183      1.1  christos # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
   1184      1.1  christos # define YY_STACK_PRINT(Bottom, Top)
   1185      1.1  christos # define YY_REDUCE_PRINT(Rule)
   1186      1.1  christos #endif /* !YYDEBUG */
   1187      1.1  christos 
   1188      1.1  christos 
   1189      1.1  christos /* YYINITDEPTH -- initial size of the parser's stacks.  */
   1190      1.1  christos #ifndef YYINITDEPTH
   1191      1.1  christos # define YYINITDEPTH 200
   1192      1.1  christos #endif
   1193      1.1  christos 
   1194      1.1  christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
   1195      1.1  christos    if the built-in stack extension method is used).
   1196      1.1  christos 
   1197      1.1  christos    Do not make this value too large; the results are undefined if
   1198      1.1  christos    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
   1199      1.1  christos    evaluated with infinite-precision integer arithmetic.  */
   1200      1.1  christos 
   1201      1.1  christos #ifndef YYMAXDEPTH
   1202      1.1  christos # define YYMAXDEPTH 10000
   1203      1.1  christos #endif
   1204      1.1  christos 
   1205      1.1  christos 
   1206      1.1  christos #if YYERROR_VERBOSE
   1207      1.1  christos 
   1208      1.1  christos # ifndef yystrlen
   1209      1.1  christos #  if defined __GLIBC__ && defined _STRING_H
   1210      1.1  christos #   define yystrlen strlen
   1211      1.1  christos #  else
   1212      1.1  christos /* Return the length of YYSTR.  */
   1213      1.1  christos static YYSIZE_T
   1214      1.1  christos yystrlen (const char *yystr)
   1215      1.1  christos {
   1216      1.1  christos   YYSIZE_T yylen;
   1217      1.1  christos   for (yylen = 0; yystr[yylen]; yylen++)
   1218      1.1  christos     continue;
   1219      1.1  christos   return yylen;
   1220      1.1  christos }
   1221      1.1  christos #  endif
   1222      1.1  christos # endif
   1223      1.1  christos 
   1224      1.1  christos # ifndef yystpcpy
   1225      1.1  christos #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
   1226      1.1  christos #   define yystpcpy stpcpy
   1227      1.1  christos #  else
   1228      1.1  christos /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
   1229      1.1  christos    YYDEST.  */
   1230      1.1  christos static char *
   1231      1.1  christos yystpcpy (char *yydest, const char *yysrc)
   1232      1.1  christos {
   1233      1.1  christos   char *yyd = yydest;
   1234      1.1  christos   const char *yys = yysrc;
   1235      1.1  christos 
   1236      1.1  christos   while ((*yyd++ = *yys++) != '\0')
   1237      1.1  christos     continue;
   1238      1.1  christos 
   1239      1.1  christos   return yyd - 1;
   1240      1.1  christos }
   1241      1.1  christos #  endif
   1242      1.1  christos # endif
   1243      1.1  christos 
   1244      1.1  christos # ifndef yytnamerr
   1245      1.1  christos /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
   1246      1.1  christos    quotes and backslashes, so that it's suitable for yyerror.  The
   1247      1.1  christos    heuristic is that double-quoting is unnecessary unless the string
   1248      1.1  christos    contains an apostrophe, a comma, or backslash (other than
   1249      1.1  christos    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
   1250      1.1  christos    null, do not copy; instead, return the length of what the result
   1251      1.1  christos    would have been.  */
   1252      1.1  christos static YYSIZE_T
   1253      1.1  christos yytnamerr (char *yyres, const char *yystr)
   1254      1.1  christos {
   1255      1.1  christos   if (*yystr == '"')
   1256      1.1  christos     {
   1257      1.1  christos       YYSIZE_T yyn = 0;
   1258      1.1  christos       char const *yyp = yystr;
   1259      1.1  christos 
   1260      1.1  christos       for (;;)
   1261      1.1  christos         switch (*++yyp)
   1262      1.1  christos           {
   1263      1.1  christos           case '\'':
   1264      1.1  christos           case ',':
   1265      1.1  christos             goto do_not_strip_quotes;
   1266      1.1  christos 
   1267      1.1  christos           case '\\':
   1268      1.1  christos             if (*++yyp != '\\')
   1269      1.1  christos               goto do_not_strip_quotes;
   1270  1.1.1.6  christos             else
   1271  1.1.1.6  christos               goto append;
   1272  1.1.1.6  christos 
   1273  1.1.1.6  christos           append:
   1274      1.1  christos           default:
   1275      1.1  christos             if (yyres)
   1276      1.1  christos               yyres[yyn] = *yyp;
   1277      1.1  christos             yyn++;
   1278      1.1  christos             break;
   1279      1.1  christos 
   1280      1.1  christos           case '"':
   1281      1.1  christos             if (yyres)
   1282      1.1  christos               yyres[yyn] = '\0';
   1283      1.1  christos             return yyn;
   1284      1.1  christos           }
   1285      1.1  christos     do_not_strip_quotes: ;
   1286      1.1  christos     }
   1287      1.1  christos 
   1288      1.1  christos   if (! yyres)
   1289      1.1  christos     return yystrlen (yystr);
   1290      1.1  christos 
   1291  1.1.1.6  christos   return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
   1292      1.1  christos }
   1293      1.1  christos # endif
   1294      1.1  christos 
   1295      1.1  christos /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
   1296      1.1  christos    about the unexpected token YYTOKEN for the state stack whose top is
   1297      1.1  christos    YYSSP.
   1298      1.1  christos 
   1299      1.1  christos    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
   1300      1.1  christos    not large enough to hold the message.  In that case, also set
   1301      1.1  christos    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
   1302      1.1  christos    required number of bytes is too large to store.  */
   1303      1.1  christos static int
   1304      1.1  christos yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
   1305      1.1  christos                 yytype_int16 *yyssp, int yytoken)
   1306      1.1  christos {
   1307      1.1  christos   YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
   1308      1.1  christos   YYSIZE_T yysize = yysize0;
   1309      1.1  christos   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
   1310      1.1  christos   /* Internationalized format string. */
   1311      1.1  christos   const char *yyformat = YY_NULLPTR;
   1312      1.1  christos   /* Arguments of yyformat. */
   1313      1.1  christos   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
   1314      1.1  christos   /* Number of reported tokens (one for the "unexpected", one per
   1315      1.1  christos      "expected"). */
   1316      1.1  christos   int yycount = 0;
   1317      1.1  christos 
   1318      1.1  christos   /* There are many possibilities here to consider:
   1319      1.1  christos      - If this state is a consistent state with a default action, then
   1320      1.1  christos        the only way this function was invoked is if the default action
   1321      1.1  christos        is an error action.  In that case, don't check for expected
   1322      1.1  christos        tokens because there are none.
   1323      1.1  christos      - The only way there can be no lookahead present (in yychar) is if
   1324      1.1  christos        this state is a consistent state with a default action.  Thus,
   1325      1.1  christos        detecting the absence of a lookahead is sufficient to determine
   1326      1.1  christos        that there is no unexpected or expected token to report.  In that
   1327      1.1  christos        case, just report a simple "syntax error".
   1328      1.1  christos      - Don't assume there isn't a lookahead just because this state is a
   1329      1.1  christos        consistent state with a default action.  There might have been a
   1330      1.1  christos        previous inconsistent state, consistent state with a non-default
   1331      1.1  christos        action, or user semantic action that manipulated yychar.
   1332      1.1  christos      - Of course, the expected token list depends on states to have
   1333      1.1  christos        correct lookahead information, and it depends on the parser not
   1334      1.1  christos        to perform extra reductions after fetching a lookahead from the
   1335      1.1  christos        scanner and before detecting a syntax error.  Thus, state merging
   1336      1.1  christos        (from LALR or IELR) and default reductions corrupt the expected
   1337      1.1  christos        token list.  However, the list is correct for canonical LR with
   1338      1.1  christos        one exception: it will still contain any token that will not be
   1339      1.1  christos        accepted due to an error action in a later state.
   1340      1.1  christos   */
   1341      1.1  christos   if (yytoken != YYEMPTY)
   1342      1.1  christos     {
   1343      1.1  christos       int yyn = yypact[*yyssp];
   1344      1.1  christos       yyarg[yycount++] = yytname[yytoken];
   1345      1.1  christos       if (!yypact_value_is_default (yyn))
   1346      1.1  christos         {
   1347      1.1  christos           /* Start YYX at -YYN if negative to avoid negative indexes in
   1348      1.1  christos              YYCHECK.  In other words, skip the first -YYN actions for
   1349      1.1  christos              this state because they are default actions.  */
   1350      1.1  christos           int yyxbegin = yyn < 0 ? -yyn : 0;
   1351      1.1  christos           /* Stay within bounds of both yycheck and yytname.  */
   1352      1.1  christos           int yychecklim = YYLAST - yyn + 1;
   1353      1.1  christos           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
   1354      1.1  christos           int yyx;
   1355      1.1  christos 
   1356      1.1  christos           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
   1357      1.1  christos             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
   1358      1.1  christos                 && !yytable_value_is_error (yytable[yyx + yyn]))
   1359      1.1  christos               {
   1360      1.1  christos                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
   1361      1.1  christos                   {
   1362      1.1  christos                     yycount = 1;
   1363      1.1  christos                     yysize = yysize0;
   1364      1.1  christos                     break;
   1365      1.1  christos                   }
   1366      1.1  christos                 yyarg[yycount++] = yytname[yyx];
   1367      1.1  christos                 {
   1368      1.1  christos                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
   1369  1.1.1.6  christos                   if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
   1370  1.1.1.6  christos                     yysize = yysize1;
   1371  1.1.1.6  christos                   else
   1372      1.1  christos                     return 2;
   1373      1.1  christos                 }
   1374      1.1  christos               }
   1375      1.1  christos         }
   1376      1.1  christos     }
   1377      1.1  christos 
   1378      1.1  christos   switch (yycount)
   1379      1.1  christos     {
   1380      1.1  christos # define YYCASE_(N, S)                      \
   1381      1.1  christos       case N:                               \
   1382      1.1  christos         yyformat = S;                       \
   1383      1.1  christos       break
   1384  1.1.1.4  christos     default: /* Avoid compiler warnings. */
   1385      1.1  christos       YYCASE_(0, YY_("syntax error"));
   1386      1.1  christos       YYCASE_(1, YY_("syntax error, unexpected %s"));
   1387      1.1  christos       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
   1388      1.1  christos       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
   1389      1.1  christos       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
   1390      1.1  christos       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
   1391      1.1  christos # undef YYCASE_
   1392      1.1  christos     }
   1393      1.1  christos 
   1394      1.1  christos   {
   1395      1.1  christos     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
   1396  1.1.1.6  christos     if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
   1397  1.1.1.6  christos       yysize = yysize1;
   1398  1.1.1.6  christos     else
   1399      1.1  christos       return 2;
   1400      1.1  christos   }
   1401      1.1  christos 
   1402      1.1  christos   if (*yymsg_alloc < yysize)
   1403      1.1  christos     {
   1404      1.1  christos       *yymsg_alloc = 2 * yysize;
   1405      1.1  christos       if (! (yysize <= *yymsg_alloc
   1406      1.1  christos              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
   1407      1.1  christos         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
   1408      1.1  christos       return 1;
   1409      1.1  christos     }
   1410      1.1  christos 
   1411      1.1  christos   /* Avoid sprintf, as that infringes on the user's name space.
   1412      1.1  christos      Don't have undefined behavior even if the translation
   1413      1.1  christos      produced a string with the wrong number of "%s"s.  */
   1414      1.1  christos   {
   1415      1.1  christos     char *yyp = *yymsg;
   1416      1.1  christos     int yyi = 0;
   1417      1.1  christos     while ((*yyp = *yyformat) != '\0')
   1418      1.1  christos       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
   1419      1.1  christos         {
   1420      1.1  christos           yyp += yytnamerr (yyp, yyarg[yyi++]);
   1421      1.1  christos           yyformat += 2;
   1422      1.1  christos         }
   1423      1.1  christos       else
   1424      1.1  christos         {
   1425      1.1  christos           yyp++;
   1426      1.1  christos           yyformat++;
   1427      1.1  christos         }
   1428      1.1  christos   }
   1429      1.1  christos   return 0;
   1430      1.1  christos }
   1431      1.1  christos #endif /* YYERROR_VERBOSE */
   1432      1.1  christos 
   1433      1.1  christos /*-----------------------------------------------.
   1434      1.1  christos | Release the memory associated to this symbol.  |
   1435      1.1  christos `-----------------------------------------------*/
   1436      1.1  christos 
   1437      1.1  christos static void
   1438      1.1  christos yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
   1439      1.1  christos {
   1440      1.1  christos   YYUSE (yyvaluep);
   1441      1.1  christos   if (!yymsg)
   1442      1.1  christos     yymsg = "Deleting";
   1443      1.1  christos   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
   1444      1.1  christos 
   1445      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1446      1.1  christos   YYUSE (yytype);
   1447      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1448      1.1  christos }
   1449      1.1  christos 
   1450      1.1  christos 
   1451      1.1  christos 
   1452      1.1  christos 
   1453      1.1  christos /* The lookahead symbol.  */
   1454      1.1  christos int yychar;
   1455      1.1  christos 
   1456      1.1  christos /* The semantic value of the lookahead symbol.  */
   1457      1.1  christos YYSTYPE yylval;
   1458      1.1  christos /* Number of syntax errors so far.  */
   1459      1.1  christos int yynerrs;
   1460      1.1  christos 
   1461      1.1  christos 
   1462      1.1  christos /*----------.
   1463      1.1  christos | yyparse.  |
   1464      1.1  christos `----------*/
   1465      1.1  christos 
   1466      1.1  christos int
   1467      1.1  christos yyparse (void)
   1468      1.1  christos {
   1469      1.1  christos     int yystate;
   1470      1.1  christos     /* Number of tokens to shift before error messages enabled.  */
   1471      1.1  christos     int yyerrstatus;
   1472      1.1  christos 
   1473      1.1  christos     /* The stacks and their tools:
   1474      1.1  christos        'yyss': related to states.
   1475      1.1  christos        'yyvs': related to semantic values.
   1476      1.1  christos 
   1477      1.1  christos        Refer to the stacks through separate pointers, to allow yyoverflow
   1478      1.1  christos        to reallocate them elsewhere.  */
   1479      1.1  christos 
   1480      1.1  christos     /* The state stack.  */
   1481      1.1  christos     yytype_int16 yyssa[YYINITDEPTH];
   1482      1.1  christos     yytype_int16 *yyss;
   1483      1.1  christos     yytype_int16 *yyssp;
   1484      1.1  christos 
   1485      1.1  christos     /* The semantic value stack.  */
   1486      1.1  christos     YYSTYPE yyvsa[YYINITDEPTH];
   1487      1.1  christos     YYSTYPE *yyvs;
   1488      1.1  christos     YYSTYPE *yyvsp;
   1489      1.1  christos 
   1490      1.1  christos     YYSIZE_T yystacksize;
   1491      1.1  christos 
   1492      1.1  christos   int yyn;
   1493      1.1  christos   int yyresult;
   1494      1.1  christos   /* Lookahead token as an internal (translated) token number.  */
   1495      1.1  christos   int yytoken = 0;
   1496      1.1  christos   /* The variables used to return semantic value and location from the
   1497      1.1  christos      action routines.  */
   1498      1.1  christos   YYSTYPE yyval;
   1499      1.1  christos 
   1500      1.1  christos #if YYERROR_VERBOSE
   1501      1.1  christos   /* Buffer for error messages, and its allocated size.  */
   1502      1.1  christos   char yymsgbuf[128];
   1503      1.1  christos   char *yymsg = yymsgbuf;
   1504      1.1  christos   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
   1505      1.1  christos #endif
   1506      1.1  christos 
   1507      1.1  christos #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
   1508      1.1  christos 
   1509      1.1  christos   /* The number of symbols on the RHS of the reduced rule.
   1510      1.1  christos      Keep to zero when no symbol should be popped.  */
   1511      1.1  christos   int yylen = 0;
   1512      1.1  christos 
   1513      1.1  christos   yyssp = yyss = yyssa;
   1514      1.1  christos   yyvsp = yyvs = yyvsa;
   1515      1.1  christos   yystacksize = YYINITDEPTH;
   1516      1.1  christos 
   1517      1.1  christos   YYDPRINTF ((stderr, "Starting parse\n"));
   1518      1.1  christos 
   1519      1.1  christos   yystate = 0;
   1520      1.1  christos   yyerrstatus = 0;
   1521      1.1  christos   yynerrs = 0;
   1522      1.1  christos   yychar = YYEMPTY; /* Cause a token to be read.  */
   1523      1.1  christos   goto yysetstate;
   1524      1.1  christos 
   1525  1.1.1.6  christos 
   1526      1.1  christos /*------------------------------------------------------------.
   1527  1.1.1.6  christos | yynewstate -- push a new state, which is found in yystate.  |
   1528      1.1  christos `------------------------------------------------------------*/
   1529  1.1.1.6  christos yynewstate:
   1530      1.1  christos   /* In all cases, when you get here, the value and location stacks
   1531      1.1  christos      have just been pushed.  So pushing a state here evens the stacks.  */
   1532      1.1  christos   yyssp++;
   1533      1.1  christos 
   1534  1.1.1.6  christos 
   1535  1.1.1.6  christos /*--------------------------------------------------------------------.
   1536  1.1.1.6  christos | yynewstate -- set current state (the top of the stack) to yystate.  |
   1537  1.1.1.6  christos `--------------------------------------------------------------------*/
   1538  1.1.1.6  christos yysetstate:
   1539  1.1.1.6  christos   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
   1540  1.1.1.6  christos   YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
   1541  1.1.1.6  christos   *yyssp = (yytype_int16) yystate;
   1542      1.1  christos 
   1543      1.1  christos   if (yyss + yystacksize - 1 <= yyssp)
   1544  1.1.1.6  christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
   1545  1.1.1.6  christos     goto yyexhaustedlab;
   1546  1.1.1.6  christos #else
   1547      1.1  christos     {
   1548      1.1  christos       /* Get the current used size of the three stacks, in elements.  */
   1549  1.1.1.6  christos       YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
   1550      1.1  christos 
   1551  1.1.1.6  christos # if defined yyoverflow
   1552      1.1  christos       {
   1553      1.1  christos         /* Give user a chance to reallocate the stack.  Use copies of
   1554      1.1  christos            these so that the &'s don't force the real ones into
   1555      1.1  christos            memory.  */
   1556      1.1  christos         YYSTYPE *yyvs1 = yyvs;
   1557      1.1  christos         yytype_int16 *yyss1 = yyss;
   1558      1.1  christos 
   1559      1.1  christos         /* Each stack pointer address is followed by the size of the
   1560      1.1  christos            data in use in that stack, in bytes.  This used to be a
   1561      1.1  christos            conditional around just the two extra args, but that might
   1562      1.1  christos            be undefined if yyoverflow is a macro.  */
   1563      1.1  christos         yyoverflow (YY_("memory exhausted"),
   1564      1.1  christos                     &yyss1, yysize * sizeof (*yyssp),
   1565      1.1  christos                     &yyvs1, yysize * sizeof (*yyvsp),
   1566      1.1  christos                     &yystacksize);
   1567      1.1  christos         yyss = yyss1;
   1568      1.1  christos         yyvs = yyvs1;
   1569      1.1  christos       }
   1570  1.1.1.6  christos # else /* defined YYSTACK_RELOCATE */
   1571      1.1  christos       /* Extend the stack our own way.  */
   1572      1.1  christos       if (YYMAXDEPTH <= yystacksize)
   1573      1.1  christos         goto yyexhaustedlab;
   1574      1.1  christos       yystacksize *= 2;
   1575      1.1  christos       if (YYMAXDEPTH < yystacksize)
   1576      1.1  christos         yystacksize = YYMAXDEPTH;
   1577      1.1  christos 
   1578      1.1  christos       {
   1579      1.1  christos         yytype_int16 *yyss1 = yyss;
   1580      1.1  christos         union yyalloc *yyptr =
   1581      1.1  christos           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
   1582      1.1  christos         if (! yyptr)
   1583      1.1  christos           goto yyexhaustedlab;
   1584      1.1  christos         YYSTACK_RELOCATE (yyss_alloc, yyss);
   1585      1.1  christos         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
   1586  1.1.1.6  christos # undef YYSTACK_RELOCATE
   1587      1.1  christos         if (yyss1 != yyssa)
   1588      1.1  christos           YYSTACK_FREE (yyss1);
   1589      1.1  christos       }
   1590      1.1  christos # endif
   1591      1.1  christos 
   1592      1.1  christos       yyssp = yyss + yysize - 1;
   1593      1.1  christos       yyvsp = yyvs + yysize - 1;
   1594      1.1  christos 
   1595      1.1  christos       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
   1596  1.1.1.6  christos                   (unsigned long) yystacksize));
   1597      1.1  christos 
   1598      1.1  christos       if (yyss + yystacksize - 1 <= yyssp)
   1599      1.1  christos         YYABORT;
   1600      1.1  christos     }
   1601  1.1.1.6  christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
   1602      1.1  christos 
   1603      1.1  christos   if (yystate == YYFINAL)
   1604      1.1  christos     YYACCEPT;
   1605      1.1  christos 
   1606      1.1  christos   goto yybackup;
   1607      1.1  christos 
   1608  1.1.1.6  christos 
   1609      1.1  christos /*-----------.
   1610      1.1  christos | yybackup.  |
   1611      1.1  christos `-----------*/
   1612      1.1  christos yybackup:
   1613      1.1  christos   /* Do appropriate processing given the current state.  Read a
   1614      1.1  christos      lookahead token if we need one and don't already have one.  */
   1615      1.1  christos 
   1616      1.1  christos   /* First try to decide what to do without reference to lookahead token.  */
   1617      1.1  christos   yyn = yypact[yystate];
   1618      1.1  christos   if (yypact_value_is_default (yyn))
   1619      1.1  christos     goto yydefault;
   1620      1.1  christos 
   1621      1.1  christos   /* Not known => get a lookahead token if don't already have one.  */
   1622      1.1  christos 
   1623      1.1  christos   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
   1624      1.1  christos   if (yychar == YYEMPTY)
   1625      1.1  christos     {
   1626      1.1  christos       YYDPRINTF ((stderr, "Reading a token: "));
   1627      1.1  christos       yychar = yylex ();
   1628      1.1  christos     }
   1629      1.1  christos 
   1630      1.1  christos   if (yychar <= YYEOF)
   1631      1.1  christos     {
   1632      1.1  christos       yychar = yytoken = YYEOF;
   1633      1.1  christos       YYDPRINTF ((stderr, "Now at end of input.\n"));
   1634      1.1  christos     }
   1635      1.1  christos   else
   1636      1.1  christos     {
   1637      1.1  christos       yytoken = YYTRANSLATE (yychar);
   1638      1.1  christos       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
   1639      1.1  christos     }
   1640      1.1  christos 
   1641      1.1  christos   /* If the proper action on seeing token YYTOKEN is to reduce or to
   1642      1.1  christos      detect an error, take that action.  */
   1643      1.1  christos   yyn += yytoken;
   1644      1.1  christos   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
   1645      1.1  christos     goto yydefault;
   1646      1.1  christos   yyn = yytable[yyn];
   1647      1.1  christos   if (yyn <= 0)
   1648      1.1  christos     {
   1649      1.1  christos       if (yytable_value_is_error (yyn))
   1650      1.1  christos         goto yyerrlab;
   1651      1.1  christos       yyn = -yyn;
   1652      1.1  christos       goto yyreduce;
   1653      1.1  christos     }
   1654      1.1  christos 
   1655      1.1  christos   /* Count tokens shifted since error; after three, turn off error
   1656      1.1  christos      status.  */
   1657      1.1  christos   if (yyerrstatus)
   1658      1.1  christos     yyerrstatus--;
   1659      1.1  christos 
   1660      1.1  christos   /* Shift the lookahead token.  */
   1661      1.1  christos   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
   1662      1.1  christos 
   1663      1.1  christos   /* Discard the shifted token.  */
   1664      1.1  christos   yychar = YYEMPTY;
   1665      1.1  christos 
   1666      1.1  christos   yystate = yyn;
   1667      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   1668      1.1  christos   *++yyvsp = yylval;
   1669      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   1670      1.1  christos   goto yynewstate;
   1671      1.1  christos 
   1672      1.1  christos 
   1673      1.1  christos /*-----------------------------------------------------------.
   1674      1.1  christos | yydefault -- do the default action for the current state.  |
   1675      1.1  christos `-----------------------------------------------------------*/
   1676      1.1  christos yydefault:
   1677      1.1  christos   yyn = yydefact[yystate];
   1678      1.1  christos   if (yyn == 0)
   1679      1.1  christos     goto yyerrlab;
   1680      1.1  christos   goto yyreduce;
   1681      1.1  christos 
   1682      1.1  christos 
   1683      1.1  christos /*-----------------------------.
   1684  1.1.1.6  christos | yyreduce -- do a reduction.  |
   1685      1.1  christos `-----------------------------*/
   1686      1.1  christos yyreduce:
   1687      1.1  christos   /* yyn is the number of a rule to reduce with.  */
   1688      1.1  christos   yylen = yyr2[yyn];
   1689      1.1  christos 
   1690      1.1  christos   /* If YYLEN is nonzero, implement the default value of the action:
   1691      1.1  christos      '$$ = $1'.
   1692      1.1  christos 
   1693      1.1  christos      Otherwise, the following line sets YYVAL to garbage.
   1694      1.1  christos      This behavior is undocumented and Bison
   1695      1.1  christos      users should not rely upon it.  Assigning to YYVAL
   1696      1.1  christos      unconditionally makes the parser a bit smaller, and it avoids a
   1697      1.1  christos      GCC warning that YYVAL may be used uninitialized.  */
   1698      1.1  christos   yyval = yyvsp[1-yylen];
   1699      1.1  christos 
   1700      1.1  christos 
   1701      1.1  christos   YY_REDUCE_PRINT (yyn);
   1702      1.1  christos   switch (yyn)
   1703      1.1  christos     {
   1704  1.1.1.6  christos   case 13:
   1705  1.1.1.6  christos #line 202 "configparser.y"
   1706  1.1.1.5  christos     {
   1707  1.1.1.6  christos         struct ip_address_option *ip = cfg_parser->opt->ip_addresses;
   1708  1.1.1.6  christos 
   1709  1.1.1.6  christos         if(ip == NULL) {
   1710  1.1.1.6  christos           cfg_parser->opt->ip_addresses = (yyvsp[0].ip);
   1711  1.1.1.6  christos         } else {
   1712  1.1.1.6  christos           while(ip->next) { ip = ip->next; }
   1713  1.1.1.6  christos           ip->next = (yyvsp[0].ip);
   1714  1.1.1.6  christos         }
   1715  1.1.1.6  christos 
   1716  1.1.1.6  christos         cfg_parser->ip = (yyvsp[0].ip);
   1717  1.1.1.5  christos       }
   1718  1.1.1.6  christos #line 1719 "configparser.c"
   1719      1.1  christos     break;
   1720      1.1  christos 
   1721  1.1.1.5  christos   case 14:
   1722  1.1.1.6  christos #line 215 "configparser.y"
   1723  1.1.1.6  christos     {
   1724  1.1.1.6  christos       cfg_parser->ip = NULL;
   1725  1.1.1.6  christos     }
   1726  1.1.1.6  christos #line 1727 "configparser.c"
   1727  1.1.1.6  christos     break;
   1728  1.1.1.6  christos 
   1729  1.1.1.6  christos   case 15:
   1730  1.1.1.6  christos #line 219 "configparser.y"
   1731  1.1.1.5  christos     {
   1732  1.1.1.5  christos       if ((yyvsp[0].llng) > 0) {
   1733  1.1.1.5  christos         cfg_parser->opt->server_count = (int)(yyvsp[0].llng);
   1734  1.1.1.5  christos       } else {
   1735  1.1.1.5  christos         yyerror("expected a number greater than zero");
   1736  1.1.1.5  christos       }
   1737  1.1.1.5  christos     }
   1738  1.1.1.6  christos #line 1739 "configparser.c"
   1739      1.1  christos     break;
   1740      1.1  christos 
   1741  1.1.1.6  christos   case 16:
   1742  1.1.1.6  christos #line 227 "configparser.y"
   1743  1.1.1.6  christos     { cfg_parser->opt->ip_transparent = (yyvsp[0].bln); }
   1744  1.1.1.6  christos #line 1745 "configparser.c"
   1745      1.1  christos     break;
   1746      1.1  christos 
   1747  1.1.1.6  christos   case 17:
   1748  1.1.1.6  christos #line 229 "configparser.y"
   1749  1.1.1.5  christos     { cfg_parser->opt->ip_freebind = (yyvsp[0].bln); }
   1750  1.1.1.6  christos #line 1751 "configparser.c"
   1751      1.1  christos     break;
   1752      1.1  christos 
   1753  1.1.1.6  christos   case 18:
   1754  1.1.1.6  christos #line 231 "configparser.y"
   1755  1.1.1.5  christos     { cfg_parser->opt->send_buffer_size = (int)(yyvsp[0].llng); }
   1756  1.1.1.6  christos #line 1757 "configparser.c"
   1757  1.1.1.3     prlw1     break;
   1758  1.1.1.3     prlw1 
   1759  1.1.1.6  christos   case 19:
   1760  1.1.1.6  christos #line 233 "configparser.y"
   1761  1.1.1.5  christos     { cfg_parser->opt->receive_buffer_size = (int)(yyvsp[0].llng); }
   1762  1.1.1.6  christos #line 1763 "configparser.c"
   1763      1.1  christos     break;
   1764      1.1  christos 
   1765  1.1.1.6  christos   case 20:
   1766  1.1.1.6  christos #line 235 "configparser.y"
   1767  1.1.1.5  christos     { cfg_parser->opt->debug_mode = (yyvsp[0].bln); }
   1768  1.1.1.6  christos #line 1769 "configparser.c"
   1769      1.1  christos     break;
   1770      1.1  christos 
   1771  1.1.1.6  christos   case 21:
   1772  1.1.1.6  christos #line 237 "configparser.y"
   1773  1.1.1.5  christos     { /* ignored, deprecated */ }
   1774  1.1.1.6  christos #line 1775 "configparser.c"
   1775      1.1  christos     break;
   1776      1.1  christos 
   1777  1.1.1.6  christos   case 22:
   1778  1.1.1.6  christos #line 239 "configparser.y"
   1779  1.1.1.5  christos     { cfg_parser->opt->hide_version = (yyvsp[0].bln); }
   1780  1.1.1.6  christos #line 1781 "configparser.c"
   1781      1.1  christos     break;
   1782      1.1  christos 
   1783  1.1.1.6  christos   case 23:
   1784  1.1.1.6  christos #line 241 "configparser.y"
   1785  1.1.1.5  christos     { cfg_parser->opt->hide_identity = (yyvsp[0].bln); }
   1786  1.1.1.6  christos #line 1787 "configparser.c"
   1787      1.1  christos     break;
   1788      1.1  christos 
   1789  1.1.1.6  christos   case 24:
   1790  1.1.1.6  christos #line 243 "configparser.y"
   1791  1.1.1.6  christos     { cfg_parser->opt->drop_updates = (yyvsp[0].bln); }
   1792  1.1.1.6  christos #line 1793 "configparser.c"
   1793  1.1.1.6  christos     break;
   1794  1.1.1.6  christos 
   1795  1.1.1.6  christos   case 25:
   1796  1.1.1.6  christos #line 245 "configparser.y"
   1797  1.1.1.5  christos     { if((yyvsp[0].bln)) { cfg_parser->opt->do_ip4 = 1; cfg_parser->opt->do_ip6 = 0; } }
   1798  1.1.1.6  christos #line 1799 "configparser.c"
   1799      1.1  christos     break;
   1800      1.1  christos 
   1801  1.1.1.6  christos   case 26:
   1802  1.1.1.6  christos #line 247 "configparser.y"
   1803  1.1.1.5  christos     { if((yyvsp[0].bln)) { cfg_parser->opt->do_ip4 = 0; cfg_parser->opt->do_ip6 = 1; } }
   1804  1.1.1.6  christos #line 1805 "configparser.c"
   1805      1.1  christos     break;
   1806      1.1  christos 
   1807  1.1.1.6  christos   case 27:
   1808  1.1.1.6  christos #line 249 "configparser.y"
   1809  1.1.1.5  christos     { cfg_parser->opt->do_ip4 = (yyvsp[0].bln); }
   1810  1.1.1.6  christos #line 1811 "configparser.c"
   1811      1.1  christos     break;
   1812      1.1  christos 
   1813  1.1.1.6  christos   case 28:
   1814  1.1.1.6  christos #line 251 "configparser.y"
   1815  1.1.1.5  christos     { cfg_parser->opt->do_ip6 = (yyvsp[0].bln); }
   1816  1.1.1.6  christos #line 1817 "configparser.c"
   1817      1.1  christos     break;
   1818      1.1  christos 
   1819  1.1.1.6  christos   case 29:
   1820  1.1.1.6  christos #line 253 "configparser.y"
   1821  1.1.1.5  christos     {
   1822  1.1.1.5  christos       cfg_parser->opt->database = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   1823  1.1.1.5  christos       if(cfg_parser->opt->database[0] == 0 &&
   1824  1.1.1.5  christos          cfg_parser->opt->zonefiles_write == 0)
   1825  1.1.1.5  christos       {
   1826  1.1.1.5  christos         cfg_parser->opt->zonefiles_write = ZONEFILES_WRITE_INTERVAL;
   1827  1.1.1.5  christos       }
   1828  1.1.1.5  christos     }
   1829  1.1.1.6  christos #line 1830 "configparser.c"
   1830      1.1  christos     break;
   1831      1.1  christos 
   1832  1.1.1.6  christos   case 30:
   1833  1.1.1.6  christos #line 262 "configparser.y"
   1834  1.1.1.5  christos     { cfg_parser->opt->identity = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1835  1.1.1.6  christos #line 1836 "configparser.c"
   1836      1.1  christos     break;
   1837      1.1  christos 
   1838  1.1.1.6  christos   case 31:
   1839  1.1.1.6  christos #line 264 "configparser.y"
   1840  1.1.1.5  christos     { cfg_parser->opt->version = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1841  1.1.1.6  christos #line 1842 "configparser.c"
   1842      1.1  christos     break;
   1843      1.1  christos 
   1844  1.1.1.6  christos   case 32:
   1845  1.1.1.6  christos #line 266 "configparser.y"
   1846  1.1.1.5  christos     {
   1847  1.1.1.5  christos       unsigned char* nsid = 0;
   1848  1.1.1.5  christos       size_t nsid_len = strlen((yyvsp[0].str));
   1849  1.1.1.5  christos 
   1850  1.1.1.5  christos       if (strncasecmp((yyvsp[0].str), "ascii_", 6) == 0) {
   1851  1.1.1.5  christos         nsid_len -= 6; /* discard "ascii_" */
   1852  1.1.1.5  christos         if(nsid_len < 65535) {
   1853  1.1.1.5  christos           cfg_parser->opt->nsid = region_alloc(cfg_parser->opt->region, nsid_len*2+1);
   1854  1.1.1.5  christos           hex_ntop((uint8_t*)(yyvsp[0].str)+6, nsid_len, (char*)cfg_parser->opt->nsid, nsid_len*2+1);
   1855  1.1.1.5  christos         } else {
   1856  1.1.1.5  christos           yyerror("NSID too long");
   1857  1.1.1.5  christos         }
   1858  1.1.1.5  christos       } else if (nsid_len % 2 != 0) {
   1859  1.1.1.5  christos         yyerror("the NSID must be a hex string of an even length.");
   1860  1.1.1.5  christos       } else {
   1861  1.1.1.5  christos         nsid_len = nsid_len / 2;
   1862  1.1.1.5  christos         if(nsid_len < 65535) {
   1863  1.1.1.5  christos           nsid = xalloc(nsid_len);
   1864  1.1.1.5  christos           if (hex_pton((yyvsp[0].str), nsid, nsid_len) == -1) {
   1865  1.1.1.5  christos             yyerror("hex string cannot be parsed in NSID.");
   1866  1.1.1.5  christos           } else {
   1867  1.1.1.5  christos             cfg_parser->opt->nsid = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   1868  1.1.1.5  christos           }
   1869  1.1.1.5  christos           free(nsid);
   1870  1.1.1.5  christos         } else {
   1871  1.1.1.5  christos           yyerror("NSID too long");
   1872  1.1.1.5  christos         }
   1873  1.1.1.5  christos       }
   1874  1.1.1.5  christos     }
   1875  1.1.1.6  christos #line 1876 "configparser.c"
   1876      1.1  christos     break;
   1877      1.1  christos 
   1878  1.1.1.6  christos   case 33:
   1879  1.1.1.6  christos #line 296 "configparser.y"
   1880  1.1.1.5  christos     { cfg_parser->opt->logfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1881  1.1.1.6  christos #line 1882 "configparser.c"
   1882      1.1  christos     break;
   1883      1.1  christos 
   1884  1.1.1.6  christos   case 34:
   1885  1.1.1.6  christos #line 298 "configparser.y"
   1886  1.1.1.6  christos     { cfg_parser->opt->log_only_syslog = (yyvsp[0].bln); }
   1887  1.1.1.6  christos #line 1888 "configparser.c"
   1888  1.1.1.6  christos     break;
   1889  1.1.1.6  christos 
   1890  1.1.1.6  christos   case 35:
   1891  1.1.1.6  christos #line 300 "configparser.y"
   1892  1.1.1.5  christos     {
   1893  1.1.1.5  christos       if ((yyvsp[0].llng) > 0) {
   1894  1.1.1.5  christos         cfg_parser->opt->tcp_count = (int)(yyvsp[0].llng);
   1895  1.1.1.5  christos       } else {
   1896  1.1.1.5  christos         yyerror("expected a number greater than zero");
   1897  1.1.1.5  christos       }
   1898  1.1.1.5  christos     }
   1899  1.1.1.6  christos #line 1900 "configparser.c"
   1900  1.1.1.2  christos     break;
   1901  1.1.1.2  christos 
   1902  1.1.1.6  christos   case 36:
   1903  1.1.1.6  christos #line 308 "configparser.y"
   1904  1.1.1.5  christos     { cfg_parser->opt->tcp_reject_overflow = (yyvsp[0].bln); }
   1905  1.1.1.6  christos #line 1906 "configparser.c"
   1906  1.1.1.3     prlw1     break;
   1907  1.1.1.3     prlw1 
   1908  1.1.1.6  christos   case 37:
   1909  1.1.1.6  christos #line 310 "configparser.y"
   1910  1.1.1.5  christos     { cfg_parser->opt->tcp_query_count = (int)(yyvsp[0].llng); }
   1911  1.1.1.6  christos #line 1912 "configparser.c"
   1912      1.1  christos     break;
   1913      1.1  christos 
   1914  1.1.1.6  christos   case 38:
   1915  1.1.1.6  christos #line 312 "configparser.y"
   1916  1.1.1.5  christos     { cfg_parser->opt->tcp_timeout = (int)(yyvsp[0].llng); }
   1917  1.1.1.6  christos #line 1918 "configparser.c"
   1918      1.1  christos     break;
   1919      1.1  christos 
   1920  1.1.1.6  christos   case 39:
   1921  1.1.1.6  christos #line 314 "configparser.y"
   1922  1.1.1.5  christos     { cfg_parser->opt->tcp_mss = (int)(yyvsp[0].llng); }
   1923  1.1.1.6  christos #line 1924 "configparser.c"
   1924      1.1  christos     break;
   1925      1.1  christos 
   1926  1.1.1.6  christos   case 40:
   1927  1.1.1.6  christos #line 316 "configparser.y"
   1928  1.1.1.5  christos     { cfg_parser->opt->outgoing_tcp_mss = (int)(yyvsp[0].llng); }
   1929  1.1.1.6  christos #line 1930 "configparser.c"
   1930      1.1  christos     break;
   1931      1.1  christos 
   1932  1.1.1.6  christos   case 41:
   1933  1.1.1.6  christos #line 318 "configparser.y"
   1934  1.1.1.5  christos     { cfg_parser->opt->ipv4_edns_size = (size_t)(yyvsp[0].llng); }
   1935  1.1.1.6  christos #line 1936 "configparser.c"
   1936      1.1  christos     break;
   1937      1.1  christos 
   1938  1.1.1.6  christos   case 42:
   1939  1.1.1.6  christos #line 320 "configparser.y"
   1940  1.1.1.5  christos     { cfg_parser->opt->ipv6_edns_size = (size_t)(yyvsp[0].llng); }
   1941  1.1.1.6  christos #line 1942 "configparser.c"
   1942      1.1  christos     break;
   1943      1.1  christos 
   1944  1.1.1.6  christos   case 43:
   1945  1.1.1.6  christos #line 322 "configparser.y"
   1946  1.1.1.5  christos     { cfg_parser->opt->pidfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1947  1.1.1.6  christos #line 1948 "configparser.c"
   1948      1.1  christos     break;
   1949      1.1  christos 
   1950  1.1.1.6  christos   case 44:
   1951  1.1.1.6  christos #line 324 "configparser.y"
   1952  1.1.1.5  christos     {
   1953  1.1.1.5  christos       /* port number, stored as a string */
   1954  1.1.1.5  christos       char buf[16];
   1955  1.1.1.5  christos       (void)snprintf(buf, sizeof(buf), "%lld", (yyvsp[0].llng));
   1956  1.1.1.5  christos       cfg_parser->opt->port = region_strdup(cfg_parser->opt->region, buf);
   1957  1.1.1.5  christos     }
   1958  1.1.1.6  christos #line 1959 "configparser.c"
   1959      1.1  christos     break;
   1960      1.1  christos 
   1961  1.1.1.6  christos   case 45:
   1962  1.1.1.6  christos #line 331 "configparser.y"
   1963  1.1.1.5  christos     { cfg_parser->opt->reuseport = (yyvsp[0].bln); }
   1964  1.1.1.6  christos #line 1965 "configparser.c"
   1965      1.1  christos     break;
   1966      1.1  christos 
   1967  1.1.1.6  christos   case 46:
   1968  1.1.1.6  christos #line 333 "configparser.y"
   1969  1.1.1.5  christos     { cfg_parser->opt->statistics = (int)(yyvsp[0].llng); }
   1970  1.1.1.6  christos #line 1971 "configparser.c"
   1971      1.1  christos     break;
   1972      1.1  christos 
   1973  1.1.1.6  christos   case 47:
   1974  1.1.1.6  christos #line 335 "configparser.y"
   1975  1.1.1.5  christos     { cfg_parser->opt->chroot = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1976  1.1.1.6  christos #line 1977 "configparser.c"
   1977      1.1  christos     break;
   1978      1.1  christos 
   1979  1.1.1.6  christos   case 48:
   1980  1.1.1.6  christos #line 337 "configparser.y"
   1981  1.1.1.5  christos     { cfg_parser->opt->username = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1982  1.1.1.6  christos #line 1983 "configparser.c"
   1983      1.1  christos     break;
   1984      1.1  christos 
   1985  1.1.1.6  christos   case 49:
   1986  1.1.1.6  christos #line 339 "configparser.y"
   1987  1.1.1.5  christos     { cfg_parser->opt->zonesdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1988  1.1.1.6  christos #line 1989 "configparser.c"
   1989      1.1  christos     break;
   1990      1.1  christos 
   1991  1.1.1.6  christos   case 50:
   1992  1.1.1.6  christos #line 341 "configparser.y"
   1993  1.1.1.5  christos     { cfg_parser->opt->zonelistfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   1994  1.1.1.6  christos #line 1995 "configparser.c"
   1995      1.1  christos     break;
   1996      1.1  christos 
   1997  1.1.1.6  christos   case 51:
   1998  1.1.1.6  christos #line 343 "configparser.y"
   1999  1.1.1.5  christos     { /* ignored, deprecated */ }
   2000  1.1.1.6  christos #line 2001 "configparser.c"
   2001      1.1  christos     break;
   2002      1.1  christos 
   2003  1.1.1.6  christos   case 52:
   2004  1.1.1.6  christos #line 345 "configparser.y"
   2005  1.1.1.5  christos     { cfg_parser->opt->xfrdfile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2006  1.1.1.6  christos #line 2007 "configparser.c"
   2007      1.1  christos     break;
   2008      1.1  christos 
   2009  1.1.1.6  christos   case 53:
   2010  1.1.1.6  christos #line 347 "configparser.y"
   2011  1.1.1.5  christos     { cfg_parser->opt->xfrdir = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2012  1.1.1.6  christos #line 2013 "configparser.c"
   2013      1.1  christos     break;
   2014      1.1  christos 
   2015  1.1.1.6  christos   case 54:
   2016  1.1.1.6  christos #line 349 "configparser.y"
   2017  1.1.1.5  christos     { cfg_parser->opt->xfrd_reload_timeout = (int)(yyvsp[0].llng); }
   2018  1.1.1.6  christos #line 2019 "configparser.c"
   2019      1.1  christos     break;
   2020      1.1  christos 
   2021  1.1.1.6  christos   case 55:
   2022  1.1.1.6  christos #line 351 "configparser.y"
   2023  1.1.1.5  christos     { cfg_parser->opt->verbosity = (int)(yyvsp[0].llng); }
   2024  1.1.1.6  christos #line 2025 "configparser.c"
   2025      1.1  christos     break;
   2026      1.1  christos 
   2027  1.1.1.6  christos   case 56:
   2028  1.1.1.6  christos #line 353 "configparser.y"
   2029  1.1.1.5  christos     {
   2030      1.1  christos #ifdef RATELIMIT
   2031  1.1.1.5  christos       if ((yyvsp[0].llng) > 0) {
   2032  1.1.1.5  christos         cfg_parser->opt->rrl_size = (size_t)(yyvsp[0].llng);
   2033  1.1.1.5  christos       } else {
   2034  1.1.1.5  christos         yyerror("expected a number greater than zero");
   2035  1.1.1.5  christos       }
   2036      1.1  christos #endif
   2037  1.1.1.5  christos     }
   2038  1.1.1.6  christos #line 2039 "configparser.c"
   2039      1.1  christos     break;
   2040      1.1  christos 
   2041  1.1.1.6  christos   case 57:
   2042  1.1.1.6  christos #line 363 "configparser.y"
   2043  1.1.1.5  christos     {
   2044      1.1  christos #ifdef RATELIMIT
   2045  1.1.1.5  christos       cfg_parser->opt->rrl_ratelimit = (size_t)(yyvsp[0].llng);
   2046      1.1  christos #endif
   2047  1.1.1.5  christos     }
   2048  1.1.1.6  christos #line 2049 "configparser.c"
   2049      1.1  christos     break;
   2050      1.1  christos 
   2051  1.1.1.6  christos   case 58:
   2052  1.1.1.6  christos #line 369 "configparser.y"
   2053  1.1.1.5  christos     {
   2054      1.1  christos #ifdef RATELIMIT
   2055  1.1.1.5  christos       cfg_parser->opt->rrl_slip = (size_t)(yyvsp[0].llng);
   2056      1.1  christos #endif
   2057  1.1.1.5  christos     }
   2058  1.1.1.6  christos #line 2059 "configparser.c"
   2059      1.1  christos     break;
   2060      1.1  christos 
   2061  1.1.1.6  christos   case 59:
   2062  1.1.1.6  christos #line 375 "configparser.y"
   2063      1.1  christos     {
   2064      1.1  christos #ifdef RATELIMIT
   2065  1.1.1.5  christos       if ((yyvsp[0].llng) > 32) {
   2066  1.1.1.5  christos         yyerror("invalid IPv4 prefix length");
   2067  1.1.1.5  christos       } else {
   2068  1.1.1.5  christos         cfg_parser->opt->rrl_ipv4_prefix_length = (size_t)(yyvsp[0].llng);
   2069  1.1.1.5  christos       }
   2070      1.1  christos #endif
   2071  1.1.1.5  christos     }
   2072  1.1.1.6  christos #line 2073 "configparser.c"
   2073      1.1  christos     break;
   2074      1.1  christos 
   2075  1.1.1.6  christos   case 60:
   2076  1.1.1.6  christos #line 385 "configparser.y"
   2077      1.1  christos     {
   2078      1.1  christos #ifdef RATELIMIT
   2079  1.1.1.5  christos       if ((yyvsp[0].llng) > 64) {
   2080  1.1.1.5  christos         yyerror("invalid IPv6 prefix length");
   2081  1.1.1.5  christos       } else {
   2082  1.1.1.5  christos         cfg_parser->opt->rrl_ipv6_prefix_length = (size_t)(yyvsp[0].llng);
   2083  1.1.1.5  christos       }
   2084      1.1  christos #endif
   2085  1.1.1.5  christos     }
   2086  1.1.1.6  christos #line 2087 "configparser.c"
   2087      1.1  christos     break;
   2088      1.1  christos 
   2089  1.1.1.6  christos   case 61:
   2090  1.1.1.6  christos #line 395 "configparser.y"
   2091  1.1.1.5  christos     {
   2092      1.1  christos #ifdef RATELIMIT
   2093  1.1.1.5  christos       cfg_parser->opt->rrl_whitelist_ratelimit = (size_t)(yyvsp[0].llng);
   2094      1.1  christos #endif
   2095  1.1.1.5  christos     }
   2096  1.1.1.6  christos #line 2097 "configparser.c"
   2097      1.1  christos     break;
   2098      1.1  christos 
   2099  1.1.1.6  christos   case 62:
   2100  1.1.1.6  christos #line 401 "configparser.y"
   2101  1.1.1.5  christos     { cfg_parser->opt->zonefiles_check = (yyvsp[0].bln); }
   2102  1.1.1.6  christos #line 2103 "configparser.c"
   2103      1.1  christos     break;
   2104      1.1  christos 
   2105  1.1.1.6  christos   case 63:
   2106  1.1.1.6  christos #line 403 "configparser.y"
   2107  1.1.1.5  christos     { cfg_parser->opt->zonefiles_write = (int)(yyvsp[0].llng); }
   2108  1.1.1.6  christos #line 2109 "configparser.c"
   2109      1.1  christos     break;
   2110      1.1  christos 
   2111  1.1.1.6  christos   case 64:
   2112  1.1.1.6  christos #line 405 "configparser.y"
   2113      1.1  christos     {
   2114  1.1.1.5  christos       cfg_parser->opt->log_time_ascii = (yyvsp[0].bln);
   2115  1.1.1.5  christos       log_time_asc = cfg_parser->opt->log_time_ascii;
   2116  1.1.1.5  christos     }
   2117  1.1.1.6  christos #line 2118 "configparser.c"
   2118      1.1  christos     break;
   2119      1.1  christos 
   2120  1.1.1.6  christos   case 65:
   2121  1.1.1.6  christos #line 410 "configparser.y"
   2122      1.1  christos     {
   2123  1.1.1.5  christos       cfg_parser->opt->round_robin = (yyvsp[0].bln);
   2124  1.1.1.5  christos       round_robin = cfg_parser->opt->round_robin;
   2125  1.1.1.5  christos     }
   2126  1.1.1.6  christos #line 2127 "configparser.c"
   2127      1.1  christos     break;
   2128      1.1  christos 
   2129  1.1.1.6  christos   case 66:
   2130  1.1.1.6  christos #line 415 "configparser.y"
   2131      1.1  christos     {
   2132  1.1.1.5  christos       cfg_parser->opt->minimal_responses = (yyvsp[0].bln);
   2133  1.1.1.5  christos       minimal_responses = cfg_parser->opt->minimal_responses;
   2134  1.1.1.5  christos     }
   2135  1.1.1.6  christos #line 2136 "configparser.c"
   2136      1.1  christos     break;
   2137      1.1  christos 
   2138  1.1.1.6  christos   case 67:
   2139  1.1.1.6  christos #line 420 "configparser.y"
   2140  1.1.1.5  christos     { cfg_parser->opt->confine_to_zone = (yyvsp[0].bln); }
   2141  1.1.1.6  christos #line 2142 "configparser.c"
   2142      1.1  christos     break;
   2143      1.1  christos 
   2144  1.1.1.6  christos   case 68:
   2145  1.1.1.6  christos #line 422 "configparser.y"
   2146  1.1.1.5  christos     { cfg_parser->opt->refuse_any = (yyvsp[0].bln); }
   2147  1.1.1.6  christos #line 2148 "configparser.c"
   2148      1.1  christos     break;
   2149      1.1  christos 
   2150  1.1.1.6  christos   case 69:
   2151  1.1.1.6  christos #line 424 "configparser.y"
   2152  1.1.1.5  christos     { cfg_parser->opt->tls_service_key = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2153  1.1.1.6  christos #line 2154 "configparser.c"
   2154      1.1  christos     break;
   2155      1.1  christos 
   2156  1.1.1.6  christos   case 70:
   2157  1.1.1.6  christos #line 426 "configparser.y"
   2158  1.1.1.5  christos     { cfg_parser->opt->tls_service_ocsp = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2159  1.1.1.6  christos #line 2160 "configparser.c"
   2160      1.1  christos     break;
   2161      1.1  christos 
   2162  1.1.1.6  christos   case 71:
   2163  1.1.1.6  christos #line 428 "configparser.y"
   2164  1.1.1.5  christos     { cfg_parser->opt->tls_service_pem = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2165  1.1.1.6  christos #line 2166 "configparser.c"
   2166      1.1  christos     break;
   2167      1.1  christos 
   2168  1.1.1.6  christos   case 72:
   2169  1.1.1.6  christos #line 430 "configparser.y"
   2170  1.1.1.3     prlw1     {
   2171  1.1.1.5  christos       /* port number, stored as string */
   2172  1.1.1.5  christos       char buf[16];
   2173  1.1.1.5  christos       (void)snprintf(buf, sizeof(buf), "%lld", (yyvsp[0].llng));
   2174  1.1.1.5  christos       cfg_parser->opt->tls_port = region_strdup(cfg_parser->opt->region, buf);
   2175  1.1.1.5  christos     }
   2176  1.1.1.6  christos #line 2177 "configparser.c"
   2177  1.1.1.5  christos     break;
   2178  1.1.1.5  christos 
   2179  1.1.1.5  christos   case 73:
   2180  1.1.1.6  christos #line 437 "configparser.y"
   2181  1.1.1.6  christos     {
   2182  1.1.1.6  christos       cfg_parser->opt->cpu_affinity = (yyvsp[0].cpu);
   2183  1.1.1.6  christos     }
   2184  1.1.1.6  christos #line 2185 "configparser.c"
   2185  1.1.1.3     prlw1     break;
   2186  1.1.1.3     prlw1 
   2187  1.1.1.5  christos   case 74:
   2188  1.1.1.6  christos #line 441 "configparser.y"
   2189  1.1.1.6  christos     {
   2190  1.1.1.6  christos       if((yyvsp[0].llng) < 0) {
   2191  1.1.1.6  christos         yyerror("expected a non-negative number");
   2192  1.1.1.6  christos         YYABORT;
   2193  1.1.1.6  christos       } else {
   2194  1.1.1.6  christos         struct cpu_map_option *opt, *tail;
   2195  1.1.1.6  christos 
   2196  1.1.1.6  christos         opt = cfg_parser->opt->service_cpu_affinity;
   2197  1.1.1.6  christos         while(opt && opt->service != (yyvsp[-1].llng)) { opt = opt->next; }
   2198  1.1.1.6  christos 
   2199  1.1.1.6  christos         if(opt) {
   2200  1.1.1.6  christos           opt->cpu = (yyvsp[0].llng);
   2201  1.1.1.6  christos         } else {
   2202  1.1.1.6  christos           opt = region_alloc_zero(cfg_parser->opt->region, sizeof(*opt));
   2203  1.1.1.6  christos           opt->service = (int)(yyvsp[-1].llng);
   2204  1.1.1.6  christos           opt->cpu = (int)(yyvsp[0].llng);
   2205  1.1.1.6  christos 
   2206  1.1.1.6  christos           tail = cfg_parser->opt->service_cpu_affinity;
   2207  1.1.1.6  christos           if(tail) {
   2208  1.1.1.6  christos             while(tail->next) { tail = tail->next; }
   2209  1.1.1.6  christos             tail->next = opt;
   2210  1.1.1.6  christos           } else {
   2211  1.1.1.6  christos             cfg_parser->opt->service_cpu_affinity = opt;
   2212  1.1.1.6  christos           }
   2213  1.1.1.6  christos         }
   2214  1.1.1.6  christos       }
   2215  1.1.1.6  christos     }
   2216  1.1.1.6  christos #line 2217 "configparser.c"
   2217  1.1.1.6  christos     break;
   2218  1.1.1.6  christos 
   2219  1.1.1.6  christos   case 77:
   2220  1.1.1.6  christos #line 475 "configparser.y"
   2221  1.1.1.6  christos     {
   2222  1.1.1.6  christos       char *tok, *ptr, *str;
   2223  1.1.1.6  christos       struct range_option *servers = NULL;
   2224  1.1.1.6  christos       long long first, last;
   2225  1.1.1.6  christos 
   2226  1.1.1.6  christos       /* user may specify "0 1", "0" "1", 0 1 or a combination thereof */
   2227  1.1.1.6  christos       for(str = (yyvsp[0].str); (tok = strtok_r(str, " \t", &ptr)); str = NULL) {
   2228  1.1.1.6  christos         struct range_option *opt =
   2229  1.1.1.6  christos           region_alloc(cfg_parser->opt->region, sizeof(*opt));
   2230  1.1.1.6  christos         first = last = 0;
   2231  1.1.1.6  christos         if(!parse_range(tok, &first, &last)) {
   2232  1.1.1.6  christos           yyerror("invalid server range '%s'", tok);
   2233  1.1.1.6  christos           YYABORT;
   2234  1.1.1.6  christos         }
   2235  1.1.1.6  christos         assert(first >= 0);
   2236  1.1.1.6  christos         assert(last >= 0);
   2237  1.1.1.6  christos         opt->next = NULL;
   2238  1.1.1.6  christos         opt->first = (int)first;
   2239  1.1.1.6  christos         opt->last = (int)last;
   2240  1.1.1.6  christos         if(servers) {
   2241  1.1.1.6  christos           servers = servers->next = opt;
   2242  1.1.1.6  christos         } else {
   2243  1.1.1.6  christos           servers = cfg_parser->ip->servers = opt;
   2244  1.1.1.6  christos         }
   2245  1.1.1.6  christos       }
   2246  1.1.1.6  christos     }
   2247  1.1.1.6  christos #line 2248 "configparser.c"
   2248  1.1.1.6  christos     break;
   2249  1.1.1.6  christos 
   2250  1.1.1.6  christos   case 78:
   2251  1.1.1.6  christos #line 502 "configparser.y"
   2252  1.1.1.6  christos     { cfg_parser->ip->dev = (yyvsp[0].bln); }
   2253  1.1.1.6  christos #line 2254 "configparser.c"
   2254  1.1.1.6  christos     break;
   2255  1.1.1.6  christos 
   2256  1.1.1.6  christos   case 79:
   2257  1.1.1.6  christos #line 504 "configparser.y"
   2258  1.1.1.6  christos     { cfg_parser->ip->fib = (yyvsp[0].llng); }
   2259  1.1.1.6  christos #line 2260 "configparser.c"
   2260  1.1.1.6  christos     break;
   2261  1.1.1.6  christos 
   2262  1.1.1.6  christos   case 80:
   2263  1.1.1.6  christos #line 508 "configparser.y"
   2264  1.1.1.6  christos     { (yyval.cpu) = NULL; }
   2265  1.1.1.6  christos #line 2266 "configparser.c"
   2266  1.1.1.6  christos     break;
   2267  1.1.1.6  christos 
   2268  1.1.1.6  christos   case 81:
   2269  1.1.1.6  christos #line 510 "configparser.y"
   2270  1.1.1.6  christos     {
   2271  1.1.1.6  christos       char *tok, *ptr, *str;
   2272  1.1.1.6  christos       struct cpu_option *tail;
   2273  1.1.1.6  christos       long long cpu;
   2274  1.1.1.6  christos 
   2275  1.1.1.6  christos       str = (yyvsp[0].str);
   2276  1.1.1.6  christos       (yyval.cpu) = tail = (yyvsp[-1].cpu);
   2277  1.1.1.6  christos       if(tail) {
   2278  1.1.1.6  christos         while(tail->next) { tail = tail->next; }
   2279  1.1.1.6  christos       }
   2280  1.1.1.6  christos 
   2281  1.1.1.6  christos       /* Users may specify "0 1", "0" "1", 0 1 or a combination thereof. */
   2282  1.1.1.6  christos       for(str = (yyvsp[0].str); (tok = strtok_r(str, " \t", &ptr)); str = NULL) {
   2283  1.1.1.6  christos         struct cpu_option *opt =
   2284  1.1.1.6  christos           region_alloc(cfg_parser->opt->region, sizeof(*opt));
   2285  1.1.1.6  christos         cpu = 0;
   2286  1.1.1.6  christos         if(!parse_number(tok, &cpu) || opt->cpu < 0) {
   2287  1.1.1.6  christos           yyerror("expected a positive number");
   2288  1.1.1.6  christos           YYABORT;
   2289  1.1.1.6  christos         }
   2290  1.1.1.6  christos         assert(cpu >=0);
   2291  1.1.1.6  christos         opt->cpu = (int)cpu;
   2292  1.1.1.6  christos         if(tail) {
   2293  1.1.1.6  christos           tail->next = opt;
   2294  1.1.1.6  christos           tail = opt;
   2295  1.1.1.6  christos         } else {
   2296  1.1.1.6  christos           (yyval.cpu) = tail = opt;
   2297  1.1.1.6  christos         }
   2298  1.1.1.6  christos       }
   2299  1.1.1.6  christos     }
   2300  1.1.1.6  christos #line 2301 "configparser.c"
   2301  1.1.1.6  christos     break;
   2302  1.1.1.6  christos 
   2303  1.1.1.6  christos   case 82:
   2304  1.1.1.6  christos #line 544 "configparser.y"
   2305  1.1.1.6  christos     { (yyval.llng) = -1; }
   2306  1.1.1.6  christos #line 2307 "configparser.c"
   2307  1.1.1.6  christos     break;
   2308  1.1.1.6  christos 
   2309  1.1.1.6  christos   case 83:
   2310  1.1.1.6  christos #line 546 "configparser.y"
   2311  1.1.1.6  christos     {
   2312  1.1.1.6  christos       if((yyvsp[0].llng) <= 0) {
   2313  1.1.1.6  christos         yyerror("invalid server identifier");
   2314  1.1.1.6  christos         YYABORT;
   2315  1.1.1.6  christos       }
   2316  1.1.1.6  christos       (yyval.llng) = (yyvsp[0].llng);
   2317  1.1.1.6  christos     }
   2318  1.1.1.6  christos #line 2319 "configparser.c"
   2319  1.1.1.6  christos     break;
   2320  1.1.1.6  christos 
   2321  1.1.1.6  christos   case 87:
   2322  1.1.1.6  christos #line 563 "configparser.y"
   2323  1.1.1.6  christos     { cfg_parser->opt->dnstap_enable = (yyvsp[0].bln); }
   2324  1.1.1.6  christos #line 2325 "configparser.c"
   2325  1.1.1.6  christos     break;
   2326  1.1.1.6  christos 
   2327  1.1.1.6  christos   case 88:
   2328  1.1.1.6  christos #line 565 "configparser.y"
   2329  1.1.1.5  christos     { cfg_parser->opt->dnstap_socket_path = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2330  1.1.1.6  christos #line 2331 "configparser.c"
   2331  1.1.1.5  christos     break;
   2332  1.1.1.5  christos 
   2333  1.1.1.6  christos   case 89:
   2334  1.1.1.6  christos #line 567 "configparser.y"
   2335  1.1.1.5  christos     { cfg_parser->opt->dnstap_send_identity = (yyvsp[0].bln); }
   2336  1.1.1.6  christos #line 2337 "configparser.c"
   2337  1.1.1.5  christos     break;
   2338  1.1.1.5  christos 
   2339  1.1.1.6  christos   case 90:
   2340  1.1.1.6  christos #line 569 "configparser.y"
   2341  1.1.1.5  christos     { cfg_parser->opt->dnstap_send_version = (yyvsp[0].bln); }
   2342  1.1.1.6  christos #line 2343 "configparser.c"
   2343  1.1.1.5  christos     break;
   2344  1.1.1.5  christos 
   2345  1.1.1.6  christos   case 91:
   2346  1.1.1.6  christos #line 571 "configparser.y"
   2347  1.1.1.5  christos     { cfg_parser->opt->dnstap_identity = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2348  1.1.1.6  christos #line 2349 "configparser.c"
   2349  1.1.1.5  christos     break;
   2350  1.1.1.5  christos 
   2351  1.1.1.6  christos   case 92:
   2352  1.1.1.6  christos #line 573 "configparser.y"
   2353  1.1.1.5  christos     { cfg_parser->opt->dnstap_version = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2354  1.1.1.6  christos #line 2355 "configparser.c"
   2355  1.1.1.5  christos     break;
   2356  1.1.1.5  christos 
   2357  1.1.1.6  christos   case 93:
   2358  1.1.1.6  christos #line 575 "configparser.y"
   2359  1.1.1.5  christos     { cfg_parser->opt->dnstap_log_auth_query_messages = (yyvsp[0].bln); }
   2360  1.1.1.6  christos #line 2361 "configparser.c"
   2361  1.1.1.5  christos     break;
   2362  1.1.1.5  christos 
   2363  1.1.1.6  christos   case 94:
   2364  1.1.1.6  christos #line 577 "configparser.y"
   2365  1.1.1.5  christos     { cfg_parser->opt->dnstap_log_auth_response_messages = (yyvsp[0].bln); }
   2366  1.1.1.6  christos #line 2367 "configparser.c"
   2367  1.1.1.5  christos     break;
   2368  1.1.1.5  christos 
   2369  1.1.1.6  christos   case 98:
   2370  1.1.1.6  christos #line 588 "configparser.y"
   2371  1.1.1.5  christos     { cfg_parser->opt->control_enable = (yyvsp[0].bln); }
   2372  1.1.1.6  christos #line 2373 "configparser.c"
   2373  1.1.1.5  christos     break;
   2374  1.1.1.5  christos 
   2375  1.1.1.6  christos   case 99:
   2376  1.1.1.6  christos #line 590 "configparser.y"
   2377  1.1.1.3     prlw1     {
   2378  1.1.1.5  christos       struct ip_address_option *ip = cfg_parser->opt->control_interface;
   2379  1.1.1.5  christos       if(ip == NULL) {
   2380  1.1.1.5  christos         cfg_parser->opt->control_interface = (yyvsp[0].ip);
   2381  1.1.1.5  christos       } else {
   2382  1.1.1.5  christos         while(ip->next != NULL) { ip = ip->next; }
   2383  1.1.1.5  christos         ip->next = (yyvsp[0].ip);
   2384  1.1.1.5  christos       }
   2385  1.1.1.5  christos     }
   2386  1.1.1.6  christos #line 2387 "configparser.c"
   2387  1.1.1.3     prlw1     break;
   2388  1.1.1.3     prlw1 
   2389  1.1.1.6  christos   case 100:
   2390  1.1.1.6  christos #line 600 "configparser.y"
   2391  1.1.1.3     prlw1     {
   2392  1.1.1.5  christos       if((yyvsp[0].llng) == 0) {
   2393  1.1.1.5  christos         yyerror("control port number expected");
   2394  1.1.1.5  christos       } else {
   2395  1.1.1.5  christos         cfg_parser->opt->control_port = (int)(yyvsp[0].llng);
   2396  1.1.1.5  christos       }
   2397  1.1.1.5  christos     }
   2398  1.1.1.6  christos #line 2399 "configparser.c"
   2399  1.1.1.5  christos     break;
   2400  1.1.1.5  christos 
   2401  1.1.1.6  christos   case 101:
   2402  1.1.1.6  christos #line 608 "configparser.y"
   2403  1.1.1.5  christos     { cfg_parser->opt->server_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2404  1.1.1.6  christos #line 2405 "configparser.c"
   2405  1.1.1.3     prlw1     break;
   2406  1.1.1.3     prlw1 
   2407  1.1.1.6  christos   case 102:
   2408  1.1.1.6  christos #line 610 "configparser.y"
   2409  1.1.1.5  christos     { cfg_parser->opt->server_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2410  1.1.1.6  christos #line 2411 "configparser.c"
   2411  1.1.1.5  christos     break;
   2412  1.1.1.5  christos 
   2413  1.1.1.6  christos   case 103:
   2414  1.1.1.6  christos #line 612 "configparser.y"
   2415  1.1.1.5  christos     { cfg_parser->opt->control_key_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2416  1.1.1.6  christos #line 2417 "configparser.c"
   2417  1.1.1.5  christos     break;
   2418  1.1.1.5  christos 
   2419  1.1.1.6  christos   case 104:
   2420  1.1.1.6  christos #line 614 "configparser.y"
   2421  1.1.1.5  christos     { cfg_parser->opt->control_cert_file = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2422  1.1.1.6  christos #line 2423 "configparser.c"
   2423  1.1.1.5  christos     break;
   2424  1.1.1.5  christos 
   2425  1.1.1.6  christos   case 105:
   2426  1.1.1.6  christos #line 619 "configparser.y"
   2427  1.1.1.3     prlw1     {
   2428  1.1.1.5  christos         key_options_type *key = key_options_create(cfg_parser->opt->region);
   2429  1.1.1.5  christos         key->algorithm = region_strdup(cfg_parser->opt->region, "sha256");
   2430  1.1.1.5  christos         assert(cfg_parser->key == NULL);
   2431  1.1.1.5  christos         cfg_parser->key = key;
   2432  1.1.1.5  christos       }
   2433  1.1.1.6  christos #line 2434 "configparser.c"
   2434  1.1.1.3     prlw1     break;
   2435  1.1.1.3     prlw1 
   2436  1.1.1.6  christos   case 106:
   2437  1.1.1.6  christos #line 626 "configparser.y"
   2438  1.1.1.3     prlw1     {
   2439  1.1.1.5  christos       struct key_options *key = cfg_parser->key;
   2440  1.1.1.5  christos       if(key->name == NULL) {
   2441  1.1.1.5  christos         yyerror("tsig key has no name");
   2442  1.1.1.5  christos       } else if(key->algorithm == NULL) {
   2443  1.1.1.5  christos         yyerror("tsig key %s has no algorithm", key->name);
   2444  1.1.1.5  christos       } else if(key->secret == NULL) {
   2445  1.1.1.5  christos         yyerror("tsig key %s has no secret blob", key->name);
   2446  1.1.1.5  christos       } else if(key_options_find(cfg_parser->opt, key->name)) {
   2447  1.1.1.5  christos         yyerror("duplicate tsig key %s", key->name);
   2448  1.1.1.5  christos       } else {
   2449  1.1.1.5  christos         key_options_insert(cfg_parser->opt, key);
   2450  1.1.1.5  christos         cfg_parser->key = NULL;
   2451  1.1.1.5  christos       }
   2452  1.1.1.5  christos     }
   2453  1.1.1.6  christos #line 2454 "configparser.c"
   2454  1.1.1.3     prlw1     break;
   2455  1.1.1.3     prlw1 
   2456  1.1.1.6  christos   case 109:
   2457  1.1.1.6  christos #line 647 "configparser.y"
   2458  1.1.1.3     prlw1     {
   2459  1.1.1.5  christos       dname_type *dname;
   2460  1.1.1.5  christos 
   2461  1.1.1.5  christos       dname = (dname_type *)dname_parse(cfg_parser->opt->region, (yyvsp[0].str));
   2462  1.1.1.5  christos       cfg_parser->key->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2463  1.1.1.5  christos       if(dname == NULL) {
   2464  1.1.1.5  christos         yyerror("bad tsig key name %s", (yyvsp[0].str));
   2465  1.1.1.5  christos       } else {
   2466  1.1.1.5  christos         region_recycle(cfg_parser->opt->region, dname, dname_total_size(dname));
   2467  1.1.1.5  christos       }
   2468  1.1.1.5  christos     }
   2469  1.1.1.6  christos #line 2470 "configparser.c"
   2470  1.1.1.3     prlw1     break;
   2471  1.1.1.3     prlw1 
   2472  1.1.1.6  christos   case 110:
   2473  1.1.1.6  christos #line 659 "configparser.y"
   2474  1.1.1.3     prlw1     {
   2475  1.1.1.5  christos       if(tsig_get_algorithm_by_name((yyvsp[0].str)) == NULL) {
   2476  1.1.1.5  christos         yyerror("bad tsig key algorithm %s", (yyvsp[0].str));
   2477  1.1.1.5  christos       } else {
   2478  1.1.1.5  christos         cfg_parser->key->algorithm = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2479  1.1.1.5  christos       }
   2480  1.1.1.5  christos     }
   2481  1.1.1.6  christos #line 2482 "configparser.c"
   2482  1.1.1.3     prlw1     break;
   2483  1.1.1.3     prlw1 
   2484  1.1.1.6  christos   case 111:
   2485  1.1.1.6  christos #line 667 "configparser.y"
   2486  1.1.1.3     prlw1     {
   2487  1.1.1.5  christos       uint8_t data[16384];
   2488  1.1.1.5  christos       int size;
   2489  1.1.1.5  christos 
   2490  1.1.1.5  christos       cfg_parser->key->secret = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2491  1.1.1.5  christos       size = b64_pton((yyvsp[0].str), data, sizeof(data));
   2492  1.1.1.5  christos       if(size == -1) {
   2493  1.1.1.5  christos         yyerror("cannot base64 decode tsig secret %s",
   2494  1.1.1.5  christos           cfg_parser->key->name?
   2495  1.1.1.5  christos           cfg_parser->key->name:"");
   2496  1.1.1.5  christos       } else if(size != 0) {
   2497  1.1.1.5  christos         memset(data, 0xdd, size); /* wipe secret */
   2498  1.1.1.5  christos       }
   2499  1.1.1.5  christos     }
   2500  1.1.1.6  christos #line 2501 "configparser.c"
   2501  1.1.1.3     prlw1     break;
   2502  1.1.1.3     prlw1 
   2503  1.1.1.6  christos   case 112:
   2504  1.1.1.6  christos #line 685 "configparser.y"
   2505  1.1.1.3     prlw1     {
   2506  1.1.1.5  christos         assert(cfg_parser->pattern == NULL);
   2507  1.1.1.5  christos         assert(cfg_parser->zone == NULL);
   2508  1.1.1.5  christos         cfg_parser->zone = zone_options_create(cfg_parser->opt->region);
   2509  1.1.1.5  christos         cfg_parser->zone->part_of_config = 1;
   2510  1.1.1.5  christos         cfg_parser->zone->pattern = cfg_parser->pattern =
   2511  1.1.1.5  christos           pattern_options_create(cfg_parser->opt->region);
   2512  1.1.1.5  christos         cfg_parser->zone->pattern->implicit = 1;
   2513  1.1.1.5  christos       }
   2514  1.1.1.6  christos #line 2515 "configparser.c"
   2515  1.1.1.3     prlw1     break;
   2516  1.1.1.3     prlw1 
   2517  1.1.1.6  christos   case 113:
   2518  1.1.1.6  christos #line 695 "configparser.y"
   2519  1.1.1.5  christos     {
   2520  1.1.1.5  christos       assert(cfg_parser->zone != NULL);
   2521  1.1.1.5  christos       if(cfg_parser->zone->name == NULL) {
   2522  1.1.1.5  christos         yyerror("zone has no name");
   2523  1.1.1.5  christos       } else if(!nsd_options_insert_zone(cfg_parser->opt, cfg_parser->zone)) {
   2524  1.1.1.5  christos         yyerror("duplicate zone %s", cfg_parser->zone->name);
   2525  1.1.1.5  christos       } else if(!nsd_options_insert_pattern(cfg_parser->opt, cfg_parser->zone->pattern)) {
   2526  1.1.1.5  christos         yyerror("duplicate pattern %s", cfg_parser->zone->pattern->pname);
   2527  1.1.1.5  christos       }
   2528  1.1.1.5  christos       cfg_parser->pattern = NULL;
   2529  1.1.1.5  christos       cfg_parser->zone = NULL;
   2530  1.1.1.5  christos     }
   2531  1.1.1.6  christos #line 2532 "configparser.c"
   2532      1.1  christos     break;
   2533      1.1  christos 
   2534  1.1.1.6  christos   case 116:
   2535  1.1.1.6  christos #line 713 "configparser.y"
   2536  1.1.1.5  christos     {
   2537  1.1.1.5  christos       const char *marker = PATTERN_IMPLICIT_MARKER;
   2538  1.1.1.5  christos       char *pname = region_alloc(cfg_parser->opt->region, strlen((yyvsp[0].str)) + strlen(marker) + 1);
   2539  1.1.1.5  christos       memmove(pname, marker, strlen(marker));
   2540  1.1.1.5  christos       memmove(pname + strlen(marker), (yyvsp[0].str), strlen((yyvsp[0].str)) + 1);
   2541  1.1.1.5  christos       cfg_parser->zone->pattern->pname = pname;
   2542  1.1.1.5  christos       cfg_parser->zone->name = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2543  1.1.1.5  christos       if(pattern_options_find(cfg_parser->opt, pname)) {
   2544  1.1.1.5  christos         yyerror("zone %s cannot be created because implicit pattern %s "
   2545  1.1.1.5  christos                     "already exists", (yyvsp[0].str), pname);
   2546  1.1.1.5  christos       }
   2547  1.1.1.5  christos     }
   2548  1.1.1.6  christos #line 2549 "configparser.c"
   2549      1.1  christos     break;
   2550      1.1  christos 
   2551  1.1.1.6  christos   case 118:
   2552  1.1.1.6  christos #line 729 "configparser.y"
   2553      1.1  christos     {
   2554  1.1.1.5  christos         assert(cfg_parser->pattern == NULL);
   2555  1.1.1.5  christos         cfg_parser->pattern = pattern_options_create(cfg_parser->opt->region);
   2556  1.1.1.5  christos       }
   2557  1.1.1.6  christos #line 2558 "configparser.c"
   2558      1.1  christos     break;
   2559      1.1  christos 
   2560  1.1.1.6  christos   case 119:
   2561  1.1.1.6  christos #line 734 "configparser.y"
   2562  1.1.1.5  christos     {
   2563  1.1.1.5  christos       pattern_options_type *pattern = cfg_parser->pattern;
   2564  1.1.1.5  christos       if(pattern->pname == NULL) {
   2565  1.1.1.5  christos         yyerror("pattern has no name");
   2566  1.1.1.5  christos       } else if(!nsd_options_insert_pattern(cfg_parser->opt, pattern)) {
   2567  1.1.1.5  christos         yyerror("duplicate pattern %s", pattern->pname);
   2568  1.1.1.5  christos       }
   2569  1.1.1.5  christos       cfg_parser->pattern = NULL;
   2570  1.1.1.5  christos     }
   2571  1.1.1.6  christos #line 2572 "configparser.c"
   2572      1.1  christos     break;
   2573      1.1  christos 
   2574  1.1.1.6  christos   case 122:
   2575  1.1.1.6  christos #line 749 "configparser.y"
   2576  1.1.1.5  christos     {
   2577  1.1.1.5  christos       if(strchr((yyvsp[0].str), ' ')) {
   2578  1.1.1.5  christos         yyerror("space is not allowed in pattern name: '%s'", (yyvsp[0].str));
   2579  1.1.1.5  christos       }
   2580  1.1.1.5  christos       cfg_parser->pattern->pname = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2581  1.1.1.5  christos     }
   2582  1.1.1.6  christos #line 2583 "configparser.c"
   2583      1.1  christos     break;
   2584      1.1  christos 
   2585  1.1.1.6  christos   case 124:
   2586  1.1.1.6  christos #line 759 "configparser.y"
   2587  1.1.1.5  christos     {
   2588  1.1.1.5  christos #ifdef RATELIMIT
   2589  1.1.1.5  christos       cfg_parser->pattern->rrl_whitelist |= rrlstr2type((yyvsp[0].str));
   2590      1.1  christos #endif
   2591  1.1.1.5  christos     }
   2592  1.1.1.6  christos #line 2593 "configparser.c"
   2593      1.1  christos     break;
   2594      1.1  christos 
   2595  1.1.1.6  christos   case 125:
   2596  1.1.1.6  christos #line 765 "configparser.y"
   2597  1.1.1.5  christos     { cfg_parser->pattern->zonefile = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2598  1.1.1.6  christos #line 2599 "configparser.c"
   2599      1.1  christos     break;
   2600      1.1  christos 
   2601  1.1.1.6  christos   case 126:
   2602  1.1.1.6  christos #line 767 "configparser.y"
   2603  1.1.1.5  christos     { cfg_parser->pattern->zonestats = region_strdup(cfg_parser->opt->region, (yyvsp[0].str)); }
   2604  1.1.1.6  christos #line 2605 "configparser.c"
   2605      1.1  christos     break;
   2606      1.1  christos 
   2607  1.1.1.6  christos   case 127:
   2608  1.1.1.6  christos #line 769 "configparser.y"
   2609      1.1  christos     {
   2610  1.1.1.5  christos       if((yyvsp[0].llng) > 0) {
   2611  1.1.1.5  christos         cfg_parser->pattern->size_limit_xfr = (int)(yyvsp[0].llng);
   2612  1.1.1.5  christos       } else {
   2613  1.1.1.5  christos         yyerror("expected a number greater than zero");
   2614  1.1.1.5  christos       }
   2615  1.1.1.5  christos     }
   2616  1.1.1.6  christos #line 2617 "configparser.c"
   2617      1.1  christos     break;
   2618      1.1  christos 
   2619  1.1.1.6  christos   case 128:
   2620  1.1.1.6  christos #line 777 "configparser.y"
   2621  1.1.1.5  christos     { cfg_parser->pattern->multi_master_check = (int)(yyvsp[0].bln); }
   2622  1.1.1.6  christos #line 2623 "configparser.c"
   2623      1.1  christos     break;
   2624      1.1  christos 
   2625  1.1.1.6  christos   case 129:
   2626  1.1.1.6  christos #line 779 "configparser.y"
   2627  1.1.1.5  christos     { config_apply_pattern(cfg_parser->pattern, (yyvsp[0].str)); }
   2628  1.1.1.6  christos #line 2629 "configparser.c"
   2629      1.1  christos     break;
   2630      1.1  christos 
   2631  1.1.1.6  christos   case 130:
   2632  1.1.1.6  christos #line 781 "configparser.y"
   2633  1.1.1.5  christos     {
   2634  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2635  1.1.1.5  christos       if(acl->blocked)
   2636  1.1.1.5  christos         yyerror("blocked address used for request-xfr");
   2637  1.1.1.5  christos       if(acl->rangetype != acl_range_single)
   2638  1.1.1.5  christos         yyerror("address range used for request-xfr");
   2639  1.1.1.5  christos       append_acl(&cfg_parser->pattern->request_xfr, acl);
   2640  1.1.1.5  christos     }
   2641  1.1.1.6  christos #line 2642 "configparser.c"
   2642      1.1  christos     break;
   2643      1.1  christos 
   2644  1.1.1.6  christos   case 131:
   2645  1.1.1.6  christos #line 790 "configparser.y"
   2646  1.1.1.5  christos     {
   2647  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2648  1.1.1.5  christos       acl->use_axfr_only = 1;
   2649  1.1.1.5  christos       if(acl->blocked)
   2650  1.1.1.5  christos         yyerror("blocked address used for request-xfr");
   2651  1.1.1.5  christos       if(acl->rangetype != acl_range_single)
   2652  1.1.1.5  christos         yyerror("address range used for request-xfr");
   2653  1.1.1.5  christos       append_acl(&cfg_parser->pattern->request_xfr, acl);
   2654  1.1.1.5  christos     }
   2655  1.1.1.6  christos #line 2656 "configparser.c"
   2656      1.1  christos     break;
   2657      1.1  christos 
   2658  1.1.1.6  christos   case 132:
   2659  1.1.1.6  christos #line 800 "configparser.y"
   2660  1.1.1.5  christos     {
   2661  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2662  1.1.1.5  christos       acl->allow_udp = 1;
   2663  1.1.1.5  christos       if(acl->blocked)
   2664  1.1.1.5  christos         yyerror("blocked address used for request-xfr");
   2665  1.1.1.5  christos       if(acl->rangetype != acl_range_single)
   2666  1.1.1.5  christos         yyerror("address range used for request-xfr");
   2667  1.1.1.5  christos       append_acl(&cfg_parser->pattern->request_xfr, acl);
   2668  1.1.1.5  christos     }
   2669  1.1.1.6  christos #line 2670 "configparser.c"
   2670      1.1  christos     break;
   2671      1.1  christos 
   2672  1.1.1.6  christos   case 133:
   2673  1.1.1.6  christos #line 810 "configparser.y"
   2674  1.1.1.5  christos     {
   2675  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2676  1.1.1.5  christos       append_acl(&cfg_parser->pattern->allow_notify, acl);
   2677  1.1.1.5  christos     }
   2678  1.1.1.6  christos #line 2679 "configparser.c"
   2679      1.1  christos     break;
   2680      1.1  christos 
   2681  1.1.1.6  christos   case 134:
   2682  1.1.1.6  christos #line 815 "configparser.y"
   2683  1.1.1.5  christos     {
   2684  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2685  1.1.1.5  christos       if(acl->blocked)
   2686  1.1.1.5  christos         yyerror("blocked address used for notify");
   2687  1.1.1.5  christos       if(acl->rangetype != acl_range_single)
   2688  1.1.1.5  christos         yyerror("address range used for notify");
   2689  1.1.1.5  christos       append_acl(&cfg_parser->pattern->notify, acl);
   2690  1.1.1.5  christos     }
   2691  1.1.1.6  christos #line 2692 "configparser.c"
   2692      1.1  christos     break;
   2693      1.1  christos 
   2694  1.1.1.6  christos   case 135:
   2695  1.1.1.6  christos #line 824 "configparser.y"
   2696  1.1.1.5  christos     {
   2697  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[-1].str), (yyvsp[0].str));
   2698  1.1.1.5  christos       append_acl(&cfg_parser->pattern->provide_xfr, acl);
   2699  1.1.1.5  christos     }
   2700  1.1.1.6  christos #line 2701 "configparser.c"
   2701      1.1  christos     break;
   2702      1.1  christos 
   2703  1.1.1.6  christos   case 136:
   2704  1.1.1.6  christos #line 829 "configparser.y"
   2705  1.1.1.5  christos     {
   2706  1.1.1.5  christos       acl_options_type *acl = parse_acl_info(cfg_parser->opt->region, (yyvsp[0].str), "NOKEY");
   2707  1.1.1.5  christos       append_acl(&cfg_parser->pattern->outgoing_interface, acl);
   2708  1.1.1.5  christos     }
   2709  1.1.1.6  christos #line 2710 "configparser.c"
   2710      1.1  christos     break;
   2711      1.1  christos 
   2712  1.1.1.6  christos   case 137:
   2713  1.1.1.6  christos #line 834 "configparser.y"
   2714  1.1.1.5  christos     {
   2715  1.1.1.5  christos       cfg_parser->pattern->allow_axfr_fallback = (yyvsp[0].bln);
   2716  1.1.1.5  christos       cfg_parser->pattern->allow_axfr_fallback_is_default = 0;
   2717  1.1.1.5  christos     }
   2718  1.1.1.6  christos #line 2719 "configparser.c"
   2719      1.1  christos     break;
   2720      1.1  christos 
   2721  1.1.1.6  christos   case 138:
   2722  1.1.1.6  christos #line 839 "configparser.y"
   2723      1.1  christos     {
   2724  1.1.1.5  christos       cfg_parser->pattern->notify_retry = (yyvsp[0].llng);
   2725  1.1.1.5  christos       cfg_parser->pattern->notify_retry_is_default = 0;
   2726  1.1.1.5  christos     }
   2727  1.1.1.6  christos #line 2728 "configparser.c"
   2728      1.1  christos     break;
   2729      1.1  christos 
   2730  1.1.1.6  christos   case 139:
   2731  1.1.1.6  christos #line 844 "configparser.y"
   2732      1.1  christos     {
   2733  1.1.1.5  christos       cfg_parser->pattern->max_refresh_time = (yyvsp[0].llng);
   2734  1.1.1.5  christos       cfg_parser->pattern->max_refresh_time_is_default = 0;
   2735  1.1.1.5  christos     }
   2736  1.1.1.6  christos #line 2737 "configparser.c"
   2737      1.1  christos     break;
   2738      1.1  christos 
   2739  1.1.1.6  christos   case 140:
   2740  1.1.1.6  christos #line 849 "configparser.y"
   2741      1.1  christos     {
   2742  1.1.1.5  christos       cfg_parser->pattern->min_refresh_time = (yyvsp[0].llng);
   2743  1.1.1.5  christos       cfg_parser->pattern->min_refresh_time_is_default = 0;
   2744  1.1.1.5  christos     }
   2745  1.1.1.6  christos #line 2746 "configparser.c"
   2746      1.1  christos     break;
   2747      1.1  christos 
   2748  1.1.1.6  christos   case 141:
   2749  1.1.1.6  christos #line 854 "configparser.y"
   2750      1.1  christos     {
   2751  1.1.1.5  christos       cfg_parser->pattern->max_retry_time = (yyvsp[0].llng);
   2752  1.1.1.5  christos       cfg_parser->pattern->max_retry_time_is_default = 0;
   2753  1.1.1.5  christos     }
   2754  1.1.1.6  christos #line 2755 "configparser.c"
   2755      1.1  christos     break;
   2756      1.1  christos 
   2757  1.1.1.6  christos   case 142:
   2758  1.1.1.6  christos #line 859 "configparser.y"
   2759      1.1  christos     {
   2760  1.1.1.5  christos       cfg_parser->pattern->min_retry_time = (yyvsp[0].llng);
   2761  1.1.1.5  christos       cfg_parser->pattern->min_retry_time_is_default = 0;
   2762  1.1.1.5  christos     }
   2763  1.1.1.6  christos #line 2764 "configparser.c"
   2764      1.1  christos     break;
   2765      1.1  christos 
   2766  1.1.1.6  christos   case 143:
   2767  1.1.1.6  christos #line 864 "configparser.y"
   2768  1.1.1.6  christos     {
   2769  1.1.1.6  christos       long long num;
   2770  1.1.1.6  christos       uint8_t expr;
   2771  1.1.1.6  christos 
   2772  1.1.1.6  christos       if (!parse_expire_expr((yyvsp[0].str), &num, &expr)) {
   2773  1.1.1.6  christos         yyerror("expected an expire time in seconds or \"refresh+retry+1\"");
   2774  1.1.1.6  christos         YYABORT; /* trigger a parser error */
   2775  1.1.1.6  christos       }
   2776  1.1.1.6  christos       cfg_parser->pattern->min_expire_time = num;
   2777  1.1.1.6  christos       cfg_parser->pattern->min_expire_time_expr = expr;
   2778  1.1.1.6  christos     }
   2779  1.1.1.6  christos #line 2780 "configparser.c"
   2780  1.1.1.6  christos     break;
   2781  1.1.1.6  christos 
   2782  1.1.1.6  christos   case 144:
   2783  1.1.1.6  christos #line 878 "configparser.y"
   2784  1.1.1.5  christos     {
   2785  1.1.1.5  christos       struct ip_address_option *ip = region_alloc_zero(
   2786  1.1.1.5  christos         cfg_parser->opt->region, sizeof(*ip));
   2787  1.1.1.5  christos       ip->address = region_strdup(cfg_parser->opt->region, (yyvsp[0].str));
   2788  1.1.1.6  christos       ip->fib = -1;
   2789  1.1.1.5  christos       (yyval.ip) = ip;
   2790  1.1.1.5  christos     }
   2791  1.1.1.6  christos #line 2792 "configparser.c"
   2792      1.1  christos     break;
   2793      1.1  christos 
   2794  1.1.1.6  christos   case 145:
   2795  1.1.1.6  christos #line 888 "configparser.y"
   2796  1.1.1.5  christos     {
   2797  1.1.1.6  christos       if(!parse_number((yyvsp[0].str), &(yyval.llng))) {
   2798  1.1.1.5  christos         yyerror("expected a number");
   2799  1.1.1.5  christos         YYABORT; /* trigger a parser error */
   2800  1.1.1.5  christos       }
   2801  1.1.1.5  christos     }
   2802  1.1.1.6  christos #line 2803 "configparser.c"
   2803      1.1  christos     break;
   2804      1.1  christos 
   2805  1.1.1.6  christos   case 146:
   2806  1.1.1.6  christos #line 897 "configparser.y"
   2807  1.1.1.5  christos     {
   2808  1.1.1.6  christos       if(!parse_boolean((yyvsp[0].str), &(yyval.bln))) {
   2809  1.1.1.5  christos         yyerror("expected yes or no");
   2810  1.1.1.5  christos         YYABORT; /* trigger a parser error */
   2811  1.1.1.5  christos       }
   2812  1.1.1.5  christos     }
   2813  1.1.1.6  christos #line 2814 "configparser.c"
   2814      1.1  christos     break;
   2815      1.1  christos 
   2816      1.1  christos 
   2817  1.1.1.6  christos #line 2818 "configparser.c"
   2818  1.1.1.6  christos 
   2819      1.1  christos       default: break;
   2820      1.1  christos     }
   2821      1.1  christos   /* User semantic actions sometimes alter yychar, and that requires
   2822      1.1  christos      that yytoken be updated with the new translation.  We take the
   2823      1.1  christos      approach of translating immediately before every use of yytoken.
   2824      1.1  christos      One alternative is translating here after every semantic action,
   2825      1.1  christos      but that translation would be missed if the semantic action invokes
   2826      1.1  christos      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
   2827      1.1  christos      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
   2828      1.1  christos      incorrect destructor might then be invoked immediately.  In the
   2829      1.1  christos      case of YYERROR or YYBACKUP, subsequent parser actions might lead
   2830      1.1  christos      to an incorrect destructor call or verbose syntax error message
   2831      1.1  christos      before the lookahead is translated.  */
   2832      1.1  christos   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
   2833      1.1  christos 
   2834      1.1  christos   YYPOPSTACK (yylen);
   2835      1.1  christos   yylen = 0;
   2836      1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   2837      1.1  christos 
   2838      1.1  christos   *++yyvsp = yyval;
   2839      1.1  christos 
   2840      1.1  christos   /* Now 'shift' the result of the reduction.  Determine what state
   2841      1.1  christos      that goes to, based on the state we popped back to and the rule
   2842      1.1  christos      number reduced by.  */
   2843  1.1.1.6  christos   {
   2844  1.1.1.6  christos     const int yylhs = yyr1[yyn] - YYNTOKENS;
   2845  1.1.1.6  christos     const int yyi = yypgoto[yylhs] + *yyssp;
   2846  1.1.1.6  christos     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
   2847  1.1.1.6  christos                ? yytable[yyi]
   2848  1.1.1.6  christos                : yydefgoto[yylhs]);
   2849  1.1.1.6  christos   }
   2850      1.1  christos 
   2851      1.1  christos   goto yynewstate;
   2852      1.1  christos 
   2853      1.1  christos 
   2854      1.1  christos /*--------------------------------------.
   2855      1.1  christos | yyerrlab -- here on detecting error.  |
   2856      1.1  christos `--------------------------------------*/
   2857      1.1  christos yyerrlab:
   2858      1.1  christos   /* Make sure we have latest lookahead translation.  See comments at
   2859      1.1  christos      user semantic actions for why this is necessary.  */
   2860      1.1  christos   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
   2861      1.1  christos 
   2862      1.1  christos   /* If not already recovering from an error, report this error.  */
   2863      1.1  christos   if (!yyerrstatus)
   2864      1.1  christos     {
   2865      1.1  christos       ++yynerrs;
   2866      1.1  christos #if ! YYERROR_VERBOSE
   2867      1.1  christos       yyerror (YY_("syntax error"));
   2868      1.1  christos #else
   2869      1.1  christos # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
   2870      1.1  christos                                         yyssp, yytoken)
   2871      1.1  christos       {
   2872      1.1  christos         char const *yymsgp = YY_("syntax error");
   2873      1.1  christos         int yysyntax_error_status;
   2874      1.1  christos         yysyntax_error_status = YYSYNTAX_ERROR;
   2875      1.1  christos         if (yysyntax_error_status == 0)
   2876      1.1  christos           yymsgp = yymsg;
   2877      1.1  christos         else if (yysyntax_error_status == 1)
   2878      1.1  christos           {
   2879      1.1  christos             if (yymsg != yymsgbuf)
   2880      1.1  christos               YYSTACK_FREE (yymsg);
   2881      1.1  christos             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
   2882      1.1  christos             if (!yymsg)
   2883      1.1  christos               {
   2884      1.1  christos                 yymsg = yymsgbuf;
   2885      1.1  christos                 yymsg_alloc = sizeof yymsgbuf;
   2886      1.1  christos                 yysyntax_error_status = 2;
   2887      1.1  christos               }
   2888      1.1  christos             else
   2889      1.1  christos               {
   2890      1.1  christos                 yysyntax_error_status = YYSYNTAX_ERROR;
   2891      1.1  christos                 yymsgp = yymsg;
   2892      1.1  christos               }
   2893      1.1  christos           }
   2894      1.1  christos         yyerror (yymsgp);
   2895      1.1  christos         if (yysyntax_error_status == 2)
   2896      1.1  christos           goto yyexhaustedlab;
   2897      1.1  christos       }
   2898      1.1  christos # undef YYSYNTAX_ERROR
   2899      1.1  christos #endif
   2900      1.1  christos     }
   2901      1.1  christos 
   2902      1.1  christos 
   2903      1.1  christos 
   2904      1.1  christos   if (yyerrstatus == 3)
   2905      1.1  christos     {
   2906      1.1  christos       /* If just tried and failed to reuse lookahead token after an
   2907      1.1  christos          error, discard it.  */
   2908      1.1  christos 
   2909      1.1  christos       if (yychar <= YYEOF)
   2910      1.1  christos         {
   2911      1.1  christos           /* Return failure if at end of input.  */
   2912      1.1  christos           if (yychar == YYEOF)
   2913      1.1  christos             YYABORT;
   2914      1.1  christos         }
   2915      1.1  christos       else
   2916      1.1  christos         {
   2917      1.1  christos           yydestruct ("Error: discarding",
   2918      1.1  christos                       yytoken, &yylval);
   2919      1.1  christos           yychar = YYEMPTY;
   2920      1.1  christos         }
   2921      1.1  christos     }
   2922      1.1  christos 
   2923      1.1  christos   /* Else will try to reuse lookahead token after shifting the error
   2924      1.1  christos      token.  */
   2925      1.1  christos   goto yyerrlab1;
   2926      1.1  christos 
   2927      1.1  christos 
   2928      1.1  christos /*---------------------------------------------------.
   2929      1.1  christos | yyerrorlab -- error raised explicitly by YYERROR.  |
   2930      1.1  christos `---------------------------------------------------*/
   2931      1.1  christos yyerrorlab:
   2932  1.1.1.6  christos   /* Pacify compilers when the user code never invokes YYERROR and the
   2933  1.1.1.6  christos      label yyerrorlab therefore never appears in user code.  */
   2934  1.1.1.6  christos   if (0)
   2935  1.1.1.6  christos     YYERROR;
   2936      1.1  christos 
   2937      1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   2938      1.1  christos      this YYERROR.  */
   2939      1.1  christos   YYPOPSTACK (yylen);
   2940      1.1  christos   yylen = 0;
   2941      1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   2942      1.1  christos   yystate = *yyssp;
   2943      1.1  christos   goto yyerrlab1;
   2944      1.1  christos 
   2945      1.1  christos 
   2946      1.1  christos /*-------------------------------------------------------------.
   2947      1.1  christos | yyerrlab1 -- common code for both syntax error and YYERROR.  |
   2948      1.1  christos `-------------------------------------------------------------*/
   2949      1.1  christos yyerrlab1:
   2950      1.1  christos   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
   2951      1.1  christos 
   2952      1.1  christos   for (;;)
   2953      1.1  christos     {
   2954      1.1  christos       yyn = yypact[yystate];
   2955      1.1  christos       if (!yypact_value_is_default (yyn))
   2956      1.1  christos         {
   2957      1.1  christos           yyn += YYTERROR;
   2958      1.1  christos           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
   2959      1.1  christos             {
   2960      1.1  christos               yyn = yytable[yyn];
   2961      1.1  christos               if (0 < yyn)
   2962      1.1  christos                 break;
   2963      1.1  christos             }
   2964      1.1  christos         }
   2965      1.1  christos 
   2966      1.1  christos       /* Pop the current state because it cannot handle the error token.  */
   2967      1.1  christos       if (yyssp == yyss)
   2968      1.1  christos         YYABORT;
   2969      1.1  christos 
   2970      1.1  christos 
   2971      1.1  christos       yydestruct ("Error: popping",
   2972      1.1  christos                   yystos[yystate], yyvsp);
   2973      1.1  christos       YYPOPSTACK (1);
   2974      1.1  christos       yystate = *yyssp;
   2975      1.1  christos       YY_STACK_PRINT (yyss, yyssp);
   2976      1.1  christos     }
   2977      1.1  christos 
   2978      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   2979      1.1  christos   *++yyvsp = yylval;
   2980      1.1  christos   YY_IGNORE_MAYBE_UNINITIALIZED_END
   2981      1.1  christos 
   2982      1.1  christos 
   2983      1.1  christos   /* Shift the error token.  */
   2984      1.1  christos   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
   2985      1.1  christos 
   2986      1.1  christos   yystate = yyn;
   2987      1.1  christos   goto yynewstate;
   2988      1.1  christos 
   2989      1.1  christos 
   2990      1.1  christos /*-------------------------------------.
   2991      1.1  christos | yyacceptlab -- YYACCEPT comes here.  |
   2992      1.1  christos `-------------------------------------*/
   2993      1.1  christos yyacceptlab:
   2994      1.1  christos   yyresult = 0;
   2995      1.1  christos   goto yyreturn;
   2996      1.1  christos 
   2997  1.1.1.6  christos 
   2998      1.1  christos /*-----------------------------------.
   2999      1.1  christos | yyabortlab -- YYABORT comes here.  |
   3000      1.1  christos `-----------------------------------*/
   3001      1.1  christos yyabortlab:
   3002      1.1  christos   yyresult = 1;
   3003      1.1  christos   goto yyreturn;
   3004      1.1  christos 
   3005  1.1.1.6  christos 
   3006      1.1  christos #if !defined yyoverflow || YYERROR_VERBOSE
   3007      1.1  christos /*-------------------------------------------------.
   3008      1.1  christos | yyexhaustedlab -- memory exhaustion comes here.  |
   3009      1.1  christos `-------------------------------------------------*/
   3010      1.1  christos yyexhaustedlab:
   3011      1.1  christos   yyerror (YY_("memory exhausted"));
   3012      1.1  christos   yyresult = 2;
   3013      1.1  christos   /* Fall through.  */
   3014      1.1  christos #endif
   3015      1.1  christos 
   3016  1.1.1.6  christos 
   3017  1.1.1.6  christos /*-----------------------------------------------------.
   3018  1.1.1.6  christos | yyreturn -- parsing is finished, return the result.  |
   3019  1.1.1.6  christos `-----------------------------------------------------*/
   3020      1.1  christos yyreturn:
   3021      1.1  christos   if (yychar != YYEMPTY)
   3022      1.1  christos     {
   3023      1.1  christos       /* Make sure we have latest lookahead translation.  See comments at
   3024      1.1  christos          user semantic actions for why this is necessary.  */
   3025      1.1  christos       yytoken = YYTRANSLATE (yychar);
   3026      1.1  christos       yydestruct ("Cleanup: discarding lookahead",
   3027      1.1  christos                   yytoken, &yylval);
   3028      1.1  christos     }
   3029      1.1  christos   /* Do not reclaim the symbols of the rule whose action triggered
   3030      1.1  christos      this YYABORT or YYACCEPT.  */
   3031      1.1  christos   YYPOPSTACK (yylen);
   3032      1.1  christos   YY_STACK_PRINT (yyss, yyssp);
   3033      1.1  christos   while (yyssp != yyss)
   3034      1.1  christos     {
   3035      1.1  christos       yydestruct ("Cleanup: popping",
   3036      1.1  christos                   yystos[*yyssp], yyvsp);
   3037      1.1  christos       YYPOPSTACK (1);
   3038      1.1  christos     }
   3039      1.1  christos #ifndef yyoverflow
   3040      1.1  christos   if (yyss != yyssa)
   3041      1.1  christos     YYSTACK_FREE (yyss);
   3042      1.1  christos #endif
   3043      1.1  christos #if YYERROR_VERBOSE
   3044      1.1  christos   if (yymsg != yymsgbuf)
   3045      1.1  christos     YYSTACK_FREE (yymsg);
   3046      1.1  christos #endif
   3047      1.1  christos   return yyresult;
   3048      1.1  christos }
   3049  1.1.1.6  christos #line 904 "configparser.y"
   3050      1.1  christos 
   3051      1.1  christos 
   3052  1.1.1.5  christos static void
   3053  1.1.1.5  christos append_acl(struct acl_options **list, struct acl_options *acl)
   3054  1.1.1.5  christos {
   3055  1.1.1.5  christos 	assert(list != NULL);
   3056  1.1.1.5  christos 
   3057  1.1.1.5  christos 	if(*list == NULL) {
   3058  1.1.1.5  christos 		*list = acl;
   3059  1.1.1.5  christos 	} else {
   3060  1.1.1.5  christos 		struct acl_options *tail = *list;
   3061  1.1.1.5  christos 		while(tail->next != NULL)
   3062  1.1.1.5  christos 			tail = tail->next;
   3063  1.1.1.5  christos 		tail->next = acl;
   3064  1.1.1.5  christos 	}
   3065  1.1.1.5  christos }
   3066  1.1.1.5  christos 
   3067  1.1.1.6  christos static int
   3068  1.1.1.6  christos parse_boolean(const char *str, int *bln)
   3069  1.1.1.6  christos {
   3070  1.1.1.6  christos 	if(strcmp(str, "yes") == 0) {
   3071  1.1.1.6  christos 		*bln = 1;
   3072  1.1.1.6  christos 	} else if(strcmp(str, "no") == 0) {
   3073  1.1.1.6  christos 		*bln = 0;
   3074  1.1.1.6  christos 	} else {
   3075  1.1.1.6  christos 		return 0;
   3076  1.1.1.6  christos 	}
   3077  1.1.1.6  christos 
   3078  1.1.1.6  christos 	return 1;
   3079  1.1.1.6  christos }
   3080  1.1.1.6  christos 
   3081  1.1.1.6  christos static int
   3082  1.1.1.6  christos parse_expire_expr(const char *str, long long *num, uint8_t *expr)
   3083  1.1.1.6  christos {
   3084  1.1.1.6  christos 	if(parse_number(str, num)) {
   3085  1.1.1.6  christos 		*expr = EXPIRE_TIME_HAS_VALUE;
   3086  1.1.1.6  christos 		return 1;
   3087  1.1.1.6  christos 	}
   3088  1.1.1.6  christos 	if(strcmp(str, REFRESHPLUSRETRYPLUS1_STR) == 0) {
   3089  1.1.1.6  christos 		*num = 0;
   3090  1.1.1.6  christos 		*expr = REFRESHPLUSRETRYPLUS1;
   3091  1.1.1.6  christos 		return 1;
   3092  1.1.1.6  christos 	}
   3093  1.1.1.6  christos 	return 0;
   3094  1.1.1.6  christos }
   3095  1.1.1.6  christos 
   3096  1.1.1.6  christos static int
   3097  1.1.1.6  christos parse_number(const char *str, long long *num)
   3098  1.1.1.6  christos {
   3099  1.1.1.6  christos 	/* ensure string consists entirely of digits */
   3100  1.1.1.6  christos 	size_t pos = 0;
   3101  1.1.1.6  christos 	while(str[pos] >= '0' && str[pos] <= '9') {
   3102  1.1.1.6  christos 		pos++;
   3103  1.1.1.6  christos 	}
   3104  1.1.1.6  christos 
   3105  1.1.1.6  christos 	if(pos != 0 && str[pos] == '\0') {
   3106  1.1.1.6  christos 		*num = strtoll(str, NULL, 10);
   3107  1.1.1.6  christos 		return 1;
   3108  1.1.1.6  christos 	}
   3109  1.1.1.6  christos 
   3110  1.1.1.6  christos 	return 0;
   3111  1.1.1.6  christos }
   3112  1.1.1.6  christos 
   3113  1.1.1.6  christos static int
   3114  1.1.1.6  christos parse_range(const char *str, long long *low, long long *high)
   3115  1.1.1.6  christos {
   3116  1.1.1.6  christos 	const char *ptr = str;
   3117  1.1.1.6  christos 	long long num[2];
   3118  1.1.1.6  christos 
   3119  1.1.1.6  christos 	/* require range to begin with a number */
   3120  1.1.1.6  christos 	if(*ptr < '0' || *ptr > '9') {
   3121  1.1.1.6  christos 		return 0;
   3122  1.1.1.6  christos 	}
   3123  1.1.1.6  christos 
   3124  1.1.1.6  christos 	num[0] = strtoll(ptr, (char **)&ptr, 10);
   3125  1.1.1.6  christos 
   3126  1.1.1.6  christos 	/* require number to be followed by nothing at all or a dash */
   3127  1.1.1.6  christos 	if(*ptr == '\0') {
   3128  1.1.1.6  christos 		*low = num[0];
   3129  1.1.1.6  christos 		*high = num[0];
   3130  1.1.1.6  christos 		return 1;
   3131  1.1.1.6  christos 	} else if(*ptr != '-') {
   3132  1.1.1.6  christos 		return 0;
   3133  1.1.1.6  christos 	}
   3134  1.1.1.6  christos 
   3135  1.1.1.6  christos 	++ptr;
   3136  1.1.1.6  christos 	/* require dash to be followed by a number */
   3137  1.1.1.6  christos 	if(*ptr < '0' || *ptr > '9') {
   3138  1.1.1.6  christos 		return 0;
   3139  1.1.1.6  christos 	}
   3140  1.1.1.6  christos 
   3141  1.1.1.6  christos 	num[1] = strtoll(ptr, (char **)&ptr, 10);
   3142  1.1.1.6  christos 
   3143  1.1.1.6  christos 	/* require number to be followed by nothing at all */
   3144  1.1.1.6  christos 	if(*ptr == '\0') {
   3145  1.1.1.6  christos 		if(num[0] < num[1]) {
   3146  1.1.1.6  christos 			*low = num[0];
   3147  1.1.1.6  christos 			*high = num[1];
   3148  1.1.1.6  christos 		} else {
   3149  1.1.1.6  christos 			*low = num[1];
   3150  1.1.1.6  christos 			*high = num[0];
   3151  1.1.1.6  christos 		}
   3152  1.1.1.6  christos 		return 1;
   3153  1.1.1.6  christos 	}
   3154  1.1.1.6  christos 
   3155  1.1.1.6  christos 	return 0;
   3156  1.1.1.6  christos }
   3157