⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssl_expr_scan.l

📁 mod_ssl-2.8.31-1.3.41.tar.gz 好用的ssl工具
💻 L
字号:
/*                      _             _ **  _ __ ___   ___   __| |    ___ ___| |  ** | '_ ` _ \ / _ \ / _` |   / __/ __| |  ** | | | | | | (_) | (_| |   \__ \__ \ | mod_ssl - Apache Interface to OpenSSL** |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.modssl.org/**                      |_____|         **  ssl_expr_scan.l**  Expression Scanner*//* ==================================================================== * Copyright (c) 1998-2006 Ralf S. Engelschall. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following *    disclaimer in the documentation and/or other materials *    provided with the distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by  *     Ralf S. Engelschall <rse@engelschall.com> for use in the *     mod_ssl project (http://www.modssl.org/)." * * 4. The names "mod_ssl" must not be used to endorse or promote *    products derived from this software without prior written *    permission. For written permission, please contact *    rse@engelschall.com. * * 5. Products derived from this software may not be called "mod_ssl" *    nor may "mod_ssl" appear in their names without prior *    written permission of Ralf S. Engelschall. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by  *     Ralf S. Engelschall <rse@engelschall.com> for use in the *     mod_ssl project (http://www.modssl.org/)." * * THIS SOFTWARE IS PROVIDED BY RALF S. ENGELSCHALL ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL RALF S. ENGELSCHALL OR * HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== */                             /* ``Killing for peace is                                   like fucking for virginity.''                                             -- Unknown  *//*  _________________________________________________________________****  Expression Scanner**  _________________________________________________________________*/%{#include "mod_ssl.h"#include "ssl_expr_parse.h"#define YY_NO_UNPUT 1int yyinput(char *buf, int max_size);#undef  YY_INPUT#define YY_INPUT(buf,result,max_size) \    (result = yyinput(buf, max_size))#define MAX_STR_LEN 2048%}%pointer/* %option stack */%option never-interactive%option noyywrap%x str%x regex regex_flags%%    char  caStr[MAX_STR_LEN];  char *cpStr = NULL;  char  caRegex[MAX_STR_LEN];  char *cpRegex = NULL;  char  cRegexDel = NUL; /*  * Whitespaces  */[ \t\n]+ {     /* NOP */} /*  * C-style strings ("...")  */\" {    cpStr = caStr;    BEGIN(str);}<str>\" {    BEGIN(INITIAL);    *cpStr = NUL;    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, caStr);    return T_STRING;}<str>\n {    yyerror("Unterminated string");}<str>\\[0-7]{1,3} {    int result;    (void)sscanf(yytext+1, "%o", &result);    if (result > 0xff)        yyerror("Escape sequence out of bound");    else        *cpStr++ = result;}<str>\\[0-9]+ {    yyerror("Bad escape sequence");}<str>\\n { *cpStr++ = '\n'; }<str>\\r { *cpStr++ = '\r'; }<str>\\t { *cpStr++ = '\t'; }<str>\\b { *cpStr++ = '\b'; }<str>\\f { *cpStr++ = '\f'; }<str>\\(.|\n) {    *cpStr++ = yytext[1];}<str>[^\\\n\"]+ {    char *cp = yytext;    while (*cp != NUL)        *cpStr++ = *cp++;}<str>. {    *cpStr++ = yytext[1];} /*  * Regular Expression  */"m". {    cRegexDel = yytext[1];    cpRegex = caRegex;    BEGIN(regex);}<regex>.|\n {    if (yytext[0] == cRegexDel) {        *cpRegex = NUL;        BEGIN(regex_flags);    }    else {        *cpRegex++ = yytext[0];    }}<regex_flags>i {    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, caRegex);    BEGIN(INITIAL);    return T_REGEX_I;}<regex_flags>.|\n {    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, caRegex);    yyless(0);    BEGIN(INITIAL);    return T_REGEX;}<regex_flags><<EOF>> {    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, caRegex);    BEGIN(INITIAL);    return T_REGEX;} /*  * Operators  */"eq"  { return T_OP_EQ; }"=="  { return T_OP_EQ; }"ne"  { return T_OP_NE; }"!="  { return T_OP_NE; }"lt"  { return T_OP_LT; }"<"   { return T_OP_LT; }"le"  { return T_OP_LE; }"<="  { return T_OP_LE; }"gt"  { return T_OP_GT; }">"   { return T_OP_GT; }"ge"  { return T_OP_GE; }">="  { return T_OP_GE; }"=~"  { return T_OP_REG; }"!~"  { return T_OP_NRE; }"and" { return T_OP_AND; }"&&"  { return T_OP_AND; }"or"  { return T_OP_OR; }"||"  { return T_OP_OR; }"not" { return T_OP_NOT; }"!"   { return T_OP_NOT; }"in"  { return T_OP_IN; } /*  * Functions  */"file" { return T_FUNC_FILE; } /*  * Specials  */"true"  { return T_TRUE; }"false" { return T_FALSE; } /*  * Digits  */[0-9]+ {    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, yytext);    return T_DIGIT;} /*  * Identifiers  */[a-zA-Z][a-zA-Z0-9_:-]* {    yylval.cpVal = ap_pstrdup(ssl_expr_info.pool, yytext);    return T_ID;} /*  * Anything else is returned as is...  */.|\n {     return yytext[0];}%%int yyinput(char *buf, int max_size){    int n;    if ((n = MIN(max_size, ssl_expr_info.inputbuf                         + ssl_expr_info.inputlen                          - ssl_expr_info.inputptr)) <= 0)        return YY_NULL;    memcpy(buf, ssl_expr_info.inputptr, n);    ssl_expr_info.inputptr += n;    return n;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -