Annotation of embedaddon/ipsec-tools/src/racoon/prsa_par.c, revision 1.1
1.1 ! misho 1:
! 2: /* A Bison parser, made by GNU Bison 2.4.1. */
! 3:
! 4: /* Skeleton implementation for Bison's Yacc-like parsers in C
! 5:
! 6: Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
! 7: Free Software Foundation, Inc.
! 8:
! 9: This program is free software: you can redistribute it and/or modify
! 10: it under the terms of the GNU General Public License as published by
! 11: the Free Software Foundation, either version 3 of the License, or
! 12: (at your option) any later version.
! 13:
! 14: This program is distributed in the hope that it will be useful,
! 15: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 17: GNU General Public License for more details.
! 18:
! 19: You should have received a copy of the GNU General Public License
! 20: along with this program. If not, see <http://www.gnu.org/licenses/>. */
! 21:
! 22: /* As a special exception, you may create a larger work that contains
! 23: part or all of the Bison parser skeleton and distribute that work
! 24: under terms of your choice, so long as that work isn't itself a
! 25: parser generator using the skeleton or a modified version thereof
! 26: as a parser skeleton. Alternatively, if you modify or redistribute
! 27: the parser skeleton itself, you may (at your option) remove this
! 28: special exception, which will cause the skeleton and the resulting
! 29: Bison output files to be licensed under the GNU General Public
! 30: License without this special exception.
! 31:
! 32: This special exception was added by the Free Software Foundation in
! 33: version 2.2 of Bison. */
! 34:
! 35: /* C LALR(1) parser skeleton written by Richard Stallman, by
! 36: simplifying the original so-called "semantic" parser. */
! 37:
! 38: /* All symbols defined below should begin with yy or YY, to avoid
! 39: infringing on user name space. This should be done even for local
! 40: variables, as they might otherwise be expanded by user macros.
! 41: There are some unavoidable exceptions within include files to
! 42: define necessary library symbols; they are noted "INFRINGES ON
! 43: USER NAME SPACE" below. */
! 44:
! 45: /* Identify Bison output. */
! 46: #define YYBISON 1
! 47:
! 48: /* Bison version. */
! 49: #define YYBISON_VERSION "2.4.1"
! 50:
! 51: /* Skeleton name. */
! 52: #define YYSKELETON_NAME "yacc.c"
! 53:
! 54: /* Pure parsers. */
! 55: #define YYPURE 0
! 56:
! 57: /* Push parsers. */
! 58: #define YYPUSH 0
! 59:
! 60: /* Pull parsers. */
! 61: #define YYPULL 1
! 62:
! 63: /* Using locations. */
! 64: #define YYLSP_NEEDED 0
! 65:
! 66: /* Substitute the variable and function names. */
! 67: #define yyparse prsaparse
! 68: #define yylex prsalex
! 69: #define yyerror prsaerror
! 70: #define yylval prsalval
! 71: #define yychar prsachar
! 72: #define yydebug prsadebug
! 73: #define yynerrs prsanerrs
! 74:
! 75:
! 76: /* Copy the first part of user declarations. */
! 77:
! 78: /* Line 189 of yacc.c */
! 79: #line 5 "prsa_par.y"
! 80:
! 81: /*
! 82: * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
! 83: * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
! 84: * All rights reserved.
! 85: *
! 86: * Redistribution and use in source and binary forms, with or without
! 87: * modification, are permitted provided that the following conditions
! 88: * are met:
! 89: * 1. Redistributions of source code must retain the above copyright
! 90: * notice, this list of conditions and the following disclaimer.
! 91: * 2. Redistributions in binary form must reproduce the above copyright
! 92: * notice, this list of conditions and the following disclaimer in the
! 93: * documentation and/or other materials provided with the distribution.
! 94: * 3. Neither the name of the project nor the names of its contributors
! 95: * may be used to endorse or promote products derived from this software
! 96: * without specific prior written permission.
! 97: *
! 98: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
! 99: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 100: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 101: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
! 102: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 103: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 104: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 105: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 106: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 107: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 108: * SUCH DAMAGE.
! 109: */
! 110:
! 111: /* This file contains a parser for FreeS/WAN-style ipsec.secrets RSA keys. */
! 112:
! 113: #include "config.h"
! 114:
! 115: #include <stdio.h>
! 116: #include <stdarg.h>
! 117: #include <string.h>
! 118: #include <errno.h>
! 119: #include <unistd.h>
! 120:
! 121: #ifdef HAVE_STDARG_H
! 122: #include <stdarg.h>
! 123: #else
! 124: #include <varargs.h>
! 125: #endif
! 126:
! 127: #include <netdb.h>
! 128: #include <netinet/in.h>
! 129: #include <sys/socket.h>
! 130: #include <arpa/inet.h>
! 131: #include <sys/types.h>
! 132:
! 133: #include <sys/stat.h>
! 134: #include <unistd.h>
! 135:
! 136: #include <openssl/bn.h>
! 137: #include <openssl/rsa.h>
! 138:
! 139: #include "misc.h"
! 140: #include "vmbuf.h"
! 141: #include "plog.h"
! 142: #include "oakley.h"
! 143: #include "isakmp_var.h"
! 144: #include "handler.h"
! 145: #include "crypto_openssl.h"
! 146: #include "sockmisc.h"
! 147: #include "rsalist.h"
! 148:
! 149: extern void prsaerror(const char *str, ...);
! 150: extern int prsawrap (void);
! 151: extern int prsalex (void);
! 152:
! 153: extern char *prsatext;
! 154: extern int prsa_cur_lineno;
! 155: extern char *prsa_cur_fname;
! 156: extern FILE *prsain;
! 157:
! 158: int prsa_cur_lineno = 0;
! 159: char *prsa_cur_fname = NULL;
! 160: struct genlist *prsa_cur_list = NULL;
! 161: enum rsa_key_type prsa_cur_type = RSA_TYPE_ANY;
! 162:
! 163: static RSA *rsa_cur;
! 164:
! 165: void
! 166: prsaerror(const char *s, ...)
! 167: {
! 168: char fmt[512];
! 169:
! 170: va_list ap;
! 171: #ifdef HAVE_STDARG_H
! 172: va_start(ap, s);
! 173: #else
! 174: va_start(ap);
! 175: #endif
! 176: snprintf(fmt, sizeof(fmt), "%s:%d: %s",
! 177: prsa_cur_fname, prsa_cur_lineno, s);
! 178: plogv(LLV_ERROR, LOCATION, NULL, fmt, ap);
! 179: va_end(ap);
! 180: }
! 181:
! 182: void
! 183: prsawarning(const char *s, ...)
! 184: {
! 185: char fmt[512];
! 186:
! 187: va_list ap;
! 188: #ifdef HAVE_STDARG_H
! 189: va_start(ap, s);
! 190: #else
! 191: va_start(ap);
! 192: #endif
! 193: snprintf(fmt, sizeof(fmt), "%s:%d: %s",
! 194: prsa_cur_fname, prsa_cur_lineno, s);
! 195: plogv(LLV_WARNING, LOCATION, NULL, fmt, ap);
! 196: va_end(ap);
! 197: }
! 198:
! 199: int
! 200: prsawrap()
! 201: {
! 202: return 1;
! 203: }
! 204:
! 205:
! 206: /* Line 189 of yacc.c */
! 207: #line 208 "prsa_par.c"
! 208:
! 209: /* Enabling traces. */
! 210: #ifndef YYDEBUG
! 211: # define YYDEBUG 0
! 212: #endif
! 213:
! 214: /* Enabling verbose error messages. */
! 215: #ifdef YYERROR_VERBOSE
! 216: # undef YYERROR_VERBOSE
! 217: # define YYERROR_VERBOSE 1
! 218: #else
! 219: # define YYERROR_VERBOSE 0
! 220: #endif
! 221:
! 222: /* Enabling the token table. */
! 223: #ifndef YYTOKEN_TABLE
! 224: # define YYTOKEN_TABLE 0
! 225: #endif
! 226:
! 227:
! 228: /* Tokens. */
! 229: #ifndef YYTOKENTYPE
! 230: # define YYTOKENTYPE
! 231: /* Put the tokens into the symbol table, so that GDB and other debuggers
! 232: know about them. */
! 233: enum yytokentype {
! 234: COLON = 258,
! 235: HEX = 259,
! 236: OBRACE = 260,
! 237: EBRACE = 261,
! 238: TAG_RSA = 262,
! 239: TAG_PUB = 263,
! 240: TAG_PSK = 264,
! 241: MODULUS = 265,
! 242: PUBLIC_EXPONENT = 266,
! 243: PRIVATE_EXPONENT = 267,
! 244: PRIME1 = 268,
! 245: PRIME2 = 269,
! 246: EXPONENT1 = 270,
! 247: EXPONENT2 = 271,
! 248: COEFFICIENT = 272,
! 249: ADDR4 = 273,
! 250: ADDR6 = 274,
! 251: ADDRANY = 275,
! 252: SLASH = 276,
! 253: NUMBER = 277,
! 254: BASE64 = 278
! 255: };
! 256: #endif
! 257: /* Tokens. */
! 258: #define COLON 258
! 259: #define HEX 259
! 260: #define OBRACE 260
! 261: #define EBRACE 261
! 262: #define TAG_RSA 262
! 263: #define TAG_PUB 263
! 264: #define TAG_PSK 264
! 265: #define MODULUS 265
! 266: #define PUBLIC_EXPONENT 266
! 267: #define PRIVATE_EXPONENT 267
! 268: #define PRIME1 268
! 269: #define PRIME2 269
! 270: #define EXPONENT1 270
! 271: #define EXPONENT2 271
! 272: #define COEFFICIENT 272
! 273: #define ADDR4 273
! 274: #define ADDR6 274
! 275: #define ADDRANY 275
! 276: #define SLASH 276
! 277: #define NUMBER 277
! 278: #define BASE64 278
! 279:
! 280:
! 281:
! 282:
! 283: #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
! 284: typedef union YYSTYPE
! 285: {
! 286:
! 287: /* Line 214 of yacc.c */
! 288: #line 130 "prsa_par.y"
! 289:
! 290: BIGNUM *bn;
! 291: RSA *rsa;
! 292: char *chr;
! 293: long num;
! 294: struct netaddr *naddr;
! 295:
! 296:
! 297:
! 298: /* Line 214 of yacc.c */
! 299: #line 300 "prsa_par.c"
! 300: } YYSTYPE;
! 301: # define YYSTYPE_IS_TRIVIAL 1
! 302: # define yystype YYSTYPE /* obsolescent; will be withdrawn */
! 303: # define YYSTYPE_IS_DECLARED 1
! 304: #endif
! 305:
! 306:
! 307: /* Copy the second part of user declarations. */
! 308:
! 309:
! 310: /* Line 264 of yacc.c */
! 311: #line 312 "prsa_par.c"
! 312:
! 313: #ifdef short
! 314: # undef short
! 315: #endif
! 316:
! 317: #ifdef YYTYPE_UINT8
! 318: typedef YYTYPE_UINT8 yytype_uint8;
! 319: #else
! 320: typedef unsigned char yytype_uint8;
! 321: #endif
! 322:
! 323: #ifdef YYTYPE_INT8
! 324: typedef YYTYPE_INT8 yytype_int8;
! 325: #elif (defined __STDC__ || defined __C99__FUNC__ \
! 326: || defined __cplusplus || defined _MSC_VER)
! 327: typedef signed char yytype_int8;
! 328: #else
! 329: typedef short int yytype_int8;
! 330: #endif
! 331:
! 332: #ifdef YYTYPE_UINT16
! 333: typedef YYTYPE_UINT16 yytype_uint16;
! 334: #else
! 335: typedef unsigned short int yytype_uint16;
! 336: #endif
! 337:
! 338: #ifdef YYTYPE_INT16
! 339: typedef YYTYPE_INT16 yytype_int16;
! 340: #else
! 341: typedef short int yytype_int16;
! 342: #endif
! 343:
! 344: #ifndef YYSIZE_T
! 345: # ifdef __SIZE_TYPE__
! 346: # define YYSIZE_T __SIZE_TYPE__
! 347: # elif defined size_t
! 348: # define YYSIZE_T size_t
! 349: # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
! 350: || defined __cplusplus || defined _MSC_VER)
! 351: # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
! 352: # define YYSIZE_T size_t
! 353: # else
! 354: # define YYSIZE_T unsigned int
! 355: # endif
! 356: #endif
! 357:
! 358: #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
! 359:
! 360: #ifndef YY_
! 361: # if YYENABLE_NLS
! 362: # if ENABLE_NLS
! 363: # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
! 364: # define YY_(msgid) dgettext ("bison-runtime", msgid)
! 365: # endif
! 366: # endif
! 367: # ifndef YY_
! 368: # define YY_(msgid) msgid
! 369: # endif
! 370: #endif
! 371:
! 372: /* Suppress unused-variable warnings by "using" E. */
! 373: #if ! defined lint || defined __GNUC__
! 374: # define YYUSE(e) ((void) (e))
! 375: #else
! 376: # define YYUSE(e) /* empty */
! 377: #endif
! 378:
! 379: /* Identity function, used to suppress warnings about constant conditions. */
! 380: #ifndef lint
! 381: # define YYID(n) (n)
! 382: #else
! 383: #if (defined __STDC__ || defined __C99__FUNC__ \
! 384: || defined __cplusplus || defined _MSC_VER)
! 385: static int
! 386: YYID (int yyi)
! 387: #else
! 388: static int
! 389: YYID (yyi)
! 390: int yyi;
! 391: #endif
! 392: {
! 393: return yyi;
! 394: }
! 395: #endif
! 396:
! 397: #if ! defined yyoverflow || YYERROR_VERBOSE
! 398:
! 399: /* The parser invokes alloca or malloc; define the necessary symbols. */
! 400:
! 401: # ifdef YYSTACK_USE_ALLOCA
! 402: # if YYSTACK_USE_ALLOCA
! 403: # ifdef __GNUC__
! 404: # define YYSTACK_ALLOC __builtin_alloca
! 405: # elif defined __BUILTIN_VA_ARG_INCR
! 406: # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
! 407: # elif defined _AIX
! 408: # define YYSTACK_ALLOC __alloca
! 409: # elif defined _MSC_VER
! 410: # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
! 411: # define alloca _alloca
! 412: # else
! 413: # define YYSTACK_ALLOC alloca
! 414: # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
! 415: || defined __cplusplus || defined _MSC_VER)
! 416: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
! 417: # ifndef _STDLIB_H
! 418: # define _STDLIB_H 1
! 419: # endif
! 420: # endif
! 421: # endif
! 422: # endif
! 423: # endif
! 424:
! 425: # ifdef YYSTACK_ALLOC
! 426: /* Pacify GCC's `empty if-body' warning. */
! 427: # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
! 428: # ifndef YYSTACK_ALLOC_MAXIMUM
! 429: /* The OS might guarantee only one guard page at the bottom of the stack,
! 430: and a page size can be as small as 4096 bytes. So we cannot safely
! 431: invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
! 432: to allow for a few compiler-allocated temporary stack slots. */
! 433: # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
! 434: # endif
! 435: # else
! 436: # define YYSTACK_ALLOC YYMALLOC
! 437: # define YYSTACK_FREE YYFREE
! 438: # ifndef YYSTACK_ALLOC_MAXIMUM
! 439: # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
! 440: # endif
! 441: # if (defined __cplusplus && ! defined _STDLIB_H \
! 442: && ! ((defined YYMALLOC || defined malloc) \
! 443: && (defined YYFREE || defined free)))
! 444: # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
! 445: # ifndef _STDLIB_H
! 446: # define _STDLIB_H 1
! 447: # endif
! 448: # endif
! 449: # ifndef YYMALLOC
! 450: # define YYMALLOC malloc
! 451: # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
! 452: || defined __cplusplus || defined _MSC_VER)
! 453: void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
! 454: # endif
! 455: # endif
! 456: # ifndef YYFREE
! 457: # define YYFREE free
! 458: # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
! 459: || defined __cplusplus || defined _MSC_VER)
! 460: void free (void *); /* INFRINGES ON USER NAME SPACE */
! 461: # endif
! 462: # endif
! 463: # endif
! 464: #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
! 465:
! 466:
! 467: #if (! defined yyoverflow \
! 468: && (! defined __cplusplus \
! 469: || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
! 470:
! 471: /* A type that is properly aligned for any stack member. */
! 472: union yyalloc
! 473: {
! 474: yytype_int16 yyss_alloc;
! 475: YYSTYPE yyvs_alloc;
! 476: };
! 477:
! 478: /* The size of the maximum gap between one aligned stack and the next. */
! 479: # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
! 480:
! 481: /* The size of an array large to enough to hold all stacks, each with
! 482: N elements. */
! 483: # define YYSTACK_BYTES(N) \
! 484: ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
! 485: + YYSTACK_GAP_MAXIMUM)
! 486:
! 487: /* Copy COUNT objects from FROM to TO. The source and destination do
! 488: not overlap. */
! 489: # ifndef YYCOPY
! 490: # if defined __GNUC__ && 1 < __GNUC__
! 491: # define YYCOPY(To, From, Count) \
! 492: __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
! 493: # else
! 494: # define YYCOPY(To, From, Count) \
! 495: do \
! 496: { \
! 497: YYSIZE_T yyi; \
! 498: for (yyi = 0; yyi < (Count); yyi++) \
! 499: (To)[yyi] = (From)[yyi]; \
! 500: } \
! 501: while (YYID (0))
! 502: # endif
! 503: # endif
! 504:
! 505: /* Relocate STACK from its old location to the new one. The
! 506: local variables YYSIZE and YYSTACKSIZE give the old and new number of
! 507: elements in the stack, and YYPTR gives the new location of the
! 508: stack. Advance YYPTR to a properly aligned location for the next
! 509: stack. */
! 510: # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
! 511: do \
! 512: { \
! 513: YYSIZE_T yynewbytes; \
! 514: YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
! 515: Stack = &yyptr->Stack_alloc; \
! 516: yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
! 517: yyptr += yynewbytes / sizeof (*yyptr); \
! 518: } \
! 519: while (YYID (0))
! 520:
! 521: #endif
! 522:
! 523: /* YYFINAL -- State number of the termination state. */
! 524: #define YYFINAL 16
! 525: /* YYLAST -- Last index in YYTABLE. */
! 526: #define YYLAST 60
! 527:
! 528: /* YYNTOKENS -- Number of terminals. */
! 529: #define YYNTOKENS 24
! 530: /* YYNNTS -- Number of nonterminals. */
! 531: #define YYNNTS 10
! 532: /* YYNRULES -- Number of rules. */
! 533: #define YYNRULES 26
! 534: /* YYNRULES -- Number of states. */
! 535: #define YYNSTATES 55
! 536:
! 537: /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
! 538: #define YYUNDEFTOK 2
! 539: #define YYMAXUTOK 278
! 540:
! 541: #define YYTRANSLATE(YYX) \
! 542: ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
! 543:
! 544: /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
! 545: static const yytype_uint8 yytranslate[] =
! 546: {
! 547: 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 548: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 549: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 550: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 551: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 552: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 553: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 554: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 555: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 556: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 557: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 558: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 559: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 560: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 561: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 562: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 563: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 564: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 565: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 566: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 567: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 568: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 569: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 570: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 571: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
! 572: 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
! 573: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
! 574: 15, 16, 17, 18, 19, 20, 21, 22, 23
! 575: };
! 576:
! 577: #if YYDEBUG
! 578: /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
! 579: YYRHS. */
! 580: static const yytype_uint8 yyprhs[] =
! 581: {
! 582: 0, 0, 3, 6, 8, 13, 17, 20, 25, 28,
! 583: 31, 33, 35, 37, 40, 43, 44, 47, 50, 52,
! 584: 56, 60, 64, 68, 72, 76, 80
! 585: };
! 586:
! 587: /* YYRHS -- A `-1'-separated list of the rules' RHS. */
! 588: static const yytype_int8 yyrhs[] =
! 589: {
! 590: 25, 0, -1, 25, 26, -1, 26, -1, 28, 28,
! 591: 3, 27, -1, 28, 3, 27, -1, 3, 27, -1,
! 592: 7, 5, 32, 6, -1, 8, 23, -1, 8, 4,
! 593: -1, 29, -1, 30, -1, 20, -1, 18, 31, -1,
! 594: 19, 31, -1, -1, 21, 22, -1, 32, 33, -1,
! 595: 33, -1, 10, 3, 4, -1, 11, 3, 4, -1,
! 596: 12, 3, 4, -1, 13, 3, 4, -1, 14, 3,
! 597: 4, -1, 15, 3, 4, -1, 16, 3, 4, -1,
! 598: 17, 3, 4, -1
! 599: };
! 600:
! 601: /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
! 602: static const yytype_uint16 yyrline[] =
! 603: {
! 604: 0, 155, 155, 156, 160, 164, 168, 175, 207, 216,
! 605: 227, 228, 229, 236, 265, 294, 295, 298, 299, 303,
! 606: 305, 307, 309, 311, 313, 315, 317
! 607: };
! 608: #endif
! 609:
! 610: #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
! 611: /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
! 612: First, the terminals, then, starting at YYNTOKENS, nonterminals. */
! 613: static const char *const yytname[] =
! 614: {
! 615: "$end", "error", "$undefined", "COLON", "HEX", "OBRACE", "EBRACE",
! 616: "TAG_RSA", "TAG_PUB", "TAG_PSK", "MODULUS", "PUBLIC_EXPONENT",
! 617: "PRIVATE_EXPONENT", "PRIME1", "PRIME2", "EXPONENT1", "EXPONENT2",
! 618: "COEFFICIENT", "ADDR4", "ADDR6", "ADDRANY", "SLASH", "NUMBER", "BASE64",
! 619: "$accept", "statements", "statement", "rsa_statement", "addr", "addr4",
! 620: "addr6", "prefix", "params", "param", 0
! 621: };
! 622: #endif
! 623:
! 624: # ifdef YYPRINT
! 625: /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
! 626: token YYLEX-NUM. */
! 627: static const yytype_uint16 yytoknum[] =
! 628: {
! 629: 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
! 630: 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
! 631: 275, 276, 277, 278
! 632: };
! 633: # endif
! 634:
! 635: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
! 636: static const yytype_uint8 yyr1[] =
! 637: {
! 638: 0, 24, 25, 25, 26, 26, 26, 27, 27, 27,
! 639: 28, 28, 28, 29, 30, 31, 31, 32, 32, 33,
! 640: 33, 33, 33, 33, 33, 33, 33
! 641: };
! 642:
! 643: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
! 644: static const yytype_uint8 yyr2[] =
! 645: {
! 646: 0, 2, 2, 1, 4, 3, 2, 4, 2, 2,
! 647: 1, 1, 1, 2, 2, 0, 2, 2, 1, 3,
! 648: 3, 3, 3, 3, 3, 3, 3
! 649: };
! 650:
! 651: /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
! 652: STATE-NUM when YYTABLE doesn't specify something else to do. Zero
! 653: means the default is an error. */
! 654: static const yytype_uint8 yydefact[] =
! 655: {
! 656: 0, 0, 15, 15, 12, 0, 3, 0, 10, 11,
! 657: 0, 0, 6, 0, 13, 14, 1, 2, 0, 0,
! 658: 0, 9, 8, 16, 5, 0, 0, 0, 0, 0,
! 659: 0, 0, 0, 0, 0, 18, 4, 0, 0, 0,
! 660: 0, 0, 0, 0, 0, 7, 17, 19, 20, 21,
! 661: 22, 23, 24, 25, 26
! 662: };
! 663:
! 664: /* YYDEFGOTO[NTERM-NUM]. */
! 665: static const yytype_int8 yydefgoto[] =
! 666: {
! 667: -1, 5, 6, 12, 7, 8, 9, 14, 34, 35
! 668: };
! 669:
! 670: /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
! 671: STATE-NUM. */
! 672: #define YYPACT_NINF -18
! 673: static const yytype_int8 yypact[] =
! 674: {
! 675: 4, -3, -15, -15, -18, 0, -18, 7, -18, -18,
! 676: 6, -2, -18, -13, -18, -18, -18, -18, -3, 9,
! 677: 30, -18, -18, -18, -18, -3, 10, 11, 12, 13,
! 678: 14, 26, 27, 28, 22, -18, -18, 44, 45, 46,
! 679: 47, 48, 49, 50, 51, -18, -18, -18, -18, -18,
! 680: -18, -18, -18, -18, -18
! 681: };
! 682:
! 683: /* YYPGOTO[NTERM-NUM]. */
! 684: static const yytype_int8 yypgoto[] =
! 685: {
! 686: -18, -18, 52, -17, 53, -18, -18, 55, -18, 25
! 687: };
! 688:
! 689: /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
! 690: positive, shift that token. If negative, reduce the rule which
! 691: number is the opposite. If zero, do what YYDEFACT says.
! 692: If YYTABLE_NINF, syntax error. */
! 693: #define YYTABLE_NINF -1
! 694: static const yytype_uint8 yytable[] =
! 695: {
! 696: 16, 24, 21, 1, 10, 11, 13, 1, 36, 23,
! 697: 18, 20, 25, 37, 38, 39, 40, 41, 2, 3,
! 698: 4, 22, 2, 3, 4, 2, 3, 4, 45, 42,
! 699: 43, 44, 26, 27, 28, 29, 30, 31, 32, 33,
! 700: 26, 27, 28, 29, 30, 31, 32, 33, 47, 48,
! 701: 49, 50, 51, 52, 53, 54, 0, 17, 15, 46,
! 702: 19
! 703: };
! 704:
! 705: static const yytype_int8 yycheck[] =
! 706: {
! 707: 0, 18, 4, 3, 7, 8, 21, 3, 25, 22,
! 708: 3, 5, 3, 3, 3, 3, 3, 3, 18, 19,
! 709: 20, 23, 18, 19, 20, 18, 19, 20, 6, 3,
! 710: 3, 3, 10, 11, 12, 13, 14, 15, 16, 17,
! 711: 10, 11, 12, 13, 14, 15, 16, 17, 4, 4,
! 712: 4, 4, 4, 4, 4, 4, -1, 5, 3, 34,
! 713: 7
! 714: };
! 715:
! 716: /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
! 717: symbol of state STATE-NUM. */
! 718: static const yytype_uint8 yystos[] =
! 719: {
! 720: 0, 3, 18, 19, 20, 25, 26, 28, 29, 30,
! 721: 7, 8, 27, 21, 31, 31, 0, 26, 3, 28,
! 722: 5, 4, 23, 22, 27, 3, 10, 11, 12, 13,
! 723: 14, 15, 16, 17, 32, 33, 27, 3, 3, 3,
! 724: 3, 3, 3, 3, 3, 6, 33, 4, 4, 4,
! 725: 4, 4, 4, 4, 4
! 726: };
! 727:
! 728: #define yyerrok (yyerrstatus = 0)
! 729: #define yyclearin (yychar = YYEMPTY)
! 730: #define YYEMPTY (-2)
! 731: #define YYEOF 0
! 732:
! 733: #define YYACCEPT goto yyacceptlab
! 734: #define YYABORT goto yyabortlab
! 735: #define YYERROR goto yyerrorlab
! 736:
! 737:
! 738: /* Like YYERROR except do call yyerror. This remains here temporarily
! 739: to ease the transition to the new meaning of YYERROR, for GCC.
! 740: Once GCC version 2 has supplanted version 1, this can go. */
! 741:
! 742: #define YYFAIL goto yyerrlab
! 743:
! 744: #define YYRECOVERING() (!!yyerrstatus)
! 745:
! 746: #define YYBACKUP(Token, Value) \
! 747: do \
! 748: if (yychar == YYEMPTY && yylen == 1) \
! 749: { \
! 750: yychar = (Token); \
! 751: yylval = (Value); \
! 752: yytoken = YYTRANSLATE (yychar); \
! 753: YYPOPSTACK (1); \
! 754: goto yybackup; \
! 755: } \
! 756: else \
! 757: { \
! 758: yyerror (YY_("syntax error: cannot back up")); \
! 759: YYERROR; \
! 760: } \
! 761: while (YYID (0))
! 762:
! 763:
! 764: #define YYTERROR 1
! 765: #define YYERRCODE 256
! 766:
! 767:
! 768: /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
! 769: If N is 0, then set CURRENT to the empty location which ends
! 770: the previous symbol: RHS[0] (always defined). */
! 771:
! 772: #define YYRHSLOC(Rhs, K) ((Rhs)[K])
! 773: #ifndef YYLLOC_DEFAULT
! 774: # define YYLLOC_DEFAULT(Current, Rhs, N) \
! 775: do \
! 776: if (YYID (N)) \
! 777: { \
! 778: (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
! 779: (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
! 780: (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
! 781: (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
! 782: } \
! 783: else \
! 784: { \
! 785: (Current).first_line = (Current).last_line = \
! 786: YYRHSLOC (Rhs, 0).last_line; \
! 787: (Current).first_column = (Current).last_column = \
! 788: YYRHSLOC (Rhs, 0).last_column; \
! 789: } \
! 790: while (YYID (0))
! 791: #endif
! 792:
! 793:
! 794: /* YY_LOCATION_PRINT -- Print the location on the stream.
! 795: This macro was not mandated originally: define only if we know
! 796: we won't break user code: when these are the locations we know. */
! 797:
! 798: #ifndef YY_LOCATION_PRINT
! 799: # if YYLTYPE_IS_TRIVIAL
! 800: # define YY_LOCATION_PRINT(File, Loc) \
! 801: fprintf (File, "%d.%d-%d.%d", \
! 802: (Loc).first_line, (Loc).first_column, \
! 803: (Loc).last_line, (Loc).last_column)
! 804: # else
! 805: # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
! 806: # endif
! 807: #endif
! 808:
! 809:
! 810: /* YYLEX -- calling `yylex' with the right arguments. */
! 811:
! 812: #ifdef YYLEX_PARAM
! 813: # define YYLEX yylex (YYLEX_PARAM)
! 814: #else
! 815: # define YYLEX yylex ()
! 816: #endif
! 817:
! 818: /* Enable debugging if requested. */
! 819: #if YYDEBUG
! 820:
! 821: # ifndef YYFPRINTF
! 822: # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
! 823: # define YYFPRINTF fprintf
! 824: # endif
! 825:
! 826: # define YYDPRINTF(Args) \
! 827: do { \
! 828: if (yydebug) \
! 829: YYFPRINTF Args; \
! 830: } while (YYID (0))
! 831:
! 832: # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
! 833: do { \
! 834: if (yydebug) \
! 835: { \
! 836: YYFPRINTF (stderr, "%s ", Title); \
! 837: yy_symbol_print (stderr, \
! 838: Type, Value); \
! 839: YYFPRINTF (stderr, "\n"); \
! 840: } \
! 841: } while (YYID (0))
! 842:
! 843:
! 844: /*--------------------------------.
! 845: | Print this symbol on YYOUTPUT. |
! 846: `--------------------------------*/
! 847:
! 848: /*ARGSUSED*/
! 849: #if (defined __STDC__ || defined __C99__FUNC__ \
! 850: || defined __cplusplus || defined _MSC_VER)
! 851: static void
! 852: yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
! 853: #else
! 854: static void
! 855: yy_symbol_value_print (yyoutput, yytype, yyvaluep)
! 856: FILE *yyoutput;
! 857: int yytype;
! 858: YYSTYPE const * const yyvaluep;
! 859: #endif
! 860: {
! 861: if (!yyvaluep)
! 862: return;
! 863: # ifdef YYPRINT
! 864: if (yytype < YYNTOKENS)
! 865: YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
! 866: # else
! 867: YYUSE (yyoutput);
! 868: # endif
! 869: switch (yytype)
! 870: {
! 871: default:
! 872: break;
! 873: }
! 874: }
! 875:
! 876:
! 877: /*--------------------------------.
! 878: | Print this symbol on YYOUTPUT. |
! 879: `--------------------------------*/
! 880:
! 881: #if (defined __STDC__ || defined __C99__FUNC__ \
! 882: || defined __cplusplus || defined _MSC_VER)
! 883: static void
! 884: yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
! 885: #else
! 886: static void
! 887: yy_symbol_print (yyoutput, yytype, yyvaluep)
! 888: FILE *yyoutput;
! 889: int yytype;
! 890: YYSTYPE const * const yyvaluep;
! 891: #endif
! 892: {
! 893: if (yytype < YYNTOKENS)
! 894: YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
! 895: else
! 896: YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
! 897:
! 898: yy_symbol_value_print (yyoutput, yytype, yyvaluep);
! 899: YYFPRINTF (yyoutput, ")");
! 900: }
! 901:
! 902: /*------------------------------------------------------------------.
! 903: | yy_stack_print -- Print the state stack from its BOTTOM up to its |
! 904: | TOP (included). |
! 905: `------------------------------------------------------------------*/
! 906:
! 907: #if (defined __STDC__ || defined __C99__FUNC__ \
! 908: || defined __cplusplus || defined _MSC_VER)
! 909: static void
! 910: yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
! 911: #else
! 912: static void
! 913: yy_stack_print (yybottom, yytop)
! 914: yytype_int16 *yybottom;
! 915: yytype_int16 *yytop;
! 916: #endif
! 917: {
! 918: YYFPRINTF (stderr, "Stack now");
! 919: for (; yybottom <= yytop; yybottom++)
! 920: {
! 921: int yybot = *yybottom;
! 922: YYFPRINTF (stderr, " %d", yybot);
! 923: }
! 924: YYFPRINTF (stderr, "\n");
! 925: }
! 926:
! 927: # define YY_STACK_PRINT(Bottom, Top) \
! 928: do { \
! 929: if (yydebug) \
! 930: yy_stack_print ((Bottom), (Top)); \
! 931: } while (YYID (0))
! 932:
! 933:
! 934: /*------------------------------------------------.
! 935: | Report that the YYRULE is going to be reduced. |
! 936: `------------------------------------------------*/
! 937:
! 938: #if (defined __STDC__ || defined __C99__FUNC__ \
! 939: || defined __cplusplus || defined _MSC_VER)
! 940: static void
! 941: yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
! 942: #else
! 943: static void
! 944: yy_reduce_print (yyvsp, yyrule)
! 945: YYSTYPE *yyvsp;
! 946: int yyrule;
! 947: #endif
! 948: {
! 949: int yynrhs = yyr2[yyrule];
! 950: int yyi;
! 951: unsigned long int yylno = yyrline[yyrule];
! 952: YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
! 953: yyrule - 1, yylno);
! 954: /* The symbols being reduced. */
! 955: for (yyi = 0; yyi < yynrhs; yyi++)
! 956: {
! 957: YYFPRINTF (stderr, " $%d = ", yyi + 1);
! 958: yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
! 959: &(yyvsp[(yyi + 1) - (yynrhs)])
! 960: );
! 961: YYFPRINTF (stderr, "\n");
! 962: }
! 963: }
! 964:
! 965: # define YY_REDUCE_PRINT(Rule) \
! 966: do { \
! 967: if (yydebug) \
! 968: yy_reduce_print (yyvsp, Rule); \
! 969: } while (YYID (0))
! 970:
! 971: /* Nonzero means print parse trace. It is left uninitialized so that
! 972: multiple parsers can coexist. */
! 973: int yydebug;
! 974: #else /* !YYDEBUG */
! 975: # define YYDPRINTF(Args)
! 976: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
! 977: # define YY_STACK_PRINT(Bottom, Top)
! 978: # define YY_REDUCE_PRINT(Rule)
! 979: #endif /* !YYDEBUG */
! 980:
! 981:
! 982: /* YYINITDEPTH -- initial size of the parser's stacks. */
! 983: #ifndef YYINITDEPTH
! 984: # define YYINITDEPTH 200
! 985: #endif
! 986:
! 987: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
! 988: if the built-in stack extension method is used).
! 989:
! 990: Do not make this value too large; the results are undefined if
! 991: YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
! 992: evaluated with infinite-precision integer arithmetic. */
! 993:
! 994: #ifndef YYMAXDEPTH
! 995: # define YYMAXDEPTH 10000
! 996: #endif
! 997:
! 998:
! 999:
! 1000: #if YYERROR_VERBOSE
! 1001:
! 1002: # ifndef yystrlen
! 1003: # if defined __GLIBC__ && defined _STRING_H
! 1004: # define yystrlen strlen
! 1005: # else
! 1006: /* Return the length of YYSTR. */
! 1007: #if (defined __STDC__ || defined __C99__FUNC__ \
! 1008: || defined __cplusplus || defined _MSC_VER)
! 1009: static YYSIZE_T
! 1010: yystrlen (const char *yystr)
! 1011: #else
! 1012: static YYSIZE_T
! 1013: yystrlen (yystr)
! 1014: const char *yystr;
! 1015: #endif
! 1016: {
! 1017: YYSIZE_T yylen;
! 1018: for (yylen = 0; yystr[yylen]; yylen++)
! 1019: continue;
! 1020: return yylen;
! 1021: }
! 1022: # endif
! 1023: # endif
! 1024:
! 1025: # ifndef yystpcpy
! 1026: # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
! 1027: # define yystpcpy stpcpy
! 1028: # else
! 1029: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
! 1030: YYDEST. */
! 1031: #if (defined __STDC__ || defined __C99__FUNC__ \
! 1032: || defined __cplusplus || defined _MSC_VER)
! 1033: static char *
! 1034: yystpcpy (char *yydest, const char *yysrc)
! 1035: #else
! 1036: static char *
! 1037: yystpcpy (yydest, yysrc)
! 1038: char *yydest;
! 1039: const char *yysrc;
! 1040: #endif
! 1041: {
! 1042: char *yyd = yydest;
! 1043: const char *yys = yysrc;
! 1044:
! 1045: while ((*yyd++ = *yys++) != '\0')
! 1046: continue;
! 1047:
! 1048: return yyd - 1;
! 1049: }
! 1050: # endif
! 1051: # endif
! 1052:
! 1053: # ifndef yytnamerr
! 1054: /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
! 1055: quotes and backslashes, so that it's suitable for yyerror. The
! 1056: heuristic is that double-quoting is unnecessary unless the string
! 1057: contains an apostrophe, a comma, or backslash (other than
! 1058: backslash-backslash). YYSTR is taken from yytname. If YYRES is
! 1059: null, do not copy; instead, return the length of what the result
! 1060: would have been. */
! 1061: static YYSIZE_T
! 1062: yytnamerr (char *yyres, const char *yystr)
! 1063: {
! 1064: if (*yystr == '"')
! 1065: {
! 1066: YYSIZE_T yyn = 0;
! 1067: char const *yyp = yystr;
! 1068:
! 1069: for (;;)
! 1070: switch (*++yyp)
! 1071: {
! 1072: case '\'':
! 1073: case ',':
! 1074: goto do_not_strip_quotes;
! 1075:
! 1076: case '\\':
! 1077: if (*++yyp != '\\')
! 1078: goto do_not_strip_quotes;
! 1079: /* Fall through. */
! 1080: default:
! 1081: if (yyres)
! 1082: yyres[yyn] = *yyp;
! 1083: yyn++;
! 1084: break;
! 1085:
! 1086: case '"':
! 1087: if (yyres)
! 1088: yyres[yyn] = '\0';
! 1089: return yyn;
! 1090: }
! 1091: do_not_strip_quotes: ;
! 1092: }
! 1093:
! 1094: if (! yyres)
! 1095: return yystrlen (yystr);
! 1096:
! 1097: return yystpcpy (yyres, yystr) - yyres;
! 1098: }
! 1099: # endif
! 1100:
! 1101: /* Copy into YYRESULT an error message about the unexpected token
! 1102: YYCHAR while in state YYSTATE. Return the number of bytes copied,
! 1103: including the terminating null byte. If YYRESULT is null, do not
! 1104: copy anything; just return the number of bytes that would be
! 1105: copied. As a special case, return 0 if an ordinary "syntax error"
! 1106: message will do. Return YYSIZE_MAXIMUM if overflow occurs during
! 1107: size calculation. */
! 1108: static YYSIZE_T
! 1109: yysyntax_error (char *yyresult, int yystate, int yychar)
! 1110: {
! 1111: int yyn = yypact[yystate];
! 1112:
! 1113: if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
! 1114: return 0;
! 1115: else
! 1116: {
! 1117: int yytype = YYTRANSLATE (yychar);
! 1118: YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
! 1119: YYSIZE_T yysize = yysize0;
! 1120: YYSIZE_T yysize1;
! 1121: int yysize_overflow = 0;
! 1122: enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
! 1123: char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
! 1124: int yyx;
! 1125:
! 1126: # if 0
! 1127: /* This is so xgettext sees the translatable formats that are
! 1128: constructed on the fly. */
! 1129: YY_("syntax error, unexpected %s");
! 1130: YY_("syntax error, unexpected %s, expecting %s");
! 1131: YY_("syntax error, unexpected %s, expecting %s or %s");
! 1132: YY_("syntax error, unexpected %s, expecting %s or %s or %s");
! 1133: YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
! 1134: # endif
! 1135: char *yyfmt;
! 1136: char const *yyf;
! 1137: static char const yyunexpected[] = "syntax error, unexpected %s";
! 1138: static char const yyexpecting[] = ", expecting %s";
! 1139: static char const yyor[] = " or %s";
! 1140: char yyformat[sizeof yyunexpected
! 1141: + sizeof yyexpecting - 1
! 1142: + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
! 1143: * (sizeof yyor - 1))];
! 1144: char const *yyprefix = yyexpecting;
! 1145:
! 1146: /* Start YYX at -YYN if negative to avoid negative indexes in
! 1147: YYCHECK. */
! 1148: int yyxbegin = yyn < 0 ? -yyn : 0;
! 1149:
! 1150: /* Stay within bounds of both yycheck and yytname. */
! 1151: int yychecklim = YYLAST - yyn + 1;
! 1152: int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
! 1153: int yycount = 1;
! 1154:
! 1155: yyarg[0] = yytname[yytype];
! 1156: yyfmt = yystpcpy (yyformat, yyunexpected);
! 1157:
! 1158: for (yyx = yyxbegin; yyx < yyxend; ++yyx)
! 1159: if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
! 1160: {
! 1161: if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
! 1162: {
! 1163: yycount = 1;
! 1164: yysize = yysize0;
! 1165: yyformat[sizeof yyunexpected - 1] = '\0';
! 1166: break;
! 1167: }
! 1168: yyarg[yycount++] = yytname[yyx];
! 1169: yysize1 = yysize + yytnamerr (0, yytname[yyx]);
! 1170: yysize_overflow |= (yysize1 < yysize);
! 1171: yysize = yysize1;
! 1172: yyfmt = yystpcpy (yyfmt, yyprefix);
! 1173: yyprefix = yyor;
! 1174: }
! 1175:
! 1176: yyf = YY_(yyformat);
! 1177: yysize1 = yysize + yystrlen (yyf);
! 1178: yysize_overflow |= (yysize1 < yysize);
! 1179: yysize = yysize1;
! 1180:
! 1181: if (yysize_overflow)
! 1182: return YYSIZE_MAXIMUM;
! 1183:
! 1184: if (yyresult)
! 1185: {
! 1186: /* Avoid sprintf, as that infringes on the user's name space.
! 1187: Don't have undefined behavior even if the translation
! 1188: produced a string with the wrong number of "%s"s. */
! 1189: char *yyp = yyresult;
! 1190: int yyi = 0;
! 1191: while ((*yyp = *yyf) != '\0')
! 1192: {
! 1193: if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
! 1194: {
! 1195: yyp += yytnamerr (yyp, yyarg[yyi++]);
! 1196: yyf += 2;
! 1197: }
! 1198: else
! 1199: {
! 1200: yyp++;
! 1201: yyf++;
! 1202: }
! 1203: }
! 1204: }
! 1205: return yysize;
! 1206: }
! 1207: }
! 1208: #endif /* YYERROR_VERBOSE */
! 1209:
! 1210:
! 1211: /*-----------------------------------------------.
! 1212: | Release the memory associated to this symbol. |
! 1213: `-----------------------------------------------*/
! 1214:
! 1215: /*ARGSUSED*/
! 1216: #if (defined __STDC__ || defined __C99__FUNC__ \
! 1217: || defined __cplusplus || defined _MSC_VER)
! 1218: static void
! 1219: yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
! 1220: #else
! 1221: static void
! 1222: yydestruct (yymsg, yytype, yyvaluep)
! 1223: const char *yymsg;
! 1224: int yytype;
! 1225: YYSTYPE *yyvaluep;
! 1226: #endif
! 1227: {
! 1228: YYUSE (yyvaluep);
! 1229:
! 1230: if (!yymsg)
! 1231: yymsg = "Deleting";
! 1232: YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
! 1233:
! 1234: switch (yytype)
! 1235: {
! 1236:
! 1237: default:
! 1238: break;
! 1239: }
! 1240: }
! 1241:
! 1242: /* Prevent warnings from -Wmissing-prototypes. */
! 1243: #ifdef YYPARSE_PARAM
! 1244: #if defined __STDC__ || defined __cplusplus
! 1245: int yyparse (void *YYPARSE_PARAM);
! 1246: #else
! 1247: int yyparse ();
! 1248: #endif
! 1249: #else /* ! YYPARSE_PARAM */
! 1250: #if defined __STDC__ || defined __cplusplus
! 1251: int yyparse (void);
! 1252: #else
! 1253: int yyparse ();
! 1254: #endif
! 1255: #endif /* ! YYPARSE_PARAM */
! 1256:
! 1257:
! 1258: /* The lookahead symbol. */
! 1259: int yychar;
! 1260:
! 1261: /* The semantic value of the lookahead symbol. */
! 1262: YYSTYPE yylval;
! 1263:
! 1264: /* Number of syntax errors so far. */
! 1265: int yynerrs;
! 1266:
! 1267:
! 1268:
! 1269: /*-------------------------.
! 1270: | yyparse or yypush_parse. |
! 1271: `-------------------------*/
! 1272:
! 1273: #ifdef YYPARSE_PARAM
! 1274: #if (defined __STDC__ || defined __C99__FUNC__ \
! 1275: || defined __cplusplus || defined _MSC_VER)
! 1276: int
! 1277: yyparse (void *YYPARSE_PARAM)
! 1278: #else
! 1279: int
! 1280: yyparse (YYPARSE_PARAM)
! 1281: void *YYPARSE_PARAM;
! 1282: #endif
! 1283: #else /* ! YYPARSE_PARAM */
! 1284: #if (defined __STDC__ || defined __C99__FUNC__ \
! 1285: || defined __cplusplus || defined _MSC_VER)
! 1286: int
! 1287: yyparse (void)
! 1288: #else
! 1289: int
! 1290: yyparse ()
! 1291:
! 1292: #endif
! 1293: #endif
! 1294: {
! 1295:
! 1296:
! 1297: int yystate;
! 1298: /* Number of tokens to shift before error messages enabled. */
! 1299: int yyerrstatus;
! 1300:
! 1301: /* The stacks and their tools:
! 1302: `yyss': related to states.
! 1303: `yyvs': related to semantic values.
! 1304:
! 1305: Refer to the stacks thru separate pointers, to allow yyoverflow
! 1306: to reallocate them elsewhere. */
! 1307:
! 1308: /* The state stack. */
! 1309: yytype_int16 yyssa[YYINITDEPTH];
! 1310: yytype_int16 *yyss;
! 1311: yytype_int16 *yyssp;
! 1312:
! 1313: /* The semantic value stack. */
! 1314: YYSTYPE yyvsa[YYINITDEPTH];
! 1315: YYSTYPE *yyvs;
! 1316: YYSTYPE *yyvsp;
! 1317:
! 1318: YYSIZE_T yystacksize;
! 1319:
! 1320: int yyn;
! 1321: int yyresult;
! 1322: /* Lookahead token as an internal (translated) token number. */
! 1323: int yytoken;
! 1324: /* The variables used to return semantic value and location from the
! 1325: action routines. */
! 1326: YYSTYPE yyval;
! 1327:
! 1328: #if YYERROR_VERBOSE
! 1329: /* Buffer for error messages, and its allocated size. */
! 1330: char yymsgbuf[128];
! 1331: char *yymsg = yymsgbuf;
! 1332: YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
! 1333: #endif
! 1334:
! 1335: #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
! 1336:
! 1337: /* The number of symbols on the RHS of the reduced rule.
! 1338: Keep to zero when no symbol should be popped. */
! 1339: int yylen = 0;
! 1340:
! 1341: yytoken = 0;
! 1342: yyss = yyssa;
! 1343: yyvs = yyvsa;
! 1344: yystacksize = YYINITDEPTH;
! 1345:
! 1346: YYDPRINTF ((stderr, "Starting parse\n"));
! 1347:
! 1348: yystate = 0;
! 1349: yyerrstatus = 0;
! 1350: yynerrs = 0;
! 1351: yychar = YYEMPTY; /* Cause a token to be read. */
! 1352:
! 1353: /* Initialize stack pointers.
! 1354: Waste one element of value and location stack
! 1355: so that they stay on the same level as the state stack.
! 1356: The wasted elements are never initialized. */
! 1357: yyssp = yyss;
! 1358: yyvsp = yyvs;
! 1359:
! 1360: goto yysetstate;
! 1361:
! 1362: /*------------------------------------------------------------.
! 1363: | yynewstate -- Push a new state, which is found in yystate. |
! 1364: `------------------------------------------------------------*/
! 1365: yynewstate:
! 1366: /* In all cases, when you get here, the value and location stacks
! 1367: have just been pushed. So pushing a state here evens the stacks. */
! 1368: yyssp++;
! 1369:
! 1370: yysetstate:
! 1371: *yyssp = yystate;
! 1372:
! 1373: if (yyss + yystacksize - 1 <= yyssp)
! 1374: {
! 1375: /* Get the current used size of the three stacks, in elements. */
! 1376: YYSIZE_T yysize = yyssp - yyss + 1;
! 1377:
! 1378: #ifdef yyoverflow
! 1379: {
! 1380: /* Give user a chance to reallocate the stack. Use copies of
! 1381: these so that the &'s don't force the real ones into
! 1382: memory. */
! 1383: YYSTYPE *yyvs1 = yyvs;
! 1384: yytype_int16 *yyss1 = yyss;
! 1385:
! 1386: /* Each stack pointer address is followed by the size of the
! 1387: data in use in that stack, in bytes. This used to be a
! 1388: conditional around just the two extra args, but that might
! 1389: be undefined if yyoverflow is a macro. */
! 1390: yyoverflow (YY_("memory exhausted"),
! 1391: &yyss1, yysize * sizeof (*yyssp),
! 1392: &yyvs1, yysize * sizeof (*yyvsp),
! 1393: &yystacksize);
! 1394:
! 1395: yyss = yyss1;
! 1396: yyvs = yyvs1;
! 1397: }
! 1398: #else /* no yyoverflow */
! 1399: # ifndef YYSTACK_RELOCATE
! 1400: goto yyexhaustedlab;
! 1401: # else
! 1402: /* Extend the stack our own way. */
! 1403: if (YYMAXDEPTH <= yystacksize)
! 1404: goto yyexhaustedlab;
! 1405: yystacksize *= 2;
! 1406: if (YYMAXDEPTH < yystacksize)
! 1407: yystacksize = YYMAXDEPTH;
! 1408:
! 1409: {
! 1410: yytype_int16 *yyss1 = yyss;
! 1411: union yyalloc *yyptr =
! 1412: (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
! 1413: if (! yyptr)
! 1414: goto yyexhaustedlab;
! 1415: YYSTACK_RELOCATE (yyss_alloc, yyss);
! 1416: YYSTACK_RELOCATE (yyvs_alloc, yyvs);
! 1417: # undef YYSTACK_RELOCATE
! 1418: if (yyss1 != yyssa)
! 1419: YYSTACK_FREE (yyss1);
! 1420: }
! 1421: # endif
! 1422: #endif /* no yyoverflow */
! 1423:
! 1424: yyssp = yyss + yysize - 1;
! 1425: yyvsp = yyvs + yysize - 1;
! 1426:
! 1427: YYDPRINTF ((stderr, "Stack size increased to %lu\n",
! 1428: (unsigned long int) yystacksize));
! 1429:
! 1430: if (yyss + yystacksize - 1 <= yyssp)
! 1431: YYABORT;
! 1432: }
! 1433:
! 1434: YYDPRINTF ((stderr, "Entering state %d\n", yystate));
! 1435:
! 1436: if (yystate == YYFINAL)
! 1437: YYACCEPT;
! 1438:
! 1439: goto yybackup;
! 1440:
! 1441: /*-----------.
! 1442: | yybackup. |
! 1443: `-----------*/
! 1444: yybackup:
! 1445:
! 1446: /* Do appropriate processing given the current state. Read a
! 1447: lookahead token if we need one and don't already have one. */
! 1448:
! 1449: /* First try to decide what to do without reference to lookahead token. */
! 1450: yyn = yypact[yystate];
! 1451: if (yyn == YYPACT_NINF)
! 1452: goto yydefault;
! 1453:
! 1454: /* Not known => get a lookahead token if don't already have one. */
! 1455:
! 1456: /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
! 1457: if (yychar == YYEMPTY)
! 1458: {
! 1459: YYDPRINTF ((stderr, "Reading a token: "));
! 1460: yychar = YYLEX;
! 1461: }
! 1462:
! 1463: if (yychar <= YYEOF)
! 1464: {
! 1465: yychar = yytoken = YYEOF;
! 1466: YYDPRINTF ((stderr, "Now at end of input.\n"));
! 1467: }
! 1468: else
! 1469: {
! 1470: yytoken = YYTRANSLATE (yychar);
! 1471: YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
! 1472: }
! 1473:
! 1474: /* If the proper action on seeing token YYTOKEN is to reduce or to
! 1475: detect an error, take that action. */
! 1476: yyn += yytoken;
! 1477: if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
! 1478: goto yydefault;
! 1479: yyn = yytable[yyn];
! 1480: if (yyn <= 0)
! 1481: {
! 1482: if (yyn == 0 || yyn == YYTABLE_NINF)
! 1483: goto yyerrlab;
! 1484: yyn = -yyn;
! 1485: goto yyreduce;
! 1486: }
! 1487:
! 1488: /* Count tokens shifted since error; after three, turn off error
! 1489: status. */
! 1490: if (yyerrstatus)
! 1491: yyerrstatus--;
! 1492:
! 1493: /* Shift the lookahead token. */
! 1494: YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
! 1495:
! 1496: /* Discard the shifted token. */
! 1497: yychar = YYEMPTY;
! 1498:
! 1499: yystate = yyn;
! 1500: *++yyvsp = yylval;
! 1501:
! 1502: goto yynewstate;
! 1503:
! 1504:
! 1505: /*-----------------------------------------------------------.
! 1506: | yydefault -- do the default action for the current state. |
! 1507: `-----------------------------------------------------------*/
! 1508: yydefault:
! 1509: yyn = yydefact[yystate];
! 1510: if (yyn == 0)
! 1511: goto yyerrlab;
! 1512: goto yyreduce;
! 1513:
! 1514:
! 1515: /*-----------------------------.
! 1516: | yyreduce -- Do a reduction. |
! 1517: `-----------------------------*/
! 1518: yyreduce:
! 1519: /* yyn is the number of a rule to reduce with. */
! 1520: yylen = yyr2[yyn];
! 1521:
! 1522: /* If YYLEN is nonzero, implement the default value of the action:
! 1523: `$$ = $1'.
! 1524:
! 1525: Otherwise, the following line sets YYVAL to garbage.
! 1526: This behavior is undocumented and Bison
! 1527: users should not rely upon it. Assigning to YYVAL
! 1528: unconditionally makes the parser a bit smaller, and it avoids a
! 1529: GCC warning that YYVAL may be used uninitialized. */
! 1530: yyval = yyvsp[1-yylen];
! 1531:
! 1532:
! 1533: YY_REDUCE_PRINT (yyn);
! 1534: switch (yyn)
! 1535: {
! 1536: case 4:
! 1537:
! 1538: /* Line 1455 of yacc.c */
! 1539: #line 161 "prsa_par.y"
! 1540: {
! 1541: rsa_key_insert(prsa_cur_list, (yyvsp[(1) - (4)].naddr), (yyvsp[(2) - (4)].naddr), (yyvsp[(4) - (4)].rsa));
! 1542: }
! 1543: break;
! 1544:
! 1545: case 5:
! 1546:
! 1547: /* Line 1455 of yacc.c */
! 1548: #line 165 "prsa_par.y"
! 1549: {
! 1550: rsa_key_insert(prsa_cur_list, NULL, (yyvsp[(1) - (3)].naddr), (yyvsp[(3) - (3)].rsa));
! 1551: }
! 1552: break;
! 1553:
! 1554: case 6:
! 1555:
! 1556: /* Line 1455 of yacc.c */
! 1557: #line 169 "prsa_par.y"
! 1558: {
! 1559: rsa_key_insert(prsa_cur_list, NULL, NULL, (yyvsp[(2) - (2)].rsa));
! 1560: }
! 1561: break;
! 1562:
! 1563: case 7:
! 1564:
! 1565: /* Line 1455 of yacc.c */
! 1566: #line 176 "prsa_par.y"
! 1567: {
! 1568: if (prsa_cur_type == RSA_TYPE_PUBLIC) {
! 1569: prsawarning("Using private key for public key purpose.\n");
! 1570: if (!rsa_cur->n || !rsa_cur->e) {
! 1571: prsaerror("Incomplete key. Mandatory parameters are missing!\n");
! 1572: YYABORT;
! 1573: }
! 1574: }
! 1575: else {
! 1576: if (!rsa_cur->n || !rsa_cur->e || !rsa_cur->d) {
! 1577: prsaerror("Incomplete key. Mandatory parameters are missing!\n");
! 1578: YYABORT;
! 1579: }
! 1580: if (!rsa_cur->p || !rsa_cur->q || !rsa_cur->dmp1
! 1581: || !rsa_cur->dmq1 || !rsa_cur->iqmp) {
! 1582: if (rsa_cur->p) BN_clear_free(rsa_cur->p);
! 1583: if (rsa_cur->q) BN_clear_free(rsa_cur->q);
! 1584: if (rsa_cur->dmp1) BN_clear_free(rsa_cur->dmp1);
! 1585: if (rsa_cur->dmq1) BN_clear_free(rsa_cur->dmq1);
! 1586: if (rsa_cur->iqmp) BN_clear_free(rsa_cur->iqmp);
! 1587:
! 1588: rsa_cur->p = NULL;
! 1589: rsa_cur->q = NULL;
! 1590: rsa_cur->dmp1 = NULL;
! 1591: rsa_cur->dmq1 = NULL;
! 1592: rsa_cur->iqmp = NULL;
! 1593: }
! 1594: }
! 1595: (yyval.rsa) = rsa_cur;
! 1596: rsa_cur = RSA_new();
! 1597: }
! 1598: break;
! 1599:
! 1600: case 8:
! 1601:
! 1602: /* Line 1455 of yacc.c */
! 1603: #line 208 "prsa_par.y"
! 1604: {
! 1605: if (prsa_cur_type == RSA_TYPE_PRIVATE) {
! 1606: prsaerror("Public key in private-key file!\n");
! 1607: YYABORT;
! 1608: }
! 1609: (yyval.rsa) = base64_pubkey2rsa((yyvsp[(2) - (2)].chr));
! 1610: free((yyvsp[(2) - (2)].chr));
! 1611: }
! 1612: break;
! 1613:
! 1614: case 9:
! 1615:
! 1616: /* Line 1455 of yacc.c */
! 1617: #line 217 "prsa_par.y"
! 1618: {
! 1619: if (prsa_cur_type == RSA_TYPE_PRIVATE) {
! 1620: prsaerror("Public key in private-key file!\n");
! 1621: YYABORT;
! 1622: }
! 1623: (yyval.rsa) = bignum_pubkey2rsa((yyvsp[(2) - (2)].bn));
! 1624: }
! 1625: break;
! 1626:
! 1627: case 12:
! 1628:
! 1629: /* Line 1455 of yacc.c */
! 1630: #line 230 "prsa_par.y"
! 1631: {
! 1632: (yyval.naddr) = NULL;
! 1633: }
! 1634: break;
! 1635:
! 1636: case 13:
! 1637:
! 1638: /* Line 1455 of yacc.c */
! 1639: #line 237 "prsa_par.y"
! 1640: {
! 1641: int err;
! 1642: struct sockaddr_in *sap;
! 1643: struct addrinfo hints, *res;
! 1644:
! 1645: if ((yyvsp[(2) - (2)].num) == -1) (yyvsp[(2) - (2)].num) = 32;
! 1646: if ((yyvsp[(2) - (2)].num) < 0 || (yyvsp[(2) - (2)].num) > 32) {
! 1647: prsaerror ("Invalid IPv4 prefix\n");
! 1648: YYABORT;
! 1649: }
! 1650: (yyval.naddr) = calloc (sizeof(struct netaddr), 1);
! 1651: (yyval.naddr)->prefix = (yyvsp[(2) - (2)].num);
! 1652: sap = (struct sockaddr_in *)(&(yyval.naddr)->sa);
! 1653: memset(&hints, 0, sizeof(hints));
! 1654: hints.ai_family = AF_INET;
! 1655: hints.ai_flags = AI_NUMERICHOST;
! 1656: err = getaddrinfo((yyvsp[(1) - (2)].chr), NULL, &hints, &res);
! 1657: if (err < 0) {
! 1658: prsaerror("getaddrinfo(%s): %s\n", (yyvsp[(1) - (2)].chr), gai_strerror(err));
! 1659: YYABORT;
! 1660: }
! 1661: memcpy(sap, res->ai_addr, res->ai_addrlen);
! 1662: freeaddrinfo(res);
! 1663: free((yyvsp[(1) - (2)].chr));
! 1664: }
! 1665: break;
! 1666:
! 1667: case 14:
! 1668:
! 1669: /* Line 1455 of yacc.c */
! 1670: #line 266 "prsa_par.y"
! 1671: {
! 1672: int err;
! 1673: struct sockaddr_in6 *sap;
! 1674: struct addrinfo hints, *res;
! 1675:
! 1676: if ((yyvsp[(2) - (2)].num) == -1) (yyvsp[(2) - (2)].num) = 128;
! 1677: if ((yyvsp[(2) - (2)].num) < 0 || (yyvsp[(2) - (2)].num) > 128) {
! 1678: prsaerror ("Invalid IPv6 prefix\n");
! 1679: YYABORT;
! 1680: }
! 1681: (yyval.naddr) = calloc (sizeof(struct netaddr), 1);
! 1682: (yyval.naddr)->prefix = (yyvsp[(2) - (2)].num);
! 1683: sap = (struct sockaddr_in6 *)(&(yyval.naddr)->sa);
! 1684: memset(&hints, 0, sizeof(hints));
! 1685: hints.ai_family = AF_INET6;
! 1686: hints.ai_flags = AI_NUMERICHOST;
! 1687: err = getaddrinfo((yyvsp[(1) - (2)].chr), NULL, &hints, &res);
! 1688: if (err < 0) {
! 1689: prsaerror("getaddrinfo(%s): %s\n", (yyvsp[(1) - (2)].chr), gai_strerror(err));
! 1690: YYABORT;
! 1691: }
! 1692: memcpy(sap, res->ai_addr, res->ai_addrlen);
! 1693: freeaddrinfo(res);
! 1694: free((yyvsp[(1) - (2)].chr));
! 1695: }
! 1696: break;
! 1697:
! 1698: case 15:
! 1699:
! 1700: /* Line 1455 of yacc.c */
! 1701: #line 294 "prsa_par.y"
! 1702: { (yyval.num) = -1; }
! 1703: break;
! 1704:
! 1705: case 16:
! 1706:
! 1707: /* Line 1455 of yacc.c */
! 1708: #line 295 "prsa_par.y"
! 1709: { (yyval.num) = (yyvsp[(2) - (2)].num); }
! 1710: break;
! 1711:
! 1712: case 19:
! 1713:
! 1714: /* Line 1455 of yacc.c */
! 1715: #line 304 "prsa_par.y"
! 1716: { if (!rsa_cur->n) rsa_cur->n = (yyvsp[(3) - (3)].bn); else { prsaerror ("Modulus already defined\n"); YYABORT; } }
! 1717: break;
! 1718:
! 1719: case 20:
! 1720:
! 1721: /* Line 1455 of yacc.c */
! 1722: #line 306 "prsa_par.y"
! 1723: { if (!rsa_cur->e) rsa_cur->e = (yyvsp[(3) - (3)].bn); else { prsaerror ("PublicExponent already defined\n"); YYABORT; } }
! 1724: break;
! 1725:
! 1726: case 21:
! 1727:
! 1728: /* Line 1455 of yacc.c */
! 1729: #line 308 "prsa_par.y"
! 1730: { if (!rsa_cur->d) rsa_cur->d = (yyvsp[(3) - (3)].bn); else { prsaerror ("PrivateExponent already defined\n"); YYABORT; } }
! 1731: break;
! 1732:
! 1733: case 22:
! 1734:
! 1735: /* Line 1455 of yacc.c */
! 1736: #line 310 "prsa_par.y"
! 1737: { if (!rsa_cur->p) rsa_cur->p = (yyvsp[(3) - (3)].bn); else { prsaerror ("Prime1 already defined\n"); YYABORT; } }
! 1738: break;
! 1739:
! 1740: case 23:
! 1741:
! 1742: /* Line 1455 of yacc.c */
! 1743: #line 312 "prsa_par.y"
! 1744: { if (!rsa_cur->q) rsa_cur->q = (yyvsp[(3) - (3)].bn); else { prsaerror ("Prime2 already defined\n"); YYABORT; } }
! 1745: break;
! 1746:
! 1747: case 24:
! 1748:
! 1749: /* Line 1455 of yacc.c */
! 1750: #line 314 "prsa_par.y"
! 1751: { if (!rsa_cur->dmp1) rsa_cur->dmp1 = (yyvsp[(3) - (3)].bn); else { prsaerror ("Exponent1 already defined\n"); YYABORT; } }
! 1752: break;
! 1753:
! 1754: case 25:
! 1755:
! 1756: /* Line 1455 of yacc.c */
! 1757: #line 316 "prsa_par.y"
! 1758: { if (!rsa_cur->dmq1) rsa_cur->dmq1 = (yyvsp[(3) - (3)].bn); else { prsaerror ("Exponent2 already defined\n"); YYABORT; } }
! 1759: break;
! 1760:
! 1761: case 26:
! 1762:
! 1763: /* Line 1455 of yacc.c */
! 1764: #line 318 "prsa_par.y"
! 1765: { if (!rsa_cur->iqmp) rsa_cur->iqmp = (yyvsp[(3) - (3)].bn); else { prsaerror ("Coefficient already defined\n"); YYABORT; } }
! 1766: break;
! 1767:
! 1768:
! 1769:
! 1770: /* Line 1455 of yacc.c */
! 1771: #line 1772 "prsa_par.c"
! 1772: default: break;
! 1773: }
! 1774: YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
! 1775:
! 1776: YYPOPSTACK (yylen);
! 1777: yylen = 0;
! 1778: YY_STACK_PRINT (yyss, yyssp);
! 1779:
! 1780: *++yyvsp = yyval;
! 1781:
! 1782: /* Now `shift' the result of the reduction. Determine what state
! 1783: that goes to, based on the state we popped back to and the rule
! 1784: number reduced by. */
! 1785:
! 1786: yyn = yyr1[yyn];
! 1787:
! 1788: yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
! 1789: if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
! 1790: yystate = yytable[yystate];
! 1791: else
! 1792: yystate = yydefgoto[yyn - YYNTOKENS];
! 1793:
! 1794: goto yynewstate;
! 1795:
! 1796:
! 1797: /*------------------------------------.
! 1798: | yyerrlab -- here on detecting error |
! 1799: `------------------------------------*/
! 1800: yyerrlab:
! 1801: /* If not already recovering from an error, report this error. */
! 1802: if (!yyerrstatus)
! 1803: {
! 1804: ++yynerrs;
! 1805: #if ! YYERROR_VERBOSE
! 1806: yyerror (YY_("syntax error"));
! 1807: #else
! 1808: {
! 1809: YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
! 1810: if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
! 1811: {
! 1812: YYSIZE_T yyalloc = 2 * yysize;
! 1813: if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
! 1814: yyalloc = YYSTACK_ALLOC_MAXIMUM;
! 1815: if (yymsg != yymsgbuf)
! 1816: YYSTACK_FREE (yymsg);
! 1817: yymsg = (char *) YYSTACK_ALLOC (yyalloc);
! 1818: if (yymsg)
! 1819: yymsg_alloc = yyalloc;
! 1820: else
! 1821: {
! 1822: yymsg = yymsgbuf;
! 1823: yymsg_alloc = sizeof yymsgbuf;
! 1824: }
! 1825: }
! 1826:
! 1827: if (0 < yysize && yysize <= yymsg_alloc)
! 1828: {
! 1829: (void) yysyntax_error (yymsg, yystate, yychar);
! 1830: yyerror (yymsg);
! 1831: }
! 1832: else
! 1833: {
! 1834: yyerror (YY_("syntax error"));
! 1835: if (yysize != 0)
! 1836: goto yyexhaustedlab;
! 1837: }
! 1838: }
! 1839: #endif
! 1840: }
! 1841:
! 1842:
! 1843:
! 1844: if (yyerrstatus == 3)
! 1845: {
! 1846: /* If just tried and failed to reuse lookahead token after an
! 1847: error, discard it. */
! 1848:
! 1849: if (yychar <= YYEOF)
! 1850: {
! 1851: /* Return failure if at end of input. */
! 1852: if (yychar == YYEOF)
! 1853: YYABORT;
! 1854: }
! 1855: else
! 1856: {
! 1857: yydestruct ("Error: discarding",
! 1858: yytoken, &yylval);
! 1859: yychar = YYEMPTY;
! 1860: }
! 1861: }
! 1862:
! 1863: /* Else will try to reuse lookahead token after shifting the error
! 1864: token. */
! 1865: goto yyerrlab1;
! 1866:
! 1867:
! 1868: /*---------------------------------------------------.
! 1869: | yyerrorlab -- error raised explicitly by YYERROR. |
! 1870: `---------------------------------------------------*/
! 1871: yyerrorlab:
! 1872:
! 1873: /* Pacify compilers like GCC when the user code never invokes
! 1874: YYERROR and the label yyerrorlab therefore never appears in user
! 1875: code. */
! 1876: if (/*CONSTCOND*/ 0)
! 1877: goto yyerrorlab;
! 1878:
! 1879: /* Do not reclaim the symbols of the rule which action triggered
! 1880: this YYERROR. */
! 1881: YYPOPSTACK (yylen);
! 1882: yylen = 0;
! 1883: YY_STACK_PRINT (yyss, yyssp);
! 1884: yystate = *yyssp;
! 1885: goto yyerrlab1;
! 1886:
! 1887:
! 1888: /*-------------------------------------------------------------.
! 1889: | yyerrlab1 -- common code for both syntax error and YYERROR. |
! 1890: `-------------------------------------------------------------*/
! 1891: yyerrlab1:
! 1892: yyerrstatus = 3; /* Each real token shifted decrements this. */
! 1893:
! 1894: for (;;)
! 1895: {
! 1896: yyn = yypact[yystate];
! 1897: if (yyn != YYPACT_NINF)
! 1898: {
! 1899: yyn += YYTERROR;
! 1900: if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
! 1901: {
! 1902: yyn = yytable[yyn];
! 1903: if (0 < yyn)
! 1904: break;
! 1905: }
! 1906: }
! 1907:
! 1908: /* Pop the current state because it cannot handle the error token. */
! 1909: if (yyssp == yyss)
! 1910: YYABORT;
! 1911:
! 1912:
! 1913: yydestruct ("Error: popping",
! 1914: yystos[yystate], yyvsp);
! 1915: YYPOPSTACK (1);
! 1916: yystate = *yyssp;
! 1917: YY_STACK_PRINT (yyss, yyssp);
! 1918: }
! 1919:
! 1920: *++yyvsp = yylval;
! 1921:
! 1922:
! 1923: /* Shift the error token. */
! 1924: YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
! 1925:
! 1926: yystate = yyn;
! 1927: goto yynewstate;
! 1928:
! 1929:
! 1930: /*-------------------------------------.
! 1931: | yyacceptlab -- YYACCEPT comes here. |
! 1932: `-------------------------------------*/
! 1933: yyacceptlab:
! 1934: yyresult = 0;
! 1935: goto yyreturn;
! 1936:
! 1937: /*-----------------------------------.
! 1938: | yyabortlab -- YYABORT comes here. |
! 1939: `-----------------------------------*/
! 1940: yyabortlab:
! 1941: yyresult = 1;
! 1942: goto yyreturn;
! 1943:
! 1944: #if !defined(yyoverflow) || YYERROR_VERBOSE
! 1945: /*-------------------------------------------------.
! 1946: | yyexhaustedlab -- memory exhaustion comes here. |
! 1947: `-------------------------------------------------*/
! 1948: yyexhaustedlab:
! 1949: yyerror (YY_("memory exhausted"));
! 1950: yyresult = 2;
! 1951: /* Fall through. */
! 1952: #endif
! 1953:
! 1954: yyreturn:
! 1955: if (yychar != YYEMPTY)
! 1956: yydestruct ("Cleanup: discarding lookahead",
! 1957: yytoken, &yylval);
! 1958: /* Do not reclaim the symbols of the rule which action triggered
! 1959: this YYABORT or YYACCEPT. */
! 1960: YYPOPSTACK (yylen);
! 1961: YY_STACK_PRINT (yyss, yyssp);
! 1962: while (yyssp != yyss)
! 1963: {
! 1964: yydestruct ("Cleanup: popping",
! 1965: yystos[*yyssp], yyvsp);
! 1966: YYPOPSTACK (1);
! 1967: }
! 1968: #ifndef yyoverflow
! 1969: if (yyss != yyssa)
! 1970: YYSTACK_FREE (yyss);
! 1971: #endif
! 1972: #if YYERROR_VERBOSE
! 1973: if (yymsg != yymsgbuf)
! 1974: YYSTACK_FREE (yymsg);
! 1975: #endif
! 1976: /* Make sure YYID is used. */
! 1977: return YYID (yyresult);
! 1978: }
! 1979:
! 1980:
! 1981:
! 1982: /* Line 1675 of yacc.c */
! 1983: #line 320 "prsa_par.y"
! 1984:
! 1985:
! 1986: int prsaparse(void);
! 1987:
! 1988: int
! 1989: prsa_parse_file(struct genlist *list, char *fname, enum rsa_key_type type)
! 1990: {
! 1991: FILE *fp = NULL;
! 1992: int ret;
! 1993:
! 1994: if (!fname)
! 1995: return -1;
! 1996: if (type == RSA_TYPE_PRIVATE) {
! 1997: struct stat st;
! 1998: if (stat(fname, &st) < 0)
! 1999: return -1;
! 2000: if (st.st_mode & (S_IRWXG | S_IRWXO)) {
! 2001: plog(LLV_ERROR, LOCATION, NULL,
! 2002: "Too slack permissions on private key '%s'\n",
! 2003: fname);
! 2004: plog(LLV_ERROR, LOCATION, NULL,
! 2005: "Should be at most 0600, now is 0%o\n",
! 2006: st.st_mode & 0777);
! 2007: return -1;
! 2008: }
! 2009: }
! 2010: fp = fopen(fname, "r");
! 2011: if (!fp)
! 2012: return -1;
! 2013: prsain = fp;
! 2014: prsa_cur_lineno = 1;
! 2015: prsa_cur_fname = fname;
! 2016: prsa_cur_list = list;
! 2017: prsa_cur_type = type;
! 2018: rsa_cur = RSA_new();
! 2019: ret = prsaparse();
! 2020: if (rsa_cur) {
! 2021: RSA_free(rsa_cur);
! 2022: rsa_cur = NULL;
! 2023: }
! 2024: fclose (fp);
! 2025: prsain = NULL;
! 2026: return ret;
! 2027: }
! 2028:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>