tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

crlgen_lex_orig.l (4424B)


      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/. */
      4 
      5 %{
      6 
      7 #include "crlgen.h"
      8 
      9 static SECStatus parserStatus = SECSuccess;
     10 static CRLGENGeneratorData *parserData;
     11 static PRFileDesc *src;
     12 
     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; }
     19               
     20 
     21 %}
     22 
     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\:\|\.]+
     31 
     32 %%
     33 
     34 {ZDATE}   {
     35 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_ZDATE);
     36 if (parserStatus != SECSuccess)
     37     return parserStatus;
     38 }
     39 
     40 {DIGIT}   {
     41 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_DIGIT);
     42 if (parserStatus != SECSuccess)
     43     return parserStatus;
     44 }
     45 
     46 {DIGIT_RANGE}  {
     47 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_DIGIT_RANGE);
     48 if (parserStatus != SECSuccess)
     49     return parserStatus;
     50 }
     51 
     52 {OID}     {
     53 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_OID);
     54 if (parserStatus != SECSuccess)
     55     return parserStatus;
     56 }
     57 
     58 issuer     {
     59 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_ISSUER_CONTEXT);
     60 if (parserStatus != SECSuccess)
     61     return parserStatus;
     62 }
     63 
     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 }
     74 
     75 range      {
     76 parserStatus = crlgen_createNewLangStruct(parserData, CRLGEN_CHANGE_RANGE_CONTEXT);
     77 if (parserStatus != SECSuccess)
     78     return parserStatus;
     79 }
     80 
     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 }
    103 
    104 "="
    105 
    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 }
    123 
    124 {N_SP_STRING} {
    125 parserStatus = crlgen_setNextData(parserData, yytext, CRLGEN_TYPE_STRING);
    126 if (parserStatus != SECSuccess)
    127     return parserStatus;
    128 }
    129 
    130 
    131 
    132 ^#[^\n]*     /* eat up one-line comments */ {}
    133 
    134 [ \t]+      {}
    135 
    136 (\n|\r\n)  {
    137 parserStatus = crlgen_updateCrl(parserData);
    138 if (parserStatus != SECSuccess)
    139     return parserStatus;
    140 }
    141 
    142 .           {
    143     fprintf(stderr, "Syntax error at line %d: unknown token %s\n",
    144             parserData->parsedLineNum, yytext);
    145     return SECFailure;
    146 }
    147 
    148 %%
    149 #include "prlock.h"
    150 
    151 static PRLock *parserInvocationLock;
    152 
    153 void CRLGEN_InitCrlGenParserLock()
    154 {
    155     parserInvocationLock = PR_NewLock();
    156 }
    157 
    158 void CRLGEN_DestroyCrlGenParserLock()
    159 {
    160     PR_DestroyLock(parserInvocationLock);
    161 }
    162 
    163 
    164 SECStatus CRLGEN_StartCrlGen(CRLGENGeneratorData *parserCtlData)
    165 {
    166     SECStatus rv;
    167 
    168     PR_Lock(parserInvocationLock);
    169 
    170     parserStatus = SECSuccess;
    171     parserData = parserCtlData;
    172     src = parserCtlData->src;
    173 
    174     rv = yylex();
    175 
    176     PR_Unlock(parserInvocationLock);
    177 
    178     return rv;
    179 }
    180 
    181 int yywrap() {return 1;}