Annotation of embedaddon/ipsec-tools/src/racoon/cfparse.c, revision 1.1.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>