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