Annotation of embedaddon/ipsec-tools/src/racoon/cfparse.c, revision 1.1

1.1     ! misho       1: 
        !             2: /* A Bison parser, made by GNU Bison 2.4.1.  */
        !             3: 
        !             4: /* Skeleton implementation for Bison's Yacc-like parsers in C
        !             5:    
        !             6:       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
        !             7:    Free Software Foundation, Inc.
        !             8:    
        !             9:    This program is free software: you can redistribute it and/or modify
        !            10:    it under the terms of the GNU General Public License as published by
        !            11:    the Free Software Foundation, either version 3 of the License, or
        !            12:    (at your option) any later version.
        !            13:    
        !            14:    This program is distributed in the hope that it will be useful,
        !            15:    but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            16:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            17:    GNU General Public License for more details.
        !            18:    
        !            19:    You should have received a copy of the GNU General Public License
        !            20:    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
        !            21: 
        !            22: /* As a special exception, you may create a larger work that contains
        !            23:    part or all of the Bison parser skeleton and distribute that work
        !            24:    under terms of your choice, so long as that work isn't itself a
        !            25:    parser generator using the skeleton or a modified version thereof
        !            26:    as a parser skeleton.  Alternatively, if you modify or redistribute
        !            27:    the parser skeleton itself, you may (at your option) remove this
        !            28:    special exception, which will cause the skeleton and the resulting
        !            29:    Bison output files to be licensed under the GNU General Public
        !            30:    License without this special exception.
        !            31:    
        !            32:    This special exception was added by the Free Software Foundation in
        !            33:    version 2.2 of Bison.  */
        !            34: 
        !            35: /* C LALR(1) parser skeleton written by Richard Stallman, by
        !            36:    simplifying the original so-called "semantic" parser.  */
        !            37: 
        !            38: /* All symbols defined below should begin with yy or YY, to avoid
        !            39:    infringing on user name space.  This should be done even for local
        !            40:    variables, as they might otherwise be expanded by user macros.
        !            41:    There are some unavoidable exceptions within include files to
        !            42:    define necessary library symbols; they are noted "INFRINGES ON
        !            43:    USER NAME SPACE" below.  */
        !            44: 
        !            45: /* Identify Bison output.  */
        !            46: #define YYBISON 1
        !            47: 
        !            48: /* Bison version.  */
        !            49: #define YYBISON_VERSION "2.4.1"
        !            50: 
        !            51: /* Skeleton name.  */
        !            52: #define YYSKELETON_NAME "yacc.c"
        !            53: 
        !            54: /* Pure parsers.  */
        !            55: #define YYPURE 0
        !            56: 
        !            57: /* Push parsers.  */
        !            58: #define YYPUSH 0
        !            59: 
        !            60: /* Pull parsers.  */
        !            61: #define YYPULL 1
        !            62: 
        !            63: /* Using locations.  */
        !            64: #define YYLSP_NEEDED 0
        !            65: 
        !            66: 
        !            67: 
        !            68: /* Copy the first part of user declarations.  */
        !            69: 
        !            70: /* Line 189 of yacc.c  */
        !            71: #line 5 "cfparse.y"
        !            72: 
        !            73: /*
        !            74:  * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 and 2003 WIDE Project.
        !            75:  * All rights reserved.
        !            76:  *
        !            77:  * Redistribution and use in source and binary forms, with or without
        !            78:  * modification, are permitted provided that the following conditions
        !            79:  * are met:
        !            80:  * 1. Redistributions of source code must retain the above copyright
        !            81:  *    notice, this list of conditions and the following disclaimer.
        !            82:  * 2. Redistributions in binary form must reproduce the above copyright
        !            83:  *    notice, this list of conditions and the following disclaimer in the
        !            84:  *    documentation and/or other materials provided with the distribution.
        !            85:  * 3. Neither the name of the project nor the names of its contributors
        !            86:  *    may be used to endorse or promote products derived from this software
        !            87:  *    without specific prior written permission.
        !            88:  *
        !            89:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
        !            90:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            91:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            92:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
        !            93:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            94:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            95:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            96:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            97:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            98:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            99:  * SUCH DAMAGE.
        !           100:  */
        !           101: 
        !           102: #include "config.h"
        !           103: 
        !           104: #include <sys/types.h>
        !           105: #include <sys/param.h>
        !           106: #include <sys/queue.h>
        !           107: #include <sys/socket.h>
        !           108: 
        !           109: #include <netinet/in.h>
        !           110: #include PATH_IPSEC_H
        !           111: 
        !           112: #ifdef ENABLE_HYBRID
        !           113: #include <arpa/inet.h>
        !           114: #endif
        !           115: 
        !           116: #include <stdlib.h>
        !           117: #include <stdio.h>
        !           118: #include <string.h>
        !           119: #include <errno.h>
        !           120: #include <netdb.h>
        !           121: #include <pwd.h>
        !           122: #include <grp.h>
        !           123: 
        !           124: #include "var.h"
        !           125: #include "misc.h"
        !           126: #include "vmbuf.h"
        !           127: #include "plog.h"
        !           128: #include "sockmisc.h"
        !           129: #include "str2val.h"
        !           130: #include "genlist.h"
        !           131: #include "debug.h"
        !           132: 
        !           133: #include "admin.h"
        !           134: #include "privsep.h"
        !           135: #include "cfparse_proto.h"
        !           136: #include "cftoken_proto.h"
        !           137: #include "algorithm.h"
        !           138: #include "localconf.h"
        !           139: #include "policy.h"
        !           140: #include "sainfo.h"
        !           141: #include "oakley.h"
        !           142: #include "pfkey.h"
        !           143: #include "remoteconf.h"
        !           144: #include "grabmyaddr.h"
        !           145: #include "isakmp_var.h"
        !           146: #include "handler.h"
        !           147: #include "isakmp.h"
        !           148: #include "nattraversal.h"
        !           149: #include "isakmp_frag.h"
        !           150: #ifdef ENABLE_HYBRID
        !           151: #include "resolv.h"
        !           152: #include "isakmp_unity.h"
        !           153: #include "isakmp_xauth.h"
        !           154: #include "isakmp_cfg.h"
        !           155: #endif
        !           156: #include "ipsec_doi.h"
        !           157: #include "strnames.h"
        !           158: #include "gcmalloc.h"
        !           159: #ifdef HAVE_GSSAPI
        !           160: #include "gssapi.h"
        !           161: #endif
        !           162: #include "vendorid.h"
        !           163: #include "rsalist.h"
        !           164: #include "crypto_openssl.h"
        !           165: 
        !           166: struct secprotospec {
        !           167:        int prop_no;
        !           168:        int trns_no;
        !           169:        int strength;           /* for isakmp/ipsec */
        !           170:        int encklen;            /* for isakmp/ipsec */
        !           171:        time_t lifetime;        /* for isakmp */
        !           172:        int lifebyte;           /* for isakmp */
        !           173:        int proto_id;           /* for ipsec (isakmp?) */
        !           174:        int ipsec_level;        /* for ipsec */
        !           175:        int encmode;            /* for ipsec */
        !           176:        int vendorid;           /* for isakmp */
        !           177:        char *gssid;
        !           178:        struct sockaddr *remote;
        !           179:        int algclass[MAXALGCLASS];
        !           180: 
        !           181:        struct secprotospec *next;      /* the tail is the most prefiered. */
        !           182:        struct secprotospec *prev;
        !           183: };
        !           184: 
        !           185: static int num2dhgroup[] = {
        !           186:        0,
        !           187:        OAKLEY_ATTR_GRP_DESC_MODP768,
        !           188:        OAKLEY_ATTR_GRP_DESC_MODP1024,
        !           189:        OAKLEY_ATTR_GRP_DESC_EC2N155,
        !           190:        OAKLEY_ATTR_GRP_DESC_EC2N185,
        !           191:        OAKLEY_ATTR_GRP_DESC_MODP1536,
        !           192:        0,
        !           193:        0,
        !           194:        0,
        !           195:        0,
        !           196:        0,
        !           197:        0,
        !           198:        0,
        !           199:        0,
        !           200:        OAKLEY_ATTR_GRP_DESC_MODP2048,
        !           201:        OAKLEY_ATTR_GRP_DESC_MODP3072,
        !           202:        OAKLEY_ATTR_GRP_DESC_MODP4096,
        !           203:        OAKLEY_ATTR_GRP_DESC_MODP6144,
        !           204:        OAKLEY_ATTR_GRP_DESC_MODP8192
        !           205: };
        !           206: 
        !           207: static struct remoteconf *cur_rmconf;
        !           208: static int tmpalgtype[MAXALGCLASS];
        !           209: static struct sainfo *cur_sainfo;
        !           210: static int cur_algclass;
        !           211: static int oldloglevel = LLV_BASE;
        !           212: 
        !           213: static struct secprotospec *newspspec __P((void));
        !           214: static void insspspec __P((struct remoteconf *, struct secprotospec *));
        !           215: void dupspspec_list __P((struct remoteconf *dst, struct remoteconf *src));
        !           216: void flushspspec __P((struct remoteconf *));
        !           217: static void adminsock_conf __P((vchar_t *, vchar_t *, vchar_t *, int));
        !           218: 
        !           219: static int set_isakmp_proposal __P((struct remoteconf *));
        !           220: static void clean_tmpalgtype __P((void));
        !           221: static int expand_isakmpspec __P((int, int, int *,
        !           222:        int, int, time_t, int, int, int, char *, struct remoteconf *));
        !           223: 
        !           224: void freeetypes (struct etypes **etypes);
        !           225: 
        !           226: static int load_x509(const char *file, char **filenameptr,
        !           227:                     vchar_t **certptr)
        !           228: {
        !           229:        char path[PATH_MAX];
        !           230: 
        !           231:        getpathname(path, sizeof(path), LC_PATHTYPE_CERT, file);
        !           232:        *certptr = eay_get_x509cert(path);
        !           233:        if (*certptr == NULL)
        !           234:                return -1;
        !           235: 
        !           236:        *filenameptr = racoon_strdup(file);
        !           237:        STRDUP_FATAL(*filenameptr);
        !           238: 
        !           239:        return 0;
        !           240: }
        !           241: 
        !           242: 
        !           243: 
        !           244: /* Line 189 of yacc.c  */
        !           245: #line 246 "cfparse.c"
        !           246: 
        !           247: /* Enabling traces.  */
        !           248: #ifndef YYDEBUG
        !           249: # define YYDEBUG 0
        !           250: #endif
        !           251: 
        !           252: /* Enabling verbose error messages.  */
        !           253: #ifdef YYERROR_VERBOSE
        !           254: # undef YYERROR_VERBOSE
        !           255: # define YYERROR_VERBOSE 1
        !           256: #else
        !           257: # define YYERROR_VERBOSE 0
        !           258: #endif
        !           259: 
        !           260: /* Enabling the token table.  */
        !           261: #ifndef YYTOKEN_TABLE
        !           262: # define YYTOKEN_TABLE 0
        !           263: #endif
        !           264: 
        !           265: 
        !           266: /* Tokens.  */
        !           267: #ifndef YYTOKENTYPE
        !           268: # define YYTOKENTYPE
        !           269:    /* Put the tokens into the symbol table, so that GDB and other debuggers
        !           270:       know about them.  */
        !           271:    enum yytokentype {
        !           272:      PRIVSEP = 258,
        !           273:      USER = 259,
        !           274:      GROUP = 260,
        !           275:      CHROOT = 261,
        !           276:      PATH = 262,
        !           277:      PATHTYPE = 263,
        !           278:      INCLUDE = 264,
        !           279:      PFKEY_BUFFER = 265,
        !           280:      LOGGING = 266,
        !           281:      LOGLEV = 267,
        !           282:      PADDING = 268,
        !           283:      PAD_RANDOMIZE = 269,
        !           284:      PAD_RANDOMIZELEN = 270,
        !           285:      PAD_MAXLEN = 271,
        !           286:      PAD_STRICT = 272,
        !           287:      PAD_EXCLTAIL = 273,
        !           288:      LISTEN = 274,
        !           289:      X_ISAKMP = 275,
        !           290:      X_ISAKMP_NATT = 276,
        !           291:      X_ADMIN = 277,
        !           292:      STRICT_ADDRESS = 278,
        !           293:      ADMINSOCK = 279,
        !           294:      DISABLED = 280,
        !           295:      LDAPCFG = 281,
        !           296:      LDAP_HOST = 282,
        !           297:      LDAP_PORT = 283,
        !           298:      LDAP_PVER = 284,
        !           299:      LDAP_BASE = 285,
        !           300:      LDAP_BIND_DN = 286,
        !           301:      LDAP_BIND_PW = 287,
        !           302:      LDAP_SUBTREE = 288,
        !           303:      LDAP_ATTR_USER = 289,
        !           304:      LDAP_ATTR_ADDR = 290,
        !           305:      LDAP_ATTR_MASK = 291,
        !           306:      LDAP_ATTR_GROUP = 292,
        !           307:      LDAP_ATTR_MEMBER = 293,
        !           308:      RADCFG = 294,
        !           309:      RAD_AUTH = 295,
        !           310:      RAD_ACCT = 296,
        !           311:      RAD_TIMEOUT = 297,
        !           312:      RAD_RETRIES = 298,
        !           313:      MODECFG = 299,
        !           314:      CFG_NET4 = 300,
        !           315:      CFG_MASK4 = 301,
        !           316:      CFG_DNS4 = 302,
        !           317:      CFG_NBNS4 = 303,
        !           318:      CFG_DEFAULT_DOMAIN = 304,
        !           319:      CFG_AUTH_SOURCE = 305,
        !           320:      CFG_AUTH_GROUPS = 306,
        !           321:      CFG_SYSTEM = 307,
        !           322:      CFG_RADIUS = 308,
        !           323:      CFG_PAM = 309,
        !           324:      CFG_LDAP = 310,
        !           325:      CFG_LOCAL = 311,
        !           326:      CFG_NONE = 312,
        !           327:      CFG_GROUP_SOURCE = 313,
        !           328:      CFG_ACCOUNTING = 314,
        !           329:      CFG_CONF_SOURCE = 315,
        !           330:      CFG_MOTD = 316,
        !           331:      CFG_POOL_SIZE = 317,
        !           332:      CFG_AUTH_THROTTLE = 318,
        !           333:      CFG_SPLIT_NETWORK = 319,
        !           334:      CFG_SPLIT_LOCAL = 320,
        !           335:      CFG_SPLIT_INCLUDE = 321,
        !           336:      CFG_SPLIT_DNS = 322,
        !           337:      CFG_PFS_GROUP = 323,
        !           338:      CFG_SAVE_PASSWD = 324,
        !           339:      RETRY = 325,
        !           340:      RETRY_COUNTER = 326,
        !           341:      RETRY_INTERVAL = 327,
        !           342:      RETRY_PERSEND = 328,
        !           343:      RETRY_PHASE1 = 329,
        !           344:      RETRY_PHASE2 = 330,
        !           345:      NATT_KA = 331,
        !           346:      ALGORITHM_CLASS = 332,
        !           347:      ALGORITHMTYPE = 333,
        !           348:      STRENGTHTYPE = 334,
        !           349:      SAINFO = 335,
        !           350:      FROM = 336,
        !           351:      REMOTE = 337,
        !           352:      ANONYMOUS = 338,
        !           353:      CLIENTADDR = 339,
        !           354:      INHERIT = 340,
        !           355:      REMOTE_ADDRESS = 341,
        !           356:      EXCHANGE_MODE = 342,
        !           357:      EXCHANGETYPE = 343,
        !           358:      DOI = 344,
        !           359:      DOITYPE = 345,
        !           360:      SITUATION = 346,
        !           361:      SITUATIONTYPE = 347,
        !           362:      CERTIFICATE_TYPE = 348,
        !           363:      CERTTYPE = 349,
        !           364:      PEERS_CERTFILE = 350,
        !           365:      CA_TYPE = 351,
        !           366:      VERIFY_CERT = 352,
        !           367:      SEND_CERT = 353,
        !           368:      SEND_CR = 354,
        !           369:      MATCH_EMPTY_CR = 355,
        !           370:      IDENTIFIERTYPE = 356,
        !           371:      IDENTIFIERQUAL = 357,
        !           372:      MY_IDENTIFIER = 358,
        !           373:      PEERS_IDENTIFIER = 359,
        !           374:      VERIFY_IDENTIFIER = 360,
        !           375:      DNSSEC = 361,
        !           376:      CERT_X509 = 362,
        !           377:      CERT_PLAINRSA = 363,
        !           378:      NONCE_SIZE = 364,
        !           379:      DH_GROUP = 365,
        !           380:      KEEPALIVE = 366,
        !           381:      PASSIVE = 367,
        !           382:      INITIAL_CONTACT = 368,
        !           383:      NAT_TRAVERSAL = 369,
        !           384:      REMOTE_FORCE_LEVEL = 370,
        !           385:      PROPOSAL_CHECK = 371,
        !           386:      PROPOSAL_CHECK_LEVEL = 372,
        !           387:      GENERATE_POLICY = 373,
        !           388:      GENERATE_LEVEL = 374,
        !           389:      SUPPORT_PROXY = 375,
        !           390:      PROPOSAL = 376,
        !           391:      EXEC_PATH = 377,
        !           392:      EXEC_COMMAND = 378,
        !           393:      EXEC_SUCCESS = 379,
        !           394:      EXEC_FAILURE = 380,
        !           395:      GSS_ID = 381,
        !           396:      GSS_ID_ENC = 382,
        !           397:      GSS_ID_ENCTYPE = 383,
        !           398:      COMPLEX_BUNDLE = 384,
        !           399:      DPD = 385,
        !           400:      DPD_DELAY = 386,
        !           401:      DPD_RETRY = 387,
        !           402:      DPD_MAXFAIL = 388,
        !           403:      PH1ID = 389,
        !           404:      XAUTH_LOGIN = 390,
        !           405:      WEAK_PHASE1_CHECK = 391,
        !           406:      REKEY = 392,
        !           407:      PREFIX = 393,
        !           408:      PORT = 394,
        !           409:      PORTANY = 395,
        !           410:      UL_PROTO = 396,
        !           411:      ANY = 397,
        !           412:      IKE_FRAG = 398,
        !           413:      ESP_FRAG = 399,
        !           414:      MODE_CFG = 400,
        !           415:      PFS_GROUP = 401,
        !           416:      LIFETIME = 402,
        !           417:      LIFETYPE_TIME = 403,
        !           418:      LIFETYPE_BYTE = 404,
        !           419:      STRENGTH = 405,
        !           420:      REMOTEID = 406,
        !           421:      SCRIPT = 407,
        !           422:      PHASE1_UP = 408,
        !           423:      PHASE1_DOWN = 409,
        !           424:      PHASE1_DEAD = 410,
        !           425:      NUMBER = 411,
        !           426:      SWITCH = 412,
        !           427:      BOOLEAN = 413,
        !           428:      HEXSTRING = 414,
        !           429:      QUOTEDSTRING = 415,
        !           430:      ADDRSTRING = 416,
        !           431:      ADDRRANGE = 417,
        !           432:      UNITTYPE_BYTE = 418,
        !           433:      UNITTYPE_KBYTES = 419,
        !           434:      UNITTYPE_MBYTES = 420,
        !           435:      UNITTYPE_TBYTES = 421,
        !           436:      UNITTYPE_SEC = 422,
        !           437:      UNITTYPE_MIN = 423,
        !           438:      UNITTYPE_HOUR = 424,
        !           439:      EOS = 425,
        !           440:      BOC = 426,
        !           441:      EOC = 427,
        !           442:      COMMA = 428
        !           443:    };
        !           444: #endif
        !           445: /* Tokens.  */
        !           446: #define PRIVSEP 258
        !           447: #define USER 259
        !           448: #define GROUP 260
        !           449: #define CHROOT 261
        !           450: #define PATH 262
        !           451: #define PATHTYPE 263
        !           452: #define INCLUDE 264
        !           453: #define PFKEY_BUFFER 265
        !           454: #define LOGGING 266
        !           455: #define LOGLEV 267
        !           456: #define PADDING 268
        !           457: #define PAD_RANDOMIZE 269
        !           458: #define PAD_RANDOMIZELEN 270
        !           459: #define PAD_MAXLEN 271
        !           460: #define PAD_STRICT 272
        !           461: #define PAD_EXCLTAIL 273
        !           462: #define LISTEN 274
        !           463: #define X_ISAKMP 275
        !           464: #define X_ISAKMP_NATT 276
        !           465: #define X_ADMIN 277
        !           466: #define STRICT_ADDRESS 278
        !           467: #define ADMINSOCK 279
        !           468: #define DISABLED 280
        !           469: #define LDAPCFG 281
        !           470: #define LDAP_HOST 282
        !           471: #define LDAP_PORT 283
        !           472: #define LDAP_PVER 284
        !           473: #define LDAP_BASE 285
        !           474: #define LDAP_BIND_DN 286
        !           475: #define LDAP_BIND_PW 287
        !           476: #define LDAP_SUBTREE 288
        !           477: #define LDAP_ATTR_USER 289
        !           478: #define LDAP_ATTR_ADDR 290
        !           479: #define LDAP_ATTR_MASK 291
        !           480: #define LDAP_ATTR_GROUP 292
        !           481: #define LDAP_ATTR_MEMBER 293
        !           482: #define RADCFG 294
        !           483: #define RAD_AUTH 295
        !           484: #define RAD_ACCT 296
        !           485: #define RAD_TIMEOUT 297
        !           486: #define RAD_RETRIES 298
        !           487: #define MODECFG 299
        !           488: #define CFG_NET4 300
        !           489: #define CFG_MASK4 301
        !           490: #define CFG_DNS4 302
        !           491: #define CFG_NBNS4 303
        !           492: #define CFG_DEFAULT_DOMAIN 304
        !           493: #define CFG_AUTH_SOURCE 305
        !           494: #define CFG_AUTH_GROUPS 306
        !           495: #define CFG_SYSTEM 307
        !           496: #define CFG_RADIUS 308
        !           497: #define CFG_PAM 309
        !           498: #define CFG_LDAP 310
        !           499: #define CFG_LOCAL 311
        !           500: #define CFG_NONE 312
        !           501: #define CFG_GROUP_SOURCE 313
        !           502: #define CFG_ACCOUNTING 314
        !           503: #define CFG_CONF_SOURCE 315
        !           504: #define CFG_MOTD 316
        !           505: #define CFG_POOL_SIZE 317
        !           506: #define CFG_AUTH_THROTTLE 318
        !           507: #define CFG_SPLIT_NETWORK 319
        !           508: #define CFG_SPLIT_LOCAL 320
        !           509: #define CFG_SPLIT_INCLUDE 321
        !           510: #define CFG_SPLIT_DNS 322
        !           511: #define CFG_PFS_GROUP 323
        !           512: #define CFG_SAVE_PASSWD 324
        !           513: #define RETRY 325
        !           514: #define RETRY_COUNTER 326
        !           515: #define RETRY_INTERVAL 327
        !           516: #define RETRY_PERSEND 328
        !           517: #define RETRY_PHASE1 329
        !           518: #define RETRY_PHASE2 330
        !           519: #define NATT_KA 331
        !           520: #define ALGORITHM_CLASS 332
        !           521: #define ALGORITHMTYPE 333
        !           522: #define STRENGTHTYPE 334
        !           523: #define SAINFO 335
        !           524: #define FROM 336
        !           525: #define REMOTE 337
        !           526: #define ANONYMOUS 338
        !           527: #define CLIENTADDR 339
        !           528: #define INHERIT 340
        !           529: #define REMOTE_ADDRESS 341
        !           530: #define EXCHANGE_MODE 342
        !           531: #define EXCHANGETYPE 343
        !           532: #define DOI 344
        !           533: #define DOITYPE 345
        !           534: #define SITUATION 346
        !           535: #define SITUATIONTYPE 347
        !           536: #define CERTIFICATE_TYPE 348
        !           537: #define CERTTYPE 349
        !           538: #define PEERS_CERTFILE 350
        !           539: #define CA_TYPE 351
        !           540: #define VERIFY_CERT 352
        !           541: #define SEND_CERT 353
        !           542: #define SEND_CR 354
        !           543: #define MATCH_EMPTY_CR 355
        !           544: #define IDENTIFIERTYPE 356
        !           545: #define IDENTIFIERQUAL 357
        !           546: #define MY_IDENTIFIER 358
        !           547: #define PEERS_IDENTIFIER 359
        !           548: #define VERIFY_IDENTIFIER 360
        !           549: #define DNSSEC 361
        !           550: #define CERT_X509 362
        !           551: #define CERT_PLAINRSA 363
        !           552: #define NONCE_SIZE 364
        !           553: #define DH_GROUP 365
        !           554: #define KEEPALIVE 366
        !           555: #define PASSIVE 367
        !           556: #define INITIAL_CONTACT 368
        !           557: #define NAT_TRAVERSAL 369
        !           558: #define REMOTE_FORCE_LEVEL 370
        !           559: #define PROPOSAL_CHECK 371
        !           560: #define PROPOSAL_CHECK_LEVEL 372
        !           561: #define GENERATE_POLICY 373
        !           562: #define GENERATE_LEVEL 374
        !           563: #define SUPPORT_PROXY 375
        !           564: #define PROPOSAL 376
        !           565: #define EXEC_PATH 377
        !           566: #define EXEC_COMMAND 378
        !           567: #define EXEC_SUCCESS 379
        !           568: #define EXEC_FAILURE 380
        !           569: #define GSS_ID 381
        !           570: #define GSS_ID_ENC 382
        !           571: #define GSS_ID_ENCTYPE 383
        !           572: #define COMPLEX_BUNDLE 384
        !           573: #define DPD 385
        !           574: #define DPD_DELAY 386
        !           575: #define DPD_RETRY 387
        !           576: #define DPD_MAXFAIL 388
        !           577: #define PH1ID 389
        !           578: #define XAUTH_LOGIN 390
        !           579: #define WEAK_PHASE1_CHECK 391
        !           580: #define REKEY 392
        !           581: #define PREFIX 393
        !           582: #define PORT 394
        !           583: #define PORTANY 395
        !           584: #define UL_PROTO 396
        !           585: #define ANY 397
        !           586: #define IKE_FRAG 398
        !           587: #define ESP_FRAG 399
        !           588: #define MODE_CFG 400
        !           589: #define PFS_GROUP 401
        !           590: #define LIFETIME 402
        !           591: #define LIFETYPE_TIME 403
        !           592: #define LIFETYPE_BYTE 404
        !           593: #define STRENGTH 405
        !           594: #define REMOTEID 406
        !           595: #define SCRIPT 407
        !           596: #define PHASE1_UP 408
        !           597: #define PHASE1_DOWN 409
        !           598: #define PHASE1_DEAD 410
        !           599: #define NUMBER 411
        !           600: #define SWITCH 412
        !           601: #define BOOLEAN 413
        !           602: #define HEXSTRING 414
        !           603: #define QUOTEDSTRING 415
        !           604: #define ADDRSTRING 416
        !           605: #define ADDRRANGE 417
        !           606: #define UNITTYPE_BYTE 418
        !           607: #define UNITTYPE_KBYTES 419
        !           608: #define UNITTYPE_MBYTES 420
        !           609: #define UNITTYPE_TBYTES 421
        !           610: #define UNITTYPE_SEC 422
        !           611: #define UNITTYPE_MIN 423
        !           612: #define UNITTYPE_HOUR 424
        !           613: #define EOS 425
        !           614: #define BOC 426
        !           615: #define EOC 427
        !           616: #define COMMA 428
        !           617: 
        !           618: 
        !           619: 
        !           620: 
        !           621: #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
        !           622: typedef union YYSTYPE
        !           623: {
        !           624: 
        !           625: /* Line 214 of yacc.c  */
        !           626: #line 177 "cfparse.y"
        !           627: 
        !           628:        unsigned long num;
        !           629:        vchar_t *val;
        !           630:        struct remoteconf *rmconf;
        !           631:        struct sockaddr *saddr;
        !           632:        struct sainfoalg *alg;
        !           633: 
        !           634: 
        !           635: 
        !           636: /* Line 214 of yacc.c  */
        !           637: #line 638 "cfparse.c"
        !           638: } YYSTYPE;
        !           639: # define YYSTYPE_IS_TRIVIAL 1
        !           640: # define yystype YYSTYPE /* obsolescent; will be withdrawn */
        !           641: # define YYSTYPE_IS_DECLARED 1
        !           642: #endif
        !           643: 
        !           644: 
        !           645: /* Copy the second part of user declarations.  */
        !           646: 
        !           647: 
        !           648: /* Line 264 of yacc.c  */
        !           649: #line 650 "cfparse.c"
        !           650: 
        !           651: #ifdef short
        !           652: # undef short
        !           653: #endif
        !           654: 
        !           655: #ifdef YYTYPE_UINT8
        !           656: typedef YYTYPE_UINT8 yytype_uint8;
        !           657: #else
        !           658: typedef unsigned char yytype_uint8;
        !           659: #endif
        !           660: 
        !           661: #ifdef YYTYPE_INT8
        !           662: typedef YYTYPE_INT8 yytype_int8;
        !           663: #elif (defined __STDC__ || defined __C99__FUNC__ \
        !           664:      || defined __cplusplus || defined _MSC_VER)
        !           665: typedef signed char yytype_int8;
        !           666: #else
        !           667: typedef short int yytype_int8;
        !           668: #endif
        !           669: 
        !           670: #ifdef YYTYPE_UINT16
        !           671: typedef YYTYPE_UINT16 yytype_uint16;
        !           672: #else
        !           673: typedef unsigned short int yytype_uint16;
        !           674: #endif
        !           675: 
        !           676: #ifdef YYTYPE_INT16
        !           677: typedef YYTYPE_INT16 yytype_int16;
        !           678: #else
        !           679: typedef short int yytype_int16;
        !           680: #endif
        !           681: 
        !           682: #ifndef YYSIZE_T
        !           683: # ifdef __SIZE_TYPE__
        !           684: #  define YYSIZE_T __SIZE_TYPE__
        !           685: # elif defined size_t
        !           686: #  define YYSIZE_T size_t
        !           687: # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
        !           688:      || defined __cplusplus || defined _MSC_VER)
        !           689: #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
        !           690: #  define YYSIZE_T size_t
        !           691: # else
        !           692: #  define YYSIZE_T unsigned int
        !           693: # endif
        !           694: #endif
        !           695: 
        !           696: #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
        !           697: 
        !           698: #ifndef YY_
        !           699: # if YYENABLE_NLS
        !           700: #  if ENABLE_NLS
        !           701: #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
        !           702: #   define YY_(msgid) dgettext ("bison-runtime", msgid)
        !           703: #  endif
        !           704: # endif
        !           705: # ifndef YY_
        !           706: #  define YY_(msgid) msgid
        !           707: # endif
        !           708: #endif
        !           709: 
        !           710: /* Suppress unused-variable warnings by "using" E.  */
        !           711: #if ! defined lint || defined __GNUC__
        !           712: # define YYUSE(e) ((void) (e))
        !           713: #else
        !           714: # define YYUSE(e) /* empty */
        !           715: #endif
        !           716: 
        !           717: /* Identity function, used to suppress warnings about constant conditions.  */
        !           718: #ifndef lint
        !           719: # define YYID(n) (n)
        !           720: #else
        !           721: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           722:      || defined __cplusplus || defined _MSC_VER)
        !           723: static int
        !           724: YYID (int yyi)
        !           725: #else
        !           726: static int
        !           727: YYID (yyi)
        !           728:     int yyi;
        !           729: #endif
        !           730: {
        !           731:   return yyi;
        !           732: }
        !           733: #endif
        !           734: 
        !           735: #if ! defined yyoverflow || YYERROR_VERBOSE
        !           736: 
        !           737: /* The parser invokes alloca or malloc; define the necessary symbols.  */
        !           738: 
        !           739: # ifdef YYSTACK_USE_ALLOCA
        !           740: #  if YYSTACK_USE_ALLOCA
        !           741: #   ifdef __GNUC__
        !           742: #    define YYSTACK_ALLOC __builtin_alloca
        !           743: #   elif defined __BUILTIN_VA_ARG_INCR
        !           744: #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
        !           745: #   elif defined _AIX
        !           746: #    define YYSTACK_ALLOC __alloca
        !           747: #   elif defined _MSC_VER
        !           748: #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
        !           749: #    define alloca _alloca
        !           750: #   else
        !           751: #    define YYSTACK_ALLOC alloca
        !           752: #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           753:      || defined __cplusplus || defined _MSC_VER)
        !           754: #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
        !           755: #     ifndef _STDLIB_H
        !           756: #      define _STDLIB_H 1
        !           757: #     endif
        !           758: #    endif
        !           759: #   endif
        !           760: #  endif
        !           761: # endif
        !           762: 
        !           763: # ifdef YYSTACK_ALLOC
        !           764:    /* Pacify GCC's `empty if-body' warning.  */
        !           765: #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
        !           766: #  ifndef YYSTACK_ALLOC_MAXIMUM
        !           767:     /* The OS might guarantee only one guard page at the bottom of the stack,
        !           768:        and a page size can be as small as 4096 bytes.  So we cannot safely
        !           769:        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
        !           770:        to allow for a few compiler-allocated temporary stack slots.  */
        !           771: #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
        !           772: #  endif
        !           773: # else
        !           774: #  define YYSTACK_ALLOC YYMALLOC
        !           775: #  define YYSTACK_FREE YYFREE
        !           776: #  ifndef YYSTACK_ALLOC_MAXIMUM
        !           777: #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
        !           778: #  endif
        !           779: #  if (defined __cplusplus && ! defined _STDLIB_H \
        !           780:        && ! ((defined YYMALLOC || defined malloc) \
        !           781:             && (defined YYFREE || defined free)))
        !           782: #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
        !           783: #   ifndef _STDLIB_H
        !           784: #    define _STDLIB_H 1
        !           785: #   endif
        !           786: #  endif
        !           787: #  ifndef YYMALLOC
        !           788: #   define YYMALLOC malloc
        !           789: #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           790:      || defined __cplusplus || defined _MSC_VER)
        !           791: void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
        !           792: #   endif
        !           793: #  endif
        !           794: #  ifndef YYFREE
        !           795: #   define YYFREE free
        !           796: #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           797:      || defined __cplusplus || defined _MSC_VER)
        !           798: void free (void *); /* INFRINGES ON USER NAME SPACE */
        !           799: #   endif
        !           800: #  endif
        !           801: # endif
        !           802: #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
        !           803: 
        !           804: 
        !           805: #if (! defined yyoverflow \
        !           806:      && (! defined __cplusplus \
        !           807:         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
        !           808: 
        !           809: /* A type that is properly aligned for any stack member.  */
        !           810: union yyalloc
        !           811: {
        !           812:   yytype_int16 yyss_alloc;
        !           813:   YYSTYPE yyvs_alloc;
        !           814: };
        !           815: 
        !           816: /* The size of the maximum gap between one aligned stack and the next.  */
        !           817: # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
        !           818: 
        !           819: /* The size of an array large to enough to hold all stacks, each with
        !           820:    N elements.  */
        !           821: # define YYSTACK_BYTES(N) \
        !           822:      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
        !           823:       + YYSTACK_GAP_MAXIMUM)
        !           824: 
        !           825: /* Copy COUNT objects from FROM to TO.  The source and destination do
        !           826:    not overlap.  */
        !           827: # ifndef YYCOPY
        !           828: #  if defined __GNUC__ && 1 < __GNUC__
        !           829: #   define YYCOPY(To, From, Count) \
        !           830:       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
        !           831: #  else
        !           832: #   define YYCOPY(To, From, Count)             \
        !           833:       do                                       \
        !           834:        {                                       \
        !           835:          YYSIZE_T yyi;                         \
        !           836:          for (yyi = 0; yyi < (Count); yyi++)   \
        !           837:            (To)[yyi] = (From)[yyi];            \
        !           838:        }                                       \
        !           839:       while (YYID (0))
        !           840: #  endif
        !           841: # endif
        !           842: 
        !           843: /* Relocate STACK from its old location to the new one.  The
        !           844:    local variables YYSIZE and YYSTACKSIZE give the old and new number of
        !           845:    elements in the stack, and YYPTR gives the new location of the
        !           846:    stack.  Advance YYPTR to a properly aligned location for the next
        !           847:    stack.  */
        !           848: # define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
        !           849:     do                                                                 \
        !           850:       {                                                                        \
        !           851:        YYSIZE_T yynewbytes;                                            \
        !           852:        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
        !           853:        Stack = &yyptr->Stack_alloc;                                    \
        !           854:        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        !           855:        yyptr += yynewbytes / sizeof (*yyptr);                          \
        !           856:       }                                                                        \
        !           857:     while (YYID (0))
        !           858: 
        !           859: #endif
        !           860: 
        !           861: /* YYFINAL -- State number of the termination state.  */
        !           862: #define YYFINAL  2
        !           863: /* YYLAST -- Last index in YYTABLE.  */
        !           864: #define YYLAST   548
        !           865: 
        !           866: /* YYNTOKENS -- Number of terminals.  */
        !           867: #define YYNTOKENS  174
        !           868: /* YYNNTS -- Number of nonterminals.  */
        !           869: #define YYNNTS  203
        !           870: /* YYNRULES -- Number of rules.  */
        !           871: #define YYNRULES  379
        !           872: /* YYNRULES -- Number of states.  */
        !           873: #define YYNSTATES  689
        !           874: 
        !           875: /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
        !           876: #define YYUNDEFTOK  2
        !           877: #define YYMAXUTOK   428
        !           878: 
        !           879: #define YYTRANSLATE(YYX)                                               \
        !           880:   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
        !           881: 
        !           882: /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
        !           883: static const yytype_uint8 yytranslate[] =
        !           884: {
        !           885:        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           886:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           887:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           888:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           889:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           890:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           891:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           892:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           893:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           894:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           895:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           896:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           897:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           898:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           899:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           900:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           901:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           902:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           903:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           904:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           905:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           906:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           907:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           908:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           909:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           910:        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        !           911:        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
        !           912:       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
        !           913:       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
        !           914:       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
        !           915:       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
        !           916:       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
        !           917:       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
        !           918:       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
        !           919:       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
        !           920:       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
        !           921:      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
        !           922:      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
        !           923:      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
        !           924:      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
        !           925:      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
        !           926:      155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
        !           927:      165,   166,   167,   168,   169,   170,   171,   172,   173
        !           928: };
        !           929: 
        !           930: #if YYDEBUG
        !           931: /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
        !           932:    YYRHS.  */
        !           933: static const yytype_uint16 yyprhs[] =
        !           934: {
        !           935:        0,     0,     3,     4,     7,     9,    11,    13,    15,    17,
        !           936:       19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
        !           937:       42,    43,    46,    47,    52,    53,    58,    59,    64,    65,
        !           938:       70,    71,    76,    77,    83,    84,    89,    93,    97,   101,
        !           939:      105,   107,   112,   113,   116,   117,   122,   123,   128,   129,
        !           940:      134,   135,   140,   141,   146,   151,   152,   155,   156,   161,
        !           941:      162,   167,   168,   176,   177,   182,   183,   188,   189,   193,
        !           942:      196,   197,   199,   200,   206,   207,   210,   211,   217,   218,
        !           943:      225,   226,   232,   233,   240,   241,   246,   247,   252,   253,
        !           944:      259,   260,   263,   264,   269,   270,   275,   276,   281,   282,
        !           945:      287,   288,   293,   294,   299,   300,   305,   306,   311,   312,
        !           946:      317,   318,   323,   324,   329,   330,   335,   340,   341,   344,
        !           947:      345,   350,   351,   356,   360,   364,   365,   371,   372,   378,
        !           948:      379,   384,   385,   390,   391,   396,   397,   402,   403,   408,
        !           949:      409,   414,   415,   420,   421,   426,   427,   432,   433,   438,
        !           950:      439,   444,   445,   450,   451,   456,   457,   462,   463,   468,
        !           951:      469,   474,   475,   480,   481,   486,   487,   492,   493,   498,
        !           952:      499,   504,   506,   510,   512,   514,   518,   520,   522,   526,
        !           953:      529,   531,   535,   537,   539,   543,   545,   550,   551,   554,
        !           954:      555,   560,   561,   567,   568,   573,   574,   580,   581,   587,
        !           955:      588,   594,   595,   596,   605,   607,   610,   613,   616,   619,
        !           956:      622,   628,   635,   638,   639,   643,   646,   647,   650,   651,
        !           957:      656,   657,   662,   663,   670,   671,   678,   679,   684,   686,
        !           958:      687,   692,   695,   696,   698,   699,   701,   703,   705,   707,
        !           959:      709,   710,   712,   713,   720,   721,   726,   727,   734,   735,
        !           960:      740,   744,   747,   749,   750,   753,   754,   759,   760,   765,
        !           961:      766,   771,   772,   777,   780,   781,   786,   787,   793,   794,
        !           962:      800,   801,   806,   807,   813,   814,   819,   820,   825,   826,
        !           963:      831,   832,   837,   838,   844,   845,   852,   853,   858,   859,
        !           964:      865,   866,   873,   874,   879,   880,   885,   886,   891,   892,
        !           965:      897,   898,   903,   904,   909,   910,   915,   916,   922,   923,
        !           966:      929,   930,   936,   937,   942,   943,   948,   949,   954,   955,
        !           967:      960,   961,   966,   967,   972,   973,   978,   979,   984,   985,
        !           968:      990,   991,   996,   997,  1002,  1003,  1008,  1009,  1014,  1015,
        !           969:     1020,  1021,  1026,  1027,  1034,  1035,  1040,  1041,  1048,  1049,
        !           970:     1055,  1056,  1059,  1060,  1066,  1067,  1072,  1074,  1076,  1077,
        !           971:     1079,  1081,  1082,  1085,  1086,  1093,  1094,  1101,  1102,  1107,
        !           972:     1108,  1113,  1114,  1120,  1122,  1124,  1126,  1128,  1130,  1132
        !           973: };
        !           974: 
        !           975: /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
        !           976: static const yytype_int16 yyrhs[] =
        !           977: {
        !           978:      175,     0,    -1,    -1,   175,   176,    -1,   177,    -1,   185,
        !           979:       -1,   189,    -1,   190,    -1,   191,    -1,   192,    -1,   194,
        !           980:       -1,   202,    -1,   223,    -1,   213,    -1,   239,    -1,   277,
        !           981:       -1,   286,    -1,   306,    -1,   187,    -1,     3,   171,   178,
        !           982:      172,    -1,    -1,   178,   179,    -1,    -1,     4,   160,   180,
        !           983:      170,    -1,    -1,     4,   156,   181,   170,    -1,    -1,     5,
        !           984:      160,   182,   170,    -1,    -1,     5,   156,   183,   170,    -1,
        !           985:       -1,     6,   160,   184,   170,    -1,    -1,     7,     8,   160,
        !           986:      186,   170,    -1,    -1,   129,   157,   188,   170,    -1,     9,
        !           987:      160,   170,    -1,    10,   156,   170,    -1,   127,   128,   170,
        !           988:       -1,    11,   193,   170,    -1,    12,    -1,    13,   171,   195,
        !           989:      172,    -1,    -1,   195,   196,    -1,    -1,    14,   157,   197,
        !           990:      170,    -1,    -1,    15,   157,   198,   170,    -1,    -1,    16,
        !           991:      156,   199,   170,    -1,    -1,    17,   157,   200,   170,    -1,
        !           992:       -1,    18,   157,   201,   170,    -1,    19,   171,   203,   172,
        !           993:       -1,    -1,   203,   204,    -1,    -1,    20,   211,   205,   170,
        !           994:       -1,    -1,    21,   211,   206,   170,    -1,    -1,    24,   160,
        !           995:      160,   160,   156,   207,   170,    -1,    -1,    24,   160,   208,
        !           996:      170,    -1,    -1,    24,    25,   209,   170,    -1,    -1,    23,
        !           997:      210,   170,    -1,   161,   212,    -1,    -1,   139,    -1,    -1,
        !           998:       39,   214,   171,   215,   172,    -1,    -1,   215,   216,    -1,
        !           999:       -1,    40,   160,   160,   217,   170,    -1,    -1,    40,   160,
        !          1000:      156,   160,   218,   170,    -1,    -1,    41,   160,   160,   219,
        !          1001:      170,    -1,    -1,    41,   160,   156,   160,   220,   170,    -1,
        !          1002:       -1,    42,   156,   221,   170,    -1,    -1,    43,   156,   222,
        !          1003:      170,    -1,    -1,    26,   224,   171,   225,   172,    -1,    -1,
        !          1004:      225,   226,    -1,    -1,    29,   156,   227,   170,    -1,    -1,
        !          1005:       27,   160,   228,   170,    -1,    -1,    28,   156,   229,   170,
        !          1006:       -1,    -1,    30,   160,   230,   170,    -1,    -1,    33,   157,
        !          1007:      231,   170,    -1,    -1,    31,   160,   232,   170,    -1,    -1,
        !          1008:       32,   160,   233,   170,    -1,    -1,    34,   160,   234,   170,
        !          1009:       -1,    -1,    35,   160,   235,   170,    -1,    -1,    36,   160,
        !          1010:      236,   170,    -1,    -1,    37,   160,   237,   170,    -1,    -1,
        !          1011:       38,   160,   238,   170,    -1,    44,   171,   240,   172,    -1,
        !          1012:       -1,   240,   241,    -1,    -1,    45,   161,   242,   170,    -1,
        !          1013:       -1,    46,   161,   243,   170,    -1,    47,   267,   170,    -1,
        !          1014:       48,   269,   170,    -1,    -1,    64,    65,   271,   244,   170,
        !          1015:       -1,    -1,    64,    66,   271,   245,   170,    -1,    -1,    67,
        !          1016:      275,   246,   170,    -1,    -1,    49,   160,   247,   170,    -1,
        !          1017:       -1,    50,    52,   248,   170,    -1,    -1,    50,    53,   249,
        !          1018:      170,    -1,    -1,    50,    54,   250,   170,    -1,    -1,    50,
        !          1019:       55,   251,   170,    -1,    -1,    51,   273,   252,   170,    -1,
        !          1020:       -1,    58,    52,   253,   170,    -1,    -1,    58,    55,   254,
        !          1021:      170,    -1,    -1,    59,    57,   255,   170,    -1,    -1,    59,
        !          1022:       52,   256,   170,    -1,    -1,    59,    53,   257,   170,    -1,
        !          1023:       -1,    59,    54,   258,   170,    -1,    -1,    62,   156,   259,
        !          1024:      170,    -1,    -1,    68,   156,   260,   170,    -1,    -1,    69,
        !          1025:      157,   261,   170,    -1,    -1,    63,   156,   262,   170,    -1,
        !          1026:       -1,    60,    56,   263,   170,    -1,    -1,    60,    53,   264,
        !          1027:      170,    -1,    -1,    60,    55,   265,   170,    -1,    -1,    61,
        !          1028:      160,   266,   170,    -1,   268,    -1,   268,   173,   267,    -1,
        !          1029:      161,    -1,   270,    -1,   270,   173,   269,    -1,   161,    -1,
        !          1030:      272,    -1,   271,   173,   272,    -1,   161,   138,    -1,   274,
        !          1031:       -1,   274,   173,   273,    -1,   160,    -1,   276,    -1,   276,
        !          1032:      173,   275,    -1,   160,    -1,    70,   171,   278,   172,    -1,
        !          1033:       -1,   278,   279,    -1,    -1,    71,   156,   280,   170,    -1,
        !          1034:       -1,    72,   156,   375,   281,   170,    -1,    -1,    73,   156,
        !          1035:      282,   170,    -1,    -1,    74,   156,   375,   283,   170,    -1,
        !          1036:       -1,    75,   156,   375,   284,   170,    -1,    -1,    76,   156,
        !          1037:      375,   285,   170,    -1,    -1,    -1,    80,   287,   289,   291,
        !          1038:      171,   292,   288,   172,    -1,    83,    -1,    83,    84,    -1,
        !          1039:       83,   290,    -1,   290,    83,    -1,   290,    84,    -1,   290,
        !          1040:      290,    -1,   101,   161,   302,   303,   304,    -1,   101,   161,
        !          1041:      162,   302,   303,   304,    -1,   101,   160,    -1,    -1,    81,
        !          1042:      101,   367,    -1,     5,   160,    -1,    -1,   292,   293,    -1,
        !          1043:       -1,   146,   366,   294,   170,    -1,    -1,   151,   156,   295,
        !          1044:      170,    -1,    -1,   147,   148,   156,   375,   296,   170,    -1,
        !          1045:       -1,   147,   149,   156,   376,   297,   170,    -1,    -1,    77,
        !          1046:      298,   299,   170,    -1,   301,    -1,    -1,   301,   300,   173,
        !          1047:      299,    -1,    78,   305,    -1,    -1,   138,    -1,    -1,   139,
        !          1048:       -1,   140,    -1,   156,    -1,   141,    -1,   142,    -1,    -1,
        !          1049:      156,    -1,    -1,    82,   160,    85,   160,   307,   311,    -1,
        !          1050:       -1,    82,   160,   308,   311,    -1,    -1,    82,   312,    85,
        !          1051:      312,   309,   311,    -1,    -1,    82,   312,   310,   311,    -1,
        !          1052:      171,   313,   172,    -1,    83,   212,    -1,   211,    -1,    -1,
        !          1053:      313,   314,    -1,    -1,    86,   211,   315,   170,    -1,    -1,
        !          1054:       87,   316,   362,   170,    -1,    -1,    89,    90,   317,   170,
        !          1055:       -1,    -1,    91,    92,   318,   170,    -1,    93,   363,    -1,
        !          1056:       -1,    95,   160,   319,   170,    -1,    -1,    95,   107,   160,
        !          1057:      320,   170,    -1,    -1,    95,   108,   160,   321,   170,    -1,
        !          1058:       -1,    95,   106,   322,   170,    -1,    -1,    96,   107,   160,
        !          1059:      323,   170,    -1,    -1,    97,   157,   324,   170,    -1,    -1,
        !          1060:       98,   157,   325,   170,    -1,    -1,    99,   157,   326,   170,
        !          1061:       -1,    -1,   100,   157,   327,   170,    -1,    -1,   103,   101,
        !          1062:      367,   328,   170,    -1,    -1,   103,   101,   102,   367,   329,
        !          1063:      170,    -1,    -1,   135,   367,   330,   170,    -1,    -1,   104,
        !          1064:      101,   367,   331,   170,    -1,    -1,   104,   101,   102,   367,
        !          1065:      332,   170,    -1,    -1,   105,   157,   333,   170,    -1,    -1,
        !          1066:      109,   156,   334,   170,    -1,    -1,   110,   335,   366,   170,
        !          1067:       -1,    -1,   112,   157,   336,   170,    -1,    -1,   143,   157,
        !          1068:      337,   170,    -1,    -1,   143,   115,   338,   170,    -1,    -1,
        !          1069:      144,   156,   339,   170,    -1,    -1,   152,   160,   153,   340,
        !          1070:      170,    -1,    -1,   152,   160,   154,   341,   170,    -1,    -1,
        !          1071:      152,   160,   155,   342,   170,    -1,    -1,   145,   157,   343,
        !          1072:      170,    -1,    -1,   136,   157,   344,   170,    -1,    -1,   118,
        !          1073:      157,   345,   170,    -1,    -1,   118,   119,   346,   170,    -1,
        !          1074:       -1,   120,   157,   347,   170,    -1,    -1,   113,   157,   348,
        !          1075:      170,    -1,    -1,   114,   157,   349,   170,    -1,    -1,   114,
        !          1076:      115,   350,   170,    -1,    -1,   130,   157,   351,   170,    -1,
        !          1077:       -1,   131,   156,   352,   170,    -1,    -1,   132,   156,   353,
        !          1078:      170,    -1,    -1,   133,   156,   354,   170,    -1,    -1,   137,
        !          1079:      157,   355,   170,    -1,    -1,   137,   115,   356,   170,    -1,
        !          1080:       -1,   134,   156,   357,   170,    -1,    -1,   147,   148,   156,
        !          1081:      375,   358,   170,    -1,    -1,   116,   117,   359,   170,    -1,
        !          1082:       -1,   147,   149,   156,   376,   360,   170,    -1,    -1,   121,
        !          1083:      361,   171,   368,   172,    -1,    -1,   362,    88,    -1,    -1,
        !          1084:      107,   160,   160,   364,   170,    -1,    -1,   108,   160,   365,
        !          1085:      170,    -1,    78,    -1,   156,    -1,    -1,   161,    -1,   160,
        !          1086:       -1,    -1,   368,   369,    -1,    -1,   147,   148,   156,   375,
        !          1087:      370,   170,    -1,    -1,   147,   149,   156,   376,   371,   170,
        !          1088:       -1,    -1,   110,   366,   372,   170,    -1,    -1,   126,   160,
        !          1089:      373,   170,    -1,    -1,    77,    78,   305,   374,   170,    -1,
        !          1090:      167,    -1,   168,    -1,   169,    -1,   163,    -1,   164,    -1,
        !          1091:      165,    -1,   166,    -1
        !          1092: };
        !          1093: 
        !          1094: /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
        !          1095: static const yytype_uint16 yyrline[] =
        !          1096: {
        !          1097:        0,   266,   266,   268,   271,   272,   273,   274,   275,   276,
        !          1098:      277,   278,   279,   280,   281,   282,   283,   284,   285,   290,
        !          1099:      292,   294,   298,   297,   308,   308,   310,   309,   320,   320,
        !          1100:      321,   321,   327,   326,   347,   347,   352,   366,   373,   385,
        !          1101:      388,   402,   404,   406,   409,   409,   410,   410,   411,   411,
        !          1102:      412,   412,   413,   413,   418,   420,   422,   426,   425,   432,
        !          1103:      431,   443,   442,   452,   451,   461,   460,   469,   469,   472,
        !          1104:      484,   485,   490,   490,   507,   509,   513,   512,   531,   530,
        !          1105:      549,   548,   567,   566,   585,   584,   594,   593,   606,   606,
        !          1106:      617,   619,   623,   622,   634,   633,   645,   644,   654,   653,
        !          1107:      665,   664,   674,   673,   685,   684,   696,   695,   707,   706,
        !          1108:      718,   717,   729,   728,   740,   739,   754,   756,   758,   762,
        !          1109:      761,   773,   772,   783,   785,   788,   787,   797,   796,   806,
        !          1110:      805,   813,   812,   825,   824,   834,   833,   847,   846,   860,
        !          1111:      859,   873,   872,   880,   879,   889,   888,   902,   901,   911,
        !          1112:      910,   920,   919,   933,   932,   946,   945,   956,   955,   965,
        !          1113:      964,   974,   973,   983,   982,   992,   991,  1005,  1004,  1018,
        !          1114:     1017,  1031,  1032,  1035,  1052,  1053,  1056,  1073,  1074,  1077,
        !          1115:     1100,  1101,  1104,  1138,  1139,  1142,  1179,  1181,  1183,  1187,
        !          1116:     1186,  1192,  1191,  1197,  1196,  1202,  1201,  1207,  1206,  1212,
        !          1117:     1211,  1228,  1236,  1227,  1275,  1280,  1285,  1290,  1295,  1300,
        !          1118:     1307,  1356,  1421,  1450,  1453,  1478,  1491,  1493,  1497,  1496,
        !          1119:     1502,  1501,  1507,  1506,  1512,  1511,  1523,  1523,  1530,  1535,
        !          1120:     1534,  1541,  1597,  1598,  1601,  1602,  1603,  1606,  1607,  1608,
        !          1121:     1611,  1612,  1618,  1617,  1648,  1647,  1668,  1667,  1691,  1690,
        !          1122:     1707,  1784,  1790,  1799,  1801,  1805,  1804,  1814,  1813,  1818,
        !          1123:     1818,  1819,  1819,  1820,  1822,  1821,  1842,  1841,  1859,  1858,
        !          1124:     1889,  1888,  1903,  1902,  1919,  1919,  1920,  1920,  1921,  1921,
        !          1125:     1922,  1922,  1924,  1923,  1933,  1932,  1942,  1941,  1959,  1958,
        !          1126:     1976,  1975,  1992,  1992,  1993,  1993,  1995,  1994,  2000,  2000,
        !          1127:     2001,  2001,  2002,  2002,  2003,  2003,  2013,  2013,  2020,  2020,
        !          1128:     2027,  2027,  2034,  2034,  2035,  2035,  2038,  2038,  2039,  2039,
        !          1129:     2040,  2040,  2041,  2041,  2043,  2042,  2054,  2053,  2065,  2064,
        !          1130:     2073,  2072,  2082,  2081,  2091,  2090,  2099,  2099,  2100,  2100,
        !          1131:     2102,  2101,  2107,  2106,  2111,  2111,  2113,  2112,  2127,  2126,
        !          1132:     2137,  2139,  2163,  2162,  2184,  2183,  2217,  2225,  2237,  2238,
        !          1133:     2239,  2241,  2243,  2247,  2246,  2252,  2251,  2264,  2263,  2269,
        !          1134:     2268,  2282,  2281,  2379,  2380,  2381,  2384,  2385,  2386,  2387
        !          1135: };
        !          1136: #endif
        !          1137: 
        !          1138: #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
        !          1139: /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
        !          1140:    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
        !          1141: static const char *const yytname[] =
        !          1142: {
        !          1143:   "$end", "error", "$undefined", "PRIVSEP", "USER", "GROUP", "CHROOT",
        !          1144:   "PATH", "PATHTYPE", "INCLUDE", "PFKEY_BUFFER", "LOGGING", "LOGLEV",
        !          1145:   "PADDING", "PAD_RANDOMIZE", "PAD_RANDOMIZELEN", "PAD_MAXLEN",
        !          1146:   "PAD_STRICT", "PAD_EXCLTAIL", "LISTEN", "X_ISAKMP", "X_ISAKMP_NATT",
        !          1147:   "X_ADMIN", "STRICT_ADDRESS", "ADMINSOCK", "DISABLED", "LDAPCFG",
        !          1148:   "LDAP_HOST", "LDAP_PORT", "LDAP_PVER", "LDAP_BASE", "LDAP_BIND_DN",
        !          1149:   "LDAP_BIND_PW", "LDAP_SUBTREE", "LDAP_ATTR_USER", "LDAP_ATTR_ADDR",
        !          1150:   "LDAP_ATTR_MASK", "LDAP_ATTR_GROUP", "LDAP_ATTR_MEMBER", "RADCFG",
        !          1151:   "RAD_AUTH", "RAD_ACCT", "RAD_TIMEOUT", "RAD_RETRIES", "MODECFG",
        !          1152:   "CFG_NET4", "CFG_MASK4", "CFG_DNS4", "CFG_NBNS4", "CFG_DEFAULT_DOMAIN",
        !          1153:   "CFG_AUTH_SOURCE", "CFG_AUTH_GROUPS", "CFG_SYSTEM", "CFG_RADIUS",
        !          1154:   "CFG_PAM", "CFG_LDAP", "CFG_LOCAL", "CFG_NONE", "CFG_GROUP_SOURCE",
        !          1155:   "CFG_ACCOUNTING", "CFG_CONF_SOURCE", "CFG_MOTD", "CFG_POOL_SIZE",
        !          1156:   "CFG_AUTH_THROTTLE", "CFG_SPLIT_NETWORK", "CFG_SPLIT_LOCAL",
        !          1157:   "CFG_SPLIT_INCLUDE", "CFG_SPLIT_DNS", "CFG_PFS_GROUP", "CFG_SAVE_PASSWD",
        !          1158:   "RETRY", "RETRY_COUNTER", "RETRY_INTERVAL", "RETRY_PERSEND",
        !          1159:   "RETRY_PHASE1", "RETRY_PHASE2", "NATT_KA", "ALGORITHM_CLASS",
        !          1160:   "ALGORITHMTYPE", "STRENGTHTYPE", "SAINFO", "FROM", "REMOTE", "ANONYMOUS",
        !          1161:   "CLIENTADDR", "INHERIT", "REMOTE_ADDRESS", "EXCHANGE_MODE",
        !          1162:   "EXCHANGETYPE", "DOI", "DOITYPE", "SITUATION", "SITUATIONTYPE",
        !          1163:   "CERTIFICATE_TYPE", "CERTTYPE", "PEERS_CERTFILE", "CA_TYPE",
        !          1164:   "VERIFY_CERT", "SEND_CERT", "SEND_CR", "MATCH_EMPTY_CR",
        !          1165:   "IDENTIFIERTYPE", "IDENTIFIERQUAL", "MY_IDENTIFIER", "PEERS_IDENTIFIER",
        !          1166:   "VERIFY_IDENTIFIER", "DNSSEC", "CERT_X509", "CERT_PLAINRSA",
        !          1167:   "NONCE_SIZE", "DH_GROUP", "KEEPALIVE", "PASSIVE", "INITIAL_CONTACT",
        !          1168:   "NAT_TRAVERSAL", "REMOTE_FORCE_LEVEL", "PROPOSAL_CHECK",
        !          1169:   "PROPOSAL_CHECK_LEVEL", "GENERATE_POLICY", "GENERATE_LEVEL",
        !          1170:   "SUPPORT_PROXY", "PROPOSAL", "EXEC_PATH", "EXEC_COMMAND", "EXEC_SUCCESS",
        !          1171:   "EXEC_FAILURE", "GSS_ID", "GSS_ID_ENC", "GSS_ID_ENCTYPE",
        !          1172:   "COMPLEX_BUNDLE", "DPD", "DPD_DELAY", "DPD_RETRY", "DPD_MAXFAIL",
        !          1173:   "PH1ID", "XAUTH_LOGIN", "WEAK_PHASE1_CHECK", "REKEY", "PREFIX", "PORT",
        !          1174:   "PORTANY", "UL_PROTO", "ANY", "IKE_FRAG", "ESP_FRAG", "MODE_CFG",
        !          1175:   "PFS_GROUP", "LIFETIME", "LIFETYPE_TIME", "LIFETYPE_BYTE", "STRENGTH",
        !          1176:   "REMOTEID", "SCRIPT", "PHASE1_UP", "PHASE1_DOWN", "PHASE1_DEAD",
        !          1177:   "NUMBER", "SWITCH", "BOOLEAN", "HEXSTRING", "QUOTEDSTRING", "ADDRSTRING",
        !          1178:   "ADDRRANGE", "UNITTYPE_BYTE", "UNITTYPE_KBYTES", "UNITTYPE_MBYTES",
        !          1179:   "UNITTYPE_TBYTES", "UNITTYPE_SEC", "UNITTYPE_MIN", "UNITTYPE_HOUR",
        !          1180:   "EOS", "BOC", "EOC", "COMMA", "$accept", "statements", "statement",
        !          1181:   "privsep_statement", "privsep_stmts", "privsep_stmt", "$@1", "$@2",
        !          1182:   "$@3", "$@4", "$@5", "path_statement", "$@6", "special_statement", "$@7",
        !          1183:   "include_statement", "pfkey_statement", "gssenc_statement",
        !          1184:   "logging_statement", "log_level", "padding_statement", "padding_stmts",
        !          1185:   "padding_stmt", "$@8", "$@9", "$@10", "$@11", "$@12", "listen_statement",
        !          1186:   "listen_stmts", "listen_stmt", "$@13", "$@14", "$@15", "$@16", "$@17",
        !          1187:   "$@18", "ike_addrinfo_port", "ike_port", "radcfg_statement", "$@19",
        !          1188:   "radcfg_stmts", "radcfg_stmt", "$@20", "$@21", "$@22", "$@23", "$@24",
        !          1189:   "$@25", "ldapcfg_statement", "$@26", "ldapcfg_stmts", "ldapcfg_stmt",
        !          1190:   "$@27", "$@28", "$@29", "$@30", "$@31", "$@32", "$@33", "$@34", "$@35",
        !          1191:   "$@36", "$@37", "$@38", "modecfg_statement", "modecfg_stmts",
        !          1192:   "modecfg_stmt", "$@39", "$@40", "$@41", "$@42", "$@43", "$@44", "$@45",
        !          1193:   "$@46", "$@47", "$@48", "$@49", "$@50", "$@51", "$@52", "$@53", "$@54",
        !          1194:   "$@55", "$@56", "$@57", "$@58", "$@59", "$@60", "$@61", "$@62", "$@63",
        !          1195:   "addrdnslist", "addrdns", "addrwinslist", "addrwins", "splitnetlist",
        !          1196:   "splitnet", "authgrouplist", "authgroup", "splitdnslist", "splitdns",
        !          1197:   "timer_statement", "timer_stmts", "timer_stmt", "$@64", "$@65", "$@66",
        !          1198:   "$@67", "$@68", "$@69", "sainfo_statement", "$@70", "$@71",
        !          1199:   "sainfo_name", "sainfo_id", "sainfo_param", "sainfo_specs",
        !          1200:   "sainfo_spec", "$@72", "$@73", "$@74", "$@75", "$@76", "algorithms",
        !          1201:   "$@77", "algorithm", "prefix", "port", "ul_proto", "keylength",
        !          1202:   "remote_statement", "$@78", "$@79", "$@80", "$@81", "remote_specs_block",
        !          1203:   "remote_index", "remote_specs", "remote_spec", "$@82", "$@83", "$@84",
        !          1204:   "$@85", "$@86", "$@87", "$@88", "$@89", "$@90", "$@91", "$@92", "$@93",
        !          1205:   "$@94", "$@95", "$@96", "$@97", "$@98", "$@99", "$@100", "$@101",
        !          1206:   "$@102", "$@103", "$@104", "$@105", "$@106", "$@107", "$@108", "$@109",
        !          1207:   "$@110", "$@111", "$@112", "$@113", "$@114", "$@115", "$@116", "$@117",
        !          1208:   "$@118", "$@119", "$@120", "$@121", "$@122", "$@123", "$@124", "$@125",
        !          1209:   "$@126", "$@127", "$@128", "exchange_types", "cert_spec", "$@129",
        !          1210:   "$@130", "dh_group_num", "identifierstring", "isakmpproposal_specs",
        !          1211:   "isakmpproposal_spec", "$@131", "$@132", "$@133", "$@134", "$@135",
        !          1212:   "unittype_time", "unittype_byte", 0
        !          1213: };
        !          1214: #endif
        !          1215: 
        !          1216: # ifdef YYPRINT
        !          1217: /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
        !          1218:    token YYLEX-NUM.  */
        !          1219: static const yytype_uint16 yytoknum[] =
        !          1220: {
        !          1221:        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
        !          1222:      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
        !          1223:      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
        !          1224:      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
        !          1225:      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
        !          1226:      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
        !          1227:      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
        !          1228:      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
        !          1229:      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
        !          1230:      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
        !          1231:      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
        !          1232:      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
        !          1233:      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
        !          1234:      385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
        !          1235:      395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
        !          1236:      405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
        !          1237:      415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
        !          1238:      425,   426,   427,   428
        !          1239: };
        !          1240: # endif
        !          1241: 
        !          1242: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
        !          1243: static const yytype_uint16 yyr1[] =
        !          1244: {
        !          1245:        0,   174,   175,   175,   176,   176,   176,   176,   176,   176,
        !          1246:      176,   176,   176,   176,   176,   176,   176,   176,   176,   177,
        !          1247:      178,   178,   180,   179,   181,   179,   182,   179,   183,   179,
        !          1248:      184,   179,   186,   185,   188,   187,   189,   190,   191,   192,
        !          1249:      193,   194,   195,   195,   197,   196,   198,   196,   199,   196,
        !          1250:      200,   196,   201,   196,   202,   203,   203,   205,   204,   206,
        !          1251:      204,   207,   204,   208,   204,   209,   204,   210,   204,   211,
        !          1252:      212,   212,   214,   213,   215,   215,   217,   216,   218,   216,
        !          1253:      219,   216,   220,   216,   221,   216,   222,   216,   224,   223,
        !          1254:      225,   225,   227,   226,   228,   226,   229,   226,   230,   226,
        !          1255:      231,   226,   232,   226,   233,   226,   234,   226,   235,   226,
        !          1256:      236,   226,   237,   226,   238,   226,   239,   240,   240,   242,
        !          1257:      241,   243,   241,   241,   241,   244,   241,   245,   241,   246,
        !          1258:      241,   247,   241,   248,   241,   249,   241,   250,   241,   251,
        !          1259:      241,   252,   241,   253,   241,   254,   241,   255,   241,   256,
        !          1260:      241,   257,   241,   258,   241,   259,   241,   260,   241,   261,
        !          1261:      241,   262,   241,   263,   241,   264,   241,   265,   241,   266,
        !          1262:      241,   267,   267,   268,   269,   269,   270,   271,   271,   272,
        !          1263:      273,   273,   274,   275,   275,   276,   277,   278,   278,   280,
        !          1264:      279,   281,   279,   282,   279,   283,   279,   284,   279,   285,
        !          1265:      279,   287,   288,   286,   289,   289,   289,   289,   289,   289,
        !          1266:      290,   290,   290,   291,   291,   291,   292,   292,   294,   293,
        !          1267:      295,   293,   296,   293,   297,   293,   298,   293,   299,   300,
        !          1268:      299,   301,   302,   302,   303,   303,   303,   304,   304,   304,
        !          1269:      305,   305,   307,   306,   308,   306,   309,   306,   310,   306,
        !          1270:      311,   312,   312,   313,   313,   315,   314,   316,   314,   317,
        !          1271:      314,   318,   314,   314,   319,   314,   320,   314,   321,   314,
        !          1272:      322,   314,   323,   314,   324,   314,   325,   314,   326,   314,
        !          1273:      327,   314,   328,   314,   329,   314,   330,   314,   331,   314,
        !          1274:      332,   314,   333,   314,   334,   314,   335,   314,   336,   314,
        !          1275:      337,   314,   338,   314,   339,   314,   340,   314,   341,   314,
        !          1276:      342,   314,   343,   314,   344,   314,   345,   314,   346,   314,
        !          1277:      347,   314,   348,   314,   349,   314,   350,   314,   351,   314,
        !          1278:      352,   314,   353,   314,   354,   314,   355,   314,   356,   314,
        !          1279:      357,   314,   358,   314,   359,   314,   360,   314,   361,   314,
        !          1280:      362,   362,   364,   363,   365,   363,   366,   366,   367,   367,
        !          1281:      367,   368,   368,   370,   369,   371,   369,   372,   369,   373,
        !          1282:      369,   374,   369,   375,   375,   375,   376,   376,   376,   376
        !          1283: };
        !          1284: 
        !          1285: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
        !          1286: static const yytype_uint8 yyr2[] =
        !          1287: {
        !          1288:        0,     2,     0,     2,     1,     1,     1,     1,     1,     1,
        !          1289:        1,     1,     1,     1,     1,     1,     1,     1,     1,     4,
        !          1290:        0,     2,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1291:        0,     4,     0,     5,     0,     4,     3,     3,     3,     3,
        !          1292:        1,     4,     0,     2,     0,     4,     0,     4,     0,     4,
        !          1293:        0,     4,     0,     4,     4,     0,     2,     0,     4,     0,
        !          1294:        4,     0,     7,     0,     4,     0,     4,     0,     3,     2,
        !          1295:        0,     1,     0,     5,     0,     2,     0,     5,     0,     6,
        !          1296:        0,     5,     0,     6,     0,     4,     0,     4,     0,     5,
        !          1297:        0,     2,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1298:        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1299:        0,     4,     0,     4,     0,     4,     4,     0,     2,     0,
        !          1300:        4,     0,     4,     3,     3,     0,     5,     0,     5,     0,
        !          1301:        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        !          1302:        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        !          1303:        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        !          1304:        4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
        !          1305:        4,     1,     3,     1,     1,     3,     1,     1,     3,     2,
        !          1306:        1,     3,     1,     1,     3,     1,     4,     0,     2,     0,
        !          1307:        4,     0,     5,     0,     4,     0,     5,     0,     5,     0,
        !          1308:        5,     0,     0,     8,     1,     2,     2,     2,     2,     2,
        !          1309:        5,     6,     2,     0,     3,     2,     0,     2,     0,     4,
        !          1310:        0,     4,     0,     6,     0,     6,     0,     4,     1,     0,
        !          1311:        4,     2,     0,     1,     0,     1,     1,     1,     1,     1,
        !          1312:        0,     1,     0,     6,     0,     4,     0,     6,     0,     4,
        !          1313:        3,     2,     1,     0,     2,     0,     4,     0,     4,     0,
        !          1314:        4,     0,     4,     2,     0,     4,     0,     5,     0,     5,
        !          1315:        0,     4,     0,     5,     0,     4,     0,     4,     0,     4,
        !          1316:        0,     4,     0,     5,     0,     6,     0,     4,     0,     5,
        !          1317:        0,     6,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1318:        0,     4,     0,     4,     0,     4,     0,     5,     0,     5,
        !          1319:        0,     5,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1320:        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1321:        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
        !          1322:        0,     4,     0,     6,     0,     4,     0,     6,     0,     5,
        !          1323:        0,     2,     0,     5,     0,     4,     1,     1,     0,     1,
        !          1324:        1,     0,     2,     0,     6,     0,     6,     0,     4,     0,
        !          1325:        4,     0,     5,     1,     1,     1,     1,     1,     1,     1
        !          1326: };
        !          1327: 
        !          1328: /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
        !          1329:    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
        !          1330:    means the default is an error.  */
        !          1331: static const yytype_uint16 yydefact[] =
        !          1332: {
        !          1333:        2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
        !          1334:       88,    72,     0,     0,   201,     0,     0,     0,     3,     4,
        !          1335:        5,    18,     6,     7,     8,     9,    10,    11,    13,    12,
        !          1336:       14,    15,    16,    17,    20,     0,     0,     0,    40,     0,
        !          1337:       42,    55,     0,     0,   117,   187,     0,    70,   244,    70,
        !          1338:      252,   248,     0,    34,     0,    32,    36,    37,    39,     0,
        !          1339:        0,    90,    74,     0,     0,   204,     0,   213,     0,    71,
        !          1340:      251,     0,     0,    69,     0,     0,    38,     0,     0,     0,
        !          1341:        0,    19,    21,     0,     0,     0,     0,     0,     0,    41,
        !          1342:       43,     0,     0,    67,     0,    54,    56,     0,     0,     0,
        !          1343:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1344:        0,     0,     0,     0,     0,     0,   116,   118,     0,     0,
        !          1345:        0,     0,     0,     0,   186,   188,   205,   206,   212,   232,
        !          1346:        0,     0,     0,   207,   208,   209,   242,   253,   245,   246,
        !          1347:      249,    35,    24,    22,    28,    26,    30,    33,    44,    46,
        !          1348:       48,    50,    52,    57,    59,     0,    65,    63,     0,     0,
        !          1349:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1350:       89,    91,     0,     0,     0,     0,    73,    75,   119,   121,
        !          1351:      173,     0,   171,   176,     0,   174,   131,   133,   135,   137,
        !          1352:      139,   182,   141,   180,   143,   145,   149,   151,   153,   147,
        !          1353:      165,   167,   163,   169,   155,   161,     0,     0,   185,   129,
        !          1354:      183,   157,   159,   189,     0,   193,     0,     0,     0,   233,
        !          1355:      232,   234,   215,   358,   216,     0,     0,     0,     0,     0,
        !          1356:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1357:       68,     0,     0,     0,    94,    96,    92,    98,   102,   104,
        !          1358:      100,   106,   108,   110,   112,   114,     0,     0,    84,    86,
        !          1359:        0,     0,   123,     0,   124,     0,     0,     0,     0,     0,
        !          1360:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1361:        0,     0,     0,     0,     0,     0,   125,   177,   127,     0,
        !          1362:        0,     0,     0,     0,   373,   374,   375,   191,     0,   195,
        !          1363:      197,   199,   234,   235,   236,     0,   360,   359,   214,   202,
        !          1364:      243,     0,   257,     0,     0,     0,     0,     0,     0,     0,
        !          1365:        0,     0,     0,     0,     0,     0,   296,     0,     0,     0,
        !          1366:        0,     0,     0,   348,     0,     0,     0,     0,     0,   358,
        !          1367:        0,     0,     0,     0,     0,     0,     0,   250,   254,   247,
        !          1368:       25,    23,    29,    27,    31,    45,    47,    49,    51,    53,
        !          1369:       58,    60,    66,     0,    64,     0,     0,     0,     0,     0,
        !          1370:        0,     0,     0,     0,     0,     0,     0,     0,    76,     0,
        !          1371:       80,     0,     0,   120,   122,   172,   175,   132,   134,   136,
        !          1372:      138,   140,   142,   181,   144,   146,   150,   152,   154,   148,
        !          1373:      166,   168,   164,   170,   156,   162,   179,     0,     0,     0,
        !          1374:      130,   184,   158,   160,   190,     0,   194,     0,     0,     0,
        !          1375:        0,   238,   239,   237,   210,   226,     0,     0,     0,     0,
        !          1376:      217,   255,   350,   259,   261,     0,     0,   263,   270,     0,
        !          1377:        0,   264,     0,   274,   276,   278,   280,   358,   358,   292,
        !          1378:      294,     0,   298,   322,   326,   324,   344,   318,   316,   320,
        !          1379:        0,   328,   330,   332,   334,   340,   286,   314,   338,   336,
        !          1380:      302,   300,   304,   312,     0,     0,     0,    61,    95,    97,
        !          1381:       93,    99,   103,   105,   101,   107,   109,   111,   113,   115,
        !          1382:       78,     0,    82,     0,    85,    87,   178,   126,   128,   192,
        !          1383:      196,   198,   200,   211,     0,   356,   357,   218,     0,     0,
        !          1384:      220,   203,     0,     0,     0,     0,     0,   354,     0,   266,
        !          1385:      268,     0,   272,     0,     0,     0,     0,   358,   282,   358,
        !          1386:      288,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1387:        0,     0,   361,     0,     0,     0,     0,     0,     0,     0,
        !          1388:        0,     0,     0,     0,     0,     0,     0,     0,   306,   308,
        !          1389:      310,     0,     0,    77,     0,    81,   240,     0,   228,     0,
        !          1390:        0,     0,     0,   256,   351,   258,   260,   262,   352,     0,
        !          1391:      271,     0,     0,   265,     0,   275,   277,   279,   281,   284,
        !          1392:        0,   290,     0,   293,   295,   297,   299,   323,   327,   325,
        !          1393:      345,   319,   317,   321,     0,   329,   331,   333,   335,   341,
        !          1394:      287,   315,   339,   337,   303,   301,   305,   313,   342,   376,
        !          1395:      377,   378,   379,   346,     0,     0,     0,    62,    79,    83,
        !          1396:      241,   231,   227,     0,   219,   222,   224,   221,     0,   355,
        !          1397:      267,   269,   273,     0,   283,     0,   289,     0,     0,     0,
        !          1398:        0,   349,   362,     0,     0,   307,   309,   311,     0,     0,
        !          1399:        0,   353,   285,   291,   240,   367,   369,     0,     0,   343,
        !          1400:      347,   230,   223,   225,   371,     0,     0,     0,     0,     0,
        !          1401:      368,   370,   363,   365,   372,     0,     0,   364,   366
        !          1402: };
        !          1403: 
        !          1404: /* YYDEFGOTO[NTERM-NUM].  */
        !          1405: static const yytype_int16 yydefgoto[] =
        !          1406: {
        !          1407:       -1,     1,    18,    19,    54,    82,   229,   228,   231,   230,
        !          1408:      232,    20,    83,    21,    77,    22,    23,    24,    25,    39,
        !          1409:       26,    59,    90,   233,   234,   235,   236,   237,    27,    60,
        !          1410:       96,   238,   239,   561,   243,   241,   155,    50,    70,    28,
        !          1411:       43,    98,   177,   491,   562,   493,   564,   381,   382,    29,
        !          1412:       42,    97,   171,   367,   365,   366,   368,   371,   369,   370,
        !          1413:      372,   373,   374,   375,   376,    30,    63,   117,   260,   261,
        !          1414:      408,   409,   289,   266,   267,   268,   269,   270,   271,   273,
        !          1415:      274,   278,   275,   276,   277,   283,   291,   292,   284,   281,
        !          1416:      279,   280,   282,   181,   182,   184,   185,   286,   287,   192,
        !          1417:      193,   209,   210,    31,    64,   125,   293,   415,   298,   417,
        !          1418:      418,   419,    32,    46,   429,    67,    68,   132,   309,   430,
        !          1419:      569,   572,   659,   660,   504,   567,   633,   568,   221,   305,
        !          1420:      424,   631,    33,   225,    72,   227,    75,   138,    51,   226,
        !          1421:      348,   512,   432,   514,   515,   521,   581,   582,   518,   584,
        !          1422:      523,   524,   525,   526,   590,   643,   548,   592,   645,   531,
        !          1423:      532,   451,   534,   553,   552,   554,   624,   625,   626,   555,
        !          1424:      549,   540,   539,   541,   535,   537,   536,   543,   544,   545,
        !          1425:      546,   551,   550,   547,   653,   538,   654,   460,   513,   437,
        !          1426:      638,   579,   507,   308,   604,   652,   685,   686,   675,   676,
        !          1427:      679,   297,   623
        !          1428: };
        !          1429: 
        !          1430: /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
        !          1431:    STATE-NUM.  */
        !          1432: #define YYPACT_NINF -535
        !          1433: static const yytype_int16 yypact[] =
        !          1434: {
        !          1435:     -535,    42,  -535,  -101,    87,   -53,   -14,   144,     9,    24,
        !          1436:     -535,  -535,    26,    36,  -535,   -43,    65,     7,  -535,  -535,
        !          1437:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1438:     -535,  -535,  -535,  -535,  -535,    40,    35,    39,  -535,    48,
        !          1439:     -535,  -535,    53,    54,  -535,  -535,     2,    72,   134,    72,
        !          1440:     -535,   143,    62,  -535,     3,  -535,  -535,  -535,  -535,    -4,
        !          1441:       -5,  -535,  -535,    29,    -9,    22,  -113,    49,    45,  -535,
        !          1442:     -535,    74,    68,  -535,   -45,    68,  -535,    66,   -23,   -13,
        !          1443:       81,  -535,  -535,    70,    85,    86,    88,    89,    98,  -535,
        !          1444:     -535,    84,    84,  -535,    -8,  -535,  -535,    -6,    -7,    95,
        !          1445:       97,   102,   104,    99,    96,   106,     4,    56,    79,   107,
        !          1446:      101,   112,    75,   110,   115,   116,  -535,  -535,   118,   119,
        !          1447:      120,   121,   122,   123,  -535,  -535,  -535,  -535,  -535,   -78,
        !          1448:      124,   171,   109,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1449:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1450:     -535,  -535,  -535,  -535,  -535,   111,  -535,   125,   126,   127,
        !          1451:      131,   128,   130,   132,   136,   135,   137,   138,   139,   140,
        !          1452:     -535,  -535,   141,   142,   147,   148,  -535,  -535,  -535,  -535,
        !          1453:     -535,   145,   133,  -535,   146,   149,  -535,  -535,  -535,  -535,
        !          1454:     -535,  -535,  -535,   150,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1455:     -535,  -535,  -535,  -535,  -535,  -535,   151,   151,  -535,  -535,
        !          1456:      152,  -535,  -535,  -535,    14,  -535,    14,    14,    14,  -535,
        !          1457:      153,    34,  -535,     1,  -535,    68,   117,    68,   154,   156,
        !          1458:      157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
        !          1459:     -535,   167,   178,   169,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1460:     -535,  -535,  -535,  -535,  -535,  -535,    -2,    -1,  -535,  -535,
        !          1461:      172,   173,  -535,   102,  -535,   104,   174,   175,   176,   177,
        !          1462:      179,   180,   106,   181,   182,   183,   185,   186,   187,   188,
        !          1463:      189,   190,   191,   192,   193,   170,   168,  -535,   168,   194,
        !          1464:      110,   195,   196,   197,  -535,  -535,  -535,  -535,   198,  -535,
        !          1465:     -535,  -535,    34,  -535,  -535,    -3,  -535,  -535,  -535,   -20,
        !          1466:     -535,    84,  -535,   204,   213,    80,   -35,   200,   212,   214,
        !          1467:      215,   216,   208,   209,   217,   155,  -535,   218,   219,   -57,
        !          1468:      201,   -75,   220,  -535,   221,   223,   224,   225,   226,     1,
        !          1469:      227,   -46,   -21,   229,   230,    41,   210,  -535,  -535,  -535,
        !          1470:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1471:     -535,  -535,  -535,   232,  -535,   222,   228,   231,   233,   234,
        !          1472:      235,   236,   237,   238,   239,   240,   241,   242,  -535,   252,
        !          1473:     -535,   243,   244,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1474:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1475:     -535,  -535,  -535,  -535,  -535,  -535,  -535,   151,   245,   246,
        !          1476:     -535,  -535,  -535,  -535,  -535,   247,  -535,   248,   249,   250,
        !          1477:       -3,  -535,  -535,  -535,  -535,  -535,   -37,    43,   265,   211,
        !          1478:     -535,  -535,  -535,  -535,  -535,   262,   263,  -535,  -535,   264,
        !          1479:      266,  -535,   267,  -535,  -535,  -535,  -535,   -59,   -56,  -535,
        !          1480:     -535,   -37,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1481:      254,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1482:     -535,  -535,  -535,  -535,   272,   273,    31,  -535,  -535,  -535,
        !          1483:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1484:     -535,   260,  -535,   261,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1485:     -535,  -535,  -535,  -535,   270,  -535,  -535,  -535,   276,   277,
        !          1486:     -535,  -535,   268,   -49,   269,   271,   274,  -535,   275,  -535,
        !          1487:     -535,   278,  -535,   279,   280,   281,   282,     1,  -535,     1,
        !          1488:     -535,   283,   284,   285,   286,   287,   288,   289,   290,   292,
        !          1489:      293,   294,  -535,   295,   296,   297,   298,   299,   300,   301,
        !          1490:      302,   303,   304,   305,   306,   307,    14,    13,  -535,  -535,
        !          1491:     -535,   308,   309,  -535,   310,  -535,   291,   311,   312,   313,
        !          1492:       14,    13,   314,  -535,  -535,  -535,  -535,  -535,  -535,   316,
        !          1493:     -535,   317,   318,  -535,   319,  -535,  -535,  -535,  -535,  -535,
        !          1494:      320,  -535,   321,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1495:     -535,  -535,  -535,  -535,   -27,  -535,  -535,  -535,  -535,  -535,
        !          1496:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1497:     -535,  -535,  -535,  -535,   322,   323,   324,  -535,  -535,  -535,
        !          1498:     -535,  -535,  -535,   325,  -535,  -535,  -535,  -535,   326,  -535,
        !          1499:     -535,  -535,  -535,   327,  -535,   329,  -535,   315,   -37,   335,
        !          1500:       50,  -535,  -535,   330,   331,  -535,  -535,  -535,   270,   332,
        !          1501:      333,  -535,  -535,  -535,   291,  -535,  -535,   348,   349,  -535,
        !          1502:     -535,  -535,  -535,  -535,  -535,   336,   337,    14,    13,   338,
        !          1503:     -535,  -535,  -535,  -535,  -535,   339,   340,  -535,  -535
        !          1504: };
        !          1505: 
        !          1506: /* YYPGOTO[NTERM-NUM].  */
        !          1507: static const yytype_int16 yypgoto[] =
        !          1508: {
        !          1509:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1510:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1511:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1512:     -535,  -535,  -535,  -535,  -535,  -535,  -535,   -88,   341,  -535,
        !          1513:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1514:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1515:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1516:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1517:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1518:     -535,  -535,  -535,    19,  -535,    52,  -535,   113,  -111,    47,
        !          1519:     -535,    23,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1520:     -535,  -535,  -535,  -535,  -535,  -535,    92,  -535,  -535,  -535,
        !          1521:     -535,  -535,  -535,  -535,  -535,  -344,  -535,  -535,   328,    93,
        !          1522:      -99,  -278,  -535,  -535,  -535,  -535,  -535,   -55,   361,  -535,
        !          1523:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1524:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1525:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1526:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1527:     -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1528:     -535,  -535,  -446,  -333,  -535,  -535,  -535,  -535,  -535,  -535,
        !          1529:     -535,  -216,  -534
        !          1530: };
        !          1531: 
        !          1532: /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
        !          1533:    positive, shift that token.  If negative, reduce the rule which
        !          1534:    number is the opposite.  If zero, do what YYDEFACT says.
        !          1535:    If YYTABLE_NINF, syntax error.  */
        !          1536: #define YYTABLE_NINF -230
        !          1537: static const yytype_int16 yytable[] =
        !          1538: {
        !          1539:      299,   300,   301,   153,   154,   533,   466,    78,    79,    80,
        !          1540:       84,    85,    86,    87,    88,    91,    92,   156,    93,    94,
        !          1541:      140,   158,   159,   160,   161,   162,   163,   164,   165,   166,
        !          1542:      167,   168,   169,   172,   173,   174,   175,   636,    47,   574,
        !          1543:       47,   505,     2,   527,   457,     3,   529,   128,   129,     4,
        !          1544:      647,     5,     6,     7,   130,     8,   194,   425,   454,   195,
        !          1545:      219,     9,   118,   119,   120,   121,   122,   123,    10,   468,
        !          1546:       34,   438,   439,   440,    99,   100,   101,   102,   103,   104,
        !          1547:      105,    11,   458,   648,   220,    65,    12,   106,   107,   108,
        !          1548:      109,   110,   111,   112,   470,    35,   113,   114,   115,   649,
        !          1549:      455,   306,   307,    66,   306,   307,   126,    36,   196,   197,
        !          1550:      198,   469,    13,   199,   528,   530,    49,    48,    49,   506,
        !          1551:      650,   575,    14,    66,    15,   441,   426,   427,   133,   134,
        !          1552:      131,   428,   200,   142,   201,   202,   471,   143,   421,   422,
        !          1553:      206,   207,    37,   144,   683,   651,    66,   145,   187,   188,
        !          1554:      189,   190,   157,   423,   377,   379,    38,   127,   378,   380,
        !          1555:      135,   306,   307,   124,    53,   176,   170,    95,    89,    16,
        !          1556:      310,    17,   349,   303,   304,    81,   619,   620,   621,   622,
        !          1557:       40,   294,   295,   296,   558,   559,   560,   435,   436,   474,
        !          1558:      475,   508,   509,    52,   589,    41,   591,    44,   667,   668,
        !          1559:       55,   116,   665,   311,   312,    56,   313,    45,   314,    57,
        !          1560:      315,    69,   316,   317,   318,   319,   320,   321,    58,    71,
        !          1561:      322,   323,   324,   431,    61,    62,   325,   326,    74,   327,
        !          1562:      328,   329,    76,   330,   136,   331,   141,   332,   333,   137,
        !          1563:      147,   146,   148,   149,   150,    49,   151,   334,   335,   336,
        !          1564:      337,   338,   339,   340,   341,   152,   178,   204,   179,   186,
        !          1565:      342,   343,   344,   180,   345,   183,   191,   203,   205,   346,
        !          1566:      208,   211,   223,   212,   213,   214,   215,   216,   217,   218,
        !          1567:      224,   240,   385,   245,   222,   242,   244,   246,   247,   347,
        !          1568:      248,   219,   249,   250,   433,   251,   496,   252,   253,   254,
        !          1569:      255,   256,   257,   258,   259,   434,   263,   442,   406,   447,
        !          1570:      448,   450,   285,   411,   671,   262,   264,   386,   456,   393,
        !          1571:      288,   503,   265,   272,   350,   290,   351,   352,   353,   354,
        !          1572:      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
        !          1573:      618,   407,   383,   384,   387,   388,   389,   390,   566,   391,
        !          1574:      392,   394,   395,   396,   635,   397,   398,   399,   400,   401,
        !          1575:      402,   403,   404,   405,   410,   412,   413,   414,   416,   443,
        !          1576:      476,   444,   445,   446,   449,   452,   453,   459,   461,   462,
        !          1577:      463,   464,   465,   511,   467,   472,   674,   473,   477,     0,
        !          1578:       73,     0,   478,   664,     0,   420,     0,     0,   479,     0,
        !          1579:        0,   480,   490,   481,   482,   483,   484,   485,   486,   487,
        !          1580:      488,   489,   492,   494,   495,   497,   498,   499,   500,   501,
        !          1581:      502,   510,   516,   517,   519,   542,   520,   522,   556,   557,
        !          1582:      563,   565,   570,   571,   578,   139,     0,     0,   573,   576,
        !          1583:        0,   577,     0,     0,     0,   580,     0,   630,   583,   585,
        !          1584:      586,   587,   588,   593,   594,   595,   596,   597,   598,   599,
        !          1585:      600,   682,   601,   602,   603,   605,   606,   607,   608,   609,
        !          1586:      610,   611,   612,   613,   614,   615,   616,   617,   627,   628,
        !          1587:      629,   632,     0,   634,   637,  -229,   639,   640,   641,   642,
        !          1588:      644,   646,   655,   656,   657,   666,   661,   662,   658,   663,
        !          1589:      669,   670,   672,   673,   677,   678,   680,   681,   684,   687,
        !          1590:      688,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1591:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1592:        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        !          1593:        0,     0,     0,     0,     0,     0,     0,     0,   302
        !          1594: };
        !          1595: 
        !          1596: static const yytype_int16 yycheck[] =
        !          1597: {
        !          1598:      216,   217,   218,    91,    92,   451,   339,     4,     5,     6,
        !          1599:       14,    15,    16,    17,    18,    20,    21,    25,    23,    24,
        !          1600:       75,    27,    28,    29,    30,    31,    32,    33,    34,    35,
        !          1601:       36,    37,    38,    40,    41,    42,    43,   571,    83,    88,
        !          1602:       83,    78,     0,   102,   119,     3,   102,   160,   161,     7,
        !          1603:       77,     9,    10,    11,     5,    13,    52,    77,   115,    55,
        !          1604:      138,    19,    71,    72,    73,    74,    75,    76,    26,   115,
        !          1605:      171,   106,   107,   108,    45,    46,    47,    48,    49,    50,
        !          1606:       51,    39,   157,   110,   162,    83,    44,    58,    59,    60,
        !          1607:       61,    62,    63,    64,   115,     8,    67,    68,    69,   126,
        !          1608:      157,   160,   161,   101,   160,   161,    84,   160,    52,    53,
        !          1609:       54,   157,    70,    57,   447,   448,   161,   160,   161,   156,
        !          1610:      147,   170,    80,   101,    82,   160,   146,   147,    83,    84,
        !          1611:       81,   151,    53,   156,    55,    56,   157,   160,   141,   142,
        !          1612:       65,    66,   156,   156,   678,   172,   101,   160,    52,    53,
        !          1613:       54,    55,   160,   156,   156,   156,    12,    65,   160,   160,
        !          1614:       68,   160,   161,   172,   157,   172,   172,   172,   172,   127,
        !          1615:      225,   129,   227,   139,   140,   172,   163,   164,   165,   166,
        !          1616:      171,   167,   168,   169,   153,   154,   155,   107,   108,   148,
        !          1617:      149,   148,   149,   128,   527,   171,   529,   171,   148,   149,
        !          1618:      160,   172,   648,    86,    87,   170,    89,   171,    91,   170,
        !          1619:       93,   139,    95,    96,    97,    98,    99,   100,   170,    85,
        !          1620:      103,   104,   105,   311,   171,   171,   109,   110,    85,   112,
        !          1621:      113,   114,   170,   116,   160,   118,   170,   120,   121,   171,
        !          1622:      170,   160,   157,   157,   156,   161,   157,   130,   131,   132,
        !          1623:      133,   134,   135,   136,   137,   157,   161,   156,   161,   160,
        !          1624:      143,   144,   145,   161,   147,   161,   160,   160,   156,   152,
        !          1625:      160,   156,   101,   157,   156,   156,   156,   156,   156,   156,
        !          1626:      171,   170,   263,   156,   160,   160,   160,   156,   160,   172,
        !          1627:      160,   138,   160,   157,    90,   160,   407,   160,   160,   160,
        !          1628:      160,   160,   160,   156,   156,    92,   173,   107,   138,   101,
        !          1629:      101,   156,   161,   290,   658,   170,   170,   265,   117,   272,
        !          1630:      207,   420,   173,   173,   170,   173,   170,   170,   170,   170,
        !          1631:      170,   170,   170,   170,   170,   170,   170,   170,   160,   170,
        !          1632:      556,   173,   170,   170,   170,   170,   170,   170,    78,   170,
        !          1633:      170,   170,   170,   170,   570,   170,   170,   170,   170,   170,
        !          1634:      170,   170,   170,   170,   170,   170,   170,   170,   170,   157,
        !          1635:      160,   157,   157,   157,   157,   157,   157,   157,   157,   156,
        !          1636:      156,   156,   156,   172,   157,   156,   664,   157,   156,    -1,
        !          1637:       49,    -1,   170,    78,    -1,   302,    -1,    -1,   170,    -1,
        !          1638:       -1,   170,   160,   170,   170,   170,   170,   170,   170,   170,
        !          1639:      170,   170,   160,   170,   170,   170,   170,   170,   170,   170,
        !          1640:      170,   156,   160,   160,   160,   171,   160,   160,   156,   156,
        !          1641:      170,   170,   156,   156,   160,    74,    -1,    -1,   170,   170,
        !          1642:       -1,   170,    -1,    -1,    -1,   170,    -1,   156,   170,   170,
        !          1643:      170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
        !          1644:      170,   677,   170,   170,   170,   170,   170,   170,   170,   170,
        !          1645:      170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
        !          1646:      170,   170,    -1,   170,   170,   173,   170,   170,   170,   170,
        !          1647:      170,   170,   170,   170,   170,   160,   170,   170,   173,   170,
        !          1648:      170,   170,   170,   170,   156,   156,   170,   170,   170,   170,
        !          1649:      170,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        !          1650:       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        !          1651:       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
        !          1652:       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   220
        !          1653: };
        !          1654: 
        !          1655: /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
        !          1656:    symbol of state STATE-NUM.  */
        !          1657: static const yytype_uint16 yystos[] =
        !          1658: {
        !          1659:        0,   175,     0,     3,     7,     9,    10,    11,    13,    19,
        !          1660:       26,    39,    44,    70,    80,    82,   127,   129,   176,   177,
        !          1661:      185,   187,   189,   190,   191,   192,   194,   202,   213,   223,
        !          1662:      239,   277,   286,   306,   171,     8,   160,   156,    12,   193,
        !          1663:      171,   171,   224,   214,   171,   171,   287,    83,   160,   161,
        !          1664:      211,   312,   128,   157,   178,   160,   170,   170,   170,   195,
        !          1665:      203,   171,   171,   240,   278,    83,   101,   289,   290,   139,
        !          1666:      212,    85,   308,   212,    85,   310,   170,   188,     4,     5,
        !          1667:        6,   172,   179,   186,    14,    15,    16,    17,    18,   172,
        !          1668:      196,    20,    21,    23,    24,   172,   204,   225,   215,    45,
        !          1669:       46,    47,    48,    49,    50,    51,    58,    59,    60,    61,
        !          1670:       62,    63,    64,    67,    68,    69,   172,   241,    71,    72,
        !          1671:       73,    74,    75,    76,   172,   279,    84,   290,   160,   161,
        !          1672:        5,    81,   291,    83,    84,   290,   160,   171,   311,   312,
        !          1673:      311,   170,   156,   160,   156,   160,   160,   170,   157,   157,
        !          1674:      156,   157,   157,   211,   211,   210,    25,   160,    27,    28,
        !          1675:       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
        !          1676:      172,   226,    40,    41,    42,    43,   172,   216,   161,   161,
        !          1677:      161,   267,   268,   161,   269,   270,   160,    52,    53,    54,
        !          1678:       55,   160,   273,   274,    52,    55,    52,    53,    54,    57,
        !          1679:       53,    55,    56,   160,   156,   156,    65,    66,   160,   275,
        !          1680:      276,   156,   157,   156,   156,   156,   156,   156,   156,   138,
        !          1681:      162,   302,   160,   101,   171,   307,   313,   309,   181,   180,
        !          1682:      183,   182,   184,   197,   198,   199,   200,   201,   205,   206,
        !          1683:      170,   209,   160,   208,   160,   156,   156,   160,   160,   160,
        !          1684:      157,   160,   160,   160,   160,   160,   160,   160,   156,   156,
        !          1685:      242,   243,   170,   173,   170,   173,   247,   248,   249,   250,
        !          1686:      251,   252,   173,   253,   254,   256,   257,   258,   255,   264,
        !          1687:      265,   263,   266,   259,   262,   161,   271,   272,   271,   246,
        !          1688:      173,   260,   261,   280,   167,   168,   169,   375,   282,   375,
        !          1689:      375,   375,   302,   139,   140,   303,   160,   161,   367,   292,
        !          1690:      311,    86,    87,    89,    91,    93,    95,    96,    97,    98,
        !          1691:       99,   100,   103,   104,   105,   109,   110,   112,   113,   114,
        !          1692:      116,   118,   120,   121,   130,   131,   132,   133,   134,   135,
        !          1693:      136,   137,   143,   144,   145,   147,   152,   172,   314,   311,
        !          1694:      170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
        !          1695:      170,   170,   170,   160,   170,   228,   229,   227,   230,   232,
        !          1696:      233,   231,   234,   235,   236,   237,   238,   156,   160,   156,
        !          1697:      160,   221,   222,   170,   170,   267,   269,   170,   170,   170,
        !          1698:      170,   170,   170,   273,   170,   170,   170,   170,   170,   170,
        !          1699:      170,   170,   170,   170,   170,   170,   138,   173,   244,   245,
        !          1700:      170,   275,   170,   170,   170,   281,   170,   283,   284,   285,
        !          1701:      303,   141,   142,   156,   304,    77,   146,   147,   151,   288,
        !          1702:      293,   211,   316,    90,    92,   107,   108,   363,   106,   107,
        !          1703:      108,   160,   107,   157,   157,   157,   157,   101,   101,   157,
        !          1704:      156,   335,   157,   157,   115,   157,   117,   119,   157,   157,
        !          1705:      361,   157,   156,   156,   156,   156,   367,   157,   115,   157,
        !          1706:      115,   157,   156,   157,   148,   149,   160,   156,   170,   170,
        !          1707:      170,   170,   170,   170,   170,   170,   170,   170,   170,   170,
        !          1708:      160,   217,   160,   219,   170,   170,   272,   170,   170,   170,
        !          1709:      170,   170,   170,   304,   298,    78,   156,   366,   148,   149,
        !          1710:      156,   172,   315,   362,   317,   318,   160,   160,   322,   160,
        !          1711:      160,   319,   160,   324,   325,   326,   327,   102,   367,   102,
        !          1712:      367,   333,   334,   366,   336,   348,   350,   349,   359,   346,
        !          1713:      345,   347,   171,   351,   352,   353,   354,   357,   330,   344,
        !          1714:      356,   355,   338,   337,   339,   343,   156,   156,   153,   154,
        !          1715:      155,   207,   218,   170,   220,   170,    78,   299,   301,   294,
        !          1716:      156,   156,   295,   170,    88,   170,   170,   170,   160,   365,
        !          1717:      170,   320,   321,   170,   323,   170,   170,   170,   170,   367,
        !          1718:      328,   367,   331,   170,   170,   170,   170,   170,   170,   170,
        !          1719:      170,   170,   170,   170,   368,   170,   170,   170,   170,   170,
        !          1720:      170,   170,   170,   170,   170,   170,   170,   170,   375,   163,
        !          1721:      164,   165,   166,   376,   340,   341,   342,   170,   170,   170,
        !          1722:      156,   305,   170,   300,   170,   375,   376,   170,   364,   170,
        !          1723:      170,   170,   170,   329,   170,   332,   170,    77,   110,   126,
        !          1724:      147,   172,   369,   358,   360,   170,   170,   170,   173,   296,
        !          1725:      297,   170,   170,   170,    78,   366,   160,   148,   149,   170,
        !          1726:      170,   299,   170,   170,   305,   372,   373,   156,   156,   374,
        !          1727:      170,   170,   375,   376,   170,   370,   371,   170,   170
        !          1728: };
        !          1729: 
        !          1730: #define yyerrok                (yyerrstatus = 0)
        !          1731: #define yyclearin      (yychar = YYEMPTY)
        !          1732: #define YYEMPTY                (-2)
        !          1733: #define YYEOF          0
        !          1734: 
        !          1735: #define YYACCEPT       goto yyacceptlab
        !          1736: #define YYABORT                goto yyabortlab
        !          1737: #define YYERROR                goto yyerrorlab
        !          1738: 
        !          1739: 
        !          1740: /* Like YYERROR except do call yyerror.  This remains here temporarily
        !          1741:    to ease the transition to the new meaning of YYERROR, for GCC.
        !          1742:    Once GCC version 2 has supplanted version 1, this can go.  */
        !          1743: 
        !          1744: #define YYFAIL         goto yyerrlab
        !          1745: 
        !          1746: #define YYRECOVERING()  (!!yyerrstatus)
        !          1747: 
        !          1748: #define YYBACKUP(Token, Value)                                 \
        !          1749: do                                                             \
        !          1750:   if (yychar == YYEMPTY && yylen == 1)                         \
        !          1751:     {                                                          \
        !          1752:       yychar = (Token);                                                \
        !          1753:       yylval = (Value);                                                \
        !          1754:       yytoken = YYTRANSLATE (yychar);                          \
        !          1755:       YYPOPSTACK (1);                                          \
        !          1756:       goto yybackup;                                           \
        !          1757:     }                                                          \
        !          1758:   else                                                         \
        !          1759:     {                                                          \
        !          1760:       yyerror (YY_("syntax error: cannot back up")); \
        !          1761:       YYERROR;                                                 \
        !          1762:     }                                                          \
        !          1763: while (YYID (0))
        !          1764: 
        !          1765: 
        !          1766: #define YYTERROR       1
        !          1767: #define YYERRCODE      256
        !          1768: 
        !          1769: 
        !          1770: /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
        !          1771:    If N is 0, then set CURRENT to the empty location which ends
        !          1772:    the previous symbol: RHS[0] (always defined).  */
        !          1773: 
        !          1774: #define YYRHSLOC(Rhs, K) ((Rhs)[K])
        !          1775: #ifndef YYLLOC_DEFAULT
        !          1776: # define YYLLOC_DEFAULT(Current, Rhs, N)                               \
        !          1777:     do                                                                 \
        !          1778:       if (YYID (N))                                                    \
        !          1779:        {                                                               \
        !          1780:          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
        !          1781:          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
        !          1782:          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
        !          1783:          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
        !          1784:        }                                                               \
        !          1785:       else                                                             \
        !          1786:        {                                                               \
        !          1787:          (Current).first_line   = (Current).last_line   =              \
        !          1788:            YYRHSLOC (Rhs, 0).last_line;                                \
        !          1789:          (Current).first_column = (Current).last_column =              \
        !          1790:            YYRHSLOC (Rhs, 0).last_column;                              \
        !          1791:        }                                                               \
        !          1792:     while (YYID (0))
        !          1793: #endif
        !          1794: 
        !          1795: 
        !          1796: /* YY_LOCATION_PRINT -- Print the location on the stream.
        !          1797:    This macro was not mandated originally: define only if we know
        !          1798:    we won't break user code: when these are the locations we know.  */
        !          1799: 
        !          1800: #ifndef YY_LOCATION_PRINT
        !          1801: # if YYLTYPE_IS_TRIVIAL
        !          1802: #  define YY_LOCATION_PRINT(File, Loc)                 \
        !          1803:      fprintf (File, "%d.%d-%d.%d",                     \
        !          1804:              (Loc).first_line, (Loc).first_column,     \
        !          1805:              (Loc).last_line,  (Loc).last_column)
        !          1806: # else
        !          1807: #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
        !          1808: # endif
        !          1809: #endif
        !          1810: 
        !          1811: 
        !          1812: /* YYLEX -- calling `yylex' with the right arguments.  */
        !          1813: 
        !          1814: #ifdef YYLEX_PARAM
        !          1815: # define YYLEX yylex (YYLEX_PARAM)
        !          1816: #else
        !          1817: # define YYLEX yylex ()
        !          1818: #endif
        !          1819: 
        !          1820: /* Enable debugging if requested.  */
        !          1821: #if YYDEBUG
        !          1822: 
        !          1823: # ifndef YYFPRINTF
        !          1824: #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
        !          1825: #  define YYFPRINTF fprintf
        !          1826: # endif
        !          1827: 
        !          1828: # define YYDPRINTF(Args)                       \
        !          1829: do {                                           \
        !          1830:   if (yydebug)                                 \
        !          1831:     YYFPRINTF Args;                            \
        !          1832: } while (YYID (0))
        !          1833: 
        !          1834: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
        !          1835: do {                                                                     \
        !          1836:   if (yydebug)                                                           \
        !          1837:     {                                                                    \
        !          1838:       YYFPRINTF (stderr, "%s ", Title);                                          \
        !          1839:       yy_symbol_print (stderr,                                           \
        !          1840:                  Type, Value); \
        !          1841:       YYFPRINTF (stderr, "\n");                                                  \
        !          1842:     }                                                                    \
        !          1843: } while (YYID (0))
        !          1844: 
        !          1845: 
        !          1846: /*--------------------------------.
        !          1847: | Print this symbol on YYOUTPUT.  |
        !          1848: `--------------------------------*/
        !          1849: 
        !          1850: /*ARGSUSED*/
        !          1851: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1852:      || defined __cplusplus || defined _MSC_VER)
        !          1853: static void
        !          1854: yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
        !          1855: #else
        !          1856: static void
        !          1857: yy_symbol_value_print (yyoutput, yytype, yyvaluep)
        !          1858:     FILE *yyoutput;
        !          1859:     int yytype;
        !          1860:     YYSTYPE const * const yyvaluep;
        !          1861: #endif
        !          1862: {
        !          1863:   if (!yyvaluep)
        !          1864:     return;
        !          1865: # ifdef YYPRINT
        !          1866:   if (yytype < YYNTOKENS)
        !          1867:     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
        !          1868: # else
        !          1869:   YYUSE (yyoutput);
        !          1870: # endif
        !          1871:   switch (yytype)
        !          1872:     {
        !          1873:       default:
        !          1874:        break;
        !          1875:     }
        !          1876: }
        !          1877: 
        !          1878: 
        !          1879: /*--------------------------------.
        !          1880: | Print this symbol on YYOUTPUT.  |
        !          1881: `--------------------------------*/
        !          1882: 
        !          1883: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1884:      || defined __cplusplus || defined _MSC_VER)
        !          1885: static void
        !          1886: yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
        !          1887: #else
        !          1888: static void
        !          1889: yy_symbol_print (yyoutput, yytype, yyvaluep)
        !          1890:     FILE *yyoutput;
        !          1891:     int yytype;
        !          1892:     YYSTYPE const * const yyvaluep;
        !          1893: #endif
        !          1894: {
        !          1895:   if (yytype < YYNTOKENS)
        !          1896:     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
        !          1897:   else
        !          1898:     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
        !          1899: 
        !          1900:   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
        !          1901:   YYFPRINTF (yyoutput, ")");
        !          1902: }
        !          1903: 
        !          1904: /*------------------------------------------------------------------.
        !          1905: | yy_stack_print -- Print the state stack from its BOTTOM up to its |
        !          1906: | TOP (included).                                                   |
        !          1907: `------------------------------------------------------------------*/
        !          1908: 
        !          1909: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1910:      || defined __cplusplus || defined _MSC_VER)
        !          1911: static void
        !          1912: yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
        !          1913: #else
        !          1914: static void
        !          1915: yy_stack_print (yybottom, yytop)
        !          1916:     yytype_int16 *yybottom;
        !          1917:     yytype_int16 *yytop;
        !          1918: #endif
        !          1919: {
        !          1920:   YYFPRINTF (stderr, "Stack now");
        !          1921:   for (; yybottom <= yytop; yybottom++)
        !          1922:     {
        !          1923:       int yybot = *yybottom;
        !          1924:       YYFPRINTF (stderr, " %d", yybot);
        !          1925:     }
        !          1926:   YYFPRINTF (stderr, "\n");
        !          1927: }
        !          1928: 
        !          1929: # define YY_STACK_PRINT(Bottom, Top)                           \
        !          1930: do {                                                           \
        !          1931:   if (yydebug)                                                 \
        !          1932:     yy_stack_print ((Bottom), (Top));                          \
        !          1933: } while (YYID (0))
        !          1934: 
        !          1935: 
        !          1936: /*------------------------------------------------.
        !          1937: | Report that the YYRULE is going to be reduced.  |
        !          1938: `------------------------------------------------*/
        !          1939: 
        !          1940: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1941:      || defined __cplusplus || defined _MSC_VER)
        !          1942: static void
        !          1943: yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
        !          1944: #else
        !          1945: static void
        !          1946: yy_reduce_print (yyvsp, yyrule)
        !          1947:     YYSTYPE *yyvsp;
        !          1948:     int yyrule;
        !          1949: #endif
        !          1950: {
        !          1951:   int yynrhs = yyr2[yyrule];
        !          1952:   int yyi;
        !          1953:   unsigned long int yylno = yyrline[yyrule];
        !          1954:   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
        !          1955:             yyrule - 1, yylno);
        !          1956:   /* The symbols being reduced.  */
        !          1957:   for (yyi = 0; yyi < yynrhs; yyi++)
        !          1958:     {
        !          1959:       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
        !          1960:       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
        !          1961:                       &(yyvsp[(yyi + 1) - (yynrhs)])
        !          1962:                                       );
        !          1963:       YYFPRINTF (stderr, "\n");
        !          1964:     }
        !          1965: }
        !          1966: 
        !          1967: # define YY_REDUCE_PRINT(Rule)         \
        !          1968: do {                                   \
        !          1969:   if (yydebug)                         \
        !          1970:     yy_reduce_print (yyvsp, Rule); \
        !          1971: } while (YYID (0))
        !          1972: 
        !          1973: /* Nonzero means print parse trace.  It is left uninitialized so that
        !          1974:    multiple parsers can coexist.  */
        !          1975: int yydebug;
        !          1976: #else /* !YYDEBUG */
        !          1977: # define YYDPRINTF(Args)
        !          1978: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
        !          1979: # define YY_STACK_PRINT(Bottom, Top)
        !          1980: # define YY_REDUCE_PRINT(Rule)
        !          1981: #endif /* !YYDEBUG */
        !          1982: 
        !          1983: 
        !          1984: /* YYINITDEPTH -- initial size of the parser's stacks.  */
        !          1985: #ifndef        YYINITDEPTH
        !          1986: # define YYINITDEPTH 200
        !          1987: #endif
        !          1988: 
        !          1989: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
        !          1990:    if the built-in stack extension method is used).
        !          1991: 
        !          1992:    Do not make this value too large; the results are undefined if
        !          1993:    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
        !          1994:    evaluated with infinite-precision integer arithmetic.  */
        !          1995: 
        !          1996: #ifndef YYMAXDEPTH
        !          1997: # define YYMAXDEPTH 10000
        !          1998: #endif
        !          1999: 
        !          2000: 
        !          2001: 
        !          2002: #if YYERROR_VERBOSE
        !          2003: 
        !          2004: # ifndef yystrlen
        !          2005: #  if defined __GLIBC__ && defined _STRING_H
        !          2006: #   define yystrlen strlen
        !          2007: #  else
        !          2008: /* Return the length of YYSTR.  */
        !          2009: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          2010:      || defined __cplusplus || defined _MSC_VER)
        !          2011: static YYSIZE_T
        !          2012: yystrlen (const char *yystr)
        !          2013: #else
        !          2014: static YYSIZE_T
        !          2015: yystrlen (yystr)
        !          2016:     const char *yystr;
        !          2017: #endif
        !          2018: {
        !          2019:   YYSIZE_T yylen;
        !          2020:   for (yylen = 0; yystr[yylen]; yylen++)
        !          2021:     continue;
        !          2022:   return yylen;
        !          2023: }
        !          2024: #  endif
        !          2025: # endif
        !          2026: 
        !          2027: # ifndef yystpcpy
        !          2028: #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
        !          2029: #   define yystpcpy stpcpy
        !          2030: #  else
        !          2031: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
        !          2032:    YYDEST.  */
        !          2033: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          2034:      || defined __cplusplus || defined _MSC_VER)
        !          2035: static char *
        !          2036: yystpcpy (char *yydest, const char *yysrc)
        !          2037: #else
        !          2038: static char *
        !          2039: yystpcpy (yydest, yysrc)
        !          2040:     char *yydest;
        !          2041:     const char *yysrc;
        !          2042: #endif
        !          2043: {
        !          2044:   char *yyd = yydest;
        !          2045:   const char *yys = yysrc;
        !          2046: 
        !          2047:   while ((*yyd++ = *yys++) != '\0')
        !          2048:     continue;
        !          2049: 
        !          2050:   return yyd - 1;
        !          2051: }
        !          2052: #  endif
        !          2053: # endif
        !          2054: 
        !          2055: # ifndef yytnamerr
        !          2056: /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
        !          2057:    quotes and backslashes, so that it's suitable for yyerror.  The
        !          2058:    heuristic is that double-quoting is unnecessary unless the string
        !          2059:    contains an apostrophe, a comma, or backslash (other than
        !          2060:    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
        !          2061:    null, do not copy; instead, return the length of what the result
        !          2062:    would have been.  */
        !          2063: static YYSIZE_T
        !          2064: yytnamerr (char *yyres, const char *yystr)
        !          2065: {
        !          2066:   if (*yystr == '"')
        !          2067:     {
        !          2068:       YYSIZE_T yyn = 0;
        !          2069:       char const *yyp = yystr;
        !          2070: 
        !          2071:       for (;;)
        !          2072:        switch (*++yyp)
        !          2073:          {
        !          2074:          case '\'':
        !          2075:          case ',':
        !          2076:            goto do_not_strip_quotes;
        !          2077: 
        !          2078:          case '\\':
        !          2079:            if (*++yyp != '\\')
        !          2080:              goto do_not_strip_quotes;
        !          2081:            /* Fall through.  */
        !          2082:          default:
        !          2083:            if (yyres)
        !          2084:              yyres[yyn] = *yyp;
        !          2085:            yyn++;
        !          2086:            break;
        !          2087: 
        !          2088:          case '"':
        !          2089:            if (yyres)
        !          2090:              yyres[yyn] = '\0';
        !          2091:            return yyn;
        !          2092:          }
        !          2093:     do_not_strip_quotes: ;
        !          2094:     }
        !          2095: 
        !          2096:   if (! yyres)
        !          2097:     return yystrlen (yystr);
        !          2098: 
        !          2099:   return yystpcpy (yyres, yystr) - yyres;
        !          2100: }
        !          2101: # endif
        !          2102: 
        !          2103: /* Copy into YYRESULT an error message about the unexpected token
        !          2104:    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
        !          2105:    including the terminating null byte.  If YYRESULT is null, do not
        !          2106:    copy anything; just return the number of bytes that would be
        !          2107:    copied.  As a special case, return 0 if an ordinary "syntax error"
        !          2108:    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
        !          2109:    size calculation.  */
        !          2110: static YYSIZE_T
        !          2111: yysyntax_error (char *yyresult, int yystate, int yychar)
        !          2112: {
        !          2113:   int yyn = yypact[yystate];
        !          2114: 
        !          2115:   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
        !          2116:     return 0;
        !          2117:   else
        !          2118:     {
        !          2119:       int yytype = YYTRANSLATE (yychar);
        !          2120:       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
        !          2121:       YYSIZE_T yysize = yysize0;
        !          2122:       YYSIZE_T yysize1;
        !          2123:       int yysize_overflow = 0;
        !          2124:       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
        !          2125:       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
        !          2126:       int yyx;
        !          2127: 
        !          2128: # if 0
        !          2129:       /* This is so xgettext sees the translatable formats that are
        !          2130:         constructed on the fly.  */
        !          2131:       YY_("syntax error, unexpected %s");
        !          2132:       YY_("syntax error, unexpected %s, expecting %s");
        !          2133:       YY_("syntax error, unexpected %s, expecting %s or %s");
        !          2134:       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
        !          2135:       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
        !          2136: # endif
        !          2137:       char *yyfmt;
        !          2138:       char const *yyf;
        !          2139:       static char const yyunexpected[] = "syntax error, unexpected %s";
        !          2140:       static char const yyexpecting[] = ", expecting %s";
        !          2141:       static char const yyor[] = " or %s";
        !          2142:       char yyformat[sizeof yyunexpected
        !          2143:                    + sizeof yyexpecting - 1
        !          2144:                    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
        !          2145:                       * (sizeof yyor - 1))];
        !          2146:       char const *yyprefix = yyexpecting;
        !          2147: 
        !          2148:       /* Start YYX at -YYN if negative to avoid negative indexes in
        !          2149:         YYCHECK.  */
        !          2150:       int yyxbegin = yyn < 0 ? -yyn : 0;
        !          2151: 
        !          2152:       /* Stay within bounds of both yycheck and yytname.  */
        !          2153:       int yychecklim = YYLAST - yyn + 1;
        !          2154:       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
        !          2155:       int yycount = 1;
        !          2156: 
        !          2157:       yyarg[0] = yytname[yytype];
        !          2158:       yyfmt = yystpcpy (yyformat, yyunexpected);
        !          2159: 
        !          2160:       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
        !          2161:        if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
        !          2162:          {
        !          2163:            if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
        !          2164:              {
        !          2165:                yycount = 1;
        !          2166:                yysize = yysize0;
        !          2167:                yyformat[sizeof yyunexpected - 1] = '\0';
        !          2168:                break;
        !          2169:              }
        !          2170:            yyarg[yycount++] = yytname[yyx];
        !          2171:            yysize1 = yysize + yytnamerr (0, yytname[yyx]);
        !          2172:            yysize_overflow |= (yysize1 < yysize);
        !          2173:            yysize = yysize1;
        !          2174:            yyfmt = yystpcpy (yyfmt, yyprefix);
        !          2175:            yyprefix = yyor;
        !          2176:          }
        !          2177: 
        !          2178:       yyf = YY_(yyformat);
        !          2179:       yysize1 = yysize + yystrlen (yyf);
        !          2180:       yysize_overflow |= (yysize1 < yysize);
        !          2181:       yysize = yysize1;
        !          2182: 
        !          2183:       if (yysize_overflow)
        !          2184:        return YYSIZE_MAXIMUM;
        !          2185: 
        !          2186:       if (yyresult)
        !          2187:        {
        !          2188:          /* Avoid sprintf, as that infringes on the user's name space.
        !          2189:             Don't have undefined behavior even if the translation
        !          2190:             produced a string with the wrong number of "%s"s.  */
        !          2191:          char *yyp = yyresult;
        !          2192:          int yyi = 0;
        !          2193:          while ((*yyp = *yyf) != '\0')
        !          2194:            {
        !          2195:              if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
        !          2196:                {
        !          2197:                  yyp += yytnamerr (yyp, yyarg[yyi++]);
        !          2198:                  yyf += 2;
        !          2199:                }
        !          2200:              else
        !          2201:                {
        !          2202:                  yyp++;
        !          2203:                  yyf++;
        !          2204:                }
        !          2205:            }
        !          2206:        }
        !          2207:       return yysize;
        !          2208:     }
        !          2209: }
        !          2210: #endif /* YYERROR_VERBOSE */
        !          2211: 
        !          2212: 
        !          2213: /*-----------------------------------------------.
        !          2214: | Release the memory associated to this symbol.  |
        !          2215: `-----------------------------------------------*/
        !          2216: 
        !          2217: /*ARGSUSED*/
        !          2218: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          2219:      || defined __cplusplus || defined _MSC_VER)
        !          2220: static void
        !          2221: yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
        !          2222: #else
        !          2223: static void
        !          2224: yydestruct (yymsg, yytype, yyvaluep)
        !          2225:     const char *yymsg;
        !          2226:     int yytype;
        !          2227:     YYSTYPE *yyvaluep;
        !          2228: #endif
        !          2229: {
        !          2230:   YYUSE (yyvaluep);
        !          2231: 
        !          2232:   if (!yymsg)
        !          2233:     yymsg = "Deleting";
        !          2234:   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
        !          2235: 
        !          2236:   switch (yytype)
        !          2237:     {
        !          2238: 
        !          2239:       default:
        !          2240:        break;
        !          2241:     }
        !          2242: }
        !          2243: 
        !          2244: /* Prevent warnings from -Wmissing-prototypes.  */
        !          2245: #ifdef YYPARSE_PARAM
        !          2246: #if defined __STDC__ || defined __cplusplus
        !          2247: int yyparse (void *YYPARSE_PARAM);
        !          2248: #else
        !          2249: int yyparse ();
        !          2250: #endif
        !          2251: #else /* ! YYPARSE_PARAM */
        !          2252: #if defined __STDC__ || defined __cplusplus
        !          2253: int yyparse (void);
        !          2254: #else
        !          2255: int yyparse ();
        !          2256: #endif
        !          2257: #endif /* ! YYPARSE_PARAM */
        !          2258: 
        !          2259: 
        !          2260: /* The lookahead symbol.  */
        !          2261: int yychar;
        !          2262: 
        !          2263: /* The semantic value of the lookahead symbol.  */
        !          2264: YYSTYPE yylval;
        !          2265: 
        !          2266: /* Number of syntax errors so far.  */
        !          2267: int yynerrs;
        !          2268: 
        !          2269: 
        !          2270: 
        !          2271: /*-------------------------.
        !          2272: | yyparse or yypush_parse.  |
        !          2273: `-------------------------*/
        !          2274: 
        !          2275: #ifdef YYPARSE_PARAM
        !          2276: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          2277:      || defined __cplusplus || defined _MSC_VER)
        !          2278: int
        !          2279: yyparse (void *YYPARSE_PARAM)
        !          2280: #else
        !          2281: int
        !          2282: yyparse (YYPARSE_PARAM)
        !          2283:     void *YYPARSE_PARAM;
        !          2284: #endif
        !          2285: #else /* ! YYPARSE_PARAM */
        !          2286: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          2287:      || defined __cplusplus || defined _MSC_VER)
        !          2288: int
        !          2289: yyparse (void)
        !          2290: #else
        !          2291: int
        !          2292: yyparse ()
        !          2293: 
        !          2294: #endif
        !          2295: #endif
        !          2296: {
        !          2297: 
        !          2298: 
        !          2299:     int yystate;
        !          2300:     /* Number of tokens to shift before error messages enabled.  */
        !          2301:     int yyerrstatus;
        !          2302: 
        !          2303:     /* The stacks and their tools:
        !          2304:        `yyss': related to states.
        !          2305:        `yyvs': related to semantic values.
        !          2306: 
        !          2307:        Refer to the stacks thru separate pointers, to allow yyoverflow
        !          2308:        to reallocate them elsewhere.  */
        !          2309: 
        !          2310:     /* The state stack.  */
        !          2311:     yytype_int16 yyssa[YYINITDEPTH];
        !          2312:     yytype_int16 *yyss;
        !          2313:     yytype_int16 *yyssp;
        !          2314: 
        !          2315:     /* The semantic value stack.  */
        !          2316:     YYSTYPE yyvsa[YYINITDEPTH];
        !          2317:     YYSTYPE *yyvs;
        !          2318:     YYSTYPE *yyvsp;
        !          2319: 
        !          2320:     YYSIZE_T yystacksize;
        !          2321: 
        !          2322:   int yyn;
        !          2323:   int yyresult;
        !          2324:   /* Lookahead token as an internal (translated) token number.  */
        !          2325:   int yytoken;
        !          2326:   /* The variables used to return semantic value and location from the
        !          2327:      action routines.  */
        !          2328:   YYSTYPE yyval;
        !          2329: 
        !          2330: #if YYERROR_VERBOSE
        !          2331:   /* Buffer for error messages, and its allocated size.  */
        !          2332:   char yymsgbuf[128];
        !          2333:   char *yymsg = yymsgbuf;
        !          2334:   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
        !          2335: #endif
        !          2336: 
        !          2337: #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
        !          2338: 
        !          2339:   /* The number of symbols on the RHS of the reduced rule.
        !          2340:      Keep to zero when no symbol should be popped.  */
        !          2341:   int yylen = 0;
        !          2342: 
        !          2343:   yytoken = 0;
        !          2344:   yyss = yyssa;
        !          2345:   yyvs = yyvsa;
        !          2346:   yystacksize = YYINITDEPTH;
        !          2347: 
        !          2348:   YYDPRINTF ((stderr, "Starting parse\n"));
        !          2349: 
        !          2350:   yystate = 0;
        !          2351:   yyerrstatus = 0;
        !          2352:   yynerrs = 0;
        !          2353:   yychar = YYEMPTY; /* Cause a token to be read.  */
        !          2354: 
        !          2355:   /* Initialize stack pointers.
        !          2356:      Waste one element of value and location stack
        !          2357:      so that they stay on the same level as the state stack.
        !          2358:      The wasted elements are never initialized.  */
        !          2359:   yyssp = yyss;
        !          2360:   yyvsp = yyvs;
        !          2361: 
        !          2362:   goto yysetstate;
        !          2363: 
        !          2364: /*------------------------------------------------------------.
        !          2365: | yynewstate -- Push a new state, which is found in yystate.  |
        !          2366: `------------------------------------------------------------*/
        !          2367:  yynewstate:
        !          2368:   /* In all cases, when you get here, the value and location stacks
        !          2369:      have just been pushed.  So pushing a state here evens the stacks.  */
        !          2370:   yyssp++;
        !          2371: 
        !          2372:  yysetstate:
        !          2373:   *yyssp = yystate;
        !          2374: 
        !          2375:   if (yyss + yystacksize - 1 <= yyssp)
        !          2376:     {
        !          2377:       /* Get the current used size of the three stacks, in elements.  */
        !          2378:       YYSIZE_T yysize = yyssp - yyss + 1;
        !          2379: 
        !          2380: #ifdef yyoverflow
        !          2381:       {
        !          2382:        /* Give user a chance to reallocate the stack.  Use copies of
        !          2383:           these so that the &'s don't force the real ones into
        !          2384:           memory.  */
        !          2385:        YYSTYPE *yyvs1 = yyvs;
        !          2386:        yytype_int16 *yyss1 = yyss;
        !          2387: 
        !          2388:        /* Each stack pointer address is followed by the size of the
        !          2389:           data in use in that stack, in bytes.  This used to be a
        !          2390:           conditional around just the two extra args, but that might
        !          2391:           be undefined if yyoverflow is a macro.  */
        !          2392:        yyoverflow (YY_("memory exhausted"),
        !          2393:                    &yyss1, yysize * sizeof (*yyssp),
        !          2394:                    &yyvs1, yysize * sizeof (*yyvsp),
        !          2395:                    &yystacksize);
        !          2396: 
        !          2397:        yyss = yyss1;
        !          2398:        yyvs = yyvs1;
        !          2399:       }
        !          2400: #else /* no yyoverflow */
        !          2401: # ifndef YYSTACK_RELOCATE
        !          2402:       goto yyexhaustedlab;
        !          2403: # else
        !          2404:       /* Extend the stack our own way.  */
        !          2405:       if (YYMAXDEPTH <= yystacksize)
        !          2406:        goto yyexhaustedlab;
        !          2407:       yystacksize *= 2;
        !          2408:       if (YYMAXDEPTH < yystacksize)
        !          2409:        yystacksize = YYMAXDEPTH;
        !          2410: 
        !          2411:       {
        !          2412:        yytype_int16 *yyss1 = yyss;
        !          2413:        union yyalloc *yyptr =
        !          2414:          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        !          2415:        if (! yyptr)
        !          2416:          goto yyexhaustedlab;
        !          2417:        YYSTACK_RELOCATE (yyss_alloc, yyss);
        !          2418:        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
        !          2419: #  undef YYSTACK_RELOCATE
        !          2420:        if (yyss1 != yyssa)
        !          2421:          YYSTACK_FREE (yyss1);
        !          2422:       }
        !          2423: # endif
        !          2424: #endif /* no yyoverflow */
        !          2425: 
        !          2426:       yyssp = yyss + yysize - 1;
        !          2427:       yyvsp = yyvs + yysize - 1;
        !          2428: 
        !          2429:       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
        !          2430:                  (unsigned long int) yystacksize));
        !          2431: 
        !          2432:       if (yyss + yystacksize - 1 <= yyssp)
        !          2433:        YYABORT;
        !          2434:     }
        !          2435: 
        !          2436:   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
        !          2437: 
        !          2438:   if (yystate == YYFINAL)
        !          2439:     YYACCEPT;
        !          2440: 
        !          2441:   goto yybackup;
        !          2442: 
        !          2443: /*-----------.
        !          2444: | yybackup.  |
        !          2445: `-----------*/
        !          2446: yybackup:
        !          2447: 
        !          2448:   /* Do appropriate processing given the current state.  Read a
        !          2449:      lookahead token if we need one and don't already have one.  */
        !          2450: 
        !          2451:   /* First try to decide what to do without reference to lookahead token.  */
        !          2452:   yyn = yypact[yystate];
        !          2453:   if (yyn == YYPACT_NINF)
        !          2454:     goto yydefault;
        !          2455: 
        !          2456:   /* Not known => get a lookahead token if don't already have one.  */
        !          2457: 
        !          2458:   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
        !          2459:   if (yychar == YYEMPTY)
        !          2460:     {
        !          2461:       YYDPRINTF ((stderr, "Reading a token: "));
        !          2462:       yychar = YYLEX;
        !          2463:     }
        !          2464: 
        !          2465:   if (yychar <= YYEOF)
        !          2466:     {
        !          2467:       yychar = yytoken = YYEOF;
        !          2468:       YYDPRINTF ((stderr, "Now at end of input.\n"));
        !          2469:     }
        !          2470:   else
        !          2471:     {
        !          2472:       yytoken = YYTRANSLATE (yychar);
        !          2473:       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
        !          2474:     }
        !          2475: 
        !          2476:   /* If the proper action on seeing token YYTOKEN is to reduce or to
        !          2477:      detect an error, take that action.  */
        !          2478:   yyn += yytoken;
        !          2479:   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
        !          2480:     goto yydefault;
        !          2481:   yyn = yytable[yyn];
        !          2482:   if (yyn <= 0)
        !          2483:     {
        !          2484:       if (yyn == 0 || yyn == YYTABLE_NINF)
        !          2485:        goto yyerrlab;
        !          2486:       yyn = -yyn;
        !          2487:       goto yyreduce;
        !          2488:     }
        !          2489: 
        !          2490:   /* Count tokens shifted since error; after three, turn off error
        !          2491:      status.  */
        !          2492:   if (yyerrstatus)
        !          2493:     yyerrstatus--;
        !          2494: 
        !          2495:   /* Shift the lookahead token.  */
        !          2496:   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
        !          2497: 
        !          2498:   /* Discard the shifted token.  */
        !          2499:   yychar = YYEMPTY;
        !          2500: 
        !          2501:   yystate = yyn;
        !          2502:   *++yyvsp = yylval;
        !          2503: 
        !          2504:   goto yynewstate;
        !          2505: 
        !          2506: 
        !          2507: /*-----------------------------------------------------------.
        !          2508: | yydefault -- do the default action for the current state.  |
        !          2509: `-----------------------------------------------------------*/
        !          2510: yydefault:
        !          2511:   yyn = yydefact[yystate];
        !          2512:   if (yyn == 0)
        !          2513:     goto yyerrlab;
        !          2514:   goto yyreduce;
        !          2515: 
        !          2516: 
        !          2517: /*-----------------------------.
        !          2518: | yyreduce -- Do a reduction.  |
        !          2519: `-----------------------------*/
        !          2520: yyreduce:
        !          2521:   /* yyn is the number of a rule to reduce with.  */
        !          2522:   yylen = yyr2[yyn];
        !          2523: 
        !          2524:   /* If YYLEN is nonzero, implement the default value of the action:
        !          2525:      `$$ = $1'.
        !          2526: 
        !          2527:      Otherwise, the following line sets YYVAL to garbage.
        !          2528:      This behavior is undocumented and Bison
        !          2529:      users should not rely upon it.  Assigning to YYVAL
        !          2530:      unconditionally makes the parser a bit smaller, and it avoids a
        !          2531:      GCC warning that YYVAL may be used uninitialized.  */
        !          2532:   yyval = yyvsp[1-yylen];
        !          2533: 
        !          2534: 
        !          2535:   YY_REDUCE_PRINT (yyn);
        !          2536:   switch (yyn)
        !          2537:     {
        !          2538:         case 22:
        !          2539: 
        !          2540: /* Line 1455 of yacc.c  */
        !          2541: #line 298 "cfparse.y"
        !          2542:     {
        !          2543:                        struct passwd *pw;
        !          2544: 
        !          2545:                        if ((pw = getpwnam((yyvsp[(2) - (2)].val)->v)) == NULL) {
        !          2546:                                yyerror("unknown user \"%s\"", (yyvsp[(2) - (2)].val)->v);
        !          2547:                                return -1;
        !          2548:                        }
        !          2549:                        lcconf->uid = pw->pw_uid;
        !          2550:                }
        !          2551:     break;
        !          2552: 
        !          2553:   case 24:
        !          2554: 
        !          2555: /* Line 1455 of yacc.c  */
        !          2556: #line 308 "cfparse.y"
        !          2557:     { lcconf->uid = (yyvsp[(2) - (2)].num); }
        !          2558:     break;
        !          2559: 
        !          2560:   case 26:
        !          2561: 
        !          2562: /* Line 1455 of yacc.c  */
        !          2563: #line 310 "cfparse.y"
        !          2564:     {
        !          2565:                        struct group *gr;
        !          2566: 
        !          2567:                        if ((gr = getgrnam((yyvsp[(2) - (2)].val)->v)) == NULL) {
        !          2568:                                yyerror("unknown group \"%s\"", (yyvsp[(2) - (2)].val)->v);
        !          2569:                                return -1;
        !          2570:                        }
        !          2571:                        lcconf->gid = gr->gr_gid;
        !          2572:                }
        !          2573:     break;
        !          2574: 
        !          2575:   case 28:
        !          2576: 
        !          2577: /* Line 1455 of yacc.c  */
        !          2578: #line 320 "cfparse.y"
        !          2579:     { lcconf->gid = (yyvsp[(2) - (2)].num); }
        !          2580:     break;
        !          2581: 
        !          2582:   case 30:
        !          2583: 
        !          2584: /* Line 1455 of yacc.c  */
        !          2585: #line 321 "cfparse.y"
        !          2586:     { lcconf->chroot = (yyvsp[(2) - (2)].val)->v; }
        !          2587:     break;
        !          2588: 
        !          2589:   case 32:
        !          2590: 
        !          2591: /* Line 1455 of yacc.c  */
        !          2592: #line 327 "cfparse.y"
        !          2593:     {
        !          2594:                        if ((yyvsp[(2) - (3)].num) >= LC_PATHTYPE_MAX) {
        !          2595:                                yyerror("invalid path type %d", (yyvsp[(2) - (3)].num));
        !          2596:                                return -1;
        !          2597:                        }
        !          2598: 
        !          2599:                        /* free old pathinfo */
        !          2600:                        if (lcconf->pathinfo[(yyvsp[(2) - (3)].num)])
        !          2601:                                racoon_free(lcconf->pathinfo[(yyvsp[(2) - (3)].num)]);
        !          2602: 
        !          2603:                        /* set new pathinfo */
        !          2604:                        lcconf->pathinfo[(yyvsp[(2) - (3)].num)] = racoon_strdup((yyvsp[(3) - (3)].val)->v);
        !          2605:                        STRDUP_FATAL(lcconf->pathinfo[(yyvsp[(2) - (3)].num)]);
        !          2606:                        vfree((yyvsp[(3) - (3)].val));
        !          2607:                }
        !          2608:     break;
        !          2609: 
        !          2610:   case 34:
        !          2611: 
        !          2612: /* Line 1455 of yacc.c  */
        !          2613: #line 347 "cfparse.y"
        !          2614:     { lcconf->complex_bundle = (yyvsp[(2) - (2)].num); }
        !          2615:     break;
        !          2616: 
        !          2617:   case 36:
        !          2618: 
        !          2619: /* Line 1455 of yacc.c  */
        !          2620: #line 353 "cfparse.y"
        !          2621:     {
        !          2622:                        char path[MAXPATHLEN];
        !          2623: 
        !          2624:                        getpathname(path, sizeof(path),
        !          2625:                                LC_PATHTYPE_INCLUDE, (yyvsp[(2) - (3)].val)->v);
        !          2626:                        vfree((yyvsp[(2) - (3)].val));
        !          2627:                        if (yycf_switch_buffer(path) != 0)
        !          2628:                                return -1;
        !          2629:                }
        !          2630:     break;
        !          2631: 
        !          2632:   case 37:
        !          2633: 
        !          2634: /* Line 1455 of yacc.c  */
        !          2635: #line 367 "cfparse.y"
        !          2636:     {
        !          2637:                        lcconf->pfkey_buffer_size = (yyvsp[(2) - (3)].num);
        !          2638:         }
        !          2639:     break;
        !          2640: 
        !          2641:   case 38:
        !          2642: 
        !          2643: /* Line 1455 of yacc.c  */
        !          2644: #line 374 "cfparse.y"
        !          2645:     {
        !          2646:                        if ((yyvsp[(2) - (3)].num) >= LC_GSSENC_MAX) {
        !          2647:                                yyerror("invalid GSS ID encoding %d", (yyvsp[(2) - (3)].num));
        !          2648:                                return -1;
        !          2649:                        }
        !          2650:                        lcconf->gss_id_enc = (yyvsp[(2) - (3)].num);
        !          2651:                }
        !          2652:     break;
        !          2653: 
        !          2654:   case 40:
        !          2655: 
        !          2656: /* Line 1455 of yacc.c  */
        !          2657: #line 389 "cfparse.y"
        !          2658:     {
        !          2659:                        /*
        !          2660:                         * set the loglevel to the value specified
        !          2661:                         * in the configuration file plus the number
        !          2662:                         * of -d options specified on the command line
        !          2663:                         */
        !          2664:                        loglevel += (yyvsp[(1) - (1)].num) - oldloglevel;
        !          2665:                        oldloglevel = (yyvsp[(1) - (1)].num);
        !          2666:                }
        !          2667:     break;
        !          2668: 
        !          2669:   case 44:
        !          2670: 
        !          2671: /* Line 1455 of yacc.c  */
        !          2672: #line 409 "cfparse.y"
        !          2673:     { lcconf->pad_random = (yyvsp[(2) - (2)].num); }
        !          2674:     break;
        !          2675: 
        !          2676:   case 46:
        !          2677: 
        !          2678: /* Line 1455 of yacc.c  */
        !          2679: #line 410 "cfparse.y"
        !          2680:     { lcconf->pad_randomlen = (yyvsp[(2) - (2)].num); }
        !          2681:     break;
        !          2682: 
        !          2683:   case 48:
        !          2684: 
        !          2685: /* Line 1455 of yacc.c  */
        !          2686: #line 411 "cfparse.y"
        !          2687:     { lcconf->pad_maxsize = (yyvsp[(2) - (2)].num); }
        !          2688:     break;
        !          2689: 
        !          2690:   case 50:
        !          2691: 
        !          2692: /* Line 1455 of yacc.c  */
        !          2693: #line 412 "cfparse.y"
        !          2694:     { lcconf->pad_strict = (yyvsp[(2) - (2)].num); }
        !          2695:     break;
        !          2696: 
        !          2697:   case 52:
        !          2698: 
        !          2699: /* Line 1455 of yacc.c  */
        !          2700: #line 413 "cfparse.y"
        !          2701:     { lcconf->pad_excltail = (yyvsp[(2) - (2)].num); }
        !          2702:     break;
        !          2703: 
        !          2704:   case 57:
        !          2705: 
        !          2706: /* Line 1455 of yacc.c  */
        !          2707: #line 426 "cfparse.y"
        !          2708:     {
        !          2709:                        myaddr_listen((yyvsp[(2) - (2)].saddr), FALSE);
        !          2710:                        racoon_free((yyvsp[(2) - (2)].saddr));
        !          2711:                }
        !          2712:     break;
        !          2713: 
        !          2714:   case 59:
        !          2715: 
        !          2716: /* Line 1455 of yacc.c  */
        !          2717: #line 432 "cfparse.y"
        !          2718:     {
        !          2719: #ifdef ENABLE_NATT
        !          2720:                        myaddr_listen((yyvsp[(2) - (2)].saddr), TRUE);
        !          2721:                        racoon_free((yyvsp[(2) - (2)].saddr));
        !          2722: #else
        !          2723:                        racoon_free((yyvsp[(2) - (2)].saddr));
        !          2724:                        yyerror("NAT-T support not compiled in.");
        !          2725: #endif
        !          2726:                }
        !          2727:     break;
        !          2728: 
        !          2729:   case 61:
        !          2730: 
        !          2731: /* Line 1455 of yacc.c  */
        !          2732: #line 443 "cfparse.y"
        !          2733:     {
        !          2734: #ifdef ENABLE_ADMINPORT
        !          2735:                        adminsock_conf((yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].num));
        !          2736: #else
        !          2737:                        yywarn("admin port support not compiled in");
        !          2738: #endif
        !          2739:                }
        !          2740:     break;
        !          2741: 
        !          2742:   case 63:
        !          2743: 
        !          2744: /* Line 1455 of yacc.c  */
        !          2745: #line 452 "cfparse.y"
        !          2746:     {
        !          2747: #ifdef ENABLE_ADMINPORT
        !          2748:                        adminsock_conf((yyvsp[(2) - (2)].val), NULL, NULL, -1);
        !          2749: #else
        !          2750:                        yywarn("admin port support not compiled in");
        !          2751: #endif
        !          2752:                }
        !          2753:     break;
        !          2754: 
        !          2755:   case 65:
        !          2756: 
        !          2757: /* Line 1455 of yacc.c  */
        !          2758: #line 461 "cfparse.y"
        !          2759:     {
        !          2760: #ifdef ENABLE_ADMINPORT
        !          2761:                        adminsock_path = NULL;
        !          2762: #else
        !          2763:                        yywarn("admin port support not compiled in");
        !          2764: #endif
        !          2765:                }
        !          2766:     break;
        !          2767: 
        !          2768:   case 67:
        !          2769: 
        !          2770: /* Line 1455 of yacc.c  */
        !          2771: #line 469 "cfparse.y"
        !          2772:     { lcconf->strict_address = TRUE; }
        !          2773:     break;
        !          2774: 
        !          2775:   case 69:
        !          2776: 
        !          2777: /* Line 1455 of yacc.c  */
        !          2778: #line 473 "cfparse.y"
        !          2779:     {
        !          2780:                        char portbuf[10];
        !          2781: 
        !          2782:                        snprintf(portbuf, sizeof(portbuf), "%ld", (yyvsp[(2) - (2)].num));
        !          2783:                        (yyval.saddr) = str2saddr((yyvsp[(1) - (2)].val)->v, portbuf);
        !          2784:                        vfree((yyvsp[(1) - (2)].val));
        !          2785:                        if (!(yyval.saddr))
        !          2786:                                return -1;
        !          2787:                }
        !          2788:     break;
        !          2789: 
        !          2790:   case 70:
        !          2791: 
        !          2792: /* Line 1455 of yacc.c  */
        !          2793: #line 484 "cfparse.y"
        !          2794:     { (yyval.num) = PORT_ISAKMP; }
        !          2795:     break;
        !          2796: 
        !          2797:   case 71:
        !          2798: 
        !          2799: /* Line 1455 of yacc.c  */
        !          2800: #line 485 "cfparse.y"
        !          2801:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          2802:     break;
        !          2803: 
        !          2804:   case 72:
        !          2805: 
        !          2806: /* Line 1455 of yacc.c  */
        !          2807: #line 490 "cfparse.y"
        !          2808:     {
        !          2809: #ifndef ENABLE_HYBRID
        !          2810:                        yyerror("racoon not configured with --enable-hybrid");
        !          2811:                        return -1;
        !          2812: #endif
        !          2813: #ifndef HAVE_LIBRADIUS
        !          2814:                        yyerror("racoon not configured with --with-libradius");
        !          2815:                        return -1;
        !          2816: #endif
        !          2817: #ifdef ENABLE_HYBRID
        !          2818: #ifdef HAVE_LIBRADIUS
        !          2819:                        xauth_rad_config.timeout = 3;
        !          2820:                        xauth_rad_config.retries = 3;
        !          2821: #endif
        !          2822: #endif
        !          2823:                }
        !          2824:     break;
        !          2825: 
        !          2826:   case 76:
        !          2827: 
        !          2828: /* Line 1455 of yacc.c  */
        !          2829: #line 513 "cfparse.y"
        !          2830:     {
        !          2831: #ifdef ENABLE_HYBRID
        !          2832: #ifdef HAVE_LIBRADIUS
        !          2833:                        int i = xauth_rad_config.auth_server_count;
        !          2834:                        if (i == RADIUS_MAX_SERVERS) {
        !          2835:                                yyerror("maximum radius auth servers exceeded");
        !          2836:                                return -1;
        !          2837:                        }
        !          2838: 
        !          2839:                        xauth_rad_config.auth_server_list[i].host = vdup((yyvsp[(2) - (3)].val));
        !          2840:                        xauth_rad_config.auth_server_list[i].secret = vdup((yyvsp[(3) - (3)].val));
        !          2841:                        xauth_rad_config.auth_server_list[i].port = 0; // default port
        !          2842:                        xauth_rad_config.auth_server_count++;
        !          2843: #endif
        !          2844: #endif
        !          2845:                }
        !          2846:     break;
        !          2847: 
        !          2848:   case 78:
        !          2849: 
        !          2850: /* Line 1455 of yacc.c  */
        !          2851: #line 531 "cfparse.y"
        !          2852:     {
        !          2853: #ifdef ENABLE_HYBRID
        !          2854: #ifdef HAVE_LIBRADIUS
        !          2855:                        int i = xauth_rad_config.auth_server_count;
        !          2856:                        if (i == RADIUS_MAX_SERVERS) {
        !          2857:                                yyerror("maximum radius auth servers exceeded");
        !          2858:                                return -1;
        !          2859:                        }
        !          2860: 
        !          2861:                        xauth_rad_config.auth_server_list[i].host = vdup((yyvsp[(2) - (4)].val));
        !          2862:                        xauth_rad_config.auth_server_list[i].secret = vdup((yyvsp[(4) - (4)].val));
        !          2863:                        xauth_rad_config.auth_server_list[i].port = (yyvsp[(3) - (4)].num);
        !          2864:                        xauth_rad_config.auth_server_count++;
        !          2865: #endif
        !          2866: #endif
        !          2867:                }
        !          2868:     break;
        !          2869: 
        !          2870:   case 80:
        !          2871: 
        !          2872: /* Line 1455 of yacc.c  */
        !          2873: #line 549 "cfparse.y"
        !          2874:     {
        !          2875: #ifdef ENABLE_HYBRID
        !          2876: #ifdef HAVE_LIBRADIUS
        !          2877:                        int i = xauth_rad_config.acct_server_count;
        !          2878:                        if (i == RADIUS_MAX_SERVERS) {
        !          2879:                                yyerror("maximum radius account servers exceeded");
        !          2880:                                return -1;
        !          2881:                        }
        !          2882: 
        !          2883:                        xauth_rad_config.acct_server_list[i].host = vdup((yyvsp[(2) - (3)].val));
        !          2884:                        xauth_rad_config.acct_server_list[i].secret = vdup((yyvsp[(3) - (3)].val));
        !          2885:                        xauth_rad_config.acct_server_list[i].port = 0; // default port
        !          2886:                        xauth_rad_config.acct_server_count++;
        !          2887: #endif
        !          2888: #endif
        !          2889:                }
        !          2890:     break;
        !          2891: 
        !          2892:   case 82:
        !          2893: 
        !          2894: /* Line 1455 of yacc.c  */
        !          2895: #line 567 "cfparse.y"
        !          2896:     {
        !          2897: #ifdef ENABLE_HYBRID
        !          2898: #ifdef HAVE_LIBRADIUS
        !          2899:                        int i = xauth_rad_config.acct_server_count;
        !          2900:                        if (i == RADIUS_MAX_SERVERS) {
        !          2901:                                yyerror("maximum radius account servers exceeded");
        !          2902:                                return -1;
        !          2903:                        }
        !          2904: 
        !          2905:                        xauth_rad_config.acct_server_list[i].host = vdup((yyvsp[(2) - (4)].val));
        !          2906:                        xauth_rad_config.acct_server_list[i].secret = vdup((yyvsp[(4) - (4)].val));
        !          2907:                        xauth_rad_config.acct_server_list[i].port = (yyvsp[(3) - (4)].num);
        !          2908:                        xauth_rad_config.acct_server_count++;
        !          2909: #endif
        !          2910: #endif
        !          2911:                }
        !          2912:     break;
        !          2913: 
        !          2914:   case 84:
        !          2915: 
        !          2916: /* Line 1455 of yacc.c  */
        !          2917: #line 585 "cfparse.y"
        !          2918:     {
        !          2919: #ifdef ENABLE_HYBRID
        !          2920: #ifdef HAVE_LIBRADIUS
        !          2921:                        xauth_rad_config.timeout = (yyvsp[(2) - (2)].num);
        !          2922: #endif
        !          2923: #endif
        !          2924:                }
        !          2925:     break;
        !          2926: 
        !          2927:   case 86:
        !          2928: 
        !          2929: /* Line 1455 of yacc.c  */
        !          2930: #line 594 "cfparse.y"
        !          2931:     {
        !          2932: #ifdef ENABLE_HYBRID
        !          2933: #ifdef HAVE_LIBRADIUS
        !          2934:                        xauth_rad_config.retries = (yyvsp[(2) - (2)].num);
        !          2935: #endif
        !          2936: #endif
        !          2937:                }
        !          2938:     break;
        !          2939: 
        !          2940:   case 88:
        !          2941: 
        !          2942: /* Line 1455 of yacc.c  */
        !          2943: #line 606 "cfparse.y"
        !          2944:     {
        !          2945: #ifndef ENABLE_HYBRID
        !          2946:                        yyerror("racoon not configured with --enable-hybrid");
        !          2947:                        return -1;
        !          2948: #endif
        !          2949: #ifndef HAVE_LIBLDAP
        !          2950:                        yyerror("racoon not configured with --with-libldap");
        !          2951:                        return -1;
        !          2952: #endif
        !          2953:                }
        !          2954:     break;
        !          2955: 
        !          2956:   case 92:
        !          2957: 
        !          2958: /* Line 1455 of yacc.c  */
        !          2959: #line 623 "cfparse.y"
        !          2960:     {
        !          2961: #ifdef ENABLE_HYBRID
        !          2962: #ifdef HAVE_LIBLDAP
        !          2963:                        if (((yyvsp[(2) - (2)].num)<2)||((yyvsp[(2) - (2)].num)>3))
        !          2964:                                yyerror("invalid ldap protocol version (2|3)");
        !          2965:                        xauth_ldap_config.pver = (yyvsp[(2) - (2)].num);
        !          2966: #endif
        !          2967: #endif
        !          2968:                }
        !          2969:     break;
        !          2970: 
        !          2971:   case 94:
        !          2972: 
        !          2973: /* Line 1455 of yacc.c  */
        !          2974: #line 634 "cfparse.y"
        !          2975:     {
        !          2976: #ifdef ENABLE_HYBRID
        !          2977: #ifdef HAVE_LIBLDAP
        !          2978:                        if (xauth_ldap_config.host != NULL)
        !          2979:                                vfree(xauth_ldap_config.host);
        !          2980:                        xauth_ldap_config.host = vdup((yyvsp[(2) - (2)].val));
        !          2981: #endif
        !          2982: #endif
        !          2983:                }
        !          2984:     break;
        !          2985: 
        !          2986:   case 96:
        !          2987: 
        !          2988: /* Line 1455 of yacc.c  */
        !          2989: #line 645 "cfparse.y"
        !          2990:     {
        !          2991: #ifdef ENABLE_HYBRID
        !          2992: #ifdef HAVE_LIBLDAP
        !          2993:                        xauth_ldap_config.port = (yyvsp[(2) - (2)].num);
        !          2994: #endif
        !          2995: #endif
        !          2996:                }
        !          2997:     break;
        !          2998: 
        !          2999:   case 98:
        !          3000: 
        !          3001: /* Line 1455 of yacc.c  */
        !          3002: #line 654 "cfparse.y"
        !          3003:     {
        !          3004: #ifdef ENABLE_HYBRID
        !          3005: #ifdef HAVE_LIBLDAP
        !          3006:                        if (xauth_ldap_config.base != NULL)
        !          3007:                                vfree(xauth_ldap_config.base);
        !          3008:                        xauth_ldap_config.base = vdup((yyvsp[(2) - (2)].val));
        !          3009: #endif
        !          3010: #endif
        !          3011:                }
        !          3012:     break;
        !          3013: 
        !          3014:   case 100:
        !          3015: 
        !          3016: /* Line 1455 of yacc.c  */
        !          3017: #line 665 "cfparse.y"
        !          3018:     {
        !          3019: #ifdef ENABLE_HYBRID
        !          3020: #ifdef HAVE_LIBLDAP
        !          3021:                        xauth_ldap_config.subtree = (yyvsp[(2) - (2)].num);
        !          3022: #endif
        !          3023: #endif
        !          3024:                }
        !          3025:     break;
        !          3026: 
        !          3027:   case 102:
        !          3028: 
        !          3029: /* Line 1455 of yacc.c  */
        !          3030: #line 674 "cfparse.y"
        !          3031:     {
        !          3032: #ifdef ENABLE_HYBRID
        !          3033: #ifdef HAVE_LIBLDAP
        !          3034:                        if (xauth_ldap_config.bind_dn != NULL)
        !          3035:                                vfree(xauth_ldap_config.bind_dn);
        !          3036:                        xauth_ldap_config.bind_dn = vdup((yyvsp[(2) - (2)].val));
        !          3037: #endif
        !          3038: #endif
        !          3039:                }
        !          3040:     break;
        !          3041: 
        !          3042:   case 104:
        !          3043: 
        !          3044: /* Line 1455 of yacc.c  */
        !          3045: #line 685 "cfparse.y"
        !          3046:     {
        !          3047: #ifdef ENABLE_HYBRID
        !          3048: #ifdef HAVE_LIBLDAP
        !          3049:                        if (xauth_ldap_config.bind_pw != NULL)
        !          3050:                                vfree(xauth_ldap_config.bind_pw);
        !          3051:                        xauth_ldap_config.bind_pw = vdup((yyvsp[(2) - (2)].val));
        !          3052: #endif
        !          3053: #endif
        !          3054:                }
        !          3055:     break;
        !          3056: 
        !          3057:   case 106:
        !          3058: 
        !          3059: /* Line 1455 of yacc.c  */
        !          3060: #line 696 "cfparse.y"
        !          3061:     {
        !          3062: #ifdef ENABLE_HYBRID
        !          3063: #ifdef HAVE_LIBLDAP
        !          3064:                        if (xauth_ldap_config.attr_user != NULL)
        !          3065:                                vfree(xauth_ldap_config.attr_user);
        !          3066:                        xauth_ldap_config.attr_user = vdup((yyvsp[(2) - (2)].val));
        !          3067: #endif
        !          3068: #endif
        !          3069:                }
        !          3070:     break;
        !          3071: 
        !          3072:   case 108:
        !          3073: 
        !          3074: /* Line 1455 of yacc.c  */
        !          3075: #line 707 "cfparse.y"
        !          3076:     {
        !          3077: #ifdef ENABLE_HYBRID
        !          3078: #ifdef HAVE_LIBLDAP
        !          3079:                        if (xauth_ldap_config.attr_addr != NULL)
        !          3080:                                vfree(xauth_ldap_config.attr_addr);
        !          3081:                        xauth_ldap_config.attr_addr = vdup((yyvsp[(2) - (2)].val));
        !          3082: #endif
        !          3083: #endif
        !          3084:                }
        !          3085:     break;
        !          3086: 
        !          3087:   case 110:
        !          3088: 
        !          3089: /* Line 1455 of yacc.c  */
        !          3090: #line 718 "cfparse.y"
        !          3091:     {
        !          3092: #ifdef ENABLE_HYBRID
        !          3093: #ifdef HAVE_LIBLDAP
        !          3094:                        if (xauth_ldap_config.attr_mask != NULL)
        !          3095:                                vfree(xauth_ldap_config.attr_mask);
        !          3096:                        xauth_ldap_config.attr_mask = vdup((yyvsp[(2) - (2)].val));
        !          3097: #endif
        !          3098: #endif
        !          3099:                }
        !          3100:     break;
        !          3101: 
        !          3102:   case 112:
        !          3103: 
        !          3104: /* Line 1455 of yacc.c  */
        !          3105: #line 729 "cfparse.y"
        !          3106:     {
        !          3107: #ifdef ENABLE_HYBRID
        !          3108: #ifdef HAVE_LIBLDAP
        !          3109:                        if (xauth_ldap_config.attr_group != NULL)
        !          3110:                                vfree(xauth_ldap_config.attr_group);
        !          3111:                        xauth_ldap_config.attr_group = vdup((yyvsp[(2) - (2)].val));
        !          3112: #endif
        !          3113: #endif
        !          3114:                }
        !          3115:     break;
        !          3116: 
        !          3117:   case 114:
        !          3118: 
        !          3119: /* Line 1455 of yacc.c  */
        !          3120: #line 740 "cfparse.y"
        !          3121:     {
        !          3122: #ifdef ENABLE_HYBRID
        !          3123: #ifdef HAVE_LIBLDAP
        !          3124:                        if (xauth_ldap_config.attr_member != NULL)
        !          3125:                                vfree(xauth_ldap_config.attr_member);
        !          3126:                        xauth_ldap_config.attr_member = vdup((yyvsp[(2) - (2)].val));
        !          3127: #endif
        !          3128: #endif
        !          3129:                }
        !          3130:     break;
        !          3131: 
        !          3132:   case 119:
        !          3133: 
        !          3134: /* Line 1455 of yacc.c  */
        !          3135: #line 762 "cfparse.y"
        !          3136:     {
        !          3137: #ifdef ENABLE_HYBRID
        !          3138:                        if (inet_pton(AF_INET, (yyvsp[(2) - (2)].val)->v,
        !          3139:                             &isakmp_cfg_config.network4) != 1)
        !          3140:                                yyerror("bad IPv4 network address.");
        !          3141: #else
        !          3142:                        yyerror("racoon not configured with --enable-hybrid");
        !          3143: #endif
        !          3144:                }
        !          3145:     break;
        !          3146: 
        !          3147:   case 121:
        !          3148: 
        !          3149: /* Line 1455 of yacc.c  */
        !          3150: #line 773 "cfparse.y"
        !          3151:     {
        !          3152: #ifdef ENABLE_HYBRID
        !          3153:                        if (inet_pton(AF_INET, (yyvsp[(2) - (2)].val)->v,
        !          3154:                            &isakmp_cfg_config.netmask4) != 1)
        !          3155:                                yyerror("bad IPv4 netmask address.");
        !          3156: #else
        !          3157:                        yyerror("racoon not configured with --enable-hybrid");
        !          3158: #endif
        !          3159:                }
        !          3160:     break;
        !          3161: 
        !          3162:   case 125:
        !          3163: 
        !          3164: /* Line 1455 of yacc.c  */
        !          3165: #line 788 "cfparse.y"
        !          3166:     {
        !          3167: #ifdef ENABLE_HYBRID
        !          3168:                        isakmp_cfg_config.splitnet_type = UNITY_LOCAL_LAN;
        !          3169: #else
        !          3170:                        yyerror("racoon not configured with --enable-hybrid");
        !          3171: #endif
        !          3172:                }
        !          3173:     break;
        !          3174: 
        !          3175:   case 127:
        !          3176: 
        !          3177: /* Line 1455 of yacc.c  */
        !          3178: #line 797 "cfparse.y"
        !          3179:     {
        !          3180: #ifdef ENABLE_HYBRID
        !          3181:                        isakmp_cfg_config.splitnet_type = UNITY_SPLIT_INCLUDE;
        !          3182: #else
        !          3183:                        yyerror("racoon not configured with --enable-hybrid");
        !          3184: #endif
        !          3185:                }
        !          3186:     break;
        !          3187: 
        !          3188:   case 129:
        !          3189: 
        !          3190: /* Line 1455 of yacc.c  */
        !          3191: #line 806 "cfparse.y"
        !          3192:     {
        !          3193: #ifndef ENABLE_HYBRID
        !          3194:                        yyerror("racoon not configured with --enable-hybrid");
        !          3195: #endif
        !          3196:                }
        !          3197:     break;
        !          3198: 
        !          3199:   case 131:
        !          3200: 
        !          3201: /* Line 1455 of yacc.c  */
        !          3202: #line 813 "cfparse.y"
        !          3203:     {
        !          3204: #ifdef ENABLE_HYBRID
        !          3205:                        strncpy(&isakmp_cfg_config.default_domain[0], 
        !          3206:                            (yyvsp[(2) - (2)].val)->v, MAXPATHLEN);
        !          3207:                        isakmp_cfg_config.default_domain[MAXPATHLEN] = '\0';
        !          3208:                        vfree((yyvsp[(2) - (2)].val));
        !          3209: #else
        !          3210:                        yyerror("racoon not configured with --enable-hybrid");
        !          3211: #endif
        !          3212:                }
        !          3213:     break;
        !          3214: 
        !          3215:   case 133:
        !          3216: 
        !          3217: /* Line 1455 of yacc.c  */
        !          3218: #line 825 "cfparse.y"
        !          3219:     {
        !          3220: #ifdef ENABLE_HYBRID
        !          3221:                        isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_SYSTEM;
        !          3222: #else
        !          3223:                        yyerror("racoon not configured with --enable-hybrid");
        !          3224: #endif
        !          3225:                }
        !          3226:     break;
        !          3227: 
        !          3228:   case 135:
        !          3229: 
        !          3230: /* Line 1455 of yacc.c  */
        !          3231: #line 834 "cfparse.y"
        !          3232:     {
        !          3233: #ifdef ENABLE_HYBRID
        !          3234: #ifdef HAVE_LIBRADIUS
        !          3235:                        isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_RADIUS;
        !          3236: #else /* HAVE_LIBRADIUS */
        !          3237:                        yyerror("racoon not configured with --with-libradius");
        !          3238: #endif /* HAVE_LIBRADIUS */
        !          3239: #else /* ENABLE_HYBRID */
        !          3240:                        yyerror("racoon not configured with --enable-hybrid");
        !          3241: #endif /* ENABLE_HYBRID */
        !          3242:                }
        !          3243:     break;
        !          3244: 
        !          3245:   case 137:
        !          3246: 
        !          3247: /* Line 1455 of yacc.c  */
        !          3248: #line 847 "cfparse.y"
        !          3249:     {
        !          3250: #ifdef ENABLE_HYBRID
        !          3251: #ifdef HAVE_LIBPAM
        !          3252:                        isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_PAM;
        !          3253: #else /* HAVE_LIBPAM */
        !          3254:                        yyerror("racoon not configured with --with-libpam");
        !          3255: #endif /* HAVE_LIBPAM */
        !          3256: #else /* ENABLE_HYBRID */
        !          3257:                        yyerror("racoon not configured with --enable-hybrid");
        !          3258: #endif /* ENABLE_HYBRID */
        !          3259:                }
        !          3260:     break;
        !          3261: 
        !          3262:   case 139:
        !          3263: 
        !          3264: /* Line 1455 of yacc.c  */
        !          3265: #line 860 "cfparse.y"
        !          3266:     {
        !          3267: #ifdef ENABLE_HYBRID
        !          3268: #ifdef HAVE_LIBLDAP
        !          3269:                        isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_LDAP;
        !          3270: #else /* HAVE_LIBLDAP */
        !          3271:                        yyerror("racoon not configured with --with-libldap");
        !          3272: #endif /* HAVE_LIBLDAP */
        !          3273: #else /* ENABLE_HYBRID */
        !          3274:                        yyerror("racoon not configured with --enable-hybrid");
        !          3275: #endif /* ENABLE_HYBRID */
        !          3276:                }
        !          3277:     break;
        !          3278: 
        !          3279:   case 141:
        !          3280: 
        !          3281: /* Line 1455 of yacc.c  */
        !          3282: #line 873 "cfparse.y"
        !          3283:     {
        !          3284: #ifndef ENABLE_HYBRID
        !          3285:                        yyerror("racoon not configured with --enable-hybrid");
        !          3286: #endif
        !          3287:                }
        !          3288:     break;
        !          3289: 
        !          3290:   case 143:
        !          3291: 
        !          3292: /* Line 1455 of yacc.c  */
        !          3293: #line 880 "cfparse.y"
        !          3294:     {
        !          3295: #ifdef ENABLE_HYBRID
        !          3296:                        isakmp_cfg_config.groupsource = ISAKMP_CFG_GROUP_SYSTEM;
        !          3297: #else
        !          3298:                        yyerror("racoon not configured with --enable-hybrid");
        !          3299: #endif
        !          3300:                }
        !          3301:     break;
        !          3302: 
        !          3303:   case 145:
        !          3304: 
        !          3305: /* Line 1455 of yacc.c  */
        !          3306: #line 889 "cfparse.y"
        !          3307:     {
        !          3308: #ifdef ENABLE_HYBRID
        !          3309: #ifdef HAVE_LIBLDAP
        !          3310:                        isakmp_cfg_config.groupsource = ISAKMP_CFG_GROUP_LDAP;
        !          3311: #else /* HAVE_LIBLDAP */
        !          3312:                        yyerror("racoon not configured with --with-libldap");
        !          3313: #endif /* HAVE_LIBLDAP */
        !          3314: #else /* ENABLE_HYBRID */
        !          3315:                        yyerror("racoon not configured with --enable-hybrid");
        !          3316: #endif /* ENABLE_HYBRID */
        !          3317:                }
        !          3318:     break;
        !          3319: 
        !          3320:   case 147:
        !          3321: 
        !          3322: /* Line 1455 of yacc.c  */
        !          3323: #line 902 "cfparse.y"
        !          3324:     {
        !          3325: #ifdef ENABLE_HYBRID
        !          3326:                        isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_NONE;
        !          3327: #else
        !          3328:                        yyerror("racoon not configured with --enable-hybrid");
        !          3329: #endif
        !          3330:                }
        !          3331:     break;
        !          3332: 
        !          3333:   case 149:
        !          3334: 
        !          3335: /* Line 1455 of yacc.c  */
        !          3336: #line 911 "cfparse.y"
        !          3337:     {
        !          3338: #ifdef ENABLE_HYBRID
        !          3339:                        isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_SYSTEM;
        !          3340: #else
        !          3341:                        yyerror("racoon not configured with --enable-hybrid");
        !          3342: #endif
        !          3343:                }
        !          3344:     break;
        !          3345: 
        !          3346:   case 151:
        !          3347: 
        !          3348: /* Line 1455 of yacc.c  */
        !          3349: #line 920 "cfparse.y"
        !          3350:     {
        !          3351: #ifdef ENABLE_HYBRID
        !          3352: #ifdef HAVE_LIBRADIUS
        !          3353:                        isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_RADIUS;
        !          3354: #else /* HAVE_LIBRADIUS */
        !          3355:                        yyerror("racoon not configured with --with-libradius");
        !          3356: #endif /* HAVE_LIBRADIUS */
        !          3357: #else /* ENABLE_HYBRID */
        !          3358:                        yyerror("racoon not configured with --enable-hybrid");
        !          3359: #endif /* ENABLE_HYBRID */
        !          3360:                }
        !          3361:     break;
        !          3362: 
        !          3363:   case 153:
        !          3364: 
        !          3365: /* Line 1455 of yacc.c  */
        !          3366: #line 933 "cfparse.y"
        !          3367:     {
        !          3368: #ifdef ENABLE_HYBRID
        !          3369: #ifdef HAVE_LIBPAM
        !          3370:                        isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_PAM;
        !          3371: #else /* HAVE_LIBPAM */
        !          3372:                        yyerror("racoon not configured with --with-libpam");
        !          3373: #endif /* HAVE_LIBPAM */
        !          3374: #else /* ENABLE_HYBRID */
        !          3375:                        yyerror("racoon not configured with --enable-hybrid");
        !          3376: #endif /* ENABLE_HYBRID */
        !          3377:                }
        !          3378:     break;
        !          3379: 
        !          3380:   case 155:
        !          3381: 
        !          3382: /* Line 1455 of yacc.c  */
        !          3383: #line 946 "cfparse.y"
        !          3384:     {
        !          3385: #ifdef ENABLE_HYBRID
        !          3386:                        if (isakmp_cfg_resize_pool((yyvsp[(2) - (2)].num)) != 0)
        !          3387:                                yyerror("cannot allocate memory for pool");
        !          3388: #else /* ENABLE_HYBRID */
        !          3389:                        yyerror("racoon not configured with --enable-hybrid");
        !          3390: #endif /* ENABLE_HYBRID */
        !          3391:                }
        !          3392:     break;
        !          3393: 
        !          3394:   case 157:
        !          3395: 
        !          3396: /* Line 1455 of yacc.c  */
        !          3397: #line 956 "cfparse.y"
        !          3398:     {
        !          3399: #ifdef ENABLE_HYBRID
        !          3400:                        isakmp_cfg_config.pfs_group = (yyvsp[(2) - (2)].num);
        !          3401: #else /* ENABLE_HYBRID */
        !          3402:                        yyerror("racoon not configured with --enable-hybrid");
        !          3403: #endif /* ENABLE_HYBRID */
        !          3404:                }
        !          3405:     break;
        !          3406: 
        !          3407:   case 159:
        !          3408: 
        !          3409: /* Line 1455 of yacc.c  */
        !          3410: #line 965 "cfparse.y"
        !          3411:     {
        !          3412: #ifdef ENABLE_HYBRID
        !          3413:                        isakmp_cfg_config.save_passwd = (yyvsp[(2) - (2)].num);
        !          3414: #else /* ENABLE_HYBRID */
        !          3415:                        yyerror("racoon not configured with --enable-hybrid");
        !          3416: #endif /* ENABLE_HYBRID */
        !          3417:                }
        !          3418:     break;
        !          3419: 
        !          3420:   case 161:
        !          3421: 
        !          3422: /* Line 1455 of yacc.c  */
        !          3423: #line 974 "cfparse.y"
        !          3424:     {
        !          3425: #ifdef ENABLE_HYBRID
        !          3426:                        isakmp_cfg_config.auth_throttle = (yyvsp[(2) - (2)].num);
        !          3427: #else /* ENABLE_HYBRID */
        !          3428:                        yyerror("racoon not configured with --enable-hybrid");
        !          3429: #endif /* ENABLE_HYBRID */
        !          3430:                }
        !          3431:     break;
        !          3432: 
        !          3433:   case 163:
        !          3434: 
        !          3435: /* Line 1455 of yacc.c  */
        !          3436: #line 983 "cfparse.y"
        !          3437:     {
        !          3438: #ifdef ENABLE_HYBRID
        !          3439:                        isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_LOCAL;
        !          3440: #else /* ENABLE_HYBRID */
        !          3441:                        yyerror("racoon not configured with --enable-hybrid");
        !          3442: #endif /* ENABLE_HYBRID */
        !          3443:                }
        !          3444:     break;
        !          3445: 
        !          3446:   case 165:
        !          3447: 
        !          3448: /* Line 1455 of yacc.c  */
        !          3449: #line 992 "cfparse.y"
        !          3450:     {
        !          3451: #ifdef ENABLE_HYBRID
        !          3452: #ifdef HAVE_LIBRADIUS
        !          3453:                        isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_RADIUS;
        !          3454: #else /* HAVE_LIBRADIUS */
        !          3455:                        yyerror("racoon not configured with --with-libradius");
        !          3456: #endif /* HAVE_LIBRADIUS */
        !          3457: #else /* ENABLE_HYBRID */
        !          3458:                        yyerror("racoon not configured with --enable-hybrid");
        !          3459: #endif /* ENABLE_HYBRID */
        !          3460:                }
        !          3461:     break;
        !          3462: 
        !          3463:   case 167:
        !          3464: 
        !          3465: /* Line 1455 of yacc.c  */
        !          3466: #line 1005 "cfparse.y"
        !          3467:     {
        !          3468: #ifdef ENABLE_HYBRID
        !          3469: #ifdef HAVE_LIBLDAP
        !          3470:                        isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_LDAP;
        !          3471: #else /* HAVE_LIBLDAP */
        !          3472:                        yyerror("racoon not configured with --with-libldap");
        !          3473: #endif /* HAVE_LIBLDAP */
        !          3474: #else /* ENABLE_HYBRID */
        !          3475:                        yyerror("racoon not configured with --enable-hybrid");
        !          3476: #endif /* ENABLE_HYBRID */
        !          3477:                }
        !          3478:     break;
        !          3479: 
        !          3480:   case 169:
        !          3481: 
        !          3482: /* Line 1455 of yacc.c  */
        !          3483: #line 1018 "cfparse.y"
        !          3484:     {
        !          3485: #ifdef ENABLE_HYBRID
        !          3486:                        strncpy(&isakmp_cfg_config.motd[0], (yyvsp[(2) - (2)].val)->v, MAXPATHLEN);
        !          3487:                        isakmp_cfg_config.motd[MAXPATHLEN] = '\0';
        !          3488:                        vfree((yyvsp[(2) - (2)].val));
        !          3489: #else
        !          3490:                        yyerror("racoon not configured with --enable-hybrid");
        !          3491: #endif
        !          3492:                }
        !          3493:     break;
        !          3494: 
        !          3495:   case 173:
        !          3496: 
        !          3497: /* Line 1455 of yacc.c  */
        !          3498: #line 1036 "cfparse.y"
        !          3499:     {
        !          3500: #ifdef ENABLE_HYBRID
        !          3501:                        struct isakmp_cfg_config *icc = &isakmp_cfg_config;
        !          3502: 
        !          3503:                        if (icc->dns4_index > MAXNS)
        !          3504:                                yyerror("No more than %d DNS", MAXNS);
        !          3505:                        if (inet_pton(AF_INET, (yyvsp[(1) - (1)].val)->v,
        !          3506:                            &icc->dns4[icc->dns4_index++]) != 1)
        !          3507:                                yyerror("bad IPv4 DNS address.");
        !          3508: #else
        !          3509:                        yyerror("racoon not configured with --enable-hybrid");
        !          3510: #endif
        !          3511:                }
        !          3512:     break;
        !          3513: 
        !          3514:   case 176:
        !          3515: 
        !          3516: /* Line 1455 of yacc.c  */
        !          3517: #line 1057 "cfparse.y"
        !          3518:     {
        !          3519: #ifdef ENABLE_HYBRID
        !          3520:                        struct isakmp_cfg_config *icc = &isakmp_cfg_config;
        !          3521: 
        !          3522:                        if (icc->nbns4_index > MAXWINS)
        !          3523:                                yyerror("No more than %d WINS", MAXWINS);
        !          3524:                        if (inet_pton(AF_INET, (yyvsp[(1) - (1)].val)->v,
        !          3525:                            &icc->nbns4[icc->nbns4_index++]) != 1)
        !          3526:                                yyerror("bad IPv4 WINS address.");
        !          3527: #else
        !          3528:                        yyerror("racoon not configured with --enable-hybrid");
        !          3529: #endif
        !          3530:                }
        !          3531:     break;
        !          3532: 
        !          3533:   case 179:
        !          3534: 
        !          3535: /* Line 1455 of yacc.c  */
        !          3536: #line 1078 "cfparse.y"
        !          3537:     {
        !          3538: #ifdef ENABLE_HYBRID
        !          3539:                        struct isakmp_cfg_config *icc = &isakmp_cfg_config;
        !          3540:                        struct unity_network network;
        !          3541:                        memset(&network,0,sizeof(network));
        !          3542: 
        !          3543:                        if (inet_pton(AF_INET, (yyvsp[(1) - (2)].val)->v, &network.addr4) != 1)
        !          3544:                                yyerror("bad IPv4 SPLIT address.");
        !          3545: 
        !          3546:                        /* Turn $2 (the prefix) into a subnet mask */
        !          3547:                        network.mask4.s_addr = ((yyvsp[(2) - (2)].num)) ? htonl(~((1 << (32 - (yyvsp[(2) - (2)].num))) - 1)) : 0;
        !          3548: 
        !          3549:                        /* add the network to our list */ 
        !          3550:                        if (splitnet_list_add(&icc->splitnet_list, &network,&icc->splitnet_count))
        !          3551:                                yyerror("Unable to allocate split network");
        !          3552: #else
        !          3553:                        yyerror("racoon not configured with --enable-hybrid");
        !          3554: #endif
        !          3555:                }
        !          3556:     break;
        !          3557: 
        !          3558:   case 182:
        !          3559: 
        !          3560: /* Line 1455 of yacc.c  */
        !          3561: #line 1105 "cfparse.y"
        !          3562:     {
        !          3563: #ifdef ENABLE_HYBRID
        !          3564:                        char * groupname = NULL;
        !          3565:                        char ** grouplist = NULL;
        !          3566:                        struct isakmp_cfg_config *icc = &isakmp_cfg_config;
        !          3567: 
        !          3568:                        grouplist = racoon_realloc(icc->grouplist,
        !          3569:                                        sizeof(char**)*(icc->groupcount+1));
        !          3570:                        if (grouplist == NULL) {
        !          3571:                                yyerror("unable to allocate auth group list");
        !          3572:                                return -1;
        !          3573:                        }
        !          3574: 
        !          3575:                        groupname = racoon_malloc((yyvsp[(1) - (1)].val)->l+1);
        !          3576:                        if (groupname == NULL) {
        !          3577:                                yyerror("unable to allocate auth group name");
        !          3578:                                return -1;
        !          3579:                        }
        !          3580: 
        !          3581:                        memcpy(groupname,(yyvsp[(1) - (1)].val)->v,(yyvsp[(1) - (1)].val)->l);
        !          3582:                        groupname[(yyvsp[(1) - (1)].val)->l]=0;
        !          3583:                        grouplist[icc->groupcount]=groupname;
        !          3584:                        icc->grouplist = grouplist;
        !          3585:                        icc->groupcount++;
        !          3586: 
        !          3587:                        vfree((yyvsp[(1) - (1)].val));
        !          3588: #else
        !          3589:                        yyerror("racoon not configured with --enable-hybrid");
        !          3590: #endif
        !          3591:                }
        !          3592:     break;
        !          3593: 
        !          3594:   case 185:
        !          3595: 
        !          3596: /* Line 1455 of yacc.c  */
        !          3597: #line 1143 "cfparse.y"
        !          3598:     {
        !          3599: #ifdef ENABLE_HYBRID
        !          3600:                        struct isakmp_cfg_config *icc = &isakmp_cfg_config;
        !          3601: 
        !          3602:                        if (!icc->splitdns_len)
        !          3603:                        {
        !          3604:                                icc->splitdns_list = racoon_malloc((yyvsp[(1) - (1)].val)->l);
        !          3605:                                if(icc->splitdns_list == NULL) {
        !          3606:                                        yyerror("error allocating splitdns list buffer");
        !          3607:                                        return -1;
        !          3608:                                }
        !          3609:                                memcpy(icc->splitdns_list,(yyvsp[(1) - (1)].val)->v,(yyvsp[(1) - (1)].val)->l);
        !          3610:                                icc->splitdns_len = (yyvsp[(1) - (1)].val)->l;
        !          3611:                        }
        !          3612:                        else
        !          3613:                        {
        !          3614:                                int len = icc->splitdns_len + (yyvsp[(1) - (1)].val)->l + 1;
        !          3615:                                icc->splitdns_list = racoon_realloc(icc->splitdns_list,len);
        !          3616:                                if(icc->splitdns_list == NULL) {
        !          3617:                                        yyerror("error allocating splitdns list buffer");
        !          3618:                                        return -1;
        !          3619:                                }
        !          3620:                                icc->splitdns_list[icc->splitdns_len] = ',';
        !          3621:                                memcpy(icc->splitdns_list + icc->splitdns_len + 1, (yyvsp[(1) - (1)].val)->v, (yyvsp[(1) - (1)].val)->l);
        !          3622:                                icc->splitdns_len = len;
        !          3623:                        }
        !          3624:                        vfree((yyvsp[(1) - (1)].val));
        !          3625: #else
        !          3626:                        yyerror("racoon not configured with --enable-hybrid");
        !          3627: #endif
        !          3628:                }
        !          3629:     break;
        !          3630: 
        !          3631:   case 189:
        !          3632: 
        !          3633: /* Line 1455 of yacc.c  */
        !          3634: #line 1187 "cfparse.y"
        !          3635:     {
        !          3636:                        lcconf->retry_counter = (yyvsp[(2) - (2)].num);
        !          3637:                }
        !          3638:     break;
        !          3639: 
        !          3640:   case 191:
        !          3641: 
        !          3642: /* Line 1455 of yacc.c  */
        !          3643: #line 1192 "cfparse.y"
        !          3644:     {
        !          3645:                        lcconf->retry_interval = (yyvsp[(2) - (3)].num) * (yyvsp[(3) - (3)].num);
        !          3646:                }
        !          3647:     break;
        !          3648: 
        !          3649:   case 193:
        !          3650: 
        !          3651: /* Line 1455 of yacc.c  */
        !          3652: #line 1197 "cfparse.y"
        !          3653:     {
        !          3654:                        lcconf->count_persend = (yyvsp[(2) - (2)].num);
        !          3655:                }
        !          3656:     break;
        !          3657: 
        !          3658:   case 195:
        !          3659: 
        !          3660: /* Line 1455 of yacc.c  */
        !          3661: #line 1202 "cfparse.y"
        !          3662:     {
        !          3663:                        lcconf->retry_checkph1 = (yyvsp[(2) - (3)].num) * (yyvsp[(3) - (3)].num);
        !          3664:                }
        !          3665:     break;
        !          3666: 
        !          3667:   case 197:
        !          3668: 
        !          3669: /* Line 1455 of yacc.c  */
        !          3670: #line 1207 "cfparse.y"
        !          3671:     {
        !          3672:                        lcconf->wait_ph2complete = (yyvsp[(2) - (3)].num) * (yyvsp[(3) - (3)].num);
        !          3673:                }
        !          3674:     break;
        !          3675: 
        !          3676:   case 199:
        !          3677: 
        !          3678: /* Line 1455 of yacc.c  */
        !          3679: #line 1212 "cfparse.y"
        !          3680:     {
        !          3681: #ifdef ENABLE_NATT
        !          3682:                        if (libipsec_opt & LIBIPSEC_OPT_NATT)
        !          3683:                                lcconf->natt_ka_interval = (yyvsp[(2) - (3)].num) * (yyvsp[(3) - (3)].num);
        !          3684:                        else
        !          3685:                                yyerror("libipsec lacks NAT-T support");
        !          3686: #else
        !          3687:                        yyerror("NAT-T support not compiled in.");
        !          3688: #endif
        !          3689:                }
        !          3690:     break;
        !          3691: 
        !          3692:   case 201:
        !          3693: 
        !          3694: /* Line 1455 of yacc.c  */
        !          3695: #line 1228 "cfparse.y"
        !          3696:     {
        !          3697:                        cur_sainfo = newsainfo();
        !          3698:                        if (cur_sainfo == NULL) {
        !          3699:                                yyerror("failed to allocate sainfo");
        !          3700:                                return -1;
        !          3701:                        }
        !          3702:                }
        !          3703:     break;
        !          3704: 
        !          3705:   case 202:
        !          3706: 
        !          3707: /* Line 1455 of yacc.c  */
        !          3708: #line 1236 "cfparse.y"
        !          3709:     {
        !          3710:                        struct sainfo *check;
        !          3711: 
        !          3712:                        /* default */
        !          3713:                        if (cur_sainfo->algs[algclass_ipsec_enc] == 0) {
        !          3714:                                yyerror("no encryption algorithm at %s",
        !          3715:                                        sainfo2str(cur_sainfo));
        !          3716:                                return -1;
        !          3717:                        }
        !          3718:                        if (cur_sainfo->algs[algclass_ipsec_auth] == 0) {
        !          3719:                                yyerror("no authentication algorithm at %s",
        !          3720:                                        sainfo2str(cur_sainfo));
        !          3721:                                return -1;
        !          3722:                        }
        !          3723:                        if (cur_sainfo->algs[algclass_ipsec_comp] == 0) {
        !          3724:                                yyerror("no compression algorithm at %s",
        !          3725:                                        sainfo2str(cur_sainfo));
        !          3726:                                return -1;
        !          3727:                        }
        !          3728: 
        !          3729:                        /* duplicate check */
        !          3730:                        check = getsainfo(cur_sainfo->idsrc,
        !          3731:                                          cur_sainfo->iddst,
        !          3732:                                          cur_sainfo->id_i,
        !          3733:                                          NULL,
        !          3734:                                          cur_sainfo->remoteid);
        !          3735: 
        !          3736:                        if (check && ((check->idsrc != SAINFO_ANONYMOUS) &&
        !          3737:                                      (cur_sainfo->idsrc != SAINFO_ANONYMOUS))) {
        !          3738:                                yyerror("duplicated sainfo: %s",
        !          3739:                                        sainfo2str(cur_sainfo));
        !          3740:                                return -1;
        !          3741:                        }
        !          3742: 
        !          3743:                        inssainfo(cur_sainfo);
        !          3744:                }
        !          3745:     break;
        !          3746: 
        !          3747:   case 204:
        !          3748: 
        !          3749: /* Line 1455 of yacc.c  */
        !          3750: #line 1276 "cfparse.y"
        !          3751:     {
        !          3752:                        cur_sainfo->idsrc = SAINFO_ANONYMOUS;
        !          3753:                        cur_sainfo->iddst = SAINFO_ANONYMOUS;
        !          3754:                }
        !          3755:     break;
        !          3756: 
        !          3757:   case 205:
        !          3758: 
        !          3759: /* Line 1455 of yacc.c  */
        !          3760: #line 1281 "cfparse.y"
        !          3761:     {
        !          3762:                        cur_sainfo->idsrc = SAINFO_ANONYMOUS;
        !          3763:                        cur_sainfo->iddst = SAINFO_CLIENTADDR;
        !          3764:                }
        !          3765:     break;
        !          3766: 
        !          3767:   case 206:
        !          3768: 
        !          3769: /* Line 1455 of yacc.c  */
        !          3770: #line 1286 "cfparse.y"
        !          3771:     {
        !          3772:                        cur_sainfo->idsrc = SAINFO_ANONYMOUS;
        !          3773:                        cur_sainfo->iddst = (yyvsp[(2) - (2)].val);
        !          3774:                }
        !          3775:     break;
        !          3776: 
        !          3777:   case 207:
        !          3778: 
        !          3779: /* Line 1455 of yacc.c  */
        !          3780: #line 1291 "cfparse.y"
        !          3781:     {
        !          3782:                        cur_sainfo->idsrc = (yyvsp[(1) - (2)].val);
        !          3783:                        cur_sainfo->iddst = SAINFO_ANONYMOUS;
        !          3784:                }
        !          3785:     break;
        !          3786: 
        !          3787:   case 208:
        !          3788: 
        !          3789: /* Line 1455 of yacc.c  */
        !          3790: #line 1296 "cfparse.y"
        !          3791:     {
        !          3792:                        cur_sainfo->idsrc = (yyvsp[(1) - (2)].val);
        !          3793:                        cur_sainfo->iddst = SAINFO_CLIENTADDR;
        !          3794:                }
        !          3795:     break;
        !          3796: 
        !          3797:   case 209:
        !          3798: 
        !          3799: /* Line 1455 of yacc.c  */
        !          3800: #line 1301 "cfparse.y"
        !          3801:     {
        !          3802:                        cur_sainfo->idsrc = (yyvsp[(1) - (2)].val);
        !          3803:                        cur_sainfo->iddst = (yyvsp[(2) - (2)].val);
        !          3804:                }
        !          3805:     break;
        !          3806: 
        !          3807:   case 210:
        !          3808: 
        !          3809: /* Line 1455 of yacc.c  */
        !          3810: #line 1308 "cfparse.y"
        !          3811:     {
        !          3812:                        char portbuf[10];
        !          3813:                        struct sockaddr *saddr;
        !          3814: 
        !          3815:                        if (((yyvsp[(5) - (5)].num) == IPPROTO_ICMP || (yyvsp[(5) - (5)].num) == IPPROTO_ICMPV6)
        !          3816:                         && ((yyvsp[(4) - (5)].num) != IPSEC_PORT_ANY || (yyvsp[(4) - (5)].num) != IPSEC_PORT_ANY)) {
        !          3817:                                yyerror("port number must be \"any\".");
        !          3818:                                return -1;
        !          3819:                        }
        !          3820: 
        !          3821:                        snprintf(portbuf, sizeof(portbuf), "%lu", (yyvsp[(4) - (5)].num));
        !          3822:                        saddr = str2saddr((yyvsp[(2) - (5)].val)->v, portbuf);
        !          3823:                        vfree((yyvsp[(2) - (5)].val));
        !          3824:                        if (saddr == NULL)
        !          3825:                                return -1;
        !          3826: 
        !          3827:                        switch (saddr->sa_family) {
        !          3828:                        case AF_INET:
        !          3829:                                if ((yyvsp[(5) - (5)].num) == IPPROTO_ICMPV6) {
        !          3830:                                        yyerror("upper layer protocol mismatched.\n");
        !          3831:                                        racoon_free(saddr);
        !          3832:                                        return -1;
        !          3833:                                }
        !          3834:                                (yyval.val) = ipsecdoi_sockaddr2id(saddr,
        !          3835:                                                                                  (yyvsp[(3) - (5)].num) == ~0 ? (sizeof(struct in_addr) << 3): (yyvsp[(3) - (5)].num),
        !          3836:                                                                                  (yyvsp[(5) - (5)].num));
        !          3837:                                break;
        !          3838: #ifdef INET6
        !          3839:                        case AF_INET6:
        !          3840:                                if ((yyvsp[(5) - (5)].num) == IPPROTO_ICMP) {
        !          3841:                                        yyerror("upper layer protocol mismatched.\n");
        !          3842:                                        racoon_free(saddr);
        !          3843:                                        return -1;
        !          3844:                                }
        !          3845:                                (yyval.val) = ipsecdoi_sockaddr2id(saddr, 
        !          3846:                                                                                  (yyvsp[(3) - (5)].num) == ~0 ? (sizeof(struct in6_addr) << 3): (yyvsp[(3) - (5)].num),
        !          3847:                                                                                  (yyvsp[(5) - (5)].num));
        !          3848:                                break;
        !          3849: #endif
        !          3850:                        default:
        !          3851:                                yyerror("invalid family: %d", saddr->sa_family);
        !          3852:                                (yyval.val) = NULL;
        !          3853:                                break;
        !          3854:                        }
        !          3855:                        racoon_free(saddr);
        !          3856:                        if ((yyval.val) == NULL)
        !          3857:                                return -1;
        !          3858:                }
        !          3859:     break;
        !          3860: 
        !          3861:   case 211:
        !          3862: 
        !          3863: /* Line 1455 of yacc.c  */
        !          3864: #line 1357 "cfparse.y"
        !          3865:     {
        !          3866:                        char portbuf[10];
        !          3867:                        struct sockaddr *laddr = NULL, *haddr = NULL;
        !          3868:                        char *cur = NULL;
        !          3869: 
        !          3870:                        if (((yyvsp[(6) - (6)].num) == IPPROTO_ICMP || (yyvsp[(6) - (6)].num) == IPPROTO_ICMPV6)
        !          3871:                         && ((yyvsp[(5) - (6)].num) != IPSEC_PORT_ANY || (yyvsp[(5) - (6)].num) != IPSEC_PORT_ANY)) {
        !          3872:                                yyerror("port number must be \"any\".");
        !          3873:                                return -1;
        !          3874:                        }
        !          3875: 
        !          3876:                        snprintf(portbuf, sizeof(portbuf), "%lu", (yyvsp[(5) - (6)].num));
        !          3877:                        
        !          3878:                        laddr = str2saddr((yyvsp[(2) - (6)].val)->v, portbuf);
        !          3879:                        if (laddr == NULL) {
        !          3880:                            return -1;
        !          3881:                        }
        !          3882:                        vfree((yyvsp[(2) - (6)].val));
        !          3883:                        haddr = str2saddr((yyvsp[(3) - (6)].val)->v, portbuf);
        !          3884:                        if (haddr == NULL) {
        !          3885:                            racoon_free(laddr);
        !          3886:                            return -1;
        !          3887:                        }
        !          3888:                        vfree((yyvsp[(3) - (6)].val));
        !          3889: 
        !          3890:                        switch (laddr->sa_family) {
        !          3891:                        case AF_INET:
        !          3892:                                if ((yyvsp[(6) - (6)].num) == IPPROTO_ICMPV6) {
        !          3893:                                    yyerror("upper layer protocol mismatched.\n");
        !          3894:                                    if (laddr)
        !          3895:                                        racoon_free(laddr);
        !          3896:                                    if (haddr)
        !          3897:                                        racoon_free(haddr);
        !          3898:                                    return -1;
        !          3899:                                }
        !          3900:                                 (yyval.val) = ipsecdoi_sockrange2id(laddr, haddr, 
        !          3901:                                                           (yyvsp[(6) - (6)].num));
        !          3902:                                break;
        !          3903: #ifdef INET6
        !          3904:                        case AF_INET6:
        !          3905:                                if ((yyvsp[(6) - (6)].num) == IPPROTO_ICMP) {
        !          3906:                                        yyerror("upper layer protocol mismatched.\n");
        !          3907:                                        if (laddr)
        !          3908:                                            racoon_free(laddr);
        !          3909:                                        if (haddr)
        !          3910:                                            racoon_free(haddr);
        !          3911:                                        return -1;
        !          3912:                                }
        !          3913:                                (yyval.val) = ipsecdoi_sockrange2id(laddr, haddr, 
        !          3914:                                                               (yyvsp[(6) - (6)].num));
        !          3915:                                break;
        !          3916: #endif
        !          3917:                        default:
        !          3918:                                yyerror("invalid family: %d", laddr->sa_family);
        !          3919:                                (yyval.val) = NULL;
        !          3920:                                break;
        !          3921:                        }
        !          3922:                        if (laddr)
        !          3923:                            racoon_free(laddr);
        !          3924:                        if (haddr)
        !          3925:                            racoon_free(haddr);
        !          3926:                        if ((yyval.val) == NULL)
        !          3927:                                return -1;
        !          3928:                }
        !          3929:     break;
        !          3930: 
        !          3931:   case 212:
        !          3932: 
        !          3933: /* Line 1455 of yacc.c  */
        !          3934: #line 1422 "cfparse.y"
        !          3935:     {
        !          3936:                        struct ipsecdoi_id_b *id_b;
        !          3937: 
        !          3938:                        if ((yyvsp[(1) - (2)].num) == IDTYPE_ASN1DN) {
        !          3939:                                yyerror("id type forbidden: %d", (yyvsp[(1) - (2)].num));
        !          3940:                                (yyval.val) = NULL;
        !          3941:                                return -1;
        !          3942:                        }
        !          3943: 
        !          3944:                        (yyvsp[(2) - (2)].val)->l--;
        !          3945: 
        !          3946:                        (yyval.val) = vmalloc(sizeof(*id_b) + (yyvsp[(2) - (2)].val)->l);
        !          3947:                        if ((yyval.val) == NULL) {
        !          3948:                                yyerror("failed to allocate identifier");
        !          3949:                                return -1;
        !          3950:                        }
        !          3951: 
        !          3952:                        id_b = (struct ipsecdoi_id_b *)(yyval.val)->v;
        !          3953:                        id_b->type = idtype2doi((yyvsp[(1) - (2)].num));
        !          3954: 
        !          3955:                        id_b->proto_id = 0;
        !          3956:                        id_b->port = 0;
        !          3957: 
        !          3958:                        memcpy((yyval.val)->v + sizeof(*id_b), (yyvsp[(2) - (2)].val)->v, (yyvsp[(2) - (2)].val)->l);
        !          3959:                }
        !          3960:     break;
        !          3961: 
        !          3962:   case 213:
        !          3963: 
        !          3964: /* Line 1455 of yacc.c  */
        !          3965: #line 1450 "cfparse.y"
        !          3966:     {
        !          3967:                        cur_sainfo->id_i = NULL;
        !          3968:                }
        !          3969:     break;
        !          3970: 
        !          3971:   case 214:
        !          3972: 
        !          3973: /* Line 1455 of yacc.c  */
        !          3974: #line 1454 "cfparse.y"
        !          3975:     {
        !          3976:                        struct ipsecdoi_id_b *id_b;
        !          3977:                        vchar_t *idv;
        !          3978: 
        !          3979:                        if (set_identifier(&idv, (yyvsp[(2) - (3)].num), (yyvsp[(3) - (3)].val)) != 0) {
        !          3980:                                yyerror("failed to set identifer.\n");
        !          3981:                                return -1;
        !          3982:                        }
        !          3983:                        cur_sainfo->id_i = vmalloc(sizeof(*id_b) + idv->l);
        !          3984:                        if (cur_sainfo->id_i == NULL) {
        !          3985:                                yyerror("failed to allocate identifier");
        !          3986:                                return -1;
        !          3987:                        }
        !          3988: 
        !          3989:                        id_b = (struct ipsecdoi_id_b *)cur_sainfo->id_i->v;
        !          3990:                        id_b->type = idtype2doi((yyvsp[(2) - (3)].num));
        !          3991: 
        !          3992:                        id_b->proto_id = 0;
        !          3993:                        id_b->port = 0;
        !          3994: 
        !          3995:                        memcpy(cur_sainfo->id_i->v + sizeof(*id_b),
        !          3996:                               idv->v, idv->l);
        !          3997:                        vfree(idv);
        !          3998:                }
        !          3999:     break;
        !          4000: 
        !          4001:   case 215:
        !          4002: 
        !          4003: /* Line 1455 of yacc.c  */
        !          4004: #line 1479 "cfparse.y"
        !          4005:     {
        !          4006: #ifdef ENABLE_HYBRID
        !          4007:                        if ((cur_sainfo->group = vdup((yyvsp[(2) - (2)].val))) == NULL) {
        !          4008:                                yyerror("failed to set sainfo xauth group.\n");
        !          4009:                                return -1;
        !          4010:                        }
        !          4011: #else
        !          4012:                        yyerror("racoon not configured with --enable-hybrid");
        !          4013:                        return -1;
        !          4014: #endif
        !          4015:                }
        !          4016:     break;
        !          4017: 
        !          4018:   case 218:
        !          4019: 
        !          4020: /* Line 1455 of yacc.c  */
        !          4021: #line 1497 "cfparse.y"
        !          4022:     {
        !          4023:                        cur_sainfo->pfs_group = (yyvsp[(2) - (2)].num);
        !          4024:                }
        !          4025:     break;
        !          4026: 
        !          4027:   case 220:
        !          4028: 
        !          4029: /* Line 1455 of yacc.c  */
        !          4030: #line 1502 "cfparse.y"
        !          4031:     {
        !          4032:                        cur_sainfo->remoteid = (yyvsp[(2) - (2)].num);
        !          4033:                }
        !          4034:     break;
        !          4035: 
        !          4036:   case 222:
        !          4037: 
        !          4038: /* Line 1455 of yacc.c  */
        !          4039: #line 1507 "cfparse.y"
        !          4040:     {
        !          4041:                        cur_sainfo->lifetime = (yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num);
        !          4042:                }
        !          4043:     break;
        !          4044: 
        !          4045:   case 224:
        !          4046: 
        !          4047: /* Line 1455 of yacc.c  */
        !          4048: #line 1512 "cfparse.y"
        !          4049:     {
        !          4050: #if 1
        !          4051:                        yyerror("byte lifetime support is deprecated");
        !          4052:                        return -1;
        !          4053: #else
        !          4054:                        cur_sainfo->lifebyte = fix_lifebyte((yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num));
        !          4055:                        if (cur_sainfo->lifebyte == 0)
        !          4056:                                return -1;
        !          4057: #endif
        !          4058:                }
        !          4059:     break;
        !          4060: 
        !          4061:   case 226:
        !          4062: 
        !          4063: /* Line 1455 of yacc.c  */
        !          4064: #line 1523 "cfparse.y"
        !          4065:     {
        !          4066:                        cur_algclass = (yyvsp[(1) - (1)].num);
        !          4067:                }
        !          4068:     break;
        !          4069: 
        !          4070:   case 228:
        !          4071: 
        !          4072: /* Line 1455 of yacc.c  */
        !          4073: #line 1531 "cfparse.y"
        !          4074:     {
        !          4075:                        inssainfoalg(&cur_sainfo->algs[cur_algclass], (yyvsp[(1) - (1)].alg));
        !          4076:                }
        !          4077:     break;
        !          4078: 
        !          4079:   case 229:
        !          4080: 
        !          4081: /* Line 1455 of yacc.c  */
        !          4082: #line 1535 "cfparse.y"
        !          4083:     {
        !          4084:                        inssainfoalg(&cur_sainfo->algs[cur_algclass], (yyvsp[(1) - (1)].alg));
        !          4085:                }
        !          4086:     break;
        !          4087: 
        !          4088:   case 231:
        !          4089: 
        !          4090: /* Line 1455 of yacc.c  */
        !          4091: #line 1542 "cfparse.y"
        !          4092:     {
        !          4093:                        int defklen;
        !          4094: 
        !          4095:                        (yyval.alg) = newsainfoalg();
        !          4096:                        if ((yyval.alg) == NULL) {
        !          4097:                                yyerror("failed to get algorithm allocation");
        !          4098:                                return -1;
        !          4099:                        }
        !          4100: 
        !          4101:                        (yyval.alg)->alg = algtype2doi(cur_algclass, (yyvsp[(1) - (2)].num));
        !          4102:                        if ((yyval.alg)->alg == -1) {
        !          4103:                                yyerror("algorithm mismatched");
        !          4104:                                racoon_free((yyval.alg));
        !          4105:                                (yyval.alg) = NULL;
        !          4106:                                return -1;
        !          4107:                        }
        !          4108: 
        !          4109:                        defklen = default_keylen(cur_algclass, (yyvsp[(1) - (2)].num));
        !          4110:                        if (defklen == 0) {
        !          4111:                                if ((yyvsp[(2) - (2)].num)) {
        !          4112:                                        yyerror("keylen not allowed");
        !          4113:                                        racoon_free((yyval.alg));
        !          4114:                                        (yyval.alg) = NULL;
        !          4115:                                        return -1;
        !          4116:                                }
        !          4117:                        } else {
        !          4118:                                if ((yyvsp[(2) - (2)].num) && check_keylen(cur_algclass, (yyvsp[(1) - (2)].num), (yyvsp[(2) - (2)].num)) < 0) {
        !          4119:                                        yyerror("invalid keylen %d", (yyvsp[(2) - (2)].num));
        !          4120:                                        racoon_free((yyval.alg));
        !          4121:                                        (yyval.alg) = NULL;
        !          4122:                                        return -1;
        !          4123:                                }
        !          4124:                        }
        !          4125: 
        !          4126:                        if ((yyvsp[(2) - (2)].num))
        !          4127:                                (yyval.alg)->encklen = (yyvsp[(2) - (2)].num);
        !          4128:                        else
        !          4129:                                (yyval.alg)->encklen = defklen;
        !          4130: 
        !          4131:                        /* check if it's supported algorithm by kernel */
        !          4132:                        if (!(cur_algclass == algclass_ipsec_auth && (yyvsp[(1) - (2)].num) == algtype_non_auth)
        !          4133:                         && pk_checkalg(cur_algclass, (yyvsp[(1) - (2)].num), (yyval.alg)->encklen)) {
        !          4134:                                int a = algclass2doi(cur_algclass);
        !          4135:                                int b = algtype2doi(cur_algclass, (yyvsp[(1) - (2)].num));
        !          4136:                                if (a == IPSECDOI_ATTR_AUTH)
        !          4137:                                        a = IPSECDOI_PROTO_IPSEC_AH;
        !          4138:                                yyerror("algorithm %s not supported by the kernel (missing module?)",
        !          4139:                                        s_ipsecdoi_trns(a, b));
        !          4140:                                racoon_free((yyval.alg));
        !          4141:                                (yyval.alg) = NULL;
        !          4142:                                return -1;
        !          4143:                        }
        !          4144:                }
        !          4145:     break;
        !          4146: 
        !          4147:   case 232:
        !          4148: 
        !          4149: /* Line 1455 of yacc.c  */
        !          4150: #line 1597 "cfparse.y"
        !          4151:     { (yyval.num) = ~0; }
        !          4152:     break;
        !          4153: 
        !          4154:   case 233:
        !          4155: 
        !          4156: /* Line 1455 of yacc.c  */
        !          4157: #line 1598 "cfparse.y"
        !          4158:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          4159:     break;
        !          4160: 
        !          4161:   case 234:
        !          4162: 
        !          4163: /* Line 1455 of yacc.c  */
        !          4164: #line 1601 "cfparse.y"
        !          4165:     { (yyval.num) = IPSEC_PORT_ANY; }
        !          4166:     break;
        !          4167: 
        !          4168:   case 235:
        !          4169: 
        !          4170: /* Line 1455 of yacc.c  */
        !          4171: #line 1602 "cfparse.y"
        !          4172:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          4173:     break;
        !          4174: 
        !          4175:   case 236:
        !          4176: 
        !          4177: /* Line 1455 of yacc.c  */
        !          4178: #line 1603 "cfparse.y"
        !          4179:     { (yyval.num) = IPSEC_PORT_ANY; }
        !          4180:     break;
        !          4181: 
        !          4182:   case 237:
        !          4183: 
        !          4184: /* Line 1455 of yacc.c  */
        !          4185: #line 1606 "cfparse.y"
        !          4186:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          4187:     break;
        !          4188: 
        !          4189:   case 238:
        !          4190: 
        !          4191: /* Line 1455 of yacc.c  */
        !          4192: #line 1607 "cfparse.y"
        !          4193:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          4194:     break;
        !          4195: 
        !          4196:   case 239:
        !          4197: 
        !          4198: /* Line 1455 of yacc.c  */
        !          4199: #line 1608 "cfparse.y"
        !          4200:     { (yyval.num) = IPSEC_ULPROTO_ANY; }
        !          4201:     break;
        !          4202: 
        !          4203:   case 240:
        !          4204: 
        !          4205: /* Line 1455 of yacc.c  */
        !          4206: #line 1611 "cfparse.y"
        !          4207:     { (yyval.num) = 0; }
        !          4208:     break;
        !          4209: 
        !          4210:   case 241:
        !          4211: 
        !          4212: /* Line 1455 of yacc.c  */
        !          4213: #line 1612 "cfparse.y"
        !          4214:     { (yyval.num) = (yyvsp[(1) - (1)].num); }
        !          4215:     break;
        !          4216: 
        !          4217:   case 242:
        !          4218: 
        !          4219: /* Line 1455 of yacc.c  */
        !          4220: #line 1618 "cfparse.y"
        !          4221:     {
        !          4222:                        struct remoteconf *from, *new;
        !          4223: 
        !          4224:                        if (getrmconf_by_name((yyvsp[(2) - (4)].val)->v) != NULL) {
        !          4225:                                yyerror("named remoteconf \"%s\" already exists.");
        !          4226:                                return -1;
        !          4227:                        }
        !          4228: 
        !          4229:                        from = getrmconf_by_name((yyvsp[(4) - (4)].val)->v);
        !          4230:                        if (from == NULL) {
        !          4231:                                yyerror("named parent remoteconf \"%s\" does not exist.",
        !          4232:                                        (yyvsp[(4) - (4)].val)->v);
        !          4233:                                return -1;
        !          4234:                        }
        !          4235: 
        !          4236:                        new = duprmconf_shallow(from);
        !          4237:                        if (new == NULL) {
        !          4238:                                yyerror("failed to duplicate remoteconf from \"%s\".",
        !          4239:                                        (yyvsp[(4) - (4)].val)->v);
        !          4240:                                return -1;
        !          4241:                        }
        !          4242: 
        !          4243:                        new->name = racoon_strdup((yyvsp[(2) - (4)].val)->v);
        !          4244:                        cur_rmconf = new;
        !          4245: 
        !          4246:                        vfree((yyvsp[(2) - (4)].val));
        !          4247:                        vfree((yyvsp[(4) - (4)].val));
        !          4248:                }
        !          4249:     break;
        !          4250: 
        !          4251:   case 244:
        !          4252: 
        !          4253: /* Line 1455 of yacc.c  */
        !          4254: #line 1648 "cfparse.y"
        !          4255:     {
        !          4256:                        struct remoteconf *new;
        !          4257: 
        !          4258:                        if (getrmconf_by_name((yyvsp[(2) - (2)].val)->v) != NULL) {
        !          4259:                                yyerror("Named remoteconf \"%s\" already exists.");
        !          4260:                                return -1;
        !          4261:                        }
        !          4262: 
        !          4263:                        new = newrmconf();
        !          4264:                        if (new == NULL) {
        !          4265:                                yyerror("failed to get new remoteconf.");
        !          4266:                                return -1;
        !          4267:                        }
        !          4268:                        new->name = racoon_strdup((yyvsp[(2) - (2)].val)->v);
        !          4269:                        cur_rmconf = new;
        !          4270: 
        !          4271:                        vfree((yyvsp[(2) - (2)].val));
        !          4272:                }
        !          4273:     break;
        !          4274: 
        !          4275:   case 246:
        !          4276: 
        !          4277: /* Line 1455 of yacc.c  */
        !          4278: #line 1668 "cfparse.y"
        !          4279:     {
        !          4280:                        struct remoteconf *from, *new;
        !          4281: 
        !          4282:                        from = getrmconf((yyvsp[(4) - (4)].saddr), GETRMCONF_F_NO_ANONYMOUS);
        !          4283:                        if (from == NULL) {
        !          4284:                                yyerror("failed to get remoteconf for %s.",
        !          4285:                                        saddr2str((yyvsp[(4) - (4)].saddr)));
        !          4286:                                return -1;
        !          4287:                        }
        !          4288: 
        !          4289:                        new = duprmconf_shallow(from);
        !          4290:                        if (new == NULL) {
        !          4291:                                yyerror("failed to duplicate remoteconf from %s.",
        !          4292:                                        saddr2str((yyvsp[(4) - (4)].saddr)));
        !          4293:                                return -1;
        !          4294:                        }
        !          4295: 
        !          4296:                        racoon_free((yyvsp[(4) - (4)].saddr));
        !          4297:                        new->remote = (yyvsp[(2) - (4)].saddr);
        !          4298:                        cur_rmconf = new;
        !          4299:                }
        !          4300:     break;
        !          4301: 
        !          4302:   case 248:
        !          4303: 
        !          4304: /* Line 1455 of yacc.c  */
        !          4305: #line 1691 "cfparse.y"
        !          4306:     {
        !          4307:                        struct remoteconf *new;
        !          4308: 
        !          4309:                        new = newrmconf();
        !          4310:                        if (new == NULL) {
        !          4311:                                yyerror("failed to get new remoteconf.");
        !          4312:                                return -1;
        !          4313:                        }
        !          4314: 
        !          4315:                        new->remote = (yyvsp[(2) - (2)].saddr);
        !          4316:                        cur_rmconf = new;
        !          4317:                }
        !          4318:     break;
        !          4319: 
        !          4320:   case 250:
        !          4321: 
        !          4322: /* Line 1455 of yacc.c  */
        !          4323: #line 1708 "cfparse.y"
        !          4324:     {
        !          4325:                        /* check a exchange mode */
        !          4326:                        if (cur_rmconf->etypes == NULL) {
        !          4327:                                yyerror("no exchange mode specified.\n");
        !          4328:                                return -1;
        !          4329:                        }
        !          4330: 
        !          4331:                        if (cur_rmconf->idvtype == IDTYPE_UNDEFINED)
        !          4332:                                cur_rmconf->idvtype = IDTYPE_ADDRESS;
        !          4333: 
        !          4334:                        if (cur_rmconf->idvtype == IDTYPE_ASN1DN) {
        !          4335:                                if (cur_rmconf->mycertfile) {
        !          4336:                                        if (cur_rmconf->idv)
        !          4337:                                                yywarn("Both CERT and ASN1 ID "
        !          4338:                                                       "are set. Hope this is OK.\n");
        !          4339:                                        /* TODO: Preparse the DN here */
        !          4340:                                } else if (cur_rmconf->idv) {
        !          4341:                                        /* OK, using asn1dn without X.509. */
        !          4342:                                } else {
        !          4343:                                        yyerror("ASN1 ID not specified "
        !          4344:                                                "and no CERT defined!\n");
        !          4345:                                        return -1;
        !          4346:                                }
        !          4347:                        }
        !          4348: 
        !          4349:                        if (duprmconf_finish(cur_rmconf))
        !          4350:                                return -1;
        !          4351: 
        !          4352: #if 0
        !          4353:                        /* this pointer copy will never happen, because duprmconf_shallow
        !          4354:                         * already copied all pointers.
        !          4355:                         */
        !          4356:                        if (cur_rmconf->spspec == NULL &&
        !          4357:                            cur_rmconf->inherited_from != NULL) {
        !          4358:                                cur_rmconf->spspec = cur_rmconf->inherited_from->spspec;
        !          4359:                        }
        !          4360: #endif
        !          4361:                        if (set_isakmp_proposal(cur_rmconf) != 0)
        !          4362:                                return -1;
        !          4363: 
        !          4364:                        /* DH group settting if aggressive mode is there. */
        !          4365:                        if (check_etypeok(cur_rmconf, (void*) ISAKMP_ETYPE_AGG)) {
        !          4366:                                struct isakmpsa *p;
        !          4367:                                int b = 0;
        !          4368: 
        !          4369:                                /* DH group */
        !          4370:                                for (p = cur_rmconf->proposal; p; p = p->next) {
        !          4371:                                        if (b == 0 || (b && b == p->dh_group)) {
        !          4372:                                                b = p->dh_group;
        !          4373:                                                continue;
        !          4374:                                        }
        !          4375:                                        yyerror("DH group must be equal "
        !          4376:                                                "in all proposals "
        !          4377:                                                "when aggressive mode is "
        !          4378:                                                "used.\n");
        !          4379:                                        return -1;
        !          4380:                                }
        !          4381:                                cur_rmconf->dh_group = b;
        !          4382: 
        !          4383:                                if (cur_rmconf->dh_group == 0) {
        !          4384:                                        yyerror("DH group must be set in the proposal.\n");
        !          4385:                                        return -1;
        !          4386:                                }
        !          4387: 
        !          4388:                                /* DH group settting if PFS is required. */
        !          4389:                                if (oakley_setdhgroup(cur_rmconf->dh_group,
        !          4390:                                                &cur_rmconf->dhgrp) < 0) {
        !          4391:                                        yyerror("failed to set DH value.\n");
        !          4392:                                        return -1;
        !          4393:                                }
        !          4394:                        }
        !          4395: 
        !          4396:                        insrmconf(cur_rmconf);
        !          4397:                }
        !          4398:     break;
        !          4399: 
        !          4400:   case 251:
        !          4401: 
        !          4402: /* Line 1455 of yacc.c  */
        !          4403: #line 1785 "cfparse.y"
        !          4404:     {
        !          4405:                        (yyval.saddr) = newsaddr(sizeof(struct sockaddr));
        !          4406:                        (yyval.saddr)->sa_family = AF_UNSPEC;
        !          4407:                        ((struct sockaddr_in *)(yyval.saddr))->sin_port = htons((yyvsp[(2) - (2)].num));
        !          4408:                }
        !          4409:     break;
        !          4410: 
        !          4411:   case 252:
        !          4412: 
        !          4413: /* Line 1455 of yacc.c  */
        !          4414: #line 1791 "cfparse.y"
        !          4415:     {
        !          4416:                        (yyval.saddr) = (yyvsp[(1) - (1)].saddr);
        !          4417:                        if ((yyval.saddr) == NULL) {
        !          4418:                                yyerror("failed to allocate sockaddr");
        !          4419:                                return -1;
        !          4420:                        }
        !          4421:                }
        !          4422:     break;
        !          4423: 
        !          4424:   case 255:
        !          4425: 
        !          4426: /* Line 1455 of yacc.c  */
        !          4427: #line 1805 "cfparse.y"
        !          4428:     {
        !          4429:                        if (cur_rmconf->remote != NULL) {
        !          4430:                                yyerror("remote_address already specified");
        !          4431:                                return -1;
        !          4432:                        }
        !          4433:                        cur_rmconf->remote = (yyvsp[(2) - (2)].saddr);
        !          4434:                }
        !          4435:     break;
        !          4436: 
        !          4437:   case 257:
        !          4438: 
        !          4439: /* Line 1455 of yacc.c  */
        !          4440: #line 1814 "cfparse.y"
        !          4441:     {
        !          4442:                        cur_rmconf->etypes = NULL;
        !          4443:                }
        !          4444:     break;
        !          4445: 
        !          4446:   case 259:
        !          4447: 
        !          4448: /* Line 1455 of yacc.c  */
        !          4449: #line 1818 "cfparse.y"
        !          4450:     { cur_rmconf->doitype = (yyvsp[(2) - (2)].num); }
        !          4451:     break;
        !          4452: 
        !          4453:   case 261:
        !          4454: 
        !          4455: /* Line 1455 of yacc.c  */
        !          4456: #line 1819 "cfparse.y"
        !          4457:     { cur_rmconf->sittype = (yyvsp[(2) - (2)].num); }
        !          4458:     break;
        !          4459: 
        !          4460:   case 264:
        !          4461: 
        !          4462: /* Line 1455 of yacc.c  */
        !          4463: #line 1822 "cfparse.y"
        !          4464:     {
        !          4465:                        yywarn("This directive without certtype will be removed!\n");
        !          4466:                        yywarn("Please use 'peers_certfile x509 \"%s\";' instead\n", (yyvsp[(2) - (2)].val)->v);
        !          4467: 
        !          4468:                        if (cur_rmconf->peerscert != NULL) {
        !          4469:                                yyerror("peers_certfile already defined\n");
        !          4470:                                return -1;
        !          4471:                        }
        !          4472: 
        !          4473:                        if (load_x509((yyvsp[(2) - (2)].val)->v, &cur_rmconf->peerscertfile,
        !          4474:                                      &cur_rmconf->peerscert)) {
        !          4475:                                yyerror("failed to load certificate \"%s\"\n",
        !          4476:                                        (yyvsp[(2) - (2)].val)->v);
        !          4477:                                return -1;
        !          4478:                        }
        !          4479: 
        !          4480:                        vfree((yyvsp[(2) - (2)].val));
        !          4481:                }
        !          4482:     break;
        !          4483: 
        !          4484:   case 266:
        !          4485: 
        !          4486: /* Line 1455 of yacc.c  */
        !          4487: #line 1842 "cfparse.y"
        !          4488:     {
        !          4489:                        if (cur_rmconf->peerscert != NULL) {
        !          4490:                                yyerror("peers_certfile already defined\n");
        !          4491:                                return -1;
        !          4492:                        }
        !          4493: 
        !          4494:                        if (load_x509((yyvsp[(3) - (3)].val)->v, &cur_rmconf->peerscertfile,
        !          4495:                                      &cur_rmconf->peerscert)) {
        !          4496:                                yyerror("failed to load certificate \"%s\"\n",
        !          4497:                                        (yyvsp[(3) - (3)].val)->v);
        !          4498:                                return -1;
        !          4499:                        }
        !          4500: 
        !          4501:                        vfree((yyvsp[(3) - (3)].val));
        !          4502:                }
        !          4503:     break;
        !          4504: 
        !          4505:   case 268:
        !          4506: 
        !          4507: /* Line 1455 of yacc.c  */
        !          4508: #line 1859 "cfparse.y"
        !          4509:     {
        !          4510:                        char path[MAXPATHLEN];
        !          4511:                        int ret = 0;
        !          4512: 
        !          4513:                        if (cur_rmconf->peerscert != NULL) {
        !          4514:                                yyerror("peers_certfile already defined\n");
        !          4515:                                return -1;
        !          4516:                        }
        !          4517: 
        !          4518:                        cur_rmconf->peerscert = vmalloc(1);
        !          4519:                        if (cur_rmconf->peerscert == NULL) {
        !          4520:                                yyerror("failed to allocate peerscert");
        !          4521:                                return -1;
        !          4522:                        }
        !          4523:                        cur_rmconf->peerscert->v[0] = ISAKMP_CERT_PLAINRSA;
        !          4524: 
        !          4525:                        getpathname(path, sizeof(path),
        !          4526:                                    LC_PATHTYPE_CERT, (yyvsp[(3) - (3)].val)->v);
        !          4527:                        if (rsa_parse_file(cur_rmconf->rsa_public, path,
        !          4528:                                           RSA_TYPE_PUBLIC)) {
        !          4529:                                yyerror("Couldn't parse keyfile.\n", path);
        !          4530:                                return -1;
        !          4531:                        }
        !          4532:                        plog(LLV_DEBUG, LOCATION, NULL,
        !          4533:                             "Public PlainRSA keyfile parsed: %s\n", path);
        !          4534: 
        !          4535:                        vfree((yyvsp[(3) - (3)].val));
        !          4536:                }
        !          4537:     break;
        !          4538: 
        !          4539:   case 270:
        !          4540: 
        !          4541: /* Line 1455 of yacc.c  */
        !          4542: #line 1889 "cfparse.y"
        !          4543:     {
        !          4544:                        if (cur_rmconf->peerscert != NULL) {
        !          4545:                                yyerror("peers_certfile already defined\n");
        !          4546:                                return -1;
        !          4547:                        }
        !          4548:                        cur_rmconf->peerscert = vmalloc(1);
        !          4549:                        if (cur_rmconf->peerscert == NULL) {
        !          4550:                                yyerror("failed to allocate peerscert");
        !          4551:                                return -1;
        !          4552:                        }
        !          4553:                        cur_rmconf->peerscert->v[0] = ISAKMP_CERT_DNS;
        !          4554:                }
        !          4555:     break;
        !          4556: 
        !          4557:   case 272:
        !          4558: 
        !          4559: /* Line 1455 of yacc.c  */
        !          4560: #line 1903 "cfparse.y"
        !          4561:     {
        !          4562:                        if (cur_rmconf->cacert != NULL) {
        !          4563:                                yyerror("ca_type already defined\n");
        !          4564:                                return -1;
        !          4565:                        }
        !          4566: 
        !          4567:                        if (load_x509((yyvsp[(3) - (3)].val)->v, &cur_rmconf->cacertfile,
        !          4568:                                      &cur_rmconf->cacert)) {
        !          4569:                                yyerror("failed to load certificate \"%s\"\n",
        !          4570:                                        (yyvsp[(3) - (3)].val)->v);
        !          4571:                                return -1;
        !          4572:                        }
        !          4573: 
        !          4574:                        vfree((yyvsp[(3) - (3)].val));
        !          4575:                }
        !          4576:     break;
        !          4577: 
        !          4578:   case 274:
        !          4579: 
        !          4580: /* Line 1455 of yacc.c  */
        !          4581: #line 1919 "cfparse.y"
        !          4582:     { cur_rmconf->verify_cert = (yyvsp[(2) - (2)].num); }
        !          4583:     break;
        !          4584: 
        !          4585:   case 276:
        !          4586: 
        !          4587: /* Line 1455 of yacc.c  */
        !          4588: #line 1920 "cfparse.y"
        !          4589:     { cur_rmconf->send_cert = (yyvsp[(2) - (2)].num); }
        !          4590:     break;
        !          4591: 
        !          4592:   case 278:
        !          4593: 
        !          4594: /* Line 1455 of yacc.c  */
        !          4595: #line 1921 "cfparse.y"
        !          4596:     { cur_rmconf->send_cr = (yyvsp[(2) - (2)].num); }
        !          4597:     break;
        !          4598: 
        !          4599:   case 280:
        !          4600: 
        !          4601: /* Line 1455 of yacc.c  */
        !          4602: #line 1922 "cfparse.y"
        !          4603:     { cur_rmconf->match_empty_cr = (yyvsp[(2) - (2)].num); }
        !          4604:     break;
        !          4605: 
        !          4606:   case 282:
        !          4607: 
        !          4608: /* Line 1455 of yacc.c  */
        !          4609: #line 1924 "cfparse.y"
        !          4610:     {
        !          4611:                        if (set_identifier(&cur_rmconf->idv, (yyvsp[(2) - (3)].num), (yyvsp[(3) - (3)].val)) != 0) {
        !          4612:                                yyerror("failed to set identifer.\n");
        !          4613:                                return -1;
        !          4614:                        }
        !          4615:                        cur_rmconf->idvtype = (yyvsp[(2) - (3)].num);
        !          4616:                }
        !          4617:     break;
        !          4618: 
        !          4619:   case 284:
        !          4620: 
        !          4621: /* Line 1455 of yacc.c  */
        !          4622: #line 1933 "cfparse.y"
        !          4623:     {
        !          4624:                        if (set_identifier_qual(&cur_rmconf->idv, (yyvsp[(2) - (4)].num), (yyvsp[(4) - (4)].val), (yyvsp[(3) - (4)].num)) != 0) {
        !          4625:                                yyerror("failed to set identifer.\n");
        !          4626:                                return -1;
        !          4627:                        }
        !          4628:                        cur_rmconf->idvtype = (yyvsp[(2) - (4)].num);
        !          4629:                }
        !          4630:     break;
        !          4631: 
        !          4632:   case 286:
        !          4633: 
        !          4634: /* Line 1455 of yacc.c  */
        !          4635: #line 1942 "cfparse.y"
        !          4636:     {
        !          4637: #ifdef ENABLE_HYBRID
        !          4638:                        /* formerly identifier type login */
        !          4639:                        if (xauth_rmconf_used(&cur_rmconf->xauth) == -1) {
        !          4640:                                yyerror("failed to allocate xauth state\n");
        !          4641:                                return -1;
        !          4642:                        }
        !          4643:                        if ((cur_rmconf->xauth->login = vdup((yyvsp[(2) - (2)].val))) == NULL) {
        !          4644:                                yyerror("failed to set identifer.\n");
        !          4645:                                return -1;
        !          4646:                        }
        !          4647: #else
        !          4648:                        yyerror("racoon not configured with --enable-hybrid");
        !          4649: #endif
        !          4650:                }
        !          4651:     break;
        !          4652: 
        !          4653:   case 288:
        !          4654: 
        !          4655: /* Line 1455 of yacc.c  */
        !          4656: #line 1959 "cfparse.y"
        !          4657:     {
        !          4658:                        struct idspec  *id;
        !          4659:                        id = newidspec();
        !          4660:                        if (id == NULL) {
        !          4661:                                yyerror("failed to allocate idspec");
        !          4662:                                return -1;
        !          4663:                        }
        !          4664:                        if (set_identifier(&id->id, (yyvsp[(2) - (3)].num), (yyvsp[(3) - (3)].val)) != 0) {
        !          4665:                                yyerror("failed to set identifer.\n");
        !          4666:                                racoon_free(id);
        !          4667:                                return -1;
        !          4668:                        }
        !          4669:                        id->idtype = (yyvsp[(2) - (3)].num);
        !          4670:                        genlist_append (cur_rmconf->idvl_p, id);
        !          4671:                }
        !          4672:     break;
        !          4673: 
        !          4674:   case 290:
        !          4675: 
        !          4676: /* Line 1455 of yacc.c  */
        !          4677: #line 1976 "cfparse.y"
        !          4678:     {
        !          4679:                        struct idspec  *id;
        !          4680:                        id = newidspec();
        !          4681:                        if (id == NULL) {
        !          4682:                                yyerror("failed to allocate idspec");
        !          4683:                                return -1;
        !          4684:                        }
        !          4685:                        if (set_identifier_qual(&id->id, (yyvsp[(2) - (4)].num), (yyvsp[(4) - (4)].val), (yyvsp[(3) - (4)].num)) != 0) {
        !          4686:                                yyerror("failed to set identifer.\n");
        !          4687:                                racoon_free(id);
        !          4688:                                return -1;
        !          4689:                        }
        !          4690:                        id->idtype = (yyvsp[(2) - (4)].num);
        !          4691:                        genlist_append (cur_rmconf->idvl_p, id);
        !          4692:                }
        !          4693:     break;
        !          4694: 
        !          4695:   case 292:
        !          4696: 
        !          4697: /* Line 1455 of yacc.c  */
        !          4698: #line 1992 "cfparse.y"
        !          4699:     { cur_rmconf->verify_identifier = (yyvsp[(2) - (2)].num); }
        !          4700:     break;
        !          4701: 
        !          4702:   case 294:
        !          4703: 
        !          4704: /* Line 1455 of yacc.c  */
        !          4705: #line 1993 "cfparse.y"
        !          4706:     { cur_rmconf->nonce_size = (yyvsp[(2) - (2)].num); }
        !          4707:     break;
        !          4708: 
        !          4709:   case 296:
        !          4710: 
        !          4711: /* Line 1455 of yacc.c  */
        !          4712: #line 1995 "cfparse.y"
        !          4713:     {
        !          4714:                        yyerror("dh_group cannot be defined here.");
        !          4715:                        return -1;
        !          4716:                }
        !          4717:     break;
        !          4718: 
        !          4719:   case 298:
        !          4720: 
        !          4721: /* Line 1455 of yacc.c  */
        !          4722: #line 2000 "cfparse.y"
        !          4723:     { cur_rmconf->passive = (yyvsp[(2) - (2)].num); }
        !          4724:     break;
        !          4725: 
        !          4726:   case 300:
        !          4727: 
        !          4728: /* Line 1455 of yacc.c  */
        !          4729: #line 2001 "cfparse.y"
        !          4730:     { cur_rmconf->ike_frag = (yyvsp[(2) - (2)].num); }
        !          4731:     break;
        !          4732: 
        !          4733:   case 302:
        !          4734: 
        !          4735: /* Line 1455 of yacc.c  */
        !          4736: #line 2002 "cfparse.y"
        !          4737:     { cur_rmconf->ike_frag = ISAKMP_FRAG_FORCE; }
        !          4738:     break;
        !          4739: 
        !          4740:   case 304:
        !          4741: 
        !          4742: /* Line 1455 of yacc.c  */
        !          4743: #line 2003 "cfparse.y"
        !          4744:     { 
        !          4745: #ifdef SADB_X_EXT_NAT_T_FRAG
        !          4746:                        if (libipsec_opt & LIBIPSEC_OPT_FRAG)
        !          4747:                                cur_rmconf->esp_frag = (yyvsp[(2) - (2)].num); 
        !          4748:                        else
        !          4749:                                yywarn("libipsec lacks IKE frag support");
        !          4750: #else
        !          4751:                        yywarn("Your kernel does not support esp_frag");
        !          4752: #endif
        !          4753:                }
        !          4754:     break;
        !          4755: 
        !          4756:   case 306:
        !          4757: 
        !          4758: /* Line 1455 of yacc.c  */
        !          4759: #line 2013 "cfparse.y"
        !          4760:     { 
        !          4761:                        if (cur_rmconf->script[SCRIPT_PHASE1_UP] != NULL)
        !          4762:                                vfree(cur_rmconf->script[SCRIPT_PHASE1_UP]);
        !          4763: 
        !          4764:                        cur_rmconf->script[SCRIPT_PHASE1_UP] = 
        !          4765:                            script_path_add(vdup((yyvsp[(2) - (3)].val)));
        !          4766:                }
        !          4767:     break;
        !          4768: 
        !          4769:   case 308:
        !          4770: 
        !          4771: /* Line 1455 of yacc.c  */
        !          4772: #line 2020 "cfparse.y"
        !          4773:     { 
        !          4774:                        if (cur_rmconf->script[SCRIPT_PHASE1_DOWN] != NULL)
        !          4775:                                vfree(cur_rmconf->script[SCRIPT_PHASE1_DOWN]);
        !          4776: 
        !          4777:                        cur_rmconf->script[SCRIPT_PHASE1_DOWN] = 
        !          4778:                            script_path_add(vdup((yyvsp[(2) - (3)].val)));
        !          4779:                }
        !          4780:     break;
        !          4781: 
        !          4782:   case 310:
        !          4783: 
        !          4784: /* Line 1455 of yacc.c  */
        !          4785: #line 2027 "cfparse.y"
        !          4786:     { 
        !          4787:                        if (cur_rmconf->script[SCRIPT_PHASE1_DEAD] != NULL)
        !          4788:                                vfree(cur_rmconf->script[SCRIPT_PHASE1_DEAD]);
        !          4789: 
        !          4790:                        cur_rmconf->script[SCRIPT_PHASE1_DEAD] = 
        !          4791:                            script_path_add(vdup((yyvsp[(2) - (3)].val)));
        !          4792:                }
        !          4793:     break;
        !          4794: 
        !          4795:   case 312:
        !          4796: 
        !          4797: /* Line 1455 of yacc.c  */
        !          4798: #line 2034 "cfparse.y"
        !          4799:     { cur_rmconf->mode_cfg = (yyvsp[(2) - (2)].num); }
        !          4800:     break;
        !          4801: 
        !          4802:   case 314:
        !          4803: 
        !          4804: /* Line 1455 of yacc.c  */
        !          4805: #line 2035 "cfparse.y"
        !          4806:     {
        !          4807:                        cur_rmconf->weak_phase1_check = (yyvsp[(2) - (2)].num);
        !          4808:                }
        !          4809:     break;
        !          4810: 
        !          4811:   case 316:
        !          4812: 
        !          4813: /* Line 1455 of yacc.c  */
        !          4814: #line 2038 "cfparse.y"
        !          4815:     { cur_rmconf->gen_policy = (yyvsp[(2) - (2)].num); }
        !          4816:     break;
        !          4817: 
        !          4818:   case 318:
        !          4819: 
        !          4820: /* Line 1455 of yacc.c  */
        !          4821: #line 2039 "cfparse.y"
        !          4822:     { cur_rmconf->gen_policy = (yyvsp[(2) - (2)].num); }
        !          4823:     break;
        !          4824: 
        !          4825:   case 320:
        !          4826: 
        !          4827: /* Line 1455 of yacc.c  */
        !          4828: #line 2040 "cfparse.y"
        !          4829:     { cur_rmconf->support_proxy = (yyvsp[(2) - (2)].num); }
        !          4830:     break;
        !          4831: 
        !          4832:   case 322:
        !          4833: 
        !          4834: /* Line 1455 of yacc.c  */
        !          4835: #line 2041 "cfparse.y"
        !          4836:     { cur_rmconf->ini_contact = (yyvsp[(2) - (2)].num); }
        !          4837:     break;
        !          4838: 
        !          4839:   case 324:
        !          4840: 
        !          4841: /* Line 1455 of yacc.c  */
        !          4842: #line 2043 "cfparse.y"
        !          4843:     {
        !          4844: #ifdef ENABLE_NATT
        !          4845:                        if (libipsec_opt & LIBIPSEC_OPT_NATT)
        !          4846:                                cur_rmconf->nat_traversal = (yyvsp[(2) - (2)].num);
        !          4847:                        else
        !          4848:                                yyerror("libipsec lacks NAT-T support");
        !          4849: #else
        !          4850:                        yyerror("NAT-T support not compiled in.");
        !          4851: #endif
        !          4852:                }
        !          4853:     break;
        !          4854: 
        !          4855:   case 326:
        !          4856: 
        !          4857: /* Line 1455 of yacc.c  */
        !          4858: #line 2054 "cfparse.y"
        !          4859:     {
        !          4860: #ifdef ENABLE_NATT
        !          4861:                        if (libipsec_opt & LIBIPSEC_OPT_NATT)
        !          4862:                                cur_rmconf->nat_traversal = NATT_FORCE;
        !          4863:                        else
        !          4864:                                yyerror("libipsec lacks NAT-T support");
        !          4865: #else
        !          4866:                        yyerror("NAT-T support not compiled in.");
        !          4867: #endif
        !          4868:                }
        !          4869:     break;
        !          4870: 
        !          4871:   case 328:
        !          4872: 
        !          4873: /* Line 1455 of yacc.c  */
        !          4874: #line 2065 "cfparse.y"
        !          4875:     {
        !          4876: #ifdef ENABLE_DPD
        !          4877:                        cur_rmconf->dpd = (yyvsp[(2) - (2)].num);
        !          4878: #else
        !          4879:                        yyerror("DPD support not compiled in.");
        !          4880: #endif
        !          4881:                }
        !          4882:     break;
        !          4883: 
        !          4884:   case 330:
        !          4885: 
        !          4886: /* Line 1455 of yacc.c  */
        !          4887: #line 2073 "cfparse.y"
        !          4888:     {
        !          4889: #ifdef ENABLE_DPD
        !          4890:                        cur_rmconf->dpd_interval = (yyvsp[(2) - (2)].num);
        !          4891: #else
        !          4892:                        yyerror("DPD support not compiled in.");
        !          4893: #endif
        !          4894:                }
        !          4895:     break;
        !          4896: 
        !          4897:   case 332:
        !          4898: 
        !          4899: /* Line 1455 of yacc.c  */
        !          4900: #line 2082 "cfparse.y"
        !          4901:     {
        !          4902: #ifdef ENABLE_DPD
        !          4903:                        cur_rmconf->dpd_retry = (yyvsp[(2) - (2)].num);
        !          4904: #else
        !          4905:                        yyerror("DPD support not compiled in.");
        !          4906: #endif
        !          4907:                }
        !          4908:     break;
        !          4909: 
        !          4910:   case 334:
        !          4911: 
        !          4912: /* Line 1455 of yacc.c  */
        !          4913: #line 2091 "cfparse.y"
        !          4914:     {
        !          4915: #ifdef ENABLE_DPD
        !          4916:                        cur_rmconf->dpd_maxfails = (yyvsp[(2) - (2)].num);
        !          4917: #else
        !          4918:                        yyerror("DPD support not compiled in.");
        !          4919: #endif
        !          4920:                }
        !          4921:     break;
        !          4922: 
        !          4923:   case 336:
        !          4924: 
        !          4925: /* Line 1455 of yacc.c  */
        !          4926: #line 2099 "cfparse.y"
        !          4927:     { cur_rmconf->rekey = (yyvsp[(2) - (2)].num); }
        !          4928:     break;
        !          4929: 
        !          4930:   case 338:
        !          4931: 
        !          4932: /* Line 1455 of yacc.c  */
        !          4933: #line 2100 "cfparse.y"
        !          4934:     { cur_rmconf->rekey = REKEY_FORCE; }
        !          4935:     break;
        !          4936: 
        !          4937:   case 340:
        !          4938: 
        !          4939: /* Line 1455 of yacc.c  */
        !          4940: #line 2102 "cfparse.y"
        !          4941:     {
        !          4942:                        cur_rmconf->ph1id = (yyvsp[(2) - (2)].num);
        !          4943:                }
        !          4944:     break;
        !          4945: 
        !          4946:   case 342:
        !          4947: 
        !          4948: /* Line 1455 of yacc.c  */
        !          4949: #line 2107 "cfparse.y"
        !          4950:     {
        !          4951:                        cur_rmconf->lifetime = (yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num);
        !          4952:                }
        !          4953:     break;
        !          4954: 
        !          4955:   case 344:
        !          4956: 
        !          4957: /* Line 1455 of yacc.c  */
        !          4958: #line 2111 "cfparse.y"
        !          4959:     { cur_rmconf->pcheck_level = (yyvsp[(2) - (2)].num); }
        !          4960:     break;
        !          4961: 
        !          4962:   case 346:
        !          4963: 
        !          4964: /* Line 1455 of yacc.c  */
        !          4965: #line 2113 "cfparse.y"
        !          4966:     {
        !          4967: #if 1
        !          4968:                        yyerror("byte lifetime support is deprecated in Phase1");
        !          4969:                        return -1;
        !          4970: #else
        !          4971:                        yywarn("the lifetime of bytes in phase 1 "
        !          4972:                                "will be ignored at the moment.");
        !          4973:                        cur_rmconf->lifebyte = fix_lifebyte((yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num));
        !          4974:                        if (cur_rmconf->lifebyte == 0)
        !          4975:                                return -1;
        !          4976: #endif
        !          4977:                }
        !          4978:     break;
        !          4979: 
        !          4980:   case 348:
        !          4981: 
        !          4982: /* Line 1455 of yacc.c  */
        !          4983: #line 2127 "cfparse.y"
        !          4984:     {
        !          4985:                        struct secprotospec *spspec;
        !          4986: 
        !          4987:                        spspec = newspspec();
        !          4988:                        if (spspec == NULL)
        !          4989:                                return -1;
        !          4990:                        insspspec(cur_rmconf, spspec);
        !          4991:                }
        !          4992:     break;
        !          4993: 
        !          4994:   case 351:
        !          4995: 
        !          4996: /* Line 1455 of yacc.c  */
        !          4997: #line 2140 "cfparse.y"
        !          4998:     {
        !          4999:                        struct etypes *new;
        !          5000:                        new = racoon_malloc(sizeof(struct etypes));
        !          5001:                        if (new == NULL) {
        !          5002:                                yyerror("failed to allocate etypes");
        !          5003:                                return -1;
        !          5004:                        }
        !          5005:                        new->type = (yyvsp[(2) - (2)].num);
        !          5006:                        new->next = NULL;
        !          5007:                        if (cur_rmconf->etypes == NULL)
        !          5008:                                cur_rmconf->etypes = new;
        !          5009:                        else {
        !          5010:                                struct etypes *p;
        !          5011:                                for (p = cur_rmconf->etypes;
        !          5012:                                     p->next != NULL;
        !          5013:                                     p = p->next)
        !          5014:                                        ;
        !          5015:                                p->next = new;
        !          5016:                        }
        !          5017:                }
        !          5018:     break;
        !          5019: 
        !          5020:   case 352:
        !          5021: 
        !          5022: /* Line 1455 of yacc.c  */
        !          5023: #line 2163 "cfparse.y"
        !          5024:     {
        !          5025:                        if (cur_rmconf->mycert != NULL) {
        !          5026:                                yyerror("certificate_type already defined\n");
        !          5027:                                return -1;
        !          5028:                        }
        !          5029: 
        !          5030:                        if (load_x509((yyvsp[(2) - (3)].val)->v, &cur_rmconf->mycertfile,
        !          5031:                                      &cur_rmconf->mycert)) {
        !          5032:                                yyerror("failed to load certificate \"%s\"\n",
        !          5033:                                        (yyvsp[(2) - (3)].val)->v);
        !          5034:                                return -1;
        !          5035:                        }
        !          5036: 
        !          5037:                        cur_rmconf->myprivfile = racoon_strdup((yyvsp[(3) - (3)].val)->v);
        !          5038:                        STRDUP_FATAL(cur_rmconf->myprivfile);
        !          5039: 
        !          5040:                        vfree((yyvsp[(2) - (3)].val));
        !          5041:                        vfree((yyvsp[(3) - (3)].val));
        !          5042:                }
        !          5043:     break;
        !          5044: 
        !          5045:   case 354:
        !          5046: 
        !          5047: /* Line 1455 of yacc.c  */
        !          5048: #line 2184 "cfparse.y"
        !          5049:     {
        !          5050:                        char path[MAXPATHLEN];
        !          5051:                        int ret = 0;
        !          5052: 
        !          5053:                        if (cur_rmconf->mycert != NULL) {
        !          5054:                                yyerror("certificate_type already defined\n");
        !          5055:                                return -1;
        !          5056:                        }
        !          5057: 
        !          5058:                        cur_rmconf->mycert = vmalloc(1);
        !          5059:                        if (cur_rmconf->mycert == NULL) {
        !          5060:                                yyerror("failed to allocate mycert");
        !          5061:                                return -1;
        !          5062:                        }
        !          5063:                        cur_rmconf->mycert->v[0] = ISAKMP_CERT_PLAINRSA;
        !          5064: 
        !          5065:                        getpathname(path, sizeof(path),
        !          5066:                                    LC_PATHTYPE_CERT, (yyvsp[(2) - (2)].val)->v);
        !          5067:                        cur_rmconf->send_cr = FALSE;
        !          5068:                        cur_rmconf->send_cert = FALSE;
        !          5069:                        cur_rmconf->verify_cert = FALSE;
        !          5070:                        if (rsa_parse_file(cur_rmconf->rsa_private, path,
        !          5071:                                           RSA_TYPE_PRIVATE)) {
        !          5072:                                yyerror("Couldn't parse keyfile.\n", path);
        !          5073:                                return -1;
        !          5074:                        }
        !          5075:                        plog(LLV_DEBUG, LOCATION, NULL,
        !          5076:                             "Private PlainRSA keyfile parsed: %s\n", path);
        !          5077:                        vfree((yyvsp[(2) - (2)].val));
        !          5078:                }
        !          5079:     break;
        !          5080: 
        !          5081:   case 356:
        !          5082: 
        !          5083: /* Line 1455 of yacc.c  */
        !          5084: #line 2218 "cfparse.y"
        !          5085:     {
        !          5086:                        (yyval.num) = algtype2doi(algclass_isakmp_dh, (yyvsp[(1) - (1)].num));
        !          5087:                        if ((yyval.num) == -1) {
        !          5088:                                yyerror("must be DH group");
        !          5089:                                return -1;
        !          5090:                        }
        !          5091:                }
        !          5092:     break;
        !          5093: 
        !          5094:   case 357:
        !          5095: 
        !          5096: /* Line 1455 of yacc.c  */
        !          5097: #line 2226 "cfparse.y"
        !          5098:     {
        !          5099:                        if (ARRAYLEN(num2dhgroup) > (yyvsp[(1) - (1)].num) && num2dhgroup[(yyvsp[(1) - (1)].num)] != 0) {
        !          5100:                                (yyval.num) = num2dhgroup[(yyvsp[(1) - (1)].num)];
        !          5101:                        } else {
        !          5102:                                yyerror("must be DH group");
        !          5103:                                (yyval.num) = 0;
        !          5104:                                return -1;
        !          5105:                        }
        !          5106:                }
        !          5107:     break;
        !          5108: 
        !          5109:   case 358:
        !          5110: 
        !          5111: /* Line 1455 of yacc.c  */
        !          5112: #line 2237 "cfparse.y"
        !          5113:     { (yyval.val) = NULL; }
        !          5114:     break;
        !          5115: 
        !          5116:   case 359:
        !          5117: 
        !          5118: /* Line 1455 of yacc.c  */
        !          5119: #line 2238 "cfparse.y"
        !          5120:     { (yyval.val) = (yyvsp[(1) - (1)].val); }
        !          5121:     break;
        !          5122: 
        !          5123:   case 360:
        !          5124: 
        !          5125: /* Line 1455 of yacc.c  */
        !          5126: #line 2239 "cfparse.y"
        !          5127:     { (yyval.val) = (yyvsp[(1) - (1)].val); }
        !          5128:     break;
        !          5129: 
        !          5130:   case 363:
        !          5131: 
        !          5132: /* Line 1455 of yacc.c  */
        !          5133: #line 2247 "cfparse.y"
        !          5134:     {
        !          5135:                        cur_rmconf->spspec->lifetime = (yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num);
        !          5136:                }
        !          5137:     break;
        !          5138: 
        !          5139:   case 365:
        !          5140: 
        !          5141: /* Line 1455 of yacc.c  */
        !          5142: #line 2252 "cfparse.y"
        !          5143:     {
        !          5144: #if 1
        !          5145:                        yyerror("byte lifetime support is deprecated");
        !          5146:                        return -1;
        !          5147: #else
        !          5148:                        cur_rmconf->spspec->lifebyte = fix_lifebyte((yyvsp[(3) - (4)].num) * (yyvsp[(4) - (4)].num));
        !          5149:                        if (cur_rmconf->spspec->lifebyte == 0)
        !          5150:                                return -1;
        !          5151: #endif
        !          5152:                }
        !          5153:     break;
        !          5154: 
        !          5155:   case 367:
        !          5156: 
        !          5157: /* Line 1455 of yacc.c  */
        !          5158: #line 2264 "cfparse.y"
        !          5159:     {
        !          5160:                        cur_rmconf->spspec->algclass[algclass_isakmp_dh] = (yyvsp[(2) - (2)].num);
        !          5161:                }
        !          5162:     break;
        !          5163: 
        !          5164:   case 369:
        !          5165: 
        !          5166: /* Line 1455 of yacc.c  */
        !          5167: #line 2269 "cfparse.y"
        !          5168:     {
        !          5169:                        if (cur_rmconf->spspec->vendorid != VENDORID_GSSAPI) {
        !          5170:                                yyerror("wrong Vendor ID for gssapi_id");
        !          5171:                                return -1;
        !          5172:                        }
        !          5173:                        if (cur_rmconf->spspec->gssid != NULL)
        !          5174:                                racoon_free(cur_rmconf->spspec->gssid);
        !          5175:                        cur_rmconf->spspec->gssid =
        !          5176:                            racoon_strdup((yyvsp[(2) - (2)].val)->v);
        !          5177:                        STRDUP_FATAL(cur_rmconf->spspec->gssid);
        !          5178:                }
        !          5179:     break;
        !          5180: 
        !          5181:   case 371:
        !          5182: 
        !          5183: /* Line 1455 of yacc.c  */
        !          5184: #line 2282 "cfparse.y"
        !          5185:     {
        !          5186:                        int doi;
        !          5187:                        int defklen;
        !          5188: 
        !          5189:                        doi = algtype2doi((yyvsp[(1) - (3)].num), (yyvsp[(2) - (3)].num));
        !          5190:                        if (doi == -1) {
        !          5191:                                yyerror("algorithm mismatched 1");
        !          5192:                                return -1;
        !          5193:                        }
        !          5194: 
        !          5195:                        switch ((yyvsp[(1) - (3)].num)) {
        !          5196:                        case algclass_isakmp_enc:
        !          5197:                        /* reject suppressed algorithms */
        !          5198: #ifndef HAVE_OPENSSL_RC5_H
        !          5199:                                if ((yyvsp[(2) - (3)].num) == algtype_rc5) {
        !          5200:                                        yyerror("algorithm %s not supported",
        !          5201:                                            s_attr_isakmp_enc(doi));
        !          5202:                                        return -1;
        !          5203:                                }
        !          5204: #endif
        !          5205: #ifndef HAVE_OPENSSL_IDEA_H
        !          5206:                                if ((yyvsp[(2) - (3)].num) == algtype_idea) {
        !          5207:                                        yyerror("algorithm %s not supported",
        !          5208:                                            s_attr_isakmp_enc(doi));
        !          5209:                                        return -1;
        !          5210:                                }
        !          5211: #endif
        !          5212: 
        !          5213:                                cur_rmconf->spspec->algclass[algclass_isakmp_enc] = doi;
        !          5214:                                defklen = default_keylen((yyvsp[(1) - (3)].num), (yyvsp[(2) - (3)].num));
        !          5215:                                if (defklen == 0) {
        !          5216:                                        if ((yyvsp[(3) - (3)].num)) {
        !          5217:                                                yyerror("keylen not allowed");
        !          5218:                                                return -1;
        !          5219:                                        }
        !          5220:                                } else {
        !          5221:                                        if ((yyvsp[(3) - (3)].num) && check_keylen((yyvsp[(1) - (3)].num), (yyvsp[(2) - (3)].num), (yyvsp[(3) - (3)].num)) < 0) {
        !          5222:                                                yyerror("invalid keylen %d", (yyvsp[(3) - (3)].num));
        !          5223:                                                return -1;
        !          5224:                                        }
        !          5225:                                }
        !          5226:                                if ((yyvsp[(3) - (3)].num))
        !          5227:                                        cur_rmconf->spspec->encklen = (yyvsp[(3) - (3)].num);
        !          5228:                                else
        !          5229:                                        cur_rmconf->spspec->encklen = defklen;
        !          5230:                                break;
        !          5231:                        case algclass_isakmp_hash:
        !          5232:                                cur_rmconf->spspec->algclass[algclass_isakmp_hash] = doi;
        !          5233:                                break;
        !          5234:                        case algclass_isakmp_ameth:
        !          5235:                                cur_rmconf->spspec->algclass[algclass_isakmp_ameth] = doi;
        !          5236:                                /*
        !          5237:                                 * We may have to set the Vendor ID for the
        !          5238:                                 * authentication method we're using.
        !          5239:                                 */
        !          5240:                                switch ((yyvsp[(2) - (3)].num)) {
        !          5241:                                case algtype_gssapikrb:
        !          5242:                                        if (cur_rmconf->spspec->vendorid !=
        !          5243:                                            VENDORID_UNKNOWN) {
        !          5244:                                                yyerror("Vendor ID mismatch "
        !          5245:                                                    "for auth method");
        !          5246:                                                return -1;
        !          5247:                                        }
        !          5248:                                        /*
        !          5249:                                         * For interoperability with Win2k,
        !          5250:                                         * we set the Vendor ID to "GSSAPI".
        !          5251:                                         */
        !          5252:                                        cur_rmconf->spspec->vendorid =
        !          5253:                                            VENDORID_GSSAPI;
        !          5254:                                        break;
        !          5255:                                case algtype_rsasig:
        !          5256:                                        if (oakley_get_certtype(cur_rmconf->peerscert) == ISAKMP_CERT_PLAINRSA) {
        !          5257:                                                if (rsa_list_count(cur_rmconf->rsa_private) == 0) {
        !          5258:                                                        yyerror ("Private PlainRSA key not set. "
        !          5259:                                                                 "Use directive 'certificate_type plainrsa ...'\n");
        !          5260:                                                        return -1;
        !          5261:                                                }
        !          5262:                                                if (rsa_list_count(cur_rmconf->rsa_public) == 0) {
        !          5263:                                                        yyerror ("Public PlainRSA keys not set. "
        !          5264:                                                                 "Use directive 'peers_certfile plainrsa ...'\n");
        !          5265:                                                        return -1;
        !          5266:                                                }
        !          5267:                                        }
        !          5268:                                        break;
        !          5269:                                default:
        !          5270:                                        break;
        !          5271:                                }
        !          5272:                                break;
        !          5273:                        default:
        !          5274:                                yyerror("algorithm mismatched 2");
        !          5275:                                return -1;
        !          5276:                        }
        !          5277:                }
        !          5278:     break;
        !          5279: 
        !          5280:   case 373:
        !          5281: 
        !          5282: /* Line 1455 of yacc.c  */
        !          5283: #line 2379 "cfparse.y"
        !          5284:     { (yyval.num) = 1; }
        !          5285:     break;
        !          5286: 
        !          5287:   case 374:
        !          5288: 
        !          5289: /* Line 1455 of yacc.c  */
        !          5290: #line 2380 "cfparse.y"
        !          5291:     { (yyval.num) = 60; }
        !          5292:     break;
        !          5293: 
        !          5294:   case 375:
        !          5295: 
        !          5296: /* Line 1455 of yacc.c  */
        !          5297: #line 2381 "cfparse.y"
        !          5298:     { (yyval.num) = (60 * 60); }
        !          5299:     break;
        !          5300: 
        !          5301:   case 376:
        !          5302: 
        !          5303: /* Line 1455 of yacc.c  */
        !          5304: #line 2384 "cfparse.y"
        !          5305:     { (yyval.num) = 1; }
        !          5306:     break;
        !          5307: 
        !          5308:   case 377:
        !          5309: 
        !          5310: /* Line 1455 of yacc.c  */
        !          5311: #line 2385 "cfparse.y"
        !          5312:     { (yyval.num) = 1024; }
        !          5313:     break;
        !          5314: 
        !          5315:   case 378:
        !          5316: 
        !          5317: /* Line 1455 of yacc.c  */
        !          5318: #line 2386 "cfparse.y"
        !          5319:     { (yyval.num) = (1024 * 1024); }
        !          5320:     break;
        !          5321: 
        !          5322:   case 379:
        !          5323: 
        !          5324: /* Line 1455 of yacc.c  */
        !          5325: #line 2387 "cfparse.y"
        !          5326:     { (yyval.num) = (1024 * 1024 * 1024); }
        !          5327:     break;
        !          5328: 
        !          5329: 
        !          5330: 
        !          5331: /* Line 1455 of yacc.c  */
        !          5332: #line 5333 "cfparse.c"
        !          5333:       default: break;
        !          5334:     }
        !          5335:   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
        !          5336: 
        !          5337:   YYPOPSTACK (yylen);
        !          5338:   yylen = 0;
        !          5339:   YY_STACK_PRINT (yyss, yyssp);
        !          5340: 
        !          5341:   *++yyvsp = yyval;
        !          5342: 
        !          5343:   /* Now `shift' the result of the reduction.  Determine what state
        !          5344:      that goes to, based on the state we popped back to and the rule
        !          5345:      number reduced by.  */
        !          5346: 
        !          5347:   yyn = yyr1[yyn];
        !          5348: 
        !          5349:   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
        !          5350:   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
        !          5351:     yystate = yytable[yystate];
        !          5352:   else
        !          5353:     yystate = yydefgoto[yyn - YYNTOKENS];
        !          5354: 
        !          5355:   goto yynewstate;
        !          5356: 
        !          5357: 
        !          5358: /*------------------------------------.
        !          5359: | yyerrlab -- here on detecting error |
        !          5360: `------------------------------------*/
        !          5361: yyerrlab:
        !          5362:   /* If not already recovering from an error, report this error.  */
        !          5363:   if (!yyerrstatus)
        !          5364:     {
        !          5365:       ++yynerrs;
        !          5366: #if ! YYERROR_VERBOSE
        !          5367:       yyerror (YY_("syntax error"));
        !          5368: #else
        !          5369:       {
        !          5370:        YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
        !          5371:        if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
        !          5372:          {
        !          5373:            YYSIZE_T yyalloc = 2 * yysize;
        !          5374:            if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
        !          5375:              yyalloc = YYSTACK_ALLOC_MAXIMUM;
        !          5376:            if (yymsg != yymsgbuf)
        !          5377:              YYSTACK_FREE (yymsg);
        !          5378:            yymsg = (char *) YYSTACK_ALLOC (yyalloc);
        !          5379:            if (yymsg)
        !          5380:              yymsg_alloc = yyalloc;
        !          5381:            else
        !          5382:              {
        !          5383:                yymsg = yymsgbuf;
        !          5384:                yymsg_alloc = sizeof yymsgbuf;
        !          5385:              }
        !          5386:          }
        !          5387: 
        !          5388:        if (0 < yysize && yysize <= yymsg_alloc)
        !          5389:          {
        !          5390:            (void) yysyntax_error (yymsg, yystate, yychar);
        !          5391:            yyerror (yymsg);
        !          5392:          }
        !          5393:        else
        !          5394:          {
        !          5395:            yyerror (YY_("syntax error"));
        !          5396:            if (yysize != 0)
        !          5397:              goto yyexhaustedlab;
        !          5398:          }
        !          5399:       }
        !          5400: #endif
        !          5401:     }
        !          5402: 
        !          5403: 
        !          5404: 
        !          5405:   if (yyerrstatus == 3)
        !          5406:     {
        !          5407:       /* If just tried and failed to reuse lookahead token after an
        !          5408:         error, discard it.  */
        !          5409: 
        !          5410:       if (yychar <= YYEOF)
        !          5411:        {
        !          5412:          /* Return failure if at end of input.  */
        !          5413:          if (yychar == YYEOF)
        !          5414:            YYABORT;
        !          5415:        }
        !          5416:       else
        !          5417:        {
        !          5418:          yydestruct ("Error: discarding",
        !          5419:                      yytoken, &yylval);
        !          5420:          yychar = YYEMPTY;
        !          5421:        }
        !          5422:     }
        !          5423: 
        !          5424:   /* Else will try to reuse lookahead token after shifting the error
        !          5425:      token.  */
        !          5426:   goto yyerrlab1;
        !          5427: 
        !          5428: 
        !          5429: /*---------------------------------------------------.
        !          5430: | yyerrorlab -- error raised explicitly by YYERROR.  |
        !          5431: `---------------------------------------------------*/
        !          5432: yyerrorlab:
        !          5433: 
        !          5434:   /* Pacify compilers like GCC when the user code never invokes
        !          5435:      YYERROR and the label yyerrorlab therefore never appears in user
        !          5436:      code.  */
        !          5437:   if (/*CONSTCOND*/ 0)
        !          5438:      goto yyerrorlab;
        !          5439: 
        !          5440:   /* Do not reclaim the symbols of the rule which action triggered
        !          5441:      this YYERROR.  */
        !          5442:   YYPOPSTACK (yylen);
        !          5443:   yylen = 0;
        !          5444:   YY_STACK_PRINT (yyss, yyssp);
        !          5445:   yystate = *yyssp;
        !          5446:   goto yyerrlab1;
        !          5447: 
        !          5448: 
        !          5449: /*-------------------------------------------------------------.
        !          5450: | yyerrlab1 -- common code for both syntax error and YYERROR.  |
        !          5451: `-------------------------------------------------------------*/
        !          5452: yyerrlab1:
        !          5453:   yyerrstatus = 3;     /* Each real token shifted decrements this.  */
        !          5454: 
        !          5455:   for (;;)
        !          5456:     {
        !          5457:       yyn = yypact[yystate];
        !          5458:       if (yyn != YYPACT_NINF)
        !          5459:        {
        !          5460:          yyn += YYTERROR;
        !          5461:          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
        !          5462:            {
        !          5463:              yyn = yytable[yyn];
        !          5464:              if (0 < yyn)
        !          5465:                break;
        !          5466:            }
        !          5467:        }
        !          5468: 
        !          5469:       /* Pop the current state because it cannot handle the error token.  */
        !          5470:       if (yyssp == yyss)
        !          5471:        YYABORT;
        !          5472: 
        !          5473: 
        !          5474:       yydestruct ("Error: popping",
        !          5475:                  yystos[yystate], yyvsp);
        !          5476:       YYPOPSTACK (1);
        !          5477:       yystate = *yyssp;
        !          5478:       YY_STACK_PRINT (yyss, yyssp);
        !          5479:     }
        !          5480: 
        !          5481:   *++yyvsp = yylval;
        !          5482: 
        !          5483: 
        !          5484:   /* Shift the error token.  */
        !          5485:   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
        !          5486: 
        !          5487:   yystate = yyn;
        !          5488:   goto yynewstate;
        !          5489: 
        !          5490: 
        !          5491: /*-------------------------------------.
        !          5492: | yyacceptlab -- YYACCEPT comes here.  |
        !          5493: `-------------------------------------*/
        !          5494: yyacceptlab:
        !          5495:   yyresult = 0;
        !          5496:   goto yyreturn;
        !          5497: 
        !          5498: /*-----------------------------------.
        !          5499: | yyabortlab -- YYABORT comes here.  |
        !          5500: `-----------------------------------*/
        !          5501: yyabortlab:
        !          5502:   yyresult = 1;
        !          5503:   goto yyreturn;
        !          5504: 
        !          5505: #if !defined(yyoverflow) || YYERROR_VERBOSE
        !          5506: /*-------------------------------------------------.
        !          5507: | yyexhaustedlab -- memory exhaustion comes here.  |
        !          5508: `-------------------------------------------------*/
        !          5509: yyexhaustedlab:
        !          5510:   yyerror (YY_("memory exhausted"));
        !          5511:   yyresult = 2;
        !          5512:   /* Fall through.  */
        !          5513: #endif
        !          5514: 
        !          5515: yyreturn:
        !          5516:   if (yychar != YYEMPTY)
        !          5517:      yydestruct ("Cleanup: discarding lookahead",
        !          5518:                 yytoken, &yylval);
        !          5519:   /* Do not reclaim the symbols of the rule which action triggered
        !          5520:      this YYABORT or YYACCEPT.  */
        !          5521:   YYPOPSTACK (yylen);
        !          5522:   YY_STACK_PRINT (yyss, yyssp);
        !          5523:   while (yyssp != yyss)
        !          5524:     {
        !          5525:       yydestruct ("Cleanup: popping",
        !          5526:                  yystos[*yyssp], yyvsp);
        !          5527:       YYPOPSTACK (1);
        !          5528:     }
        !          5529: #ifndef yyoverflow
        !          5530:   if (yyss != yyssa)
        !          5531:     YYSTACK_FREE (yyss);
        !          5532: #endif
        !          5533: #if YYERROR_VERBOSE
        !          5534:   if (yymsg != yymsgbuf)
        !          5535:     YYSTACK_FREE (yymsg);
        !          5536: #endif
        !          5537:   /* Make sure YYID is used.  */
        !          5538:   return YYID (yyresult);
        !          5539: }
        !          5540: 
        !          5541: 
        !          5542: 
        !          5543: /* Line 1675 of yacc.c  */
        !          5544: #line 2389 "cfparse.y"
        !          5545: 
        !          5546: 
        !          5547: static struct secprotospec *
        !          5548: newspspec()
        !          5549: {
        !          5550:        struct secprotospec *new;
        !          5551: 
        !          5552:        new = racoon_calloc(1, sizeof(*new));
        !          5553:        if (new == NULL) {
        !          5554:                yyerror("failed to allocate spproto");
        !          5555:                return NULL;
        !          5556:        }
        !          5557: 
        !          5558:        new->encklen = 0;       /*XXX*/
        !          5559: 
        !          5560:        /*
        !          5561:         * Default to "uknown" vendor -- we will override this
        !          5562:         * as necessary.  When we send a Vendor ID payload, an
        !          5563:         * "unknown" will be translated to a KAME/racoon ID.
        !          5564:         */
        !          5565:        new->vendorid = VENDORID_UNKNOWN;
        !          5566: 
        !          5567:        return new;
        !          5568: }
        !          5569: 
        !          5570: /*
        !          5571:  * insert into head of list.
        !          5572:  */
        !          5573: static void
        !          5574: insspspec(rmconf, spspec)
        !          5575:        struct remoteconf *rmconf;
        !          5576:        struct secprotospec *spspec;
        !          5577: {
        !          5578:        if (rmconf->spspec != NULL)
        !          5579:                rmconf->spspec->prev = spspec;
        !          5580:        spspec->next = rmconf->spspec;
        !          5581:        rmconf->spspec = spspec;
        !          5582: }
        !          5583: 
        !          5584: static struct secprotospec *
        !          5585: dupspspec(spspec)
        !          5586:        struct secprotospec *spspec;
        !          5587: {
        !          5588:        struct secprotospec *new;
        !          5589: 
        !          5590:        new = newspspec();
        !          5591:        if (new == NULL) {
        !          5592:                plog(LLV_ERROR, LOCATION, NULL, 
        !          5593:                    "dupspspec: malloc failed\n");
        !          5594:                return NULL;
        !          5595:        }
        !          5596:        memcpy(new, spspec, sizeof(*new));
        !          5597: 
        !          5598:        if (spspec->gssid) {
        !          5599:                new->gssid = racoon_strdup(spspec->gssid);
        !          5600:                STRDUP_FATAL(new->gssid);
        !          5601:        }
        !          5602:        if (spspec->remote) {
        !          5603:                new->remote = racoon_malloc(sizeof(*new->remote));
        !          5604:                if (new->remote == NULL) {
        !          5605:                        plog(LLV_ERROR, LOCATION, NULL, 
        !          5606:                            "dupspspec: malloc failed (remote)\n");
        !          5607:                        return NULL;
        !          5608:                }
        !          5609:                memcpy(new->remote, spspec->remote, sizeof(*new->remote));
        !          5610:        }
        !          5611: 
        !          5612:        return new;
        !          5613: }
        !          5614: 
        !          5615: /*
        !          5616:  * copy the whole list
        !          5617:  */
        !          5618: void
        !          5619: dupspspec_list(dst, src)
        !          5620:        struct remoteconf *dst, *src;
        !          5621: {
        !          5622:        struct secprotospec *p, *new, *last;
        !          5623: 
        !          5624:        for(p = src->spspec, last = NULL; p; p = p->next, last = new) {
        !          5625:                new = dupspspec(p);
        !          5626:                if (new == NULL)
        !          5627:                        exit(1);
        !          5628: 
        !          5629:                new->prev = last;
        !          5630:                new->next = NULL; /* not necessary but clean */
        !          5631: 
        !          5632:                if (last)
        !          5633:                        last->next = new;
        !          5634:                else /* first element */
        !          5635:                        dst->spspec = new;
        !          5636: 
        !          5637:        }
        !          5638: }
        !          5639: 
        !          5640: /*
        !          5641:  * delete the whole list
        !          5642:  */
        !          5643: void
        !          5644: flushspspec(rmconf)
        !          5645:        struct remoteconf *rmconf;
        !          5646: {
        !          5647:        struct secprotospec *p;
        !          5648: 
        !          5649:        while(rmconf->spspec != NULL) {
        !          5650:                p = rmconf->spspec;
        !          5651:                rmconf->spspec = p->next;
        !          5652:                if (p->next != NULL)
        !          5653:                        p->next->prev = NULL; /* not necessary but clean */
        !          5654: 
        !          5655:                if (p->gssid)
        !          5656:                        racoon_free(p->gssid);
        !          5657:                if (p->remote)
        !          5658:                        racoon_free(p->remote);
        !          5659:                racoon_free(p);
        !          5660:        }
        !          5661:        rmconf->spspec = NULL;
        !          5662: }
        !          5663: 
        !          5664: /* set final acceptable proposal */
        !          5665: static int
        !          5666: set_isakmp_proposal(rmconf)
        !          5667:        struct remoteconf *rmconf;
        !          5668: {
        !          5669:        struct secprotospec *s;
        !          5670:        int prop_no = 1; 
        !          5671:        int trns_no = 1;
        !          5672:        int32_t types[MAXALGCLASS];
        !          5673: 
        !          5674:        /* mandatory check */
        !          5675:        if (rmconf->spspec == NULL) {
        !          5676:                yyerror("no remote specification found: %s.\n",
        !          5677:                        saddr2str(rmconf->remote));
        !          5678:                return -1;
        !          5679:        }
        !          5680:        for (s = rmconf->spspec; s != NULL; s = s->next) {
        !          5681:                /* XXX need more to check */
        !          5682:                if (s->algclass[algclass_isakmp_enc] == 0) {
        !          5683:                        yyerror("encryption algorithm required.");
        !          5684:                        return -1;
        !          5685:                }
        !          5686:                if (s->algclass[algclass_isakmp_hash] == 0) {
        !          5687:                        yyerror("hash algorithm required.");
        !          5688:                        return -1;
        !          5689:                }
        !          5690:                if (s->algclass[algclass_isakmp_dh] == 0) {
        !          5691:                        yyerror("DH group required.");
        !          5692:                        return -1;
        !          5693:                }
        !          5694:                if (s->algclass[algclass_isakmp_ameth] == 0) {
        !          5695:                        yyerror("authentication method required.");
        !          5696:                        return -1;
        !          5697:                }
        !          5698:        }
        !          5699: 
        !          5700:        /* skip to last part */
        !          5701:        for (s = rmconf->spspec; s->next != NULL; s = s->next)
        !          5702:                ;
        !          5703: 
        !          5704:        while (s != NULL) {
        !          5705:                plog(LLV_DEBUG2, LOCATION, NULL,
        !          5706:                        "lifetime = %ld\n", (long)
        !          5707:                        (s->lifetime ? s->lifetime : rmconf->lifetime));
        !          5708:                plog(LLV_DEBUG2, LOCATION, NULL,
        !          5709:                        "lifebyte = %d\n",
        !          5710:                        s->lifebyte ? s->lifebyte : rmconf->lifebyte);
        !          5711:                plog(LLV_DEBUG2, LOCATION, NULL,
        !          5712:                        "encklen=%d\n", s->encklen);
        !          5713: 
        !          5714:                memset(types, 0, ARRAYLEN(types));
        !          5715:                types[algclass_isakmp_enc] = s->algclass[algclass_isakmp_enc];
        !          5716:                types[algclass_isakmp_hash] = s->algclass[algclass_isakmp_hash];
        !          5717:                types[algclass_isakmp_dh] = s->algclass[algclass_isakmp_dh];
        !          5718:                types[algclass_isakmp_ameth] =
        !          5719:                    s->algclass[algclass_isakmp_ameth];
        !          5720: 
        !          5721:                /* expanding spspec */
        !          5722:                clean_tmpalgtype();
        !          5723:                trns_no = expand_isakmpspec(prop_no, trns_no, types,
        !          5724:                                algclass_isakmp_enc, algclass_isakmp_ameth + 1,
        !          5725:                                s->lifetime ? s->lifetime : rmconf->lifetime,
        !          5726:                                s->lifebyte ? s->lifebyte : rmconf->lifebyte,
        !          5727:                                s->encklen, s->vendorid, s->gssid,
        !          5728:                                rmconf);
        !          5729:                if (trns_no == -1) {
        !          5730:                        plog(LLV_ERROR, LOCATION, NULL,
        !          5731:                                "failed to expand isakmp proposal.\n");
        !          5732:                        return -1;
        !          5733:                }
        !          5734: 
        !          5735:                s = s->prev;
        !          5736:        }
        !          5737: 
        !          5738:        if (rmconf->proposal == NULL) {
        !          5739:                plog(LLV_ERROR, LOCATION, NULL,
        !          5740:                        "no proposal found.\n");
        !          5741:                return -1;
        !          5742:        }
        !          5743: 
        !          5744:        return 0;
        !          5745: }
        !          5746: 
        !          5747: static void
        !          5748: clean_tmpalgtype()
        !          5749: {
        !          5750:        int i;
        !          5751:        for (i = 0; i < MAXALGCLASS; i++)
        !          5752:                tmpalgtype[i] = 0;      /* means algorithm undefined. */
        !          5753: }
        !          5754: 
        !          5755: static int
        !          5756: expand_isakmpspec(prop_no, trns_no, types,
        !          5757:                class, last, lifetime, lifebyte, encklen, vendorid, gssid,
        !          5758:                rmconf)
        !          5759:        int prop_no, trns_no;
        !          5760:        int *types, class, last;
        !          5761:        time_t lifetime;
        !          5762:        int lifebyte;
        !          5763:        int encklen;
        !          5764:        int vendorid;
        !          5765:        char *gssid;
        !          5766:        struct remoteconf *rmconf;
        !          5767: {
        !          5768:        struct isakmpsa *new;
        !          5769: 
        !          5770:        /* debugging */
        !          5771:     {
        !          5772:        int j;
        !          5773:        char tb[10];
        !          5774:        plog(LLV_DEBUG2, LOCATION, NULL,
        !          5775:                "p:%d t:%d\n", prop_no, trns_no);
        !          5776:        for (j = class; j < MAXALGCLASS; j++) {
        !          5777:                snprintf(tb, sizeof(tb), "%d", types[j]);
        !          5778:                plog(LLV_DEBUG2, LOCATION, NULL,
        !          5779:                        "%s%s%s%s\n",
        !          5780:                        s_algtype(j, types[j]),
        !          5781:                        types[j] ? "(" : "",
        !          5782:                        tb[0] == '0' ? "" : tb,
        !          5783:                        types[j] ? ")" : "");
        !          5784:        }
        !          5785:        plog(LLV_DEBUG2, LOCATION, NULL, "\n");
        !          5786:     }
        !          5787: 
        !          5788: #define TMPALGTYPE2STR(n) \
        !          5789:        s_algtype(algclass_isakmp_##n, types[algclass_isakmp_##n])
        !          5790:                /* check mandatory values */
        !          5791:                if (types[algclass_isakmp_enc] == 0
        !          5792:                 || types[algclass_isakmp_ameth] == 0
        !          5793:                 || types[algclass_isakmp_hash] == 0
        !          5794:                 || types[algclass_isakmp_dh] == 0) {
        !          5795:                        yyerror("few definition of algorithm "
        !          5796:                                "enc=%s ameth=%s hash=%s dhgroup=%s.\n",
        !          5797:                                TMPALGTYPE2STR(enc),
        !          5798:                                TMPALGTYPE2STR(ameth),
        !          5799:                                TMPALGTYPE2STR(hash),
        !          5800:                                TMPALGTYPE2STR(dh));
        !          5801:                        return -1;
        !          5802:                }
        !          5803: #undef TMPALGTYPE2STR
        !          5804: 
        !          5805:        /* set new sa */
        !          5806:        new = newisakmpsa();
        !          5807:        if (new == NULL) {
        !          5808:                yyerror("failed to allocate isakmp sa");
        !          5809:                return -1;
        !          5810:        }
        !          5811:        new->prop_no = prop_no;
        !          5812:        new->trns_no = trns_no++;
        !          5813:        new->lifetime = lifetime;
        !          5814:        new->lifebyte = lifebyte;
        !          5815:        new->enctype = types[algclass_isakmp_enc];
        !          5816:        new->encklen = encklen;
        !          5817:        new->authmethod = types[algclass_isakmp_ameth];
        !          5818:        new->hashtype = types[algclass_isakmp_hash];
        !          5819:        new->dh_group = types[algclass_isakmp_dh];
        !          5820:        new->vendorid = vendorid;
        !          5821: #ifdef HAVE_GSSAPI
        !          5822:        if (new->authmethod == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB) {
        !          5823:                if (gssid != NULL) {
        !          5824:                        if ((new->gssid = vmalloc(strlen(gssid))) == NULL) {
        !          5825:                                racoon_free(new);
        !          5826:                                yyerror("failed to allocate gssid");
        !          5827:                                return -1;
        !          5828:                        }
        !          5829:                        memcpy(new->gssid->v, gssid, new->gssid->l);
        !          5830:                        racoon_free(gssid);
        !          5831:                } else {
        !          5832:                        /*
        !          5833:                         * Allocate the default ID so that it gets put
        !          5834:                         * into a GSS ID attribute during the Phase 1
        !          5835:                         * exchange.
        !          5836:                         */
        !          5837:                        new->gssid = gssapi_get_default_gss_id();
        !          5838:                }
        !          5839:        }
        !          5840: #endif
        !          5841:        insisakmpsa(new, rmconf);
        !          5842: 
        !          5843:        return trns_no;
        !          5844: }
        !          5845: 
        !          5846: #if 0
        !          5847: /*
        !          5848:  * fix lifebyte.
        !          5849:  * Must be more than 1024B because its unit is kilobytes.
        !          5850:  * That is defined RFC2407.
        !          5851:  */
        !          5852: static int
        !          5853: fix_lifebyte(t)
        !          5854:        unsigned long t;
        !          5855: {
        !          5856:        if (t < 1024) {
        !          5857:                yyerror("byte size should be more than 1024B.");
        !          5858:                return 0;
        !          5859:        }
        !          5860: 
        !          5861:        return(t / 1024);
        !          5862: }
        !          5863: #endif
        !          5864: 
        !          5865: int
        !          5866: cfparse()
        !          5867: {
        !          5868:        int error;
        !          5869: 
        !          5870:        yyerrorcount = 0;
        !          5871:        yycf_init_buffer();
        !          5872: 
        !          5873:        if (yycf_switch_buffer(lcconf->racoon_conf) != 0) {
        !          5874:                plog(LLV_ERROR, LOCATION, NULL, 
        !          5875:                    "could not read configuration file \"%s\"\n", 
        !          5876:                    lcconf->racoon_conf);
        !          5877:                return -1;
        !          5878:        }
        !          5879: 
        !          5880:        error = yyparse();
        !          5881:        if (error != 0) {
        !          5882:                if (yyerrorcount) {
        !          5883:                        plog(LLV_ERROR, LOCATION, NULL,
        !          5884:                                "fatal parse failure (%d errors)\n",
        !          5885:                                yyerrorcount);
        !          5886:                } else {
        !          5887:                        plog(LLV_ERROR, LOCATION, NULL,
        !          5888:                                "fatal parse failure.\n");
        !          5889:                }
        !          5890:                return -1;
        !          5891:        }
        !          5892: 
        !          5893:        if (error == 0 && yyerrorcount) {
        !          5894:                plog(LLV_ERROR, LOCATION, NULL,
        !          5895:                        "parse error is nothing, but yyerrorcount is %d.\n",
        !          5896:                                yyerrorcount);
        !          5897:                exit(1);
        !          5898:        }
        !          5899: 
        !          5900:        yycf_clean_buffer();
        !          5901: 
        !          5902:        plog(LLV_DEBUG2, LOCATION, NULL, "parse successed.\n");
        !          5903: 
        !          5904:        return 0;
        !          5905: }
        !          5906: 
        !          5907: int
        !          5908: cfreparse()
        !          5909: {
        !          5910:        flushph2();
        !          5911:        flushph1();
        !          5912:        flushrmconf();
        !          5913:        flushsainfo();
        !          5914:        clean_tmpalgtype();
        !          5915:        return(cfparse());
        !          5916: }
        !          5917: 
        !          5918: #ifdef ENABLE_ADMINPORT
        !          5919: static void
        !          5920: adminsock_conf(path, owner, group, mode_dec)
        !          5921:        vchar_t *path;
        !          5922:        vchar_t *owner;
        !          5923:        vchar_t *group;
        !          5924:        int mode_dec;
        !          5925: {
        !          5926:        struct passwd *pw = NULL;
        !          5927:        struct group *gr = NULL;
        !          5928:        mode_t mode = 0;
        !          5929:        uid_t uid;
        !          5930:        gid_t gid;
        !          5931:        int isnum;
        !          5932: 
        !          5933:        adminsock_path = path->v;
        !          5934: 
        !          5935:        if (owner == NULL)
        !          5936:                return;
        !          5937: 
        !          5938:        errno = 0;
        !          5939:        uid = atoi(owner->v);
        !          5940:        isnum = !errno;
        !          5941:        if (((pw = getpwnam(owner->v)) == NULL) && !isnum)
        !          5942:                yyerror("User \"%s\" does not exist", owner->v);
        !          5943: 
        !          5944:        if (pw)
        !          5945:                adminsock_owner = pw->pw_uid;
        !          5946:        else
        !          5947:                adminsock_owner = uid;
        !          5948: 
        !          5949:        if (group == NULL)
        !          5950:                return;
        !          5951: 
        !          5952:        errno = 0;
        !          5953:        gid = atoi(group->v);
        !          5954:        isnum = !errno;
        !          5955:        if (((gr = getgrnam(group->v)) == NULL) && !isnum)
        !          5956:                yyerror("Group \"%s\" does not exist", group->v);
        !          5957: 
        !          5958:        if (gr)
        !          5959:                adminsock_group = gr->gr_gid;
        !          5960:        else
        !          5961:                adminsock_group = gid;
        !          5962: 
        !          5963:        if (mode_dec == -1)
        !          5964:                return;
        !          5965: 
        !          5966:        if (mode_dec > 777)
        !          5967:                yyerror("Mode 0%03o is invalid", mode_dec);
        !          5968:        if (mode_dec >= 400) { mode += 0400; mode_dec -= 400; }
        !          5969:        if (mode_dec >= 200) { mode += 0200; mode_dec -= 200; }
        !          5970:        if (mode_dec >= 100) { mode += 0200; mode_dec -= 100; }
        !          5971: 
        !          5972:        if (mode_dec > 77)
        !          5973:                yyerror("Mode 0%03o is invalid", mode_dec);
        !          5974:        if (mode_dec >= 40) { mode += 040; mode_dec -= 40; }
        !          5975:        if (mode_dec >= 20) { mode += 020; mode_dec -= 20; }
        !          5976:        if (mode_dec >= 10) { mode += 020; mode_dec -= 10; }
        !          5977: 
        !          5978:        if (mode_dec > 7)
        !          5979:                yyerror("Mode 0%03o is invalid", mode_dec);
        !          5980:        if (mode_dec >= 4) { mode += 04; mode_dec -= 4; }
        !          5981:        if (mode_dec >= 2) { mode += 02; mode_dec -= 2; }
        !          5982:        if (mode_dec >= 1) { mode += 02; mode_dec -= 1; }
        !          5983:        
        !          5984:        adminsock_mode = mode;
        !          5985: 
        !          5986:        return;
        !          5987: }
        !          5988: #endif
        !          5989: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>