Return to cfparse.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / ipsec-tools / src / racoon |
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: