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