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