Merge new lorikeet heimdal, revision 85ed7247f515770c73b1f1ced1739f6ce19d75d2
authorJelmer Vernooij <jelmer@samba.org>
Mon, 14 Mar 2011 22:06:40 +0000 (23:06 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 14 Mar 2011 22:53:46 +0000 (23:53 +0100)
Autobuild-User: Jelmer Vernooij <jelmer@samba.org>
Autobuild-Date: Mon Mar 14 23:53:46 CET 2011 on sn-devel-104

57 files changed:
source4/heimdal/base/dict.c
source4/heimdal/base/heimbase.c
source4/heimdal/kdc/default_config.c
source4/heimdal/kdc/kdc.h
source4/heimdal/lib/asn1/asn1parse.c
source4/heimdal/lib/asn1/asn1parse.h
source4/heimdal/lib/asn1/krb5.asn1
source4/heimdal/lib/asn1/lex.c
source4/heimdal/lib/com_err/lex.c
source4/heimdal/lib/com_err/parse.c
source4/heimdal/lib/com_err/parse.h
source4/heimdal/lib/gssapi/gssapi/gssapi.h
source4/heimdal/lib/gssapi/gssapi/gssapi_oid.h
source4/heimdal/lib/gssapi/gssapi_mech.h
source4/heimdal/lib/gssapi/krb5/accept_sec_context.c
source4/heimdal/lib/gssapi/krb5/import_sec_context.c
source4/heimdal/lib/gssapi/mech/gss_mech_switch.c
source4/heimdal/lib/gssapi/mech/gss_mo.c
source4/heimdal/lib/gssapi/mech/gss_oid.c
source4/heimdal/lib/gssapi/version-script.map
source4/heimdal/lib/hcrypto/rsa.c
source4/heimdal/lib/hx509/cert.c
source4/heimdal/lib/hx509/cms.c
source4/heimdal/lib/hx509/collector.c
source4/heimdal/lib/hx509/crypto.c
source4/heimdal/lib/hx509/keyset.c
source4/heimdal/lib/hx509/ks_keychain.c
source4/heimdal/lib/hx509/ks_mem.c
source4/heimdal/lib/hx509/ks_p11.c
source4/heimdal/lib/hx509/lex.yy.c
source4/heimdal/lib/hx509/req.c
source4/heimdal/lib/hx509/sel-gram.c
source4/heimdal/lib/hx509/sel-gram.h
source4/heimdal/lib/hx509/sel-lex.c
source4/heimdal/lib/hx509/version-script.map
source4/heimdal/lib/krb5/context.c
source4/heimdal/lib/krb5/crypto-aes.c
source4/heimdal/lib/krb5/crypto-algs.c
source4/heimdal/lib/krb5/crypto-arcfour.c
source4/heimdal/lib/krb5/crypto-des-common.c
source4/heimdal/lib/krb5/crypto-des.c
source4/heimdal/lib/krb5/crypto-des3.c
source4/heimdal/lib/krb5/crypto-evp.c
source4/heimdal/lib/krb5/crypto-null.c
source4/heimdal/lib/krb5/crypto-pk.c
source4/heimdal/lib/krb5/crypto.c
source4/heimdal/lib/krb5/crypto.h
source4/heimdal/lib/krb5/get_cred.c
source4/heimdal/lib/krb5/keytab.c
source4/heimdal/lib/krb5/krb5.h
source4/heimdal/lib/krb5/pac.c
source4/heimdal/lib/krb5/plugin.c
source4/heimdal/lib/krb5/salt-aes.c
source4/heimdal/lib/krb5/salt.c
source4/heimdal/lib/ntlm/ntlm.c
source4/rpc_server/backupkey/dcesrv_backupkey.c
source4/torture/rpc/backupkey.c

index 2eb57aa9381962a3a67552f794f4bc689a02c4d7..7522c8c1c412a2499a193d80078b1a502400ed62 100644 (file)
@@ -120,7 +120,7 @@ heim_dict_create(size_t size)
        heim_release(dict);
        return NULL;
     }
-
+    
     dict->tab = calloc(dict->size, sizeof(dict->tab[0]));
     if (dict->tab == NULL) {
        dict->size = 0;
index 7031af9e49806ad7a483d57d66053ce0c7de4515..01668716a300144ec5650c1fa9b6b329f180e1ff 100644 (file)
@@ -369,7 +369,7 @@ void
 heim_abortv(const char *fmt, va_list ap)
 {
     static char str[1024];
-
+    
     vsnprintf(str, sizeof(str), fmt, ap);
     syslog(LOG_ERR, "heim_abort: %s", str);
     abort();
index e26245323cbcd941a62b4489bcf8743dc748ea72..1441c3161e8306abb1947df8ffab350c432c7f82 100644 (file)
@@ -272,7 +272,7 @@ krb5_kdc_pkinit_config(krb5_context context, krb5_kdc_configuration *config)
 
     if (config->pkinit_kdc_identity == NULL) {
        if (config->pkinit_kdc_friendly_name == NULL)
-           config->pkinit_kdc_friendly_name =
+           config->pkinit_kdc_friendly_name = 
                strdup("O=System Identity,CN=com.apple.kerberos.kdc");
        config->pkinit_kdc_identity = strdup("KEYCHAIN:");
     }
@@ -284,7 +284,7 @@ krb5_kdc_pkinit_config(krb5_context context, krb5_kdc_configuration *config)
     if (config->enable_pkinit) {
        if (config->pkinit_kdc_identity == NULL)
            krb5_errx(context, 1, "pkinit enabled but no identity");
-
        if (config->pkinit_kdc_anchors == NULL)
            krb5_errx(context, 1, "pkinit enabled but no X509 anchors");
 
@@ -298,4 +298,4 @@ krb5_kdc_pkinit_config(krb5_context context, krb5_kdc_configuration *config)
 
     return 0;
 #endif /* PKINIT */
-}
+}   
index c353ca1c5f607979583178380e150624e0131b2a..139b5e70875f416f110ac4fabbba9fb799628a2a 100644 (file)
@@ -41,6 +41,7 @@
 #ifndef __KDC_H__
 #define __KDC_H__
 
+#include <hdb.h>
 #include <krb5.h>
 
 enum krb5_kdc_trpolicy {
index 0382bcf7f567e23fcd75ae9d4354b150949ed0b8..08d068b6a433f787a81392638f016479b8c2c206 100644 (file)
@@ -1,37 +1,75 @@
-#ifndef lint
-static const char yysccsid[] = "@(#)yaccpar    1.9 (Berkeley) 02/21/93";
-#endif
 
-#include <stdlib.h>
-#include <string.h>
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYPATCH 20100216
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#define YYEMPTY        (-1)
-#define yyclearin      (yychar = YYEMPTY)
-#define yyerrok        (yyerrflag = 0)
-#define YYRECOVERING() (yyerrflag != 0)
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
 
-#define YYPREFIX "yy"
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
 
-/* compatibility with bison */
-#ifdef YYPARSE_PARAM
-/* compatibility with FreeBSD */
-#ifdef YYPARSE_PARAM_TYPE
-#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
-#else
-#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
-#endif
-#else
-#define YYPARSE_DECL() yyparse(void)
-#endif /* YYPARSE_PARAM */
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
 
-extern int YYPARSE_DECL();
 
-#line 39 "asn1parse.c"
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 38 "asn1parse.c"
+
 
 #include <config.h>
 
@@ -62,8 +100,224 @@ struct string_list {
 #define YYMALLOC malloc
 #define YYFREE   free
 
+
+
+/* Line 189 of yacc.c  */
+#line 107 "asn1parse.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kw_ABSENT = 258,
+     kw_ABSTRACT_SYNTAX = 259,
+     kw_ALL = 260,
+     kw_APPLICATION = 261,
+     kw_AUTOMATIC = 262,
+     kw_BEGIN = 263,
+     kw_BIT = 264,
+     kw_BMPString = 265,
+     kw_BOOLEAN = 266,
+     kw_BY = 267,
+     kw_CHARACTER = 268,
+     kw_CHOICE = 269,
+     kw_CLASS = 270,
+     kw_COMPONENT = 271,
+     kw_COMPONENTS = 272,
+     kw_CONSTRAINED = 273,
+     kw_CONTAINING = 274,
+     kw_DEFAULT = 275,
+     kw_DEFINITIONS = 276,
+     kw_EMBEDDED = 277,
+     kw_ENCODED = 278,
+     kw_END = 279,
+     kw_ENUMERATED = 280,
+     kw_EXCEPT = 281,
+     kw_EXPLICIT = 282,
+     kw_EXPORTS = 283,
+     kw_EXTENSIBILITY = 284,
+     kw_EXTERNAL = 285,
+     kw_FALSE = 286,
+     kw_FROM = 287,
+     kw_GeneralString = 288,
+     kw_GeneralizedTime = 289,
+     kw_GraphicString = 290,
+     kw_IA5String = 291,
+     kw_IDENTIFIER = 292,
+     kw_IMPLICIT = 293,
+     kw_IMPLIED = 294,
+     kw_IMPORTS = 295,
+     kw_INCLUDES = 296,
+     kw_INSTANCE = 297,
+     kw_INTEGER = 298,
+     kw_INTERSECTION = 299,
+     kw_ISO646String = 300,
+     kw_MAX = 301,
+     kw_MIN = 302,
+     kw_MINUS_INFINITY = 303,
+     kw_NULL = 304,
+     kw_NumericString = 305,
+     kw_OBJECT = 306,
+     kw_OCTET = 307,
+     kw_OF = 308,
+     kw_OPTIONAL = 309,
+     kw_ObjectDescriptor = 310,
+     kw_PATTERN = 311,
+     kw_PDV = 312,
+     kw_PLUS_INFINITY = 313,
+     kw_PRESENT = 314,
+     kw_PRIVATE = 315,
+     kw_PrintableString = 316,
+     kw_REAL = 317,
+     kw_RELATIVE_OID = 318,
+     kw_SEQUENCE = 319,
+     kw_SET = 320,
+     kw_SIZE = 321,
+     kw_STRING = 322,
+     kw_SYNTAX = 323,
+     kw_T61String = 324,
+     kw_TAGS = 325,
+     kw_TRUE = 326,
+     kw_TYPE_IDENTIFIER = 327,
+     kw_TeletexString = 328,
+     kw_UNION = 329,
+     kw_UNIQUE = 330,
+     kw_UNIVERSAL = 331,
+     kw_UTCTime = 332,
+     kw_UTF8String = 333,
+     kw_UniversalString = 334,
+     kw_VideotexString = 335,
+     kw_VisibleString = 336,
+     kw_WITH = 337,
+     RANGE = 338,
+     EEQUAL = 339,
+     ELLIPSIS = 340,
+     IDENTIFIER = 341,
+     referencename = 342,
+     STRING = 343,
+     NUMBER = 344
+   };
+#endif
+/* Tokens.  */
+#define kw_ABSENT 258
+#define kw_ABSTRACT_SYNTAX 259
+#define kw_ALL 260
+#define kw_APPLICATION 261
+#define kw_AUTOMATIC 262
+#define kw_BEGIN 263
+#define kw_BIT 264
+#define kw_BMPString 265
+#define kw_BOOLEAN 266
+#define kw_BY 267
+#define kw_CHARACTER 268
+#define kw_CHOICE 269
+#define kw_CLASS 270
+#define kw_COMPONENT 271
+#define kw_COMPONENTS 272
+#define kw_CONSTRAINED 273
+#define kw_CONTAINING 274
+#define kw_DEFAULT 275
+#define kw_DEFINITIONS 276
+#define kw_EMBEDDED 277
+#define kw_ENCODED 278
+#define kw_END 279
+#define kw_ENUMERATED 280
+#define kw_EXCEPT 281
+#define kw_EXPLICIT 282
+#define kw_EXPORTS 283
+#define kw_EXTENSIBILITY 284
+#define kw_EXTERNAL 285
+#define kw_FALSE 286
+#define kw_FROM 287
+#define kw_GeneralString 288
+#define kw_GeneralizedTime 289
+#define kw_GraphicString 290
+#define kw_IA5String 291
+#define kw_IDENTIFIER 292
+#define kw_IMPLICIT 293
+#define kw_IMPLIED 294
+#define kw_IMPORTS 295
+#define kw_INCLUDES 296
+#define kw_INSTANCE 297
+#define kw_INTEGER 298
+#define kw_INTERSECTION 299
+#define kw_ISO646String 300
+#define kw_MAX 301
+#define kw_MIN 302
+#define kw_MINUS_INFINITY 303
+#define kw_NULL 304
+#define kw_NumericString 305
+#define kw_OBJECT 306
+#define kw_OCTET 307
+#define kw_OF 308
+#define kw_OPTIONAL 309
+#define kw_ObjectDescriptor 310
+#define kw_PATTERN 311
+#define kw_PDV 312
+#define kw_PLUS_INFINITY 313
+#define kw_PRESENT 314
+#define kw_PRIVATE 315
+#define kw_PrintableString 316
+#define kw_REAL 317
+#define kw_RELATIVE_OID 318
+#define kw_SEQUENCE 319
+#define kw_SET 320
+#define kw_SIZE 321
+#define kw_STRING 322
+#define kw_SYNTAX 323
+#define kw_T61String 324
+#define kw_TAGS 325
+#define kw_TRUE 326
+#define kw_TYPE_IDENTIFIER 327
+#define kw_TeletexString 328
+#define kw_UNION 329
+#define kw_UNIQUE 330
+#define kw_UNIVERSAL 331
+#define kw_UTCTime 332
+#define kw_UTF8String 333
+#define kw_UniversalString 334
+#define kw_VideotexString 335
+#define kw_VisibleString 336
+#define kw_WITH 337
+#define RANGE 338
+#define EEQUAL 339
+#define ELLIPSIS 340
+#define IDENTIFIER 341
+#define referencename 342
+#define STRING 343
+#define NUMBER 344
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
 #line 71 "asn1parse.c"
-typedef union {
+
     int constant;
     struct value *value;
     struct range *range;
@@ -76,1146 +330,1888 @@ typedef union {
     struct tagtype tag;
     struct memhead *members;
     struct constraint_spec *constraint_spec;
+
+
+
+/* Line 214 of yacc.c  */
+#line 338 "asn1parse.c"
 } YYSTYPE;
-#line 80 "asn1parse.c"
-#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
-static const 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,
-};
-static const 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,
-};
-static const 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,
-};
-static const 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,
-};
-static const 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,
-};
-static const 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,
-};
-static const 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
-static const 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,
-};
-static const 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
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
 #endif
-#define YYMAXTOKEN 343
-#if YYDEBUG
-static const 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",
-};
-static const 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",
 
-};
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 350 "asn1parse.c"
+
+#ifdef short
+# undef short
 #endif
-#if YYDEBUG
-#include <stdio.h>
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
 #endif
 
-/* define the initial stack-sizes */
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH  YYSTACKSIZE
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
 #else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
 #else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH  500
+typedef short int yytype_int16;
 #endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
 #endif
 
-#define YYINITSTACKSIZE 500
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
 
-int      yydebug;
-int      yynerrs;
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
 
-typedef struct {
-    unsigned stacksize;
-    short    *s_base;
-    short    *s_mark;
-    short    *s_last;
-    YYSTYPE  *l_base;
-    YYSTYPE  *l_mark;
-} YYSTACKDATA;
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
 
-#define YYPURE 0
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
 
-int      yyerrflag;
-int      yychar;
-YYSTYPE  yyval;
-YYSTYPE  yylval;
+#if ! defined yyoverflow || YYERROR_VERBOSE
 
-/* variables for the parser stack */
-static YYSTACKDATA yystack;
-#line 945 "asn1parse.c"
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
 
-void
-yyerror (const char *s)
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
 {
-     lex_error_message ("%s\n", s);
-}
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
 
-static Type *
-new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype)
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  6
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   203
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  98
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  69
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  140
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  220
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   344
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
 {
-    Type *t;
-    if(oldtype->type == TTag && oldtype->tag.tagenv == TE_IMPLICIT) {
-       t = oldtype;
-       oldtype = oldtype->subtype; /* XXX */
-    } else
-       t = new_type (TTag);
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      92,    93,     2,     2,    91,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,    90,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    96,     2,    97,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    94,     2,    95,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89
+};
 
-    t->tag.tagclass = tagclass;
-    t->tag.tagvalue = tagvalue;
-    t->tag.tagenv = tagenv;
-    t->subtype = oldtype;
-    return t;
-}
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,    13,    16,    19,    22,    23,    26,    27,
+      31,    32,    36,    37,    39,    40,    42,    45,    50,    54,
+      57,    58,    60,    63,    65,    67,    71,    73,    77,    79,
+      81,    83,    85,    87,    89,    91,    93,    95,    97,    99,
+     101,   103,   105,   107,   109,   111,   113,   119,   125,   131,
+     135,   137,   140,   145,   147,   151,   155,   160,   165,   167,
+     170,   176,   179,   183,   185,   186,   189,   194,   198,   203,
+     208,   212,   216,   221,   223,   225,   227,   229,   231,   234,
+     238,   240,   242,   244,   247,   251,   257,   262,   266,   271,
+     272,   274,   276,   278,   279,   281,   283,   288,   290,   292,
+     294,   296,   298,   300,   302,   304,   306,   308,   312,   316,
+     319,   321,   324,   328,   330,   334,   339,   341,   342,   346,
+     347,   350,   355,   357,   359,   361,   363,   365,   367,   369,
+     371,   373,   375,   377,   379,   381,   383,   385,   387,   389,
+     391
+};
 
-static struct objid *
-new_objid(const char *label, int value)
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
 {
-    struct objid *s;
-    s = emalloc(sizeof(*s));
-    s->label = label;
-    s->value = value;
-    s->next = NULL;
-    return s;
-}
+      99,     0,    -1,    86,   152,    21,   100,   101,    84,     8,
+     102,    24,    -1,    27,    70,    -1,    38,    70,    -1,     7,
+      70,    -1,    -1,    29,    39,    -1,    -1,   107,   103,   108,
+      -1,    -1,    40,   104,    90,    -1,    -1,   105,    -1,    -1,
+     106,    -1,   105,   106,    -1,   110,    32,    86,   152,    -1,
+      28,   110,    90,    -1,    28,     5,    -1,    -1,   109,    -1,
+     109,   108,    -1,   111,    -1,   144,    -1,    86,    91,   110,
+      -1,    86,    -1,    86,    84,   112,    -1,   113,    -1,   131,
+      -1,   134,    -1,   121,    -1,   114,    -1,   145,    -1,   130,
+      -1,   119,    -1,   116,    -1,   124,    -1,   122,    -1,   123,
+      -1,   126,    -1,   127,    -1,   128,    -1,   129,    -1,   140,
+      -1,    11,    -1,    92,   156,    83,   156,    93,    -1,    92,
+     156,    83,    46,    93,    -1,    92,    47,    83,   156,    93,
+      -1,    92,   156,    93,    -1,    43,    -1,    43,   115,    -1,
+      43,    94,   117,    95,    -1,   118,    -1,   117,    91,   118,
+      -1,   117,    91,    85,    -1,    86,    92,   164,    93,    -1,
+      25,    94,   120,    95,    -1,   117,    -1,     9,    67,    -1,
+       9,    67,    94,   150,    95,    -1,    51,    37,    -1,    52,
+      67,   125,    -1,    49,    -1,    -1,    66,   115,    -1,    64,
+      94,   147,    95,    -1,    64,    94,    95,    -1,    64,   125,
+      53,   112,    -1,    65,    94,   147,    95,    -1,    65,    94,
+      95,    -1,    65,    53,   112,    -1,    14,    94,   147,    95,
+      -1,   132,    -1,   133,    -1,    86,    -1,    34,    -1,    77,
+      -1,   112,   135,    -1,    92,   136,    93,    -1,   137,    -1,
+     138,    -1,   139,    -1,    19,   112,    -1,    23,    12,   156,
+      -1,    19,   112,    23,    12,   156,    -1,    18,    12,    94,
+      95,    -1,   141,   143,   112,    -1,    96,   142,    89,    97,
+      -1,    -1,    76,    -1,     6,    -1,    60,    -1,    -1,    27,
+      -1,    38,    -1,    86,   112,    84,   156,    -1,   146,    -1,
+      33,    -1,    73,    -1,    78,    -1,    61,    -1,    81,    -1,
+      36,    -1,    10,    -1,    79,    -1,   149,    -1,   147,    91,
+     149,    -1,   147,    91,    85,    -1,    86,   112,    -1,   148,
+      -1,   148,    54,    -1,   148,    20,   156,    -1,   151,    -1,
+     150,    91,   151,    -1,    86,    92,    89,    93,    -1,   153,
+      -1,    -1,    94,   154,    95,    -1,    -1,   155,   154,    -1,
+      86,    92,    89,    93,    -1,    86,    -1,    89,    -1,   157,
+      -1,   158,    -1,   162,    -1,   161,    -1,   163,    -1,   166,
+      -1,   165,    -1,   159,    -1,   160,    -1,    86,    -1,    88,
+      -1,    71,    -1,    31,    -1,   164,    -1,    89,    -1,    49,
+      -1,   153,    -1
+};
 
-static void
-add_oid_to_tail(struct objid *head, struct objid *tail)
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
 {
-    struct objid *o;
-    o = head;
-    while (o->next)
-       o = o->next;
-    o->next = tail;
-}
+       0,   239,   239,   246,   247,   249,   251,   254,   256,   259,
+     260,   263,   264,   267,   268,   271,   272,   275,   287,   293,
+     294,   297,   298,   301,   302,   305,   311,   319,   329,   330,
+     331,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   350,   357,   367,   375,   383,
+     394,   399,   405,   413,   419,   424,   428,   441,   449,   452,
+     459,   467,   473,   482,   490,   491,   496,   502,   510,   519,
+     525,   533,   541,   548,   549,   552,   563,   568,   575,   591,
+     597,   600,   601,   604,   610,   618,   628,   634,   647,   656,
+     659,   663,   667,   674,   677,   681,   688,   699,   702,   707,
+     712,   717,   722,   727,   732,   737,   745,   751,   756,   767,
+     778,   784,   790,   798,   804,   811,   824,   825,   828,   835,
+     838,   849,   853,   864,   870,   871,   874,   875,   876,   877,
+     878,   881,   884,   887,   898,   906,   912,   920,   928,   931,
+     936
+};
+#endif
 
-static Type *
-new_type (Typetype tt)
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
 {
-    Type *t = ecalloc(1, sizeof(*t));
-    t->type = tt;
-    return t;
-}
+  "$end", "error", "$undefined", "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", "';'", "','", "'('", "')'", "'{'", "'}'", "'['", "']'",
+  "$accept", "ModuleDefinition", "TagDefault", "ExtensionDefault",
+  "ModuleBody", "Imports", "SymbolsImported", "SymbolsFromModuleList",
+  "SymbolsFromModule", "Exports", "AssignmentList", "Assignment",
+  "referencenames", "TypeAssignment", "Type", "BuiltinType", "BooleanType",
+  "range", "IntegerType", "NamedNumberList", "NamedNumber",
+  "EnumeratedType", "Enumerations", "BitStringType",
+  "ObjectIdentifierType", "OctetStringType", "NullType", "size",
+  "SequenceType", "SequenceOfType", "SetType", "SetOfType", "ChoiceType",
+  "ReferencedType", "DefinedType", "UsefulType", "ConstrainedType",
+  "Constraint", "ConstraintSpec", "GeneralConstraint",
+  "ContentsConstraint", "UserDefinedConstraint", "TaggedType", "Tag",
+  "Class", "tagenv", "ValueAssignment", "CharacterStringType",
+  "RestrictedCharactedStringType", "ComponentTypeList", "NamedType",
+  "ComponentType", "NamedBitList", "NamedBit", "objid_opt", "objid",
+  "objid_list", "objid_element", "Value", "BuiltinValue",
+  "ReferencedValue", "DefinedValue", "Valuereference",
+  "CharacterStringValue", "BooleanValue", "IntegerValue", "SignedNumber",
+  "NullValue", "ObjectIdentifierValue", 0
+};
+#endif
 
-static struct constraint_spec *
-new_constraint_spec(enum ctype ct)
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
 {
-    struct constraint_spec *c = ecalloc(1, sizeof(*c));
-    c->ctype = ct;
-    return c;
-}
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+      59,    44,    40,    41,   123,   125,    91,    93
+};
+# endif
 
-static void fix_labels2(Type *t, const char *prefix);
-static void fix_labels1(struct memhead *members, const char *prefix)
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
 {
-    Member *m;
+       0,    98,    99,   100,   100,   100,   100,   101,   101,   102,
+     102,   103,   103,   104,   104,   105,   105,   106,   107,   107,
+     107,   108,   108,   109,   109,   110,   110,   111,   112,   112,
+     112,   113,   113,   113,   113,   113,   113,   113,   113,   113,
+     113,   113,   113,   113,   113,   114,   115,   115,   115,   115,
+     116,   116,   116,   117,   117,   117,   118,   119,   120,   121,
+     121,   122,   123,   124,   125,   125,   126,   126,   127,   128,
+     128,   129,   130,   131,   131,   132,   133,   133,   134,   135,
+     136,   137,   137,   138,   138,   138,   139,   140,   141,   142,
+     142,   142,   142,   143,   143,   143,   144,   145,   146,   146,
+     146,   146,   146,   146,   146,   146,   147,   147,   147,   148,
+     149,   149,   149,   150,   150,   151,   152,   152,   153,   154,
+     154,   155,   155,   155,   156,   156,   157,   157,   157,   157,
+     157,   158,   159,   160,   161,   162,   162,   163,   164,   165,
+     166
+};
 
-    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);
-    }
-}
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     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
+};
 
-static void fix_labels2(Type *t, const char *prefix)
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
 {
-    for(; t; t = t->subtype)
-       fix_labels1(t->members, prefix);
-}
+       0,   117,     0,   119,     0,   116,     1,   122,   123,     0,
+     119,     6,     0,   118,   120,     0,     0,     0,     8,     0,
+       5,     3,     4,     0,     0,   121,     7,     0,    20,     0,
+       0,    12,    19,    26,     0,     2,    14,     0,     0,    18,
+       0,    13,    15,     0,     0,     9,    21,    23,    24,    25,
+      11,    16,     0,     0,   104,    45,     0,     0,    98,    76,
+     103,    50,    63,     0,     0,   101,    64,     0,    99,    77,
+     100,   105,   102,     0,    75,    89,     0,    28,    32,    36,
+      35,    31,    38,    39,    37,    40,    41,    42,    43,    34,
+      29,    73,    74,    30,    44,    93,    33,    97,    22,   117,
+      59,     0,     0,     0,     0,    51,    61,    64,     0,     0,
+       0,     0,     0,    27,    91,    92,    90,     0,     0,     0,
+      78,    94,    95,     0,    17,     0,     0,     0,   110,   106,
+       0,    58,    53,     0,   136,     0,   139,   135,   133,   134,
+     138,   140,     0,   124,   125,   131,   132,   127,   126,   128,
+     137,   130,   129,     0,    62,    65,    67,     0,     0,    71,
+      70,     0,     0,    96,     0,     0,     0,     0,    80,    81,
+      82,    87,     0,     0,   113,   109,     0,    72,     0,   111,
+       0,     0,    57,     0,     0,    49,    52,    66,    68,    69,
+      88,     0,    83,     0,    79,     0,     0,    60,   108,   107,
+     112,     0,    55,    54,     0,     0,     0,     0,     0,    84,
+       0,   114,    56,    48,    47,    46,    86,     0,   115,    85
+};
 
-static void
-fix_labels(Symbol *s)
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-    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 709 "asn1parse.c"
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack(YYSTACKDATA *data)
+      -1,     2,    18,    24,    30,    37,    40,    41,    42,    31,
+      45,    46,    43,    47,    76,    77,    78,   105,    79,   131,
+     132,    80,   133,    81,    82,    83,    84,   110,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,   120,   167,   168,
+     169,   170,    94,    95,   117,   123,    48,    96,    97,   127,
+     128,   129,   173,   174,     4,   141,     9,    10,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -119
+static const yytype_int16 yypact[] =
 {
-    int i;
-    unsigned newsize;
-    short *newss;
-    YYSTYPE *newvs;
-
-    if ((newsize = data->stacksize) == 0)
-        newsize = YYINITSTACKSIZE;
-    else if (newsize >= YYMAXDEPTH)
-        return -1;
-    else if ((newsize *= 2) > YYMAXDEPTH)
-        newsize = YYMAXDEPTH;
-
-    i = data->s_mark - data->s_base;
-    newss = (data->s_base != 0)
-          ? (short *)realloc(data->s_base, newsize * sizeof(*newss))
-          : (short *)malloc(newsize * sizeof(*newss));
-    if (newss == 0)
-        return -1;
-
-    data->s_base  = newss;
-    data->s_mark = newss + i;
-
-    newvs = (data->l_base != 0)
-          ? (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs))
-          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
-    if (newvs == 0)
-        return -1;
-
-    data->l_base = newvs;
-    data->l_mark = newvs + i;
-
-    data->stacksize = newsize;
-    data->s_last = data->s_base + newsize - 1;
-    return 0;
-}
+     -43,   -56,    47,   -65,    29,  -119,  -119,   -31,  -119,   -25,
+     -65,     4,    -1,  -119,  -119,    17,    20,    26,    50,    13,
+    -119,  -119,  -119,    63,    24,  -119,  -119,   104,     8,    -2,
+      89,    74,  -119,    33,    25,  -119,    34,    39,    34,  -119,
+      37,    34,  -119,    98,    58,  -119,    39,  -119,  -119,  -119,
+    -119,  -119,    52,    66,  -119,  -119,    51,    53,  -119,  -119,
+    -119,   -79,  -119,   109,    81,  -119,   -60,   -48,  -119,  -119,
+    -119,  -119,  -119,   107,  -119,     2,   -74,  -119,  -119,  -119,
+    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
+    -119,  -119,  -119,  -119,  -119,   -18,  -119,  -119,  -119,   -56,
+      55,    65,    67,   -12,    67,  -119,  -119,    86,    68,   -70,
+     102,   107,   -69,    69,  -119,  -119,  -119,    73,    40,    10,
+    -119,  -119,  -119,   107,  -119,    71,   107,   -47,   -13,  -119,
+      72,    75,  -119,    70,  -119,    80,  -119,  -119,  -119,  -119,
+    -119,  -119,   -71,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
+    -119,  -119,  -119,   -46,  -119,  -119,  -119,   -39,   107,    69,
+    -119,   -38,    76,  -119,   155,   107,   157,    77,  -119,  -119,
+    -119,    69,    82,   -10,  -119,    69,   -22,  -119,    40,  -119,
+      87,    19,  -119,    40,     9,  -119,  -119,  -119,    69,  -119,
+    -119,    83,   -19,    40,  -119,    90,    71,  -119,  -119,  -119,
+    -119,    85,  -119,  -119,    88,    94,    96,    95,   163,  -119,
+      99,  -119,  -119,  -119,  -119,  -119,  -119,    40,  -119,  -119
+};
 
-#if YYPURE || defined(YY_NO_LEAKS)
-static void yyfreestack(YYSTACKDATA *data)
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-    free(data->s_base);
-    free(data->l_base);
-    memset(data, 0, sizeof(*data));
-}
-#else
-#define yyfreestack(data) /* nothing */
-#endif
+    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,   141,  -119,
+     137,  -119,   -15,  -119,   -72,  -119,  -119,    91,  -119,    92,
+      14,  -119,  -119,  -119,  -119,  -119,  -119,    84,  -119,  -119,
+    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,
+    -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,  -119,   -82,
+    -119,    18,  -119,     5,   101,     1,   187,  -119,  -118,  -119,
+    -119,  -119,  -119,  -119,  -119,  -119,    22,  -119,  -119
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -11
+static const yytype_int16 yytable[] =
+{
+     163,   113,     5,    32,   208,   111,   108,   178,   114,   121,
+     118,    15,   184,   103,    34,   104,   126,   126,   119,   134,
+     122,     7,   185,    49,     8,   156,   160,   157,   164,   165,
+     161,    16,   -10,   166,   109,   135,    29,   136,     3,   159,
+     134,   179,    17,     1,   176,   181,   112,     6,   177,   186,
+      11,   171,   176,   176,   175,   205,   187,   189,   136,   137,
+     200,    12,   115,   198,   126,   204,   206,    53,    54,    55,
+      13,   134,    56,   119,   138,   209,   139,   140,   116,    23,
+     137,   196,     3,    57,    33,   197,   188,    20,    19,   136,
+      21,    58,    59,   192,    60,   138,    22,   139,   140,   219,
+       5,    61,    26,     3,   202,   130,    25,    62,    27,    63,
+      64,   137,    28,    35,    36,    39,    53,    54,    55,    65,
+      33,    56,    66,    67,    38,    44,   138,    50,   139,   140,
+      52,    68,    57,   100,     3,    69,    70,    71,    99,    72,
+      58,    59,    73,    60,    74,   101,   106,   102,   107,   125,
+      61,   126,   108,   130,    75,   158,    62,   172,    63,    64,
+     103,   119,   162,   183,   180,   182,   181,   191,    65,   193,
+     194,    66,    67,   190,   195,   217,   140,   207,   212,   210,
+      68,   213,    51,    98,    69,    70,    71,   214,    72,   215,
+     216,   154,   218,    74,   199,   203,   153,    14,     0,   155,
+     124,   211,   201,    75
+};
 
-#define YYABORT  goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR  goto yyerrlab
+static const yytype_int16 yycheck[] =
+{
+     118,    73,     1,     5,    23,    53,    66,    20,     6,    27,
+      84,     7,    83,    92,    29,    94,    86,    86,    92,    31,
+      38,    86,    93,    38,    89,    95,    95,   109,    18,    19,
+     112,    27,    24,    23,    94,    47,    28,    49,    94,   111,
+      31,    54,    38,    86,    91,    91,    94,     0,    95,    95,
+      21,   123,    91,    91,   126,    46,    95,    95,    49,    71,
+     178,    92,    60,    85,    86,   183,   184,     9,    10,    11,
+      95,    31,    14,    92,    86,   193,    88,    89,    76,    29,
+      71,    91,    94,    25,    86,    95,   158,    70,    89,    49,
+      70,    33,    34,   165,    36,    86,    70,    88,    89,   217,
+      99,    43,    39,    94,    85,    86,    93,    49,    84,    51,
+      52,    71,     8,    24,    40,    90,     9,    10,    11,    61,
+      86,    14,    64,    65,    91,    86,    86,    90,    88,    89,
+      32,    73,    25,    67,    94,    77,    78,    79,    86,    81,
+      33,    34,    84,    36,    86,    94,    37,    94,    67,    94,
+      43,    86,    66,    86,    96,    53,    49,    86,    51,    52,
+      92,    92,    89,    83,    92,    95,    91,    12,    61,    12,
+      93,    64,    65,    97,    92,    12,    89,    94,    93,    89,
+      73,    93,    41,    46,    77,    78,    79,    93,    81,    93,
+      95,   107,    93,    86,   176,   181,   104,    10,    -1,   108,
+      99,   196,   180,    96
+};
 
-int
-YYPARSE_DECL()
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
 {
-    int yym, yyn, yystate;
-#if YYDEBUG
-    const char *yys;
+       0,    86,    99,    94,   152,   153,     0,    86,    89,   154,
+     155,    21,    92,    95,   154,     7,    27,    38,   100,    89,
+      70,    70,    70,    29,   101,    93,    39,    84,     8,    28,
+     102,   107,     5,    86,   110,    24,    40,   103,    91,    90,
+     104,   105,   106,   110,    86,   108,   109,   111,   144,   110,
+      90,   106,    32,     9,    10,    11,    14,    25,    33,    34,
+      36,    43,    49,    51,    52,    61,    64,    65,    73,    77,
+      78,    79,    81,    84,    86,    96,   112,   113,   114,   116,
+     119,   121,   122,   123,   124,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   140,   141,   145,   146,   108,    86,
+      67,    94,    94,    92,    94,   115,    37,    67,    66,    94,
+     125,    53,    94,   112,     6,    60,    76,   142,    84,    92,
+     135,    27,    38,   143,   152,    94,    86,   147,   148,   149,
+      86,   117,   118,   120,    31,    47,    49,    71,    86,    88,
+      89,   153,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   117,   125,   115,    95,   147,    53,   112,
+      95,   147,    89,   156,    18,    19,    23,   136,   137,   138,
+     139,   112,    86,   150,   151,   112,    91,    95,    20,    54,
+      92,    91,    95,    83,    83,    93,    95,    95,   112,    95,
+      97,    12,   112,    12,    93,    92,    91,    95,    85,   149,
+     156,   164,    85,   118,   156,    46,   156,    94,    23,   156,
+      89,   151,    93,    93,    93,    93,    95,    12,    93,   156
+};
 
-    if ((yys = getenv("YYDEBUG")) != 0)
-    {
-        yyn = *yys;
-        if (yyn >= '0' && yyn <= '9')
-            yydebug = yyn - '0';
-    }
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
 #endif
 
-    yynerrs = 0;
-    yyerrflag = 0;
-    yychar = YYEMPTY;
-    yystate = 0;
 
-#if YYPURE
-    memset(&yystack, 0, sizeof(yystack));
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 #endif
 
-    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
-    yystack.s_mark = yystack.s_base;
-    yystack.l_mark = yystack.l_base;
-    yystate = 0;
-    *yystack.s_mark = 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);
-        }
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
 #endif
-    }
-    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
-    {
+
+/* Enable debugging if requested.  */
 #if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: state %d, shifting to state %d\n",
-                    YYPREFIX, yystate, yytable[yyn]);
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
-        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-        {
-            goto yyoverflow;
-        }
-        yystate = yytable[yyn];
-        *++yystack.s_mark = yytable[yyn];
-        *++yystack.l_mark = yylval;
-        yychar = YYEMPTY;
-        if (yyerrflag > 0)  --yyerrflag;
-        goto yyloop;
-    }
-    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
     {
-        yyn = yytable[yyn];
-        goto yyreduce;
+      default:
+       break;
     }
-    if (yyerrflag) goto yyinrecovery;
-
-    yyerror("syntax error");
+}
 
-    goto yyerrlab;
 
-yyerrlab:
-    ++yynerrs;
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
-yyinrecovery:
-    if (yyerrflag < 3)
-    {
-        yyerrflag = 3;
-        for (;;)
-        {
-            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
-                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
-                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-                {
-                    goto yyoverflow;
-                }
-                yystate = yytable[yyn];
-                *++yystack.s_mark = yytable[yyn];
-                *++yystack.l_mark = yylval;
-                goto yyloop;
-            }
-            else
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: error recovery discarding state %d\n",
-                            YYPREFIX, *yystack.s_mark);
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
 #endif
-                if (yystack.s_mark <= yystack.s_base) goto yyabort;
-                --yystack.s_mark;
-                --yystack.l_mark;
-            }
-        }
-    }
-    else
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
     {
-        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;
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
     }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
 
-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 = yystack.l_mark[1-yym];
-    else
-        memset(&yyval, 0, sizeof yyval);
-    switch (yyn)
-    {
-case 1:
+#endif
+{
+
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+/* Line 1455 of yacc.c  */
 #line 241 "asn1parse.c"
-       {
+    {
                        checkundefined();
                }
-break;
-case 3:
+    break;
+
+  case 4:
+
+/* Line 1455 of yacc.c  */
 #line 248 "asn1parse.c"
-       { lex_error_message("implicit tagging is not supported"); }
-break;
-case 4:
+    { lex_error_message("implicit tagging is not supported"); }
+    break;
+
+  case 5:
+
+/* Line 1455 of yacc.c  */
 #line 250 "asn1parse.c"
-       { lex_error_message("automatic tagging is not supported"); }
-break;
-case 6:
+    { lex_error_message("automatic tagging is not supported"); }
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
 #line 255 "asn1parse.c"
-       { lex_error_message("no extensibility options supported"); }
-break;
-case 16:
+    { lex_error_message("no extensibility options supported"); }
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
 #line 276 "asn1parse.c"
-       {
+    {
                    struct string_list *sl;
-                   for(sl = yystack.l_mark[-3].sl; sl != NULL; sl = sl->next) {
+                   for(sl = (yyvsp[(1) - (4)].sl); sl != NULL; sl = sl->next) {
                        Symbol *s = addsym(sl->string);
                        s->stype = Stype;
                        gen_template_import(s);
                    }
-                   add_import(yystack.l_mark[-1].name);
+                   add_import((yyvsp[(3) - (4)].name));
                }
-break;
-case 17:
+    break;
+
+  case 18:
+
+/* Line 1455 of yacc.c  */
 #line 288 "asn1parse.c"
-       {
+    {
                    struct string_list *sl;
-                   for(sl = yystack.l_mark[-1].sl; sl != NULL; sl = sl->next)
+                   for(sl = (yyvsp[(2) - (3)].sl); sl != NULL; sl = sl->next)
                        add_export(sl->string);
                }
-break;
-case 24:
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
 #line 306 "asn1parse.c"
-       {
-                   yyval.sl = emalloc(sizeof(*yyval.sl));
-                   yyval.sl->string = yystack.l_mark[-2].name;
-                   yyval.sl->next = yystack.l_mark[0].sl;
+    {
+                   (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
+                   (yyval.sl)->string = (yyvsp[(1) - (3)].name);
+                   (yyval.sl)->next = (yyvsp[(3) - (3)].sl);
                }
-break;
-case 25:
+    break;
+
+  case 26:
+
+/* Line 1455 of yacc.c  */
 #line 312 "asn1parse.c"
-       {
-                   yyval.sl = emalloc(sizeof(*yyval.sl));
-                   yyval.sl->string = yystack.l_mark[0].name;
-                   yyval.sl->next = NULL;
+    {
+                   (yyval.sl) = emalloc(sizeof(*(yyval.sl)));
+                   (yyval.sl)->string = (yyvsp[(1) - (1)].name);
+                   (yyval.sl)->next = NULL;
                }
-break;
-case 26:
+    break;
+
+  case 27:
+
+/* Line 1455 of yacc.c  */
 #line 320 "asn1parse.c"
-       {
-                   Symbol *s = addsym (yystack.l_mark[-2].name);
+    {
+                   Symbol *s = addsym ((yyvsp[(1) - (3)].name));
                    s->stype = Stype;
-                   s->type = yystack.l_mark[0].type;
+                   s->type = (yyvsp[(3) - (3)].type);
                    fix_labels(s);
                    generate_type (s);
                }
-break;
-case 44:
+    break;
+
+  case 45:
+
+/* Line 1455 of yacc.c  */
 #line 351 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_Boolean,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_Boolean,
                                     TE_EXPLICIT, new_type(TBoolean));
                }
-break;
-case 45:
+    break;
+
+  case 46:
+
+/* Line 1455 of yacc.c  */
 #line 358 "asn1parse.c"
-       {
-                   if(yystack.l_mark[-3].value->type != integervalue)
+    {
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
                        lex_error_message("Non-integer used in first part of range");
-                   if(yystack.l_mark[-3].value->type != integervalue)
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
                        lex_error_message("Non-integer in second part of range");
-                   yyval.range = ecalloc(1, sizeof(*yyval.range));
-                   yyval.range->min = yystack.l_mark[-3].value->u.integervalue;
-                   yyval.range->max = yystack.l_mark[-1].value->u.integervalue;
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
                }
-break;
-case 46:
+    break;
+
+  case 47:
+
+/* Line 1455 of yacc.c  */
 #line 368 "asn1parse.c"
-       {
-                   if(yystack.l_mark[-3].value->type != integervalue)
+    {  
+                   if((yyvsp[(2) - (5)].value)->type != integervalue)
                        lex_error_message("Non-integer in first part of range");
-                   yyval.range = ecalloc(1, sizeof(*yyval.range));
-                   yyval.range->min = yystack.l_mark[-3].value->u.integervalue;
-                   yyval.range->max = yystack.l_mark[-3].value->u.integervalue - 1;
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (5)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(2) - (5)].value)->u.integervalue - 1;
                }
-break;
-case 47:
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
 #line 376 "asn1parse.c"
-       {
-                   if(yystack.l_mark[-1].value->type != integervalue)
+    {  
+                   if((yyvsp[(4) - (5)].value)->type != integervalue)
                        lex_error_message("Non-integer in second part of range");
-                   yyval.range = ecalloc(1, sizeof(*yyval.range));
-                   yyval.range->min = yystack.l_mark[-1].value->u.integervalue + 2;
-                   yyval.range->max = yystack.l_mark[-1].value->u.integervalue;
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(4) - (5)].value)->u.integervalue + 2;
+                   (yyval.range)->max = (yyvsp[(4) - (5)].value)->u.integervalue;
                }
-break;
-case 48:
+    break;
+
+  case 49:
+
+/* Line 1455 of yacc.c  */
 #line 384 "asn1parse.c"
-       {
-                   if(yystack.l_mark[-1].value->type != integervalue)
+    {
+                   if((yyvsp[(2) - (3)].value)->type != integervalue)
                        lex_error_message("Non-integer used in limit");
-                   yyval.range = ecalloc(1, sizeof(*yyval.range));
-                   yyval.range->min = yystack.l_mark[-1].value->u.integervalue;
-                   yyval.range->max = yystack.l_mark[-1].value->u.integervalue;
+                   (yyval.range) = ecalloc(1, sizeof(*(yyval.range)));
+                   (yyval.range)->min = (yyvsp[(2) - (3)].value)->u.integervalue;
+                   (yyval.range)->max = (yyvsp[(2) - (3)].value)->u.integervalue;
                }
-break;
-case 49:
+    break;
+
+  case 50:
+
+/* Line 1455 of yacc.c  */
 #line 395 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_Integer,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer,
                                     TE_EXPLICIT, new_type(TInteger));
                }
-break;
-case 50:
+    break;
+
+  case 51:
+
+/* Line 1455 of yacc.c  */
 #line 400 "asn1parse.c"
-       {
-                       yyval.type = new_type(TInteger);
-                       yyval.type->range = yystack.l_mark[0].range;
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, yyval.type);
+    {
+                       (yyval.type) = new_type(TInteger);
+                       (yyval.type)->range = (yyvsp[(2) - (2)].range);
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 51:
+    break;
+
+  case 52:
+
+/* Line 1455 of yacc.c  */
 #line 406 "asn1parse.c"
-       {
-                 yyval.type = new_type(TInteger);
-                 yyval.type->members = yystack.l_mark[-1].members;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TInteger);
+                 (yyval.type)->members = (yyvsp[(3) - (4)].members);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Integer, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 52:
+    break;
+
+  case 53:
+
+/* Line 1455 of yacc.c  */
 #line 414 "asn1parse.c"
-       {
-                       yyval.members = emalloc(sizeof(*yyval.members));
-                       ASN1_TAILQ_INIT(yyval.members);
-                       ASN1_TAILQ_INSERT_HEAD(yyval.members, yystack.l_mark[0].member, members);
+    {
+                       (yyval.members) = emalloc(sizeof(*(yyval.members)));
+                       ASN1_TAILQ_INIT((yyval.members));
+                       ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
                }
-break;
-case 53:
+    break;
+
+  case 54:
+
+/* Line 1455 of yacc.c  */
 #line 420 "asn1parse.c"
-       {
-                       ASN1_TAILQ_INSERT_TAIL(yystack.l_mark[-2].members, yystack.l_mark[0].member, members);
-                       yyval.members = yystack.l_mark[-2].members;
+    {
+                       ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
+                       (yyval.members) = (yyvsp[(1) - (3)].members);
                }
-break;
-case 54:
+    break;
+
+  case 55:
+
+/* Line 1455 of yacc.c  */
 #line 425 "asn1parse.c"
-       { yyval.members = yystack.l_mark[-2].members; }
-break;
-case 55:
+    { (yyval.members) = (yyvsp[(1) - (3)].members); }
+    break;
+
+  case 56:
+
+/* Line 1455 of yacc.c  */
 #line 429 "asn1parse.c"
-       {
-                       yyval.member = emalloc(sizeof(*yyval.member));
-                       yyval.member->name = yystack.l_mark[-3].name;
-                       yyval.member->gen_name = estrdup(yystack.l_mark[-3].name);
-                       output_name (yyval.member->gen_name);
-                       yyval.member->val = yystack.l_mark[-1].constant;
-                       yyval.member->optional = 0;
-                       yyval.member->ellipsis = 0;
-                       yyval.member->type = NULL;
-               }
-break;
-case 56:
+    {
+                       (yyval.member) = emalloc(sizeof(*(yyval.member)));
+                       (yyval.member)->name = (yyvsp[(1) - (4)].name);
+                       (yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name));
+                       output_name ((yyval.member)->gen_name);
+                       (yyval.member)->val = (yyvsp[(3) - (4)].constant);
+                       (yyval.member)->optional = 0;
+                       (yyval.member)->ellipsis = 0;
+                       (yyval.member)->type = NULL;
+               }
+    break;
+
+  case 57:
+
+/* Line 1455 of yacc.c  */
 #line 442 "asn1parse.c"
-       {
-                 yyval.type = new_type(TInteger);
-                 yyval.type->members = yystack.l_mark[-1].members;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Enumerated, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TInteger);
+                 (yyval.type)->members = (yyvsp[(3) - (4)].members);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Enumerated, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 58:
+    break;
+
+  case 59:
+
+/* Line 1455 of yacc.c  */
 #line 453 "asn1parse.c"
-       {
-                 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);
+    {
+                 (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:
+    break;
+
+  case 60:
+
+/* Line 1455 of yacc.c  */
 #line 460 "asn1parse.c"
-       {
-                 yyval.type = new_type(TBitString);
-                 yyval.type->members = yystack.l_mark[-1].members;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TBitString);
+                 (yyval.type)->members = (yyvsp[(4) - (5)].members);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_BitString, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 60:
+    break;
+
+  case 61:
+
+/* Line 1455 of yacc.c  */
 #line 468 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_OID,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_OID,
                                     TE_EXPLICIT, new_type(TOID));
                }
-break;
-case 61:
+    break;
+
+  case 62:
+
+/* Line 1455 of yacc.c  */
 #line 474 "asn1parse.c"
-       {
+    {
                    Type *t = new_type(TOctetString);
-                   t->range = yystack.l_mark[0].range;
-                   yyval.type = new_tag(ASN1_C_UNIV, UT_OctetString,
+                   t->range = (yyvsp[(3) - (3)].range);
+                   (yyval.type) = new_tag(ASN1_C_UNIV, UT_OctetString,
                                 TE_EXPLICIT, t);
                }
-break;
-case 62:
+    break;
+
+  case 63:
+
+/* Line 1455 of yacc.c  */
 #line 483 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_Null,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_Null,
                                     TE_EXPLICIT, new_type(TNull));
                }
-break;
-case 63:
+    break;
+
+  case 64:
+
+/* Line 1455 of yacc.c  */
 #line 490 "asn1parse.c"
-       { yyval.range = NULL; }
-break;
-case 64:
+    { (yyval.range) = NULL; }
+    break;
+
+  case 65:
+
+/* Line 1455 of yacc.c  */
 #line 492 "asn1parse.c"
-       { yyval.range = yystack.l_mark[0].range; }
-break;
-case 65:
+    { (yyval.range) = (yyvsp[(2) - (2)].range); }
+    break;
+
+  case 66:
+
+/* Line 1455 of yacc.c  */
 #line 497 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSequence);
-                 yyval.type->members = yystack.l_mark[-1].members;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TSequence);
+                 (yyval.type)->members = (yyvsp[(3) - (4)].members);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 66:
+    break;
+
+  case 67:
+
+/* Line 1455 of yacc.c  */
 #line 503 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSequence);
-                 yyval.type->members = NULL;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type);
+    {
+                 (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:
+    break;
+
+  case 68:
+
+/* Line 1455 of yacc.c  */
 #line 511 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSequenceOf);
-                 yyval.type->range = yystack.l_mark[-2].range;
-                 yyval.type->subtype = yystack.l_mark[0].type;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TSequenceOf);
+                 (yyval.type)->range = (yyvsp[(2) - (4)].range);
+                 (yyval.type)->subtype = (yyvsp[(4) - (4)].type);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Sequence, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 68:
+    break;
+
+  case 69:
+
+/* Line 1455 of yacc.c  */
 #line 520 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSet);
-                 yyval.type->members = yystack.l_mark[-1].members;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TSet);
+                 (yyval.type)->members = (yyvsp[(3) - (4)].members);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 69:
+    break;
+
+  case 70:
+
+/* Line 1455 of yacc.c  */
 #line 526 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSet);
-                 yyval.type->members = NULL;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type);
+    {
+                 (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:
+    break;
+
+  case 71:
+
+/* Line 1455 of yacc.c  */
 #line 534 "asn1parse.c"
-       {
-                 yyval.type = new_type(TSetOf);
-                 yyval.type->subtype = yystack.l_mark[0].type;
-                 yyval.type = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, yyval.type);
+    {
+                 (yyval.type) = new_type(TSetOf);
+                 (yyval.type)->subtype = (yyvsp[(3) - (3)].type);
+                 (yyval.type) = new_tag(ASN1_C_UNIV, UT_Set, TE_EXPLICIT, (yyval.type));
                }
-break;
-case 71:
+    break;
+
+  case 72:
+
+/* Line 1455 of yacc.c  */
 #line 542 "asn1parse.c"
-       {
-                 yyval.type = new_type(TChoice);
-                 yyval.type->members = yystack.l_mark[-1].members;
+    {
+                 (yyval.type) = new_type(TChoice);
+                 (yyval.type)->members = (yyvsp[(3) - (4)].members);
                }
-break;
-case 74:
+    break;
+
+  case 75:
+
+/* Line 1455 of yacc.c  */
 #line 553 "asn1parse.c"
-       {
-                 Symbol *s = addsym(yystack.l_mark[0].name);
-                 yyval.type = new_type(TType);
+    {
+                 Symbol *s = addsym((yyvsp[(1) - (1)].name));
+                 (yyval.type) = new_type(TType);
                  if(s->stype != Stype && s->stype != SUndefined)
-                   lex_error_message ("%s is not a type\n", yystack.l_mark[0].name);
+                   lex_error_message ("%s is not a type\n", (yyvsp[(1) - (1)].name));
                  else
-                   yyval.type->symbol = s;
+                   (yyval.type)->symbol = s;
                }
-break;
-case 75:
+    break;
+
+  case 76:
+
+/* Line 1455 of yacc.c  */
 #line 564 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_GeneralizedTime,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralizedTime,
                                     TE_EXPLICIT, new_type(TGeneralizedTime));
                }
-break;
-case 76:
+    break;
+
+  case 77:
+
+/* Line 1455 of yacc.c  */
 #line 569 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_UTCTime,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTCTime,
                                     TE_EXPLICIT, new_type(TUTCTime));
                }
-break;
-case 77:
+    break;
+
+  case 78:
+
+/* Line 1455 of yacc.c  */
 #line 576 "asn1parse.c"
-       {
+    {
                    /* 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) {
@@ -1227,433 +2223,824 @@ case 77:
                      }
                    */
                }
-break;
-case 78:
+    break;
+
+  case 79:
+
+/* Line 1455 of yacc.c  */
 #line 592 "asn1parse.c"
-       {
-                   yyval.constraint_spec = yystack.l_mark[-1].constraint_spec;
+    {
+                   (yyval.constraint_spec) = (yyvsp[(2) - (3)].constraint_spec);
                }
-break;
-case 82:
+    break;
+
+  case 83:
+
+/* Line 1455 of yacc.c  */
 #line 605 "asn1parse.c"
-       {
-                   yyval.constraint_spec = new_constraint_spec(CT_CONTENTS);
-                   yyval.constraint_spec->u.content.type = yystack.l_mark[0].type;
-                   yyval.constraint_spec->u.content.encoding = NULL;
+    {
+                   (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
+                   (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (2)].type);
+                   (yyval.constraint_spec)->u.content.encoding = NULL;
                }
-break;
-case 83:
+    break;
+
+  case 84:
+
+/* Line 1455 of yacc.c  */
 #line 611 "asn1parse.c"
-       {
-                   if (yystack.l_mark[0].value->type != objectidentifiervalue)
+    {
+                   if ((yyvsp[(3) - (3)].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 = yystack.l_mark[0].value;
+                   (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
+                   (yyval.constraint_spec)->u.content.type = NULL;
+                   (yyval.constraint_spec)->u.content.encoding = (yyvsp[(3) - (3)].value);
                }
-break;
-case 84:
+    break;
+
+  case 85:
+
+/* Line 1455 of yacc.c  */
 #line 619 "asn1parse.c"
-       {
-                   if (yystack.l_mark[0].value->type != objectidentifiervalue)
+    {
+                   if ((yyvsp[(5) - (5)].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 = yystack.l_mark[-3].type;
-                   yyval.constraint_spec->u.content.encoding = yystack.l_mark[0].value;
+                   (yyval.constraint_spec) = new_constraint_spec(CT_CONTENTS);
+                   (yyval.constraint_spec)->u.content.type = (yyvsp[(2) - (5)].type);
+                   (yyval.constraint_spec)->u.content.encoding = (yyvsp[(5) - (5)].value);
                }
-break;
-case 85:
+    break;
+
+  case 86:
+
+/* Line 1455 of yacc.c  */
 #line 629 "asn1parse.c"
-       {
-                   yyval.constraint_spec = new_constraint_spec(CT_USER);
+    {
+                   (yyval.constraint_spec) = new_constraint_spec(CT_USER);
                }
-break;
-case 86:
+    break;
+
+  case 87:
+
+/* Line 1455 of yacc.c  */
 #line 635 "asn1parse.c"
-       {
-                       yyval.type = new_type(TTag);
-                       yyval.type->tag = yystack.l_mark[-2].tag;
-                       yyval.type->tag.tagenv = yystack.l_mark[-1].constant;
-                       if(yystack.l_mark[0].type->type == TTag && yystack.l_mark[-1].constant == TE_IMPLICIT) {
-                               yyval.type->subtype = yystack.l_mark[0].type->subtype;
-                               free(yystack.l_mark[0].type);
+    {
+                       (yyval.type) = new_type(TTag);
+                       (yyval.type)->tag = (yyvsp[(1) - (3)].tag);
+                       (yyval.type)->tag.tagenv = (yyvsp[(2) - (3)].constant);
+                       if((yyvsp[(3) - (3)].type)->type == TTag && (yyvsp[(2) - (3)].constant) == TE_IMPLICIT) {
+                               (yyval.type)->subtype = (yyvsp[(3) - (3)].type)->subtype;
+                               free((yyvsp[(3) - (3)].type));
                        } else
-                               yyval.type->subtype = yystack.l_mark[0].type;
+                               (yyval.type)->subtype = (yyvsp[(3) - (3)].type);
                }
-break;
-case 87:
+    break;
+
+  case 88:
+
+/* Line 1455 of yacc.c  */
 #line 648 "asn1parse.c"
-       {
-                       yyval.tag.tagclass = yystack.l_mark[-2].constant;
-                       yyval.tag.tagvalue = yystack.l_mark[-1].constant;
-                       yyval.tag.tagenv = TE_EXPLICIT;
+    {
+                       (yyval.tag).tagclass = (yyvsp[(2) - (4)].constant);
+                       (yyval.tag).tagvalue = (yyvsp[(3) - (4)].constant);
+                       (yyval.tag).tagenv = TE_EXPLICIT;
                }
-break;
-case 88:
+    break;
+
+  case 89:
+
+/* Line 1455 of yacc.c  */
 #line 656 "asn1parse.c"
-       {
-                       yyval.constant = ASN1_C_CONTEXT;
+    {
+                       (yyval.constant) = ASN1_C_CONTEXT;
                }
-break;
-case 89:
+    break;
+
+  case 90:
+
+/* Line 1455 of yacc.c  */
 #line 660 "asn1parse.c"
-       {
-                       yyval.constant = ASN1_C_UNIV;
+    {
+                       (yyval.constant) = ASN1_C_UNIV;
                }
-break;
-case 90:
+    break;
+
+  case 91:
+
+/* Line 1455 of yacc.c  */
 #line 664 "asn1parse.c"
-       {
-                       yyval.constant = ASN1_C_APPL;
+    {
+                       (yyval.constant) = ASN1_C_APPL;
                }
-break;
-case 91:
+    break;
+
+  case 92:
+
+/* Line 1455 of yacc.c  */
 #line 668 "asn1parse.c"
-       {
-                       yyval.constant = ASN1_C_PRIVATE;
+    {
+                       (yyval.constant) = ASN1_C_PRIVATE;
                }
-break;
-case 92:
+    break;
+
+  case 93:
+
+/* Line 1455 of yacc.c  */
 #line 674 "asn1parse.c"
-       {
-                       yyval.constant = TE_EXPLICIT;
+    {
+                       (yyval.constant) = TE_EXPLICIT;
                }
-break;
-case 93:
+    break;
+
+  case 94:
+
+/* Line 1455 of yacc.c  */
 #line 678 "asn1parse.c"
-       {
-                       yyval.constant = TE_EXPLICIT;
+    {
+                       (yyval.constant) = TE_EXPLICIT;
                }
-break;
-case 94:
+    break;
+
+  case 95:
+
+/* Line 1455 of yacc.c  */
 #line 682 "asn1parse.c"
-       {
-                       yyval.constant = TE_IMPLICIT;
+    {
+                       (yyval.constant) = TE_IMPLICIT;
                }
-break;
-case 95:
+    break;
+
+  case 96:
+
+/* Line 1455 of yacc.c  */
 #line 689 "asn1parse.c"
-       {
+    {
                        Symbol *s;
-                       s = addsym (yystack.l_mark[-3].name);
+                       s = addsym ((yyvsp[(1) - (4)].name));
 
                        s->stype = SValue;
-                       s->value = yystack.l_mark[0].value;
+                       s->value = (yyvsp[(4) - (4)].value);
                        generate_constant (s);
                }
-break;
-case 97:
+    break;
+
+  case 98:
+
+/* Line 1455 of yacc.c  */
 #line 703 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_GeneralString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_GeneralString,
                                     TE_EXPLICIT, new_type(TGeneralString));
                }
-break;
-case 98:
+    break;
+
+  case 99:
+
+/* Line 1455 of yacc.c  */
 #line 708 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_TeletexString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_TeletexString,
                                     TE_EXPLICIT, new_type(TTeletexString));
                }
-break;
-case 99:
+    break;
+
+  case 100:
+
+/* Line 1455 of yacc.c  */
 #line 713 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_UTF8String,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_UTF8String,
                                     TE_EXPLICIT, new_type(TUTF8String));
                }
-break;
-case 100:
+    break;
+
+  case 101:
+
+/* Line 1455 of yacc.c  */
 #line 718 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_PrintableString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_PrintableString,
                                     TE_EXPLICIT, new_type(TPrintableString));
                }
-break;
-case 101:
+    break;
+
+  case 102:
+
+/* Line 1455 of yacc.c  */
 #line 723 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_VisibleString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_VisibleString,
                                     TE_EXPLICIT, new_type(TVisibleString));
                }
-break;
-case 102:
+    break;
+
+  case 103:
+
+/* Line 1455 of yacc.c  */
 #line 728 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_IA5String,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_IA5String,
                                     TE_EXPLICIT, new_type(TIA5String));
                }
-break;
-case 103:
+    break;
+
+  case 104:
+
+/* Line 1455 of yacc.c  */
 #line 733 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_BMPString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_BMPString,
                                     TE_EXPLICIT, new_type(TBMPString));
                }
-break;
-case 104:
+    break;
+
+  case 105:
+
+/* Line 1455 of yacc.c  */
 #line 738 "asn1parse.c"
-       {
-                       yyval.type = new_tag(ASN1_C_UNIV, UT_UniversalString,
+    {
+                       (yyval.type) = new_tag(ASN1_C_UNIV, UT_UniversalString,
                                     TE_EXPLICIT, new_type(TUniversalString));
                }
-break;
-case 105:
+    break;
+
+  case 106:
+
+/* Line 1455 of yacc.c  */
 #line 746 "asn1parse.c"
-       {
-                       yyval.members = emalloc(sizeof(*yyval.members));
-                       ASN1_TAILQ_INIT(yyval.members);
-                       ASN1_TAILQ_INSERT_HEAD(yyval.members, yystack.l_mark[0].member, members);
+    {
+                       (yyval.members) = emalloc(sizeof(*(yyval.members)));
+                       ASN1_TAILQ_INIT((yyval.members));
+                       ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
                }
-break;
-case 106:
+    break;
+
+  case 107:
+
+/* Line 1455 of yacc.c  */
 #line 752 "asn1parse.c"
-       {
-                       ASN1_TAILQ_INSERT_TAIL(yystack.l_mark[-2].members, yystack.l_mark[0].member, members);
-                       yyval.members = yystack.l_mark[-2].members;
+    {
+                       ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
+                       (yyval.members) = (yyvsp[(1) - (3)].members);
                }
-break;
-case 107:
+    break;
+
+  case 108:
+
+/* Line 1455 of yacc.c  */
 #line 757 "asn1parse.c"
-       {
+    {
                        struct member *m = ecalloc(1, sizeof(*m));
                        m->name = estrdup("...");
                        m->gen_name = estrdup("asn1_ellipsis");
                        m->ellipsis = 1;
-                       ASN1_TAILQ_INSERT_TAIL(yystack.l_mark[-2].members, m, members);
-                       yyval.members = yystack.l_mark[-2].members;
+                       ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), m, members);
+                       (yyval.members) = (yyvsp[(1) - (3)].members);
                }
-break;
-case 108:
+    break;
+
+  case 109:
+
+/* Line 1455 of yacc.c  */
 #line 768 "asn1parse.c"
-       {
-                 yyval.member = emalloc(sizeof(*yyval.member));
-                 yyval.member->name = yystack.l_mark[-1].name;
-                 yyval.member->gen_name = estrdup(yystack.l_mark[-1].name);
-                 output_name (yyval.member->gen_name);
-                 yyval.member->type = yystack.l_mark[0].type;
-                 yyval.member->ellipsis = 0;
-               }
-break;
-case 109:
+    {
+                 (yyval.member) = emalloc(sizeof(*(yyval.member)));
+                 (yyval.member)->name = (yyvsp[(1) - (2)].name);
+                 (yyval.member)->gen_name = estrdup((yyvsp[(1) - (2)].name));
+                 output_name ((yyval.member)->gen_name);
+                 (yyval.member)->type = (yyvsp[(2) - (2)].type);
+                 (yyval.member)->ellipsis = 0;
+               }
+    break;
+
+  case 110:
+
+/* Line 1455 of yacc.c  */
 #line 779 "asn1parse.c"
-       {
-                       yyval.member = yystack.l_mark[0].member;
-                       yyval.member->optional = 0;
-                       yyval.member->defval = NULL;
+    {
+                       (yyval.member) = (yyvsp[(1) - (1)].member);
+                       (yyval.member)->optional = 0;
+                       (yyval.member)->defval = NULL;
                }
-break;
-case 110:
+    break;
+
+  case 111:
+
+/* Line 1455 of yacc.c  */
 #line 785 "asn1parse.c"
-       {
-                       yyval.member = yystack.l_mark[-1].member;
-                       yyval.member->optional = 1;
-                       yyval.member->defval = NULL;
+    {
+                       (yyval.member) = (yyvsp[(1) - (2)].member);
+                       (yyval.member)->optional = 1;
+                       (yyval.member)->defval = NULL;
                }
-break;
-case 111:
+    break;
+
+  case 112:
+
+/* Line 1455 of yacc.c  */
 #line 791 "asn1parse.c"
-       {
-                       yyval.member = yystack.l_mark[-2].member;
-                       yyval.member->optional = 0;
-                       yyval.member->defval = yystack.l_mark[0].value;
+    {
+                       (yyval.member) = (yyvsp[(1) - (3)].member);
+                       (yyval.member)->optional = 0;
+                       (yyval.member)->defval = (yyvsp[(3) - (3)].value);
                }
-break;
-case 112:
+    break;
+
+  case 113:
+
+/* Line 1455 of yacc.c  */
 #line 799 "asn1parse.c"
-       {
-                       yyval.members = emalloc(sizeof(*yyval.members));
-                       ASN1_TAILQ_INIT(yyval.members);
-                       ASN1_TAILQ_INSERT_HEAD(yyval.members, yystack.l_mark[0].member, members);
+    {
+                       (yyval.members) = emalloc(sizeof(*(yyval.members)));
+                       ASN1_TAILQ_INIT((yyval.members));
+                       ASN1_TAILQ_INSERT_HEAD((yyval.members), (yyvsp[(1) - (1)].member), members);
                }
-break;
-case 113:
+    break;
+
+  case 114:
+
+/* Line 1455 of yacc.c  */
 #line 805 "asn1parse.c"
-       {
-                       ASN1_TAILQ_INSERT_TAIL(yystack.l_mark[-2].members, yystack.l_mark[0].member, members);
-                       yyval.members = yystack.l_mark[-2].members;
+    {
+                       ASN1_TAILQ_INSERT_TAIL((yyvsp[(1) - (3)].members), (yyvsp[(3) - (3)].member), members);
+                       (yyval.members) = (yyvsp[(1) - (3)].members);
                }
-break;
-case 114:
+    break;
+
+  case 115:
+
+/* Line 1455 of yacc.c  */
 #line 812 "asn1parse.c"
-       {
-                 yyval.member = emalloc(sizeof(*yyval.member));
-                 yyval.member->name = yystack.l_mark[-3].name;
-                 yyval.member->gen_name = estrdup(yystack.l_mark[-3].name);
-                 output_name (yyval.member->gen_name);
-                 yyval.member->val = yystack.l_mark[-1].constant;
-                 yyval.member->optional = 0;
-                 yyval.member->ellipsis = 0;
-                 yyval.member->type = NULL;
-               }
-break;
-case 116:
+    {
+                 (yyval.member) = emalloc(sizeof(*(yyval.member)));
+                 (yyval.member)->name = (yyvsp[(1) - (4)].name);
+                 (yyval.member)->gen_name = estrdup((yyvsp[(1) - (4)].name));
+                 output_name ((yyval.member)->gen_name);
+                 (yyval.member)->val = (yyvsp[(3) - (4)].constant);
+                 (yyval.member)->optional = 0;
+                 (yyval.member)->ellipsis = 0;
+                 (yyval.member)->type = NULL;
+               }
+    break;
+
+  case 117:
+
+/* Line 1455 of yacc.c  */
 #line 825 "asn1parse.c"
-       { yyval.objid = NULL; }
-break;
-case 117:
+    { (yyval.objid) = NULL; }
+    break;
+
+  case 118:
+
+/* Line 1455 of yacc.c  */
 #line 829 "asn1parse.c"
-       {
-                       yyval.objid = yystack.l_mark[-1].objid;
+    {
+                       (yyval.objid) = (yyvsp[(2) - (3)].objid);
                }
-break;
-case 118:
+    break;
+
+  case 119:
+
+/* Line 1455 of yacc.c  */
 #line 835 "asn1parse.c"
-       {
-                       yyval.objid = NULL;
+    {
+                       (yyval.objid) = NULL;
                }
-break;
-case 119:
+    break;
+
+  case 120:
+
+/* Line 1455 of yacc.c  */
 #line 839 "asn1parse.c"
-       {
-                       if (yystack.l_mark[0].objid) {
-                               yyval.objid = yystack.l_mark[0].objid;
-                               add_oid_to_tail(yystack.l_mark[0].objid, yystack.l_mark[-1].objid);
+    {
+                       if ((yyvsp[(2) - (2)].objid)) {
+                               (yyval.objid) = (yyvsp[(2) - (2)].objid);
+                               add_oid_to_tail((yyvsp[(2) - (2)].objid), (yyvsp[(1) - (2)].objid));
                        } else {
-                               yyval.objid = yystack.l_mark[-1].objid;
+                               (yyval.objid) = (yyvsp[(1) - (2)].objid);
                        }
                }
-break;
-case 120:
+    break;
+
+  case 121:
+
+/* Line 1455 of yacc.c  */
 #line 850 "asn1parse.c"
-       {
-                       yyval.objid = new_objid(yystack.l_mark[-3].name, yystack.l_mark[-1].constant);
+    {
+                       (yyval.objid) = new_objid((yyvsp[(1) - (4)].name), (yyvsp[(3) - (4)].constant));
                }
-break;
-case 121:
+    break;
+
+  case 122:
+
+/* Line 1455 of yacc.c  */
 #line 854 "asn1parse.c"
-       {
-                   Symbol *s = addsym(yystack.l_mark[0].name);
+    {
+                   Symbol *s = addsym((yyvsp[(1) - (1)].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;
+                   (yyval.objid) = s->value->u.objectidentifiervalue;
                }
-break;
-case 122:
+    break;
+
+  case 123:
+
+/* Line 1455 of yacc.c  */
 #line 865 "asn1parse.c"
-       {
-                   yyval.objid = new_objid(NULL, yystack.l_mark[0].constant);
+    {
+                   (yyval.objid) = new_objid(NULL, (yyvsp[(1) - (1)].constant));
                }
-break;
-case 132:
+    break;
+
+  case 133:
+
+/* Line 1455 of yacc.c  */
 #line 888 "asn1parse.c"
-       {
-                       Symbol *s = addsym(yystack.l_mark[0].name);
+    {
+                       Symbol *s = addsym((yyvsp[(1) - (1)].name));
                        if(s->stype != SValue)
                                lex_error_message ("%s is not a value\n",
                                                s->name);
                        else
-                               yyval.value = s->value;
+                               (yyval.value) = s->value;
                }
-break;
-case 133:
+    break;
+
+  case 134:
+
+/* Line 1455 of yacc.c  */
 #line 899 "asn1parse.c"
-       {
-                       yyval.value = emalloc(sizeof(*yyval.value));
-                       yyval.value->type = stringvalue;
-                       yyval.value->u.stringvalue = yystack.l_mark[0].name;
+    {
+                       (yyval.value) = emalloc(sizeof(*(yyval.value)));
+                       (yyval.value)->type = stringvalue;
+                       (yyval.value)->u.stringvalue = (yyvsp[(1) - (1)].name);
                }
-break;
-case 134:
+    break;
+
+  case 135:
+
+/* Line 1455 of yacc.c  */
 #line 907 "asn1parse.c"
-       {
-                       yyval.value = emalloc(sizeof(*yyval.value));
-                       yyval.value->type = booleanvalue;
-                       yyval.value->u.booleanvalue = 0;
+    {
+                       (yyval.value) = emalloc(sizeof(*(yyval.value)));
+                       (yyval.value)->type = booleanvalue;
+                       (yyval.value)->u.booleanvalue = 0;
                }
-break;
-case 135:
+    break;
+
+  case 136:
+
+/* Line 1455 of yacc.c  */
 #line 913 "asn1parse.c"
-       {
-                       yyval.value = emalloc(sizeof(*yyval.value));
-                       yyval.value->type = booleanvalue;
-                       yyval.value->u.booleanvalue = 0;
+    {
+                       (yyval.value) = emalloc(sizeof(*(yyval.value)));
+                       (yyval.value)->type = booleanvalue;
+                       (yyval.value)->u.booleanvalue = 0;
                }
-break;
-case 136:
+    break;
+
+  case 137:
+
+/* Line 1455 of yacc.c  */
 #line 921 "asn1parse.c"
-       {
-                       yyval.value = emalloc(sizeof(*yyval.value));
-                       yyval.value->type = integervalue;
-                       yyval.value->u.integervalue = yystack.l_mark[0].constant;
+    {
+                       (yyval.value) = emalloc(sizeof(*(yyval.value)));
+                       (yyval.value)->type = integervalue;
+                       (yyval.value)->u.integervalue = (yyvsp[(1) - (1)].constant);
                }
-break;
-case 138:
+    break;
+
+  case 139:
+
+/* Line 1455 of yacc.c  */
 #line 932 "asn1parse.c"
-       {
+    {
                }
-break;
-case 139:
+    break;
+
+  case 140:
+
+/* Line 1455 of yacc.c  */
 #line 937 "asn1parse.c"
-       {
-                       yyval.value = emalloc(sizeof(*yyval.value));
-                       yyval.value->type = objectidentifiervalue;
-                       yyval.value->u.objectidentifiervalue = yystack.l_mark[0].objid;
+    {
+                       (yyval.value) = emalloc(sizeof(*(yyval.value)));
+                       (yyval.value)->type = objectidentifiervalue;
+                       (yyval.value)->u.objectidentifiervalue = (yyvsp[(1) - (1)].objid);
                }
-break;
-#line 1598 "asn1parse.c"
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 2740 "asn1parse.c"
+      default: break;
     }
-    yystack.s_mark -= yym;
-    yystate = *yystack.s_mark;
-    yystack.l_mark -= yym;
-    yym = yylhs[yyn];
-    if (yystate == 0 && yym == 0)
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
     {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
-        yystate = YYFINAL;
-        *++yystack.s_mark = YYFINAL;
-        *++yystack.l_mark = 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);
-            }
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
 #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, *yystack.s_mark, yystate);
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
 #endif
-    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
     {
-        goto yyoverflow;
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
     }
-    *++yystack.s_mark = (short) yystate;
-    *++yystack.l_mark = yyval;
-    goto yyloop;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+/* Line 1675 of yacc.c  */
+#line 944 "asn1parse.c"
+
+
+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;
 
-yyoverflow:
-    yyerror("yacc stack overflow");
+    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);
+    }
+}
 
-yyabort:
-    yyfreestack(&yystack);
-    return (1);
+static void fix_labels2(Type *t, const char *prefix)
+{
+    for(; t; t = t->subtype)
+       fix_labels1(t->members, prefix);
+}
 
-yyaccept:
-    yyfreestack(&yystack);
-    return (0);
+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);
 }
+
index 9e526403b2bffa7f0ddb8483a034f53645c173cd..a7a27e7c0a17fb632c4b8cf5c657ef85a1103061 100644 (file)
-#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 {
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kw_ABSENT = 258,
+     kw_ABSTRACT_SYNTAX = 259,
+     kw_ALL = 260,
+     kw_APPLICATION = 261,
+     kw_AUTOMATIC = 262,
+     kw_BEGIN = 263,
+     kw_BIT = 264,
+     kw_BMPString = 265,
+     kw_BOOLEAN = 266,
+     kw_BY = 267,
+     kw_CHARACTER = 268,
+     kw_CHOICE = 269,
+     kw_CLASS = 270,
+     kw_COMPONENT = 271,
+     kw_COMPONENTS = 272,
+     kw_CONSTRAINED = 273,
+     kw_CONTAINING = 274,
+     kw_DEFAULT = 275,
+     kw_DEFINITIONS = 276,
+     kw_EMBEDDED = 277,
+     kw_ENCODED = 278,
+     kw_END = 279,
+     kw_ENUMERATED = 280,
+     kw_EXCEPT = 281,
+     kw_EXPLICIT = 282,
+     kw_EXPORTS = 283,
+     kw_EXTENSIBILITY = 284,
+     kw_EXTERNAL = 285,
+     kw_FALSE = 286,
+     kw_FROM = 287,
+     kw_GeneralString = 288,
+     kw_GeneralizedTime = 289,
+     kw_GraphicString = 290,
+     kw_IA5String = 291,
+     kw_IDENTIFIER = 292,
+     kw_IMPLICIT = 293,
+     kw_IMPLIED = 294,
+     kw_IMPORTS = 295,
+     kw_INCLUDES = 296,
+     kw_INSTANCE = 297,
+     kw_INTEGER = 298,
+     kw_INTERSECTION = 299,
+     kw_ISO646String = 300,
+     kw_MAX = 301,
+     kw_MIN = 302,
+     kw_MINUS_INFINITY = 303,
+     kw_NULL = 304,
+     kw_NumericString = 305,
+     kw_OBJECT = 306,
+     kw_OCTET = 307,
+     kw_OF = 308,
+     kw_OPTIONAL = 309,
+     kw_ObjectDescriptor = 310,
+     kw_PATTERN = 311,
+     kw_PDV = 312,
+     kw_PLUS_INFINITY = 313,
+     kw_PRESENT = 314,
+     kw_PRIVATE = 315,
+     kw_PrintableString = 316,
+     kw_REAL = 317,
+     kw_RELATIVE_OID = 318,
+     kw_SEQUENCE = 319,
+     kw_SET = 320,
+     kw_SIZE = 321,
+     kw_STRING = 322,
+     kw_SYNTAX = 323,
+     kw_T61String = 324,
+     kw_TAGS = 325,
+     kw_TRUE = 326,
+     kw_TYPE_IDENTIFIER = 327,
+     kw_TeletexString = 328,
+     kw_UNION = 329,
+     kw_UNIQUE = 330,
+     kw_UNIVERSAL = 331,
+     kw_UTCTime = 332,
+     kw_UTF8String = 333,
+     kw_UniversalString = 334,
+     kw_VideotexString = 335,
+     kw_VisibleString = 336,
+     kw_WITH = 337,
+     RANGE = 338,
+     EEQUAL = 339,
+     ELLIPSIS = 340,
+     IDENTIFIER = 341,
+     referencename = 342,
+     STRING = 343,
+     NUMBER = 344
+   };
+#endif
+/* Tokens.  */
+#define kw_ABSENT 258
+#define kw_ABSTRACT_SYNTAX 259
+#define kw_ALL 260
+#define kw_APPLICATION 261
+#define kw_AUTOMATIC 262
+#define kw_BEGIN 263
+#define kw_BIT 264
+#define kw_BMPString 265
+#define kw_BOOLEAN 266
+#define kw_BY 267
+#define kw_CHARACTER 268
+#define kw_CHOICE 269
+#define kw_CLASS 270
+#define kw_COMPONENT 271
+#define kw_COMPONENTS 272
+#define kw_CONSTRAINED 273
+#define kw_CONTAINING 274
+#define kw_DEFAULT 275
+#define kw_DEFINITIONS 276
+#define kw_EMBEDDED 277
+#define kw_ENCODED 278
+#define kw_END 279
+#define kw_ENUMERATED 280
+#define kw_EXCEPT 281
+#define kw_EXPLICIT 282
+#define kw_EXPORTS 283
+#define kw_EXTENSIBILITY 284
+#define kw_EXTERNAL 285
+#define kw_FALSE 286
+#define kw_FROM 287
+#define kw_GeneralString 288
+#define kw_GeneralizedTime 289
+#define kw_GraphicString 290
+#define kw_IA5String 291
+#define kw_IDENTIFIER 292
+#define kw_IMPLICIT 293
+#define kw_IMPLIED 294
+#define kw_IMPORTS 295
+#define kw_INCLUDES 296
+#define kw_INSTANCE 297
+#define kw_INTEGER 298
+#define kw_INTERSECTION 299
+#define kw_ISO646String 300
+#define kw_MAX 301
+#define kw_MIN 302
+#define kw_MINUS_INFINITY 303
+#define kw_NULL 304
+#define kw_NumericString 305
+#define kw_OBJECT 306
+#define kw_OCTET 307
+#define kw_OF 308
+#define kw_OPTIONAL 309
+#define kw_ObjectDescriptor 310
+#define kw_PATTERN 311
+#define kw_PDV 312
+#define kw_PLUS_INFINITY 313
+#define kw_PRESENT 314
+#define kw_PRIVATE 315
+#define kw_PrintableString 316
+#define kw_REAL 317
+#define kw_RELATIVE_OID 318
+#define kw_SEQUENCE 319
+#define kw_SET 320
+#define kw_SIZE 321
+#define kw_STRING 322
+#define kw_SYNTAX 323
+#define kw_T61String 324
+#define kw_TAGS 325
+#define kw_TRUE 326
+#define kw_TYPE_IDENTIFIER 327
+#define kw_TeletexString 328
+#define kw_UNION 329
+#define kw_UNIQUE 330
+#define kw_UNIVERSAL 331
+#define kw_UTCTime 332
+#define kw_UTF8String 333
+#define kw_UniversalString 334
+#define kw_VideotexString 335
+#define kw_VisibleString 336
+#define kw_WITH 337
+#define RANGE 338
+#define EEQUAL 339
+#define ELLIPSIS 340
+#define IDENTIFIER 341
+#define referencename 342
+#define STRING 343
+#define NUMBER 344
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 1676 of yacc.c  */
+#line 71 "asn1parse.c"
+
     int constant;
     struct value *value;
     struct range *range;
@@ -98,5 +239,17 @@ typedef union {
     struct tagtype tag;
     struct memhead *members;
     struct constraint_spec *constraint_spec;
+
+
+
+/* Line 1676 of yacc.c  */
+#line 247 "asn1parse.c"
 } YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
 extern YYSTYPE yylval;
+
+
index b9a566de7b4df0b95d32e813772d27e64183659a..78cb5a3b84c4a25c5367e0b9b498fb803a76b733 100644 (file)
@@ -172,6 +172,7 @@ PADATA-TYPE ::= INTEGER {
        KRB5-PADATA-EPAK-AS-REP(146),
        KRB5-PADATA-PKINIT-KX(147),             -- krb-wg-anon
        KRB5-PADATA-PKU2U-NAME(148),            -- zhu-pku2u
+       KRB5-PADATA-REQ-ENC-PA-REP(149),        --
        KRB5-PADATA-SUPPORTED-ETYPES(165)       -- MS-KILE
 }
 
@@ -318,7 +319,8 @@ TicketFlags ::= BIT STRING {
        hw-authent(11),
        transited-policy-checked(12),
        ok-as-delegate(13),
-       anonymous(14)
+       anonymous(14),
+       enc-pa-rep(15)
 }
 
 KDCOptions ::= BIT STRING {
index 067ce30a6158ee99305fe6d8c14c489e715833dd..12c71b7e2eca716ccc1fdb3acda1b51165d46384 100644 (file)
@@ -54,7 +54,6 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -85,6 +84,8 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -141,7 +142,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -848,7 +857,7 @@ static unsigned lineno = 1;
 static void unterminated(const char *, unsigned);
 
 /* This is for broken old lexes (solaris 10 and hpux) */
-#line 851 "lex.c"
+#line 860 "lex.c"
 
 #define INITIAL 0
 
@@ -929,7 +938,12 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -948,7 +962,7 @@ static int input (void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               unsigned n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -1032,7 +1046,7 @@ YY_DECL
     
 #line 68 "lex.l"
 
-#line 1035 "lex.c"
+#line 1049 "lex.c"
 
        if ( !(yy_init) )
                {
@@ -1701,7 +1715,7 @@ YY_RULE_SETUP
 #line 274 "lex.l"
 ECHO;
        YY_BREAK
-#line 1704 "lex.c"
+#line 1718 "lex.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2459,8 +2473,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
index e3c13a047e1279f2fc97057aca57daa560a8b365..76973d6229f25a1ff34a5cf4527ba4b771c33eb5 100644 (file)
@@ -54,7 +54,6 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -85,6 +84,8 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -141,7 +142,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -527,7 +536,7 @@ static int getstring(void);
 
 #undef ECHO
 
-#line 530 "lex.c"
+#line 539 "lex.c"
 
 #define INITIAL 0
 
@@ -606,7 +615,12 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -625,7 +639,7 @@ static int input (void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               unsigned n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -709,7 +723,7 @@ YY_DECL
     
 #line 58 "lex.l"
 
-#line 712 "lex.c"
+#line 726 "lex.c"
 
        if ( !(yy_init) )
                {
@@ -873,7 +887,7 @@ YY_RULE_SETUP
 #line 74 "lex.l"
 ECHO;
        YY_BREAK
-#line 876 "lex.c"
+#line 890 "lex.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1594,8 +1608,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
index b6f5b97f04c878a25abaf7cf453d7d046d24177c..1c104812b79f55d58df1b33a9ac9081f82b36e4f 100644 (file)
@@ -1,37 +1,75 @@
-#ifndef lint
-static const char yysccsid[] = "@(#)yaccpar    1.9 (Berkeley) 02/21/93";
-#endif
 
-#include <stdlib.h>
-#include <string.h>
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYPATCH 20100216
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#define YYEMPTY        (-1)
-#define yyclearin      (yychar = YYEMPTY)
-#define yyerrok        (yyerrflag = 0)
-#define YYRECOVERING() (yyerrflag != 0)
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
 
-#define YYPREFIX "yy"
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
 
-/* compatibility with bison */
-#ifdef YYPARSE_PARAM
-/* compatibility with FreeBSD */
-#ifdef YYPARSE_PARAM_TYPE
-#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
-#else
-#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
-#endif
-#else
-#define YYPARSE_DECL() yyparse(void)
-#endif /* YYPARSE_PARAM */
 
-extern int YYPARSE_DECL();
 
-#line 2 "parse.c"
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 1 "parse.c"
+
 /*
  * Copyright (c) 1998 - 2000 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
@@ -82,470 +120,1350 @@ extern char *yytext;
 #define YYMALLOC malloc
 #define YYFREE free
 
+
+
+/* Line 189 of yacc.c  */
+#line 127 "parse.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ET = 258,
+     INDEX = 259,
+     PREFIX = 260,
+     EC = 261,
+     ID = 262,
+     END = 263,
+     STRING = 264,
+     NUMBER = 265
+   };
+#endif
+/* Tokens.  */
+#define ET 258
+#define INDEX 259
+#define PREFIX 260
+#define EC 261
+#define ID 262
+#define END 263
+#define STRING 264
+#define NUMBER 265
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
 #line 54 "parse.c"
-typedef union {
+
   char *string;
   int number;
+
+
+
+/* Line 214 of yacc.c  */
+#line 190 "parse.c"
 } YYSTYPE;
-#line 90 "parse.c"
-#define ET 257
-#define INDEX 258
-#define PREFIX 259
-#define EC 260
-#define ID 261
-#define END 262
-#define STRING 263
-#define NUMBER 264
-#define YYERRCODE 256
-static const short yylhs[] = {                           -1,
-    0,    0,    1,    1,    3,    4,    4,    2,    2,    5,
-    5,    5,    5,    5,
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 202 "parse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
 };
-static const short yylen[] = {                            2,
-    0,    2,    2,    1,    2,    2,    3,    1,    2,    2,
-    2,    1,    4,    1,
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  9
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   23
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  12
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  7
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  15
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  24
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   265
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    11,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10
 };
-static const short yydefred[] = {                         0,
-    0,    0,    0,    0,    0,    4,    0,    5,    0,    0,
-    0,   14,    0,    8,    3,    7,   10,   11,    0,    9,
-    0,   13,
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     4,     7,    10,    12,    15,    18,    22,
+      24,    27,    30,    33,    35,    40
 };
-static const short yydgoto[] = {                          3,
-    4,   13,    5,    6,   14,
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      13,     0,    -1,    -1,    14,    17,    -1,    15,    16,    -1,
+      16,    -1,     7,     9,    -1,     3,     9,    -1,     3,     9,
+       9,    -1,    18,    -1,    17,    18,    -1,     4,    10,    -1,
+       5,     9,    -1,     5,    -1,     6,     9,    11,     9,    -1,
+       8,    -1
 };
-static const short yysindex[] = {                      -247,
- -263, -258,    0, -256, -245,    0, -250,    0, -249, -246,
- -244,    0, -256,    0,    0,    0,    0,    0,  -28,    0,
- -243,    0,
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    65,    65,    66,    69,    70,    73,    79,    85,    94,
+      95,    98,   102,   110,   117,   137
 };
-static const short yyrindex[] = {                        18,
-    0,    0,    0,    0,    0,    0, -251,    0,    0,    1,
-    0,    0,   21,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "ET", "INDEX", "PREFIX", "EC", "ID",
+  "END", "STRING", "NUMBER", "','", "$accept", "file", "header", "id",
+  "et", "statements", "statement", 0
 };
-static const short yygindex[] = {                         0,
-    0,    0,    0,   17,   10,
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,    44
 };
-#define YYTABLESIZE 263
-static const short yytable[] = {                          7,
-   12,    9,   10,   11,    8,   12,    6,    6,    6,    1,
-    6,    1,   16,    2,   17,   21,   18,    1,   19,   22,
-    2,   15,   20,    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,   12,   12,
-   12,    0,   12,
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    12,    13,    13,    14,    14,    15,    16,    16,    17,
+      17,    18,    18,    18,    18,    18
 };
-static const short yycheck[] = {                        263,
-    0,  258,  259,  260,  263,  262,  258,  259,  260,  257,
-  262,  257,  263,  261,  264,   44,  263,    0,  263,  263,
-    0,    5,   13,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  258,  259,
-  260,   -1,  262,
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     0,     2,     2,     1,     2,     2,     3,     1,
+       2,     2,     2,     1,     4,     1
 };
-#define YYFINAL 3
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 264
-#if YYDEBUG
-static const 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,0,0,0,0,0,0,0,"ET","INDEX","PREFIX","EC",
-"ID","END","STRING","NUMBER",
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       2,     0,     0,     0,     0,     0,     5,     7,     6,     1,
+       0,    13,     0,    15,     3,     9,     4,     8,    11,    12,
+       0,    10,     0,    14
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     3,     4,     5,     6,    14,    15
 };
-static const char *yyrule[] = {
-"$accept : file",
-"file :",
-"file : header statements",
-"header : id et",
-"header : et",
-"id : ID STRING",
-"et : ET STRING",
-"et : ET STRING STRING",
-"statements : statement",
-"statements : statements statement",
-"statement : INDEX NUMBER",
-"statement : PREFIX STRING",
-"statement : PREFIX",
-"statement : EC STRING ',' STRING",
-"statement : END",
 
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -5
+static const yytype_int8 yypact[] =
+{
+       0,    -3,    -1,     5,    -4,     6,    -5,     1,    -5,    -5,
+       2,     4,     7,    -5,    -4,    -5,    -5,    -5,    -5,    -5,
+       3,    -5,     8,    -5
 };
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+      -5,    -5,    -5,    -5,    10,    -5,     9
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+      10,    11,    12,     1,    13,     9,     7,     2,     8,     1,
+      17,     0,    18,    19,    22,    16,    20,    23,     0,     0,
+       0,     0,     0,    21
+};
+
+static const yytype_int8 yycheck[] =
+{
+       4,     5,     6,     3,     8,     0,     9,     7,     9,     3,
+       9,    -1,    10,     9,    11,     5,     9,     9,    -1,    -1,
+      -1,    -1,    -1,    14
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     3,     7,    13,    14,    15,    16,     9,     9,     0,
+       4,     5,     6,     8,    17,    18,    16,     9,    10,     9,
+       9,    18,    11,     9
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
 #endif
-#if YYDEBUG
-#include <stdio.h>
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 #endif
 
-/* define the initial stack-sizes */
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH  YYSTACKSIZE
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
 #else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
 #else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH  500
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
 #endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
 
-#define YYINITSTACKSIZE 500
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
 
-int      yydebug;
-int      yynerrs;
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
 
-typedef struct {
-    unsigned stacksize;
-    short    *s_base;
-    short    *s_mark;
-    short    *s_last;
-    YYSTYPE  *l_base;
-    YYSTYPE  *l_mark;
-} YYSTACKDATA;
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
 
-#define YYPURE 0
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
 
-int      yyerrflag;
-int      yychar;
-YYSTYPE  yyval;
-YYSTYPE  yylval;
 
-/* variables for the parser stack */
-static YYSTACKDATA yystack;
-#line 144 "parse.c"
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
 
-static long
-name2number(const char *str)
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
 {
-    const char *p;
-    long num = 0;
-    const char *x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-       "abcdefghijklmnopqrstuvwxyz0123456789_";
-    if(strlen(str) > 4) {
-       yyerror("table name too long");
-       return 0;
-    }
-    for(p = str; *p; p++){
-       char *q = strchr(x, *p);
-       if(q == NULL) {
-           yyerror("invalid character in table name");
-           return 0;
-       }
-       num = (num << 6) + (q - x) + 1;
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      YYFPRINTF (stderr, "\n");
     }
-    num <<= 8;
-    if(num > 0x7fffffff)
-       num = -(0xffffffff - num + 1);
-    return num;
 }
 
-void
-yyerror (char *s)
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
 {
-     _lex_error_message ("%s\n", s);
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
 }
-#line 296 "parse.c"
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack(YYSTACKDATA *data)
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
 {
-    int i;
-    unsigned newsize;
-    short *newss;
-    YYSTYPE *newvs;
-
-    if ((newsize = data->stacksize) == 0)
-        newsize = YYINITSTACKSIZE;
-    else if (newsize >= YYMAXDEPTH)
-        return -1;
-    else if ((newsize *= 2) > YYMAXDEPTH)
-        newsize = YYMAXDEPTH;
-
-    i = data->s_mark - data->s_base;
-    newss = (data->s_base != 0)
-          ? (short *)realloc(data->s_base, newsize * sizeof(*newss))
-          : (short *)malloc(newsize * sizeof(*newss));
-    if (newss == 0)
-        return -1;
-
-    data->s_base  = newss;
-    data->s_mark = newss + i;
-
-    newvs = (data->l_base != 0)
-          ? (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs))
-          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
-    if (newvs == 0)
-        return -1;
-
-    data->l_base = newvs;
-    data->l_mark = newvs + i;
-
-    data->stacksize = newsize;
-    data->s_last = data->s_base + newsize - 1;
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
     return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
 }
+#endif /* YYERROR_VERBOSE */
+\f
 
-#if YYPURE || defined(YY_NO_LEAKS)
-static void yyfreestack(YYSTACKDATA *data)
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
 {
-    free(data->s_base);
-    free(data->l_base);
-    memset(data, 0, sizeof(*data));
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
 }
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
 #else
-#define yyfreestack(data) /* nothing */
+int yyparse ();
 #endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yychar;
 
-#define YYABORT  goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR  goto yyerrlab
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
 
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
 int
-YYPARSE_DECL()
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
 {
-    int yym, yyn, yystate;
-#if YYDEBUG
-    const char *yys;
 
-    if ((yys = getenv("YYDEBUG")) != 0)
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
     {
-        yyn = *yys;
-        if (yyn >= '0' && yyn <= '9')
-            yydebug = yyn - '0';
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
     }
-#endif
 
-    yynerrs = 0;
-    yyerrflag = 0;
-    yychar = YYEMPTY;
-    yystate = 0;
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
-#if YYPURE
-    memset(&yystack, 0, sizeof(yystack));
-#endif
+  if (yystate == YYFINAL)
+    YYACCEPT;
 
-    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
-    yystack.s_mark = yystack.s_base;
-    yystack.l_mark = yystack.l_base;
-    yystate = 0;
-    *yystack.s_mark = 0;
+  goto yybackup;
 
-yyloop:
-    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
-    if (yychar < 0)
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
     {
-        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
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
     }
-    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+
+  if (yychar <= YYEOF)
     {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: state %d, shifting to state %d\n",
-                    YYPREFIX, yystate, yytable[yyn]);
-#endif
-        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-        {
-            goto yyoverflow;
-        }
-        yystate = yytable[yyn];
-        *++yystack.s_mark = yytable[yyn];
-        *++yystack.l_mark = yylval;
-        yychar = YYEMPTY;
-        if (yyerrflag > 0)  --yyerrflag;
-        goto yyloop;
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
-    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+  else
     {
-        yyn = yytable[yyn];
-        goto yyreduce;
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
     }
-    if (yyerrflag) goto yyinrecovery;
 
-    yyerror("syntax error");
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
 
-    goto yyerrlab;
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
 
-yyerrlab:
-    ++yynerrs;
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
 
-yyinrecovery:
-    if (yyerrflag < 3)
-    {
-        yyerrflag = 3;
-        for (;;)
-        {
-            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
-                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
-#endif
-                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-                {
-                    goto yyoverflow;
-                }
-                yystate = yytable[yyn];
-                *++yystack.s_mark = yytable[yyn];
-                *++yystack.l_mark = yylval;
-                goto yyloop;
-            }
-            else
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: error recovery discarding state %d\n",
-                            YYPREFIX, *yystack.s_mark);
-#endif
-                if (yystack.s_mark <= yystack.s_base) goto yyabort;
-                --yystack.s_mark;
-                --yystack.l_mark;
-            }
-        }
-    }
-    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;
-    }
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
 
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
 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 = yystack.l_mark[1-yym];
-    else
-        memset(&yyval, 0, sizeof yyval);
-    switch (yyn)
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
     {
-case 5:
+        case 6:
+
+/* Line 1455 of yacc.c  */
 #line 74 "parse.c"
-       {
-                   id_str = yystack.l_mark[0].string;
+    {
+                   id_str = (yyvsp[(2) - (2)].string);
                }
-break;
-case 6:
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
 #line 80 "parse.c"
-       {
-                   base_id = name2number(yystack.l_mark[0].string);
-                   strlcpy(name, yystack.l_mark[0].string, sizeof(name));
-                   free(yystack.l_mark[0].string);
+    {
+                   base_id = name2number((yyvsp[(2) - (2)].string));
+                   strlcpy(name, (yyvsp[(2) - (2)].string), sizeof(name));
+                   free((yyvsp[(2) - (2)].string));
                }
-break;
-case 7:
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
 #line 86 "parse.c"
-       {
-                   base_id = name2number(yystack.l_mark[-1].string);
-                   strlcpy(name, yystack.l_mark[0].string, sizeof(name));
-                   free(yystack.l_mark[-1].string);
-                   free(yystack.l_mark[0].string);
+    {
+                   base_id = name2number((yyvsp[(2) - (3)].string));
+                   strlcpy(name, (yyvsp[(3) - (3)].string), sizeof(name));
+                   free((yyvsp[(2) - (3)].string));
+                   free((yyvsp[(3) - (3)].string));
                }
-break;
-case 10:
+    break;
+
+  case 11:
+
+/* Line 1455 of yacc.c  */
 #line 99 "parse.c"
-       {
-                       number = yystack.l_mark[0].number;
+    {
+                       number = (yyvsp[(2) - (2)].number);
                }
-break;
-case 11:
+    break;
+
+  case 12:
+
+/* Line 1455 of yacc.c  */
 #line 103 "parse.c"
-       {
+    {
                    free(prefix);
-                   asprintf (&prefix, "%s_", yystack.l_mark[0].string);
+                   asprintf (&prefix, "%s_", (yyvsp[(2) - (2)].string));
                    if (prefix == NULL)
                        errx(1, "malloc");
-                   free(yystack.l_mark[0].string);
+                   free((yyvsp[(2) - (2)].string));
                }
-break;
-case 12:
+    break;
+
+  case 13:
+
+/* Line 1455 of yacc.c  */
 #line 111 "parse.c"
-       {
+    {
                    prefix = realloc(prefix, 1);
                    if (prefix == NULL)
                        errx(1, "malloc");
                    *prefix = '\0';
                }
-break;
-case 13:
+    break;
+
+  case 14:
+
+/* Line 1455 of yacc.c  */
 #line 118 "parse.c"
-       {
+    {
                    struct error_code *ec = malloc(sizeof(*ec));
                
                    if (ec == NULL)
@@ -554,82 +1472,273 @@ case 13:
                    ec->next = NULL;
                    ec->number = number;
                    if(prefix && *prefix != '\0') {
-                       asprintf (&ec->name, "%s%s", prefix, yystack.l_mark[-2].string);
+                       asprintf (&ec->name, "%s%s", prefix, (yyvsp[(2) - (4)].string));
                        if (ec->name == NULL)
                            errx(1, "malloc");
-                       free(yystack.l_mark[-2].string);
+                       free((yyvsp[(2) - (4)].string));
                    } else
-                       ec->name = yystack.l_mark[-2].string;
-                   ec->string = yystack.l_mark[0].string;
+                       ec->name = (yyvsp[(2) - (4)].string);
+                   ec->string = (yyvsp[(4) - (4)].string);
                    APPEND(codes, ec);
                    number++;
                }
-break;
-case 14:
+    break;
+
+  case 15:
+
+/* Line 1455 of yacc.c  */
 #line 138 "parse.c"
-       {
+    {
                        YYACCEPT;
                }
-break;
-#line 574 "parse.c"
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 1500 "parse.c"
+      default: break;
     }
-    yystack.s_mark -= yym;
-    yystate = *yystack.s_mark;
-    yystack.l_mark -= yym;
-    yym = yylhs[yyn];
-    if (yystate == 0 && yym == 0)
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
     {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
-        yystate = YYFINAL;
-        *++yystack.s_mark = YYFINAL;
-        *++yystack.l_mark = 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;
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
     }
-    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, *yystack.s_mark, yystate);
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
 #endif
-    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
     {
-        goto yyoverflow;
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
     }
-    *++yystack.s_mark = (short) yystate;
-    *++yystack.l_mark = yyval;
-    goto yyloop;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
 
-yyoverflow:
-    yyerror("yacc stack overflow");
 
-yyabort:
-    yyfreestack(&yystack);
-    return (1);
+/* Line 1675 of yacc.c  */
+#line 143 "parse.c"
+
+
+static long
+name2number(const char *str)
+{
+    const char *p;
+    long num = 0;
+    const char *x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+       "abcdefghijklmnopqrstuvwxyz0123456789_";
+    if(strlen(str) > 4) {
+       yyerror("table name too long");
+       return 0;
+    }
+    for(p = str; *p; p++){
+       char *q = strchr(x, *p);
+       if(q == NULL) {
+           yyerror("invalid character in table name");
+           return 0;
+       }
+       num = (num << 6) + (q - x) + 1;
+    }
+    num <<= 8;
+    if(num > 0x7fffffff)
+       num = -(0xffffffff - num + 1);
+    return num;
+}
 
-yyaccept:
-    yyfreestack(&yystack);
-    return (0);
+void
+yyerror (char *s)
+{
+     _lex_error_message ("%s\n", s);
 }
+
index b0a11f9734661545b7644a07ca610e8856d34832..4a7d589c2d07027a873526677518e9622a3d2b18 100644 (file)
@@ -1,13 +1,87 @@
-#define ET 257
-#define INDEX 258
-#define PREFIX 259
-#define EC 260
-#define ID 261
-#define END 262
-#define STRING 263
-#define NUMBER 264
-typedef union {
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ET = 258,
+     INDEX = 259,
+     PREFIX = 260,
+     EC = 261,
+     ID = 262,
+     END = 263,
+     STRING = 264,
+     NUMBER = 265
+   };
+#endif
+/* Tokens.  */
+#define ET 258
+#define INDEX 259
+#define PREFIX 260
+#define EC 261
+#define ID 262
+#define END 263
+#define STRING 264
+#define NUMBER 265
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 1676 of yacc.c  */
+#line 54 "parse.c"
+
   char *string;
   int number;
+
+
+
+/* Line 1676 of yacc.c  */
+#line 79 "parse.c"
 } YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
 extern YYSTYPE yylval;
+
+
index c67b0a80d7e08376bab03c10a29be75a81785e7a..caa1af8b3a681f82d1eca3f93471283f7db0e2d6 100644 (file)
@@ -989,6 +989,55 @@ gss_display_mech_attr(OM_uint32 * minor_status,
                      gss_buffer_t short_desc,
                      gss_buffer_t long_desc);
 
+/*
+ * Naming extensions
+ */
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_display_name_ext (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    gss_OID,           /* display_as_name_type */
+    gss_buffer_t       /* display_name */
+    );
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_inquire_name (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    int *,             /* name_is_MN */
+    gss_OID *,         /* MN_mech */
+    gss_buffer_set_t * /* attrs */
+    );
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_get_name_attribute (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    gss_buffer_t,      /* attr */
+    int *,             /* authenticated */
+    int *,             /* complete */
+    gss_buffer_t,      /* value */
+    gss_buffer_t,      /* display_value */
+    int *              /* more */
+    );
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_set_name_attribute (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    int,               /* complete */
+    gss_buffer_t,      /* attr */
+    gss_buffer_t       /* value */
+    );
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_delete_name_attribute (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    gss_buffer_t       /* attr */
+    );
+
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL gss_export_name_composite (
+    OM_uint32 *,       /* minor_status */
+    gss_name_t,                /* name */
+    gss_buffer_t       /* exp_composite_name */
+    );
 
 /*
  *
index af7a583344bc87baa7d3bb17bbf2ed850081d0e5..e7b56dc7d43848ce8605d8adefe2cb2fb8014c77 100644 (file)
@@ -125,6 +125,13 @@ extern GSSAPI_LIB_VARIABLE gss_OID_desc __gss_netlogon_set_sign_algorithm_x_oid_
 extern GSSAPI_LIB_VARIABLE gss_OID_desc __gss_netlogon_nt_netbios_dns_name_oid_desc;
 #define GSS_NETLOGON_NT_NETBIOS_DNS_NAME (&__gss_netlogon_nt_netbios_dns_name_oid_desc)
 
+/* GSS_KRB5_EXTRACT_AUTHZ_DATA_FROM_SEC_CONTEXT_X.128 */
+extern GSSAPI_LIB_VARIABLE gss_OID_desc __gss_c_inq_win2k_pac_x_oid_desc;
+#define GSS_C_INQ_WIN2K_PAC_X (&__gss_c_inq_win2k_pac_x_oid_desc)
+
+extern GSSAPI_LIB_VARIABLE gss_OID_desc __gss_c_inq_sspi_session_key_oid_desc;
+#define GSS_C_INQ_SSPI_SESSION_KEY (&__gss_c_inq_sspi_session_key_oid_desc)
+
 /*
  * "Standard" mechs
  */
index b06e60a82f3efcce365241e30352a08c0ef1d3f3..1431dbcee6f91a332f0cfc6c41539c1152da7755 100644 (file)
@@ -393,8 +393,62 @@ _gss_cred_label_get_t(OM_uint32 * /* minor_status */,
                      const char * /* label */,
                      gss_buffer_t /* value */);
 
+typedef OM_uint32 GSSAPI_CALLCONV _gss_display_name_ext_t (
+              OM_uint32 *,            /* minor_status */
+              gss_name_t,             /* name */
+              gss_OID,                /* display_as_name_type */
+              gss_buffer_t            /* display_name */
+             );
+
+typedef OM_uint32 GSSAPI_CALLCONV _gss_inquire_name_t (
+              OM_uint32 *,            /* minor_status */
+              gss_name_t,             /* name */
+              int *,                  /* name_is_MN */
+              gss_OID *,              /* MN_mech */
+              gss_buffer_set_t *      /* attrs */
+             );
+
+typedef OM_uint32 GSSAPI_CALLCONV _gss_get_name_attribute_t (
+              OM_uint32 *,           /* minor_status */
+              gss_name_t,            /* name */
+              gss_buffer_t,          /* attr */
+              int *,                 /* authenticated */
+              int *,                 /* complete */
+              gss_buffer_t,          /* value */
+              gss_buffer_t,          /* display_value */
+              int *                  /* more */
+           );
+
+typedef OM_uint32 GSSAPI_CALLCONV _gss_set_name_attribute_t (
+              OM_uint32 *,           /* minor_status */
+              gss_name_t,            /* name */
+              int,                   /* complete */
+              gss_buffer_t,          /* attr */
+              gss_buffer_t           /* value */
+           );
+
+typedef OM_uint32 GSSAPI_CALLCONV _gss_delete_name_attribute_t (
+              OM_uint32 *,           /* minor_status */
+              gss_name_t,            /* name */
+              gss_buffer_t           /* attr */
+           );
+
+typedef OM_uint32 GSSAPI_CALLCONV _gss_export_name_composite_t (
+              OM_uint32 *,           /* minor_status */
+              gss_name_t,            /* name */
+              gss_buffer_t           /* exp_composite_name */
+           );
+
+/*
+ *
+ */
+
 typedef struct gss_mo_desc_struct gss_mo_desc;
 
+typedef OM_uint32 GSSAPI_CALLCONV
+_gss_mo_init (OM_uint32 *, gss_OID, gss_mo_desc **, size_t *);
+
+
 struct gss_mo_desc_struct {
     gss_OID option;
     OM_uint32 flags;
@@ -407,7 +461,7 @@ struct gss_mo_desc_struct {
 };
 
 
-#define GMI_VERSION 4
+#define GMI_VERSION 5
 
 /* gm_flags */
 #define GM_USE_MG_CRED         1       /* uses mech glue credentials */
@@ -467,6 +521,12 @@ typedef struct gssapi_mech_interface_desc {
        _gss_cred_label_set_t           *gm_cred_label_set;
         gss_mo_desc                    *gm_mo;
         size_t                          gm_mo_num;
+        _gss_display_name_ext_t         *gm_display_name_ext;
+        _gss_inquire_name_t             *gm_inquire_name;
+        _gss_get_name_attribute_t       *gm_get_name_attribute;
+        _gss_set_name_attribute_t       *gm_set_name_attribute;
+        _gss_delete_name_attribute_t    *gm_delete_name_attribute;
+        _gss_export_name_composite_t    *gm_export_name_composite;
 } gssapi_mech_interface_desc, *gssapi_mech_interface;
 
 gssapi_mech_interface
index 0e8fbe837626a4bf0ed2888482355bacf9094cc6..a5e9d054c41339a3032cbe4e6a7c97ba088ed49f 100644 (file)
@@ -99,6 +99,7 @@ _gsskrb5i_is_cfx(krb5_context context, gsskrb5_ctx ctx, int acceptor)
     case ETYPE_DES_CBC_MD4:
     case ETYPE_DES_CBC_MD5:
     case ETYPE_DES3_CBC_MD5:
+    case ETYPE_OLD_DES3_CBC_SHA1:
     case ETYPE_DES3_CBC_SHA1:
     case ETYPE_ARCFOUR_HMAC_MD5:
     case ETYPE_ARCFOUR_HMAC_MD5_56:
index c873da9ba9d16f80ffa96845fae544a44e565948..3bab1802b3c9988a41eec18897faf982dda9aff3 100644 (file)
@@ -202,6 +202,8 @@ _gsskrb5_import_sec_context (
 
     krb5_storage_free (sp);
 
+    _gsskrb5i_is_cfx(context, ctx, (ctx->more_flags & LOCAL) == 0);
+
     *context_handle = (gss_ctx_id_t)ctx;
 
     return GSS_S_COMPLETE;
index a68d345e304b28aed3ca33bbbb3379101e15d0fd..f7f75c13f916c592e69a5d54825d1254c5633d9f 100644 (file)
@@ -242,6 +242,8 @@ _gss_load_mech(void)
        rk_cloexec_file(fp);
 
        while (fgets(buf, sizeof(buf), fp)) {
+               _gss_mo_init *mi;
+
                if (*buf == '#')
                        continue;
                p = buf;
@@ -341,6 +343,22 @@ _gss_load_mech(void)
                OPTSYM(wrap_iov);
                OPTSYM(unwrap_iov);
                OPTSYM(wrap_iov_length);
+               OPTSYM(display_name_ext);
+               OPTSYM(inquire_name);
+               OPTSYM(get_name_attribute);
+               OPTSYM(set_name_attribute);
+               OPTSYM(delete_name_attribute);
+               OPTSYM(export_name_composite);
+
+               mi = dlsym(so, "gss_mo_init");
+               if (mi != NULL) {
+                       major_status = mi(&minor_status,
+                                         &mech_oid,
+                                         &m->gm_mech.gm_mo,
+                                         &m->gm_mech.gm_mo_num);
+                       if (GSS_ERROR(major_status))
+                               goto bad;
+               }
 
                HEIM_SLIST_INSERT_HEAD(&_gss_mechs, m, gm_link);
                continue;
index 31235f54d5acb2d0777c567225da3ccbc4c6196d..cb24b764a52937920cc8986926f01ac3fbcfb6fd 100644 (file)
@@ -374,7 +374,7 @@ gss_inquire_attrs_for_mech(OM_uint32 * minor_status,
            return major;
 
        add_all_mo(m, mech_attr, GSS_MO_MA);
-    }
+    }    
 
     if (known_mech_attrs) {
        struct _gss_mech_switch *m;
index 0bd016cd442eb6f930fe45e6e67037be59996198..bac97cacd0bcaf6ceb08c592d40db5b46cd31496 100644 (file)
@@ -118,6 +118,12 @@ gss_OID_desc GSSAPI_LIB_VARIABLE __gss_netlogon_set_sign_algorithm_x_oid_desc =
 /* GSS_NETLOGON_NT_NETBIOS_DNS_NAME - 1.2.752.43.14.5 */
 gss_OID_desc GSSAPI_LIB_VARIABLE __gss_netlogon_nt_netbios_dns_name_oid_desc = { 6, "\x2a\x85\x70\x2b\x0e\x05" };
 
+/* GSS_C_INQ_WIN2K_PAC_X - 1.2.752.43.13.3.128 */
+gss_OID_desc GSSAPI_LIB_VARIABLE __gss_c_inq_win2k_pac_x_oid_desc = { 8, "\x2a\x85\x70\x2b\x0d\x03\x81\x00" };
+
+/* GSS_C_INQ_SSPI_SESSION_KEY - 1.2.840.113554.1.2.2.5.5 */
+gss_OID_desc GSSAPI_LIB_VARIABLE __gss_c_inq_sspi_session_key_oid_desc = { 11, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x05" };
+
 /* GSS_KRB5_MECHANISM - 1.2.840.113554.1.2.2 */
 gss_OID_desc GSSAPI_LIB_VARIABLE __gss_krb5_mechanism_oid_desc = { 9, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" };
 
@@ -251,3 +257,4 @@ struct _gss_oid_name_table _gss_ont_mech[] = {
   { GSS_NTLM_MECHANISM, "GSS_NTLM_MECHANISM", "NTLM", "Heimdal NTLM mechanism" },
   { NULL }
 };
+
index 087b29a50011ea181986e915687c3ac28349ca16..7591121333ffea3c405a9c9e7d887b2d26ef1724 100644 (file)
@@ -23,16 +23,20 @@ HEIMDAL_GSS_2.0 {
                gss_create_empty_buffer_set;
                gss_create_empty_oid_set;
                gss_decapsulate_token;
+               gss_delete_name_attribute;
                gss_delete_sec_context;
                gss_display_name;
+               gss_display_name_ext;
                gss_display_status;
                gss_duplicate_name;
                gss_duplicate_oid;
                gss_encapsulate_token;
                gss_export_cred;
                gss_export_name;
+               gss_export_name_composite;
                gss_export_sec_context;
                gss_get_mic;
+               gss_get_name_attribute;
                gss_import_cred;
                gss_import_name;
                gss_import_sec_context;
@@ -43,6 +47,7 @@ HEIMDAL_GSS_2.0 {
                gss_inquire_cred_by_mech;
                gss_inquire_cred_by_oid;
                gss_inquire_mechs_for_name;
+               gss_inquire_name;
                gss_inquire_names_for_mech;
                gss_inquire_sec_context_by_oid;
                gss_inquire_sec_context_by_oid;
@@ -67,6 +72,7 @@ HEIMDAL_GSS_2.0 {
                gss_release_oid_set;
                gss_seal;
                gss_set_cred_option;
+               gss_set_name_attribute;
                gss_set_sec_context_option;
                gss_sign;
                gss_test_oid_set_member;
index 235686999e59938ceb9b1d5a270a1a0a64f5a015..a3fc0cd7ae65c9be46828cc58679e84b1533b05d 100644 (file)
@@ -60,7 +60,7 @@
  *   operation performed each eteration sign, verify, encrypt, decrypt on a random bit pattern
  *
  * name                1024    2048    4098
- * =================================
+ * =================================   
  * gmp:         0.73     6.60   44.80
  * tfm:         2.45       --      --
  * ltm:                 3.79    20.74  105.41  (default in hcrypto)
index 93a172e553045e5bff1b7af0201f0364c1037525..7f95ea5560acd8f470121ab114b6ff82e91c81bd 100644 (file)
@@ -310,7 +310,7 @@ int
 _hx509_cert_assign_key(hx509_cert cert, hx509_private_key private_key)
 {
     if (cert->private_key)
-       _hx509_private_key_free(&cert->private_key);
+       hx509_private_key_free(&cert->private_key);
     cert->private_key = _hx509_private_key_ref(private_key);
     return 0;
 }
@@ -341,7 +341,7 @@ hx509_cert_free(hx509_cert cert)
        (cert->release)(cert, cert->ctx);
 
     if (cert->private_key)
-       _hx509_private_key_free(&cert->private_key);
+       hx509_private_key_free(&cert->private_key);
 
     free_Certificate(cert->data);
     free(cert->data);
@@ -1607,7 +1607,7 @@ _hx509_cert_private_decrypt(hx509_context context,
        return HX509_PRIVATE_KEY_MISSING;
     }
 
-    return _hx509_private_key_private_decrypt(context,
+    return hx509_private_key_private_decrypt(context,
                                              ciphertext,
                                              encryption_oid,
                                              p->private_key,
@@ -1615,7 +1615,7 @@ _hx509_cert_private_decrypt(hx509_context context,
 }
 
 int
-_hx509_cert_public_encrypt(hx509_context context,
+hx509_cert_public_encrypt(hx509_context context,
                           const heim_octet_string *cleartext,
                           const hx509_cert p,
                           heim_oid *encryption_oid,
index ef986fd4edf1a3ef627d05d6275e4cb9abcaf377..6e4eefaa1ca8c00556ca239770a34955eef09787 100644 (file)
@@ -656,7 +656,7 @@ hx509_cms_envelope_1(hx509_context context,
        ri->version = 2;
        cmsidflag = CMS_ID_SKI;
     }
-
+       
     ret = fill_CMSIdentifier(cert, cmsidflag, &ri->rid);
     if (ret) {
        hx509_set_error_string(context, 0, ret,
@@ -665,7 +665,7 @@ hx509_cms_envelope_1(hx509_context context,
        goto out;
     }
 
-    ret = _hx509_cert_public_encrypt(context,
+    ret = hx509_cert_public_encrypt(context,
                                     &key, cert,
                                     &ri->keyEncryptionAlgorithm.algorithm,
                                     &ri->encryptedKey);
index 1a44de00a34621a623369385b8674456ffafb581..0cb186399f03237df7303cbb95671f6da6d0b188 100644 (file)
@@ -105,7 +105,7 @@ free_private_key(struct private_key *key)
 {
     free_AlgorithmIdentifier(&key->alg);
     if (key->private_key)
-       _hx509_private_key_free(&key->private_key);
+       hx509_private_key_free(&key->private_key);
     der_free_octet_string(&key->localKeyId);
     free(key);
 }
@@ -143,7 +143,7 @@ _hx509_collector_private_key_add(hx509_context context,
     if (private_key) {
        key->private_key = private_key;
     } else {
-       ret = _hx509_parse_private_key(context, alg,
+       ret = hx509_parse_private_key(context, alg,
                                       key_data->data, key_data->length,
                                       HX509_KEY_FORMAT_DER,
                                       &key->private_key);
index 5d66b681d9c356d6dc46cc7403999f79f18c322b..c69ddfb5d2b2966a58cf80d754e6b0f9a48238df 100644 (file)
@@ -1715,7 +1715,7 @@ _hx509_public_encrypt(hx509_context context,
 }
 
 int
-_hx509_private_key_private_decrypt(hx509_context context,
+hx509_private_key_private_decrypt(hx509_context context,
                                   const heim_octet_string *ciphertext,
                                   const heim_oid *encryption_oid,
                                   hx509_private_key p,
@@ -1758,7 +1758,7 @@ _hx509_private_key_private_decrypt(hx509_context context,
 
 
 int
-_hx509_parse_private_key(hx509_context context,
+hx509_parse_private_key(hx509_context context,
                         const AlgorithmIdentifier *keyai,
                         const void *data,
                         size_t len,
@@ -1776,7 +1776,7 @@ _hx509_parse_private_key(hx509_context context,
        return HX509_SIG_ALG_NO_SUPPORTED;
     }
 
-    ret = _hx509_private_key_init(private_key, ops, NULL);
+    ret = hx509_private_key_init(private_key, ops, NULL);
     if (ret) {
        hx509_set_error_string(context, 0, ret, "out of memory");
        return ret;
@@ -1784,7 +1784,7 @@ _hx509_parse_private_key(hx509_context context,
 
     ret = (*ops->import)(context, keyai, data, len, format, *private_key);
     if (ret)
-       _hx509_private_key_free(private_key);
+       hx509_private_key_free(private_key);
 
     return ret;
 }
@@ -1794,7 +1794,7 @@ _hx509_parse_private_key(hx509_context context,
  */
 
 int
-_hx509_private_key2SPKI(hx509_context context,
+hx509_private_key2SPKI(hx509_context context,
                        hx509_private_key private_key,
                        SubjectPublicKeyInfo *spki)
 {
@@ -1871,7 +1871,7 @@ _hx509_generate_private_key(hx509_context context,
        return HX509_SIG_ALG_NO_SUPPORTED;
     }
 
-    ret = _hx509_private_key_init(private_key, ops, NULL);
+    ret = hx509_private_key_init(private_key, ops, NULL);
     if (ret) {
        hx509_set_error_string(context, 0, ret, "out of memory");
        return ret;
@@ -1879,7 +1879,7 @@ _hx509_generate_private_key(hx509_context context,
 
     ret = (*ops->generate_private_key)(context, ctx, *private_key);
     if (ret)
-       _hx509_private_key_free(private_key);
+       hx509_private_key_free(private_key);
 
     return ret;
 }
@@ -1976,7 +1976,7 @@ const AlgorithmIdentifier * _hx509_crypto_default_secret_alg =
  */
 
 int
-_hx509_private_key_init(hx509_private_key *key,
+hx509_private_key_init(hx509_private_key *key,
                        hx509_private_key_ops *ops,
                        void *keydata)
 {
@@ -2007,7 +2007,7 @@ _hx509_private_pem_name(hx509_private_key key)
 }
 
 int
-_hx509_private_key_free(hx509_private_key *key)
+hx509_private_key_free(hx509_private_key *key)
 {
     if (key == NULL || *key == NULL)
        return 0;
@@ -2033,7 +2033,7 @@ _hx509_private_key_free(hx509_private_key *key)
 }
 
 void
-_hx509_private_key_assign_rsa(hx509_private_key key, void *ptr)
+hx509_private_key_assign_rsa(hx509_private_key key, void *ptr)
 {
     if (key->private_key.rsa)
        RSA_free(key->private_key.rsa);
index 465ca1b4d3e5a0e22c3ef81dcc0b9a761de81111..77cfd42cd2b3d05647259efe5aa99ed520a744e1 100644 (file)
@@ -781,6 +781,6 @@ _hx509_certs_keys_free(hx509_context context,
 {
     int i;
     for (i = 0; keys[i]; i++)
-       _hx509_private_key_free(&keys[i]);
+       hx509_private_key_free(&keys[i]);
     free(keys);
 }
index 9c6521790a80f052a22dfe6c533657630ae849ce..e64d83c84dc56cdc3d179fc0d9bb2e7ebe6e77e1 100644 (file)
@@ -259,7 +259,7 @@ set_private_key(hx509_context context,
     RSA *rsa;
     int ret;
 
-    ret = _hx509_private_key_init(&key, NULL, NULL);
+    ret = hx509_private_key_init(&key, NULL, NULL);
     if (ret)
        return ret;
 
@@ -302,7 +302,7 @@ set_private_key(hx509_context context,
     if (ret != 1)
        _hx509_abort("RSA_set_app_data");
 
-    _hx509_private_key_assign_rsa(key, rsa);
+    hx509_private_key_assign_rsa(key, rsa);
     _hx509_cert_assign_key(cert, key);
 
     return 0;
index 299a3932c9b515b42bf474de12242933719c6450..9d3c66b29413cf7111b1433a683bb19f74c97b82 100644 (file)
@@ -78,7 +78,7 @@ mem_free(hx509_certs certs, void *data)
        hx509_cert_free(mem->certs.val[i]);
     free(mem->certs.val);
     for (i = 0; mem->keys && mem->keys[i]; i++)
-       _hx509_private_key_free(&mem->keys[i]);
+       hx509_private_key_free(&mem->keys[i]);
     free(mem->keys);
     free(mem->name);
     free(mem);
@@ -167,7 +167,7 @@ mem_getkeys(hx509_context context,
        (*keys)[i] = _hx509_private_key_ref(mem->keys[i]);
        if ((*keys)[i] == NULL) {
            while (--i >= 0)
-               _hx509_private_key_free(&(*keys)[i]);
+               hx509_private_key_free(&(*keys)[i]);
            hx509_set_error_string(context, 0, ENOMEM, "out of memory");
            return ENOMEM;
        }
index 23f6a4826a601292a7194c1d5ad29679080d170f..30f5343b0e093f4ac1a47f80749948987774d5ca 100644 (file)
@@ -613,7 +613,7 @@ collect_private_key(hx509_context context,
     localKeyId.data = query[0].pValue;
     localKeyId.length = query[0].ulValueLen;
 
-    ret = _hx509_private_key_init(&key, NULL, NULL);
+    ret = hx509_private_key_init(&key, NULL, NULL);
     if (ret)
        return ret;
 
@@ -648,7 +648,7 @@ collect_private_key(hx509_context context,
     if (ret != 1)
        _hx509_abort("RSA_set_app_data");
 
-    _hx509_private_key_assign_rsa(key, rsa);
+    hx509_private_key_assign_rsa(key, rsa);
 
     ret = _hx509_collector_private_key_add(context,
                                           collector,
@@ -658,7 +658,7 @@ collect_private_key(hx509_context context,
                                           &localKeyId);
 
     if (ret) {
-       _hx509_private_key_free(&key);
+       hx509_private_key_free(&key);
        return ret;
     }
     return 0;
index 4ee5a268205d4af1c868ce0b9cc7c7071ba72932..ec7489c0c95de4d1195e2d47a58e3bb8a8b386c9 100644 (file)
@@ -33,7 +33,7 @@
 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 
 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types.
+ * if you want the limit (max/min) macros for int types. 
  */
 #ifndef __STDC_LIMIT_MACROS
 #define __STDC_LIMIT_MACROS 1
@@ -50,10 +50,9 @@ typedef uint32_t flex_uint32_t;
 typedef signed char flex_int8_t;
 typedef short int flex_int16_t;
 typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t;
+typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -84,6 +83,8 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -140,7 +141,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -161,7 +170,7 @@ extern FILE *yyin, *yyout;
 #define EOB_ACT_LAST_MATCH 2
 
     #define YY_LESS_LINENO(n)
-
+    
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
        do \
@@ -223,7 +232,7 @@ struct yy_buffer_state
 
     int yy_bs_lineno; /**< The line count. */
     int yy_bs_column; /**< The column count. */
-
+    
        /* Whether to try to fill the input buffer when we reach the
         * end of it.
         */
@@ -534,7 +543,7 @@ struct hx_expr_input _hx509_expr_input;
 
 #undef ECHO
 
-#line 538 "lex.yy.c"
+#line 547 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -594,7 +603,7 @@ extern int yywrap (void );
 #endif
 
     static void yyunput (int c,char *buf_ptr  );
-
+    
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int );
 #endif
@@ -615,7 +624,12 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -634,7 +648,7 @@ static int input (void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               unsigned n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -715,11 +729,11 @@ YY_DECL
        register yy_state_type yy_current_state;
        register char *yy_cp, *yy_bp;
        register int yy_act;
-
+    
 #line 68 "sel-lex.l"
 
 
-#line 723 "lex.yy.c"
+#line 737 "lex.yy.c"
 
        if ( !(yy_init) )
                {
@@ -866,7 +880,7 @@ YY_RULE_SETUP
 #line 85 "sel-lex.l"
 ECHO;
        YY_BREAK
-#line 870 "lex.yy.c"
+#line 884 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1008,7 +1022,7 @@ case YY_STATE_EOF(INITIAL):
  */
 static int yy_get_next_buffer (void)
 {
-       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
        register char *source = (yytext_ptr);
        register int number_to_move, i;
        int ret_val;
@@ -1144,7 +1158,7 @@ static int yy_get_next_buffer (void)
 {
        register yy_state_type yy_current_state;
        register char *yy_cp;
-
+    
        yy_current_state = (yy_start);
 
        for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
@@ -1175,7 +1189,7 @@ static int yy_get_next_buffer (void)
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
 {
        register int yy_is_jam;
-       register char *yy_cp = (yy_c_buf_p);
+       register char *yy_cp = (yy_c_buf_p);
 
        register YY_CHAR yy_c = 1;
        if ( yy_accept[yy_current_state] )
@@ -1198,7 +1212,7 @@ static int yy_get_next_buffer (void)
     static void yyunput (int c, register char * yy_bp )
 {
        register char *yy_cp;
-
+    
     yy_cp = (yy_c_buf_p);
 
        /* undo effects of setting up yytext */
@@ -1241,7 +1255,7 @@ static int yy_get_next_buffer (void)
 
 {
        int c;
-
+    
        *(yy_c_buf_p) = (yy_hold_char);
 
        if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
@@ -1308,12 +1322,12 @@ static int yy_get_next_buffer (void)
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
- *
+ * 
  * @note This function does not reset the start condition to @c INITIAL .
  */
     void yyrestart  (FILE * input_file )
 {
-
+    
        if ( ! YY_CURRENT_BUFFER ){
         yyensure_buffer_stack ();
                YY_CURRENT_BUFFER_LVALUE =
@@ -1326,11 +1340,11 @@ static int yy_get_next_buffer (void)
 
 /** Switch to a different input buffer.
  * @param new_buffer The new input buffer.
- *
+ * 
  */
     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
-
+    
        /* TODO. We should be able to replace this entire function body
         * with
         *              yypop_buffer_state();
@@ -1361,7 +1375,7 @@ static int yy_get_next_buffer (void)
 
 static void yy_load_buffer_state  (void)
 {
-       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
        (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
        yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
        (yy_hold_char) = *(yy_c_buf_p);
@@ -1370,13 +1384,13 @@ static void yy_load_buffer_state  (void)
 /** Allocate and initialize an input buffer state.
  * @param file A readable stream.
  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- *
+ * 
  * @return the allocated buffer state.
  */
     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
 {
        YY_BUFFER_STATE b;
-
+    
        b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
        if ( ! b )
                YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
@@ -1399,11 +1413,11 @@ static void yy_load_buffer_state  (void)
 
 /** Destroy the buffer.
  * @param b a buffer created with yy_create_buffer()
- *
+ * 
  */
     void yy_delete_buffer (YY_BUFFER_STATE  b )
 {
-
+    
        if ( ! b )
                return;
 
@@ -1419,7 +1433,7 @@ static void yy_load_buffer_state  (void)
 #ifndef __cplusplus
 extern int isatty (int );
 #endif /* __cplusplus */
-
+    
 /* Initializes or reinitializes a buffer.
  * This function is sometimes called more than once on the same buffer,
  * such as during a yyrestart() or at EOF.
@@ -1428,7 +1442,7 @@ extern int isatty (int );
 
 {
        int oerrno = errno;
-
+    
        yy_flush_buffer(b );
 
        b->yy_input_file = file;
@@ -1444,17 +1458,17 @@ extern int isatty (int );
     }
 
         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-
+    
        errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- *
+ * 
  */
     void yy_flush_buffer (YY_BUFFER_STATE  b )
 {
-       if ( ! b )
+       if ( ! b )
                return;
 
        b->yy_n_chars = 0;
@@ -1479,11 +1493,11 @@ extern int isatty (int );
  *  the current state. This function will allocate the stack
  *  if necessary.
  *  @param new_buffer The new state.
- *
+ *  
  */
 void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 {
-       if (new_buffer == NULL)
+       if (new_buffer == NULL)
                return;
 
        yyensure_buffer_stack();
@@ -1509,11 +1523,11 @@ void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
 
 /** Removes and deletes the top of the stack, if present.
  *  The next element becomes the new top.
- *
+ *  
  */
 void yypop_buffer_state (void)
 {
-       if (!YY_CURRENT_BUFFER)
+       if (!YY_CURRENT_BUFFER)
                return;
 
        yy_delete_buffer(YY_CURRENT_BUFFER );
@@ -1533,7 +1547,7 @@ void yypop_buffer_state (void)
 static void yyensure_buffer_stack (void)
 {
        int num_to_alloc;
-
+    
        if (!(yy_buffer_stack)) {
 
                /* First allocation is just for 2 elements, since we don't know if this
@@ -1546,9 +1560,9 @@ static void yyensure_buffer_stack (void)
                                                                );
                if ( ! (yy_buffer_stack) )
                        YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
-
+                                                                 
                memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-
+                               
                (yy_buffer_stack_max) = num_to_alloc;
                (yy_buffer_stack_top) = 0;
                return;
@@ -1576,13 +1590,13 @@ static void yyensure_buffer_stack (void)
 /** Setup the input buffer state to scan directly from a user-specified character buffer.
  * @param base the character buffer
  * @param size the size in bytes of the character buffer
- *
- * @return the newly allocated buffer state object.
+ * 
+ * @return the newly allocated buffer state object. 
  */
 YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 {
        YY_BUFFER_STATE b;
-
+    
        if ( size < 2 ||
             base[size-2] != YY_END_OF_BUFFER_CHAR ||
             base[size-1] != YY_END_OF_BUFFER_CHAR )
@@ -1611,22 +1625,22 @@ YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
 /** Setup the input buffer state to scan a string. The next call to yylex() will
  * scan from a @e copy of @a str.
  * @param yystr a NUL-terminated string to scan
- *
+ * 
  * @return the newly allocated buffer state object.
  * @note If you want to scan bytes that may contain NUL values, then use
  *       yy_scan_bytes() instead.
  */
 YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 {
-
+    
        return yy_scan_bytes(yystr,strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- *
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * 
  * @return the newly allocated buffer state object.
  */
 YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
@@ -1635,7 +1649,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
        char *buf;
        yy_size_t n;
        int i;
-
+    
        /* Get memory for full buffer, including space for trailing EOB's. */
        n = _yybytes_len + 2;
        buf = (char *) yyalloc(n  );
@@ -1665,7 +1679,7 @@ YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 
 static void yy_fatal_error (yyconst char* msg )
 {
-       (void) fprintf( stderr, "%s\n", msg );
+       (void) fprintf( stderr, "%s\n", msg );
        exit( YY_EXIT_FAILURE );
 }
 
@@ -1689,16 +1703,16 @@ static void yy_fatal_error (yyconst char* msg )
 /* Accessor  methods (get/set functions) to struct members. */
 
 /** Get the current line number.
- *
+ * 
  */
 int yyget_lineno  (void)
 {
-
+        
     return yylineno;
 }
 
 /** Get the input stream.
- *
+ * 
  */
 FILE *yyget_in  (void)
 {
@@ -1706,7 +1720,7 @@ FILE *yyget_in  (void)
 }
 
 /** Get the output stream.
- *
+ * 
  */
 FILE *yyget_out  (void)
 {
@@ -1714,7 +1728,7 @@ FILE *yyget_out  (void)
 }
 
 /** Get the length of the current token.
- *
+ * 
  */
 int yyget_leng  (void)
 {
@@ -1722,7 +1736,7 @@ int yyget_leng  (void)
 }
 
 /** Get the current token.
- *
+ * 
  */
 
 char *yyget_text  (void)
@@ -1732,18 +1746,18 @@ char *yyget_text  (void)
 
 /** Set the current line number.
  * @param line_number
- *
+ * 
  */
 void yyset_lineno (int  line_number )
 {
-
+    
     yylineno = line_number;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
  * @param in_str A readable stream.
- *
+ * 
  * @see yy_switch_to_buffer
  */
 void yyset_in (FILE *  in_str )
@@ -1797,7 +1811,7 @@ static int yy_init_globals (void)
 /* yylex_destroy is for both reentrant and non-reentrant scanners. */
 int yylex_destroy  (void)
 {
-
+    
     /* Pop the buffer stack, destroying each element. */
        while(YY_CURRENT_BUFFER){
                yy_delete_buffer(YY_CURRENT_BUFFER  );
@@ -1921,3 +1935,4 @@ lex_input(char *buf, int max_size)
 
     return n;
 }
+
index 917f08891be22ed9fc258acb1ef2f337564c9035..e70ab4b6cce58fb6b78ec738e8c7458bff4978ae 100644 (file)
@@ -46,7 +46,7 @@ struct hx509_request_data {
  */
 
 int
-_hx509_request_init(hx509_context context, hx509_request *req)
+hx509_request_init(hx509_context context, hx509_request *req)
 {
     *req = calloc(1, sizeof(**req));
     if (*req == NULL)
@@ -56,7 +56,7 @@ _hx509_request_init(hx509_context context, hx509_request *req)
 }
 
 void
-_hx509_request_free(hx509_request *req)
+hx509_request_free(hx509_request *req)
 {
     if ((*req)->name)
        hx509_name_free(&(*req)->name);
@@ -69,7 +69,7 @@ _hx509_request_free(hx509_request *req)
 }
 
 int
-_hx509_request_set_name(hx509_context context,
+hx509_request_set_name(hx509_context context,
                        hx509_request req,
                        hx509_name name)
 {
@@ -84,7 +84,7 @@ _hx509_request_set_name(hx509_context context,
 }
 
 int
-_hx509_request_get_name(hx509_context context,
+hx509_request_get_name(hx509_context context,
                        hx509_request req,
                        hx509_name *name)
 {
@@ -96,7 +96,7 @@ _hx509_request_get_name(hx509_context context,
 }
 
 int
-_hx509_request_set_SubjectPublicKeyInfo(hx509_context context,
+hx509_request_set_SubjectPublicKeyInfo(hx509_context context,
                                        hx509_request req,
                                        const SubjectPublicKeyInfo *key)
 {
@@ -105,7 +105,7 @@ _hx509_request_set_SubjectPublicKeyInfo(hx509_context context,
 }
 
 int
-_hx509_request_get_SubjectPublicKeyInfo(hx509_context context,
+hx509_request_get_SubjectPublicKeyInfo(hx509_context context,
                                        hx509_request req,
                                        SubjectPublicKeyInfo *key)
 {
@@ -271,7 +271,7 @@ _hx509_request_parse(hx509_context context,
        return ret;
     }
 
-    ret = _hx509_request_init(context, req);
+    ret = hx509_request_init(context, req);
     if (ret) {
        free_CertificationRequest(&r);
        return ret;
@@ -279,25 +279,25 @@ _hx509_request_parse(hx509_context context,
 
     rinfo = &r.certificationRequestInfo;
 
-    ret = _hx509_request_set_SubjectPublicKeyInfo(context, *req,
+    ret = hx509_request_set_SubjectPublicKeyInfo(context, *req,
                                                  &rinfo->subjectPKInfo);
     if (ret) {
        free_CertificationRequest(&r);
-       _hx509_request_free(req);
+       hx509_request_free(req);
        return ret;
     }
 
     ret = _hx509_name_from_Name(&rinfo->subject, &subject);
     if (ret) {
        free_CertificationRequest(&r);
-       _hx509_request_free(req);
+       hx509_request_free(req);
        return ret;
     }
-    ret = _hx509_request_set_name(context, *req, subject);
+    ret = hx509_request_set_name(context, *req, subject);
     hx509_name_free(&subject);
     free_CertificationRequest(&r);
     if (ret) {
-       _hx509_request_free(req);
+       hx509_request_free(req);
        return ret;
     }
 
index fe3de4757b7def78b3631ed037124754fe49ef13..8e334604e9d6327f5887e1eccc4a648161a74c6b 100644 (file)
@@ -1,37 +1,75 @@
-#ifndef lint
-static const char yysccsid[] = "@(#)yaccpar    1.9 (Berkeley) 02/21/93";
-#endif
 
-#include <stdlib.h>
-#include <string.h>
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYPATCH 20100216
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#define YYEMPTY        (-1)
-#define yyclearin      (yychar = YYEMPTY)
-#define yyerrok        (yyerrflag = 0)
-#define YYRECOVERING() (yyerrflag != 0)
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
 
-#define YYPREFIX "yy"
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
 
-/* compatibility with bison */
-#ifdef YYPARSE_PARAM
-/* compatibility with FreeBSD */
-#ifdef YYPARSE_PARAM_TYPE
-#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
-#else
-#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
-#endif
-#else
-#define YYPARSE_DECL() yyparse(void)
-#endif /* YYPARSE_PARAM */
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
 
-extern int YYPARSE_DECL();
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 34 "sel-gram.c"
 
-#line 35 "sel-gram.c"
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -40,563 +78,1695 @@ extern int YYPARSE_DECL();
 #include <hx_locl.h>
 
 
+
+
+/* Line 189 of yacc.c  */
+#line 85 "sel-gram.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kw_TRUE = 258,
+     kw_FALSE = 259,
+     kw_AND = 260,
+     kw_OR = 261,
+     kw_IN = 262,
+     kw_TAILMATCH = 263,
+     NUMBER = 264,
+     STRING = 265,
+     IDENTIFIER = 266
+   };
+#endif
+/* Tokens.  */
+#define kw_TRUE 258
+#define kw_FALSE 259
+#define kw_AND 260
+#define kw_OR 261
+#define kw_IN 262
+#define kw_TAILMATCH 263
+#define NUMBER 264
+#define STRING 265
+#define IDENTIFIER 266
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
 #line 45 "sel-gram.c"
-typedef union {
+
     char *string;
     struct hx_expr *expr;
+
+
+
+/* Line 214 of yacc.c  */
+#line 150 "sel-gram.c"
 } YYSTYPE;
-#line 48 "sel-gram.c"
-#define kw_TRUE 257
-#define kw_FALSE 258
-#define kw_AND 259
-#define kw_OR 260
-#define kw_IN 261
-#define kw_TAILMATCH 262
-#define NUMBER 263
-#define STRING 264
-#define IDENTIFIER 265
-#define YYERRCODE 256
-static const short yylhs[] = {                           -1,
-    0,    1,    1,    1,    1,    1,    1,    1,    4,    4,
-    2,    2,    2,    2,    2,    3,    3,    3,    3,    5,
-    6,    7,    8,    9,    9,
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 162 "sel-gram.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  21
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   50
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  21
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  11
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  26
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  50
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   266
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    12,     2,     2,     2,    17,     2,     2,
+      13,    14,     2,     2,    15,     2,    20,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    16,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    18,     2,    19,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    12,    16,    20,    24,
+      26,    28,    32,    37,    42,    46,    52,    56,    58,    60,
+      62,    64,    66,    68,    73,    78,    82
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      22,     0,    -1,    23,    -1,     3,    -1,     4,    -1,    12,
+      23,    -1,    23,     5,    23,    -1,    23,     6,    23,    -1,
+      13,    23,    14,    -1,    25,    -1,    26,    -1,    26,    15,
+      24,    -1,    26,    16,    16,    26,    -1,    26,    12,    16,
+      26,    -1,    26,     8,    26,    -1,    26,     7,    13,    24,
+      14,    -1,    26,     7,    30,    -1,    27,    -1,    28,    -1,
+      29,    -1,    30,    -1,     9,    -1,    10,    -1,    11,    13,
+      24,    14,    -1,    17,    18,    31,    19,    -1,    11,    20,
+      31,    -1,    11,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    73,    73,    75,    76,    77,    78,    79,    80,    81,
+      84,    85,    88,    89,    90,    91,    92,    95,    96,    97,
+      98,   101,   102,   104,   107,   110,   112
 };
-static const short yylen[] = {                            2,
-    1,    1,    1,    2,    3,    3,    3,    1,    1,    3,
-    4,    4,    3,    5,    3,    1,    1,    1,    1,    1,
-    1,    4,    4,    3,    1,
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "kw_TRUE", "kw_FALSE", "kw_AND", "kw_OR",
+  "kw_IN", "kw_TAILMATCH", "NUMBER", "STRING", "IDENTIFIER", "'!'", "'('",
+  "')'", "','", "'='", "'%'", "'{'", "'}'", "'.'", "$accept", "start",
+  "expr", "words", "comp", "word", "number", "string", "function",
+  "variable", "variables", 0
 };
-static const short yydefred[] = {                         0,
-    2,    3,   20,   21,    0,    0,    0,    0,    0,    0,
-    8,    0,   16,   17,   18,   19,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,    7,    0,
-    0,    0,    0,    0,   15,   13,    0,    0,    0,   22,
-    0,   23,    0,   12,   11,   10,   24,   14,
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,    33,    40,    41,    44,    61,    37,   123,   125,
+      46
 };
-static const short yydgoto[] = {                          9,
-   10,   11,   12,   28,   13,   14,   15,   16,   31,
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    21,    22,    23,    23,    23,    23,    23,    23,    23,
+      24,    24,    25,    25,    25,    25,    25,    26,    26,    26,
+      26,    27,    28,    29,    30,    31,    31
 };
-static const short yysindex[] = {                       -33,
-    0,    0,    0,    0,  -23,  -33,  -33, -105,    0, -247,
-    0,  -28,    0,    0,    0,    0,  -36, -247,  -39, -244,
-  -33,  -33,  -26,  -36,  -38,  -37,  -22,  -16,    0,  -19,
-  -97, -247, -247,  -36,    0,    0,  -36,  -36,  -36,    0,
- -244,    0,   -9,    0,    0,    0,    0,    0,
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     2,     3,     3,     3,     1,
+       1,     3,     4,     4,     3,     5,     3,     1,     1,     1,
+       1,     1,     1,     4,     4,     3,     1
 };
-static const short yyrindex[] = {                         0,
-    0,    0,    0,    0,    0,    0,    0,    0,    0,   36,
-    0,    0,    0,    0,    0,    0,    0,    3,    0,    0,
-    0,    0,    0,    0,    0,    0,   -4,    0,    0,  -87,
-    0,    6,    8,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,    0,    0,    0,    0,
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     3,     4,    21,    22,     0,     0,     0,     0,     0,
+       2,     9,     0,    17,    18,    19,    20,     0,     5,     0,
+       0,     1,     0,     0,     0,     0,     0,     0,     0,    10,
+       8,    26,     0,     6,     7,     0,    16,    14,     0,     0,
+      23,     0,     0,    24,     0,    13,    12,    11,    25,    15
 };
-static const short yygindex[] = {                         0,
-   13,    0,   -8,  -24,    0,    0,    0,   16,   -1,
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     9,    10,    28,    11,    12,    13,    14,    15,    16,
+      32
 };
-#define YYTABLESIZE 234
-static const short yytable[] = {                          6,
-    8,   29,    4,    8,   25,    5,    7,    6,   27,   43,
-    8,   21,   22,   34,   46,   36,   17,   20,   18,   19,
-   30,   39,   37,   38,   40,   27,   41,   42,   44,   45,
-   27,   48,   26,   32,   33,    1,    9,   25,   35,   47,
-    0,    0,    0,    4,    0,    0,    5,    0,    6,    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,   21,
-   22,    0,    0,    1,    2,    0,    3,    4,    5,    3,
-    4,    5,   23,   24,
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -31
+static const yytype_int8 yypact[] =
+{
+      22,   -31,   -31,   -31,   -31,    -1,    22,    22,   -11,    27,
+      11,   -31,    -6,   -31,   -31,   -31,   -31,    19,    11,     9,
+      26,   -31,    22,    22,    -4,    19,    24,    25,    28,    23,
+     -31,    29,    31,    11,    11,    19,   -31,   -31,    19,    19,
+     -31,    19,    26,   -31,    30,   -31,   -31,   -31,   -31,   -31
 };
-static const short yycheck[] = {                         33,
-   37,   41,    0,   37,   33,    0,   40,    0,   17,   34,
-   37,  259,  260,   40,   39,   24,   40,  123,    6,    7,
-  265,   44,   61,   61,   41,   34,   46,  125,   37,   38,
-   39,   41,   61,   21,   22,    0,   41,  125,   23,   41,
-   -1,   -1,   -1,   41,   -1,   -1,   41,   -1,   41,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  259,
-  260,   -1,   -1,  257,  258,   -1,  263,  264,  265,  263,
-  264,  265,  261,  262,
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -31,   -31,    -3,   -30,   -31,   -17,   -31,   -31,   -31,    21,
+       1
 };
-#define YYFINAL 9
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 265
-#if YYDEBUG
-static const 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,"kw_TRUE","kw_FALSE","kw_AND","kw_OR","kw_IN","kw_TAILMATCH","NUMBER",
-"STRING","IDENTIFIER",
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+      29,    24,    25,    18,    19,    44,    26,    20,    37,    35,
+      27,    47,    17,     8,    22,    23,    22,    23,    29,    33,
+      34,    45,    46,    30,    29,     1,     2,    21,     3,     4,
+       5,     3,     4,     5,     6,     7,     8,    31,    41,     8,
+      38,    39,    40,    48,    49,    36,     0,     0,     0,    42,
+      43
 };
-static const char *yyrule[] = {
-"$accept : start",
-"start : expr",
-"expr : kw_TRUE",
-"expr : kw_FALSE",
-"expr : '!' expr",
-"expr : expr kw_AND expr",
-"expr : expr kw_OR expr",
-"expr : '(' expr ')'",
-"expr : comp",
-"words : word",
-"words : word ',' words",
-"comp : word '=' '=' word",
-"comp : word '!' '=' word",
-"comp : word kw_TAILMATCH word",
-"comp : word kw_IN '(' words ')'",
-"comp : word kw_IN variable",
-"word : number",
-"word : string",
-"word : function",
-"word : variable",
-"number : NUMBER",
-"string : STRING",
-"function : IDENTIFIER '(' words ')'",
-"variable : '%' '{' variables '}'",
-"variables : IDENTIFIER '.' variables",
-"variables : IDENTIFIER",
 
+static const yytype_int8 yycheck[] =
+{
+      17,     7,     8,     6,     7,    35,    12,    18,    25,    13,
+      16,    41,    13,    17,     5,     6,     5,     6,    35,    22,
+      23,    38,    39,    14,    41,     3,     4,     0,     9,    10,
+      11,     9,    10,    11,    12,    13,    17,    11,    15,    17,
+      16,    16,    14,    42,    14,    24,    -1,    -1,    -1,    20,
+      19
 };
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     3,     4,     9,    10,    11,    12,    13,    17,    22,
+      23,    25,    26,    27,    28,    29,    30,    13,    23,    23,
+      18,     0,     5,     6,     7,     8,    12,    16,    24,    26,
+      14,    11,    31,    23,    23,    13,    30,    26,    16,    16,
+      14,    15,    20,    19,    24,    26,    26,    24,    31,    14
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
 #endif
-#if YYDEBUG
-#include <stdio.h>
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 #endif
 
-/* define the initial stack-sizes */
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH  YYSTACKSIZE
-#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
 #else
-#define YYSTACKSIZE 500
-#define YYMAXDEPTH  500
-#endif
+# define YYLEX yylex ()
 #endif
 
-#define YYINITSTACKSIZE 500
+/* Enable debugging if requested.  */
+#if YYDEBUG
 
-int      yydebug;
-int      yynerrs;
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
 
-typedef struct {
-    unsigned stacksize;
-    short    *s_base;
-    short    *s_mark;
-    short    *s_last;
-    YYSTYPE  *l_base;
-    YYSTYPE  *l_mark;
-} YYSTACKDATA;
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
 
-#define YYPURE 0
 
-int      yyerrflag;
-int      yychar;
-YYSTYPE  yyval;
-YYSTYPE  yylval;
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
 
-/* variables for the parser stack */
-static YYSTACKDATA yystack;
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack(YYSTACKDATA *data)
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
 {
-    int i;
-    unsigned newsize;
-    short *newss;
-    YYSTYPE *newvs;
-
-    if ((newsize = data->stacksize) == 0)
-        newsize = YYINITSTACKSIZE;
-    else if (newsize >= YYMAXDEPTH)
-        return -1;
-    else if ((newsize *= 2) > YYMAXDEPTH)
-        newsize = YYMAXDEPTH;
-
-    i = data->s_mark - data->s_base;
-    newss = (data->s_base != 0)
-          ? (short *)realloc(data->s_base, newsize * sizeof(*newss))
-          : (short *)malloc(newsize * sizeof(*newss));
-    if (newss == 0)
-        return -1;
-
-    data->s_base  = newss;
-    data->s_mark = newss + i;
-
-    newvs = (data->l_base != 0)
-          ? (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs))
-          : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
-    if (newvs == 0)
-        return -1;
-
-    data->l_base = newvs;
-    data->l_mark = newvs + i;
-
-    data->stacksize = newsize;
-    data->s_last = data->s_base + newsize - 1;
-    return 0;
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
 }
 
-#if YYPURE || defined(YY_NO_LEAKS)
-static void yyfreestack(YYSTACKDATA *data)
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
 {
-    free(data->s_base);
-    free(data->l_base);
-    memset(data, 0, sizeof(*data));
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
 }
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
 #else
-#define yyfreestack(data) /* nothing */
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
 #endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
 
-#define YYABORT  goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR  goto yyerrlab
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
 
-int
-YYPARSE_DECL()
-{
-    int yym, yyn, yystate;
-#if YYDEBUG
-    const char *yys;
 
-    if ((yys = getenv("YYDEBUG")) != 0)
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
     {
-        yyn = *yys;
-        if (yyn >= '0' && yyn <= '9')
-            yydebug = yyn - '0';
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      YYFPRINTF (stderr, "\n");
     }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
 #endif
 
-    yynerrs = 0;
-    yyerrflag = 0;
-    yychar = YYEMPTY;
-    yystate = 0;
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
 
-#if YYPURE
-    memset(&yystack, 0, sizeof(yystack));
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
 #endif
 
-    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
-    yystack.s_mark = yystack.s_base;
-    yystack.l_mark = yystack.l_base;
-    yystate = 0;
-    *yystack.s_mark = 0;
+\f
 
-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);
-        }
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
 #endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
     }
-    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
     {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: state %d, shifting to state %d\n",
-                    YYPREFIX, yystate, yytable[yyn]);
-#endif
-        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-        {
-            goto yyoverflow;
-        }
-        yystate = yytable[yyn];
-        *++yystack.s_mark = yytable[yyn];
-        *++yystack.l_mark = yylval;
-        yychar = YYEMPTY;
-        if (yyerrflag > 0)  --yyerrflag;
-        goto yyloop;
+
+      default:
+       break;
     }
-    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
-            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
     {
-        yyn = yytable[yyn];
-        goto yyreduce;
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
     }
-    if (yyerrflag) goto yyinrecovery;
 
-    yyerror("syntax error");
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
 
-    goto yyerrlab;
+  if (yystate == YYFINAL)
+    YYACCEPT;
 
-yyerrlab:
-    ++yynerrs;
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
 
-yyinrecovery:
-    if (yyerrflag < 3)
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
     {
-        yyerrflag = 3;
-        for (;;)
-        {
-            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
-                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
-#endif
-                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
-                {
-                    goto yyoverflow;
-                }
-                yystate = yytable[yyn];
-                *++yystack.s_mark = yytable[yyn];
-                *++yystack.l_mark = yylval;
-                goto yyloop;
-            }
-            else
-            {
-#if YYDEBUG
-                if (yydebug)
-                    printf("%sdebug: error recovery discarding state %d\n",
-                            YYPREFIX, *yystack.s_mark);
-#endif
-                if (yystack.s_mark <= yystack.s_base) goto yyabort;
-                --yystack.s_mark;
-                --yystack.l_mark;
-            }
-        }
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
     }
-    else
+
+  if (yychar <= YYEOF)
     {
-        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;
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
     }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
 
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
 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 = yystack.l_mark[1-yym];
-    else
-        memset(&yyval, 0, sizeof yyval);
-    switch (yyn)
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
     {
-case 1:
+        case 2:
+
+/* Line 1455 of yacc.c  */
 #line 73 "sel-gram.c"
-       { _hx509_expr_input.expr = yystack.l_mark[0].expr; }
-break;
-case 2:
+    { _hx509_expr_input.expr = (yyvsp[(1) - (1)].expr); }
+    break;
+
+  case 3:
+
+/* Line 1455 of yacc.c  */
 #line 75 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_TRUE, NULL, NULL); }
-break;
-case 3:
+    { (yyval.expr) = _hx509_make_expr(op_TRUE, NULL, NULL); }
+    break;
+
+  case 4:
+
+/* Line 1455 of yacc.c  */
 #line 76 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_FALSE, NULL, NULL); }
-break;
-case 4:
+    { (yyval.expr) = _hx509_make_expr(op_FALSE, NULL, NULL); }
+    break;
+
+  case 5:
+
+/* Line 1455 of yacc.c  */
 #line 77 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_NOT, yystack.l_mark[0].expr, NULL); }
-break;
-case 5:
+    { (yyval.expr) = _hx509_make_expr(op_NOT, (yyvsp[(2) - (2)].expr), NULL); }
+    break;
+
+  case 6:
+
+/* Line 1455 of yacc.c  */
 #line 78 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_AND, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
-break;
-case 6:
+    { (yyval.expr) = _hx509_make_expr(op_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
 #line 79 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_OR, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
-break;
-case 7:
+    { (yyval.expr) = _hx509_make_expr(op_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
 #line 80 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[-1].expr; }
-break;
-case 8:
+    { (yyval.expr) = (yyvsp[(2) - (3)].expr); }
+    break;
+
+  case 9:
+
+/* Line 1455 of yacc.c  */
 #line 81 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(op_COMP, yystack.l_mark[0].expr, NULL); }
-break;
-case 9:
+    { (yyval.expr) = _hx509_make_expr(op_COMP, (yyvsp[(1) - (1)].expr), NULL); }
+    break;
+
+  case 10:
+
+/* Line 1455 of yacc.c  */
 #line 84 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(expr_WORDS, yystack.l_mark[0].expr, NULL); }
-break;
-case 10:
+    { (yyval.expr) = _hx509_make_expr(expr_WORDS, (yyvsp[(1) - (1)].expr), NULL); }
+    break;
+
+  case 11:
+
+/* Line 1455 of yacc.c  */
 #line 85 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(expr_WORDS, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
-break;
-case 11:
+    { (yyval.expr) = _hx509_make_expr(expr_WORDS, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 12:
+
+/* Line 1455 of yacc.c  */
 #line 88 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(comp_EQ, yystack.l_mark[-3].expr, yystack.l_mark[0].expr); }
-break;
-case 12:
+    { (yyval.expr) = _hx509_make_expr(comp_EQ, (yyvsp[(1) - (4)].expr), (yyvsp[(4) - (4)].expr)); }
+    break;
+
+  case 13:
+
+/* Line 1455 of yacc.c  */
 #line 89 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(comp_NE, yystack.l_mark[-3].expr, yystack.l_mark[0].expr); }
-break;
-case 13:
+    { (yyval.expr) = _hx509_make_expr(comp_NE, (yyvsp[(1) - (4)].expr), (yyvsp[(4) - (4)].expr)); }
+    break;
+
+  case 14:
+
+/* Line 1455 of yacc.c  */
 #line 90 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(comp_TAILEQ, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
-break;
-case 14:
+    { (yyval.expr) = _hx509_make_expr(comp_TAILEQ, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 15:
+
+/* Line 1455 of yacc.c  */
 #line 91 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(comp_IN, yystack.l_mark[-4].expr, yystack.l_mark[-1].expr); }
-break;
-case 15:
+    { (yyval.expr) = _hx509_make_expr(comp_IN, (yyvsp[(1) - (5)].expr), (yyvsp[(4) - (5)].expr)); }
+    break;
+
+  case 16:
+
+/* Line 1455 of yacc.c  */
 #line 92 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(comp_IN, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
-break;
-case 16:
+    { (yyval.expr) = _hx509_make_expr(comp_IN, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
 #line 95 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[0].expr; }
-break;
-case 17:
+    { (yyval.expr) = (yyvsp[(1) - (1)].expr); }
+    break;
+
+  case 18:
+
+/* Line 1455 of yacc.c  */
 #line 96 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[0].expr; }
-break;
-case 18:
+    { (yyval.expr) = (yyvsp[(1) - (1)].expr); }
+    break;
+
+  case 19:
+
+/* Line 1455 of yacc.c  */
 #line 97 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[0].expr; }
-break;
-case 19:
+    { (yyval.expr) = (yyvsp[(1) - (1)].expr); }
+    break;
+
+  case 20:
+
+/* Line 1455 of yacc.c  */
 #line 98 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[0].expr; }
-break;
-case 20:
+    { (yyval.expr) = (yyvsp[(1) - (1)].expr); }
+    break;
+
+  case 21:
+
+/* Line 1455 of yacc.c  */
 #line 101 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(expr_NUMBER, yystack.l_mark[0].string, NULL); }
-break;
-case 21:
+    { (yyval.expr) = _hx509_make_expr(expr_NUMBER, (yyvsp[(1) - (1)].string), NULL); }
+    break;
+
+  case 22:
+
+/* Line 1455 of yacc.c  */
 #line 102 "sel-gram.c"
-       { yyval.expr = _hx509_make_expr(expr_STRING, yystack.l_mark[0].string, NULL); }
-break;
-case 22:
+    { (yyval.expr) = _hx509_make_expr(expr_STRING, (yyvsp[(1) - (1)].string), NULL); }
+    break;
+
+  case 23:
+
+/* Line 1455 of yacc.c  */
 #line 104 "sel-gram.c"
-       {
-                       yyval.expr = _hx509_make_expr(expr_FUNCTION, yystack.l_mark[-3].string, yystack.l_mark[-1].expr); }
-break;
-case 23:
+    {
+                       (yyval.expr) = _hx509_make_expr(expr_FUNCTION, (yyvsp[(1) - (4)].string), (yyvsp[(3) - (4)].expr)); }
+    break;
+
+  case 24:
+
+/* Line 1455 of yacc.c  */
 #line 107 "sel-gram.c"
-       { yyval.expr = yystack.l_mark[-1].expr; }
-break;
-case 24:
+    { (yyval.expr) = (yyvsp[(3) - (4)].expr); }
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
 #line 110 "sel-gram.c"
-       {
-                       yyval.expr = _hx509_make_expr(expr_VAR, yystack.l_mark[-2].string, yystack.l_mark[0].expr); }
-break;
-case 25:
+    {
+                       (yyval.expr) = _hx509_make_expr(expr_VAR, (yyvsp[(1) - (3)].string), (yyvsp[(3) - (3)].expr)); }
+    break;
+
+  case 26:
+
+/* Line 1455 of yacc.c  */
 #line 112 "sel-gram.c"
+    {
+                       (yyval.expr) = _hx509_make_expr(expr_VAR, (yyvsp[(1) - (1)].string), NULL); }
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 1563 "sel-gram.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
        {
-                       yyval.expr = _hx509_make_expr(expr_VAR, yystack.l_mark[0].string, NULL); }
-break;
-#line 541 "sel-gram.c"
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
     }
-    yystack.s_mark -= yym;
-    yystate = *yystack.s_mark;
-    yystack.l_mark -= yym;
-    yym = yylhs[yyn];
-    if (yystate == 0 && yym == 0)
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
     {
-#if YYDEBUG
-        if (yydebug)
-            printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
-        yystate = YYFINAL;
-        *++yystack.s_mark = YYFINAL;
-        *++yystack.l_mark = 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;
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
     }
-    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, *yystack.s_mark, yystate);
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
 #endif
-    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
     {
-        goto yyoverflow;
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
     }
-    *++yystack.s_mark = (short) yystate;
-    *++yystack.l_mark = yyval;
-    goto yyloop;
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
 
-yyoverflow:
-    yyerror("yacc stack overflow");
 
-yyabort:
-    yyfreestack(&yystack);
-    return (1);
 
-yyaccept:
-    yyfreestack(&yystack);
-    return (0);
-}
index aa9642795dc5658c8f94b24a1d5d97d255d36da5..b609523b11a16b0f41574abe7ca62f4d1e196672 100644 (file)
@@ -1,14 +1,89 @@
-#define kw_TRUE 257
-#define kw_FALSE 258
-#define kw_AND 259
-#define kw_OR 260
-#define kw_IN 261
-#define kw_TAILMATCH 262
-#define NUMBER 263
-#define STRING 264
-#define IDENTIFIER 265
-typedef union {
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kw_TRUE = 258,
+     kw_FALSE = 259,
+     kw_AND = 260,
+     kw_OR = 261,
+     kw_IN = 262,
+     kw_TAILMATCH = 263,
+     NUMBER = 264,
+     STRING = 265,
+     IDENTIFIER = 266
+   };
+#endif
+/* Tokens.  */
+#define kw_TRUE 258
+#define kw_FALSE 259
+#define kw_AND 260
+#define kw_OR 261
+#define kw_IN 262
+#define kw_TAILMATCH 263
+#define NUMBER 264
+#define STRING 265
+#define IDENTIFIER 266
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 1676 of yacc.c  */
+#line 45 "sel-gram.c"
+
     char *string;
     struct hx_expr *expr;
+
+
+
+/* Line 1676 of yacc.c  */
+#line 81 "sel-gram.c"
 } YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
 extern YYSTYPE yylval;
+
+
index eacb68b43d5d894e0845201601174ffe0370743d..49090a67a2fcc15289b06d618469cf8740d84c5d 100644 (file)
@@ -54,7 +54,6 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -85,6 +84,8 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -141,7 +142,15 @@ typedef unsigned int flex_uint32_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -535,7 +544,7 @@ struct hx_expr_input _hx509_expr_input;
 
 #undef ECHO
 
-#line 538 "sel-lex.c"
+#line 547 "sel-lex.c"
 
 #define INITIAL 0
 
@@ -616,7 +625,12 @@ static int input (void );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -635,7 +649,7 @@ static int input (void );
        if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
                { \
                int c = '*'; \
-               unsigned n; \
+               size_t n; \
                for ( n = 0; n < max_size && \
                             (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
                        buf[n] = (char) c; \
@@ -720,7 +734,7 @@ YY_DECL
 #line 68 "sel-lex.l"
 
 
-#line 723 "sel-lex.c"
+#line 737 "sel-lex.c"
 
        if ( !(yy_init) )
                {
@@ -867,7 +881,7 @@ YY_RULE_SETUP
 #line 85 "sel-lex.l"
 ECHO;
        YY_BREAK
-#line 870 "sel-lex.c"
+#line 884 "sel-lex.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -1625,8 +1639,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * 
  * @return the newly allocated buffer state object.
  */
index 4748fa1d0fad1d2dbbd0fda78779431f11721985..b05198c42c5d350e815cca42118ad2a19f236a05 100644 (file)
@@ -4,7 +4,6 @@ HEIMDAL_X509_1.2 {
        global:
                _hx509_cert_assign_key;
                _hx509_cert_private_key;
-               _hx509_cert_public_encrypt;
                _hx509_certs_keys_free;
                _hx509_certs_keys_get;
                _hx509_expr_eval;
@@ -17,24 +16,12 @@ HEIMDAL_X509_1.2 {
                _hx509_generate_private_key_is_ca;
                _hx509_map_file_os;
                _hx509_name_from_Name;
-               _hx509_parse_private_key;
-               _hx509_private_key_assign_rsa;
-               _hx509_private_key2SPKI;
-               _hx509_private_key_free;
-               _hx509_private_key_init;
-               _hx509_private_key_private_decrypt;
                _hx509_private_key_ref;
                _hx509_request_add_dns_name;
                _hx509_request_add_email;
-               _hx509_request_free;
-               _hx509_request_get_SubjectPublicKeyInfo;
-               _hx509_request_get_name;
-               _hx509_request_init;
                _hx509_request_parse;
                _hx509_request_print;
-               _hx509_request_set_SubjectPublicKeyInfo;
                _hx509_request_set_email;
-               _hx509_request_set_name;
                _hx509_request_to_pkcs10;
                _hx509_request_to_pkcs10;
                _hx509_unmap_file_os;
@@ -87,6 +74,7 @@ HEIMDAL_X509_1.2 {
                hx509_cert_init;
                hx509_cert_init_data;
                hx509_cert_keyusage_print;
+               hx509_cert_public_encrypt;
                hx509_cert_ref;
                hx509_cert_set_friendly_name;
                hx509_certs_add;
@@ -180,6 +168,7 @@ HEIMDAL_X509_1.2 {
                hx509_oid_print;
                hx509_oid_sprint;
                hx509_parse_name;
+               hx509_parse_private_key;
                hx509_peer_info_add_cms_alg;
                hx509_peer_info_alloc;
                hx509_peer_info_free;
@@ -192,6 +181,11 @@ HEIMDAL_X509_1.2 {
                hx509_pem_write;
                hx509_print_stdout;
                hx509_print_cert;
+               hx509_private_key_assign_rsa;
+               hx509_private_key_free;
+               hx509_private_key_private_decrypt;
+               hx509_private_key_init;
+               hx509_private_key2SPKI;
                hx509_prompt_hidden;
                hx509_query_alloc;
                hx509_query_free;
@@ -203,6 +197,12 @@ HEIMDAL_X509_1.2 {
                hx509_query_match_option;
                hx509_query_statistic_file;
                hx509_query_unparse_stats;
+               hx509_request_get_name;
+               hx509_request_get_SubjectPublicKeyInfo;
+               hx509_request_free;
+               hx509_request_init;
+               hx509_request_set_name;
+               hx509_request_set_SubjectPublicKeyInfo;
                hx509_revoke_add_crl;
                hx509_revoke_add_ocsp;
                hx509_revoke_free;
index d4e48d26c7671776f2b614f00a72ea1e2275f984..b6c6870938465990535241d0ee5643c1c3ffabeb 100644 (file)
@@ -317,7 +317,7 @@ kt_ops_copy(krb5_context context, const krb5_context src_context)
     return 0;
 }
 
-static const char *sysplugin_dirs[] =  {
+static const char *sysplugin_dirs[] =  { 
     LIBDIR "/plugin/krb5",
 #ifdef __APPLE__
     "/Library/KerberosPlugins/KerberosFrameworkPlugins",
@@ -332,7 +332,7 @@ init_context_once(void *ctx)
     krb5_context context = ctx;
 
     _krb5_load_plugins(context, "krb5", sysplugin_dirs);
-
+    
     bindtextdomain(HEIMDAL_TEXTDOMAIN, HEIMDAL_LOCALEDIR);
 }
 
index 25c675c90044c15eba9a1d90c994f6a556615ebc..e8facd85dd412bf5b74ff31930e2339c70cd8489 100644 (file)
  * AES
  */
 
-static struct key_type keytype_aes128 = {
+static struct _krb5_key_type keytype_aes128 = {
     KEYTYPE_AES128,
     "aes-128",
     128,
     16,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     NULL,
     _krb5_evp_schedule,
     _krb5_AES_salt,
@@ -51,12 +51,12 @@ static struct key_type keytype_aes128 = {
     EVP_aes_128_cbc
 };
 
-static struct key_type keytype_aes256 = {
+static struct _krb5_key_type keytype_aes256 = {
     KEYTYPE_AES256,
     "aes-256",
     256,
     32,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     NULL,
     _krb5_evp_schedule,
     _krb5_AES_salt,
@@ -65,7 +65,7 @@ static struct key_type keytype_aes256 = {
     EVP_aes_256_cbc
 };
 
-struct checksum_type _krb5_checksum_hmac_sha1_aes128 = {
+struct _krb5_checksum_type _krb5_checksum_hmac_sha1_aes128 = {
     CKSUMTYPE_HMAC_SHA1_96_AES_128,
     "hmac-sha1-96-aes128",
     64,
@@ -75,7 +75,7 @@ struct checksum_type _krb5_checksum_hmac_sha1_aes128 = {
     NULL
 };
 
-struct checksum_type _krb5_checksum_hmac_sha1_aes256 = {
+struct _krb5_checksum_type _krb5_checksum_hmac_sha1_aes256 = {
     CKSUMTYPE_HMAC_SHA1_96_AES_256,
     "hmac-sha1-96-aes256",
     64,
@@ -91,7 +91,7 @@ AES_PRF(krb5_context context,
        const krb5_data *in,
        krb5_data *out)
 {
-    struct checksum_type *ct = crypto->et->checksum;
+    struct _krb5_checksum_type *ct = crypto->et->checksum;
     krb5_error_code ret;
     Checksum result;
     krb5_keyblock *derived;
@@ -139,7 +139,7 @@ AES_PRF(krb5_context context,
     return ret;
 }
 
-struct encryption_type _krb5_enctype_aes128_cts_hmac_sha1 = {
+struct _krb5_encryption_type _krb5_enctype_aes128_cts_hmac_sha1 = {
     ETYPE_AES128_CTS_HMAC_SHA1_96,
     "aes128-cts-hmac-sha1-96",
     16,
@@ -154,7 +154,7 @@ struct encryption_type _krb5_enctype_aes128_cts_hmac_sha1 = {
     AES_PRF
 };
 
-struct encryption_type _krb5_enctype_aes256_cts_hmac_sha1 = {
+struct _krb5_encryption_type _krb5_enctype_aes256_cts_hmac_sha1 = {
     ETYPE_AES256_CTS_HMAC_SHA1_96,
     "aes256-cts-hmac-sha1-96",
     16,
index 5e468f360a68ce474f2d1f1578959736b8bf43fc..ed31377bd0702d05f60fc2527c713bb3749b78c9 100644 (file)
@@ -37,7 +37,7 @@
 #define DES3_OLD_ENCTYPE 1
 #endif
 
-struct checksum_type *_krb5_checksum_types[] = {
+struct _krb5_checksum_type *_krb5_checksum_types[] = {
     &_krb5_checksum_none,
 #ifdef HEIM_WEAK_CRYPTO
     &_krb5_checksum_crc32,
@@ -63,7 +63,7 @@ int _krb5_num_checksums
  * these should currently be in reverse preference order.
  * (only relevant for !F_PSEUDO) */
 
-struct encryption_type *_krb5_etypes[] = {
+struct _krb5_encryption_type *_krb5_etypes[] = {
     &_krb5_enctype_aes256_cts_hmac_sha1,
     &_krb5_enctype_aes128_cts_hmac_sha1,
     &_krb5_enctype_des3_cbc_sha1,
index d098561474c440fd92feea54bdfe4b73042df61b..82769aea621cf4275d5780298c17a1d704dd75f6 100644 (file)
 
 #include "krb5_locl.h"
 
-static struct key_type keytype_arcfour = {
+static struct _krb5_key_type keytype_arcfour = {
     KEYTYPE_ARCFOUR,
     "arcfour",
     128,
     16,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     NULL,
     _krb5_evp_schedule,
     _krb5_arcfour_salt,
@@ -57,17 +57,17 @@ static struct key_type keytype_arcfour = {
 
 krb5_error_code
 _krb5_HMAC_MD5_checksum(krb5_context context,
-                       struct key_data *key,
+                       struct _krb5_key_data *key,
                        const void *data,
                        size_t len,
                        unsigned usage,
                        Checksum *result)
 {
     EVP_MD_CTX *m;
-    struct checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
+    struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
     const char signature[] = "signaturekey";
     Checksum ksign_c;
-    struct key_data ksign;
+    struct _krb5_key_data ksign;
     krb5_keyblock kb;
     unsigned char t[4];
     unsigned char tmp[16];
@@ -105,7 +105,7 @@ _krb5_HMAC_MD5_checksum(krb5_context context,
     return 0;
 }
 
-struct checksum_type _krb5_checksum_hmac_md5 = {
+struct _krb5_checksum_type _krb5_checksum_hmac_md5 = {
     CKSUMTYPE_HMAC_MD5,
     "hmac-md5",
     64,
@@ -123,16 +123,16 @@ struct checksum_type _krb5_checksum_hmac_md5 = {
 
 static krb5_error_code
 ARCFOUR_subencrypt(krb5_context context,
-                  struct key_data *key,
+                  struct _krb5_key_data *key,
                   void *data,
                   size_t len,
                   unsigned usage,
                   void *ivec)
 {
     EVP_CIPHER_CTX ctx;
-    struct checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
+    struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
     Checksum k1_c, k2_c, k3_c, cksum;
-    struct key_data ke;
+    struct _krb5_key_data ke;
     krb5_keyblock kb;
     unsigned char t[4];
     unsigned char *cdata = data;
@@ -190,16 +190,16 @@ ARCFOUR_subencrypt(krb5_context context,
 
 static krb5_error_code
 ARCFOUR_subdecrypt(krb5_context context,
-                  struct key_data *key,
+                  struct _krb5_key_data *key,
                   void *data,
                   size_t len,
                   unsigned usage,
                   void *ivec)
 {
     EVP_CIPHER_CTX ctx;
-    struct checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
+    struct _krb5_checksum_type *c = _krb5_find_checksum (CKSUMTYPE_RSA_MD5);
     Checksum k1_c, k2_c, k3_c, cksum;
-    struct key_data ke;
+    struct _krb5_key_data ke;
     krb5_keyblock kb;
     unsigned char t[4];
     unsigned char *cdata = data;
@@ -290,7 +290,7 @@ _krb5_usage2arcfour(krb5_context context, unsigned *usage)
 
 static krb5_error_code
 ARCFOUR_encrypt(krb5_context context,
-               struct key_data *key,
+               struct _krb5_key_data *key,
                void *data,
                size_t len,
                krb5_boolean encryptp,
@@ -309,7 +309,7 @@ ARCFOUR_encrypt(krb5_context context,
        return ARCFOUR_subdecrypt (context, key, data, len, keyusage, ivec);
 }
 
-struct encryption_type _krb5_enctype_arcfour_hmac_md5 = {
+struct _krb5_encryption_type _krb5_enctype_arcfour_hmac_md5 = {
     ETYPE_ARCFOUR_HMAC_MD5,
     "arcfour-hmac-md5",
     1,
index 82d344f28ffe45d5baa9fbe5dde6dc5db7d0b45e..f8313952dc7ca7da878123debc16b56287e694ce 100644 (file)
@@ -57,12 +57,12 @@ _krb5_xor (DES_cblock *key, const unsigned char *b)
 krb5_error_code
 _krb5_des_checksum(krb5_context context,
                   const EVP_MD *evp_md,
-                  struct key_data *key,
+                  struct _krb5_key_data *key,
                   const void *data,
                   size_t len,
                   Checksum *cksum)
 {
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     EVP_MD_CTX *m;
     DES_cblock ivec;
     unsigned char *p = cksum->checksum.data;
@@ -90,12 +90,12 @@ _krb5_des_checksum(krb5_context context,
 krb5_error_code
 _krb5_des_verify(krb5_context context,
                 const EVP_MD *evp_md,
-                struct key_data *key,
+                struct _krb5_key_data *key,
                 const void *data,
                 size_t len,
                 Checksum *C)
 {
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     EVP_MD_CTX *m;
     unsigned char tmp[24];
     unsigned char res[16];
@@ -130,7 +130,7 @@ _krb5_des_verify(krb5_context context,
 
 static krb5_error_code
 RSA_MD5_checksum(krb5_context context,
-                struct key_data *key,
+                struct _krb5_key_data *key,
                 const void *data,
                 size_t len,
                 unsigned usage,
@@ -141,7 +141,7 @@ RSA_MD5_checksum(krb5_context context,
     return 0;
 }
 
-struct checksum_type _krb5_checksum_rsa_md5 = {
+struct _krb5_checksum_type _krb5_checksum_rsa_md5 = {
     CKSUMTYPE_RSA_MD5,
     "rsa-md5",
     64,
index f6c09ba40c85d9667b2b4321d9b572488e8f35d4..1c062b5e612d5c3f77e88e6ce33be68664d6a59a 100644 (file)
@@ -49,8 +49,8 @@ krb5_DES_random_key(krb5_context context,
 
 static void
 krb5_DES_schedule_old(krb5_context context,
-                     struct key_type *kt,
-                     struct key_data *key)
+                     struct _krb5_key_type *kt,
+                     struct _krb5_key_data *key)
 {
     DES_set_key_unchecked(key->key->keyvalue.data, key->schedule->data);
 }
@@ -68,7 +68,7 @@ krb5_DES_random_to_key(krb5_context context,
        _krb5_xor(k, (const unsigned char*)"\0\0\0\0\0\0\0\xf0");
 }
 
-static struct key_type keytype_des_old = {
+static struct _krb5_key_type keytype_des_old = {
     KEYTYPE_DES,
     "des-old",
     56,
@@ -80,12 +80,12 @@ static struct key_type keytype_des_old = {
     krb5_DES_random_to_key
 };
 
-static struct key_type keytype_des = {
+static struct _krb5_key_type keytype_des = {
     KEYTYPE_DES,
     "des",
     56,
     8,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     krb5_DES_random_key,
     _krb5_evp_schedule,
     _krb5_des_salt,
@@ -96,7 +96,7 @@ static struct key_type keytype_des = {
 
 static krb5_error_code
 CRC32_checksum(krb5_context context,
-              struct key_data *key,
+              struct _krb5_key_data *key,
               const void *data,
               size_t len,
               unsigned usage,
@@ -115,7 +115,7 @@ CRC32_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD4_checksum(krb5_context context,
-                struct key_data *key,
+                struct _krb5_key_data *key,
                 const void *data,
                 size_t len,
                 unsigned usage,
@@ -128,7 +128,7 @@ RSA_MD4_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD4_DES_checksum(krb5_context context,
-                    struct key_data *key,
+                    struct _krb5_key_data *key,
                     const void *data,
                     size_t len,
                     unsigned usage,
@@ -139,7 +139,7 @@ RSA_MD4_DES_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD4_DES_verify(krb5_context context,
-                  struct key_data *key,
+                  struct _krb5_key_data *key,
                   const void *data,
                   size_t len,
                   unsigned usage,
@@ -150,7 +150,7 @@ RSA_MD4_DES_verify(krb5_context context,
 
 static krb5_error_code
 RSA_MD5_DES_checksum(krb5_context context,
-                    struct key_data *key,
+                    struct _krb5_key_data *key,
                     const void *data,
                     size_t len,
                     unsigned usage,
@@ -161,7 +161,7 @@ RSA_MD5_DES_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD5_DES_verify(krb5_context context,
-                  struct key_data *key,
+                  struct _krb5_key_data *key,
                   const void *data,
                   size_t len,
                   unsigned usage,
@@ -170,7 +170,7 @@ RSA_MD5_DES_verify(krb5_context context,
     return _krb5_des_verify(context, EVP_md5(), key, data, len, C);
 }
 
-struct checksum_type _krb5_checksum_crc32 = {
+struct _krb5_checksum_type _krb5_checksum_crc32 = {
     CKSUMTYPE_CRC32,
     "crc32",
     1,
@@ -180,7 +180,7 @@ struct checksum_type _krb5_checksum_crc32 = {
     NULL
 };
 
-struct checksum_type _krb5_checksum_rsa_md4 = {
+struct _krb5_checksum_type _krb5_checksum_rsa_md4 = {
     CKSUMTYPE_RSA_MD4,
     "rsa-md4",
     64,
@@ -190,7 +190,7 @@ struct checksum_type _krb5_checksum_rsa_md4 = {
     NULL
 };
 
-struct checksum_type _krb5_checksum_rsa_md4_des = {
+struct _krb5_checksum_type _krb5_checksum_rsa_md4_des = {
     CKSUMTYPE_RSA_MD4_DES,
     "rsa-md4-des",
     64,
@@ -200,7 +200,7 @@ struct checksum_type _krb5_checksum_rsa_md4_des = {
     RSA_MD4_DES_verify
 };
 
-struct checksum_type _krb5_checksum_rsa_md5_des = {
+struct _krb5_checksum_type _krb5_checksum_rsa_md5_des = {
     CKSUMTYPE_RSA_MD5_DES,
     "rsa-md5-des",
     64,
@@ -212,14 +212,14 @@ struct checksum_type _krb5_checksum_rsa_md5_des = {
 
 static krb5_error_code
 evp_des_encrypt_null_ivec(krb5_context context,
-                         struct key_data *key,
+                         struct _krb5_key_data *key,
                          void *data,
                          size_t len,
                          krb5_boolean encryptp,
                          int usage,
                          void *ignore_ivec)
 {
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     EVP_CIPHER_CTX *c;
     DES_cblock ivec;
     memset(&ivec, 0, sizeof(ivec));
@@ -231,14 +231,14 @@ evp_des_encrypt_null_ivec(krb5_context context,
 
 static krb5_error_code
 evp_des_encrypt_key_ivec(krb5_context context,
-                        struct key_data *key,
+                        struct _krb5_key_data *key,
                         void *data,
                         size_t len,
                         krb5_boolean encryptp,
                         int usage,
                         void *ignore_ivec)
 {
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     EVP_CIPHER_CTX *c;
     DES_cblock ivec;
     memcpy(&ivec, key->key->keyvalue.data, sizeof(ivec));
@@ -250,7 +250,7 @@ evp_des_encrypt_key_ivec(krb5_context context,
 
 static krb5_error_code
 DES_CFB64_encrypt_null_ivec(krb5_context context,
-                           struct key_data *key,
+                           struct _krb5_key_data *key,
                            void *data,
                            size_t len,
                            krb5_boolean encryptp,
@@ -268,7 +268,7 @@ DES_CFB64_encrypt_null_ivec(krb5_context context,
 
 static krb5_error_code
 DES_PCBC_encrypt_key_ivec(krb5_context context,
-                         struct key_data *key,
+                         struct _krb5_key_data *key,
                          void *data,
                          size_t len,
                          krb5_boolean encryptp,
@@ -283,7 +283,7 @@ DES_PCBC_encrypt_key_ivec(krb5_context context,
     return 0;
 }
 
-struct encryption_type _krb5_enctype_des_cbc_crc = {
+struct _krb5_encryption_type _krb5_enctype_des_cbc_crc = {
     ETYPE_DES_CBC_CRC,
     "des-cbc-crc",
     8,
@@ -298,7 +298,7 @@ struct encryption_type _krb5_enctype_des_cbc_crc = {
     NULL
 };
 
-struct encryption_type _krb5_enctype_des_cbc_md4 = {
+struct _krb5_encryption_type _krb5_enctype_des_cbc_md4 = {
     ETYPE_DES_CBC_MD4,
     "des-cbc-md4",
     8,
@@ -313,7 +313,7 @@ struct encryption_type _krb5_enctype_des_cbc_md4 = {
     NULL
 };
 
-struct encryption_type _krb5_enctype_des_cbc_md5 = {
+struct _krb5_encryption_type _krb5_enctype_des_cbc_md5 = {
     ETYPE_DES_CBC_MD5,
     "des-cbc-md5",
     8,
@@ -328,7 +328,7 @@ struct encryption_type _krb5_enctype_des_cbc_md5 = {
     NULL
 };
 
-struct encryption_type _krb5_enctype_des_cbc_none = {
+struct _krb5_encryption_type _krb5_enctype_des_cbc_none = {
     ETYPE_DES_CBC_NONE,
     "des-cbc-none",
     8,
@@ -343,7 +343,7 @@ struct encryption_type _krb5_enctype_des_cbc_none = {
     NULL
 };
 
-struct encryption_type _krb5_enctype_des_cfb64_none = {
+struct _krb5_encryption_type _krb5_enctype_des_cfb64_none = {
     ETYPE_DES_CFB64_NONE,
     "des-cfb64-none",
     1,
@@ -358,7 +358,7 @@ struct encryption_type _krb5_enctype_des_cfb64_none = {
     NULL
 };
 
-struct encryption_type _krb5_enctype_des_pcbc_none = {
+struct _krb5_encryption_type _krb5_enctype_des_pcbc_none = {
     ETYPE_DES_PCBC_NONE,
     "des-pcbc-none",
     8,
index 1ff692b5209ebdf42ad7af271d38f8fe2711174d..b61948895a97010d6cbd6390e46391e428d51530 100644 (file)
@@ -54,12 +54,12 @@ DES3_random_key(krb5_context context,
 
 
 #ifdef DES3_OLD_ENCTYPE
-static struct key_type keytype_des3 = {
+static struct _krb5_key_type keytype_des3 = {
     KEYTYPE_DES3,
     "des3",
     168,
     24,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     DES3_random_key,
     _krb5_evp_schedule,
     _krb5_des3_salt,
@@ -69,12 +69,12 @@ static struct key_type keytype_des3 = {
 };
 #endif
 
-static struct key_type keytype_des3_derived = {
+static struct _krb5_key_type keytype_des3_derived = {
     KEYTYPE_DES3,
     "des3",
     168,
     24,
-    sizeof(struct evp_schedule),
+    sizeof(struct _krb5_evp_schedule),
     DES3_random_key,
     _krb5_evp_schedule,
     _krb5_des3_salt_derived,
@@ -86,7 +86,7 @@ static struct key_type keytype_des3_derived = {
 #ifdef DES3_OLD_ENCTYPE
 static krb5_error_code
 RSA_MD5_DES3_checksum(krb5_context context,
-                     struct key_data *key,
+                     struct _krb5_key_data *key,
                      const void *data,
                      size_t len,
                      unsigned usage,
@@ -97,7 +97,7 @@ RSA_MD5_DES3_checksum(krb5_context context,
 
 static krb5_error_code
 RSA_MD5_DES3_verify(krb5_context context,
-                   struct key_data *key,
+                   struct _krb5_key_data *key,
                    const void *data,
                    size_t len,
                    unsigned usage,
@@ -106,7 +106,7 @@ RSA_MD5_DES3_verify(krb5_context context,
     return _krb5_des_verify(context, EVP_md5(), key, data, len, C);
 }
 
-struct checksum_type _krb5_checksum_rsa_md5_des3 = {
+struct _krb5_checksum_type _krb5_checksum_rsa_md5_des3 = {
     CKSUMTYPE_RSA_MD5_DES3,
     "rsa-md5-des3",
     64,
@@ -117,7 +117,7 @@ struct checksum_type _krb5_checksum_rsa_md5_des3 = {
 };
 #endif
 
-struct checksum_type _krb5_checksum_hmac_sha1_des3 = {
+struct _krb5_checksum_type _krb5_checksum_hmac_sha1_des3 = {
     CKSUMTYPE_HMAC_SHA1_DES3,
     "hmac-sha1-des3",
     64,
@@ -128,7 +128,7 @@ struct checksum_type _krb5_checksum_hmac_sha1_des3 = {
 };
 
 #ifdef DES3_OLD_ENCTYPE
-struct encryption_type _krb5_enctype_des3_cbc_md5 = {
+struct _krb5_encryption_type _krb5_enctype_des3_cbc_md5 = {
     ETYPE_DES3_CBC_MD5,
     "des3-cbc-md5",
     8,
@@ -144,7 +144,7 @@ struct encryption_type _krb5_enctype_des3_cbc_md5 = {
 };
 #endif
 
-struct encryption_type _krb5_enctype_des3_cbc_sha1 = {
+struct _krb5_encryption_type _krb5_enctype_des3_cbc_sha1 = {
     ETYPE_DES3_CBC_SHA1,
     "des3-cbc-sha1",
     8,
@@ -160,7 +160,7 @@ struct encryption_type _krb5_enctype_des3_cbc_sha1 = {
 };
 
 #ifdef DES3_OLD_ENCTYPE
-struct encryption_type _krb5_enctype_old_des3_cbc_sha1 = {
+struct _krb5_encryption_type _krb5_enctype_old_des3_cbc_sha1 = {
     ETYPE_OLD_DES3_CBC_SHA1,
     "old-des3-cbc-sha1",
     8,
@@ -176,7 +176,7 @@ struct encryption_type _krb5_enctype_old_des3_cbc_sha1 = {
 };
 #endif
 
-struct encryption_type _krb5_enctype_des3_cbc_none = {
+struct _krb5_encryption_type _krb5_enctype_des3_cbc_none = {
     ETYPE_DES3_CBC_NONE,
     "des3-cbc-none",
     8,
index 69d1e2679d88a4665ad74d8d799a86e3ff9f17d5..3f9cd57bbcfab3bea13107b1cb2b17b11dce5150 100644 (file)
 
 void
 _krb5_evp_schedule(krb5_context context,
-                  struct key_type *kt,
-                  struct key_data *kd)
+                  struct _krb5_key_type *kt,
+                  struct _krb5_key_data *kd)
 {
-    struct evp_schedule *key = kd->schedule->data;
+    struct _krb5_evp_schedule *key = kd->schedule->data;
     const EVP_CIPHER *c = (*kt->evp)();
 
     EVP_CIPHER_CTX_init(&key->ectx);
@@ -49,23 +49,23 @@ _krb5_evp_schedule(krb5_context context,
 }
 
 void
-_krb5_evp_cleanup(krb5_context context, struct key_data *kd)
+_krb5_evp_cleanup(krb5_context context, struct _krb5_key_data *kd)
 {
-    struct evp_schedule *key = kd->schedule->data;
+    struct _krb5_evp_schedule *key = kd->schedule->data;
     EVP_CIPHER_CTX_cleanup(&key->ectx);
     EVP_CIPHER_CTX_cleanup(&key->dctx);
 }
 
 krb5_error_code
 _krb5_evp_encrypt(krb5_context context,
-               struct key_data *key,
+               struct _krb5_key_data *key,
                void *data,
                size_t len,
                krb5_boolean encryptp,
                int usage,
                void *ivec)
 {
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     EVP_CIPHER_CTX *c;
     c = encryptp ? &ctx->ectx : &ctx->dctx;
     if (ivec == NULL) {
@@ -89,7 +89,7 @@ static const unsigned char zero_ivec[EVP_MAX_BLOCK_LENGTH] = { 0 };
 
 krb5_error_code
 _krb5_evp_encrypt_cts(krb5_context context,
-                     struct key_data *key,
+                     struct _krb5_key_data *key,
                      void *data,
                      size_t len,
                      krb5_boolean encryptp,
@@ -97,7 +97,7 @@ _krb5_evp_encrypt_cts(krb5_context context,
                      void *ivec)
 {
     size_t i, blocksize;
-    struct evp_schedule *ctx = key->schedule->data;
+    struct _krb5_evp_schedule *ctx = key->schedule->data;
     char tmp[EVP_MAX_BLOCK_LENGTH], ivec2[EVP_MAX_BLOCK_LENGTH];
     EVP_CIPHER_CTX *c;
     unsigned char *p;
index 3a5c6b6cb3fa86f445b99ed31d166417e2a485fc..69d0e7c34e37d010215eed69c4b22e4501abfb33 100644 (file)
@@ -37,7 +37,7 @@
 #define DES3_OLD_ENCTYPE 1
 #endif
 
-static struct key_type keytype_null = {
+static struct _krb5_key_type keytype_null = {
     KEYTYPE_NULL,
     "null",
     0,
@@ -50,7 +50,7 @@ static struct key_type keytype_null = {
 
 static krb5_error_code
 NONE_checksum(krb5_context context,
-             struct key_data *key,
+             struct _krb5_key_data *key,
              const void *data,
              size_t len,
              unsigned usage,
@@ -59,7 +59,7 @@ NONE_checksum(krb5_context context,
     return 0;
 }
 
-struct checksum_type _krb5_checksum_none = {
+struct _krb5_checksum_type _krb5_checksum_none = {
     CKSUMTYPE_NONE,
     "none",
     1,
@@ -71,7 +71,7 @@ struct checksum_type _krb5_checksum_none = {
 
 static krb5_error_code
 NULL_encrypt(krb5_context context,
-            struct key_data *key,
+            struct _krb5_key_data *key,
             void *data,
             size_t len,
             krb5_boolean encryptp,
@@ -81,7 +81,7 @@ NULL_encrypt(krb5_context context,
     return 0;
 }
 
-struct encryption_type _krb5_enctype_null = {
+struct _krb5_encryption_type _krb5_enctype_null = {
     ETYPE_NULL,
     "null",
     1,
index 21e729c9e10530dc40d7a21b33e717e369772beb..eb783c8998b3aebfba103e442f917c33ba6802eb 100644 (file)
@@ -44,7 +44,7 @@ _krb5_pk_octetstring2key(krb5_context context,
                         const heim_octet_string *k_n,
                         krb5_keyblock *key)
 {
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
     krb5_error_code ret;
     size_t keylen, offset;
     void *keydata;
@@ -205,7 +205,7 @@ _krb5_pk_kdf(krb5_context context,
             const Ticket *ticket,
             krb5_keyblock *key)
 {
-    struct encryption_type *et;
+    struct _krb5_encryption_type *et;
     krb5_error_code ret;
     krb5_data other;
     size_t keylen, offset;
index aa417e15eb5b0cd4ae7c91b9ba049901992c26c5..5d274e9af7a28d5f4ea638f8899b76717786b0a6 100644 (file)
 
 #include "krb5_locl.h"
 
+struct _krb5_key_usage {
+    unsigned usage;
+    struct _krb5_key_data key;
+};
+
+
 #ifndef HEIMDAL_SMALLER
 #define DES3_OLD_ENCTYPE 1
 #endif
 
 static krb5_error_code _get_derived_key(krb5_context, krb5_crypto,
-                                       unsigned, struct key_data**);
-static struct key_data *_new_derived_key(krb5_crypto crypto, unsigned usage);
+                                       unsigned, struct _krb5_key_data**);
+static struct _krb5_key_data *_new_derived_key(krb5_crypto crypto, unsigned usage);
 
 static void free_key_schedule(krb5_context,
-                             struct key_data *,
-                             struct encryption_type *);
+                             struct _krb5_key_data *,
+                             struct _krb5_encryption_type *);
 
 /************************************************************
  *                                                          *
@@ -56,7 +62,7 @@ krb5_enctype_keysize(krb5_context context,
                     krb5_enctype type,
                     size_t *keysize)
 {
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
     if(et == NULL) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
                               N_("encryption type %d not supported", ""),
@@ -72,7 +78,7 @@ krb5_enctype_keybits(krb5_context context,
                     krb5_enctype type,
                     size_t *keybits)
 {
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
     if(et == NULL) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
                               "encryption type %d not supported",
@@ -89,7 +95,7 @@ krb5_generate_random_keyblock(krb5_context context,
                              krb5_keyblock *key)
 {
     krb5_error_code ret;
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
     if(et == NULL) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
                               N_("encryption type %d not supported", ""),
@@ -110,11 +116,11 @@ krb5_generate_random_keyblock(krb5_context context,
 
 static krb5_error_code
 _key_schedule(krb5_context context,
-             struct key_data *key)
+             struct _krb5_key_data *key)
 {
     krb5_error_code ret;
-    struct encryption_type *et = _krb5_find_enctype(key->key->keytype);
-    struct key_type *kt;
+    struct _krb5_encryption_type *et = _krb5_find_enctype(key->key->keytype);
+    struct _krb5_key_type *kt;
 
     if (et == NULL) {
        krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
@@ -150,7 +156,7 @@ _key_schedule(krb5_context context,
 
 static krb5_error_code
 SHA1_checksum(krb5_context context,
-             struct key_data *key,
+             struct _krb5_key_data *key,
              const void *data,
              size_t len,
              unsigned usage,
@@ -164,11 +170,11 @@ SHA1_checksum(krb5_context context,
 /* HMAC according to RFC2104 */
 krb5_error_code
 _krb5_internal_hmac(krb5_context context,
-                   struct checksum_type *cm,
+                   struct _krb5_checksum_type *cm,
                    const void *data,
                    size_t len,
                    unsigned usage,
-                   struct key_data *keyblock,
+                   struct _krb5_key_data *keyblock,
                    Checksum *result)
 {
     unsigned char *ipad, *opad;
@@ -228,8 +234,8 @@ krb5_hmac(krb5_context context,
          krb5_keyblock *key,
          Checksum *result)
 {
-    struct checksum_type *c = _krb5_find_checksum(cktype);
-    struct key_data kd;
+    struct _krb5_checksum_type *c = _krb5_find_checksum(cktype);
+    struct _krb5_key_data kd;
     krb5_error_code ret;
 
     if (c == NULL) {
@@ -252,13 +258,13 @@ krb5_hmac(krb5_context context,
 
 krb5_error_code
 _krb5_SP_HMAC_SHA1_checksum(krb5_context context,
-                           struct key_data *key,
+                           struct _krb5_key_data *key,
                            const void *data,
                            size_t len,
                            unsigned usage,
                            Checksum *result)
 {
-    struct checksum_type *c = _krb5_find_checksum(CKSUMTYPE_SHA1);
+    struct _krb5_checksum_type *c = _krb5_find_checksum(CKSUMTYPE_SHA1);
     Checksum res;
     char sha1_data[20];
     krb5_error_code ret;
@@ -273,7 +279,7 @@ _krb5_SP_HMAC_SHA1_checksum(krb5_context context,
     return 0;
 }
 
-struct checksum_type _krb5_checksum_sha1 = {
+struct _krb5_checksum_type _krb5_checksum_sha1 = {
     CKSUMTYPE_SHA1,
     "sha1",
     64,
@@ -283,7 +289,7 @@ struct checksum_type _krb5_checksum_sha1 = {
     NULL
 };
 
-struct checksum_type *
+struct _krb5_checksum_type *
 _krb5_find_checksum(krb5_cksumtype type)
 {
     int i;
@@ -297,8 +303,8 @@ static krb5_error_code
 get_checksum_key(krb5_context context,
                 krb5_crypto crypto,
                 unsigned usage,  /* not krb5_key_usage */
-                struct checksum_type *ct,
-                struct key_data **key)
+                struct _krb5_checksum_type *ct,
+                struct _krb5_key_data **key)
 {
     krb5_error_code ret = 0;
 
@@ -327,7 +333,7 @@ get_checksum_key(krb5_context context,
 
 static krb5_error_code
 create_checksum (krb5_context context,
-                struct checksum_type *ct,
+                struct _krb5_checksum_type *ct,
                 krb5_crypto crypto,
                 unsigned usage,
                 void *data,
@@ -335,7 +341,7 @@ create_checksum (krb5_context context,
                 Checksum *result)
 {
     krb5_error_code ret;
-    struct key_data *dkey;
+    struct _krb5_key_data *dkey;
     int keyed_checksum;
 
     if (ct->flags & F_DISABLED) {
@@ -364,7 +370,7 @@ create_checksum (krb5_context context,
 }
 
 static int
-arcfour_checksum_p(struct checksum_type *ct, krb5_crypto crypto)
+arcfour_checksum_p(struct _krb5_checksum_type *ct, krb5_crypto crypto)
 {
     return (ct->type == CKSUMTYPE_HMAC_MD5) &&
        (crypto->key.key->keytype == KEYTYPE_ARCFOUR);
@@ -379,7 +385,7 @@ krb5_create_checksum(krb5_context context,
                     size_t len,
                     Checksum *result)
 {
-    struct checksum_type *ct = NULL;
+    struct _krb5_checksum_type *ct = NULL;
     unsigned keyusage;
 
     /* type 0 -> pick from crypto */
@@ -417,10 +423,10 @@ verify_checksum(krb5_context context,
                Checksum *cksum)
 {
     krb5_error_code ret;
-    struct key_data *dkey;
+    struct _krb5_key_data *dkey;
     int keyed_checksum;
     Checksum c;
-    struct checksum_type *ct;
+    struct _krb5_checksum_type *ct;
 
     ct = _krb5_find_checksum(cksum->cksumtype);
     if (ct == NULL || (ct->flags & F_DISABLED)) {
@@ -441,7 +447,7 @@ verify_checksum(krb5_context context,
     }
     keyed_checksum = (ct->flags & F_KEYED) != 0;
     if(keyed_checksum) {
-       struct checksum_type *kct;
+       struct _krb5_checksum_type *kct;
        if (crypto == NULL) {
            krb5_set_error_message(context, KRB5_PROG_SUMTYPE_NOSUPP,
                                   N_("Checksum type %s is keyed but no "
@@ -511,7 +517,7 @@ krb5_verify_checksum(krb5_context context,
                     size_t len,
                     Checksum *cksum)
 {
-    struct checksum_type *ct;
+    struct _krb5_checksum_type *ct;
     unsigned keyusage;
 
     ct = _krb5_find_checksum(cksum->cksumtype);
@@ -537,7 +543,7 @@ krb5_crypto_get_checksum_type(krb5_context context,
                               krb5_crypto crypto,
                              krb5_cksumtype *type)
 {
-    struct checksum_type *ct = NULL;
+    struct _krb5_checksum_type *ct = NULL;
 
     if (crypto != NULL) {
         ct = crypto->et->keyed_checksum;
@@ -562,7 +568,7 @@ krb5_checksumsize(krb5_context context,
                  krb5_cksumtype type,
                  size_t *size)
 {
-    struct checksum_type *ct = _krb5_find_checksum(type);
+    struct _krb5_checksum_type *ct = _krb5_find_checksum(type);
     if(ct == NULL) {
        krb5_set_error_message (context, KRB5_PROG_SUMTYPE_NOSUPP,
                                N_("checksum type %d not supported", ""),
@@ -577,7 +583,7 @@ KRB5_LIB_FUNCTION krb5_boolean KRB5_LIB_CALL
 krb5_checksum_is_keyed(krb5_context context,
                       krb5_cksumtype type)
 {
-    struct checksum_type *ct = _krb5_find_checksum(type);
+    struct _krb5_checksum_type *ct = _krb5_find_checksum(type);
     if(ct == NULL) {
        if (context)
            krb5_set_error_message (context, KRB5_PROG_SUMTYPE_NOSUPP,
@@ -592,7 +598,7 @@ KRB5_LIB_FUNCTION krb5_boolean KRB5_LIB_CALL
 krb5_checksum_is_collision_proof(krb5_context context,
                                 krb5_cksumtype type)
 {
-    struct checksum_type *ct = _krb5_find_checksum(type);
+    struct _krb5_checksum_type *ct = _krb5_find_checksum(type);
     if(ct == NULL) {
        if (context)
            krb5_set_error_message (context, KRB5_PROG_SUMTYPE_NOSUPP,
@@ -607,7 +613,7 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
 krb5_checksum_disable(krb5_context context,
                      krb5_cksumtype type)
 {
-    struct checksum_type *ct = _krb5_find_checksum(type);
+    struct _krb5_checksum_type *ct = _krb5_find_checksum(type);
     if(ct == NULL) {
        if (context)
            krb5_set_error_message (context, KRB5_PROG_SUMTYPE_NOSUPP,
@@ -623,7 +629,7 @@ krb5_checksum_disable(krb5_context context,
  *                                                          *
  ************************************************************/
 
-struct encryption_type *
+struct _krb5_encryption_type *
 _krb5_find_enctype(krb5_enctype type)
 {
     int i;
@@ -639,7 +645,7 @@ krb5_enctype_to_string(krb5_context context,
                       krb5_enctype etype,
                       char **string)
 {
-    struct encryption_type *e;
+    struct _krb5_encryption_type *e;
     e = _krb5_find_enctype(etype);
     if(e == NULL) {
        krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
@@ -678,7 +684,7 @@ krb5_enctype_to_keytype(krb5_context context,
                        krb5_enctype etype,
                        krb5_keytype *keytype)
 {
-    struct encryption_type *e = _krb5_find_enctype(etype);
+    struct _krb5_encryption_type *e = _krb5_find_enctype(etype);
     if(e == NULL) {
        krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
                                N_("encryption type %d not supported", ""),
@@ -693,7 +699,7 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
 krb5_enctype_valid(krb5_context context,
                   krb5_enctype etype)
 {
-    struct encryption_type *e = _krb5_find_enctype(etype);
+    struct _krb5_encryption_type *e = _krb5_find_enctype(etype);
     if(e == NULL) {
        krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
                                N_("encryption type %d not supported", ""),
@@ -751,7 +757,7 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
 krb5_cksumtype_valid(krb5_context context,
                     krb5_cksumtype ctype)
 {
-    struct checksum_type *c = _krb5_find_checksum(ctype);
+    struct _krb5_checksum_type *c = _krb5_find_checksum(ctype);
     if (c == NULL) {
        krb5_set_error_message (context, KRB5_PROG_SUMTYPE_NOSUPP,
                                N_("checksum type %d not supported", ""),
@@ -798,8 +804,8 @@ encrypt_internal_derived(krb5_context context,
     Checksum cksum;
     unsigned char *p, *q;
     krb5_error_code ret;
-    struct key_data *dkey;
-    const struct encryption_type *et = crypto->et;
+    struct _krb5_key_data *dkey;
+    const struct _krb5_encryption_type *et = crypto->et;
 
     checksum_sz = CHECKSUMSIZE(et->keyed_checksum);
 
@@ -864,7 +870,7 @@ encrypt_internal(krb5_context context,
     Checksum cksum;
     unsigned char *p, *q;
     krb5_error_code ret;
-    const struct encryption_type *et = crypto->et;
+    const struct _krb5_encryption_type *et = crypto->et;
 
     checksum_sz = CHECKSUMSIZE(et->checksum);
 
@@ -926,7 +932,7 @@ encrypt_internal_special(krb5_context context,
                         krb5_data *result,
                         void *ivec)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t cksum_sz = CHECKSUMSIZE(et->checksum);
     size_t sz = len + cksum_sz + et->confoundersize;
     char *tmp, *p;
@@ -967,8 +973,8 @@ decrypt_internal_derived(krb5_context context,
     Checksum cksum;
     unsigned char *p;
     krb5_error_code ret;
-    struct key_data *dkey;
-    struct encryption_type *et = crypto->et;
+    struct _krb5_key_data *dkey;
+    struct _krb5_encryption_type *et = crypto->et;
     unsigned long l;
 
     checksum_sz = CHECKSUMSIZE(et->keyed_checksum);
@@ -1047,7 +1053,7 @@ decrypt_internal(krb5_context context,
     unsigned char *p;
     Checksum cksum;
     size_t checksum_sz, l;
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
 
     if ((len % et->padsize) != 0) {
        krb5_clear_error_message(context);
@@ -1112,7 +1118,7 @@ decrypt_internal_special(krb5_context context,
                         krb5_data *result,
                         void *ivec)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t cksum_sz = CHECKSUMSIZE(et->checksum);
     size_t sz = len - cksum_sz - et->confoundersize;
     unsigned char *p;
@@ -1201,8 +1207,8 @@ krb5_encrypt_iov_ivec(krb5_context context,
     Checksum cksum;
     unsigned char *p, *q;
     krb5_error_code ret;
-    struct key_data *dkey;
-    const struct encryption_type *et = crypto->et;
+    struct _krb5_key_data *dkey;
+    const struct _krb5_encryption_type *et = crypto->et;
     krb5_crypto_iov *tiv, *piv, *hiv;
 
     if (num_data < 0) {
@@ -1393,8 +1399,8 @@ krb5_decrypt_iov_ivec(krb5_context context,
     Checksum cksum;
     unsigned char *p, *q;
     krb5_error_code ret;
-    struct key_data *dkey;
-    struct encryption_type *et = crypto->et;
+    struct _krb5_key_data *dkey;
+    struct _krb5_encryption_type *et = crypto->et;
     krb5_crypto_iov *tiv, *hiv;
 
     if (num_data < 0) {
@@ -1619,7 +1625,7 @@ krb5_verify_checksum_iov(krb5_context context,
                         unsigned int num_data,
                         krb5_cksumtype *type)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     Checksum cksum;
     krb5_crypto_iov *civ;
     krb5_error_code ret;
@@ -1833,15 +1839,15 @@ krb5_decrypt_EncryptedData(krb5_context context,
 
 krb5_error_code
 _krb5_derive_key(krb5_context context,
-                struct encryption_type *et,
-                struct key_data *key,
+                struct _krb5_encryption_type *et,
+                struct _krb5_key_data *key,
                 const void *constant,
                 size_t len)
 {
     unsigned char *k = NULL;
     unsigned int nblocks = 0, i;
     krb5_error_code ret = 0;
-    struct key_type *kt = et->keytype;
+    struct _krb5_key_type *kt = et->keytype;
 
     ret = _key_schedule(context, key);
     if(ret)
@@ -1923,10 +1929,10 @@ _krb5_derive_key(krb5_context context,
     return ret;
 }
 
-static struct key_data *
+static struct _krb5_key_data *
 _new_derived_key(krb5_crypto crypto, unsigned usage)
 {
-    struct key_usage *d = crypto->key_usage;
+    struct _krb5_key_usage *d = crypto->key_usage;
     d = realloc(d, (crypto->num_key_usage + 1) * sizeof(*d));
     if(d == NULL)
        return NULL;
@@ -1946,8 +1952,8 @@ krb5_derive_key(krb5_context context,
                krb5_keyblock **derived_key)
 {
     krb5_error_code ret;
-    struct encryption_type *et;
-    struct key_data d;
+    struct _krb5_encryption_type *et;
+    struct _krb5_key_data d;
 
     *derived_key = NULL;
 
@@ -1975,10 +1981,10 @@ static krb5_error_code
 _get_derived_key(krb5_context context,
                 krb5_crypto crypto,
                 unsigned usage,
-                struct key_data **key)
+                struct _krb5_key_data **key)
 {
     int i;
-    struct key_data *d;
+    struct _krb5_key_data *d;
     unsigned char constant[5];
 
     for(i = 0; i < crypto->num_key_usage; i++)
@@ -2060,8 +2066,8 @@ krb5_crypto_init(krb5_context context,
 
 static void
 free_key_schedule(krb5_context context,
-                 struct key_data *key,
-                 struct encryption_type *et)
+                 struct _krb5_key_data *key,
+                 struct _krb5_encryption_type *et)
 {
     if (et->keytype->cleanup)
        (*et->keytype->cleanup)(context, key);
@@ -2070,8 +2076,8 @@ free_key_schedule(krb5_context context,
 }
 
 void
-_krb5_free_key_data(krb5_context context, struct key_data *key,
-             struct encryption_type *et)
+_krb5_free_key_data(krb5_context context, struct _krb5_key_data *key,
+             struct _krb5_encryption_type *et)
 {
     krb5_free_keyblock(context, key->key);
     if(key->schedule) {
@@ -2081,8 +2087,8 @@ _krb5_free_key_data(krb5_context context, struct key_data *key,
 }
 
 static void
-free_key_usage(krb5_context context, struct key_usage *ku,
-              struct encryption_type *et)
+free_key_usage(krb5_context context, struct _krb5_key_usage *ku,
+              struct _krb5_encryption_type *et)
 {
     _krb5_free_key_data(context, &ku->key, et);
 }
@@ -2212,7 +2218,7 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
 krb5_enctype_disable(krb5_context context,
                     krb5_enctype enctype)
 {
-    struct encryption_type *et = _krb5_find_enctype(enctype);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(enctype);
     if(et == NULL) {
        if (context)
            krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
@@ -2239,7 +2245,7 @@ KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
 krb5_enctype_enable(krb5_context context,
                    krb5_enctype enctype)
 {
-    struct encryption_type *et = _krb5_find_enctype(enctype);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(enctype);
     if(et == NULL) {
        if (context)
            krb5_set_error_message (context, KRB5_PROG_ETYPE_NOSUPP,
@@ -2283,7 +2289,7 @@ wrapped_length (krb5_context context,
                krb5_crypto  crypto,
                size_t       data_len)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t padsize = et->padsize;
     size_t checksumsize = CHECKSUMSIZE(et->checksum);
     size_t res;
@@ -2298,7 +2304,7 @@ wrapped_length_dervied (krb5_context context,
                        krb5_crypto  crypto,
                        size_t       data_len)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t padsize = et->padsize;
     size_t res;
 
@@ -2334,7 +2340,7 @@ static size_t
 crypto_overhead (krb5_context context,
                 krb5_crypto  crypto)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t res;
 
     res = CHECKSUMSIZE(et->checksum);
@@ -2348,7 +2354,7 @@ static size_t
 crypto_overhead_dervied (krb5_context context,
                         krb5_crypto  crypto)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
     size_t res;
 
     if (et->keyed_checksum)
@@ -2395,7 +2401,7 @@ krb5_random_to_key(krb5_context context,
                   krb5_keyblock *key)
 {
     krb5_error_code ret;
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
     if(et == NULL) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
                               N_("encryption type %d not supported", ""),
@@ -2429,7 +2435,7 @@ krb5_crypto_prf_length(krb5_context context,
                       krb5_enctype type,
                       size_t *length)
 {
-    struct encryption_type *et = _krb5_find_enctype(type);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(type);
 
     if(et == NULL || et->prf_length == 0) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
@@ -2448,7 +2454,7 @@ krb5_crypto_prf(krb5_context context,
                const krb5_data *input,
                krb5_data *output)
 {
-    struct encryption_type *et = crypto->et;
+    struct _krb5_encryption_type *et = crypto->et;
 
     krb5_data_zero(output);
 
@@ -2640,8 +2646,8 @@ krb5_enctypes_compatible_keys(krb5_context context,
                              krb5_enctype etype1,
                              krb5_enctype etype2)
 {
-    struct encryption_type *e1 = _krb5_find_enctype(etype1);
-    struct encryption_type *e2 = _krb5_find_enctype(etype2);
+    struct _krb5_encryption_type *e1 = _krb5_find_enctype(etype1);
+    struct _krb5_encryption_type *e2 = _krb5_find_enctype(etype2);
     return e1 != NULL && e2 != NULL && e1->keytype == e2->keytype;
 }
 
index c57221b1e663e7db8b7ad85e7ede8b1ce5580120..bf945875b900841262ea4a8d4211fb642f38fa73 100644 (file)
 #define DES3_OLD_ENCTYPE 1
 #endif
 
-struct key_data {
+struct _krb5_key_data {
     krb5_keyblock *key;
     krb5_data *schedule;
 };
 
-struct key_usage {
-    unsigned usage;
-    struct key_data key;
-};
+struct _krb5_key_usage;
 
 struct krb5_crypto_data {
-    struct encryption_type *et;
-    struct key_data key;
+    struct _krb5_encryption_type *et;
+    struct _krb5_key_data key;
     int num_key_usage;
-    struct key_usage *key_usage;
+    struct _krb5_key_usage *key_usage;
 };
 
 #define CRYPTO_ETYPE(C) ((C)->et->type)
@@ -71,50 +68,50 @@ struct salt_type {
                                     krb5_salt, krb5_data, krb5_keyblock*);
 };
 
-struct key_type {
+struct _krb5_key_type {
     krb5_keytype type; /* XXX */
     const char *name;
     size_t bits;
     size_t size;
     size_t schedule_size;
     void (*random_key)(krb5_context, krb5_keyblock*);
-    void (*schedule)(krb5_context, struct key_type *, struct key_data *);
+    void (*schedule)(krb5_context, struct _krb5_key_type *, struct _krb5_key_data *);
     struct salt_type *string_to_key;
     void (*random_to_key)(krb5_context, krb5_keyblock*, const void*, size_t);
-    void (*cleanup)(krb5_context, struct key_data *);
+    void (*cleanup)(krb5_context, struct _krb5_key_data *);
     const EVP_CIPHER *(*evp)(void);
 };
 
-struct checksum_type {
+struct _krb5_checksum_type {
     krb5_cksumtype type;
     const char *name;
     size_t blocksize;
     size_t checksumsize;
     unsigned flags;
     krb5_error_code (*checksum)(krb5_context context,
-                               struct key_data *key,
+                               struct _krb5_key_data *key,
                                const void *buf, size_t len,
                                unsigned usage,
                                Checksum *csum);
     krb5_error_code (*verify)(krb5_context context,
-                             struct key_data *key,
+                             struct _krb5_key_data *key,
                              const void *buf, size_t len,
                              unsigned usage,
                              Checksum *csum);
 };
 
-struct encryption_type {
+struct _krb5_encryption_type {
     krb5_enctype type;
     const char *name;
     size_t blocksize;
     size_t padsize;
     size_t confoundersize;
-    struct key_type *keytype;
-    struct checksum_type *checksum;
-    struct checksum_type *keyed_checksum;
+    struct _krb5_key_type *keytype;
+    struct _krb5_checksum_type *checksum;
+    struct _krb5_checksum_type *keyed_checksum;
     unsigned flags;
     krb5_error_code (*encrypt)(krb5_context context,
-                              struct key_data *key,
+                              struct _krb5_key_data *key,
                               void *data, size_t len,
                               krb5_boolean encryptp,
                               int usage,
@@ -130,20 +127,20 @@ struct encryption_type {
 
 /* Checksums */
 
-extern struct checksum_type _krb5_checksum_none;
-extern struct checksum_type _krb5_checksum_crc32;
-extern struct checksum_type _krb5_checksum_rsa_md4;
-extern struct checksum_type _krb5_checksum_rsa_md4_des;
-extern struct checksum_type _krb5_checksum_rsa_md5_des;
-extern struct checksum_type _krb5_checksum_rsa_md5_des3;
-extern struct checksum_type _krb5_checksum_rsa_md5;
-extern struct checksum_type _krb5_checksum_hmac_sha1_des3;
-extern struct checksum_type _krb5_checksum_hmac_sha1_aes128;
-extern struct checksum_type _krb5_checksum_hmac_sha1_aes256;
-extern struct checksum_type _krb5_checksum_hmac_md5;
-extern struct checksum_type _krb5_checksum_sha1;
-
-extern struct checksum_type *_krb5_checksum_types[];
+extern struct _krb5_checksum_type _krb5_checksum_none;
+extern struct _krb5_checksum_type _krb5_checksum_crc32;
+extern struct _krb5_checksum_type _krb5_checksum_rsa_md4;
+extern struct _krb5_checksum_type _krb5_checksum_rsa_md4_des;
+extern struct _krb5_checksum_type _krb5_checksum_rsa_md5_des;
+extern struct _krb5_checksum_type _krb5_checksum_rsa_md5_des3;
+extern struct _krb5_checksum_type _krb5_checksum_rsa_md5;
+extern struct _krb5_checksum_type _krb5_checksum_hmac_sha1_des3;
+extern struct _krb5_checksum_type _krb5_checksum_hmac_sha1_aes128;
+extern struct _krb5_checksum_type _krb5_checksum_hmac_sha1_aes256;
+extern struct _krb5_checksum_type _krb5_checksum_hmac_md5;
+extern struct _krb5_checksum_type _krb5_checksum_sha1;
+
+extern struct _krb5_checksum_type *_krb5_checksum_types[];
 extern int _krb5_num_checksums;
 
 /* Salts */
@@ -156,27 +153,27 @@ extern struct salt_type _krb5_des3_salt_derived[];
 
 /* Encryption types */
 
-extern struct encryption_type _krb5_enctype_aes256_cts_hmac_sha1;
-extern struct encryption_type _krb5_enctype_aes128_cts_hmac_sha1;
-extern struct encryption_type _krb5_enctype_des3_cbc_sha1;
-extern struct encryption_type _krb5_enctype_des3_cbc_md5;
-extern struct encryption_type _krb5_enctype_des3_cbc_none;
-extern struct encryption_type _krb5_enctype_arcfour_hmac_md5;
-extern struct encryption_type _krb5_enctype_des_cbc_md5;
-extern struct encryption_type _krb5_enctype_old_des3_cbc_sha1;
-extern struct encryption_type _krb5_enctype_des_cbc_crc;
-extern struct encryption_type _krb5_enctype_des_cbc_md4;
-extern struct encryption_type _krb5_enctype_des_cbc_md5;
-extern struct encryption_type _krb5_enctype_des_cbc_none;
-extern struct encryption_type _krb5_enctype_des_cfb64_none;
-extern struct encryption_type _krb5_enctype_des_pcbc_none;
-extern struct encryption_type _krb5_enctype_null;
-
-extern struct encryption_type *_krb5_etypes[];
+extern struct _krb5_encryption_type _krb5_enctype_aes256_cts_hmac_sha1;
+extern struct _krb5_encryption_type _krb5_enctype_aes128_cts_hmac_sha1;
+extern struct _krb5_encryption_type _krb5_enctype_des3_cbc_sha1;
+extern struct _krb5_encryption_type _krb5_enctype_des3_cbc_md5;
+extern struct _krb5_encryption_type _krb5_enctype_des3_cbc_none;
+extern struct _krb5_encryption_type _krb5_enctype_arcfour_hmac_md5;
+extern struct _krb5_encryption_type _krb5_enctype_des_cbc_md5;
+extern struct _krb5_encryption_type _krb5_enctype_old_des3_cbc_sha1;
+extern struct _krb5_encryption_type _krb5_enctype_des_cbc_crc;
+extern struct _krb5_encryption_type _krb5_enctype_des_cbc_md4;
+extern struct _krb5_encryption_type _krb5_enctype_des_cbc_md5;
+extern struct _krb5_encryption_type _krb5_enctype_des_cbc_none;
+extern struct _krb5_encryption_type _krb5_enctype_des_cfb64_none;
+extern struct _krb5_encryption_type _krb5_enctype_des_pcbc_none;
+extern struct _krb5_encryption_type _krb5_enctype_null;
+
+extern struct _krb5_encryption_type *_krb5_etypes[];
 extern int _krb5_num_etypes;
 
 /* Interface to the EVP crypto layer provided by hcrypto */
-struct evp_schedule {
+struct _krb5_evp_schedule {
     EVP_CIPHER_CTX ectx;
     EVP_CIPHER_CTX dctx;
 };
index e06d4a12bedc8e7909678d4f073bac22f85fa566..7f2b57247d73264ce6cf7764aaf1b78d52434403 100644 (file)
@@ -734,7 +734,7 @@ get_cred_kdc_capath_worker(krb5_context context,
                            krb5_creds *in_creds,
                            krb5_const_realm try_realm,
                            krb5_principal impersonate_principal,
-                           Ticket *second_ticket,
+                           Ticket *second_ticket,                      
                            krb5_creds **out_creds,
                            krb5_creds ***ret_tgts)
 {
@@ -860,7 +860,7 @@ get_cred_kdc_capath_worker(krb5_context context,
     }
     krb5_free_creds(context, tgt);
     return ret;
-}
+}                           
 
 /*
 get_cred(server)
@@ -883,7 +883,7 @@ get_cred_kdc_capath(krb5_context context,
                    krb5_ccache ccache,
                    krb5_creds *in_creds,
                    krb5_principal impersonate_principal,
-                   Ticket *second_ticket,
+                   Ticket *second_ticket,                      
                    krb5_creds **out_creds,
                    krb5_creds ***ret_tgts)
 {
index e06077453305fd691312ad74d14af2da24edded9..96c0bce2738fd1e41a2e1f1c9ea6400ec2c44431 100644 (file)
@@ -78,8 +78,9 @@
  *   and/or temporary data not to be stored on disk. The type's name
  *   is MEMORY. Each MEMORY keytab is referenced counted by and
  *   opened by the residual name, so two handles can point to the
- *   same memory area.  When the last user closes the entry, it
- *   disappears.
+ *   same memory area.  When the last user closes using krb5_kt_close()
+ *   the keytab, the keys in they keytab is memset() to zero and freed
+ *   and can no longer be looked up by name.
  *
  *
  * @subsection krb5_keytab_example Keytab example
index dd579f973bd63bb90c53940a8ef75564f3bd2b14..8d671e3d36c43acb69c577cdc6496b4ca875c3b2 100644 (file)
@@ -241,6 +241,8 @@ typedef enum krb5_key_usage {
     /* Encryption of the SAM-NONCE-OR-SAD field */
     KRB5_KU_PA_PKINIT_KX = 44,
     /* Encryption type of the kdc session contribution in pk-init */
+    KRB5_KU_AS_REQ = 56,
+    /* Checksum of over the AS-REQ send by the KDC in PA-REQ-ENC-PA-REP */
     KRB5_KU_DIGEST_ENCRYPT = -18,
     /* Encryption key usage used in the digest encryption field */
     KRB5_KU_DIGEST_OPAQUE = -19,
index db2428f95b5ebb305abc32ee710642aad9ba51ce..046a89cc6a544c1347547c14c181cc5d5836f92c 100644 (file)
@@ -87,7 +87,7 @@ HMAC_MD5_any_checksum(krb5_context context,
                      unsigned usage,
                      Checksum *result)
 {
-    struct key_data local_key;
+    struct _krb5_key_data local_key;
     krb5_error_code ret;
 
     memset(&local_key, 0, sizeof(local_key));
@@ -106,7 +106,7 @@ HMAC_MD5_any_checksum(krb5_context context,
     ret = _krb5_HMAC_MD5_checksum(context, &local_key, data, len, usage, result);
     if (ret)
        krb5_data_free(&result->checksum);
-
+    
     krb5_free_keyblock(context, local_key.key);
     return ret;
 }
index 8aff72ec85c48842b4fb19c352d1cccf7b733ee9..ea47e13a7b99084aee83191b9f78d9d87093ce83 100644 (file)
@@ -379,7 +379,7 @@ _krb5_plugin_free(struct krb5_plugin *list)
 /*
  * module - dict of {
  *      ModuleName = [
- *          plugin = object{
+ *          plugin = object{ 
  *              array = { ptr, ctx }
  *          }
  *      ]
@@ -556,7 +556,7 @@ search_modules(void *ctx, heim_object_t key, heim_object_t value)
            return;
 
        pl = heim_alloc(sizeof(*pl), "struct-plug", plug_free);
-
+               
        cpm = pl->dataptr = dlsym(p->dsohandle, s->name);
        if (cpm) {
            int ret;
@@ -569,10 +569,10 @@ search_modules(void *ctx, heim_object_t key, heim_object_t value)
     } else {
        cpm = pl->dataptr;
     }
-
+           
     if (cpm && cpm->version >= s->min_version)
        heim_array_append_value(s->result, pl);
-
+    
     heim_release(pl);
 }
 
@@ -619,11 +619,11 @@ _krb5_plugin_run_f(krb5_context context,
     s.userctx = userctx;
 
     heim_dict_iterate_f(dict, search_modules, &s);
-
+    
     heim_release(dict);
-
+    
     HEIMDAL_MUTEX_unlock(&plugin_mutex);
-
+    
     s.ret = KRB5_PLUGIN_NO_HANDLE;
 
     heim_array_iterate_f(s.result, eval_results, &s);
index 1c40b54f6b1588032192dbaa175dca681c16d638..32dafd68cb88f8a44c9ec483474126242761e3e9 100644 (file)
@@ -45,8 +45,8 @@ AES_string_to_key(krb5_context context,
 {
     krb5_error_code ret;
     uint32_t iter;
-    struct encryption_type *et;
-    struct key_data kd;
+    struct _krb5_encryption_type *et;
+    struct _krb5_key_data kd;
 
     if (opaque.length == 0)
        iter = _krb5_AES_string_to_default_iterator;
index 69375f6a817537bb1e29389b09ec6660b365a770..6f183087436242f27519c0bc782fd87f909cadb2 100644 (file)
@@ -39,7 +39,7 @@ krb5_salttype_to_string (krb5_context context,
                         krb5_salttype stype,
                         char **string)
 {
-    struct encryption_type *e;
+    struct _krb5_encryption_type *e;
     struct salt_type *st;
 
     e = _krb5_find_enctype (etype);
@@ -71,7 +71,7 @@ krb5_string_to_salttype (krb5_context context,
                         const char *string,
                         krb5_salttype *salttype)
 {
-    struct encryption_type *e;
+    struct _krb5_encryption_type *e;
     struct salt_type *st;
 
     e = _krb5_find_enctype (etype);
@@ -187,7 +187,7 @@ krb5_string_to_key_data_salt_opaque (krb5_context context,
                                     krb5_data opaque,
                                     krb5_keyblock *key)
 {
-    struct encryption_type *et =_krb5_find_enctype(enctype);
+    struct _krb5_encryption_type *et =_krb5_find_enctype(enctype);
     struct salt_type *st;
     if(et == NULL) {
        krb5_set_error_message(context, KRB5_PROG_ETYPE_NOSUPP,
@@ -247,9 +247,9 @@ krb5_string_to_key_derived(krb5_context context,
                           krb5_enctype etype,
                           krb5_keyblock *key)
 {
-    struct encryption_type *et = _krb5_find_enctype(etype);
+    struct _krb5_encryption_type *et = _krb5_find_enctype(etype);
     krb5_error_code ret;
-    struct key_data kd;
+    struct _krb5_key_data kd;
     size_t keylen;
     u_char *tmp;
 
index e401319ae02345fa26dcf98010c3b11c7471fe62..6dad519d4a9161e18c8580a3145523f8dff0733c 100644 (file)
@@ -289,7 +289,7 @@ ret_sec_string(krb5_storage *sp, int ucs2, struct sec_buffer *desc, char **s)
     CHECK(krb5_storage_seek(sp, desc->offset, SEEK_SET), desc->offset);
     CHECK(ret_string(sp, ucs2, desc->length, s), 0);
  out:
-    return ret;
+    return ret; 
 }
 
 static krb5_error_code
@@ -1129,7 +1129,7 @@ heim_ntlm_v1_base_session(void *key, size_t len,
        session->length = 0;
        return ENOMEM;
     }
-
+    
     m = EVP_MD_CTX_create();
     if (m == NULL) {
        heim_ntlm_free_buf(session);
@@ -1796,3 +1796,4 @@ heim_ntlm_derive_ntlm2_sess(const unsigned char sessionkey[16],
     HMAC_Final(&c, derivedkey, &hmaclen);
     HMAC_CTX_cleanup(&c);
 }
+
index 586eab81fb7ddf124645b1a1ad9e308ea86827b6..611837f0e327f329a846f59646f622e0a5e00f7a 100644 (file)
@@ -305,7 +305,7 @@ static NTSTATUS get_pk_from_raw_keypair_params(TALLOC_CTX *ctx,
                return NT_STATUS_INTERNAL_ERROR;
        }
 
-       if (_hx509_private_key_init(pk, ops, NULL) != 0) {
+       if (hx509_private_key_init(pk, ops, NULL) != 0) {
                hx509_context_free(&hctx);
                return NT_STATUS_NO_MEMORY;
        }
@@ -365,7 +365,7 @@ static NTSTATUS get_pk_from_raw_keypair_params(TALLOC_CTX *ctx,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       _hx509_private_key_assign_rsa(*pk, rsa);
+       hx509_private_key_assign_rsa(*pk, rsa);
 
        hx509_context_free(&hctx);
        return NT_STATUS_OK;
@@ -617,7 +617,7 @@ static WERROR bkrp_do_uncrypt_client_wrap_key(struct dcesrv_call_state *dce_call
                reversed_secret.data = talloc_array(mem_ctx, uint8_t,
                                                    uncrypt_request.encrypted_secret_len);
                if (reversed_secret.data == NULL) {
-                       _hx509_private_key_free(&pk);
+                       hx509_private_key_free(&pk);
                        return WERR_NOMEM;
                }
 
@@ -634,11 +634,11 @@ static WERROR bkrp_do_uncrypt_client_wrap_key(struct dcesrv_call_state *dce_call
                 * we have the private key ...
                 */
                hx509_context_init(&hctx);
-               res = _hx509_private_key_private_decrypt(hctx, &reversed_secret,
+               res = hx509_private_key_private_decrypt(hctx, &reversed_secret,
                                                         &alg.algorithm, pk,
                                                         &uncrypted_secret);
                hx509_context_free(&hctx);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                if (res != 0) {
                        /* We are not able to decrypt the secret, looks like something is wrong */
                        return WERR_INVALID_DATA;
@@ -803,7 +803,7 @@ static WERROR create_heimdal_rsa_key(TALLOC_CTX *ctx, hx509_context *hctx,
         * To dump the key we can use :
         * rk_dumpdata("h5lkey", p0, len);
         */
-       ret = _hx509_parse_private_key(*hctx, &_hx509_signature_rsa_with_var_num ,
+       ret = hx509_parse_private_key(*hctx, &_hx509_signature_rsa_with_var_num ,
                                       p0, len, HX509_KEY_FORMAT_DER, pk);
        memset(p0, 0, len);
        talloc_free(p0);
@@ -835,12 +835,12 @@ static WERROR self_sign_cert(TALLOC_CTX *ctx, hx509_context *hctx, hx509_request
 
        memset(&spki, 0, sizeof(spki));
 
-       ret = _hx509_request_get_name(*hctx, *req, &subject);
+       ret = hx509_request_get_name(*hctx, *req, &subject);
        if (ret !=0) {
                talloc_free(uniqueid.data);
                return WERR_INTERNAL_ERROR;
        }
-       ret = _hx509_request_get_SubjectPublicKeyInfo(*hctx, *req, &spki);
+       ret = hx509_request_get_SubjectPublicKeyInfo(*hctx, *req, &spki);
        if (ret !=0) {
                talloc_free(uniqueid.data);
                hx509_name_free(&subject);
@@ -923,39 +923,39 @@ static WERROR create_req(TALLOC_CTX *ctx, hx509_context *hctx, hx509_request *re
                return w_err;
        }
 
-       _hx509_request_init(*hctx, req);
+       hx509_request_init(*hctx, req);
        ret = hx509_parse_name(*hctx, dn, &name);
        if (ret != 0) {
                RSA_free(*rsa);
-               _hx509_private_key_free(signer);
-               _hx509_request_free(req);
+               hx509_private_key_free(signer);
+               hx509_request_free(req);
                hx509_name_free(&name);
                return WERR_INTERNAL_ERROR;
        }
 
-       ret = _hx509_request_set_name(*hctx, *req, name);
+       ret = hx509_request_set_name(*hctx, *req, name);
        if (ret != 0) {
                RSA_free(*rsa);
-               _hx509_private_key_free(signer);
-               _hx509_request_free(req);
+               hx509_private_key_free(signer);
+               hx509_request_free(req);
                hx509_name_free(&name);
                return WERR_INTERNAL_ERROR;
        }
        hx509_name_free(&name);
 
-       ret = _hx509_private_key2SPKI(*hctx, *signer, &key);
+       ret = hx509_private_key2SPKI(*hctx, *signer, &key);
        if (ret != 0) {
                RSA_free(*rsa);
-               _hx509_private_key_free(signer);
-               _hx509_request_free(req);
+               hx509_private_key_free(signer);
+               hx509_request_free(req);
                return WERR_INTERNAL_ERROR;
        }
-       ret = _hx509_request_set_SubjectPublicKeyInfo(*hctx, *req, &key);
+       ret = hx509_request_set_SubjectPublicKeyInfo(*hctx, *req, &key);
        if (ret != 0) {
                RSA_free(*rsa);
-               _hx509_private_key_free(signer);
+               hx509_private_key_free(signer);
                free_SubjectPublicKeyInfo(&key);
-               _hx509_request_free(req);
+               hx509_request_free(req);
                return WERR_INTERNAL_ERROR;
        }
 
@@ -998,14 +998,14 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
        status = GUID_to_ndr_blob(&guid, ctx, &blob);
        if (!NT_STATUS_IS_OK(status)) {
                hx509_context_free(&hctx);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                RSA_free(rsa);
                return WERR_INVALID_DATA;
        }
 
        w_err = self_sign_cert(ctx, &hctx, &req, nb_days_validity, &pk, &cert, &blob);
        if (!W_ERROR_IS_OK(w_err)) {
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                hx509_context_free(&hctx);
                return WERR_INVALID_DATA;
        }
@@ -1013,7 +1013,7 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
        ret = hx509_cert_binary(hctx, cert, &data);
        if (ret !=0) {
                hx509_cert_free(cert);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                hx509_context_free(&hctx);
                return WERR_INVALID_DATA;
        }
@@ -1101,7 +1101,7 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
        if (ok == false) {
                der_free_octet_string(&data);
                hx509_cert_free(cert);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                hx509_context_free(&hctx);
                RSA_free(rsa);
                return WERR_INVALID_DATA;
@@ -1111,7 +1111,7 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                der_free_octet_string(&data);
                hx509_cert_free(cert);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                hx509_context_free(&hctx);
                RSA_free(rsa);
                return WERR_INVALID_DATA;
@@ -1121,7 +1121,7 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
        if (secret_name == NULL) {
                der_free_octet_string(&data);
                hx509_cert_free(cert);
-               _hx509_private_key_free(&pk);
+               hx509_private_key_free(&pk);
                hx509_context_free(&hctx);
                RSA_free(rsa);
                return WERR_OUTOFMEMORY;
@@ -1141,7 +1141,7 @@ static WERROR generate_bkrp_cert(TALLOC_CTX *ctx, struct dcesrv_call_state *dce_
 
        der_free_octet_string(&data);
        hx509_cert_free(cert);
-       _hx509_private_key_free(&pk);
+       hx509_private_key_free(&pk);
        hx509_context_free(&hctx);
        RSA_free(rsa);
        return WERR_OK;
index 85c53fea669fb3e978edb16bcd88b0b94edc1280..0f389462e10b89dc647475e10ef439934772d805 100644 (file)
@@ -457,7 +457,7 @@ static DATA_BLOB *encrypt_blob_pk(struct torture_context *tctx,
 
        secretdata.data = to_encrypt->data;
        secretdata.length = to_encrypt->length;
-       hret = _hx509_cert_public_encrypt(hctx, &secretdata,
+       hret = hx509_cert_public_encrypt(hctx, &secretdata,
                                          cert, &encryption_oid,
                                          &encrypted);
        hx509_cert_free(cert);