]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Parser allows syslog on windows.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 11 Mar 2009 11:53:47 +0000 (11:53 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 11 Mar 2009 11:53:47 +0000 (11:53 +0000)
git-svn-id: file:///svn/unbound/trunk@1519 be551aaa-1e26-0410-a405-d3ace91eadb9

util/configparser.c
util/configparser.h
util/configparser.y

index 114c3ec1ef10829d14307cffc34bef06a228c39d..1f7789d026f4d398f39f4e4473e7ba66c7e800a6 100644 (file)
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     SPACE = 258,
-     LETTER = 259,
-     NEWLINE = 260,
-     COMMENT = 261,
-     COLON = 262,
-     ANY = 263,
-     ZONESTR = 264,
-     STRING = 265,
-     VAR_SERVER = 266,
-     VAR_VERBOSITY = 267,
-     VAR_NUM_THREADS = 268,
-     VAR_PORT = 269,
-     VAR_OUTGOING_RANGE = 270,
-     VAR_INTERFACE = 271,
-     VAR_DO_IP4 = 272,
-     VAR_DO_IP6 = 273,
-     VAR_DO_UDP = 274,
-     VAR_DO_TCP = 275,
-     VAR_CHROOT = 276,
-     VAR_USERNAME = 277,
-     VAR_DIRECTORY = 278,
-     VAR_LOGFILE = 279,
-     VAR_PIDFILE = 280,
-     VAR_MSG_CACHE_SIZE = 281,
-     VAR_MSG_CACHE_SLABS = 282,
-     VAR_NUM_QUERIES_PER_THREAD = 283,
-     VAR_RRSET_CACHE_SIZE = 284,
-     VAR_RRSET_CACHE_SLABS = 285,
-     VAR_OUTGOING_NUM_TCP = 286,
-     VAR_INFRA_HOST_TTL = 287,
-     VAR_INFRA_LAME_TTL = 288,
-     VAR_INFRA_CACHE_SLABS = 289,
-     VAR_INFRA_CACHE_NUMHOSTS = 290,
-     VAR_INFRA_CACHE_LAME_SIZE = 291,
-     VAR_NAME = 292,
-     VAR_STUB_ZONE = 293,
-     VAR_STUB_HOST = 294,
-     VAR_STUB_ADDR = 295,
-     VAR_TARGET_FETCH_POLICY = 296,
-     VAR_HARDEN_SHORT_BUFSIZE = 297,
-     VAR_HARDEN_LARGE_QUERIES = 298,
-     VAR_FORWARD_ZONE = 299,
-     VAR_FORWARD_HOST = 300,
-     VAR_FORWARD_ADDR = 301,
-     VAR_DO_NOT_QUERY_ADDRESS = 302,
-     VAR_HIDE_IDENTITY = 303,
-     VAR_HIDE_VERSION = 304,
-     VAR_IDENTITY = 305,
-     VAR_VERSION = 306,
-     VAR_HARDEN_GLUE = 307,
-     VAR_MODULE_CONF = 308,
-     VAR_TRUST_ANCHOR_FILE = 309,
-     VAR_TRUST_ANCHOR = 310,
-     VAR_VAL_OVERRIDE_DATE = 311,
-     VAR_BOGUS_TTL = 312,
-     VAR_VAL_CLEAN_ADDITIONAL = 313,
-     VAR_VAL_PERMISSIVE_MODE = 314,
-     VAR_INCOMING_NUM_TCP = 315,
-     VAR_MSG_BUFFER_SIZE = 316,
-     VAR_KEY_CACHE_SIZE = 317,
-     VAR_KEY_CACHE_SLABS = 318,
-     VAR_TRUSTED_KEYS_FILE = 319,
-     VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 320,
-     VAR_USE_SYSLOG = 321,
-     VAR_OUTGOING_INTERFACE = 322,
-     VAR_ROOT_HINTS = 323,
-     VAR_DO_NOT_QUERY_LOCALHOST = 324,
-     VAR_CACHE_MAX_TTL = 325,
-     VAR_HARDEN_DNNSEC_STRIPPED = 326,
-     VAR_ACCESS_CONTROL = 327,
-     VAR_LOCAL_ZONE = 328,
-     VAR_LOCAL_DATA = 329,
-     VAR_INTERFACE_AUTOMATIC = 330,
-     VAR_STATISTICS_INTERVAL = 331,
-     VAR_DO_DAEMONIZE = 332,
-     VAR_USE_CAPS_FOR_ID = 333,
-     VAR_STATISTICS_CUMULATIVE = 334,
-     VAR_OUTGOING_PORT_PERMIT = 335,
-     VAR_OUTGOING_PORT_AVOID = 336,
-     VAR_DLV_ANCHOR_FILE = 337,
-     VAR_DLV_ANCHOR = 338,
-     VAR_NEG_CACHE_SIZE = 339,
-     VAR_HARDEN_REFERRAL_PATH = 340,
-     VAR_PRIVATE_ADDRESS = 341,
-     VAR_PRIVATE_DOMAIN = 342,
-     VAR_REMOTE_CONTROL = 343,
-     VAR_CONTROL_ENABLE = 344,
-     VAR_CONTROL_INTERFACE = 345,
-     VAR_CONTROL_PORT = 346,
-     VAR_SERVER_KEY_FILE = 347,
-     VAR_SERVER_CERT_FILE = 348,
-     VAR_CONTROL_KEY_FILE = 349,
-     VAR_CONTROL_CERT_FILE = 350,
-     VAR_EXTENDED_STATISTICS = 351,
-     VAR_LOCAL_DATA_PTR = 352,
-     VAR_JOSTLE_TIMEOUT = 353,
-     VAR_STUB_PRIME = 354,
-     VAR_UNWANTED_REPLY_THRESHOLD = 355,
-     VAR_LOG_TIME_ASCII = 356
-   };
+#ifndef lint
+static const char yysccsid[] = "@(#)yaccpar    1.9 (Berkeley) 02/21/93";
 #endif
-/* Tokens.  */
-#define SPACE 258
-#define LETTER 259
-#define NEWLINE 260
-#define COMMENT 261
-#define COLON 262
-#define ANY 263
-#define ZONESTR 264
-#define STRING 265
-#define VAR_SERVER 266
-#define VAR_VERBOSITY 267
-#define VAR_NUM_THREADS 268
-#define VAR_PORT 269
-#define VAR_OUTGOING_RANGE 270
-#define VAR_INTERFACE 271
-#define VAR_DO_IP4 272
-#define VAR_DO_IP6 273
-#define VAR_DO_UDP 274
-#define VAR_DO_TCP 275
-#define VAR_CHROOT 276
-#define VAR_USERNAME 277
-#define VAR_DIRECTORY 278
-#define VAR_LOGFILE 279
-#define VAR_PIDFILE 280
-#define VAR_MSG_CACHE_SIZE 281
-#define VAR_MSG_CACHE_SLABS 282
-#define VAR_NUM_QUERIES_PER_THREAD 283
-#define VAR_RRSET_CACHE_SIZE 284
-#define VAR_RRSET_CACHE_SLABS 285
-#define VAR_OUTGOING_NUM_TCP 286
-#define VAR_INFRA_HOST_TTL 287
-#define VAR_INFRA_LAME_TTL 288
-#define VAR_INFRA_CACHE_SLABS 289
-#define VAR_INFRA_CACHE_NUMHOSTS 290
-#define VAR_INFRA_CACHE_LAME_SIZE 291
-#define VAR_NAME 292
-#define VAR_STUB_ZONE 293
-#define VAR_STUB_HOST 294
-#define VAR_STUB_ADDR 295
-#define VAR_TARGET_FETCH_POLICY 296
-#define VAR_HARDEN_SHORT_BUFSIZE 297
-#define VAR_HARDEN_LARGE_QUERIES 298
-#define VAR_FORWARD_ZONE 299
-#define VAR_FORWARD_HOST 300
-#define VAR_FORWARD_ADDR 301
-#define VAR_DO_NOT_QUERY_ADDRESS 302
-#define VAR_HIDE_IDENTITY 303
-#define VAR_HIDE_VERSION 304
-#define VAR_IDENTITY 305
-#define VAR_VERSION 306
-#define VAR_HARDEN_GLUE 307
-#define VAR_MODULE_CONF 308
-#define VAR_TRUST_ANCHOR_FILE 309
-#define VAR_TRUST_ANCHOR 310
-#define VAR_VAL_OVERRIDE_DATE 311
-#define VAR_BOGUS_TTL 312
-#define VAR_VAL_CLEAN_ADDITIONAL 313
-#define VAR_VAL_PERMISSIVE_MODE 314
-#define VAR_INCOMING_NUM_TCP 315
-#define VAR_MSG_BUFFER_SIZE 316
-#define VAR_KEY_CACHE_SIZE 317
-#define VAR_KEY_CACHE_SLABS 318
-#define VAR_TRUSTED_KEYS_FILE 319
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 320
-#define VAR_USE_SYSLOG 321
-#define VAR_OUTGOING_INTERFACE 322
-#define VAR_ROOT_HINTS 323
-#define VAR_DO_NOT_QUERY_LOCALHOST 324
-#define VAR_CACHE_MAX_TTL 325
-#define VAR_HARDEN_DNNSEC_STRIPPED 326
-#define VAR_ACCESS_CONTROL 327
-#define VAR_LOCAL_ZONE 328
-#define VAR_LOCAL_DATA 329
-#define VAR_INTERFACE_AUTOMATIC 330
-#define VAR_STATISTICS_INTERVAL 331
-#define VAR_DO_DAEMONIZE 332
-#define VAR_USE_CAPS_FOR_ID 333
-#define VAR_STATISTICS_CUMULATIVE 334
-#define VAR_OUTGOING_PORT_PERMIT 335
-#define VAR_OUTGOING_PORT_AVOID 336
-#define VAR_DLV_ANCHOR_FILE 337
-#define VAR_DLV_ANCHOR 338
-#define VAR_NEG_CACHE_SIZE 339
-#define VAR_HARDEN_REFERRAL_PATH 340
-#define VAR_PRIVATE_ADDRESS 341
-#define VAR_PRIVATE_DOMAIN 342
-#define VAR_REMOTE_CONTROL 343
-#define VAR_CONTROL_ENABLE 344
-#define VAR_CONTROL_INTERFACE 345
-#define VAR_CONTROL_PORT 346
-#define VAR_SERVER_KEY_FILE 347
-#define VAR_SERVER_CERT_FILE 348
-#define VAR_CONTROL_KEY_FILE 349
-#define VAR_CONTROL_CERT_FILE 350
-#define VAR_EXTENDED_STATISTICS 351
-#define VAR_LOCAL_DATA_PTR 352
-#define VAR_JOSTLE_TIMEOUT 353
-#define VAR_STUB_PRIME 354
-#define VAR_UNWANTED_REPLY_THRESHOLD 355
-#define VAR_LOG_TIME_ASCII 356
 
+#include <stdlib.h>
+#include <string.h>
 
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYPATCH 20070509
 
+#define YYEMPTY (-1)
+#define yyclearin    (yychar = YYEMPTY)
+#define yyerrok      (yyerrflag = 0)
+#define YYRECOVERING (yyerrflag != 0)
 
-/* Copy the first part of user declarations.  */
-#line 38 "util/configparser.y"
+extern int yyparse(void);
 
+static int yygrowstack(void);
+#define YYPREFIX "yy"
+#line 39 "util/configparser.y"
 #include "config.h"
 
 #include <stdarg.h>
@@ -298,1586 +44,817 @@ extern struct config_parser_state* cfg_parser;
 #define OUTYY(s)
 #endif
 
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
 #line 64 "util/configparser.y"
-{
+typedef union {
        char*   str;
-}
-/* Line 187 of yacc.c.  */
-#line 329 "util/configparser.c"
-       YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Line 216 of yacc.c.  */
-#line 342 "util/configparser.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
-    int i;
-#endif
-{
-  return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
-       && ! ((defined YYMALLOC || defined malloc) \
-            && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         YYSIZE_T yyi;                         \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (YYID (0))
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  2
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   182
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  102
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  103
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  195
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  286
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   356
-
-#define YYTRANSLATE(YYX)                                               \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     4,     7,    10,    13,    16,    19,    21,
-      24,    25,    27,    29,    31,    33,    35,    37,    39,    41,
-      43,    45,    47,    49,    51,    53,    55,    57,    59,    61,
-      63,    65,    67,    69,    71,    73,    75,    77,    79,    81,
-      83,    85,    87,    89,    91,    93,    95,    97,    99,   101,
-     103,   105,   107,   109,   111,   113,   115,   117,   119,   121,
-     123,   125,   127,   129,   131,   133,   135,   137,   139,   141,
-     143,   145,   147,   149,   151,   153,   155,   157,   159,   161,
-     163,   165,   167,   169,   171,   173,   175,   178,   179,   181,
-     183,   185,   187,   189,   192,   193,   195,   197,   199,   202,
-     205,   208,   211,   214,   217,   220,   223,   226,   229,   232,
-     235,   238,   241,   244,   247,   250,   253,   256,   259,   262,
-     265,   268,   271,   274,   277,   280,   283,   286,   289,   292,
-     295,   298,   301,   304,   307,   310,   313,   316,   319,   322,
-     325,   328,   331,   334,   337,   340,   343,   346,   349,   352,
-     355,   358,   361,   364,   367,   370,   373,   376,   379,   383,
-     386,   389,   392,   395,   398,   401,   404,   407,   410,   413,
-     417,   420,   423,   426,   429,   432,   435,   438,   441,   444,
-     446,   449,   450,   452,   454,   456,   458,   460,   462,   464,
-     467,   470,   473,   476,   479,   482
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
-{
-     103,     0,    -1,    -1,   103,   104,    -1,   105,   106,    -1,
-     108,   109,    -1,   111,   112,    -1,   195,   196,    -1,    11,
-      -1,   106,   107,    -1,    -1,   114,    -1,   115,    -1,   119,
-      -1,   122,    -1,   128,    -1,   129,    -1,   130,    -1,   131,
-      -1,   120,    -1,   135,    -1,   136,    -1,   137,    -1,   138,
-      -1,   139,    -1,   151,    -1,   152,    -1,   153,    -1,   155,
-      -1,   156,    -1,   125,    -1,   157,    -1,   158,    -1,   161,
-      -1,   159,    -1,   160,    -1,   162,    -1,   163,    -1,   164,
-      -1,   172,    -1,   146,    -1,   147,    -1,   148,    -1,   149,
-      -1,   165,    -1,   175,    -1,   143,    -1,   145,    -1,   176,
-      -1,   178,    -1,   179,    -1,   180,    -1,   126,    -1,   150,
-      -1,   182,    -1,   183,    -1,   144,    -1,   181,    -1,   133,
-      -1,   121,    -1,   140,    -1,   173,    -1,   177,    -1,   166,
-      -1,   174,    -1,   185,    -1,   186,    -1,   127,    -1,   116,
-      -1,   132,    -1,   168,    -1,   117,    -1,   123,    -1,   124,
-      -1,   141,    -1,   142,    -1,   184,    -1,   167,    -1,   169,
-      -1,   170,    -1,   118,    -1,   187,    -1,   154,    -1,   171,
-      -1,   134,    -1,    38,    -1,   109,   110,    -1,    -1,   188,
-      -1,   189,    -1,   190,    -1,   191,    -1,    44,    -1,   112,
-     113,    -1,    -1,   192,    -1,   193,    -1,   194,    -1,    13,
-      10,    -1,    12,    10,    -1,    76,    10,    -1,    79,    10,
-      -1,    96,    10,    -1,    14,    10,    -1,    16,    10,    -1,
-      67,    10,    -1,    15,    10,    -1,    80,    10,    -1,    81,
-      10,    -1,    31,    10,    -1,    60,    10,    -1,    75,    10,
-      -1,    17,    10,    -1,    18,    10,    -1,    19,    10,    -1,
-      20,    10,    -1,    77,    10,    -1,    66,    10,    -1,   101,
-      10,    -1,    21,    10,    -1,    22,    10,    -1,    23,    10,
-      -1,    24,    10,    -1,    25,    10,    -1,    68,    10,    -1,
-      82,    10,    -1,    83,    10,    -1,    54,    10,    -1,    64,
-      10,    -1,    55,    10,    -1,    48,    10,    -1,    49,    10,
-      -1,    50,    10,    -1,    51,    10,    -1,    61,    10,    -1,
-      26,    10,    -1,    27,    10,    -1,    28,    10,    -1,    98,
-      10,    -1,    29,    10,    -1,    30,    10,    -1,    32,    10,
-      -1,    33,    10,    -1,    35,    10,    -1,    36,    10,    -1,
-      34,    10,    -1,    41,    10,    -1,    42,    10,    -1,    43,
-      10,    -1,    52,    10,    -1,    71,    10,    -1,    85,    10,
-      -1,    78,    10,    -1,    86,    10,    -1,    87,    10,    -1,
-     100,    10,    -1,    47,    10,    -1,    69,    10,    -1,    72,
-      10,    10,    -1,    53,    10,    -1,    56,    10,    -1,    70,
-      10,    -1,    57,    10,    -1,    58,    10,    -1,    59,    10,
-      -1,    65,    10,    -1,    62,    10,    -1,    63,    10,    -1,
-      84,    10,    -1,    73,    10,    10,    -1,    74,    10,    -1,
-      97,    10,    -1,    37,    10,    -1,    39,    10,    -1,    40,
-      10,    -1,    99,    10,    -1,    37,    10,    -1,    45,    10,
-      -1,    46,    10,    -1,    88,    -1,   196,   197,    -1,    -1,
-     198,    -1,   200,    -1,   199,    -1,   201,    -1,   202,    -1,
-     203,    -1,   204,    -1,    89,    10,    -1,    91,    10,    -1,
-      90,    10,    -1,    92,    10,    -1,    93,    10,    -1,    94,
-      10,    -1,    95,    10,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   102,   102,   102,   103,   103,   104,   104,   108,   113,
-     114,   115,   115,   115,   116,   116,   117,   117,   117,   118,
-     118,   118,   119,   119,   119,   120,   120,   121,   121,   122,
-     122,   123,   123,   124,   124,   125,   125,   126,   126,   127,
-     127,   128,   128,   128,   129,   129,   129,   130,   130,   130,
-     131,   131,   132,   132,   133,   133,   134,   134,   135,   135,
-     135,   136,   136,   137,   137,   138,   138,   138,   139,   139,
-     140,   140,   141,   141,   142,   142,   142,   143,   143,   144,
-     144,   145,   145,   146,   146,   148,   160,   161,   162,   162,
-     162,   162,   164,   176,   177,   178,   178,   178,   180,   189,
-     198,   209,   218,   227,   236,   249,   264,   273,   282,   291,
-     300,   309,   318,   327,   336,   345,   354,   363,   377,   386,
-     393,   400,   407,   415,   422,   429,   436,   443,   451,   459,
-     466,   475,   484,   491,   498,   509,   517,   530,   539,   548,
-     556,   569,   578,   587,   596,   605,   618,   625,   635,   645,
-     655,   665,   675,   685,   692,   699,   708,   715,   725,   739,
-     746,   764,   773,   782,   792,   802,   809,   817,   830,   838,
-     858,   865,   880,   887,   894,   901,   911,   918,   925,   932,
-     937,   938,   939,   939,   939,   940,   940,   940,   941,   943,
-     953,   962,   969,   976,   983,   990
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "SPACE", "LETTER", "NEWLINE", "COMMENT",
-  "COLON", "ANY", "ZONESTR", "STRING", "VAR_SERVER", "VAR_VERBOSITY",
-  "VAR_NUM_THREADS", "VAR_PORT", "VAR_OUTGOING_RANGE", "VAR_INTERFACE",
-  "VAR_DO_IP4", "VAR_DO_IP6", "VAR_DO_UDP", "VAR_DO_TCP", "VAR_CHROOT",
-  "VAR_USERNAME", "VAR_DIRECTORY", "VAR_LOGFILE", "VAR_PIDFILE",
-  "VAR_MSG_CACHE_SIZE", "VAR_MSG_CACHE_SLABS",
-  "VAR_NUM_QUERIES_PER_THREAD", "VAR_RRSET_CACHE_SIZE",
-  "VAR_RRSET_CACHE_SLABS", "VAR_OUTGOING_NUM_TCP", "VAR_INFRA_HOST_TTL",
-  "VAR_INFRA_LAME_TTL", "VAR_INFRA_CACHE_SLABS",
-  "VAR_INFRA_CACHE_NUMHOSTS", "VAR_INFRA_CACHE_LAME_SIZE", "VAR_NAME",
-  "VAR_STUB_ZONE", "VAR_STUB_HOST", "VAR_STUB_ADDR",
-  "VAR_TARGET_FETCH_POLICY", "VAR_HARDEN_SHORT_BUFSIZE",
-  "VAR_HARDEN_LARGE_QUERIES", "VAR_FORWARD_ZONE", "VAR_FORWARD_HOST",
-  "VAR_FORWARD_ADDR", "VAR_DO_NOT_QUERY_ADDRESS", "VAR_HIDE_IDENTITY",
-  "VAR_HIDE_VERSION", "VAR_IDENTITY", "VAR_VERSION", "VAR_HARDEN_GLUE",
-  "VAR_MODULE_CONF", "VAR_TRUST_ANCHOR_FILE", "VAR_TRUST_ANCHOR",
-  "VAR_VAL_OVERRIDE_DATE", "VAR_BOGUS_TTL", "VAR_VAL_CLEAN_ADDITIONAL",
-  "VAR_VAL_PERMISSIVE_MODE", "VAR_INCOMING_NUM_TCP", "VAR_MSG_BUFFER_SIZE",
-  "VAR_KEY_CACHE_SIZE", "VAR_KEY_CACHE_SLABS", "VAR_TRUSTED_KEYS_FILE",
-  "VAR_VAL_NSEC3_KEYSIZE_ITERATIONS", "VAR_USE_SYSLOG",
-  "VAR_OUTGOING_INTERFACE", "VAR_ROOT_HINTS", "VAR_DO_NOT_QUERY_LOCALHOST",
-  "VAR_CACHE_MAX_TTL", "VAR_HARDEN_DNNSEC_STRIPPED", "VAR_ACCESS_CONTROL",
-  "VAR_LOCAL_ZONE", "VAR_LOCAL_DATA", "VAR_INTERFACE_AUTOMATIC",
-  "VAR_STATISTICS_INTERVAL", "VAR_DO_DAEMONIZE", "VAR_USE_CAPS_FOR_ID",
-  "VAR_STATISTICS_CUMULATIVE", "VAR_OUTGOING_PORT_PERMIT",
-  "VAR_OUTGOING_PORT_AVOID", "VAR_DLV_ANCHOR_FILE", "VAR_DLV_ANCHOR",
-  "VAR_NEG_CACHE_SIZE", "VAR_HARDEN_REFERRAL_PATH", "VAR_PRIVATE_ADDRESS",
-  "VAR_PRIVATE_DOMAIN", "VAR_REMOTE_CONTROL", "VAR_CONTROL_ENABLE",
-  "VAR_CONTROL_INTERFACE", "VAR_CONTROL_PORT", "VAR_SERVER_KEY_FILE",
-  "VAR_SERVER_CERT_FILE", "VAR_CONTROL_KEY_FILE", "VAR_CONTROL_CERT_FILE",
-  "VAR_EXTENDED_STATISTICS", "VAR_LOCAL_DATA_PTR", "VAR_JOSTLE_TIMEOUT",
-  "VAR_STUB_PRIME", "VAR_UNWANTED_REPLY_THRESHOLD", "VAR_LOG_TIME_ASCII",
-  "$accept", "toplevelvars", "toplevelvar", "serverstart",
-  "contents_server", "content_server", "stubstart", "contents_stub",
-  "content_stub", "forwardstart", "contents_forward", "content_forward",
-  "server_num_threads", "server_verbosity", "server_statistics_interval",
-  "server_statistics_cumulative", "server_extended_statistics",
-  "server_port", "server_interface", "server_outgoing_interface",
-  "server_outgoing_range", "server_outgoing_port_permit",
-  "server_outgoing_port_avoid", "server_outgoing_num_tcp",
-  "server_incoming_num_tcp", "server_interface_automatic", "server_do_ip4",
-  "server_do_ip6", "server_do_udp", "server_do_tcp", "server_do_daemonize",
-  "server_use_syslog", "server_log_time_ascii", "server_chroot",
-  "server_username", "server_directory", "server_logfile",
-  "server_pidfile", "server_root_hints", "server_dlv_anchor_file",
-  "server_dlv_anchor", "server_trust_anchor_file",
-  "server_trusted_keys_file", "server_trust_anchor",
-  "server_hide_identity", "server_hide_version", "server_identity",
-  "server_version", "server_msg_buffer_size", "server_msg_cache_size",
-  "server_msg_cache_slabs", "server_num_queries_per_thread",
-  "server_jostle_timeout", "server_rrset_cache_size",
-  "server_rrset_cache_slabs", "server_infra_host_ttl",
-  "server_infra_lame_ttl", "server_infra_cache_numhosts",
-  "server_infra_cache_lame_size", "server_infra_cache_slabs",
-  "server_target_fetch_policy", "server_harden_short_bufsize",
-  "server_harden_large_queries", "server_harden_glue",
-  "server_harden_dnssec_stripped", "server_harden_referral_path",
-  "server_use_caps_for_id", "server_private_address",
-  "server_private_domain", "server_unwanted_reply_threshold",
-  "server_do_not_query_address", "server_do_not_query_localhost",
-  "server_access_control", "server_module_conf",
-  "server_val_override_date", "server_cache_max_ttl", "server_bogus_ttl",
-  "server_val_clean_additional", "server_val_permissive_mode",
-  "server_val_nsec3_keysize_iterations", "server_key_cache_size",
-  "server_key_cache_slabs", "server_neg_cache_size", "server_local_zone",
-  "server_local_data", "server_local_data_ptr", "stub_name", "stub_host",
-  "stub_addr", "stub_prime", "forward_name", "forward_host",
-  "forward_addr", "rcstart", "contents_rc", "content_rc",
-  "rc_control_enable", "rc_control_port", "rc_control_interface",
-  "rc_server_key_file", "rc_server_cert_file", "rc_control_key_file",
-  "rc_control_cert_file", 0
+} YYSTYPE;
+#line 52 "util/configparser.c"
+#define SPACE 257
+#define LETTER 258
+#define NEWLINE 259
+#define COMMENT 260
+#define COLON 261
+#define ANY 262
+#define ZONESTR 263
+#define STRING 264
+#define VAR_SERVER 265
+#define VAR_VERBOSITY 266
+#define VAR_NUM_THREADS 267
+#define VAR_PORT 268
+#define VAR_OUTGOING_RANGE 269
+#define VAR_INTERFACE 270
+#define VAR_DO_IP4 271
+#define VAR_DO_IP6 272
+#define VAR_DO_UDP 273
+#define VAR_DO_TCP 274
+#define VAR_CHROOT 275
+#define VAR_USERNAME 276
+#define VAR_DIRECTORY 277
+#define VAR_LOGFILE 278
+#define VAR_PIDFILE 279
+#define VAR_MSG_CACHE_SIZE 280
+#define VAR_MSG_CACHE_SLABS 281
+#define VAR_NUM_QUERIES_PER_THREAD 282
+#define VAR_RRSET_CACHE_SIZE 283
+#define VAR_RRSET_CACHE_SLABS 284
+#define VAR_OUTGOING_NUM_TCP 285
+#define VAR_INFRA_HOST_TTL 286
+#define VAR_INFRA_LAME_TTL 287
+#define VAR_INFRA_CACHE_SLABS 288
+#define VAR_INFRA_CACHE_NUMHOSTS 289
+#define VAR_INFRA_CACHE_LAME_SIZE 290
+#define VAR_NAME 291
+#define VAR_STUB_ZONE 292
+#define VAR_STUB_HOST 293
+#define VAR_STUB_ADDR 294
+#define VAR_TARGET_FETCH_POLICY 295
+#define VAR_HARDEN_SHORT_BUFSIZE 296
+#define VAR_HARDEN_LARGE_QUERIES 297
+#define VAR_FORWARD_ZONE 298
+#define VAR_FORWARD_HOST 299
+#define VAR_FORWARD_ADDR 300
+#define VAR_DO_NOT_QUERY_ADDRESS 301
+#define VAR_HIDE_IDENTITY 302
+#define VAR_HIDE_VERSION 303
+#define VAR_IDENTITY 304
+#define VAR_VERSION 305
+#define VAR_HARDEN_GLUE 306
+#define VAR_MODULE_CONF 307
+#define VAR_TRUST_ANCHOR_FILE 308
+#define VAR_TRUST_ANCHOR 309
+#define VAR_VAL_OVERRIDE_DATE 310
+#define VAR_BOGUS_TTL 311
+#define VAR_VAL_CLEAN_ADDITIONAL 312
+#define VAR_VAL_PERMISSIVE_MODE 313
+#define VAR_INCOMING_NUM_TCP 314
+#define VAR_MSG_BUFFER_SIZE 315
+#define VAR_KEY_CACHE_SIZE 316
+#define VAR_KEY_CACHE_SLABS 317
+#define VAR_TRUSTED_KEYS_FILE 318
+#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319
+#define VAR_USE_SYSLOG 320
+#define VAR_OUTGOING_INTERFACE 321
+#define VAR_ROOT_HINTS 322
+#define VAR_DO_NOT_QUERY_LOCALHOST 323
+#define VAR_CACHE_MAX_TTL 324
+#define VAR_HARDEN_DNNSEC_STRIPPED 325
+#define VAR_ACCESS_CONTROL 326
+#define VAR_LOCAL_ZONE 327
+#define VAR_LOCAL_DATA 328
+#define VAR_INTERFACE_AUTOMATIC 329
+#define VAR_STATISTICS_INTERVAL 330
+#define VAR_DO_DAEMONIZE 331
+#define VAR_USE_CAPS_FOR_ID 332
+#define VAR_STATISTICS_CUMULATIVE 333
+#define VAR_OUTGOING_PORT_PERMIT 334
+#define VAR_OUTGOING_PORT_AVOID 335
+#define VAR_DLV_ANCHOR_FILE 336
+#define VAR_DLV_ANCHOR 337
+#define VAR_NEG_CACHE_SIZE 338
+#define VAR_HARDEN_REFERRAL_PATH 339
+#define VAR_PRIVATE_ADDRESS 340
+#define VAR_PRIVATE_DOMAIN 341
+#define VAR_REMOTE_CONTROL 342
+#define VAR_CONTROL_ENABLE 343
+#define VAR_CONTROL_INTERFACE 344
+#define VAR_CONTROL_PORT 345
+#define VAR_SERVER_KEY_FILE 346
+#define VAR_SERVER_CERT_FILE 347
+#define VAR_CONTROL_KEY_FILE 348
+#define VAR_CONTROL_CERT_FILE 349
+#define VAR_EXTENDED_STATISTICS 350
+#define VAR_LOCAL_DATA_PTR 351
+#define VAR_JOSTLE_TIMEOUT 352
+#define VAR_STUB_PRIME 353
+#define VAR_UNWANTED_REPLY_THRESHOLD 354
+#define VAR_LOG_TIME_ASCII 355
+#define YYERRCODE 256
+short yylhs[] = {                                        -1,
+    0,    0,    1,    1,    1,    1,    2,    3,    3,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+   10,   10,   10,    4,    5,    5,   85,   85,   85,   85,
+    6,    7,    7,   90,   90,   90,   11,   12,   68,   71,
+   80,   13,   19,   59,   14,   72,   73,   30,   52,   67,
+   15,   16,   17,   18,   69,   58,   84,   20,   21,   22,
+   23,   24,   60,   74,   75,   46,   56,   47,   40,   41,
+   42,   43,   53,   25,   26,   27,   82,   28,   29,   31,
+   32,   34,   35,   33,   36,   37,   38,   44,   63,   77,
+   70,   78,   79,   83,   39,   61,   64,   45,   48,   62,
+   49,   50,   51,   57,   54,   55,   76,   65,   66,   81,
+   86,   87,   88,   89,   91,   92,   93,    8,    9,    9,
+   94,   94,   94,   94,   94,   94,   94,   95,   97,   96,
+   98,   99,  100,  101,
 };
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356
+short yylen[] = {                                         2,
+    0,    2,    2,    2,    2,    2,    1,    2,    0,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    1,    1,    1,    1,    2,    0,    1,    1,    1,    1,
+    1,    2,    0,    1,    1,    1,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    3,    2,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    3,    2,    2,
+    2,    2,    2,    2,    2,    2,    2,    1,    2,    0,
+    1,    1,    1,    1,    1,    1,    1,    2,    2,    2,
+    2,    2,    2,    2,
 };
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,   102,   103,   103,   104,   104,   104,   104,   105,   106,
-     106,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   107,   107,   107,   107,   107,
-     107,   107,   107,   107,   107,   108,   109,   109,   110,   110,
-     110,   110,   111,   112,   112,   113,   113,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   196,   197,   197,   197,   197,   197,   197,   197,   198,
-     199,   200,   201,   202,   203,   204
+short yydefred[] = {                                      1,
+    0,    7,   84,   91,  178,    2,    9,   86,   93,  180,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    8,   10,
+   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
+   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
+   31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
+   51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
+   61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+   71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
+   81,   82,   83,    0,    0,    0,    0,   85,   87,   88,
+   89,   90,    0,    0,    0,   92,   94,   95,   96,    0,
+    0,    0,    0,    0,    0,    0,  179,  181,  182,  183,
+  184,  185,  186,  187,   98,   97,  102,  105,  103,  111,
+  112,  113,  114,  118,  119,  120,  121,  122,  134,  135,
+  136,  138,  139,  108,  140,  141,  144,  142,  143,  145,
+  146,  147,  155,  129,  130,  131,  132,  148,  158,  126,
+  128,  159,  161,  162,  163,  109,  133,  165,  166,  127,
+  164,  116,  104,  123,  156,  160,  149,    0,    0,  169,
+  110,   99,  115,  151,  100,  106,  107,  124,  125,  167,
+  150,  152,  153,  101,  170,  137,  154,  117,  171,  172,
+  173,  174,  175,  176,  177,  188,  190,  189,  191,  192,
+  193,  194,  157,  168,
 };
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     0,     2,     2,     2,     2,     2,     1,     2,
-       0,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     2,     0,     1,     1,
-       1,     1,     1,     2,     0,     1,     1,     1,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     1,
-       2,     0,     1,     1,     1,     1,     1,     1,     1,     2,
-       2,     2,     2,     2,     2,     2
+short yydgoto[] = {                                       1,
+    6,    7,   11,    8,   12,    9,   13,   10,   14,   89,
+   90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
+  100,  101,  102,  103,  104,  105,  106,  107,  108,  109,
+  110,  111,  112,  113,  114,  115,  116,  117,  118,  119,
+  120,  121,  122,  123,  124,  125,  126,  127,  128,  129,
+  130,  131,  132,  133,  134,  135,  136,  137,  138,  139,
+  140,  141,  142,  143,  144,  145,  146,  147,  148,  149,
+  150,  151,  152,  153,  154,  155,  156,  157,  158,  159,
+  160,  161,  162,  163,  168,  169,  170,  171,  172,  176,
+  177,  178,  179,  187,  188,  189,  190,  191,  192,  193,
+  194,
 };
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       2,     0,     1,     8,    85,    92,   179,     3,    10,    87,
-      94,   181,     4,     5,     6,     7,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       9,    11,    12,    68,    71,    80,    13,    19,    59,    14,
-      72,    73,    30,    52,    67,    15,    16,    17,    18,    69,
-      58,    84,    20,    21,    22,    23,    24,    60,    74,    75,
-      46,    56,    47,    40,    41,    42,    43,    53,    25,    26,
-      27,    82,    28,    29,    31,    32,    34,    35,    33,    36,
-      37,    38,    44,    63,    77,    70,    78,    79,    83,    39,
-      61,    64,    45,    48,    62,    49,    50,    51,    57,    54,
-      55,    76,    65,    66,    81,     0,     0,     0,     0,    86,
-      88,    89,    90,    91,     0,     0,     0,    93,    95,    96,
-      97,     0,     0,     0,     0,     0,     0,     0,   180,   182,
-     184,   183,   185,   186,   187,   188,    99,    98,   103,   106,
-     104,   112,   113,   114,   115,   119,   120,   121,   122,   123,
-     135,   136,   137,   139,   140,   109,   141,   142,   145,   143,
-     144,   146,   147,   148,   156,   130,   131,   132,   133,   149,
-     159,   127,   129,   160,   162,   163,   164,   110,   134,   166,
-     167,   128,   165,   117,   105,   124,   157,   161,   150,     0,
-       0,   170,   111,   100,   116,   152,   101,   107,   108,   125,
-     126,   168,   151,   153,   154,   102,   171,   138,   155,   118,
-     172,   173,   174,   175,   176,   177,   178,   189,   191,   190,
-     192,   193,   194,   195,   158,   169
+short yysindex[] = {                                      0,
+ -184,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+ -261, -209, -204, -246, -264, -234, -233, -232, -231, -227,
+ -226, -225, -181, -178, -176, -172, -160, -159, -158, -157,
+ -155, -154, -153, -152, -151, -149, -148, -147, -146, -145,
+ -144, -143, -142, -141, -140, -139, -138, -137, -136, -135,
+ -134, -133, -132, -131, -130, -129, -128, -127, -126, -125,
+ -124, -123, -122, -121, -119, -118, -117, -116, -115, -114,
+ -113, -112, -111, -110, -109, -108, -107, -105, -104, -103,
+ -102, -101, -100,  -99,  -98,  -97,  -96,  -95,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  -94,  -93,  -92,  -91,    0,    0,    0,
+    0,    0,  -90,  -89,  -88,    0,    0,    0,    0,  -87,
+  -86,  -85,  -84,  -83,  -82,  -81,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,  -80,  -79,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,
 };
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     1,     7,     8,    12,    90,     9,    13,   169,    10,
-      14,   177,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   170,   171,   172,   173,
-     178,   179,   180,    11,    15,   188,   189,   190,   191,   192,
-     193,   194,   195
+short yyrindex[] = {                                      0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    1,    2,    3,    4,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,
 };
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -13
-static const yytype_int16 yypact[] =
-{
-     -13,    76,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -12,    40,    45,     3,    15,    16,    17,    18,
-      22,    23,    24,    68,    71,    73,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   105,   106,   107,   108,   109,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   155,   156,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   157,   158,   159,   160,   -13,
-     -13,   -13,   -13,   -13,   161,   162,   163,   -13,   -13,   -13,
-     -13,   164,   165,   166,   167,   168,   169,   170,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   171,
-     172,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13
+short yygindex[] = {                                      0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,
 };
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
-{
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,   -13,
-     -13,   -13,   -13
+#define YYTABLESIZE 346
+short yytable[] = {                                     195,
+    3,    4,    5,    6,   15,   16,   17,   18,   19,   20,
+   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,
+   31,   32,   33,   34,   35,   36,   37,   38,   39,  196,
+  197,  198,  199,   40,   41,   42,  200,  201,  202,   43,
+   44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
+   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
+   64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
+   74,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+    2,  164,  203,  165,  166,  204,  173,  205,   84,   85,
+   86,  206,   87,   88,  174,  175,  180,  181,  182,  183,
+  184,  185,  186,  207,  208,  209,  210,    3,  211,  212,
+  213,  214,  215,    4,  216,  217,  218,  219,  220,  221,
+  222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
+  232,  233,  234,  235,  236,  237,  238,  239,  240,  241,
+  242,  243,  244,  167,  245,  246,  247,  248,  249,  250,
+  251,  252,  253,  254,  255,  256,  257,    5,  258,  259,
+  260,  261,  262,  263,  264,  265,  266,  267,  268,  269,
+  270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
+  280,  281,  282,  283,  284,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    3,    4,    5,    6,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    3,    4,    5,    6,    0,    0,    3,    4,
+    5,    6,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    3,    4,    5,    6,
 };
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
-static const yytype_uint16 yytable[] =
-{
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,   196,   197,   198,   199,    41,
-      42,    43,   200,   201,   202,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,     2,   165,   203,   166,
-     167,   204,   174,   205,    85,    86,    87,     3,    88,    89,
-     175,   176,   181,   182,   183,   184,   185,   186,   187,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,     4,   221,   222,   223,   224,   225,
-       5,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   168,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,     6,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285
+short yycheck[] = {                                     264,
+    0,    0,    0,    0,  266,  267,  268,  269,  270,  271,
+  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,  286,  287,  288,  289,  290,  264,
+  264,  264,  264,  295,  296,  297,  264,  264,  264,  301,
+  302,  303,  304,  305,  306,  307,  308,  309,  310,  311,
+  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
+  322,  323,  324,  325,  326,  327,  328,  329,  330,  331,
+  332,  333,  334,  335,  336,  337,  338,  339,  340,  341,
+  265,  291,  264,  293,  294,  264,  291,  264,  350,  351,
+  352,  264,  354,  355,  299,  300,  343,  344,  345,  346,
+  347,  348,  349,  264,  264,  264,  264,  292,  264,  264,
+  264,  264,  264,  298,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  353,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  264,  264,  264,  264,  342,  264,  264,
+  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+  264,  264,  264,  264,  264,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,  265,  265,  265,  265,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  292,  292,  292,  292,   -1,   -1,  298,  298,
+  298,  298,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  342,  342,  342,  342,
 };
-
-static const yytype_uint8 yycheck[] =
-{
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    10,    10,    10,    10,    41,
-      42,    43,    10,    10,    10,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,     0,    37,    10,    39,
-      40,    10,    37,    10,    96,    97,    98,    11,   100,   101,
-      45,    46,    89,    90,    91,    92,    93,    94,    95,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    38,    10,    10,    10,    10,    10,
-      44,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    99,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    88,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 355
+#if YYDEBUG
+char *yyname[] = {
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"SPACE","LETTER","NEWLINE",
+"COMMENT","COLON","ANY","ZONESTR","STRING","VAR_SERVER","VAR_VERBOSITY",
+"VAR_NUM_THREADS","VAR_PORT","VAR_OUTGOING_RANGE","VAR_INTERFACE","VAR_DO_IP4",
+"VAR_DO_IP6","VAR_DO_UDP","VAR_DO_TCP","VAR_CHROOT","VAR_USERNAME",
+"VAR_DIRECTORY","VAR_LOGFILE","VAR_PIDFILE","VAR_MSG_CACHE_SIZE",
+"VAR_MSG_CACHE_SLABS","VAR_NUM_QUERIES_PER_THREAD","VAR_RRSET_CACHE_SIZE",
+"VAR_RRSET_CACHE_SLABS","VAR_OUTGOING_NUM_TCP","VAR_INFRA_HOST_TTL",
+"VAR_INFRA_LAME_TTL","VAR_INFRA_CACHE_SLABS","VAR_INFRA_CACHE_NUMHOSTS",
+"VAR_INFRA_CACHE_LAME_SIZE","VAR_NAME","VAR_STUB_ZONE","VAR_STUB_HOST",
+"VAR_STUB_ADDR","VAR_TARGET_FETCH_POLICY","VAR_HARDEN_SHORT_BUFSIZE",
+"VAR_HARDEN_LARGE_QUERIES","VAR_FORWARD_ZONE","VAR_FORWARD_HOST",
+"VAR_FORWARD_ADDR","VAR_DO_NOT_QUERY_ADDRESS","VAR_HIDE_IDENTITY",
+"VAR_HIDE_VERSION","VAR_IDENTITY","VAR_VERSION","VAR_HARDEN_GLUE",
+"VAR_MODULE_CONF","VAR_TRUST_ANCHOR_FILE","VAR_TRUST_ANCHOR",
+"VAR_VAL_OVERRIDE_DATE","VAR_BOGUS_TTL","VAR_VAL_CLEAN_ADDITIONAL",
+"VAR_VAL_PERMISSIVE_MODE","VAR_INCOMING_NUM_TCP","VAR_MSG_BUFFER_SIZE",
+"VAR_KEY_CACHE_SIZE","VAR_KEY_CACHE_SLABS","VAR_TRUSTED_KEYS_FILE",
+"VAR_VAL_NSEC3_KEYSIZE_ITERATIONS","VAR_USE_SYSLOG","VAR_OUTGOING_INTERFACE",
+"VAR_ROOT_HINTS","VAR_DO_NOT_QUERY_LOCALHOST","VAR_CACHE_MAX_TTL",
+"VAR_HARDEN_DNNSEC_STRIPPED","VAR_ACCESS_CONTROL","VAR_LOCAL_ZONE",
+"VAR_LOCAL_DATA","VAR_INTERFACE_AUTOMATIC","VAR_STATISTICS_INTERVAL",
+"VAR_DO_DAEMONIZE","VAR_USE_CAPS_FOR_ID","VAR_STATISTICS_CUMULATIVE",
+"VAR_OUTGOING_PORT_PERMIT","VAR_OUTGOING_PORT_AVOID","VAR_DLV_ANCHOR_FILE",
+"VAR_DLV_ANCHOR","VAR_NEG_CACHE_SIZE","VAR_HARDEN_REFERRAL_PATH",
+"VAR_PRIVATE_ADDRESS","VAR_PRIVATE_DOMAIN","VAR_REMOTE_CONTROL",
+"VAR_CONTROL_ENABLE","VAR_CONTROL_INTERFACE","VAR_CONTROL_PORT",
+"VAR_SERVER_KEY_FILE","VAR_SERVER_CERT_FILE","VAR_CONTROL_KEY_FILE",
+"VAR_CONTROL_CERT_FILE","VAR_EXTENDED_STATISTICS","VAR_LOCAL_DATA_PTR",
+"VAR_JOSTLE_TIMEOUT","VAR_STUB_PRIME","VAR_UNWANTED_REPLY_THRESHOLD",
+"VAR_LOG_TIME_ASCII",
 };
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,   103,     0,    11,    38,    44,    88,   104,   105,   108,
-     111,   195,   106,   109,   112,   196,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    41,    42,    43,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    96,    97,    98,   100,   101,
-     107,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,    37,    39,    40,    99,   110,
-     188,   189,   190,   191,    37,    45,    46,   113,   192,   193,
-     194,    89,    90,    91,    92,    93,    94,    95,   197,   198,
-     199,   200,   201,   202,   203,   204,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
-      10,    10,    10,    10,    10,    10
+char *yyrule[] = {
+"$accept : toplevelvars",
+"toplevelvars :",
+"toplevelvars : toplevelvars toplevelvar",
+"toplevelvar : serverstart contents_server",
+"toplevelvar : stubstart contents_stub",
+"toplevelvar : forwardstart contents_forward",
+"toplevelvar : rcstart contents_rc",
+"serverstart : VAR_SERVER",
+"contents_server : contents_server content_server",
+"contents_server :",
+"content_server : server_num_threads",
+"content_server : server_verbosity",
+"content_server : server_port",
+"content_server : server_outgoing_range",
+"content_server : server_do_ip4",
+"content_server : server_do_ip6",
+"content_server : server_do_udp",
+"content_server : server_do_tcp",
+"content_server : server_interface",
+"content_server : server_chroot",
+"content_server : server_username",
+"content_server : server_directory",
+"content_server : server_logfile",
+"content_server : server_pidfile",
+"content_server : server_msg_cache_size",
+"content_server : server_msg_cache_slabs",
+"content_server : server_num_queries_per_thread",
+"content_server : server_rrset_cache_size",
+"content_server : server_rrset_cache_slabs",
+"content_server : server_outgoing_num_tcp",
+"content_server : server_infra_host_ttl",
+"content_server : server_infra_lame_ttl",
+"content_server : server_infra_cache_slabs",
+"content_server : server_infra_cache_numhosts",
+"content_server : server_infra_cache_lame_size",
+"content_server : server_target_fetch_policy",
+"content_server : server_harden_short_bufsize",
+"content_server : server_harden_large_queries",
+"content_server : server_do_not_query_address",
+"content_server : server_hide_identity",
+"content_server : server_hide_version",
+"content_server : server_identity",
+"content_server : server_version",
+"content_server : server_harden_glue",
+"content_server : server_module_conf",
+"content_server : server_trust_anchor_file",
+"content_server : server_trust_anchor",
+"content_server : server_val_override_date",
+"content_server : server_bogus_ttl",
+"content_server : server_val_clean_additional",
+"content_server : server_val_permissive_mode",
+"content_server : server_incoming_num_tcp",
+"content_server : server_msg_buffer_size",
+"content_server : server_key_cache_size",
+"content_server : server_key_cache_slabs",
+"content_server : server_trusted_keys_file",
+"content_server : server_val_nsec3_keysize_iterations",
+"content_server : server_use_syslog",
+"content_server : server_outgoing_interface",
+"content_server : server_root_hints",
+"content_server : server_do_not_query_localhost",
+"content_server : server_cache_max_ttl",
+"content_server : server_harden_dnssec_stripped",
+"content_server : server_access_control",
+"content_server : server_local_zone",
+"content_server : server_local_data",
+"content_server : server_interface_automatic",
+"content_server : server_statistics_interval",
+"content_server : server_do_daemonize",
+"content_server : server_use_caps_for_id",
+"content_server : server_statistics_cumulative",
+"content_server : server_outgoing_port_permit",
+"content_server : server_outgoing_port_avoid",
+"content_server : server_dlv_anchor_file",
+"content_server : server_dlv_anchor",
+"content_server : server_neg_cache_size",
+"content_server : server_harden_referral_path",
+"content_server : server_private_address",
+"content_server : server_private_domain",
+"content_server : server_extended_statistics",
+"content_server : server_local_data_ptr",
+"content_server : server_jostle_timeout",
+"content_server : server_unwanted_reply_threshold",
+"content_server : server_log_time_ascii",
+"stubstart : VAR_STUB_ZONE",
+"contents_stub : contents_stub content_stub",
+"contents_stub :",
+"content_stub : stub_name",
+"content_stub : stub_host",
+"content_stub : stub_addr",
+"content_stub : stub_prime",
+"forwardstart : VAR_FORWARD_ZONE",
+"contents_forward : contents_forward content_forward",
+"contents_forward :",
+"content_forward : forward_name",
+"content_forward : forward_host",
+"content_forward : forward_addr",
+"server_num_threads : VAR_NUM_THREADS STRING",
+"server_verbosity : VAR_VERBOSITY STRING",
+"server_statistics_interval : VAR_STATISTICS_INTERVAL STRING",
+"server_statistics_cumulative : VAR_STATISTICS_CUMULATIVE STRING",
+"server_extended_statistics : VAR_EXTENDED_STATISTICS STRING",
+"server_port : VAR_PORT STRING",
+"server_interface : VAR_INTERFACE STRING",
+"server_outgoing_interface : VAR_OUTGOING_INTERFACE STRING",
+"server_outgoing_range : VAR_OUTGOING_RANGE STRING",
+"server_outgoing_port_permit : VAR_OUTGOING_PORT_PERMIT STRING",
+"server_outgoing_port_avoid : VAR_OUTGOING_PORT_AVOID STRING",
+"server_outgoing_num_tcp : VAR_OUTGOING_NUM_TCP STRING",
+"server_incoming_num_tcp : VAR_INCOMING_NUM_TCP STRING",
+"server_interface_automatic : VAR_INTERFACE_AUTOMATIC STRING",
+"server_do_ip4 : VAR_DO_IP4 STRING",
+"server_do_ip6 : VAR_DO_IP6 STRING",
+"server_do_udp : VAR_DO_UDP STRING",
+"server_do_tcp : VAR_DO_TCP STRING",
+"server_do_daemonize : VAR_DO_DAEMONIZE STRING",
+"server_use_syslog : VAR_USE_SYSLOG STRING",
+"server_log_time_ascii : VAR_LOG_TIME_ASCII STRING",
+"server_chroot : VAR_CHROOT STRING",
+"server_username : VAR_USERNAME STRING",
+"server_directory : VAR_DIRECTORY STRING",
+"server_logfile : VAR_LOGFILE STRING",
+"server_pidfile : VAR_PIDFILE STRING",
+"server_root_hints : VAR_ROOT_HINTS STRING",
+"server_dlv_anchor_file : VAR_DLV_ANCHOR_FILE STRING",
+"server_dlv_anchor : VAR_DLV_ANCHOR STRING",
+"server_trust_anchor_file : VAR_TRUST_ANCHOR_FILE STRING",
+"server_trusted_keys_file : VAR_TRUSTED_KEYS_FILE STRING",
+"server_trust_anchor : VAR_TRUST_ANCHOR STRING",
+"server_hide_identity : VAR_HIDE_IDENTITY STRING",
+"server_hide_version : VAR_HIDE_VERSION STRING",
+"server_identity : VAR_IDENTITY STRING",
+"server_version : VAR_VERSION STRING",
+"server_msg_buffer_size : VAR_MSG_BUFFER_SIZE STRING",
+"server_msg_cache_size : VAR_MSG_CACHE_SIZE STRING",
+"server_msg_cache_slabs : VAR_MSG_CACHE_SLABS STRING",
+"server_num_queries_per_thread : VAR_NUM_QUERIES_PER_THREAD STRING",
+"server_jostle_timeout : VAR_JOSTLE_TIMEOUT STRING",
+"server_rrset_cache_size : VAR_RRSET_CACHE_SIZE STRING",
+"server_rrset_cache_slabs : VAR_RRSET_CACHE_SLABS STRING",
+"server_infra_host_ttl : VAR_INFRA_HOST_TTL STRING",
+"server_infra_lame_ttl : VAR_INFRA_LAME_TTL STRING",
+"server_infra_cache_numhosts : VAR_INFRA_CACHE_NUMHOSTS STRING",
+"server_infra_cache_lame_size : VAR_INFRA_CACHE_LAME_SIZE STRING",
+"server_infra_cache_slabs : VAR_INFRA_CACHE_SLABS STRING",
+"server_target_fetch_policy : VAR_TARGET_FETCH_POLICY STRING",
+"server_harden_short_bufsize : VAR_HARDEN_SHORT_BUFSIZE STRING",
+"server_harden_large_queries : VAR_HARDEN_LARGE_QUERIES STRING",
+"server_harden_glue : VAR_HARDEN_GLUE STRING",
+"server_harden_dnssec_stripped : VAR_HARDEN_DNNSEC_STRIPPED STRING",
+"server_harden_referral_path : VAR_HARDEN_REFERRAL_PATH STRING",
+"server_use_caps_for_id : VAR_USE_CAPS_FOR_ID STRING",
+"server_private_address : VAR_PRIVATE_ADDRESS STRING",
+"server_private_domain : VAR_PRIVATE_DOMAIN STRING",
+"server_unwanted_reply_threshold : VAR_UNWANTED_REPLY_THRESHOLD STRING",
+"server_do_not_query_address : VAR_DO_NOT_QUERY_ADDRESS STRING",
+"server_do_not_query_localhost : VAR_DO_NOT_QUERY_LOCALHOST STRING",
+"server_access_control : VAR_ACCESS_CONTROL STRING STRING",
+"server_module_conf : VAR_MODULE_CONF STRING",
+"server_val_override_date : VAR_VAL_OVERRIDE_DATE STRING",
+"server_cache_max_ttl : VAR_CACHE_MAX_TTL STRING",
+"server_bogus_ttl : VAR_BOGUS_TTL STRING",
+"server_val_clean_additional : VAR_VAL_CLEAN_ADDITIONAL STRING",
+"server_val_permissive_mode : VAR_VAL_PERMISSIVE_MODE STRING",
+"server_val_nsec3_keysize_iterations : VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING",
+"server_key_cache_size : VAR_KEY_CACHE_SIZE STRING",
+"server_key_cache_slabs : VAR_KEY_CACHE_SLABS STRING",
+"server_neg_cache_size : VAR_NEG_CACHE_SIZE STRING",
+"server_local_zone : VAR_LOCAL_ZONE STRING STRING",
+"server_local_data : VAR_LOCAL_DATA STRING",
+"server_local_data_ptr : VAR_LOCAL_DATA_PTR STRING",
+"stub_name : VAR_NAME STRING",
+"stub_host : VAR_STUB_HOST STRING",
+"stub_addr : VAR_STUB_ADDR STRING",
+"stub_prime : VAR_STUB_PRIME STRING",
+"forward_name : VAR_NAME STRING",
+"forward_host : VAR_FORWARD_HOST STRING",
+"forward_addr : VAR_FORWARD_ADDR STRING",
+"rcstart : VAR_REMOTE_CONTROL",
+"contents_rc : contents_rc content_rc",
+"contents_rc :",
+"content_rc : rc_control_enable",
+"content_rc : rc_control_interface",
+"content_rc : rc_control_port",
+"content_rc : rc_server_key_file",
+"content_rc : rc_server_cert_file",
+"content_rc : rc_control_key_file",
+"content_rc : rc_control_cert_file",
+"rc_control_enable : VAR_CONTROL_ENABLE STRING",
+"rc_control_port : VAR_CONTROL_PORT STRING",
+"rc_control_interface : VAR_CONTROL_INTERFACE STRING",
+"rc_server_key_file : VAR_SERVER_KEY_FILE STRING",
+"rc_server_cert_file : VAR_SERVER_CERT_FILE STRING",
+"rc_control_key_file : VAR_CONTROL_KEY_FILE STRING",
+"rc_control_cert_file : VAR_CONTROL_CERT_FILE STRING",
 };
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK (1);                                          \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;                                                 \
-    }                                                          \
-while (YYID (0))
-
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                 \
-      if (YYID (N))                                                    \
-       {                                                               \
-         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
-         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
-         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
-         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
-       }                                                               \
-      else                                                             \
-       {                                                               \
-         (Current).first_line   = (Current).last_line   =              \
-           YYRHSLOC (Rhs, 0).last_line;                                \
-         (Current).first_column = (Current).last_column =              \
-           YYRHSLOC (Rhs, 0).last_column;                              \
-       }                                                               \
-    while (YYID (0))
 #endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)                 \
-     fprintf (File, "%d.%d-%d.%d",                     \
-             (Loc).first_line, (Loc).first_column,     \
-             (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested.  */
 #if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
-do {                                                                     \
-  if (yydebug)                                                           \
-    {                                                                    \
-      YYFPRINTF (stderr, "%s ", Title);                                          \
-      yy_symbol_print (stderr,                                           \
-                 Type, Value); \
-      YYFPRINTF (stderr, "\n");                                                  \
-    }                                                                    \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
+#include <stdio.h>
 #endif
-{
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-       break;
-    }
-}
-
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH  YYSTACKSIZE
 #else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
 #else
-static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH  500
 #endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-            yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      fprintf (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                      &(yyvsp[(yyi + 1) - (yynrhs)])
-                                      );
-      fprintf (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
 #endif
 
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
+#define YYINITSTACKSIZE 500
 
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
+int      yydebug;
+int      yynerrs;
+int      yyerrflag;
+int      yychar;
+short   *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE  yyval;
+YYSTYPE  yylval;
 
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
+/* variables for the parser stack */
+static short   *yyss;
+static short   *yysslim;
+static YYSTYPE *yyvs;
+static int      yystacksize;
+#line 998 "util/configparser.y"
 
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
+/* parse helper routines could be here */
+#line 669 "util/configparser.c"
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(void)
 {
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
+    int newsize, i;
+    short *newss;
+    YYSTYPE *newvs;
+
+    if ((newsize = yystacksize) == 0)
+        newsize = YYINITSTACKSIZE;
+    else if (newsize >= YYMAXDEPTH)
+        return -1;
+    else if ((newsize *= 2) > YYMAXDEPTH)
+        newsize = YYMAXDEPTH;
+
+    i = yyssp - yyss;
+    newss = (yyss != 0)
+          ? (short *)realloc(yyss, newsize * sizeof(*newss))
+          : (short *)malloc(newsize * sizeof(*newss));
+    if (newss == 0)
+        return -1;
+
+    yyss  = newss;
+    yyssp = newss + i;
+    newvs = (yyvs != 0)
+          ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs))
+          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
+    if (newvs == 0)
+        return -1;
+
+    yyvs = newvs;
+    yyvsp = newvs + i;
+    yystacksize = newsize;
+    yysslim = yyss + newsize - 1;
+    return 0;
 }
-#  endif
-# endif
 
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse(void)
 {
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
+    register int yym, yyn, yystate;
+#if YYDEBUG
+    register const char *yys;
 
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
+    if ((yys = getenv("YYDEBUG")) != 0)
     {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-       switch (*++yyp)
-         {
-         case '\'':
-         case ',':
-           goto do_not_strip_quotes;
-
-         case '\\':
-           if (*++yyp != '\\')
-             goto do_not_strip_quotes;
-           /* Fall through.  */
-         default:
-           if (yyres)
-             yyres[yyn] = *yyp;
-           yyn++;
-           break;
-
-         case '"':
-           if (yyres)
-             yyres[yyn] = '\0';
-           return yyn;
-         }
-    do_not_strip_quotes: ;
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
     }
+#endif
 
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = YYEMPTY;
 
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
+    if (yyss == NULL && yygrowstack()) goto yyoverflow;
+    yyssp = yyss;
+    yyvsp = yyvs;
+    *yyssp = yystate = 0;
 
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
+yyloop:
+    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+    if (yychar < 0)
     {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-        constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-                   + sizeof yyexpecting - 1
-                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-                      * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-        YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-         {
-           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-             {
-               yycount = 1;
-               yysize = yysize0;
-               yyformat[sizeof yyunexpected - 1] = '\0';
-               break;
-             }
-           yyarg[yycount++] = yytname[yyx];
-           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-           yysize_overflow |= (yysize1 < yysize);
-           yysize = yysize1;
-           yyfmt = yystpcpy (yyfmt, yyprefix);
-           yyprefix = yyor;
-         }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-       return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-       {
-         /* Avoid sprintf, as that infringes on the user's name space.
-            Don't have undefined behavior even if the translation
-            produced a string with the wrong number of "%s"s.  */
-         char *yyp = yyresult;
-         int yyi = 0;
-         while ((*yyp = *yyf) != '\0')
-           {
-             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-               {
-                 yyp += yytnamerr (yyp, yyarg[yyi++]);
-                 yyf += 2;
-               }
-             else
-               {
-                 yyp++;
-                 yyf++;
-               }
-           }
-       }
-      return yysize;
+        if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, reading %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
     }
-}
-#endif /* YYERROR_VERBOSE */
-\f
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
+    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: state %d, shifting to state %d\n",
+                    YYPREFIX, yystate, yytable[yyn]);
 #endif
-{
-  YYUSE (yyvaluep);
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
+        if (yyssp >= yysslim && yygrowstack())
+        {
+            goto yyoverflow;
+        }
+        *++yyssp = yystate = yytable[yyn];
+        *++yyvsp = yylval;
+        yychar = YYEMPTY;
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
     {
-
-      default:
-       break;
+        yyn = yytable[yyn];
+        goto yyreduce;
     }
-}
-\f
+    if (yyerrflag) goto yyinrecovery;
 
-/* Prevent warnings from -Wmissing-prototypes.  */
+    yyerror("syntax error");
 
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
+#ifdef lint
+    goto yyerrlab;
 #endif
-#endif /* ! YYPARSE_PARAM */
-
-
 
-/* The look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
+yyerrlab:
+    ++yynerrs;
 
+yyinrecovery:
+    if (yyerrflag < 3)
+    {
+        yyerrflag = 3;
+        for (;;)
+        {
+            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
 #endif
+                if (yyssp >= yysslim && yygrowstack())
+                {
+                    goto yyoverflow;
+                }
+                *++yyssp = yystate = yytable[yyn];
+                *++yyvsp = yylval;
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("%sdebug: error recovery discarding state %d\n",
+                            YYPREFIX, *yyssp);
 #endif
-{
-  
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack.  Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       yytype_int16 *yyss1 = yyss;
-
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow (YY_("memory exhausted"),
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-       goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       yytype_int16 *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to look-ahead token.  */
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a look-ahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+                if (yyssp <= yyss) goto yyabort;
+                --yyssp;
+                --yyvsp;
+            }
+        }
     }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
+    else
     {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
+        if (yychar == 0) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+                    YYPREFIX, yystate, yychar, yys);
+        }
+#endif
+        yychar = YYEMPTY;
+        goto yyloop;
     }
 
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  yystate = yyn;
-  *++yyvsp = yylval;
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
 yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 8:
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+                YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+    yym = yylen[yyn];
+    if (yym)
+        yyval = yyvsp[1-yym];
+    else
+        memset(&yyval, 0, sizeof yyval);
+    switch (yyn)
+    {
+case 7:
 #line 109 "util/configparser.y"
-    
+{ 
                OUTYY(("\nP(server:)\n")); 
        }
-    break;
-
-  case 85:
+break;
+case 84:
 #line 149 "util/configparser.y"
-    {
+{
                struct config_stub* s;
                OUTYY(("\nP(stub_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
@@ -1887,11 +864,10 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-    break;
-
-  case 92:
+break;
+case 91:
 #line 165 "util/configparser.y"
-    {
+{
                struct config_stub* s;
                OUTYY(("\nP(forward_zone:)\n")); 
                s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
@@ -1901,80 +877,73 @@ yyreduce:
                } else 
                        yyerror("out of memory");
        }
-    break;
-
-  case 98:
+break;
+case 97:
 #line 181 "util/configparser.y"
-    
-               OUTYY(("P(server_num_threads:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{ 
+               OUTYY(("P(server_num_threads:%s)\n", yyvsp[0].str)); 
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->num_threads = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->num_threads = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 99:
+break;
+case 98:
 #line 190 "util/configparser.y"
-    
-               OUTYY(("P(server_verbosity:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{ 
+               OUTYY(("P(server_verbosity:%s)\n", yyvsp[0].str)); 
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->verbosity = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->verbosity = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 100:
+break;
+case 99:
 #line 199 "util/configparser.y"
-    
-               OUTYY(("P(server_statistics_interval:%s)\n", (yyvsp[(2) - (2)].str))); 
-               if(strcmp((yyvsp[(2) - (2)].str), "") == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0)
+{ 
+               OUTYY(("P(server_statistics_interval:%s)\n", yyvsp[0].str)); 
+               if(strcmp(yyvsp[0].str, "") == 0 || strcmp(yyvsp[0].str, "0") == 0)
                        cfg_parser->cfg->stat_interval = 0;
-               else if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               else if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->stat_interval = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_interval = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 101:
+break;
+case 100:
 #line 210 "util/configparser.y"
-    {
-               OUTYY(("P(server_statistics_cumulative:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_statistics_cumulative:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->stat_cumulative = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_cumulative = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 102:
+break;
+case 101:
 #line 219 "util/configparser.y"
-    {
-               OUTYY(("P(server_extended_statistics:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_extended_statistics:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->stat_extended = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->stat_extended = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 103:
+break;
+case 102:
 #line 228 "util/configparser.y"
-    {
-               OUTYY(("P(server_port:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_port:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("port number expected");
-               else cfg_parser->cfg->port = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->port = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 104:
+break;
+case 103:
 #line 237 "util/configparser.y"
-    {
-               OUTYY(("P(server_interface:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_interface:%s)\n", yyvsp[0].str));
                if(cfg_parser->cfg->num_ifs == 0)
                        cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
                else    cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
@@ -1982,14 +951,13 @@ yyreduce:
                if(!cfg_parser->cfg->ifs)
                        yyerror("out of memory");
                else
-                       cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = (yyvsp[(2) - (2)].str);
+                       cfg_parser->cfg->ifs[cfg_parser->cfg->num_ifs++] = yyvsp[0].str;
        }
-    break;
-
-  case 105:
+break;
+case 104:
 #line 250 "util/configparser.y"
-    {
-               OUTYY(("P(server_outgoing_interface:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_outgoing_interface:%s)\n", yyvsp[0].str));
                if(cfg_parser->cfg->num_out_ifs == 0)
                        cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
                else    cfg_parser->cfg->out_ifs = realloc(
@@ -1999,748 +967,682 @@ yyreduce:
                        yyerror("out of memory");
                else
                        cfg_parser->cfg->out_ifs[
-                               cfg_parser->cfg->num_out_ifs++] = (yyvsp[(2) - (2)].str);
+                               cfg_parser->cfg->num_out_ifs++] = yyvsp[0].str;
        }
-    break;
-
-  case 106:
+break;
+case 105:
 #line 265 "util/configparser.y"
-    {
-               OUTYY(("P(server_outgoing_range:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_outgoing_range:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->outgoing_num_ports = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->outgoing_num_ports = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 107:
+break;
+case 106:
 #line 274 "util/configparser.y"
-    {
-               OUTYY(("P(server_outgoing_port_permit:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 1, 
+{
+               OUTYY(("P(server_outgoing_port_permit:%s)\n", yyvsp[0].str));
+               if(!cfg_mark_ports(yyvsp[0].str, 1, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 108:
+break;
+case 107:
 #line 283 "util/configparser.y"
-    {
-               OUTYY(("P(server_outgoing_port_avoid:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_mark_ports((yyvsp[(2) - (2)].str), 0, 
+{
+               OUTYY(("P(server_outgoing_port_avoid:%s)\n", yyvsp[0].str));
+               if(!cfg_mark_ports(yyvsp[0].str, 0, 
                        cfg_parser->cfg->outgoing_avail_ports, 65536))
                        yyerror("port number or range (\"low-high\") expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 109:
+break;
+case 108:
 #line 292 "util/configparser.y"
-    {
-               OUTYY(("P(server_outgoing_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_outgoing_num_tcp:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->outgoing_num_tcp = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->outgoing_num_tcp = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 110:
+break;
+case 109:
 #line 301 "util/configparser.y"
-    {
-               OUTYY(("P(server_incoming_num_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_incoming_num_tcp:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->incoming_num_tcp = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->incoming_num_tcp = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 111:
+break;
+case 110:
 #line 310 "util/configparser.y"
-    {
-               OUTYY(("P(server_interface_automatic:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_interface_automatic:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->if_automatic = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->if_automatic = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 112:
+break;
+case 111:
 #line 319 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_ip4:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_ip4:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_ip4 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_ip4 = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 113:
+break;
+case 112:
 #line 328 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_ip6:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_ip6:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_ip6 = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_ip6 = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 114:
+break;
+case 113:
 #line 337 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_udp:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_udp:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_udp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_udp = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 115:
+break;
+case 114:
 #line 346 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_tcp:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_tcp:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_tcp = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_tcp = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 116:
+break;
+case 115:
 #line 355 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_daemonize:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_daemonize:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->do_daemonize = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->do_daemonize = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 117:
+break;
+case 116:
 #line 364 "util/configparser.y"
-    {
-               OUTYY(("P(server_use_syslog:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_use_syslog:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->use_syslog = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-#ifndef HAVE_SYSLOG_H
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") == 0)
+               else cfg_parser->cfg->use_syslog = (strcmp(yyvsp[0].str, "yes")==0);
+#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
+               if(strcmp(yyvsp[0].str, "yes") == 0)
                        yyerror("no syslog services are available. "
                                "(reconfigure and compile to add)");
 #endif
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 118:
+break;
+case 117:
 #line 378 "util/configparser.y"
-    {
-               OUTYY(("P(server_log_time_ascii:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_log_time_ascii:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->log_time_ascii = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->log_time_ascii = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 119:
+break;
+case 118:
 #line 387 "util/configparser.y"
-    {
-               OUTYY(("P(server_chroot:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_chroot:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->chrootdir);
-               cfg_parser->cfg->chrootdir = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->chrootdir = yyvsp[0].str;
        }
-    break;
-
-  case 120:
+break;
+case 119:
 #line 394 "util/configparser.y"
-    {
-               OUTYY(("P(server_username:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_username:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->username);
-               cfg_parser->cfg->username = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->username = yyvsp[0].str;
        }
-    break;
-
-  case 121:
+break;
+case 120:
 #line 401 "util/configparser.y"
-    {
-               OUTYY(("P(server_directory:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_directory:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->directory);
-               cfg_parser->cfg->directory = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->directory = yyvsp[0].str;
        }
-    break;
-
-  case 122:
+break;
+case 121:
 #line 408 "util/configparser.y"
-    {
-               OUTYY(("P(server_logfile:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_logfile:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->logfile);
-               cfg_parser->cfg->logfile = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->logfile = yyvsp[0].str;
                cfg_parser->cfg->use_syslog = 0;
        }
-    break;
-
-  case 123:
+break;
+case 122:
 #line 416 "util/configparser.y"
-    {
-               OUTYY(("P(server_pidfile:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_pidfile:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->pidfile);
-               cfg_parser->cfg->pidfile = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->pidfile = yyvsp[0].str;
        }
-    break;
-
-  case 124:
+break;
+case 123:
 #line 423 "util/configparser.y"
-    {
-               OUTYY(("P(server_root_hints:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_root_hints:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->root_hints, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 125:
+break;
+case 124:
 #line 430 "util/configparser.y"
-    {
-               OUTYY(("P(server_dlv_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_dlv_anchor_file:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->dlv_anchor_file);
-               cfg_parser->cfg->dlv_anchor_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->dlv_anchor_file = yyvsp[0].str;
        }
-    break;
-
-  case 126:
+break;
+case 125:
 #line 437 "util/configparser.y"
-    {
-               OUTYY(("P(server_dlv_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_dlv_anchor:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->dlv_anchor_list, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 127:
+break;
+case 126:
 #line 444 "util/configparser.y"
-    {
-               OUTYY(("P(server_trust_anchor_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_trust_anchor_file:%s)\n", yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
-                       trust_anchor_file_list, (yyvsp[(2) - (2)].str)))
+                       trust_anchor_file_list, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 128:
+break;
+case 127:
 #line 452 "util/configparser.y"
-    {
-               OUTYY(("P(server_trusted_keys_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_trusted_keys_file:%s)\n", yyvsp[0].str));
                if(!cfg_strlist_insert(&cfg_parser->cfg->
-                       trusted_keys_file_list, (yyvsp[(2) - (2)].str)))
+                       trusted_keys_file_list, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 129:
+break;
+case 128:
 #line 460 "util/configparser.y"
-    {
-               OUTYY(("P(server_trust_anchor:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_trust_anchor:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->trust_anchor_list, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 130:
+break;
+case 129:
 #line 467 "util/configparser.y"
-    {
-               OUTYY(("P(server_hide_identity:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_hide_identity:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->hide_identity = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->hide_identity = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 131:
+break;
+case 130:
 #line 476 "util/configparser.y"
-    {
-               OUTYY(("P(server_hide_version:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_hide_version:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
-               else cfg_parser->cfg->hide_version = (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->hide_version = (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 132:
+break;
+case 131:
 #line 485 "util/configparser.y"
-    {
-               OUTYY(("P(server_identity:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_identity:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->identity);
-               cfg_parser->cfg->identity = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->identity = yyvsp[0].str;
        }
-    break;
-
-  case 133:
+break;
+case 132:
 #line 492 "util/configparser.y"
-    {
-               OUTYY(("P(server_version:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_version:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->version);
-               cfg_parser->cfg->version = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->version = yyvsp[0].str;
        }
-    break;
-
-  case 134:
+break;
+case 133:
 #line 499 "util/configparser.y"
-    {
-               OUTYY(("P(server_msg_buffer_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_msg_buffer_size:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
-               else if (atoi((yyvsp[(2) - (2)].str)) < 4096)
+               else if (atoi(yyvsp[0].str) < 4096)
                        yyerror("message buffer size too small (use 4096)");
-               else cfg_parser->cfg->msg_buffer_size = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->msg_buffer_size = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 135:
+break;
+case 134:
 #line 510 "util/configparser.y"
-    {
-               OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
+{
+               OUTYY(("P(server_msg_cache_size:%s)\n", yyvsp[0].str));
+               if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->msg_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 136:
+break;
+case 135:
 #line 518 "util/configparser.y"
-    {
-               OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_msg_cache_slabs:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->msg_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->msg_cache_slabs = atoi(yyvsp[0].str);
                        if(!is_pow2(cfg_parser->cfg->msg_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 137:
+break;
+case 136:
 #line 531 "util/configparser.y"
-    {
-               OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_num_queries_per_thread:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->num_queries_per_thread = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->num_queries_per_thread = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 138:
+break;
+case 137:
 #line 540 "util/configparser.y"
-    {
-               OUTYY(("P(server_jostle_timeout:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_jostle_timeout:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->jostle_time = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->jostle_time = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 139:
+break;
+case 138:
 #line 549 "util/configparser.y"
-    {
-               OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
+{
+               OUTYY(("P(server_rrset_cache_size:%s)\n", yyvsp[0].str));
+               if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->rrset_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 140:
+break;
+case 139:
 #line 557 "util/configparser.y"
-    {
-               OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_rrset_cache_slabs:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->rrset_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->rrset_cache_slabs = atoi(yyvsp[0].str);
                        if(!is_pow2(cfg_parser->cfg->rrset_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 141:
+break;
+case 140:
 #line 570 "util/configparser.y"
-    {
-               OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_infra_host_ttl:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->host_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->host_ttl = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 142:
+break;
+case 141:
 #line 579 "util/configparser.y"
-    {
-               OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_infra_lame_ttl:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->lame_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->lame_ttl = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 143:
+break;
+case 142:
 #line 588 "util/configparser.y"
-    {
-               OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_infra_cache_numhosts:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->infra_cache_numhosts = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->infra_cache_numhosts = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 144:
+break;
+case 143:
 #line 597 "util/configparser.y"
-    {
-               OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->
+{
+               OUTYY(("P(server_infra_cache_lame_size:%s)\n", yyvsp[0].str));
+               if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->
                        infra_cache_lame_size))
                        yyerror("number expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 145:
+break;
+case 144:
 #line 606 "util/configparser.y"
-    {
-               OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_infra_cache_slabs:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->infra_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->infra_cache_slabs = atoi(yyvsp[0].str);
                        if(!is_pow2(cfg_parser->cfg->infra_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 146:
+break;
+case 145:
 #line 619 "util/configparser.y"
-    {
-               OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_target_fetch_policy:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->target_fetch_policy);
-               cfg_parser->cfg->target_fetch_policy = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->target_fetch_policy = yyvsp[0].str;
        }
-    break;
-
-  case 147:
+break;
+case 146:
 #line 626 "util/configparser.y"
-    {
-               OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_harden_short_bufsize:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_short_bufsize = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 148:
+break;
+case 147:
 #line 636 "util/configparser.y"
-    {
-               OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_harden_large_queries:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_large_queries = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 149:
+break;
+case 148:
 #line 646 "util/configparser.y"
-    {
-               OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_harden_glue:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_glue = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 150:
+break;
+case 149:
 #line 656 "util/configparser.y"
-    {
-               OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_harden_dnssec_stripped:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_dnssec_stripped = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 151:
+break;
+case 150:
 #line 666 "util/configparser.y"
-    {
-               OUTYY(("P(server_harden_referral_path:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_harden_referral_path:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->harden_referral_path = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 152:
+break;
+case 151:
 #line 676 "util/configparser.y"
-    {
-               OUTYY(("P(server_use_caps_for_id:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_use_caps_for_id:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->use_caps_bits_for_id = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 153:
+break;
+case 152:
 #line 686 "util/configparser.y"
-    {
-               OUTYY(("P(server_private_address:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_private_address:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->private_address, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 154:
+break;
+case 153:
 #line 693 "util/configparser.y"
-    {
-               OUTYY(("P(server_private_domain:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_private_domain:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->private_domain, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 155:
+break;
+case 154:
 #line 700 "util/configparser.y"
-    {
-               OUTYY(("P(server_unwanted_reply_threshold:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_unwanted_reply_threshold:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->unwanted_threshold = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->unwanted_threshold = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 156:
+break;
+case 155:
 #line 709 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_do_not_query_address:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 157:
+break;
+case 156:
 #line 716 "util/configparser.y"
-    {
-               OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_do_not_query_localhost:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->donotquery_localhost = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 158:
+break;
+case 157:
 #line 726 "util/configparser.y"
-    {
-               OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
-                       strcmp((yyvsp[(3) - (3)].str), "allow")!=0 && 
-                       strcmp((yyvsp[(3) - (3)].str), "allow_snoop")!=0) {
+{
+               OUTYY(("P(server_access_control:%s %s)\n", yyvsp[-1].str, yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "deny")!=0 && strcmp(yyvsp[0].str, "refuse")!=0 &&
+                       strcmp(yyvsp[0].str, "allow")!=0 && 
+                       strcmp(yyvsp[0].str, "allow_snoop")!=0) {
                        yyerror("expected deny, refuse, allow or allow_snoop "
                                "in access control action");
                } else {
-                       if(!cfg_str2list_insert(&cfg_parser->cfg->acls, (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                       if(!cfg_str2list_insert(&cfg_parser->cfg->acls, yyvsp[-1].str, yyvsp[0].str))
                                fatal_exit("out of memory adding acl");
                }
        }
-    break;
-
-  case 159:
+break;
+case 158:
 #line 740 "util/configparser.y"
-    {
-               OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_module_conf:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->module_conf);
-               cfg_parser->cfg->module_conf = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->module_conf = yyvsp[0].str;
        }
-    break;
-
-  case 160:
+break;
+case 159:
 #line 747 "util/configparser.y"
-    {
-               OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
+{
+               OUTYY(("P(server_val_override_date:%s)\n", yyvsp[0].str));
+               if(strlen(yyvsp[0].str) == 0 || strcmp(yyvsp[0].str, "0") == 0) {
                        cfg_parser->cfg->val_date_override = 0;
-               } else if(strlen((yyvsp[(2) - (2)].str)) == 14) {
+               } else if(strlen(yyvsp[0].str) == 14) {
                        cfg_parser->cfg->val_date_override = 
-                               cfg_convert_timeval((yyvsp[(2) - (2)].str));
+                               cfg_convert_timeval(yyvsp[0].str);
                        if(!cfg_parser->cfg->val_date_override)
                                yyerror("bad date/time specification");
                } else {
-                       if(atoi((yyvsp[(2) - (2)].str)) == 0)
+                       if(atoi(yyvsp[0].str) == 0)
                                yyerror("number expected");
-                       cfg_parser->cfg->val_date_override = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->val_date_override = atoi(yyvsp[0].str);
                }
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 161:
+break;
+case 160:
 #line 765 "util/configparser.y"
-    {
-               OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_cache_max_ttl:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->max_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->max_ttl = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 162:
+break;
+case 161:
 #line 774 "util/configparser.y"
-    {
-               OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
+{
+               OUTYY(("P(server_bogus_ttl:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0 && strcmp(yyvsp[0].str, "0") != 0)
                        yyerror("number expected");
-               else cfg_parser->cfg->bogus_ttl = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->bogus_ttl = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 163:
+break;
+case 162:
 #line 783 "util/configparser.y"
-    {
-               OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_val_clean_additional:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->val_clean_additional = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 164:
+break;
+case 163:
 #line 793 "util/configparser.y"
-    {
-               OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(server_val_permissive_mode:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->val_permissive_mode = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 165:
+break;
+case 164:
 #line 803 "util/configparser.y"
-    {
-               OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
-               cfg_parser->cfg->val_nsec3_key_iterations = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->val_nsec3_key_iterations = yyvsp[0].str;
        }
-    break;
-
-  case 166:
+break;
+case 165:
 #line 810 "util/configparser.y"
-    {
-               OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
+{
+               OUTYY(("P(server_key_cache_size:%s)\n", yyvsp[0].str));
+               if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->key_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 167:
+break;
+case 166:
 #line 818 "util/configparser.y"
-    {
-               OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(server_key_cache_slabs:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("number expected");
                else {
-                       cfg_parser->cfg->key_cache_slabs = atoi((yyvsp[(2) - (2)].str));
+                       cfg_parser->cfg->key_cache_slabs = atoi(yyvsp[0].str);
                        if(!is_pow2(cfg_parser->cfg->key_cache_slabs))
                                yyerror("must be a power of 2");
                }
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 168:
+break;
+case 167:
 #line 831 "util/configparser.y"
-    {
-               OUTYY(("P(server_neg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->neg_cache_size))
+{
+               OUTYY(("P(server_neg_cache_size:%s)\n", yyvsp[0].str));
+               if(!cfg_parse_memsize(yyvsp[0].str, &cfg_parser->cfg->neg_cache_size))
                        yyerror("memory size expected");
-               free((yyvsp[(2) - (2)].str));
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 169:
+break;
+case 168:
 #line 839 "util/configparser.y"
-    {
-               OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
-               if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
-                  strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 && strcmp((yyvsp[(3) - (3)].str), "redirect")!=0 &&
-                  strcmp((yyvsp[(3) - (3)].str), "transparent")!=0 && strcmp((yyvsp[(3) - (3)].str), "nodefault")!=0)
+{
+               OUTYY(("P(server_local_zone:%s %s)\n", yyvsp[-1].str, yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "static")!=0 && strcmp(yyvsp[0].str, "deny")!=0 &&
+                  strcmp(yyvsp[0].str, "refuse")!=0 && strcmp(yyvsp[0].str, "redirect")!=0 &&
+                  strcmp(yyvsp[0].str, "transparent")!=0 && strcmp(yyvsp[0].str, "nodefault")!=0)
                        yyerror("local-zone type: expected static, deny, "
                                "refuse, redirect, transparent or nodefault");
-               else if(strcmp((yyvsp[(3) - (3)].str), "nodefault")==0) {
+               else if(strcmp(yyvsp[0].str, "nodefault")==0) {
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
-                               local_zones_nodefault, (yyvsp[(2) - (3)].str)))
+                               local_zones_nodefault, yyvsp[-1].str))
                                fatal_exit("out of memory adding local-zone");
-                       free((yyvsp[(3) - (3)].str));
+                       free(yyvsp[0].str);
                } else {
                        if(!cfg_str2list_insert(&cfg_parser->cfg->local_zones, 
-                               (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)))
+                               yyvsp[-1].str, yyvsp[0].str))
                                fatal_exit("out of memory adding local-zone");
                }
        }
-    break;
-
-  case 170:
+break;
+case 169:
 #line 859 "util/configparser.y"
-    {
-               OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(server_local_data:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, yyvsp[0].str))
                        fatal_exit("out of memory adding local-data");
        }
-    break;
-
-  case 171:
+break;
+case 170:
 #line 866 "util/configparser.y"
-    {
+{
                char* ptr;
-               OUTYY(("P(server_local_data_ptr:%s)\n", (yyvsp[(2) - (2)].str)));
-               ptr = cfg_ptr_reverse((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               OUTYY(("P(server_local_data_ptr:%s)\n", yyvsp[0].str));
+               ptr = cfg_ptr_reverse(yyvsp[0].str);
+               free(yyvsp[0].str);
                if(ptr) {
                        if(!cfg_strlist_insert(&cfg_parser->cfg->
                                local_data, ptr))
@@ -2749,367 +1651,190 @@ yyreduce:
                        yyerror("local-data-ptr could not be reversed");
                }
        }
-    break;
-
-  case 172:
+break;
+case 171:
 #line 881 "util/configparser.y"
-    {
-               OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(name:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->stubs->name);
-               cfg_parser->cfg->stubs->name = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->stubs->name = yyvsp[0].str;
        }
-    break;
-
-  case 173:
+break;
+case 172:
 #line 888 "util/configparser.y"
-    {
-               OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(stub-host:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 174:
+break;
+case 173:
 #line 895 "util/configparser.y"
-    {
-               OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(stub-addr:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 175:
+break;
+case 174:
 #line 902 "util/configparser.y"
-    {
-               OUTYY(("P(stub-prime:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(stub-prime:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->stubs->isprime = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 176:
+break;
+case 175:
 #line 912 "util/configparser.y"
-    {
-               OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(name:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->forwards->name);
-               cfg_parser->cfg->forwards->name = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->forwards->name = yyvsp[0].str;
        }
-    break;
-
-  case 177:
+break;
+case 176:
 #line 919 "util/configparser.y"
-    {
-               OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(forward-host:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 178:
+break;
+case 177:
 #line 926 "util/configparser.y"
-    {
-               OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(forward-addr:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 179:
+break;
+case 178:
 #line 933 "util/configparser.y"
-    
+{ 
                OUTYY(("\nP(remote-control:)\n")); 
        }
-    break;
-
-  case 189:
+break;
+case 188:
 #line 944 "util/configparser.y"
-    {
-               OUTYY(("P(control_enable:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
+{
+               OUTYY(("P(control_enable:%s)\n", yyvsp[0].str));
+               if(strcmp(yyvsp[0].str, "yes") != 0 && strcmp(yyvsp[0].str, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->remote_control_enable = 
-                       (strcmp((yyvsp[(2) - (2)].str), "yes")==0);
-               free((yyvsp[(2) - (2)].str));
+                       (strcmp(yyvsp[0].str, "yes")==0);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 190:
+break;
+case 189:
 #line 954 "util/configparser.y"
-    {
-               OUTYY(("P(control_port:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+{
+               OUTYY(("P(control_port:%s)\n", yyvsp[0].str));
+               if(atoi(yyvsp[0].str) == 0)
                        yyerror("control port number expected");
-               else cfg_parser->cfg->control_port = atoi((yyvsp[(2) - (2)].str));
-               free((yyvsp[(2) - (2)].str));
+               else cfg_parser->cfg->control_port = atoi(yyvsp[0].str);
+               free(yyvsp[0].str);
        }
-    break;
-
-  case 191:
+break;
+case 190:
 #line 963 "util/configparser.y"
-    {
-               OUTYY(("P(control_interface:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, (yyvsp[(2) - (2)].str)))
+{
+               OUTYY(("P(control_interface:%s)\n", yyvsp[0].str));
+               if(!cfg_strlist_insert(&cfg_parser->cfg->control_ifs, yyvsp[0].str))
                        yyerror("out of memory");
        }
-    break;
-
-  case 192:
+break;
+case 191:
 #line 970 "util/configparser.y"
-    {
-               OUTYY(("P(rc_server_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(rc_server_key_file:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->server_key_file);
-               cfg_parser->cfg->server_key_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->server_key_file = yyvsp[0].str;
        }
-    break;
-
-  case 193:
+break;
+case 192:
 #line 977 "util/configparser.y"
-    {
-               OUTYY(("P(rc_server_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(rc_server_cert_file:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->server_cert_file);
-               cfg_parser->cfg->server_cert_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->server_cert_file = yyvsp[0].str;
        }
-    break;
-
-  case 194:
+break;
+case 193:
 #line 984 "util/configparser.y"
-    {
-               OUTYY(("P(rc_control_key_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(rc_control_key_file:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->control_key_file);
-               cfg_parser->cfg->control_key_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->control_key_file = yyvsp[0].str;
        }
-    break;
-
-  case 195:
+break;
+case 194:
 #line 991 "util/configparser.y"
-    {
-               OUTYY(("P(rc_control_cert_file:%s)\n", (yyvsp[(2) - (2)].str)));
+{
+               OUTYY(("P(rc_control_cert_file:%s)\n", yyvsp[0].str));
                free(cfg_parser->cfg->control_cert_file);
-               cfg_parser->cfg->control_cert_file = (yyvsp[(2) - (2)].str);
+               cfg_parser->cfg->control_cert_file = yyvsp[0].str;
        }
-    break;
-
-
-/* Line 1267 of yacc.c.  */
-#line 2898 "util/configparser.c"
-      default: break;
+break;
+#line 1782 "util/configparser.c"
     }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
+    yyssp -= yym;
+    yystate = *yyssp;
+    yyvsp -= yym;
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
     {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-      {
-       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-         {
-           YYSIZE_T yyalloc = 2 * yysize;
-           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-             yyalloc = YYSTACK_ALLOC_MAXIMUM;
-           if (yymsg != yymsgbuf)
-             YYSTACK_FREE (yymsg);
-           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-           if (yymsg)
-             yymsg_alloc = yyalloc;
-           else
-             {
-               yymsg = yymsgbuf;
-               yymsg_alloc = sizeof yymsgbuf;
-             }
-         }
-
-       if (0 < yysize && yysize <= yymsg_alloc)
-         {
-           (void) yysyntax_error (yymsg, yystate, yychar);
-           yyerror (yymsg);
-         }
-       else
-         {
-           yyerror (YY_("syntax error"));
-           if (yysize != 0)
-             goto yyexhaustedlab;
-         }
-      }
+#if YYDEBUG
+        if (yydebug)
+            printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
 #endif
+        yystate = YYFINAL;
+        *++yyssp = YYFINAL;
+        *++yyvsp = yyval;
+        if (yychar < 0)
+        {
+            if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+            if (yydebug)
+            {
+                yys = 0;
+                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+                if (!yys) yys = "illegal-symbol";
+                printf("%sdebug: state %d, reading %d (%s)\n",
+                        YYPREFIX, YYFINAL, yychar, yys);
+            }
+#endif
+        }
+        if (yychar == 0) goto yyaccept;
+        goto yyloop;
     }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse look-ahead token after an
-        error, discard it.  */
-
-      if (yychar <= YYEOF)
-       {
-         /* Return failure if at end of input.  */
-         if (yychar == YYEOF)
-           YYABORT;
-       }
-      else
-       {
-         yydestruct ("Error: discarding",
-                     yytoken, &yylval);
-         yychar = YYEMPTY;
-       }
-    }
-
-  /* Else will try to reuse look-ahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-
-      yydestruct ("Error: popping",
-                 yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  *++yyvsp = yylval;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
+    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+        printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
 #endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                yytoken, &yylval);
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
+    if (yyssp >= yysslim && yygrowstack())
     {
-      yydestruct ("Cleanup: popping",
-                 yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
+        goto yyoverflow;
     }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
+    *++yyssp = yystate;
+    *++yyvsp = yyval;
+    goto yyloop;
 
+yyoverflow:
+    yyerror("yacc stack overflow");
 
-#line 997 "util/configparser.y"
-
-
-/* parse helper routines could be here */
+yyabort:
+    return (1);
 
+yyaccept:
+    return (0);
+}
index e1e4b4de4f3d6bf81748fbe78c399b4c7c968671..0a57716e81024094f43eb23b307763cbcf359835 100644 (file)
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     SPACE = 258,
-     LETTER = 259,
-     NEWLINE = 260,
-     COMMENT = 261,
-     COLON = 262,
-     ANY = 263,
-     ZONESTR = 264,
-     STRING = 265,
-     VAR_SERVER = 266,
-     VAR_VERBOSITY = 267,
-     VAR_NUM_THREADS = 268,
-     VAR_PORT = 269,
-     VAR_OUTGOING_RANGE = 270,
-     VAR_INTERFACE = 271,
-     VAR_DO_IP4 = 272,
-     VAR_DO_IP6 = 273,
-     VAR_DO_UDP = 274,
-     VAR_DO_TCP = 275,
-     VAR_CHROOT = 276,
-     VAR_USERNAME = 277,
-     VAR_DIRECTORY = 278,
-     VAR_LOGFILE = 279,
-     VAR_PIDFILE = 280,
-     VAR_MSG_CACHE_SIZE = 281,
-     VAR_MSG_CACHE_SLABS = 282,
-     VAR_NUM_QUERIES_PER_THREAD = 283,
-     VAR_RRSET_CACHE_SIZE = 284,
-     VAR_RRSET_CACHE_SLABS = 285,
-     VAR_OUTGOING_NUM_TCP = 286,
-     VAR_INFRA_HOST_TTL = 287,
-     VAR_INFRA_LAME_TTL = 288,
-     VAR_INFRA_CACHE_SLABS = 289,
-     VAR_INFRA_CACHE_NUMHOSTS = 290,
-     VAR_INFRA_CACHE_LAME_SIZE = 291,
-     VAR_NAME = 292,
-     VAR_STUB_ZONE = 293,
-     VAR_STUB_HOST = 294,
-     VAR_STUB_ADDR = 295,
-     VAR_TARGET_FETCH_POLICY = 296,
-     VAR_HARDEN_SHORT_BUFSIZE = 297,
-     VAR_HARDEN_LARGE_QUERIES = 298,
-     VAR_FORWARD_ZONE = 299,
-     VAR_FORWARD_HOST = 300,
-     VAR_FORWARD_ADDR = 301,
-     VAR_DO_NOT_QUERY_ADDRESS = 302,
-     VAR_HIDE_IDENTITY = 303,
-     VAR_HIDE_VERSION = 304,
-     VAR_IDENTITY = 305,
-     VAR_VERSION = 306,
-     VAR_HARDEN_GLUE = 307,
-     VAR_MODULE_CONF = 308,
-     VAR_TRUST_ANCHOR_FILE = 309,
-     VAR_TRUST_ANCHOR = 310,
-     VAR_VAL_OVERRIDE_DATE = 311,
-     VAR_BOGUS_TTL = 312,
-     VAR_VAL_CLEAN_ADDITIONAL = 313,
-     VAR_VAL_PERMISSIVE_MODE = 314,
-     VAR_INCOMING_NUM_TCP = 315,
-     VAR_MSG_BUFFER_SIZE = 316,
-     VAR_KEY_CACHE_SIZE = 317,
-     VAR_KEY_CACHE_SLABS = 318,
-     VAR_TRUSTED_KEYS_FILE = 319,
-     VAR_VAL_NSEC3_KEYSIZE_ITERATIONS = 320,
-     VAR_USE_SYSLOG = 321,
-     VAR_OUTGOING_INTERFACE = 322,
-     VAR_ROOT_HINTS = 323,
-     VAR_DO_NOT_QUERY_LOCALHOST = 324,
-     VAR_CACHE_MAX_TTL = 325,
-     VAR_HARDEN_DNNSEC_STRIPPED = 326,
-     VAR_ACCESS_CONTROL = 327,
-     VAR_LOCAL_ZONE = 328,
-     VAR_LOCAL_DATA = 329,
-     VAR_INTERFACE_AUTOMATIC = 330,
-     VAR_STATISTICS_INTERVAL = 331,
-     VAR_DO_DAEMONIZE = 332,
-     VAR_USE_CAPS_FOR_ID = 333,
-     VAR_STATISTICS_CUMULATIVE = 334,
-     VAR_OUTGOING_PORT_PERMIT = 335,
-     VAR_OUTGOING_PORT_AVOID = 336,
-     VAR_DLV_ANCHOR_FILE = 337,
-     VAR_DLV_ANCHOR = 338,
-     VAR_NEG_CACHE_SIZE = 339,
-     VAR_HARDEN_REFERRAL_PATH = 340,
-     VAR_PRIVATE_ADDRESS = 341,
-     VAR_PRIVATE_DOMAIN = 342,
-     VAR_REMOTE_CONTROL = 343,
-     VAR_CONTROL_ENABLE = 344,
-     VAR_CONTROL_INTERFACE = 345,
-     VAR_CONTROL_PORT = 346,
-     VAR_SERVER_KEY_FILE = 347,
-     VAR_SERVER_CERT_FILE = 348,
-     VAR_CONTROL_KEY_FILE = 349,
-     VAR_CONTROL_CERT_FILE = 350,
-     VAR_EXTENDED_STATISTICS = 351,
-     VAR_LOCAL_DATA_PTR = 352,
-     VAR_JOSTLE_TIMEOUT = 353,
-     VAR_STUB_PRIME = 354,
-     VAR_UNWANTED_REPLY_THRESHOLD = 355,
-     VAR_LOG_TIME_ASCII = 356
-   };
-#endif
-/* Tokens.  */
-#define SPACE 258
-#define LETTER 259
-#define NEWLINE 260
-#define COMMENT 261
-#define COLON 262
-#define ANY 263
-#define ZONESTR 264
-#define STRING 265
-#define VAR_SERVER 266
-#define VAR_VERBOSITY 267
-#define VAR_NUM_THREADS 268
-#define VAR_PORT 269
-#define VAR_OUTGOING_RANGE 270
-#define VAR_INTERFACE 271
-#define VAR_DO_IP4 272
-#define VAR_DO_IP6 273
-#define VAR_DO_UDP 274
-#define VAR_DO_TCP 275
-#define VAR_CHROOT 276
-#define VAR_USERNAME 277
-#define VAR_DIRECTORY 278
-#define VAR_LOGFILE 279
-#define VAR_PIDFILE 280
-#define VAR_MSG_CACHE_SIZE 281
-#define VAR_MSG_CACHE_SLABS 282
-#define VAR_NUM_QUERIES_PER_THREAD 283
-#define VAR_RRSET_CACHE_SIZE 284
-#define VAR_RRSET_CACHE_SLABS 285
-#define VAR_OUTGOING_NUM_TCP 286
-#define VAR_INFRA_HOST_TTL 287
-#define VAR_INFRA_LAME_TTL 288
-#define VAR_INFRA_CACHE_SLABS 289
-#define VAR_INFRA_CACHE_NUMHOSTS 290
-#define VAR_INFRA_CACHE_LAME_SIZE 291
-#define VAR_NAME 292
-#define VAR_STUB_ZONE 293
-#define VAR_STUB_HOST 294
-#define VAR_STUB_ADDR 295
-#define VAR_TARGET_FETCH_POLICY 296
-#define VAR_HARDEN_SHORT_BUFSIZE 297
-#define VAR_HARDEN_LARGE_QUERIES 298
-#define VAR_FORWARD_ZONE 299
-#define VAR_FORWARD_HOST 300
-#define VAR_FORWARD_ADDR 301
-#define VAR_DO_NOT_QUERY_ADDRESS 302
-#define VAR_HIDE_IDENTITY 303
-#define VAR_HIDE_VERSION 304
-#define VAR_IDENTITY 305
-#define VAR_VERSION 306
-#define VAR_HARDEN_GLUE 307
-#define VAR_MODULE_CONF 308
-#define VAR_TRUST_ANCHOR_FILE 309
-#define VAR_TRUST_ANCHOR 310
-#define VAR_VAL_OVERRIDE_DATE 311
-#define VAR_BOGUS_TTL 312
-#define VAR_VAL_CLEAN_ADDITIONAL 313
-#define VAR_VAL_PERMISSIVE_MODE 314
-#define VAR_INCOMING_NUM_TCP 315
-#define VAR_MSG_BUFFER_SIZE 316
-#define VAR_KEY_CACHE_SIZE 317
-#define VAR_KEY_CACHE_SLABS 318
-#define VAR_TRUSTED_KEYS_FILE 319
-#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 320
-#define VAR_USE_SYSLOG 321
-#define VAR_OUTGOING_INTERFACE 322
-#define VAR_ROOT_HINTS 323
-#define VAR_DO_NOT_QUERY_LOCALHOST 324
-#define VAR_CACHE_MAX_TTL 325
-#define VAR_HARDEN_DNNSEC_STRIPPED 326
-#define VAR_ACCESS_CONTROL 327
-#define VAR_LOCAL_ZONE 328
-#define VAR_LOCAL_DATA 329
-#define VAR_INTERFACE_AUTOMATIC 330
-#define VAR_STATISTICS_INTERVAL 331
-#define VAR_DO_DAEMONIZE 332
-#define VAR_USE_CAPS_FOR_ID 333
-#define VAR_STATISTICS_CUMULATIVE 334
-#define VAR_OUTGOING_PORT_PERMIT 335
-#define VAR_OUTGOING_PORT_AVOID 336
-#define VAR_DLV_ANCHOR_FILE 337
-#define VAR_DLV_ANCHOR 338
-#define VAR_NEG_CACHE_SIZE 339
-#define VAR_HARDEN_REFERRAL_PATH 340
-#define VAR_PRIVATE_ADDRESS 341
-#define VAR_PRIVATE_DOMAIN 342
-#define VAR_REMOTE_CONTROL 343
-#define VAR_CONTROL_ENABLE 344
-#define VAR_CONTROL_INTERFACE 345
-#define VAR_CONTROL_PORT 346
-#define VAR_SERVER_KEY_FILE 347
-#define VAR_SERVER_CERT_FILE 348
-#define VAR_CONTROL_KEY_FILE 349
-#define VAR_CONTROL_CERT_FILE 350
-#define VAR_EXTENDED_STATISTICS 351
-#define VAR_LOCAL_DATA_PTR 352
-#define VAR_JOSTLE_TIMEOUT 353
-#define VAR_STUB_PRIME 354
-#define VAR_UNWANTED_REPLY_THRESHOLD 355
-#define VAR_LOG_TIME_ASCII 356
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 64 "util/configparser.y"
-{
+#define SPACE 257
+#define LETTER 258
+#define NEWLINE 259
+#define COMMENT 260
+#define COLON 261
+#define ANY 262
+#define ZONESTR 263
+#define STRING 264
+#define VAR_SERVER 265
+#define VAR_VERBOSITY 266
+#define VAR_NUM_THREADS 267
+#define VAR_PORT 268
+#define VAR_OUTGOING_RANGE 269
+#define VAR_INTERFACE 270
+#define VAR_DO_IP4 271
+#define VAR_DO_IP6 272
+#define VAR_DO_UDP 273
+#define VAR_DO_TCP 274
+#define VAR_CHROOT 275
+#define VAR_USERNAME 276
+#define VAR_DIRECTORY 277
+#define VAR_LOGFILE 278
+#define VAR_PIDFILE 279
+#define VAR_MSG_CACHE_SIZE 280
+#define VAR_MSG_CACHE_SLABS 281
+#define VAR_NUM_QUERIES_PER_THREAD 282
+#define VAR_RRSET_CACHE_SIZE 283
+#define VAR_RRSET_CACHE_SLABS 284
+#define VAR_OUTGOING_NUM_TCP 285
+#define VAR_INFRA_HOST_TTL 286
+#define VAR_INFRA_LAME_TTL 287
+#define VAR_INFRA_CACHE_SLABS 288
+#define VAR_INFRA_CACHE_NUMHOSTS 289
+#define VAR_INFRA_CACHE_LAME_SIZE 290
+#define VAR_NAME 291
+#define VAR_STUB_ZONE 292
+#define VAR_STUB_HOST 293
+#define VAR_STUB_ADDR 294
+#define VAR_TARGET_FETCH_POLICY 295
+#define VAR_HARDEN_SHORT_BUFSIZE 296
+#define VAR_HARDEN_LARGE_QUERIES 297
+#define VAR_FORWARD_ZONE 298
+#define VAR_FORWARD_HOST 299
+#define VAR_FORWARD_ADDR 300
+#define VAR_DO_NOT_QUERY_ADDRESS 301
+#define VAR_HIDE_IDENTITY 302
+#define VAR_HIDE_VERSION 303
+#define VAR_IDENTITY 304
+#define VAR_VERSION 305
+#define VAR_HARDEN_GLUE 306
+#define VAR_MODULE_CONF 307
+#define VAR_TRUST_ANCHOR_FILE 308
+#define VAR_TRUST_ANCHOR 309
+#define VAR_VAL_OVERRIDE_DATE 310
+#define VAR_BOGUS_TTL 311
+#define VAR_VAL_CLEAN_ADDITIONAL 312
+#define VAR_VAL_PERMISSIVE_MODE 313
+#define VAR_INCOMING_NUM_TCP 314
+#define VAR_MSG_BUFFER_SIZE 315
+#define VAR_KEY_CACHE_SIZE 316
+#define VAR_KEY_CACHE_SLABS 317
+#define VAR_TRUSTED_KEYS_FILE 318
+#define VAR_VAL_NSEC3_KEYSIZE_ITERATIONS 319
+#define VAR_USE_SYSLOG 320
+#define VAR_OUTGOING_INTERFACE 321
+#define VAR_ROOT_HINTS 322
+#define VAR_DO_NOT_QUERY_LOCALHOST 323
+#define VAR_CACHE_MAX_TTL 324
+#define VAR_HARDEN_DNNSEC_STRIPPED 325
+#define VAR_ACCESS_CONTROL 326
+#define VAR_LOCAL_ZONE 327
+#define VAR_LOCAL_DATA 328
+#define VAR_INTERFACE_AUTOMATIC 329
+#define VAR_STATISTICS_INTERVAL 330
+#define VAR_DO_DAEMONIZE 331
+#define VAR_USE_CAPS_FOR_ID 332
+#define VAR_STATISTICS_CUMULATIVE 333
+#define VAR_OUTGOING_PORT_PERMIT 334
+#define VAR_OUTGOING_PORT_AVOID 335
+#define VAR_DLV_ANCHOR_FILE 336
+#define VAR_DLV_ANCHOR 337
+#define VAR_NEG_CACHE_SIZE 338
+#define VAR_HARDEN_REFERRAL_PATH 339
+#define VAR_PRIVATE_ADDRESS 340
+#define VAR_PRIVATE_DOMAIN 341
+#define VAR_REMOTE_CONTROL 342
+#define VAR_CONTROL_ENABLE 343
+#define VAR_CONTROL_INTERFACE 344
+#define VAR_CONTROL_PORT 345
+#define VAR_SERVER_KEY_FILE 346
+#define VAR_SERVER_CERT_FILE 347
+#define VAR_CONTROL_KEY_FILE 348
+#define VAR_CONTROL_CERT_FILE 349
+#define VAR_EXTENDED_STATISTICS 350
+#define VAR_LOCAL_DATA_PTR 351
+#define VAR_JOSTLE_TIMEOUT 352
+#define VAR_STUB_PRIME 353
+#define VAR_UNWANTED_REPLY_THRESHOLD 354
+#define VAR_LOG_TIME_ASCII 355
+typedef union {
        char*   str;
-}
-/* Line 1489 of yacc.c.  */
-#line 255 "util/configparser.h"
-       YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
+} YYSTYPE;
 extern YYSTYPE yylval;
-
index ee9791e1a81343c5745b6f84790d01d89b2ced4e..4318f5f4bbc76d333214ec2dcc5c33f3bf8fa59b 100644 (file)
@@ -366,7 +366,7 @@ server_use_syslog: VAR_USE_SYSLOG STRING
                if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
                        yyerror("expected yes or no.");
                else cfg_parser->cfg->use_syslog = (strcmp($2, "yes")==0);
-#ifndef HAVE_SYSLOG_H
+#if !defined(HAVE_SYSLOG_H) && !defined(UB_ON_WINDOWS)
                if(strcmp($2, "yes") == 0)
                        yyerror("no syslog services are available. "
                                "(reconfigure and compile to add)");