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