From 192a555c9ab425fa8e18ee5bed84a8c2fd527200 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 12 Nov 2010 13:15:57 +1100 Subject: heimdal regenate lex and yacc files --- source4/heimdal/lib/asn1/asn1parse.c | 1611 ++++++++++++++++++++++++++++++++++ source4/heimdal/lib/asn1/asn1parse.h | 102 +++ source4/heimdal/lib/asn1/lex.c | 16 +- 3 files changed, 1721 insertions(+), 8 deletions(-) create mode 100644 source4/heimdal/lib/asn1/asn1parse.c create mode 100644 source4/heimdal/lib/asn1/asn1parse.h (limited to 'source4/heimdal/lib/asn1') diff --git a/source4/heimdal/lib/asn1/asn1parse.c b/source4/heimdal/lib/asn1/asn1parse.c new file mode 100644 index 0000000000..9e4174a153 --- /dev/null +++ b/source4/heimdal/lib/asn1/asn1parse.c @@ -0,0 +1,1611 @@ +#ifndef lint +static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; +#endif + +#include +#include + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYPATCH 20070509 + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING (yyerrflag != 0) + +extern int yyparse(void); + +static int yygrowstack(void); +#define YYPREFIX "yy" +#line 39 "" + +#include + +#include +#include +#include +#include "symbol.h" +#include "lex.h" +#include "gen_locl.h" +#include "der.h" + +RCSID("$Id$"); + +static Type *new_type (Typetype t); +static struct constraint_spec *new_constraint_spec(enum ctype); +static Type *new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype); +void yyerror (const char *); +static struct objid *new_objid(const char *label, int value); +static void add_oid_to_tail(struct objid *, struct objid *); +static void fix_labels(Symbol *s); + +struct string_list { + char *string; + struct string_list *next; +}; + +#line 67 "" +typedef union { + int constant; + struct value *value; + struct range *range; + char *name; + Type *type; + Member *member; + struct objid *objid; + char *defval; + struct string_list *sl; + struct tagtype tag; + struct memhead *members; + struct constraint_spec *constraint_spec; +} YYSTYPE; +#line 65 "" +#define kw_ABSENT 257 +#define kw_ABSTRACT_SYNTAX 258 +#define kw_ALL 259 +#define kw_APPLICATION 260 +#define kw_AUTOMATIC 261 +#define kw_BEGIN 262 +#define kw_BIT 263 +#define kw_BMPString 264 +#define kw_BOOLEAN 265 +#define kw_BY 266 +#define kw_CHARACTER 267 +#define kw_CHOICE 268 +#define kw_CLASS 269 +#define kw_COMPONENT 270 +#define kw_COMPONENTS 271 +#define kw_CONSTRAINED 272 +#define kw_CONTAINING 273 +#define kw_DEFAULT 274 +#define kw_DEFINITIONS 275 +#define kw_EMBEDDED 276 +#define kw_ENCODED 277 +#define kw_END 278 +#define kw_ENUMERATED 279 +#define kw_EXCEPT 280 +#define kw_EXPLICIT 281 +#define kw_EXPORTS 282 +#define kw_EXTENSIBILITY 283 +#define kw_EXTERNAL 284 +#define kw_FALSE 285 +#define kw_FROM 286 +#define kw_GeneralString 287 +#define kw_GeneralizedTime 288 +#define kw_GraphicString 289 +#define kw_IA5String 290 +#define kw_IDENTIFIER 291 +#define kw_IMPLICIT 292 +#define kw_IMPLIED 293 +#define kw_IMPORTS 294 +#define kw_INCLUDES 295 +#define kw_INSTANCE 296 +#define kw_INTEGER 297 +#define kw_INTERSECTION 298 +#define kw_ISO646String 299 +#define kw_MAX 300 +#define kw_MIN 301 +#define kw_MINUS_INFINITY 302 +#define kw_NULL 303 +#define kw_NumericString 304 +#define kw_OBJECT 305 +#define kw_OCTET 306 +#define kw_OF 307 +#define kw_OPTIONAL 308 +#define kw_ObjectDescriptor 309 +#define kw_PATTERN 310 +#define kw_PDV 311 +#define kw_PLUS_INFINITY 312 +#define kw_PRESENT 313 +#define kw_PRIVATE 314 +#define kw_PrintableString 315 +#define kw_REAL 316 +#define kw_RELATIVE_OID 317 +#define kw_SEQUENCE 318 +#define kw_SET 319 +#define kw_SIZE 320 +#define kw_STRING 321 +#define kw_SYNTAX 322 +#define kw_T61String 323 +#define kw_TAGS 324 +#define kw_TRUE 325 +#define kw_TYPE_IDENTIFIER 326 +#define kw_TeletexString 327 +#define kw_UNION 328 +#define kw_UNIQUE 329 +#define kw_UNIVERSAL 330 +#define kw_UTCTime 331 +#define kw_UTF8String 332 +#define kw_UniversalString 333 +#define kw_VideotexString 334 +#define kw_VisibleString 335 +#define kw_WITH 336 +#define RANGE 337 +#define EEQUAL 338 +#define ELLIPSIS 339 +#define IDENTIFIER 340 +#define referencename 341 +#define STRING 342 +#define NUMBER 343 +#define YYERRCODE 256 +short yylhs[] = { -1, + 0, 56, 56, 56, 56, 57, 57, 58, 58, 60, + 60, 62, 62, 63, 63, 64, 59, 59, 59, 61, + 61, 65, 65, 50, 50, 66, 14, 14, 14, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 17, 48, 48, 48, 48, 21, 21, + 21, 43, 43, 43, 38, 20, 41, 16, 16, 32, + 23, 22, 49, 49, 24, 24, 25, 26, 26, 27, + 18, 29, 29, 30, 31, 31, 19, 51, 52, 53, + 53, 54, 54, 54, 55, 28, 35, 2, 2, 2, + 2, 3, 3, 3, 67, 33, 34, 34, 34, 34, + 34, 34, 34, 34, 40, 40, 40, 39, 36, 36, + 36, 42, 42, 37, 47, 47, 44, 45, 45, 46, + 46, 46, 4, 4, 5, 5, 5, 5, 5, 12, + 11, 13, 9, 7, 7, 6, 1, 10, 8, +}; +short yylen[] = { 2, + 9, 2, 2, 2, 0, 2, 0, 3, 0, 3, + 0, 1, 0, 1, 2, 4, 3, 2, 0, 1, + 2, 1, 1, 3, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 5, 5, 5, 3, 1, 2, + 4, 1, 3, 3, 4, 4, 1, 2, 5, 2, + 3, 1, 0, 2, 4, 3, 4, 4, 3, 3, + 4, 1, 1, 1, 1, 1, 2, 3, 1, 1, + 1, 2, 3, 5, 4, 3, 4, 0, 1, 1, + 1, 0, 1, 1, 4, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 3, 2, 1, 2, + 3, 1, 3, 4, 1, 0, 3, 0, 2, 4, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; +short yydefred[] = { 0, + 0, 0, 0, 115, 0, 0, 122, 0, 0, 0, + 0, 117, 119, 0, 0, 0, 0, 0, 4, 2, + 3, 0, 0, 120, 6, 0, 0, 0, 0, 0, + 18, 0, 0, 1, 0, 0, 0, 17, 0, 0, + 0, 14, 0, 8, 0, 22, 23, 24, 0, 10, + 15, 0, 103, 44, 0, 0, 97, 75, 102, 0, + 62, 0, 0, 100, 0, 0, 98, 76, 99, 104, + 101, 0, 74, 0, 0, 27, 30, 31, 33, 29, + 34, 35, 36, 38, 39, 40, 41, 42, 43, 28, + 72, 73, 37, 32, 96, 0, 21, 0, 0, 0, + 0, 0, 0, 50, 60, 0, 0, 0, 0, 0, + 0, 0, 90, 91, 89, 0, 0, 0, 77, 93, + 94, 0, 16, 0, 0, 105, 0, 0, 0, 52, + 0, 0, 135, 0, 138, 134, 132, 133, 137, 136, + 0, 123, 127, 125, 128, 126, 129, 130, 124, 131, + 139, 0, 61, 64, 66, 0, 0, 0, 69, 0, + 0, 95, 0, 0, 0, 0, 79, 80, 81, 0, + 0, 112, 0, 0, 0, 110, 0, 71, 0, 56, + 0, 0, 0, 48, 51, 65, 0, 68, 87, 0, + 0, 0, 78, 0, 0, 59, 111, 107, 106, 0, + 54, 53, 0, 0, 0, 0, 0, 83, 0, 113, + 55, 47, 46, 45, 85, 0, 114, 84, +}; +short yydgoto[] = { 2, + 140, 116, 122, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 126, 172, 130, 127, 128, + 131, 173, 132, 151, 8, 9, 5, 104, 109, 39, + 119, 166, 167, 168, 169, 17, 23, 29, 30, 36, + 44, 40, 41, 42, 45, 46, 47, +}; +short yysindex[] = { -295, + -74, 0, -289, 0, -216, 23, 0, -61, -289, -221, + -277, 0, 0, -259, -257, -256, -214, 31, 0, 0, + 0, -220, -264, 0, 0, -187, -206, -232, -201, -213, + 0, 34, 25, 0, -258, -251, -258, 0, -188, 40, + -258, 0, 63, 0, -251, 0, 0, 0, -239, 0, + 0, -218, 0, 0, -19, -17, 0, 0, 0, -12, + 0, -184, -212, 0, -106, -111, 0, 0, 0, 0, + 0, 112, 0, -228, -37, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -242, 0, -74, -10, -223, + -215, -116, -215, 0, 0, -198, 87, -105, -179, 112, + -100, 89, 0, 0, 0, -211, -4, -225, 0, 0, + 0, 112, 0, -210, 112, 0, -238, -13, 91, 0, + 9, 92, 0, -202, 0, 0, 0, 0, 0, 0, + -33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -11, 0, 0, 0, -9, 112, 89, 0, -7, + 44, 0, -128, 112, -127, 99, 0, 0, 0, 89, + 101, 0, -2, 89, -4, 0, -283, 0, -200, 0, + -278, -4, -8, 0, 0, 0, 89, 0, 0, 19, + -27, -4, 0, -199, -210, 0, 0, 0, 0, 104, + 0, 0, 105, 106, 107, 24, -115, 0, 109, 0, + 0, 0, 0, 0, 0, -4, 0, 0, +}; +short yyrindex[] = { 0, + -123, 0, 28, 0, 0, -110, 0, 0, 28, -245, + 0, 0, 0, 0, 0, 0, -183, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -248, 0, 0, -182, + 0, -41, 0, 0, 97, 0, 0, 0, 0, 0, + 98, 0, 0, 0, -119, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -30, + 0, 0, 0, 0, -147, 0, 0, 0, 0, 0, + 0, 0, 0, -181, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 169, 0, -49, -40, 0, + 0, 0, 0, 0, 0, -35, 0, 0, 0, 0, + 0, -244, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -25, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, + 0, 0, 0, -42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -15, 0, 0, 0, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; +short yygindex[] = { 0, + -14, 0, 0, -95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -6, -29, -5, 0, -53, + 0, 0, 61, 22, 158, 0, 70, 65, 64, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 133, 0, 0, 0, +}; +#define YYTABLESIZE 509 +short yytable[] = { 58, + 58, 108, 118, 58, 63, 63, 3, 184, 63, 116, + 49, 111, 118, 49, 121, 70, 108, 25, 70, 155, + 86, 162, 4, 86, 159, 67, 31, 102, 67, 9, + 177, 113, 181, 26, 177, 175, 177, 5, 120, 14, + 112, 195, 109, 33, 1, 19, 163, 164, 3, 121, + 6, 165, 48, 7, 156, 198, 125, 160, 10, 15, + 201, 129, 11, 12, 19, 18, 20, 21, 22, 176, + 16, 24, 25, 26, 27, 28, 34, 37, 158, 197, + 35, 32, 108, 38, 58, 114, 203, 205, 43, 63, + 170, 19, 5, 174, 49, 26, 208, 49, 50, 70, + 98, 115, 99, 100, 86, 101, 105, 32, 106, 67, + 103, 178, 124, 185, 3, 186, 125, 188, 3, 4, + 218, 107, 196, 109, 129, 187, 102, 157, 118, 171, + 179, 161, 191, 180, 182, 181, 189, 190, 192, 193, + 194, 206, 139, 209, 211, 212, 213, 214, 215, 217, + 216, 116, 118, 74, 7, 13, 12, 11, 20, 63, + 57, 88, 82, 152, 200, 210, 13, 123, 133, 153, + 199, 154, 97, 51, 0, 202, 0, 0, 0, 0, + 0, 0, 0, 0, 134, 0, 135, 0, 0, 0, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 0, 0, 74, 0, 0, 0, 0, 0, 136, 0, + 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 0, 138, 139, 0, 0, 121, + 0, 108, 121, 58, 125, 0, 58, 58, 63, 125, + 0, 63, 63, 49, 25, 0, 49, 49, 70, 207, + 0, 70, 70, 86, 0, 0, 86, 86, 67, 92, + 0, 67, 67, 0, 0, 108, 0, 58, 0, 0, + 0, 0, 63, 0, 0, 0, 133, 49, 0, 0, + 133, 0, 70, 0, 0, 0, 0, 86, 0, 0, + 116, 204, 67, 0, 135, 0, 0, 58, 135, 58, + 117, 0, 63, 183, 63, 0, 0, 49, 0, 49, + 0, 0, 70, 0, 70, 0, 136, 86, 0, 86, + 136, 0, 67, 0, 67, 52, 53, 54, 0, 0, + 55, 137, 0, 138, 139, 137, 0, 138, 139, 0, + 0, 56, 0, 0, 0, 0, 0, 0, 0, 57, + 58, 0, 59, 0, 0, 0, 0, 0, 0, 60, + 0, 0, 0, 0, 0, 61, 0, 62, 63, 0, + 0, 0, 0, 0, 52, 53, 54, 64, 0, 55, + 65, 66, 0, 0, 0, 0, 0, 0, 0, 67, + 56, 0, 0, 68, 69, 70, 0, 71, 57, 58, + 72, 59, 73, 0, 0, 0, 0, 0, 60, 0, + 0, 0, 0, 0, 61, 0, 62, 63, 0, 0, + 0, 0, 0, 0, 0, 0, 64, 0, 0, 65, + 66, 92, 92, 92, 0, 0, 92, 0, 67, 0, + 0, 0, 68, 69, 70, 0, 71, 92, 0, 0, + 0, 73, 0, 0, 0, 92, 92, 0, 92, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, + 0, 92, 0, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 92, 92, 0, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 92, + 92, 92, 0, 92, 0, 0, 0, 0, 92, +}; +short yycheck[] = { 40, + 41, 44, 40, 44, 40, 41, 123, 41, 44, 59, + 41, 123, 40, 44, 125, 41, 123, 59, 44, 125, + 41, 117, 1, 44, 125, 41, 259, 40, 44, 278, + 44, 260, 44, 278, 44, 274, 44, 283, 281, 261, + 72, 44, 44, 28, 340, 294, 272, 273, 123, 292, + 340, 277, 37, 343, 108, 339, 340, 111, 275, 281, + 339, 340, 40, 125, 324, 343, 324, 324, 283, 308, + 292, 41, 293, 338, 262, 282, 278, 44, 110, 175, + 294, 340, 125, 59, 125, 314, 182, 183, 340, 125, + 122, 340, 338, 125, 125, 340, 192, 286, 59, 125, + 340, 330, 321, 123, 125, 123, 291, 340, 321, 125, + 123, 125, 123, 125, 123, 125, 340, 125, 123, 98, + 216, 320, 125, 125, 340, 157, 40, 307, 40, 340, + 40, 343, 164, 125, 337, 44, 93, 266, 266, 41, + 40, 123, 343, 343, 41, 41, 41, 41, 125, 41, + 266, 275, 125, 91, 338, 59, 59, 340, 278, 307, + 125, 343, 41, 103, 179, 195, 9, 98, 285, 106, + 177, 107, 45, 41, -1, 181, -1, -1, -1, -1, + -1, -1, -1, -1, 301, -1, 303, -1, -1, -1, + -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, + -1, -1, 91, -1, -1, -1, -1, -1, 325, -1, + -1, -1, -1, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 340, -1, 342, 343, -1, -1, 340, + -1, 274, 343, 274, 340, -1, 277, 278, 274, 340, + -1, 277, 278, 274, 286, -1, 277, 278, 274, 277, + -1, 277, 278, 274, -1, -1, 277, 278, 274, 91, + -1, 277, 278, -1, -1, 308, -1, 308, -1, -1, + -1, -1, 308, -1, -1, -1, 285, 308, -1, -1, + 285, -1, 308, -1, -1, -1, -1, 308, -1, -1, + 340, 300, 308, -1, 303, -1, -1, 338, 303, 340, + 338, -1, 338, 337, 340, -1, -1, 338, -1, 340, + -1, -1, 338, -1, 340, -1, 325, 338, -1, 340, + 325, -1, 338, -1, 340, 263, 264, 265, -1, -1, + 268, 340, -1, 342, 343, 340, -1, 342, 343, -1, + -1, 279, -1, -1, -1, -1, -1, -1, -1, 287, + 288, -1, 290, -1, -1, -1, -1, -1, -1, 297, + -1, -1, -1, -1, -1, 303, -1, 305, 306, -1, + -1, -1, -1, -1, 263, 264, 265, 315, -1, 268, + 318, 319, -1, -1, -1, -1, -1, -1, -1, 327, + 279, -1, -1, 331, 332, 333, -1, 335, 287, 288, + 338, 290, 340, -1, -1, -1, -1, -1, 297, -1, + -1, -1, -1, -1, 303, -1, 305, 306, -1, -1, + -1, -1, -1, -1, -1, -1, 315, -1, -1, 318, + 319, 263, 264, 265, -1, -1, 268, -1, 327, -1, + -1, -1, 331, 332, 333, -1, 335, 279, -1, -1, + -1, 340, -1, -1, -1, 287, 288, -1, 290, -1, + -1, -1, -1, -1, -1, 297, -1, -1, -1, -1, + -1, 303, -1, 305, 306, -1, -1, -1, -1, -1, + -1, -1, -1, 315, -1, -1, 318, 319, -1, -1, + -1, -1, -1, -1, -1, 327, -1, -1, -1, 331, + 332, 333, -1, 335, -1, -1, -1, -1, 340, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 343 +#if YYDEBUG +char *yyname[] = { +"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"kw_ABSENT","kw_ABSTRACT_SYNTAX","kw_ALL","kw_APPLICATION","kw_AUTOMATIC", +"kw_BEGIN","kw_BIT","kw_BMPString","kw_BOOLEAN","kw_BY","kw_CHARACTER", +"kw_CHOICE","kw_CLASS","kw_COMPONENT","kw_COMPONENTS","kw_CONSTRAINED", +"kw_CONTAINING","kw_DEFAULT","kw_DEFINITIONS","kw_EMBEDDED","kw_ENCODED", +"kw_END","kw_ENUMERATED","kw_EXCEPT","kw_EXPLICIT","kw_EXPORTS", +"kw_EXTENSIBILITY","kw_EXTERNAL","kw_FALSE","kw_FROM","kw_GeneralString", +"kw_GeneralizedTime","kw_GraphicString","kw_IA5String","kw_IDENTIFIER", +"kw_IMPLICIT","kw_IMPLIED","kw_IMPORTS","kw_INCLUDES","kw_INSTANCE", +"kw_INTEGER","kw_INTERSECTION","kw_ISO646String","kw_MAX","kw_MIN", +"kw_MINUS_INFINITY","kw_NULL","kw_NumericString","kw_OBJECT","kw_OCTET","kw_OF", +"kw_OPTIONAL","kw_ObjectDescriptor","kw_PATTERN","kw_PDV","kw_PLUS_INFINITY", +"kw_PRESENT","kw_PRIVATE","kw_PrintableString","kw_REAL","kw_RELATIVE_OID", +"kw_SEQUENCE","kw_SET","kw_SIZE","kw_STRING","kw_SYNTAX","kw_T61String", +"kw_TAGS","kw_TRUE","kw_TYPE_IDENTIFIER","kw_TeletexString","kw_UNION", +"kw_UNIQUE","kw_UNIVERSAL","kw_UTCTime","kw_UTF8String","kw_UniversalString", +"kw_VideotexString","kw_VisibleString","kw_WITH","RANGE","EEQUAL","ELLIPSIS", +"IDENTIFIER","referencename","STRING","NUMBER", +}; +char *yyrule[] = { +"$accept : ModuleDefinition", +"ModuleDefinition : IDENTIFIER objid_opt kw_DEFINITIONS TagDefault ExtensionDefault EEQUAL kw_BEGIN ModuleBody kw_END", +"TagDefault : kw_EXPLICIT kw_TAGS", +"TagDefault : kw_IMPLICIT kw_TAGS", +"TagDefault : kw_AUTOMATIC kw_TAGS", +"TagDefault :", +"ExtensionDefault : kw_EXTENSIBILITY kw_IMPLIED", +"ExtensionDefault :", +"ModuleBody : Exports Imports AssignmentList", +"ModuleBody :", +"Imports : kw_IMPORTS SymbolsImported ';'", +"Imports :", +"SymbolsImported : SymbolsFromModuleList", +"SymbolsImported :", +"SymbolsFromModuleList : SymbolsFromModule", +"SymbolsFromModuleList : SymbolsFromModuleList SymbolsFromModule", +"SymbolsFromModule : referencenames kw_FROM IDENTIFIER objid_opt", +"Exports : kw_EXPORTS referencenames ';'", +"Exports : kw_EXPORTS kw_ALL", +"Exports :", +"AssignmentList : Assignment", +"AssignmentList : Assignment AssignmentList", +"Assignment : TypeAssignment", +"Assignment : ValueAssignment", +"referencenames : IDENTIFIER ',' referencenames", +"referencenames : IDENTIFIER", +"TypeAssignment : IDENTIFIER EEQUAL Type", +"Type : BuiltinType", +"Type : ReferencedType", +"Type : ConstrainedType", +"BuiltinType : BitStringType", +"BuiltinType : BooleanType", +"BuiltinType : CharacterStringType", +"BuiltinType : ChoiceType", +"BuiltinType : EnumeratedType", +"BuiltinType : IntegerType", +"BuiltinType : NullType", +"BuiltinType : ObjectIdentifierType", +"BuiltinType : OctetStringType", +"BuiltinType : SequenceType", +"BuiltinType : SequenceOfType", +"BuiltinType : SetType", +"BuiltinType : SetOfType", +"BuiltinType : TaggedType", +"BooleanType : kw_BOOLEAN", +"range : '(' Value RANGE Value ')'", +"range : '(' Value RANGE kw_MAX ')'", +"range : '(' kw_MIN RANGE Value ')'", +"range : '(' Value ')'", +"IntegerType : kw_INTEGER", +"IntegerType : kw_INTEGER range", +"IntegerType : kw_INTEGER '{' NamedNumberList '}'", +"NamedNumberList : NamedNumber", +"NamedNumberList : NamedNumberList ',' NamedNumber", +"NamedNumberList : NamedNumberList ',' ELLIPSIS", +"NamedNumber : IDENTIFIER '(' SignedNumber ')'", +"EnumeratedType : kw_ENUMERATED '{' Enumerations '}'", +"Enumerations : NamedNumberList", +"BitStringType : kw_BIT kw_STRING", +"BitStringType : kw_BIT kw_STRING '{' NamedBitList '}'", +"ObjectIdentifierType : kw_OBJECT kw_IDENTIFIER", +"OctetStringType : kw_OCTET kw_STRING size", +"NullType : kw_NULL", +"size :", +"size : kw_SIZE range", +"SequenceType : kw_SEQUENCE '{' ComponentTypeList '}'", +"SequenceType : kw_SEQUENCE '{' '}'", +"SequenceOfType : kw_SEQUENCE size kw_OF Type", +"SetType : kw_SET '{' ComponentTypeList '}'", +"SetType : kw_SET '{' '}'", +"SetOfType : kw_SET kw_OF Type", +"ChoiceType : kw_CHOICE '{' ComponentTypeList '}'", +"ReferencedType : DefinedType", +"ReferencedType : UsefulType", +"DefinedType : IDENTIFIER", +"UsefulType : kw_GeneralizedTime", +"UsefulType : kw_UTCTime", +"ConstrainedType : Type Constraint", +"Constraint : '(' ConstraintSpec ')'", +"ConstraintSpec : GeneralConstraint", +"GeneralConstraint : ContentsConstraint", +"GeneralConstraint : UserDefinedConstraint", +"ContentsConstraint : kw_CONTAINING Type", +"ContentsConstraint : kw_ENCODED kw_BY Value", +"ContentsConstraint : kw_CONTAINING Type kw_ENCODED kw_BY Value", +"UserDefinedConstraint : kw_CONSTRAINED kw_BY '{' '}'", +"TaggedType : Tag tagenv Type", +"Tag : '[' Class NUMBER ']'", +"Class :", +"Class : kw_UNIVERSAL", +"Class : kw_APPLICATION", +"Class : kw_PRIVATE", +"tagenv :", +"tagenv : kw_EXPLICIT", +"tagenv : kw_IMPLICIT", +"ValueAssignment : IDENTIFIER Type EEQUAL Value", +"CharacterStringType : RestrictedCharactedStringType", +"RestrictedCharactedStringType : kw_GeneralString", +"RestrictedCharactedStringType : kw_TeletexString", +"RestrictedCharactedStringType : kw_UTF8String", +"RestrictedCharactedStringType : kw_PrintableString", +"RestrictedCharactedStringType : kw_VisibleString", +"RestrictedCharactedStringType : kw_IA5String", +"RestrictedCharactedStringType : kw_BMPString", +"RestrictedCharactedStringType : kw_UniversalString", +"ComponentTypeList : ComponentType", +"ComponentTypeList : ComponentTypeList ',' ComponentType", +"ComponentTypeList : ComponentTypeList ',' ELLIPSIS", +"NamedType : IDENTIFIER Type", +"ComponentType : NamedType", +"ComponentType : NamedType kw_OPTIONAL", +"ComponentType : NamedType kw_DEFAULT Value", +"NamedBitList : NamedBit", +"NamedBitList : NamedBitList ',' NamedBit", +"NamedBit : IDENTIFIER '(' NUMBER ')'", +"objid_opt : objid", +"objid_opt :", +"objid : '{' objid_list '}'", +"objid_list :", +"objid_list : objid_element objid_list", +"objid_element : IDENTIFIER '(' NUMBER ')'", +"objid_element : IDENTIFIER", +"objid_element : NUMBER", +"Value : BuiltinValue", +"Value : ReferencedValue", +"BuiltinValue : BooleanValue", +"BuiltinValue : CharacterStringValue", +"BuiltinValue : IntegerValue", +"BuiltinValue : ObjectIdentifierValue", +"BuiltinValue : NullValue", +"ReferencedValue : DefinedValue", +"DefinedValue : Valuereference", +"Valuereference : IDENTIFIER", +"CharacterStringValue : STRING", +"BooleanValue : kw_TRUE", +"BooleanValue : kw_FALSE", +"IntegerValue : SignedNumber", +"SignedNumber : NUMBER", +"NullValue : kw_NULL", +"ObjectIdentifierValue : objid", +}; +#endif +#if YYDEBUG +#include +#endif + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 500 +#define YYMAXDEPTH 500 +#endif +#endif + +#define YYINITSTACKSIZE 500 + +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; +YYSTYPE *yyvsp; +YYSTYPE yyval; +YYSTYPE yylval; + +/* variables for the parser stack */ +static short *yyss; +static short *yysslim; +static YYSTYPE *yyvs; +static int yystacksize; +#line 941 "" + +void +yyerror (const char *s) +{ + lex_error_message ("%s\n", s); +} + +static Type * +new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype) +{ + Type *t; + if(oldtype->type == TTag && oldtype->tag.tagenv == TE_IMPLICIT) { + t = oldtype; + oldtype = oldtype->subtype; /* XXX */ + } else + t = new_type (TTag); + + t->tag.tagclass = tagclass; + t->tag.tagvalue = tagvalue; + t->tag.tagenv = tagenv; + t->subtype = oldtype; + return t; +} + +static struct objid * +new_objid(const char *label, int value) +{ + struct objid *s; + s = emalloc(sizeof(*s)); + s->label = label; + s->value = value; + s->next = NULL; + return s; +} + +static void +add_oid_to_tail(struct objid *head, struct objid *tail) +{ + struct objid *o; + o = head; + while (o->next) + o = o->next; + o->next = tail; +} + +static Type * +new_type (Typetype tt) +{ + Type *t = ecalloc(1, sizeof(*t)); + t->type = tt; + return t; +} + +static struct constraint_spec * +new_constraint_spec(enum ctype ct) +{ + struct constraint_spec *c = ecalloc(1, sizeof(*c)); + c->ctype = ct; + return c; +} + +static void fix_labels2(Type *t, const char *prefix); +static void fix_labels1(struct memhead *members, const char *prefix) +{ + Member *m; + + if(members == NULL) + return; + ASN1_TAILQ_FOREACH(m, members, members) { + if (asprintf(&m->label, "%s_%s", prefix, m->gen_name) < 0) + errx(1, "malloc"); + if (m->label == NULL) + errx(1, "malloc"); + if(m->type != NULL) + fix_labels2(m->type, m->label); + } +} + +static void fix_labels2(Type *t, const char *prefix) +{ + for(; t; t = t->subtype) + fix_labels1(t->members, prefix); +} + +static void +fix_labels(Symbol *s) +{ + char *p = NULL; + if (asprintf(&p, "choice_%s", s->gen_name) < 0 || p == NULL) + errx(1, "malloc"); + fix_labels2(s->type, p); + free(p); +} +#line 685 "" +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(void) +{ + int newsize, i; + short *newss; + YYSTYPE *newvs; + + if ((newsize = yystacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return -1; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = yyssp - yyss; + newss = (yyss != 0) + ? (short *)realloc(yyss, newsize * sizeof(*newss)) + : (short *)malloc(newsize * sizeof(*newss)); + if (newss == 0) + return -1; + + yyss = newss; + yyssp = newss + i; + newvs = (yyvs != 0) + ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) + : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); + if (newvs == 0) + return -1; + + yyvs = newvs; + yyvsp = newvs + i; + yystacksize = newsize; + yysslim = yyss + newsize - 1; + return 0; +} + +#define YYABORT goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR goto yyerrlab +int +yyparse(void) +{ + register int yym, yyn, yystate; +#if YYDEBUG + register const char *yys; + + if ((yys = getenv("YYDEBUG")) != 0) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') + yydebug = yyn - '0'; + } +#endif + + yynerrs = 0; + yyerrflag = 0; + yychar = YYEMPTY; + + if (yyss == NULL && yygrowstack()) goto yyoverflow; + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + +yyloop: + if ((yyn = yydefred[yystate]) != 0) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, shifting to state %d\n", + YYPREFIX, yystate, yytable[yyn]); +#endif + if (yyssp >= yysslim && yygrowstack()) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + yychar = YYEMPTY; + if (yyerrflag > 0) --yyerrflag; + goto yyloop; + } + if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; + + yyerror("syntax error"); + +#ifdef lint + goto yyerrlab; +#endif + +yyerrlab: + ++yynerrs; + +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, error recovery shifting\ + to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); +#endif + if (yyssp >= yysslim && yygrowstack()) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + goto yyloop; + } + else + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: error recovery discarding state %d\n", + YYPREFIX, *yyssp); +#endif + if (yyssp <= yyss) goto yyabort; + --yyssp; + --yyvsp; + } + } + } + else + { + if (yychar == 0) goto yyabort; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, error recovery discards token %d (%s)\n", + YYPREFIX, yystate, yychar, yys); + } +#endif + yychar = YYEMPTY; + goto yyloop; + } + +yyreduce: +#if YYDEBUG + if (yydebug) + printf("%sdebug: state %d, reducing by rule %d (%s)\n", + YYPREFIX, yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + if (yym) + yyval = yyvsp[1-yym]; + else + memset(&yyval, 0, sizeof yyval); + switch (yyn) + { +case 1: +#line 237 "" +{ + checkundefined(); + } +break; +case 3: +#line 244 "" +{ lex_error_message("implicit tagging is not supported"); } +break; +case 4: +#line 246 "" +{ lex_error_message("automatic tagging is not supported"); } +break; +case 6: +#line 251 "" +{ lex_error_message("no extensibility options supported"); } +break; +case 16: +#line 272 "" +{ + struct string_list *sl; + for(sl = yyvsp[-3].sl; sl != NULL; sl = sl->next) { + Symbol *s = addsym(sl->string); + s->stype = Stype; + gen_template_import(s); + } + add_import(yyvsp[-1].name); + } +break; +case 17: +#line 284 "" +{ + struct string_list *sl; + for(sl = yyvsp[-1].sl; sl != NULL; sl = sl->next) + add_export(sl->string); + } +break; +case 24: +#line 302 "" +{ + yyval.sl = emalloc(sizeof(*yyval.sl)); + yyval.sl->string = yyvsp[-2].name; + yyval.sl->next = yyvsp[0].sl; + } +break; +case 25: +#line 308 "" +{ + yyval.sl = emalloc(sizeof(*yyval.sl)); + yyval.sl->string = yyvsp[0].name; + yyval.sl->next = NULL; + } +break; +case 26: +#line 316 "" +{ + Symbol *s = addsym (yyvsp[-2].name); + s->stype = Stype; + s->type = yyvsp[0].type; + fix_labels(s); + generate_type (s); + } +break; +case 44: +#line 347 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_Boolean, + TE_EXPLICIT, new_type(TBoolean)); + } +break; +case 45: +#line 354 "" +{ + if(yyvsp[-3].value->type != integervalue) + lex_error_message("Non-integer used in first part of range"); + if(yyvsp[-3].value->type != integervalue) + lex_error_message("Non-integer in second part of range"); + yyval.range = ecalloc(1, sizeof(*yyval.range)); + yyval.range->min = yyvsp[-3].value->u.integervalue; + yyval.range->max = yyvsp[-1].value->u.integervalue; + } +break; +case 46: +#line 364 "" +{ + if(yyvsp[-3].value->type != integervalue) + lex_error_message("Non-integer in first part of range"); + yyval.range = ecalloc(1, sizeof(*yyval.range)); + yyval.range->min = yyvsp[-3].value->u.integervalue; + yyval.range->max = yyvsp[-3].value->u.integervalue - 1; + } +break; +case 47: +#line 372 "" +{ + if(yyvsp[-1].value->type != integervalue) + lex_error_message("Non-integer in second part of range"); + yyval.range = ecalloc(1, sizeof(*yyval.range)); + yyval.range->min = yyvsp[-1].value->u.integervalue + 2; + yyval.range->max = yyvsp[-1].value->u.integervalue; + } +break; +case 48: +#line 380 "" +{ + if(yyvsp[-1].value->type != integervalue) + lex_error_message("Non-integer used in limit"); + yyval.range = ecalloc(1, sizeof(*yyval.range)); + yyval.range->min = yyvsp[-1].value->u.integervalue; + yyval.range->max = yyvsp[-1].value->u.integervalue; + } +break; +case 49: +#line 391 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_Integer, + TE_EXPLICIT, new_type(TInteger)); + } +break; +case 50: +#line 396 "" +{ + yyval.type = new_type(TInteger); + yyval.type->range = yyvsp[0].range; + yyval.type = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, yyval.type); + } +break; +case 51: +#line 402 "" +{ + yyval.type = new_type(TInteger); + yyval.type->members = yyvsp[-1].members; + yyval.type = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, yyval.type); + } +break; +case 52: +#line 410 "" +{ + yyval.members = emalloc(sizeof(*yyval.members)); + ASN1_TAILQ_INIT(yyval.members); + ASN1_TAILQ_INSERT_HEAD(yyval.members, yyvsp[0].member, members); + } +break; +case 53: +#line 416 "" +{ + ASN1_TAILQ_INSERT_TAIL(yyvsp[-2].members, yyvsp[0].member, members); + yyval.members = yyvsp[-2].members; + } +break; +case 54: +#line 421 "" +{ yyval.members = yyvsp[-2].members; } +break; +case 55: +#line 425 "" +{ + yyval.member = emalloc(sizeof(*yyval.member)); + yyval.member->name = yyvsp[-3].name; + yyval.member->gen_name = estrdup(yyvsp[-3].name); + output_name (yyval.member->gen_name); + yyval.member->val = yyvsp[-1].constant; + yyval.member->optional = 0; + yyval.member->ellipsis = 0; + yyval.member->type = NULL; + } +break; +case 56: +#line 438 "" +{ + yyval.type = new_type(TInteger); + yyval.type->members = yyvsp[-1].members; + yyval.type = new_tag(ASN1_C_UNIV, UT_Enumerated, TE_EXPLICIT, yyval.type); + } +break; +case 58: +#line 449 "" +{ + yyval.type = new_type(TBitString); + yyval.type->members = emalloc(sizeof(*yyval.type->members)); + ASN1_TAILQ_INIT(yyval.type->members); + yyval.type = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, yyval.type); + } +break; +case 59: +#line 456 "" +{ + yyval.type = new_type(TBitString); + yyval.type->members = yyvsp[-1].members; + yyval.type = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, yyval.type); + } +break; +case 60: +#line 464 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_OID, + TE_EXPLICIT, new_type(TOID)); + } +break; +case 61: +#line 470 "" +{ + Type *t = new_type(TOctetString); + t->range = yyvsp[0].range; + yyval.type = new_tag(ASN1_C_UNIV, UT_OctetString, + TE_EXPLICIT, t); + } +break; +case 62: +#line 479 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_Null, + TE_EXPLICIT, new_type(TNull)); + } +break; +case 63: +#line 486 "" +{ yyval.range = NULL; } +break; +case 64: +#line 488 "" +{ yyval.range = yyvsp[0].range; } +break; +case 65: +#line 493 "" +{ + yyval.type = new_type(TSequence); + yyval.type->members = yyvsp[-1].members; + yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type); + } +break; +case 66: +#line 499 "" +{ + yyval.type = new_type(TSequence); + yyval.type->members = NULL; + yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type); + } +break; +case 67: +#line 507 "" +{ + yyval.type = new_type(TSequenceOf); + yyval.type->range = yyvsp[-2].range; + yyval.type->subtype = yyvsp[0].type; + yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type); + } +break; +case 68: +#line 516 "" +{ + yyval.type = new_type(TSet); + yyval.type->members = yyvsp[-1].members; + yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type); + } +break; +case 69: +#line 522 "" +{ + yyval.type = new_type(TSet); + yyval.type->members = NULL; + yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type); + } +break; +case 70: +#line 530 "" +{ + yyval.type = new_type(TSetOf); + yyval.type->subtype = yyvsp[0].type; + yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type); + } +break; +case 71: +#line 538 "" +{ + yyval.type = new_type(TChoice); + yyval.type->members = yyvsp[-1].members; + } +break; +case 74: +#line 549 "" +{ + Symbol *s = addsym(yyvsp[0].name); + yyval.type = new_type(TType); + if(s->stype != Stype && s->stype != SUndefined) + lex_error_message ("%s is not a type\n", yyvsp[0].name); + else + yyval.type->symbol = s; + } +break; +case 75: +#line 560 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_GeneralizedTime, + TE_EXPLICIT, new_type(TGeneralizedTime)); + } +break; +case 76: +#line 565 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_UTCTime, + TE_EXPLICIT, new_type(TUTCTime)); + } +break; +case 77: +#line 572 "" +{ + /* if (Constraint.type == contentConstrant) { + assert(Constraint.u.constraint.type == octetstring|bitstring-w/o-NamedBitList); // remember to check type reference too + if (Constraint.u.constraint.type) { + assert((Constraint.u.constraint.type.length % 8) == 0); + } + } + if (Constraint.u.constraint.encoding) { + type == der-oid|ber-oid + } + */ + } +break; +case 78: +#line 588 "" +{ + yyval.constraint_spec = yyvsp[-1].constraint_spec; + } +break; +case 82: +#line 601 "" +{ + yyval.constraint_spec = new_constraint_spec(CT_CONTENTS); + yyval.constraint_spec->u.content.type = yyvsp[0].type; + yyval.constraint_spec->u.content.encoding = NULL; + } +break; +case 83: +#line 607 "" +{ + if (yyvsp[0].value->type != objectidentifiervalue) + lex_error_message("Non-OID used in ENCODED BY constraint"); + yyval.constraint_spec = new_constraint_spec(CT_CONTENTS); + yyval.constraint_spec->u.content.type = NULL; + yyval.constraint_spec->u.content.encoding = yyvsp[0].value; + } +break; +case 84: +#line 615 "" +{ + if (yyvsp[0].value->type != objectidentifiervalue) + lex_error_message("Non-OID used in ENCODED BY constraint"); + yyval.constraint_spec = new_constraint_spec(CT_CONTENTS); + yyval.constraint_spec->u.content.type = yyvsp[-3].type; + yyval.constraint_spec->u.content.encoding = yyvsp[0].value; + } +break; +case 85: +#line 625 "" +{ + yyval.constraint_spec = new_constraint_spec(CT_USER); + } +break; +case 86: +#line 631 "" +{ + yyval.type = new_type(TTag); + yyval.type->tag = yyvsp[-2].tag; + yyval.type->tag.tagenv = yyvsp[-1].constant; + if(yyvsp[0].type->type == TTag && yyvsp[-1].constant == TE_IMPLICIT) { + yyval.type->subtype = yyvsp[0].type->subtype; + free(yyvsp[0].type); + } else + yyval.type->subtype = yyvsp[0].type; + } +break; +case 87: +#line 644 "" +{ + yyval.tag.tagclass = yyvsp[-2].constant; + yyval.tag.tagvalue = yyvsp[-1].constant; + yyval.tag.tagenv = TE_EXPLICIT; + } +break; +case 88: +#line 652 "" +{ + yyval.constant = ASN1_C_CONTEXT; + } +break; +case 89: +#line 656 "" +{ + yyval.constant = ASN1_C_UNIV; + } +break; +case 90: +#line 660 "" +{ + yyval.constant = ASN1_C_APPL; + } +break; +case 91: +#line 664 "" +{ + yyval.constant = ASN1_C_PRIVATE; + } +break; +case 92: +#line 670 "" +{ + yyval.constant = TE_EXPLICIT; + } +break; +case 93: +#line 674 "" +{ + yyval.constant = TE_EXPLICIT; + } +break; +case 94: +#line 678 "" +{ + yyval.constant = TE_IMPLICIT; + } +break; +case 95: +#line 685 "" +{ + Symbol *s; + s = addsym (yyvsp[-3].name); + + s->stype = SValue; + s->value = yyvsp[0].value; + generate_constant (s); + } +break; +case 97: +#line 699 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_GeneralString, + TE_EXPLICIT, new_type(TGeneralString)); + } +break; +case 98: +#line 704 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_TeletexString, + TE_EXPLICIT, new_type(TTeletexString)); + } +break; +case 99: +#line 709 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_UTF8String, + TE_EXPLICIT, new_type(TUTF8String)); + } +break; +case 100: +#line 714 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_PrintableString, + TE_EXPLICIT, new_type(TPrintableString)); + } +break; +case 101: +#line 719 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_VisibleString, + TE_EXPLICIT, new_type(TVisibleString)); + } +break; +case 102: +#line 724 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_IA5String, + TE_EXPLICIT, new_type(TIA5String)); + } +break; +case 103: +#line 729 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_BMPString, + TE_EXPLICIT, new_type(TBMPString)); + } +break; +case 104: +#line 734 "" +{ + yyval.type = new_tag(ASN1_C_UNIV, UT_UniversalString, + TE_EXPLICIT, new_type(TUniversalString)); + } +break; +case 105: +#line 742 "" +{ + yyval.members = emalloc(sizeof(*yyval.members)); + ASN1_TAILQ_INIT(yyval.members); + ASN1_TAILQ_INSERT_HEAD(yyval.members, yyvsp[0].member, members); + } +break; +case 106: +#line 748 "" +{ + ASN1_TAILQ_INSERT_TAIL(yyvsp[-2].members, yyvsp[0].member, members); + yyval.members = yyvsp[-2].members; + } +break; +case 107: +#line 753 "" +{ + struct member *m = ecalloc(1, sizeof(*m)); + m->name = estrdup("..."); + m->gen_name = estrdup("asn1_ellipsis"); + m->ellipsis = 1; + ASN1_TAILQ_INSERT_TAIL(yyvsp[-2].members, m, members); + yyval.members = yyvsp[-2].members; + } +break; +case 108: +#line 764 "" +{ + yyval.member = emalloc(sizeof(*yyval.member)); + yyval.member->name = yyvsp[-1].name; + yyval.member->gen_name = estrdup(yyvsp[-1].name); + output_name (yyval.member->gen_name); + yyval.member->type = yyvsp[0].type; + yyval.member->ellipsis = 0; + } +break; +case 109: +#line 775 "" +{ + yyval.member = yyvsp[0].member; + yyval.member->optional = 0; + yyval.member->defval = NULL; + } +break; +case 110: +#line 781 "" +{ + yyval.member = yyvsp[-1].member; + yyval.member->optional = 1; + yyval.member->defval = NULL; + } +break; +case 111: +#line 787 "" +{ + yyval.member = yyvsp[-2].member; + yyval.member->optional = 0; + yyval.member->defval = yyvsp[0].value; + } +break; +case 112: +#line 795 "" +{ + yyval.members = emalloc(sizeof(*yyval.members)); + ASN1_TAILQ_INIT(yyval.members); + ASN1_TAILQ_INSERT_HEAD(yyval.members, yyvsp[0].member, members); + } +break; +case 113: +#line 801 "" +{ + ASN1_TAILQ_INSERT_TAIL(yyvsp[-2].members, yyvsp[0].member, members); + yyval.members = yyvsp[-2].members; + } +break; +case 114: +#line 808 "" +{ + yyval.member = emalloc(sizeof(*yyval.member)); + yyval.member->name = yyvsp[-3].name; + yyval.member->gen_name = estrdup(yyvsp[-3].name); + output_name (yyval.member->gen_name); + yyval.member->val = yyvsp[-1].constant; + yyval.member->optional = 0; + yyval.member->ellipsis = 0; + yyval.member->type = NULL; + } +break; +case 116: +#line 821 "" +{ yyval.objid = NULL; } +break; +case 117: +#line 825 "" +{ + yyval.objid = yyvsp[-1].objid; + } +break; +case 118: +#line 831 "" +{ + yyval.objid = NULL; + } +break; +case 119: +#line 835 "" +{ + if (yyvsp[0].objid) { + yyval.objid = yyvsp[0].objid; + add_oid_to_tail(yyvsp[0].objid, yyvsp[-1].objid); + } else { + yyval.objid = yyvsp[-1].objid; + } + } +break; +case 120: +#line 846 "" +{ + yyval.objid = new_objid(yyvsp[-3].name, yyvsp[-1].constant); + } +break; +case 121: +#line 850 "" +{ + Symbol *s = addsym(yyvsp[0].name); + if(s->stype != SValue || + s->value->type != objectidentifiervalue) { + lex_error_message("%s is not an object identifier\n", + s->name); + exit(1); + } + yyval.objid = s->value->u.objectidentifiervalue; + } +break; +case 122: +#line 861 "" +{ + yyval.objid = new_objid(NULL, yyvsp[0].constant); + } +break; +case 132: +#line 884 "" +{ + Symbol *s = addsym(yyvsp[0].name); + if(s->stype != SValue) + lex_error_message ("%s is not a value\n", + s->name); + else + yyval.value = s->value; + } +break; +case 133: +#line 895 "" +{ + yyval.value = emalloc(sizeof(*yyval.value)); + yyval.value->type = stringvalue; + yyval.value->u.stringvalue = yyvsp[0].name; + } +break; +case 134: +#line 903 "" +{ + yyval.value = emalloc(sizeof(*yyval.value)); + yyval.value->type = booleanvalue; + yyval.value->u.booleanvalue = 0; + } +break; +case 135: +#line 909 "" +{ + yyval.value = emalloc(sizeof(*yyval.value)); + yyval.value->type = booleanvalue; + yyval.value->u.booleanvalue = 0; + } +break; +case 136: +#line 917 "" +{ + yyval.value = emalloc(sizeof(*yyval.value)); + yyval.value->type = integervalue; + yyval.value->u.integervalue = yyvsp[0].constant; + } +break; +case 138: +#line 928 "" +{ + } +break; +case 139: +#line 933 "" +{ + yyval.value = emalloc(sizeof(*yyval.value)); + yyval.value->type = objectidentifiervalue; + yyval.value->u.objectidentifiervalue = yyvsp[0].objid; + } +break; +#line 1553 "" + } + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state 0 to\ + state %d\n", YYPREFIX, YYFINAL); +#endif + yystate = YYFINAL; + *++yyssp = YYFINAL; + *++yyvsp = yyval; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +#if YYDEBUG + if (yydebug) + { + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; + printf("%sdebug: state %d, reading %d (%s)\n", + YYPREFIX, YYFINAL, yychar, yys); + } +#endif + } + if (yychar == 0) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("%sdebug: after reduction, shifting from state %d \ +to state %d\n", YYPREFIX, *yyssp, yystate); +#endif + if (yyssp >= yysslim && yygrowstack()) + { + goto yyoverflow; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; + +yyoverflow: + yyerror("yacc stack overflow"); + +yyabort: + return (1); + +yyaccept: + return (0); +} diff --git a/source4/heimdal/lib/asn1/asn1parse.h b/source4/heimdal/lib/asn1/asn1parse.h new file mode 100644 index 0000000000..9e526403b2 --- /dev/null +++ b/source4/heimdal/lib/asn1/asn1parse.h @@ -0,0 +1,102 @@ +#define kw_ABSENT 257 +#define kw_ABSTRACT_SYNTAX 258 +#define kw_ALL 259 +#define kw_APPLICATION 260 +#define kw_AUTOMATIC 261 +#define kw_BEGIN 262 +#define kw_BIT 263 +#define kw_BMPString 264 +#define kw_BOOLEAN 265 +#define kw_BY 266 +#define kw_CHARACTER 267 +#define kw_CHOICE 268 +#define kw_CLASS 269 +#define kw_COMPONENT 270 +#define kw_COMPONENTS 271 +#define kw_CONSTRAINED 272 +#define kw_CONTAINING 273 +#define kw_DEFAULT 274 +#define kw_DEFINITIONS 275 +#define kw_EMBEDDED 276 +#define kw_ENCODED 277 +#define kw_END 278 +#define kw_ENUMERATED 279 +#define kw_EXCEPT 280 +#define kw_EXPLICIT 281 +#define kw_EXPORTS 282 +#define kw_EXTENSIBILITY 283 +#define kw_EXTERNAL 284 +#define kw_FALSE 285 +#define kw_FROM 286 +#define kw_GeneralString 287 +#define kw_GeneralizedTime 288 +#define kw_GraphicString 289 +#define kw_IA5String 290 +#define kw_IDENTIFIER 291 +#define kw_IMPLICIT 292 +#define kw_IMPLIED 293 +#define kw_IMPORTS 294 +#define kw_INCLUDES 295 +#define kw_INSTANCE 296 +#define kw_INTEGER 297 +#define kw_INTERSECTION 298 +#define kw_ISO646String 299 +#define kw_MAX 300 +#define kw_MIN 301 +#define kw_MINUS_INFINITY 302 +#define kw_NULL 303 +#define kw_NumericString 304 +#define kw_OBJECT 305 +#define kw_OCTET 306 +#define kw_OF 307 +#define kw_OPTIONAL 308 +#define kw_ObjectDescriptor 309 +#define kw_PATTERN 310 +#define kw_PDV 311 +#define kw_PLUS_INFINITY 312 +#define kw_PRESENT 313 +#define kw_PRIVATE 314 +#define kw_PrintableString 315 +#define kw_REAL 316 +#define kw_RELATIVE_OID 317 +#define kw_SEQUENCE 318 +#define kw_SET 319 +#define kw_SIZE 320 +#define kw_STRING 321 +#define kw_SYNTAX 322 +#define kw_T61String 323 +#define kw_TAGS 324 +#define kw_TRUE 325 +#define kw_TYPE_IDENTIFIER 326 +#define kw_TeletexString 327 +#define kw_UNION 328 +#define kw_UNIQUE 329 +#define kw_UNIVERSAL 330 +#define kw_UTCTime 331 +#define kw_UTF8String 332 +#define kw_UniversalString 333 +#define kw_VideotexString 334 +#define kw_VisibleString 335 +#define kw_WITH 336 +#define RANGE 337 +#define EEQUAL 338 +#define ELLIPSIS 339 +#define IDENTIFIER 340 +#define referencename 341 +#define STRING 342 +#define NUMBER 343 +typedef union { + int constant; + struct value *value; + struct range *range; + char *name; + Type *type; + Member *member; + struct objid *objid; + char *defval; + struct string_list *sl; + struct tagtype tag; + struct memhead *members; + struct constraint_spec *constraint_spec; +} YYSTYPE; +extern YYSTYPE yylval; diff --git a/source4/heimdal/lib/asn1/lex.c b/source4/heimdal/lib/asn1/lex.c index fd19f23f8d..264d573008 100644 --- a/source4/heimdal/lib/asn1/lex.c +++ b/source4/heimdal/lib/asn1/lex.c @@ -1,6 +1,6 @@ #include "config.h" -#line 3 "heimdal/lib/asn1/lex.c" +#line 3 "" #define YY_INT_ALIGNED short int @@ -848,7 +848,7 @@ static unsigned lineno = 1; static void unterminated(const char *, unsigned); /* This is for broken old lexes (solaris 10 and hpux) */ -#line 851 "heimdal/lib/asn1/lex.c" +#line 851 "" #define INITIAL 0 @@ -1032,7 +1032,7 @@ YY_DECL #line 68 "lex.l" -#line 1035 "heimdal/lib/asn1/lex.c" +#line 1035 "" if ( !(yy_init) ) { @@ -1657,7 +1657,7 @@ YY_RULE_SETUP yylval.constant = strtol((const char *)yytext, &e, 0); if(e == y) - lex_err_message("malformed constant (%s)", yytext); + lex_error_message("malformed constant (%s)", yytext); else return NUMBER; } @@ -1694,14 +1694,14 @@ YY_RULE_SETUP case 94: YY_RULE_SETUP #line 273 "lex.l" -{ lex_err_message("Ignoring char(%c)\n", *yytext); } +{ lex_error_message("Ignoring char(%c)\n", *yytext); } YY_BREAK case 95: YY_RULE_SETUP #line 274 "lex.l" ECHO; YY_BREAK -#line 1704 "heimdal/lib/asn1/lex.c" +#line 1704 "" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -2712,7 +2712,7 @@ yywrap () #endif void -lex_err_message (const char *format, ...) +lex_error_message (const char *format, ...) { va_list args; @@ -2726,6 +2726,6 @@ lex_err_message (const char *format, ...) static void unterminated(const char *type, unsigned start_lineno) { - lex_err_message("unterminated %s, possibly started on line %d\n", type, start_lineno); + lex_error_message("unterminated %s, possibly started on line %d\n", type, start_lineno); } -- cgit