security/nss/cmd/crlutil/crlgen_lex_orig.l

Wed, 31 Dec 2014 07:16:47 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:16:47 +0100
branch
TOR_BUG_9701
changeset 3
141e0f1194b1
permissions
-rw-r--r--

Revert simplistic fix pending revisit of Mozilla integration attempt.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 %{
     7 #include "crlgen.h"
     9 static SECStatus parserStatus = SECSuccess;
    10 static CRLGENGeneratorData *parserData;
    11 static PRFileDesc *src;
    13 #define YY_INPUT(buf,result,max_size) \
    14     if ( parserStatus != SECFailure) { \
    15 	 if (((result = PR_Read(src, buf, max_size)) == 0) && \
    16 	     ferror( yyin )) \
    17 	   return SECFailure; \
    18     } else  { return SECFailure; }
    21 %}
    23 %a 5000
    24 DIGIT          [0-9]+
    25 DIGIT_RANGE    [0-9]+-[0-9]+
    26 ID             [a-zA-Z][a-zA-Z0-9]*
    27 OID            [0-9]+\.[\.0-9]+
    28 DATE           [0-9]{4}[01][0-9][0-3][0-9][0-2][0-9][0-6][0-9][0-6][0-9]
    29 ZDATE          [0-9]{4}[01][0-9][0-3][0-9][0-2][0-9][0-6][0-9][0-6][0-9]Z
    30 N_SP_STRING    [a-zA-Z0-9\:\|\.]+
    32 %%
    34 {ZDATE}   {
    35 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_ZDATE);
    36 if (parserStatus != SECSuccess)
    37     return parserStatus;
    38 }
    40 {DIGIT}   {
    41 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_DIGIT);
    42 if (parserStatus != SECSuccess)
    43     return parserStatus;
    44 }
    46 {DIGIT_RANGE}  {
    47 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_DIGIT_RANGE);
    48 if (parserStatus != SECSuccess)
    49     return parserStatus;
    50 }
    52 {OID}     {
    53 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_OID);
    54 if (parserStatus != SECSuccess)
    55     return parserStatus;
    56 }
    58 issuer     {
    59 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_ISSUER_CONTEXT);
    60 if (parserStatus != SECSuccess)
    61     return parserStatus;
    62 }
    64 update     {
    65 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_UPDATE_CONTEXT);
    66 if (parserStatus != SECSuccess)
    67     return parserStatus;
    68 }
    69 nextupdate {
    70 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_NEXT_UPDATE_CONTEXT);
    71 if (parserStatus != SECSuccess)
    72     return parserStatus;
    73 }
    75 range      {
    76 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_CHANGE_RANGE_CONTEXT);
    77 if (parserStatus != SECSuccess)
    78     return parserStatus;
    79 }
    81 {ID}      {
    82 if (strcmp(yytext, "addcert") == 0) {
    83     parserStatus = crlgen_createNewLangStruct(parserData,
    84                                     CRLGEN_ADD_CERT_CONTEXT);
    85     if (parserStatus != SECSuccess)
    86         return parserStatus;
    87 } else if (strcmp(yytext, "rmcert") == 0) {
    88     parserStatus = crlgen_createNewLangStruct(parserData,
    89                                     CRLGEN_RM_CERT_CONTEXT);
    90     if (parserStatus != SECSuccess)
    91         return parserStatus;
    92 } else if (strcmp(yytext, "addext") == 0) {
    93     parserStatus = crlgen_createNewLangStruct(parserData,
    94                                     CRLGEN_ADD_EXTENSION_CONTEXT);
    95     if (parserStatus != SECSuccess)
    96         return parserStatus;
    97 } else {
    98     parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_ID);
    99     if (parserStatus != SECSuccess)
   100         return parserStatus;
   101 }
   102 }
   104 "="
   106 \"[^\"]* {
   107 if (yytext[yyleng-1] == '\\') {
   108     yymore();
   109 } else {
   110     register int c;
   111     c = input();
   112     if (c != '\"') {
   113         printf( "Error: Line ending \" is missing:  %c\n", c);
   114         unput(c);
   115     } else {
   116         parserStatus = crlgen_setNextData(parserData, yytext + 1,
   117                                           CRLGEN_TYPE_STRING);
   118         if (parserStatus != SECSuccess)
   119             return parserStatus;
   120     }
   121 }
   122 }
   124 {N_SP_STRING} {
   125 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_STRING);
   126 if (parserStatus != SECSuccess)
   127     return parserStatus;
   128 }
   132 ^#[^\n]*     /* eat up one-line comments */ {}
   134 [ \t]+      {}
   136 (\n|\r\n)  {
   137 parserStatus = crlgen_updateCrl(parserData);
   138 if (parserStatus != SECSuccess)
   139     return parserStatus;
   140 }
   142 .           {
   143     fprintf(stderr, "Syntax error at line %d: unknown token %s\n",
   144             parserData->parsedLineNum, yytext);
   145     return SECFailure;
   146 }
   148 %%
   149 #include "prlock.h"
   151 static PRLock *parserInvocationLock;
   153 void CRLGEN_InitCrlGenParserLock()
   154 {
   155     parserInvocationLock = PR_NewLock();
   156 }
   158 void CRLGEN_DestroyCrlGenParserLock()
   159 {
   160     PR_DestroyLock(parserInvocationLock);
   161 }
   164 SECStatus CRLGEN_StartCrlGen(CRLGENGeneratorData *parserCtlData)
   165 {
   166     SECStatus rv;
   168     PR_Lock(parserInvocationLock);
   170     parserStatus = SECSuccess;
   171     parserData = parserCtlData;
   172     src = parserCtlData->src;
   174     rv = yylex();
   176     PR_Unlock(parserInvocationLock);
   178     return rv;
   179 }
   181 int yywrap() {return 1;}

mercurial