Annotation of embedaddon/ipsec-tools/src/racoon/prsa_par.c, revision 1.1.1.1
1.1 misho 1:
2: /* A Bison parser, made by GNU Bison 2.4.1. */
3:
4: /* Skeleton implementation for Bison's Yacc-like parsers in C
5:
6: Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7: Free Software Foundation, Inc.
8:
9: This program is free software: you can redistribute it and/or modify
10: it under the terms of the GNU General Public License as published by
11: the Free Software Foundation, either version 3 of the License, or
12: (at your option) any later version.
13:
14: This program is distributed in the hope that it will be useful,
15: but WITHOUT ANY WARRANTY; without even the implied warranty of
16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: GNU General Public License for more details.
18:
19: You should have received a copy of the GNU General Public License
20: along with this program. If not, see <http://www.gnu.org/licenses/>. */
21:
22: /* As a special exception, you may create a larger work that contains
23: part or all of the Bison parser skeleton and distribute that work
24: under terms of your choice, so long as that work isn't itself a
25: parser generator using the skeleton or a modified version thereof
26: as a parser skeleton. Alternatively, if you modify or redistribute
27: the parser skeleton itself, you may (at your option) remove this
28: special exception, which will cause the skeleton and the resulting
29: Bison output files to be licensed under the GNU General Public
30: License without this special exception.
31:
32: This special exception was added by the Free Software Foundation in
33: version 2.2 of Bison. */
34:
35: /* C LALR(1) parser skeleton written by Richard Stallman, by
36: simplifying the original so-called "semantic" parser. */
37:
38: /* All symbols defined below should begin with yy or YY, to avoid
39: infringing on user name space. This should be done even for local
40: variables, as they might otherwise be expanded by user macros.
41: There are some unavoidable exceptions within include files to
42: define necessary library symbols; they are noted "INFRINGES ON
43: USER NAME SPACE" below. */
44:
45: /* Identify Bison output. */
46: #define YYBISON 1
47:
48: /* Bison version. */
49: #define YYBISON_VERSION "2.4.1"
50:
51: /* Skeleton name. */
52: #define YYSKELETON_NAME "yacc.c"
53:
54: /* Pure parsers. */
55: #define YYPURE 0
56:
57: /* Push parsers. */
58: #define YYPUSH 0
59:
60: /* Pull parsers. */
61: #define YYPULL 1
62:
63: /* Using locations. */
64: #define YYLSP_NEEDED 0
65:
66: /* 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>