// A Bison parser, made by GNU Bison 3.0.4.
// Skeleton implementation for Bison LALR(1) parsers in C++
// Copyright (C) 2002-2015 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 .
// 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.
// First part of user declarations.
#line 37 "seclang-parser.cc" // lalr1.cc:404
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# endif
#include "seclang-parser.hh"
// User implementation prologue.
#line 51 "seclang-parser.cc" // lalr1.cc:412
// Unqualified %code blocks.
#line 345 "seclang-parser.yy" // lalr1.cc:413
#include "src/parser/driver.h"
#line 57 "seclang-parser.cc" // lalr1.cc:413
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include // FIXME: INFRINGES ON USER NAME SPACE.
# define YY_(msgid) dgettext ("bison-runtime", msgid)
# endif
# endif
# ifndef YY_
# define YY_(msgid) msgid
# endif
#endif
#define YYRHSLOC(Rhs, K) ((Rhs)[K].location)
/* 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). */
# ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N) \
do \
if (N) \
{ \
(Current).begin = YYRHSLOC (Rhs, 1).begin; \
(Current).end = YYRHSLOC (Rhs, N).end; \
} \
else \
{ \
(Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \
} \
while (/*CONSTCOND*/ false)
# endif
// Suppress unused-variable warnings by "using" E.
#define YYUSE(E) ((void) (E))
// Enable debugging if requested.
#if YYDEBUG
// A pseudo ostream that takes yydebug_ into account.
# define YYCDEBUG if (yydebug_) (*yycdebug_)
# define YY_SYMBOL_PRINT(Title, Symbol) \
do { \
if (yydebug_) \
{ \
*yycdebug_ << Title << ' '; \
yy_print_ (*yycdebug_, Symbol); \
*yycdebug_ << std::endl; \
} \
} while (false)
# define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug_) \
yy_reduce_print_ (Rule); \
} while (false)
# define YY_STACK_PRINT() \
do { \
if (yydebug_) \
yystack_print_ (); \
} while (false)
#else // !YYDEBUG
# define YYCDEBUG if (false) std::cerr
# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol)
# define YY_REDUCE_PRINT(Rule) static_cast(0)
# define YY_STACK_PRINT() static_cast(0)
#endif // !YYDEBUG
#define yyerrok (yyerrstatus_ = 0)
#define yyclearin (yyla.clear ())
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
#define YYRECOVERING() (!!yyerrstatus_)
namespace yy {
#line 143 "seclang-parser.cc" // lalr1.cc:479
/* Return 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. */
std::string
seclang_parser::yytnamerr_ (const char *yystr)
{
if (*yystr == '"')
{
std::string yyr = "";
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:
yyr += *yyp;
break;
case '"':
return yyr;
}
do_not_strip_quotes: ;
}
return yystr;
}
/// Build a parser object.
seclang_parser::seclang_parser (modsecurity::Parser::Driver& driver_yyarg)
:
#if YYDEBUG
yydebug_ (false),
yycdebug_ (&std::cerr),
#endif
driver (driver_yyarg)
{}
seclang_parser::~seclang_parser ()
{}
/*---------------.
| Symbol types. |
`---------------*/
// by_state.
inline
seclang_parser::by_state::by_state ()
: state (empty_state)
{}
inline
seclang_parser::by_state::by_state (const by_state& other)
: state (other.state)
{}
inline
void
seclang_parser::by_state::clear ()
{
state = empty_state;
}
inline
void
seclang_parser::by_state::move (by_state& that)
{
state = that.state;
that.clear ();
}
inline
seclang_parser::by_state::by_state (state_type s)
: state (s)
{}
inline
seclang_parser::symbol_number_type
seclang_parser::by_state::type_get () const
{
if (state == empty_state)
return empty_symbol;
else
return yystos_[state];
}
inline
seclang_parser::stack_symbol_type::stack_symbol_type ()
{}
inline
seclang_parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that)
: super_type (s, that.location)
{
switch (that.type_get ())
{
case 93: // "Accuracy"
case 94: // "Allow"
case 95: // "Append"
case 96: // "AuditLog"
case 97: // "Block"
case 98: // "Capture"
case 99: // "Chain"
case 100: // "ACTION_CTL_AUDIT_ENGINE"
case 101: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 102: // "ACTION_CTL_BDY_JSON"
case 103: // "ACTION_CTL_BDY_XML"
case 104: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 105: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 106: // "ACTION_CTL_RULE_ENGINE"
case 107: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 108: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 109: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 110: // "Deny"
case 111: // "DeprecateVar"
case 112: // "Drop"
case 113: // "Exec"
case 114: // "ExpireVar"
case 115: // "Id"
case 116: // "InitCol"
case 117: // "Log"
case 118: // "LogData"
case 119: // "Maturity"
case 120: // "Msg"
case 121: // "MultiMatch"
case 122: // "NoAuditLog"
case 123: // "NoLog"
case 124: // "Pass"
case 125: // "Pause"
case 126: // "Phase"
case 127: // "Prepend"
case 128: // "Proxy"
case 129: // "Redirect"
case 130: // "Rev"
case 131: // "SanatiseArg"
case 132: // "SanatiseMatched"
case 133: // "SanatiseMatchedBytes"
case 134: // "SanatiseRequestHeader"
case 135: // "SanatiseResponseHeader"
case 136: // "SetEnv"
case 137: // "SetSrc"
case 138: // "SetSid"
case 139: // "SetUID"
case 140: // "Severity"
case 141: // "Skip"
case 142: // "SkipAfter"
case 143: // "Status"
case 144: // "Tag"
case 145: // "ACTION_TRANSFORMATION_CMD_LINE"
case 146: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 147: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 148: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 149: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 150: // "ACTION_TRANSFORMATION_JS_DECODE"
case 151: // "ACTION_TRANSFORMATION_LENGTH"
case 152: // "ACTION_TRANSFORMATION_LOWERCASE"
case 153: // "ACTION_TRANSFORMATION_MD5"
case 154: // "ACTION_TRANSFORMATION_NONE"
case 155: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 156: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 157: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 158: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 159: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 160: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 161: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 162: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 163: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 164: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 165: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 166: // "ACTION_TRANSFORMATION_SHA1"
case 167: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 168: // "ACTION_TRANSFORMATION_TRIM"
case 169: // "ACTION_TRANSFORMATION_URL_DECODE"
case 170: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 171: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 172: // "Ver"
case 173: // "xmlns"
case 174: // "CONFIG_COMPONENT_SIG"
case 175: // "CONFIG_DIR_AUDIT_DIR"
case 176: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 177: // "CONFIG_DIR_AUDIT_ENG"
case 178: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 179: // "CONFIG_DIR_AUDIT_LOG"
case 180: // "CONFIG_DIR_AUDIT_LOG2"
case 181: // "CONFIG_DIR_AUDIT_LOG_P"
case 182: // "CONFIG_DIR_AUDIT_STS"
case 183: // "CONFIG_DIR_AUDIT_TPE"
case 184: // "CONFIG_DIR_DEBUG_LOG"
case 185: // "CONFIG_DIR_DEBUG_LVL"
case 186: // "CONFIG_DIR_GEO_DB"
case 187: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 188: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 189: // "CONFIG_DIR_REQ_BODY"
case 190: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 191: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 192: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 193: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 194: // "CONFIG_DIR_RES_BODY"
case 195: // "CONFIG_DIR_RES_BODY_LIMIT"
case 196: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 197: // "CONFIG_DIR_RULE_ENG"
case 198: // "CONFIG_DIR_SEC_ACTION"
case 199: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 200: // "CONFIG_DIR_SEC_MARKER"
case 201: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 202: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 203: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 204: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 205: // "CONFIG_UPDLOAD_KEEP_FILES"
case 206: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 207: // "CONFIG_UPLOAD_DIR"
case 208: // "CONFIG_UPLOAD_FILE_LIMIT"
case 209: // "CONFIG_UPLOAD_FILE_MODE"
case 210: // "CONFIG_VALUE_ABORT"
case 211: // "CONFIG_VALUE_DETC"
case 212: // "CONFIG_VALUE_HTTPS"
case 213: // "CONFIG_VALUE_OFF"
case 214: // "CONFIG_VALUE_ON"
case 215: // "CONFIG_VALUE_PARALLEL"
case 216: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 217: // "CONFIG_VALUE_REJECT"
case 218: // "CONFIG_VALUE_RELEVANT_ONLY"
case 219: // "CONFIG_VALUE_SERIAL"
case 220: // "CONFIG_VALUE_WARN"
case 221: // "CONFIG_XML_EXTERNAL_ENTITY"
case 222: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 223: // "CONGIG_DIR_SEC_ARG_SEP"
case 224: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 225: // "CONGIG_DIR_SEC_DATA_DIR"
case 226: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 227: // "CONGIG_DIR_SEC_TMP_DIR"
case 228: // "DIRECTIVE"
case 229: // "DIRECTIVE_SECRULESCRIPT"
case 230: // "FREE_TEXT"
case 231: // "OPERATOR"
case 232: // "OPERATOR_BEGINS_WITH"
case 233: // "OPERATOR_CONTAINS"
case 234: // "OPERATOR_CONTAINS_WORD"
case 235: // "OPERATOR_DETECT_SQLI"
case 236: // "OPERATOR_DETECT_XSS"
case 237: // "OPERATOR_ENDS_WITH"
case 238: // "OPERATOR_EQ"
case 239: // "OPERATOR_FUZZY_HASH"
case 240: // "OPERATOR_GE"
case 241: // "OPERATOR_GEOLOOKUP"
case 242: // "OPERATOR_GSB_LOOKUP"
case 243: // "OPERATOR_GT"
case 244: // "OPERATOR_INSPECT_FILE"
case 245: // "OPERATOR_IP_MATCH"
case 246: // "OPERATOR_IP_MATCH_FROM_FILE"
case 247: // "OPERATOR_LE"
case 248: // "OPERATOR_LT"
case 249: // "OPERATOR_PM"
case 250: // "OPERATOR_PM_FROM_FILE"
case 251: // "OPERATOR_RBL"
case 252: // "OPERATOR_RSUB"
case 253: // "OPERATOR_RX"
case 254: // "Operator Rx"
case 255: // "OPERATOR_STR_EQ"
case 256: // "OPERATOR_STR_MATCH"
case 257: // "OPERATOR_UNCONDITIONAL_MATCH"
case 258: // "OPERATOR_VALIDATE_BYTE_RANGE"
case 259: // "OPERATOR_VALIDATE_DTD"
case 260: // "OPERATOR_VALIDATE_HASH"
case 261: // "OPERATOR_VALIDATE_SCHEMA"
case 262: // "OPERATOR_VALIDATE_URL_ENCODING"
case 263: // "OPERATOR_VALIDATE_UTF8_ENCODING"
case 264: // "OPERATOR_VERIFY_CC"
case 265: // "OPERATOR_VERIFY_CPF"
case 266: // "OPERATOR_VERIFY_SSN"
case 267: // "OPERATOR_WITHIN"
case 268: // "OP_QUOTE"
case 269: // "QUOTATION_MARK"
case 270: // "RUN_TIME_VAR_BLD"
case 271: // "RUN_TIME_VAR_DUR"
case 272: // "RUN_TIME_VAR_HSV"
case 273: // "RUN_TIME_VAR_REMOTE_USER"
case 274: // "RUN_TIME_VAR_TIME"
case 275: // "RUN_TIME_VAR_TIME_DAY"
case 276: // "RUN_TIME_VAR_TIME_EPOCH"
case 277: // "RUN_TIME_VAR_TIME_HOUR"
case 278: // "RUN_TIME_VAR_TIME_MIN"
case 279: // "RUN_TIME_VAR_TIME_MON"
case 280: // "RUN_TIME_VAR_TIME_SEC"
case 281: // "RUN_TIME_VAR_TIME_WDAY"
case 282: // "RUN_TIME_VAR_TIME_YEAR"
case 283: // "VARIABLE"
case 284: // "Dictionary element"
case 285: // "Dictionary element, selected by regexp"
value.move< std::string > (that.value);
break;
case 292: // op
case 293: // op_before_init
value.move< std::unique_ptr > (that.value);
break;
case 296: // var
value.move< std::unique_ptr > (that.value);
break;
case 297: // act
value.move< std::unique_ptr > (that.value);
break;
case 295: // variables
value.move< std::unique_ptr > > > (that.value);
break;
case 290: // actions
case 291: // actions_may_quoted
value.move< std::unique_ptr > > > (that.value);
break;
default:
break;
}
// that is emptied.
that.type = empty_symbol;
}
inline
seclang_parser::stack_symbol_type&
seclang_parser::stack_symbol_type::operator= (const stack_symbol_type& that)
{
state = that.state;
switch (that.type_get ())
{
case 93: // "Accuracy"
case 94: // "Allow"
case 95: // "Append"
case 96: // "AuditLog"
case 97: // "Block"
case 98: // "Capture"
case 99: // "Chain"
case 100: // "ACTION_CTL_AUDIT_ENGINE"
case 101: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 102: // "ACTION_CTL_BDY_JSON"
case 103: // "ACTION_CTL_BDY_XML"
case 104: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 105: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 106: // "ACTION_CTL_RULE_ENGINE"
case 107: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 108: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 109: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 110: // "Deny"
case 111: // "DeprecateVar"
case 112: // "Drop"
case 113: // "Exec"
case 114: // "ExpireVar"
case 115: // "Id"
case 116: // "InitCol"
case 117: // "Log"
case 118: // "LogData"
case 119: // "Maturity"
case 120: // "Msg"
case 121: // "MultiMatch"
case 122: // "NoAuditLog"
case 123: // "NoLog"
case 124: // "Pass"
case 125: // "Pause"
case 126: // "Phase"
case 127: // "Prepend"
case 128: // "Proxy"
case 129: // "Redirect"
case 130: // "Rev"
case 131: // "SanatiseArg"
case 132: // "SanatiseMatched"
case 133: // "SanatiseMatchedBytes"
case 134: // "SanatiseRequestHeader"
case 135: // "SanatiseResponseHeader"
case 136: // "SetEnv"
case 137: // "SetSrc"
case 138: // "SetSid"
case 139: // "SetUID"
case 140: // "Severity"
case 141: // "Skip"
case 142: // "SkipAfter"
case 143: // "Status"
case 144: // "Tag"
case 145: // "ACTION_TRANSFORMATION_CMD_LINE"
case 146: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 147: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 148: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 149: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 150: // "ACTION_TRANSFORMATION_JS_DECODE"
case 151: // "ACTION_TRANSFORMATION_LENGTH"
case 152: // "ACTION_TRANSFORMATION_LOWERCASE"
case 153: // "ACTION_TRANSFORMATION_MD5"
case 154: // "ACTION_TRANSFORMATION_NONE"
case 155: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 156: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 157: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 158: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 159: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 160: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 161: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 162: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 163: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 164: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 165: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 166: // "ACTION_TRANSFORMATION_SHA1"
case 167: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 168: // "ACTION_TRANSFORMATION_TRIM"
case 169: // "ACTION_TRANSFORMATION_URL_DECODE"
case 170: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 171: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 172: // "Ver"
case 173: // "xmlns"
case 174: // "CONFIG_COMPONENT_SIG"
case 175: // "CONFIG_DIR_AUDIT_DIR"
case 176: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 177: // "CONFIG_DIR_AUDIT_ENG"
case 178: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 179: // "CONFIG_DIR_AUDIT_LOG"
case 180: // "CONFIG_DIR_AUDIT_LOG2"
case 181: // "CONFIG_DIR_AUDIT_LOG_P"
case 182: // "CONFIG_DIR_AUDIT_STS"
case 183: // "CONFIG_DIR_AUDIT_TPE"
case 184: // "CONFIG_DIR_DEBUG_LOG"
case 185: // "CONFIG_DIR_DEBUG_LVL"
case 186: // "CONFIG_DIR_GEO_DB"
case 187: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 188: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 189: // "CONFIG_DIR_REQ_BODY"
case 190: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 191: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 192: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 193: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 194: // "CONFIG_DIR_RES_BODY"
case 195: // "CONFIG_DIR_RES_BODY_LIMIT"
case 196: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 197: // "CONFIG_DIR_RULE_ENG"
case 198: // "CONFIG_DIR_SEC_ACTION"
case 199: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 200: // "CONFIG_DIR_SEC_MARKER"
case 201: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 202: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 203: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 204: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 205: // "CONFIG_UPDLOAD_KEEP_FILES"
case 206: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 207: // "CONFIG_UPLOAD_DIR"
case 208: // "CONFIG_UPLOAD_FILE_LIMIT"
case 209: // "CONFIG_UPLOAD_FILE_MODE"
case 210: // "CONFIG_VALUE_ABORT"
case 211: // "CONFIG_VALUE_DETC"
case 212: // "CONFIG_VALUE_HTTPS"
case 213: // "CONFIG_VALUE_OFF"
case 214: // "CONFIG_VALUE_ON"
case 215: // "CONFIG_VALUE_PARALLEL"
case 216: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 217: // "CONFIG_VALUE_REJECT"
case 218: // "CONFIG_VALUE_RELEVANT_ONLY"
case 219: // "CONFIG_VALUE_SERIAL"
case 220: // "CONFIG_VALUE_WARN"
case 221: // "CONFIG_XML_EXTERNAL_ENTITY"
case 222: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 223: // "CONGIG_DIR_SEC_ARG_SEP"
case 224: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 225: // "CONGIG_DIR_SEC_DATA_DIR"
case 226: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 227: // "CONGIG_DIR_SEC_TMP_DIR"
case 228: // "DIRECTIVE"
case 229: // "DIRECTIVE_SECRULESCRIPT"
case 230: // "FREE_TEXT"
case 231: // "OPERATOR"
case 232: // "OPERATOR_BEGINS_WITH"
case 233: // "OPERATOR_CONTAINS"
case 234: // "OPERATOR_CONTAINS_WORD"
case 235: // "OPERATOR_DETECT_SQLI"
case 236: // "OPERATOR_DETECT_XSS"
case 237: // "OPERATOR_ENDS_WITH"
case 238: // "OPERATOR_EQ"
case 239: // "OPERATOR_FUZZY_HASH"
case 240: // "OPERATOR_GE"
case 241: // "OPERATOR_GEOLOOKUP"
case 242: // "OPERATOR_GSB_LOOKUP"
case 243: // "OPERATOR_GT"
case 244: // "OPERATOR_INSPECT_FILE"
case 245: // "OPERATOR_IP_MATCH"
case 246: // "OPERATOR_IP_MATCH_FROM_FILE"
case 247: // "OPERATOR_LE"
case 248: // "OPERATOR_LT"
case 249: // "OPERATOR_PM"
case 250: // "OPERATOR_PM_FROM_FILE"
case 251: // "OPERATOR_RBL"
case 252: // "OPERATOR_RSUB"
case 253: // "OPERATOR_RX"
case 254: // "Operator Rx"
case 255: // "OPERATOR_STR_EQ"
case 256: // "OPERATOR_STR_MATCH"
case 257: // "OPERATOR_UNCONDITIONAL_MATCH"
case 258: // "OPERATOR_VALIDATE_BYTE_RANGE"
case 259: // "OPERATOR_VALIDATE_DTD"
case 260: // "OPERATOR_VALIDATE_HASH"
case 261: // "OPERATOR_VALIDATE_SCHEMA"
case 262: // "OPERATOR_VALIDATE_URL_ENCODING"
case 263: // "OPERATOR_VALIDATE_UTF8_ENCODING"
case 264: // "OPERATOR_VERIFY_CC"
case 265: // "OPERATOR_VERIFY_CPF"
case 266: // "OPERATOR_VERIFY_SSN"
case 267: // "OPERATOR_WITHIN"
case 268: // "OP_QUOTE"
case 269: // "QUOTATION_MARK"
case 270: // "RUN_TIME_VAR_BLD"
case 271: // "RUN_TIME_VAR_DUR"
case 272: // "RUN_TIME_VAR_HSV"
case 273: // "RUN_TIME_VAR_REMOTE_USER"
case 274: // "RUN_TIME_VAR_TIME"
case 275: // "RUN_TIME_VAR_TIME_DAY"
case 276: // "RUN_TIME_VAR_TIME_EPOCH"
case 277: // "RUN_TIME_VAR_TIME_HOUR"
case 278: // "RUN_TIME_VAR_TIME_MIN"
case 279: // "RUN_TIME_VAR_TIME_MON"
case 280: // "RUN_TIME_VAR_TIME_SEC"
case 281: // "RUN_TIME_VAR_TIME_WDAY"
case 282: // "RUN_TIME_VAR_TIME_YEAR"
case 283: // "VARIABLE"
case 284: // "Dictionary element"
case 285: // "Dictionary element, selected by regexp"
value.copy< std::string > (that.value);
break;
case 292: // op
case 293: // op_before_init
value.copy< std::unique_ptr > (that.value);
break;
case 296: // var
value.copy< std::unique_ptr > (that.value);
break;
case 297: // act
value.copy< std::unique_ptr > (that.value);
break;
case 295: // variables
value.copy< std::unique_ptr > > > (that.value);
break;
case 290: // actions
case 291: // actions_may_quoted
value.copy< std::unique_ptr > > > (that.value);
break;
default:
break;
}
location = that.location;
return *this;
}
template
inline
void
seclang_parser::yy_destroy_ (const char* yymsg, basic_symbol& yysym) const
{
if (yymsg)
YY_SYMBOL_PRINT (yymsg, yysym);
}
#if YYDEBUG
template
void
seclang_parser::yy_print_ (std::ostream& yyo,
const basic_symbol& yysym) const
{
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
symbol_number_type yytype = yysym.type_get ();
// Avoid a (spurious) G++ 4.8 warning about "array subscript is
// below array bounds".
if (yysym.empty ())
std::abort ();
yyo << (yytype < yyntokens_ ? "token" : "nterm")
<< ' ' << yytname_[yytype] << " ("
<< yysym.location << ": ";
YYUSE (yytype);
yyo << ')';
}
#endif
inline
void
seclang_parser::yypush_ (const char* m, state_type s, symbol_type& sym)
{
stack_symbol_type t (s, sym);
yypush_ (m, t);
}
inline
void
seclang_parser::yypush_ (const char* m, stack_symbol_type& s)
{
if (m)
YY_SYMBOL_PRINT (m, s);
yystack_.push (s);
}
inline
void
seclang_parser::yypop_ (unsigned int n)
{
yystack_.pop (n);
}
#if YYDEBUG
std::ostream&
seclang_parser::debug_stream () const
{
return *yycdebug_;
}
void
seclang_parser::set_debug_stream (std::ostream& o)
{
yycdebug_ = &o;
}
seclang_parser::debug_level_type
seclang_parser::debug_level () const
{
return yydebug_;
}
void
seclang_parser::set_debug_level (debug_level_type l)
{
yydebug_ = l;
}
#endif // YYDEBUG
inline seclang_parser::state_type
seclang_parser::yy_lr_goto_state_ (state_type yystate, int yysym)
{
int yyr = yypgoto_[yysym - yyntokens_] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
return yydefgoto_[yysym - yyntokens_];
}
inline bool
seclang_parser::yy_pact_value_is_default_ (int yyvalue)
{
return yyvalue == yypact_ninf_;
}
inline bool
seclang_parser::yy_table_value_is_error_ (int yyvalue)
{
return yyvalue == yytable_ninf_;
}
int
seclang_parser::parse ()
{
// State.
int yyn;
/// Length of the RHS of the rule being reduced.
int yylen = 0;
// Error handling.
int yynerrs_ = 0;
int yyerrstatus_ = 0;
/// The lookahead symbol.
symbol_type yyla;
/// The locations where the error started and ended.
stack_symbol_type yyerror_range[3];
/// The return value of parse ().
int yyresult;
// FIXME: This shoud be completely indented. It is not yet to
// avoid gratuitous conflicts when merging into the master branch.
try
{
YYCDEBUG << "Starting parse" << std::endl;
// User initialization code.
#line 338 "/home/zimmerle/core-trustwave/ModSecurity/src/parser/seclang-parser.yy" // lalr1.cc:741
{
// Initialize the initial location.
yyla.location.begin.filename = yyla.location.end.filename = &driver.file;
}
#line 853 "seclang-parser.cc" // lalr1.cc:741
/* Initialize the stack. The initial state will be set in
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
stacks with a primary value. */
yystack_.clear ();
yypush_ (YY_NULLPTR, 0, yyla);
// A new symbol was pushed on the stack.
yynewstate:
YYCDEBUG << "Entering state " << yystack_[0].state << std::endl;
// Accept?
if (yystack_[0].state == yyfinal_)
goto yyacceptlab;
goto yybackup;
// Backup.
yybackup:
// Try to take a decision without lookahead.
yyn = yypact_[yystack_[0].state];
if (yy_pact_value_is_default_ (yyn))
goto yydefault;
// Read a lookahead token.
if (yyla.empty ())
{
YYCDEBUG << "Reading a token: ";
try
{
symbol_type yylookahead (yylex (driver));
yyla.move (yylookahead);
}
catch (const syntax_error& yyexc)
{
error (yyexc);
goto yyerrlab1;
}
}
YY_SYMBOL_PRINT ("Next token is", yyla);
/* If the proper action on seeing token YYLA.TYPE is to reduce or
to detect an error, take that action. */
yyn += yyla.type_get ();
if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ())
goto yydefault;
// Reduce or error.
yyn = yytable_[yyn];
if (yyn <= 0)
{
if (yy_table_value_is_error_ (yyn))
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
// Count tokens shifted since error; after three, turn off error status.
if (yyerrstatus_)
--yyerrstatus_;
// Shift the lookahead token.
yypush_ ("Shifting", yyn, yyla);
goto yynewstate;
/*-----------------------------------------------------------.
| yydefault -- do the default action for the current state. |
`-----------------------------------------------------------*/
yydefault:
yyn = yydefact_[yystack_[0].state];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
/*-----------------------------.
| yyreduce -- Do a reduction. |
`-----------------------------*/
yyreduce:
yylen = yyr2_[yyn];
{
stack_symbol_type yylhs;
yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]);
/* Variants are always initialized to an empty instance of the
correct type. The default '$$ = $1' action is NOT applied
when using variants. */
switch (yyr1_[yyn])
{
case 93: // "Accuracy"
case 94: // "Allow"
case 95: // "Append"
case 96: // "AuditLog"
case 97: // "Block"
case 98: // "Capture"
case 99: // "Chain"
case 100: // "ACTION_CTL_AUDIT_ENGINE"
case 101: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 102: // "ACTION_CTL_BDY_JSON"
case 103: // "ACTION_CTL_BDY_XML"
case 104: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 105: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 106: // "ACTION_CTL_RULE_ENGINE"
case 107: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 108: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 109: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 110: // "Deny"
case 111: // "DeprecateVar"
case 112: // "Drop"
case 113: // "Exec"
case 114: // "ExpireVar"
case 115: // "Id"
case 116: // "InitCol"
case 117: // "Log"
case 118: // "LogData"
case 119: // "Maturity"
case 120: // "Msg"
case 121: // "MultiMatch"
case 122: // "NoAuditLog"
case 123: // "NoLog"
case 124: // "Pass"
case 125: // "Pause"
case 126: // "Phase"
case 127: // "Prepend"
case 128: // "Proxy"
case 129: // "Redirect"
case 130: // "Rev"
case 131: // "SanatiseArg"
case 132: // "SanatiseMatched"
case 133: // "SanatiseMatchedBytes"
case 134: // "SanatiseRequestHeader"
case 135: // "SanatiseResponseHeader"
case 136: // "SetEnv"
case 137: // "SetSrc"
case 138: // "SetSid"
case 139: // "SetUID"
case 140: // "Severity"
case 141: // "Skip"
case 142: // "SkipAfter"
case 143: // "Status"
case 144: // "Tag"
case 145: // "ACTION_TRANSFORMATION_CMD_LINE"
case 146: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 147: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 148: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 149: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 150: // "ACTION_TRANSFORMATION_JS_DECODE"
case 151: // "ACTION_TRANSFORMATION_LENGTH"
case 152: // "ACTION_TRANSFORMATION_LOWERCASE"
case 153: // "ACTION_TRANSFORMATION_MD5"
case 154: // "ACTION_TRANSFORMATION_NONE"
case 155: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 156: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 157: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 158: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 159: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 160: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 161: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 162: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 163: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 164: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 165: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 166: // "ACTION_TRANSFORMATION_SHA1"
case 167: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 168: // "ACTION_TRANSFORMATION_TRIM"
case 169: // "ACTION_TRANSFORMATION_URL_DECODE"
case 170: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 171: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 172: // "Ver"
case 173: // "xmlns"
case 174: // "CONFIG_COMPONENT_SIG"
case 175: // "CONFIG_DIR_AUDIT_DIR"
case 176: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 177: // "CONFIG_DIR_AUDIT_ENG"
case 178: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 179: // "CONFIG_DIR_AUDIT_LOG"
case 180: // "CONFIG_DIR_AUDIT_LOG2"
case 181: // "CONFIG_DIR_AUDIT_LOG_P"
case 182: // "CONFIG_DIR_AUDIT_STS"
case 183: // "CONFIG_DIR_AUDIT_TPE"
case 184: // "CONFIG_DIR_DEBUG_LOG"
case 185: // "CONFIG_DIR_DEBUG_LVL"
case 186: // "CONFIG_DIR_GEO_DB"
case 187: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 188: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 189: // "CONFIG_DIR_REQ_BODY"
case 190: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 191: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 192: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 193: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 194: // "CONFIG_DIR_RES_BODY"
case 195: // "CONFIG_DIR_RES_BODY_LIMIT"
case 196: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 197: // "CONFIG_DIR_RULE_ENG"
case 198: // "CONFIG_DIR_SEC_ACTION"
case 199: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 200: // "CONFIG_DIR_SEC_MARKER"
case 201: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 202: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 203: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 204: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 205: // "CONFIG_UPDLOAD_KEEP_FILES"
case 206: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 207: // "CONFIG_UPLOAD_DIR"
case 208: // "CONFIG_UPLOAD_FILE_LIMIT"
case 209: // "CONFIG_UPLOAD_FILE_MODE"
case 210: // "CONFIG_VALUE_ABORT"
case 211: // "CONFIG_VALUE_DETC"
case 212: // "CONFIG_VALUE_HTTPS"
case 213: // "CONFIG_VALUE_OFF"
case 214: // "CONFIG_VALUE_ON"
case 215: // "CONFIG_VALUE_PARALLEL"
case 216: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 217: // "CONFIG_VALUE_REJECT"
case 218: // "CONFIG_VALUE_RELEVANT_ONLY"
case 219: // "CONFIG_VALUE_SERIAL"
case 220: // "CONFIG_VALUE_WARN"
case 221: // "CONFIG_XML_EXTERNAL_ENTITY"
case 222: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 223: // "CONGIG_DIR_SEC_ARG_SEP"
case 224: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 225: // "CONGIG_DIR_SEC_DATA_DIR"
case 226: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 227: // "CONGIG_DIR_SEC_TMP_DIR"
case 228: // "DIRECTIVE"
case 229: // "DIRECTIVE_SECRULESCRIPT"
case 230: // "FREE_TEXT"
case 231: // "OPERATOR"
case 232: // "OPERATOR_BEGINS_WITH"
case 233: // "OPERATOR_CONTAINS"
case 234: // "OPERATOR_CONTAINS_WORD"
case 235: // "OPERATOR_DETECT_SQLI"
case 236: // "OPERATOR_DETECT_XSS"
case 237: // "OPERATOR_ENDS_WITH"
case 238: // "OPERATOR_EQ"
case 239: // "OPERATOR_FUZZY_HASH"
case 240: // "OPERATOR_GE"
case 241: // "OPERATOR_GEOLOOKUP"
case 242: // "OPERATOR_GSB_LOOKUP"
case 243: // "OPERATOR_GT"
case 244: // "OPERATOR_INSPECT_FILE"
case 245: // "OPERATOR_IP_MATCH"
case 246: // "OPERATOR_IP_MATCH_FROM_FILE"
case 247: // "OPERATOR_LE"
case 248: // "OPERATOR_LT"
case 249: // "OPERATOR_PM"
case 250: // "OPERATOR_PM_FROM_FILE"
case 251: // "OPERATOR_RBL"
case 252: // "OPERATOR_RSUB"
case 253: // "OPERATOR_RX"
case 254: // "Operator Rx"
case 255: // "OPERATOR_STR_EQ"
case 256: // "OPERATOR_STR_MATCH"
case 257: // "OPERATOR_UNCONDITIONAL_MATCH"
case 258: // "OPERATOR_VALIDATE_BYTE_RANGE"
case 259: // "OPERATOR_VALIDATE_DTD"
case 260: // "OPERATOR_VALIDATE_HASH"
case 261: // "OPERATOR_VALIDATE_SCHEMA"
case 262: // "OPERATOR_VALIDATE_URL_ENCODING"
case 263: // "OPERATOR_VALIDATE_UTF8_ENCODING"
case 264: // "OPERATOR_VERIFY_CC"
case 265: // "OPERATOR_VERIFY_CPF"
case 266: // "OPERATOR_VERIFY_SSN"
case 267: // "OPERATOR_WITHIN"
case 268: // "OP_QUOTE"
case 269: // "QUOTATION_MARK"
case 270: // "RUN_TIME_VAR_BLD"
case 271: // "RUN_TIME_VAR_DUR"
case 272: // "RUN_TIME_VAR_HSV"
case 273: // "RUN_TIME_VAR_REMOTE_USER"
case 274: // "RUN_TIME_VAR_TIME"
case 275: // "RUN_TIME_VAR_TIME_DAY"
case 276: // "RUN_TIME_VAR_TIME_EPOCH"
case 277: // "RUN_TIME_VAR_TIME_HOUR"
case 278: // "RUN_TIME_VAR_TIME_MIN"
case 279: // "RUN_TIME_VAR_TIME_MON"
case 280: // "RUN_TIME_VAR_TIME_SEC"
case 281: // "RUN_TIME_VAR_TIME_WDAY"
case 282: // "RUN_TIME_VAR_TIME_YEAR"
case 283: // "VARIABLE"
case 284: // "Dictionary element"
case 285: // "Dictionary element, selected by regexp"
yylhs.value.build< std::string > ();
break;
case 292: // op
case 293: // op_before_init
yylhs.value.build< std::unique_ptr > ();
break;
case 296: // var
yylhs.value.build< std::unique_ptr > ();
break;
case 297: // act
yylhs.value.build< std::unique_ptr > ();
break;
case 295: // variables
yylhs.value.build< std::unique_ptr > > > ();
break;
case 290: // actions
case 291: // actions_may_quoted
yylhs.value.build< std::unique_ptr > > > ();
break;
default:
break;
}
// Compute the default @$.
{
slice slice (yystack_, yylen);
YYLLOC_DEFAULT (yylhs.location, slice, yylen);
}
// Perform the reduction.
YY_REDUCE_PRINT (yyn);
try
{
switch (yyn)
{
case 2:
#line 664 "seclang-parser.yy" // lalr1.cc:859
{
return 0;
}
#line 1183 "seclang-parser.cc" // lalr1.cc:859
break;
case 6:
#line 677 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8));
}
#line 1191 "seclang-parser.cc" // lalr1.cc:859
break;
case 7:
#line 683 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStorageDir(yystack_[0].value.as< std::string > ());
}
#line 1199 "seclang-parser.cc" // lalr1.cc:859
break;
case 8:
#line 689 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus);
}
#line 1207 "seclang-parser.cc" // lalr1.cc:859
break;
case 9:
#line 693 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus);
}
#line 1215 "seclang-parser.cc" // lalr1.cc:859
break;
case 10:
#line 697 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus);
}
#line 1223 "seclang-parser.cc" // lalr1.cc:859
break;
case 11:
#line 703 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8));
}
#line 1231 "seclang-parser.cc" // lalr1.cc:859
break;
case 12:
#line 709 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFilePath2(yystack_[0].value.as< std::string > ());
}
#line 1239 "seclang-parser.cc" // lalr1.cc:859
break;
case 13:
#line 715 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setParts(yystack_[0].value.as< std::string > ());
}
#line 1247 "seclang-parser.cc" // lalr1.cc:859
break;
case 14:
#line 721 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFilePath1(yystack_[0].value.as< std::string > ());
}
#line 1255 "seclang-parser.cc" // lalr1.cc:859
break;
case 15:
#line 727 "seclang-parser.yy" // lalr1.cc:859
{
std::string relevant_status(yystack_[0].value.as< std::string > ());
relevant_status.pop_back();
relevant_status.erase(0, 1);
driver.m_auditLog->setRelevantStatus(relevant_status);
}
#line 1266 "seclang-parser.cc" // lalr1.cc:859
break;
case 16:
#line 736 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType);
}
#line 1274 "seclang-parser.cc" // lalr1.cc:859
break;
case 17:
#line 740 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType);
}
#line 1282 "seclang-parser.cc" // lalr1.cc:859
break;
case 18:
#line 744 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType);
}
#line 1290 "seclang-parser.cc" // lalr1.cc:859
break;
case 19:
#line 750 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadKeepFiles = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1298 "seclang-parser.cc" // lalr1.cc:859
break;
case 20:
#line 754 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadKeepFiles = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1306 "seclang-parser.cc" // lalr1.cc:859
break;
case 21:
#line 758 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadFileLimit.m_set = true;
driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 10);
}
#line 1315 "seclang-parser.cc" // lalr1.cc:859
break;
case 22:
#line 763 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadFileMode.m_set = true;
driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8);
}
#line 1324 "seclang-parser.cc" // lalr1.cc:859
break;
case 23:
#line 768 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadDirectory.m_set = true;
driver.m_uploadDirectory.m_value = yystack_[0].value.as< std::string > ();
}
#line 1333 "seclang-parser.cc" // lalr1.cc:859
break;
case 24:
#line 773 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1341 "seclang-parser.cc" // lalr1.cc:859
break;
case 25:
#line 777 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1349 "seclang-parser.cc" // lalr1.cc:859
break;
case 26:
#line 784 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ());
}
#line 1357 "seclang-parser.cc" // lalr1.cc:859
break;
case 27:
#line 788 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ());
}
#line 1365 "seclang-parser.cc" // lalr1.cc:859
break;
case 28:
#line 795 "seclang-parser.yy" // lalr1.cc:859
{
ACTION_INIT(yystack_[0].value.as< std::unique_ptr > (), yystack_[3].location)
yystack_[2].value.as< std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ()));
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[2].value.as< std::unique_ptr > > > ());
}
#line 1375 "seclang-parser.cc" // lalr1.cc:859
break;
case 29:
#line 801 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr>> b(new std::vector>());
ACTION_INIT(yystack_[0].value.as< std::unique_ptr > (), yystack_[1].location)
b->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ()));
yylhs.value.as< std::unique_ptr > > > () = std::move(b);
}
#line 1386 "seclang-parser.cc" // lalr1.cc:859
break;
case 30:
#line 811 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > () = std::move(yystack_[0].value.as< std::unique_ptr > ());
std::string error;
if (yylhs.value.as< std::unique_ptr > ()->init(driver.ref.back(), &error) == false) {
driver.error(yystack_[1].location, error);
YYERROR;
}
}
#line 1399 "seclang-parser.cc" // lalr1.cc:859
break;
case 31:
#line 820 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > () = std::move(yystack_[0].value.as< std::unique_ptr > ());
yylhs.value.as< std::unique_ptr > ()->m_negation = true;
std::string error;
if (yylhs.value.as< std::unique_ptr > ()->init(driver.ref.back(), &error) == false) {
driver.error(yystack_[2].location, error);
YYERROR;
}
}
#line 1413 "seclang-parser.cc" // lalr1.cc:859
break;
case 32:
#line 830 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(utils::string::removeBracketsIfNeeded(yystack_[0].value.as< std::string > ())));
std::string error;
if (yylhs.value.as< std::unique_ptr > ()->init(driver.ref.back(), &error) == false) {
driver.error(yystack_[1].location, error);
YYERROR;
}
}
#line 1426 "seclang-parser.cc" // lalr1.cc:859
break;
case 33:
#line 839 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx("!" + utils::string::removeBracketsIfNeeded(yystack_[0].value.as< std::string > ())));
std::string error;
if (yylhs.value.as< std::unique_ptr > ()->init(driver.ref.back(), &error) == false) {
driver.error(yystack_[2].location, error);
YYERROR;
}
}
#line 1439 "seclang-parser.cc" // lalr1.cc:859
break;
case 34:
#line 851 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::UnconditionalMatch());
}
#line 1447 "seclang-parser.cc" // lalr1.cc:859
break;
case 35:
#line 855 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectSQLi());
}
#line 1455 "seclang-parser.cc" // lalr1.cc:859
break;
case 36:
#line 859 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectXSS());
}
#line 1463 "seclang-parser.cc" // lalr1.cc:859
break;
case 37:
#line 863 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUrlEncoding());
}
#line 1471 "seclang-parser.cc" // lalr1.cc:859
break;
case 38:
#line 867 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUtf8Encoding());
}
#line 1479 "seclang-parser.cc" // lalr1.cc:859
break;
case 39:
#line 871 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::InspectFile($1); */
OPERATOR_NOT_SUPPORTED("InspectFile", yystack_[2].location);
}
#line 1488 "seclang-parser.cc" // lalr1.cc:859
break;
case 40:
#line 876 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::FuzzyHash(); */
OPERATOR_NOT_SUPPORTED("FuzzyHash", yystack_[2].location);
}
#line 1497 "seclang-parser.cc" // lalr1.cc:859
break;
case 41:
#line 881 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateByteRange(yystack_[0].value.as< std::string > ()));
}
#line 1505 "seclang-parser.cc" // lalr1.cc:859
break;
case 42:
#line 885 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateDTD(yystack_[0].value.as< std::string > ()));
}
#line 1513 "seclang-parser.cc" // lalr1.cc:859
break;
case 43:
#line 889 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::ValidateHash($1); */
OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location);
}
#line 1522 "seclang-parser.cc" // lalr1.cc:859
break;
case 44:
#line 894 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateSchema(yystack_[0].value.as< std::string > ()));
}
#line 1530 "seclang-parser.cc" // lalr1.cc:859
break;
case 45:
#line 898 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifyCC(yystack_[0].value.as< std::string > ()));
}
#line 1538 "seclang-parser.cc" // lalr1.cc:859
break;
case 46:
#line 902 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::VerifyCPF($1); */
OPERATOR_NOT_SUPPORTED("VerifyCPF", yystack_[2].location);
}
#line 1547 "seclang-parser.cc" // lalr1.cc:859
break;
case 47:
#line 907 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::VerifySSN($1); */
OPERATOR_NOT_SUPPORTED("VerifySSN", yystack_[2].location);
}
#line 1556 "seclang-parser.cc" // lalr1.cc:859
break;
case 48:
#line 912 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::GsbLookup($1); */
OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location);
}
#line 1565 "seclang-parser.cc" // lalr1.cc:859
break;
case 49:
#line 917 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::Rsub($1); */
OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location);
}
#line 1574 "seclang-parser.cc" // lalr1.cc:859
break;
case 50:
#line 922 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Within(yystack_[0].value.as< std::string > ()));
}
#line 1582 "seclang-parser.cc" // lalr1.cc:859
break;
case 51:
#line 926 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ContainsWord(yystack_[0].value.as< std::string > ()));
}
#line 1590 "seclang-parser.cc" // lalr1.cc:859
break;
case 52:
#line 930 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Contains(yystack_[0].value.as< std::string > ()));
}
#line 1598 "seclang-parser.cc" // lalr1.cc:859
break;
case 53:
#line 934 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::EndsWith(yystack_[0].value.as< std::string > ()));
}
#line 1606 "seclang-parser.cc" // lalr1.cc:859
break;
case 54:
#line 938 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Eq(yystack_[0].value.as< std::string > ()));
}
#line 1614 "seclang-parser.cc" // lalr1.cc:859
break;
case 55:
#line 942 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Ge(yystack_[0].value.as< std::string > ()));
}
#line 1622 "seclang-parser.cc" // lalr1.cc:859
break;
case 56:
#line 946 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Gt(yystack_[0].value.as< std::string > ()));
}
#line 1630 "seclang-parser.cc" // lalr1.cc:859
break;
case 57:
#line 950 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatchF(yystack_[0].value.as< std::string > ()));
}
#line 1638 "seclang-parser.cc" // lalr1.cc:859
break;
case 58:
#line 954 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatch(yystack_[0].value.as< std::string > ()));
}
#line 1646 "seclang-parser.cc" // lalr1.cc:859
break;
case 59:
#line 958 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Le(yystack_[0].value.as< std::string > ()));
}
#line 1654 "seclang-parser.cc" // lalr1.cc:859
break;
case 60:
#line 962 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Lt(yystack_[0].value.as< std::string > ()));
}
#line 1662 "seclang-parser.cc" // lalr1.cc:859
break;
case 61:
#line 966 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::PmFromFile(yystack_[0].value.as< std::string > ()));
}
#line 1670 "seclang-parser.cc" // lalr1.cc:859
break;
case 62:
#line 970 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Pm(yystack_[0].value.as< std::string > ()));
}
#line 1678 "seclang-parser.cc" // lalr1.cc:859
break;
case 63:
#line 974 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rbl(yystack_[0].value.as< std::string > ()));
}
#line 1686 "seclang-parser.cc" // lalr1.cc:859
break;
case 64:
#line 978 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(yystack_[0].value.as< std::string > ()));
}
#line 1694 "seclang-parser.cc" // lalr1.cc:859
break;
case 65:
#line 982 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrEq(yystack_[0].value.as< std::string > ()));
}
#line 1702 "seclang-parser.cc" // lalr1.cc:859
break;
case 66:
#line 986 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrMatch(yystack_[0].value.as< std::string > ()));
}
#line 1710 "seclang-parser.cc" // lalr1.cc:859
break;
case 67:
#line 990 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::BeginsWith(yystack_[0].value.as< std::string > ()));
}
#line 1718 "seclang-parser.cc" // lalr1.cc:859
break;
case 68:
#line 994 "seclang-parser.yy" // lalr1.cc:859
{
#ifdef WITH_GEOIP
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::GeoLookup());
#else
std::stringstream ss;
ss << "This version of ModSecurity was not compiled with GeoIP support.";
driver.error(yystack_[1].location, ss.str());
YYERROR;
#endif // WITH_GEOIP
}
#line 1733 "seclang-parser.cc" // lalr1.cc:859
break;
case 70:
#line 1009 "seclang-parser.yy" // lalr1.cc:859
{
std::vector *a = new std::vector();
for (auto &i : *yystack_[0].value.as< std::unique_ptr > > > ().get()) {
a->push_back(i.release());
}
std::vector *v = new std::vector();
for (auto &i : *yystack_[2].value.as< std::unique_ptr > > > ().get()) {
v->push_back(i.release());
}
Operator *op = yystack_[1].value.as< std::unique_ptr > ().release();
Rule *rule = new Rule(
/* op */ op,
/* variables */ v,
/* actions */ a,
/* file name */ driver.ref.back(),
/* line number */ yystack_[4].location.end.line
);
if (driver.addSecRule(rule) == false) {
delete rule;
YYERROR;
}
}
#line 1761 "seclang-parser.cc" // lalr1.cc:859
break;
case 71:
#line 1033 "seclang-parser.yy" // lalr1.cc:859
{
std::vector *v = new std::vector();
for (auto &i : *yystack_[1].value.as< std::unique_ptr > > > ().get()) {
v->push_back(i.release());
}
Rule *rule = new Rule(
/* op */ yystack_[0].value.as< std::unique_ptr > ().release(),
/* variables */ v,
/* actions */ NULL,
/* file name */ driver.ref.back(),
/* line number */ yystack_[3].location.end.line
);
if (driver.addSecRule(rule) == false) {
delete rule;
YYERROR;
}
}
#line 1784 "seclang-parser.cc" // lalr1.cc:859
break;
case 72:
#line 1052 "seclang-parser.yy" // lalr1.cc:859
{
std::vector *a = new std::vector();
for (auto &i : *yystack_[0].value.as< std::unique_ptr > > > ().get()) {
a->push_back(i.release());
}
Rule *rule = new Rule(
/* op */ NULL,
/* variables */ NULL,
/* actions */ a,
/* file name */ driver.ref.back(),
/* line number */ yystack_[2].location.end.line
);
driver.addSecAction(rule);
}
#line 1803 "seclang-parser.cc" // lalr1.cc:859
break;
case 73:
#line 1067 "seclang-parser.yy" // lalr1.cc:859
{
/*
TODO: implement the SecRuleScript directive
*/
}
#line 1815 "seclang-parser.cc" // lalr1.cc:859
break;
case 74:
#line 1075 "seclang-parser.yy" // lalr1.cc:859
{
std::vector *actions = new std::vector();
for (auto &i : *yystack_[0].value.as< std::unique_ptr > > > ().get()) {
actions->push_back(i.release());
}
std::vector checkedActions;
int definedPhase = -1;
int secRuleDefinedPhase = -1;
for (actions::Action *a : *actions) {
actions::Phase *phase = dynamic_cast(a);
if (phase != NULL) {
definedPhase = phase->m_phase;
secRuleDefinedPhase = phase->m_secRulesPhase;
delete phase;
} else if (a->action_kind == actions::Action::RunTimeOnlyIfMatchKind ||
a->action_kind == actions::Action::RunTimeBeforeMatchAttemptKind) {
actions::transformations::None *none = dynamic_cast(a);
if (none != NULL) {
driver.error(yystack_[2].location, "The transformation none is not suitable to be part of the SecDefaultActions");
YYERROR;
}
checkedActions.push_back(a);
} else {
driver.error(yystack_[2].location, "The action '" + a->m_name + "' is not suitable to be part of the SecDefaultActions");
YYERROR;
}
}
if (definedPhase == -1) {
definedPhase = modsecurity::Phases::RequestHeadersPhase;
}
if (!driver.m_defaultActions[definedPhase].empty()) {
std::stringstream ss;
ss << "SecDefaultActions can only be placed once per phase and configuration context. Phase ";
ss << secRuleDefinedPhase;
ss << " was informed already.";
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
for (actions::Action *a : checkedActions) {
driver.m_defaultActions[definedPhase].push_back(a);
}
delete actions;
}
#line 1866 "seclang-parser.cc" // lalr1.cc:859
break;
case 75:
#line 1122 "seclang-parser.yy" // lalr1.cc:859
{
driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as< std::string > ()));
}
#line 1874 "seclang-parser.cc" // lalr1.cc:859
break;
case 76:
#line 1126 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::DisabledRuleEngine;
}
#line 1882 "seclang-parser.cc" // lalr1.cc:859
break;
case 77:
#line 1130 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::EnabledRuleEngine;
}
#line 1890 "seclang-parser.cc" // lalr1.cc:859
break;
case 78:
#line 1134 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::DetectionOnlyRuleEngine;
}
#line 1898 "seclang-parser.cc" // lalr1.cc:859
break;
case 79:
#line 1138 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRequestBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1906 "seclang-parser.cc" // lalr1.cc:859
break;
case 80:
#line 1142 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRequestBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1914 "seclang-parser.cc" // lalr1.cc:859
break;
case 81:
#line 1146 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secResponseBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1922 "seclang-parser.cc" // lalr1.cc:859
break;
case 82:
#line 1150 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secResponseBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1930 "seclang-parser.cc" // lalr1.cc:859
break;
case 83:
#line 1154 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_components.push_back(yystack_[0].value.as< std::string > ());
}
#line 1938 "seclang-parser.cc" // lalr1.cc:859
break;
case 84:
#line 1158 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
if (driver.m_exceptions.load(yystack_[0].value.as< std::string > (), &error) == false) {
std::stringstream ss;
ss << "SecRuleRemoveById: failed to load:";
ss << yystack_[0].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
}
#line 1955 "seclang-parser.cc" // lalr1.cc:859
break;
case 85:
#line 1172 "seclang-parser.yy" // lalr1.cc:859
{
if (driver.m_debugLog != NULL) {
driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as< std::string > ().c_str()));
} else {
std::stringstream ss;
ss << "Internal error, there is no DebugLog ";
ss << "object associated with the driver class";
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
}
#line 1971 "seclang-parser.cc" // lalr1.cc:859
break;
case 86:
#line 1184 "seclang-parser.yy" // lalr1.cc:859
{
if (driver.m_debugLog != NULL) {
std::string error;
driver.m_debugLog->setDebugLogFile(yystack_[0].value.as< std::string > (), &error);
if (error.size() > 0) {
std::stringstream ss;
ss << "Failed to start DebugLog: " << error;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
} else {
std::stringstream ss;
ss << "Internal error, there is no DebugLog ";
ss << "object associated with the driver class";
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
}
#line 1994 "seclang-parser.cc" // lalr1.cc:859
break;
case 87:
#line 1204 "seclang-parser.yy" // lalr1.cc:859
{
#ifdef WITH_GEOIP
std::string file = modsecurity::utils::find_resource(yystack_[0].value.as< std::string > (),
driver.ref.back());
if (GeoLookup::getInstance().setDataBase(file) == false) {
std::stringstream ss;
ss << "Failed to load the GeoDB from: ";
ss << file;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
#else
std::stringstream ss;
ss << "This version of ModSecurity was not compiled with GeoIP support.";
driver.error(yystack_[1].location, ss.str());
YYERROR;
#endif // WITH_GEOIP
}
#line 2017 "seclang-parser.cc" // lalr1.cc:859
break;
case 88:
#line 1224 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyLimit.m_set = true;
driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str());
}
#line 2026 "seclang-parser.cc" // lalr1.cc:859
break;
case 89:
#line 1229 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyNoFilesLimit.m_set = true;
driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str());
}
#line 2035 "seclang-parser.cc" // lalr1.cc:859
break;
case 90:
#line 1234 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyInMemoryLimit.m_set = true;
driver.m_requestBodyInMemoryLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str());
}
#line 2044 "seclang-parser.cc" // lalr1.cc:859
break;
case 91:
#line 1239 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyLimit.m_set = true;
driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str());
}
#line 2053 "seclang-parser.cc" // lalr1.cc:859
break;
case 92:
#line 1244 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction;
}
#line 2061 "seclang-parser.cc" // lalr1.cc:859
break;
case 93:
#line 1248 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction;
}
#line 2069 "seclang-parser.cc" // lalr1.cc:859
break;
case 94:
#line 1252 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction;
}
#line 2077 "seclang-parser.cc" // lalr1.cc:859
break;
case 95:
#line 1256 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction;
}
#line 2085 "seclang-parser.cc" // lalr1.cc:859
break;
case 96:
#line 1260 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction;
}
#line 2093 "seclang-parser.cc" // lalr1.cc:859
break;
case 97:
#line 1264 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction;
}
#line 2101 "seclang-parser.cc" // lalr1.cc:859
break;
case 100:
#line 1270 "seclang-parser.yy" // lalr1.cc:859
{
std::istringstream buf(yystack_[0].value.as< std::string > ());
std::istream_iterator beg(buf), end;
std::set tokens(beg, end);
for (std::set::iterator it=tokens.begin();
it!=tokens.end(); ++it)
{
driver.m_responseBodyTypeToBeInspected.insert(*it);
}
}
#line 2116 "seclang-parser.cc" // lalr1.cc:859
break;
case 101:
#line 1281 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secXMLExternalEntity = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 2124 "seclang-parser.cc" // lalr1.cc:859
break;
case 102:
#line 1285 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secXMLExternalEntity = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 2132 "seclang-parser.cc" // lalr1.cc:859
break;
case 109:
#line 1295 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2139 "seclang-parser.cc" // lalr1.cc:859
break;
case 110:
#line 1301 "seclang-parser.yy" // lalr1.cc:859
{
yystack_[2].value.as< std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ()));
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[2].value.as< std::unique_ptr > > > ());
}
#line 2148 "seclang-parser.cc" // lalr1.cc:859
break;
case 111:
#line 1306 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as< std::unique_ptr > ())));
yystack_[3].value.as< std::unique_ptr > > > ()->push_back(std::move(c));
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[3].value.as< std::unique_ptr > > > ());
}
#line 2158 "seclang-parser.cc" // lalr1.cc:859
break;
case 112:
#line 1312 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as< std::unique_ptr > ())));
yystack_[3].value.as< std::unique_ptr > > > ()->push_back(std::move(c));
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[3].value.as< std::unique_ptr > > > ());
}
#line 2168 "seclang-parser.cc" // lalr1.cc:859
break;
case 113:
#line 1318 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr>> b(new std::vector>());
b->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ()));
yylhs.value.as< std::unique_ptr > > > () = std::move(b);
}
#line 2178 "seclang-parser.cc" // lalr1.cc:859
break;
case 114:
#line 1324 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr>> b(new std::vector>());
std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as< std::unique_ptr > ())));
b->push_back(std::move(c));
yylhs.value.as< std::unique_ptr > > > () = std::move(b);
}
#line 2189 "seclang-parser.cc" // lalr1.cc:859
break;
case 115:
#line 1331 "seclang-parser.yy" // lalr1.cc:859
{
std::unique_ptr>> b(new std::vector>());
std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as< std::unique_ptr > ())));
b->push_back(std::move(c));
yylhs.value.as< std::unique_ptr > > > () = std::move(b);
}
#line 2200 "seclang-parser.cc" // lalr1.cc:859
break;
case 116:
#line 1341 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2208 "seclang-parser.cc" // lalr1.cc:859
break;
case 117:
#line 1345 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2216 "seclang-parser.cc" // lalr1.cc:859
break;
case 118:
#line 1349 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_NoDictElement());
}
#line 2224 "seclang-parser.cc" // lalr1.cc:859
break;
case 119:
#line 1353 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2232 "seclang-parser.cc" // lalr1.cc:859
break;
case 120:
#line 1357 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2240 "seclang-parser.cc" // lalr1.cc:859
break;
case 121:
#line 1361 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_NoDictElement());
}
#line 2248 "seclang-parser.cc" // lalr1.cc:859
break;
case 122:
#line 1365 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2256 "seclang-parser.cc" // lalr1.cc:859
break;
case 123:
#line 1369 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2264 "seclang-parser.cc" // lalr1.cc:859
break;
case 124:
#line 1373 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_NoDictElement());
}
#line 2272 "seclang-parser.cc" // lalr1.cc:859
break;
case 125:
#line 1377 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2280 "seclang-parser.cc" // lalr1.cc:859
break;
case 126:
#line 1381 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2288 "seclang-parser.cc" // lalr1.cc:859
break;
case 127:
#line 1385 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_NoDictElement());
}
#line 2296 "seclang-parser.cc" // lalr1.cc:859
break;
case 128:
#line 1389 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2304 "seclang-parser.cc" // lalr1.cc:859
break;
case 129:
#line 1393 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2312 "seclang-parser.cc" // lalr1.cc:859
break;
case 130:
#line 1397 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_NoDictElement());
}
#line 2320 "seclang-parser.cc" // lalr1.cc:859
break;
case 131:
#line 1401 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2328 "seclang-parser.cc" // lalr1.cc:859
break;
case 132:
#line 1405 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2336 "seclang-parser.cc" // lalr1.cc:859
break;
case 133:
#line 1409 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_NoDictElement());
}
#line 2344 "seclang-parser.cc" // lalr1.cc:859
break;
case 134:
#line 1413 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2352 "seclang-parser.cc" // lalr1.cc:859
break;
case 135:
#line 1417 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2360 "seclang-parser.cc" // lalr1.cc:859
break;
case 136:
#line 1421 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_NoDictElement());
}
#line 2368 "seclang-parser.cc" // lalr1.cc:859
break;
case 137:
#line 1425 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2376 "seclang-parser.cc" // lalr1.cc:859
break;
case 138:
#line 1429 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2384 "seclang-parser.cc" // lalr1.cc:859
break;
case 139:
#line 1433 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_NoDictElement());
}
#line 2392 "seclang-parser.cc" // lalr1.cc:859
break;
case 140:
#line 1437 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2400 "seclang-parser.cc" // lalr1.cc:859
break;
case 141:
#line 1441 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2408 "seclang-parser.cc" // lalr1.cc:859
break;
case 142:
#line 1445 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_NoDictElement());
}
#line 2416 "seclang-parser.cc" // lalr1.cc:859
break;
case 143:
#line 1449 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2424 "seclang-parser.cc" // lalr1.cc:859
break;
case 144:
#line 1453 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2432 "seclang-parser.cc" // lalr1.cc:859
break;
case 145:
#line 1457 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_NoDictElement());
}
#line 2440 "seclang-parser.cc" // lalr1.cc:859
break;
case 146:
#line 1461 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2448 "seclang-parser.cc" // lalr1.cc:859
break;
case 147:
#line 1465 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2456 "seclang-parser.cc" // lalr1.cc:859
break;
case 148:
#line 1469 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_NoDictElement());
}
#line 2464 "seclang-parser.cc" // lalr1.cc:859
break;
case 149:
#line 1473 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2472 "seclang-parser.cc" // lalr1.cc:859
break;
case 150:
#line 1477 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2480 "seclang-parser.cc" // lalr1.cc:859
break;
case 151:
#line 1481 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_NoDictElement());
}
#line 2488 "seclang-parser.cc" // lalr1.cc:859
break;
case 152:
#line 1485 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2496 "seclang-parser.cc" // lalr1.cc:859
break;
case 153:
#line 1489 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2504 "seclang-parser.cc" // lalr1.cc:859
break;
case 154:
#line 1493 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_NoDictElement());
}
#line 2512 "seclang-parser.cc" // lalr1.cc:859
break;
case 155:
#line 1497 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2520 "seclang-parser.cc" // lalr1.cc:859
break;
case 156:
#line 1501 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2528 "seclang-parser.cc" // lalr1.cc:859
break;
case 157:
#line 1505 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_NoDictElement());
}
#line 2536 "seclang-parser.cc" // lalr1.cc:859
break;
case 158:
#line 1509 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2544 "seclang-parser.cc" // lalr1.cc:859
break;
case 159:
#line 1513 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2552 "seclang-parser.cc" // lalr1.cc:859
break;
case 160:
#line 1517 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_NoDictElement());
}
#line 2560 "seclang-parser.cc" // lalr1.cc:859
break;
case 161:
#line 1521 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2568 "seclang-parser.cc" // lalr1.cc:859
break;
case 162:
#line 1525 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2576 "seclang-parser.cc" // lalr1.cc:859
break;
case 163:
#line 1529 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_NoDictElement());
}
#line 2584 "seclang-parser.cc" // lalr1.cc:859
break;
case 164:
#line 1533 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2592 "seclang-parser.cc" // lalr1.cc:859
break;
case 165:
#line 1537 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2600 "seclang-parser.cc" // lalr1.cc:859
break;
case 166:
#line 1541 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_NoDictElement());
}
#line 2608 "seclang-parser.cc" // lalr1.cc:859
break;
case 167:
#line 1545 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV:" + yystack_[0].value.as< std::string > ()));
}
#line 2616 "seclang-parser.cc" // lalr1.cc:859
break;
case 168:
#line 1549 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV:" + yystack_[0].value.as< std::string > ()));
}
#line 2624 "seclang-parser.cc" // lalr1.cc:859
break;
case 169:
#line 1553 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV"));
}
#line 2632 "seclang-parser.cc" // lalr1.cc:859
break;
case 170:
#line 1557 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML("XML:" + yystack_[0].value.as< std::string > ()));
}
#line 2640 "seclang-parser.cc" // lalr1.cc:859
break;
case 171:
#line 1561 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML("XML:" + yystack_[0].value.as< std::string > ()));
}
#line 2648 "seclang-parser.cc" // lalr1.cc:859
break;
case 172:
#line 1565 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML_NoDictElement());
}
#line 2656 "seclang-parser.cc" // lalr1.cc:859
break;
case 173:
#line 1569 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2664 "seclang-parser.cc" // lalr1.cc:859
break;
case 174:
#line 1573 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2672 "seclang-parser.cc" // lalr1.cc:859
break;
case 175:
#line 1577 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_NoDictElement());
}
#line 2680 "seclang-parser.cc" // lalr1.cc:859
break;
case 176:
#line 1582 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2688 "seclang-parser.cc" // lalr1.cc:859
break;
case 177:
#line 1586 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2696 "seclang-parser.cc" // lalr1.cc:859
break;
case 178:
#line 1590 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_NoDictElement());
}
#line 2704 "seclang-parser.cc" // lalr1.cc:859
break;
case 179:
#line 1595 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2712 "seclang-parser.cc" // lalr1.cc:859
break;
case 180:
#line 1599 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2720 "seclang-parser.cc" // lalr1.cc:859
break;
case 181:
#line 1603 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_NoDictElement());
}
#line 2728 "seclang-parser.cc" // lalr1.cc:859
break;
case 182:
#line 1608 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2736 "seclang-parser.cc" // lalr1.cc:859
break;
case 183:
#line 1612 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2744 "seclang-parser.cc" // lalr1.cc:859
break;
case 184:
#line 1616 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_NoDictElement());
}
#line 2752 "seclang-parser.cc" // lalr1.cc:859
break;
case 185:
#line 1621 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 2760 "seclang-parser.cc" // lalr1.cc:859
break;
case 186:
#line 1625 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 2768 "seclang-parser.cc" // lalr1.cc:859
break;
case 187:
#line 1629 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_NoDictElement());
}
#line 2776 "seclang-parser.cc" // lalr1.cc:859
break;
case 188:
#line 1636 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames());
}
#line 2784 "seclang-parser.cc" // lalr1.cc:859
break;
case 189:
#line 1640 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames());
}
#line 2792 "seclang-parser.cc" // lalr1.cc:859
break;
case 190:
#line 1644 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames());
}
#line 2800 "seclang-parser.cc" // lalr1.cc:859
break;
case 191:
#line 1648 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames());
}
#line 2808 "seclang-parser.cc" // lalr1.cc:859
break;
case 192:
#line 1652 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentType());
}
#line 2816 "seclang-parser.cc" // lalr1.cc:859
break;
case 193:
#line 1656 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames());
}
#line 2824 "seclang-parser.cc" // lalr1.cc:859
break;
case 194:
#line 1660 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsCombinedSize());
}
#line 2832 "seclang-parser.cc" // lalr1.cc:859
break;
case 195:
#line 1664 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::AuthType());
}
#line 2840 "seclang-parser.cc" // lalr1.cc:859
break;
case 196:
#line 1668 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesCombinedSize());
}
#line 2848 "seclang-parser.cc" // lalr1.cc:859
break;
case 197:
#line 1672 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequest());
}
#line 2856 "seclang-parser.cc" // lalr1.cc:859
break;
case 198:
#line 1676 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequestLength());
}
#line 2864 "seclang-parser.cc" // lalr1.cc:859
break;
case 199:
#line 1680 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::InboundDataError());
}
#line 2872 "seclang-parser.cc" // lalr1.cc:859
break;
case 200:
#line 1684 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVar());
}
#line 2880 "seclang-parser.cc" // lalr1.cc:859
break;
case 201:
#line 1688 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarName());
}
#line 2888 "seclang-parser.cc" // lalr1.cc:859
break;
case 202:
#line 1692 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartCrlfLFLines());
}
#line 2896 "seclang-parser.cc" // lalr1.cc:859
break;
case 203:
#line 1696 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartDateAfter());
}
#line 2904 "seclang-parser.cc" // lalr1.cc:859
break;
case 204:
#line 1700 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartFileLimitExceeded());
}
#line 2912 "seclang-parser.cc" // lalr1.cc:859
break;
case 205:
#line 1704 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartHeaderFolding());
}
#line 2920 "seclang-parser.cc" // lalr1.cc:859
break;
case 206:
#line 1708 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidHeaderFolding());
}
#line 2928 "seclang-parser.cc" // lalr1.cc:859
break;
case 207:
#line 1712 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidQuoting());
}
#line 2936 "seclang-parser.cc" // lalr1.cc:859
break;
case 208:
#line 1716 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartStrictError());
}
#line 2944 "seclang-parser.cc" // lalr1.cc:859
break;
case 209:
#line 1720 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartUnmatchedBoundary());
}
#line 2952 "seclang-parser.cc" // lalr1.cc:859
break;
case 210:
#line 1724 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::OutboundDataError());
}
#line 2960 "seclang-parser.cc" // lalr1.cc:859
break;
case 211:
#line 1728 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::PathInfo());
}
#line 2968 "seclang-parser.cc" // lalr1.cc:859
break;
case 212:
#line 1732 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::QueryString());
}
#line 2976 "seclang-parser.cc" // lalr1.cc:859
break;
case 213:
#line 1736 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteAddr());
}
#line 2984 "seclang-parser.cc" // lalr1.cc:859
break;
case 214:
#line 1740 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteHost());
}
#line 2992 "seclang-parser.cc" // lalr1.cc:859
break;
case 215:
#line 1744 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemotePort());
}
#line 3000 "seclang-parser.cc" // lalr1.cc:859
break;
case 216:
#line 1748 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyError());
}
#line 3008 "seclang-parser.cc" // lalr1.cc:859
break;
case 217:
#line 1752 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyErrorMsg());
}
#line 3016 "seclang-parser.cc" // lalr1.cc:859
break;
case 218:
#line 1756 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessor());
}
#line 3024 "seclang-parser.cc" // lalr1.cc:859
break;
case 219:
#line 1760 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorError());
}
#line 3032 "seclang-parser.cc" // lalr1.cc:859
break;
case 220:
#line 1764 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorErrorMsg());
}
#line 3040 "seclang-parser.cc" // lalr1.cc:859
break;
case 221:
#line 1768 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBasename());
}
#line 3048 "seclang-parser.cc" // lalr1.cc:859
break;
case 222:
#line 1772 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBody());
}
#line 3056 "seclang-parser.cc" // lalr1.cc:859
break;
case 223:
#line 1776 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBodyLength());
}
#line 3064 "seclang-parser.cc" // lalr1.cc:859
break;
case 224:
#line 1780 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestFilename());
}
#line 3072 "seclang-parser.cc" // lalr1.cc:859
break;
case 225:
#line 1784 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestLine());
}
#line 3080 "seclang-parser.cc" // lalr1.cc:859
break;
case 226:
#line 1788 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestMethod());
}
#line 3088 "seclang-parser.cc" // lalr1.cc:859
break;
case 227:
#line 1792 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestProtocol());
}
#line 3096 "seclang-parser.cc" // lalr1.cc:859
break;
case 228:
#line 1796 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURI());
}
#line 3104 "seclang-parser.cc" // lalr1.cc:859
break;
case 229:
#line 1800 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURIRaw());
}
#line 3112 "seclang-parser.cc" // lalr1.cc:859
break;
case 230:
#line 1804 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource());
}
#line 3120 "seclang-parser.cc" // lalr1.cc:859
break;
case 231:
#line 1808 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseBody());
}
#line 3128 "seclang-parser.cc" // lalr1.cc:859
break;
case 232:
#line 1812 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentLength());
}
#line 3136 "seclang-parser.cc" // lalr1.cc:859
break;
case 233:
#line 1816 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseProtocol());
}
#line 3144 "seclang-parser.cc" // lalr1.cc:859
break;
case 234:
#line 1820 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseStatus());
}
#line 3152 "seclang-parser.cc" // lalr1.cc:859
break;
case 235:
#line 1824 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerAddr());
}
#line 3160 "seclang-parser.cc" // lalr1.cc:859
break;
case 236:
#line 1828 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerName());
}
#line 3168 "seclang-parser.cc" // lalr1.cc:859
break;
case 237:
#line 1832 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerPort());
}
#line 3176 "seclang-parser.cc" // lalr1.cc:859
break;
case 238:
#line 1836 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::SessionID());
}
#line 3184 "seclang-parser.cc" // lalr1.cc:859
break;
case 239:
#line 1840 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UniqueID());
}
#line 3192 "seclang-parser.cc" // lalr1.cc:859
break;
case 240:
#line 1844 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UrlEncodedError());
}
#line 3200 "seclang-parser.cc" // lalr1.cc:859
break;
case 241:
#line 1848 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UserID());
}
#line 3208 "seclang-parser.cc" // lalr1.cc:859
break;
case 242:
#line 1852 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Status());
}
#line 3216 "seclang-parser.cc" // lalr1.cc:859
break;
case 243:
#line 1856 "seclang-parser.yy" // lalr1.cc:859
{
std::string name(yystack_[0].value.as< std::string > ());
char z = name.at(0);
std::unique_ptr c(new Duration(name));
yylhs.value.as< std::unique_ptr > () = std::move(c);
}
#line 3227 "seclang-parser.cc" // lalr1.cc:859
break;
case 244:
#line 1864 "seclang-parser.yy" // lalr1.cc:859
{
std::string name(yystack_[0].value.as< std::string > ());
char z = name.at(0);
std::unique_ptr