// 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 359 "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 143: // "Accuracy"
case 144: // "Allow"
case 145: // "Append"
case 146: // "AuditLog"
case 147: // "Block"
case 148: // "Capture"
case 149: // "Chain"
case 150: // "ACTION_CTL_AUDIT_ENGINE"
case 151: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 152: // "ACTION_CTL_BDY_JSON"
case 153: // "ACTION_CTL_BDY_XML"
case 154: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 155: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 156: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 157: // "ACTION_CTL_RULE_REMOVE_BY_TAG"
case 158: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 159: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 160: // "Deny"
case 161: // "DeprecateVar"
case 162: // "Drop"
case 163: // "Exec"
case 164: // "ExpireVar"
case 165: // "Id"
case 166: // "InitCol"
case 167: // "Log"
case 168: // "LogData"
case 169: // "Maturity"
case 170: // "Msg"
case 171: // "MultiMatch"
case 172: // "NoAuditLog"
case 173: // "NoLog"
case 174: // "Pass"
case 175: // "Pause"
case 176: // "Phase"
case 177: // "Prepend"
case 178: // "Proxy"
case 179: // "Redirect"
case 180: // "Rev"
case 181: // "SanatiseArg"
case 182: // "SanatiseMatched"
case 183: // "SanatiseMatchedBytes"
case 184: // "SanatiseRequestHeader"
case 185: // "SanatiseResponseHeader"
case 186: // "SetEnv"
case 187: // "SetRsc"
case 188: // "SetSid"
case 189: // "SetUID"
case 190: // "Severity"
case 191: // "Skip"
case 192: // "SkipAfter"
case 193: // "Status"
case 194: // "Tag"
case 195: // "ACTION_TRANSFORMATION_BASE_64_ENCODE"
case 196: // "ACTION_TRANSFORMATION_BASE_64_DECODE"
case 197: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT"
case 198: // "ACTION_TRANSFORMATION_CMD_LINE"
case 199: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 200: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 201: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 202: // "ACTION_TRANSFORMATION_HEX_DECODE"
case 203: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 204: // "ACTION_TRANSFORMATION_JS_DECODE"
case 205: // "ACTION_TRANSFORMATION_LENGTH"
case 206: // "ACTION_TRANSFORMATION_LOWERCASE"
case 207: // "ACTION_TRANSFORMATION_MD5"
case 208: // "ACTION_TRANSFORMATION_NONE"
case 209: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 210: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 211: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 212: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 213: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 214: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 215: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 216: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 217: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 218: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 219: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 220: // "ACTION_TRANSFORMATION_SHA1"
case 221: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 222: // "ACTION_TRANSFORMATION_TRIM"
case 223: // "ACTION_TRANSFORMATION_UPPERCASE"
case 224: // "ACTION_TRANSFORMATION_URL_DECODE"
case 225: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 226: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 227: // "Ver"
case 228: // "xmlns"
case 229: // "CONFIG_COMPONENT_SIG"
case 230: // "CONFIG_CONN_ENGINE"
case 231: // "CONFIG_SEC_ARGUMENT_SEPARATOR"
case 232: // "CONFIG_SEC_WEB_APP_ID"
case 233: // "CONFIG_SEC_SERVER_SIG"
case 234: // "CONFIG_DIR_AUDIT_DIR"
case 235: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 236: // "CONFIG_DIR_AUDIT_ENG"
case 237: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 238: // "CONFIG_DIR_AUDIT_LOG"
case 239: // "CONFIG_DIR_AUDIT_LOG2"
case 240: // "CONFIG_DIR_AUDIT_LOG_P"
case 241: // "CONFIG_DIR_AUDIT_STS"
case 242: // "CONFIG_DIR_AUDIT_TPE"
case 243: // "CONFIG_DIR_DEBUG_LOG"
case 244: // "CONFIG_DIR_DEBUG_LVL"
case 245: // "CONFIG_SEC_CACHE_TRANSFORMATIONS"
case 246: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS"
case 247: // "CONFIG_SEC_HASH_ENGINE"
case 248: // "CONFIG_SEC_HASH_KEY"
case 249: // "CONFIG_SEC_HASH_PARAM"
case 250: // "CONFIG_SEC_HASH_METHOD_RX"
case 251: // "CONFIG_SEC_HASH_METHOD_PM"
case 252: // "CONFIG_SEC_CHROOT_DIR"
case 253: // "CONFIG_DIR_GEO_DB"
case 254: // "CONFIG_DIR_GSB_DB"
case 255: // "CONFIG_SEC_GUARDIAN_LOG"
case 256: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 257: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 258: // "CONFIG_SEC_CONN_R_STATE_LIMIT"
case 259: // "CONFIG_SEC_CONN_W_STATE_LIMIT"
case 260: // "CONFIG_SEC_SENSOR_ID"
case 261: // "CONFIG_DIR_REQ_BODY"
case 262: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 263: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 264: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 265: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 266: // "CONFIG_DIR_RES_BODY"
case 267: // "CONFIG_DIR_RES_BODY_LIMIT"
case 268: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 269: // "CONFIG_SEC_RULE_INHERITANCE"
case 270: // "CONFIG_SEC_RULE_PERF_TIME"
case 271: // "CONFIG_DIR_RULE_ENG"
case 272: // "CONFIG_DIR_SEC_ACTION"
case 273: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 274: // "CONFIG_DIR_SEC_MARKER"
case 275: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 276: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 277: // "CONFIG_SEC_HTTP_BLKEY"
case 278: // "CONFIG_SEC_INTERCEPT_ON_ERROR"
case 279: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 280: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 281: // "CONFIG_SEC_RULE_REMOVE_BY_MSG"
case 282: // "CONFIG_SEC_RULE_REMOVE_BY_TAG"
case 283: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG"
case 284: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG"
case 285: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID"
case 286: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID"
case 287: // "CONFIG_UPDLOAD_KEEP_FILES"
case 288: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 289: // "CONFIG_UPLOAD_DIR"
case 290: // "CONFIG_UPLOAD_FILE_LIMIT"
case 291: // "CONFIG_UPLOAD_FILE_MODE"
case 292: // "CONFIG_VALUE_ABORT"
case 293: // "CONFIG_VALUE_DETC"
case 294: // "CONFIG_VALUE_HTTPS"
case 295: // "CONFIG_VALUE_OFF"
case 296: // "CONFIG_VALUE_ON"
case 297: // "CONFIG_VALUE_PARALLEL"
case 298: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 299: // "CONFIG_VALUE_REJECT"
case 300: // "CONFIG_VALUE_RELEVANT_ONLY"
case 301: // "CONFIG_VALUE_SERIAL"
case 302: // "CONFIG_VALUE_WARN"
case 303: // "CONFIG_XML_EXTERNAL_ENTITY"
case 304: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 305: // "CONGIG_DIR_SEC_ARG_SEP"
case 306: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 307: // "CONFIG_SEC_COOKIEV0_SEPARATOR"
case 308: // "CONGIG_DIR_SEC_DATA_DIR"
case 309: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 310: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION"
case 311: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION"
case 312: // "CONGIG_DIR_SEC_TMP_DIR"
case 313: // "DIRECTIVE"
case 314: // "DIRECTIVE_SECRULESCRIPT"
case 315: // "FREE_TEXT_QUOTE_MACRO_EXPANSION"
case 316: // "QUOTATION_MARK"
case 317: // "RUN_TIME_VAR_BLD"
case 318: // "RUN_TIME_VAR_DUR"
case 319: // "RUN_TIME_VAR_HSV"
case 320: // "RUN_TIME_VAR_REMOTE_USER"
case 321: // "RUN_TIME_VAR_TIME"
case 322: // "RUN_TIME_VAR_TIME_DAY"
case 323: // "RUN_TIME_VAR_TIME_EPOCH"
case 324: // "RUN_TIME_VAR_TIME_HOUR"
case 325: // "RUN_TIME_VAR_TIME_MIN"
case 326: // "RUN_TIME_VAR_TIME_MON"
case 327: // "RUN_TIME_VAR_TIME_SEC"
case 328: // "RUN_TIME_VAR_TIME_WDAY"
case 329: // "RUN_TIME_VAR_TIME_YEAR"
case 330: // "VARIABLE"
case 331: // "Dictionary element"
case 332: // "Dictionary element, selected by regexp"
value.move< std::string > (that.value);
break;
case 339: // op
case 340: // op_before_init
value.move< std::unique_ptr > (that.value);
break;
case 347: // run_time_string
value.move< std::unique_ptr > (that.value);
break;
case 344: // var
value.move< std::unique_ptr > (that.value);
break;
case 345: // act
case 346: // setvar_action
value.move< std::unique_ptr > (that.value);
break;
case 342: // variables
case 343: // variables_may_be_quoted
value.move< std::unique_ptr > > > (that.value);
break;
case 337: // actions
case 338: // 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 143: // "Accuracy"
case 144: // "Allow"
case 145: // "Append"
case 146: // "AuditLog"
case 147: // "Block"
case 148: // "Capture"
case 149: // "Chain"
case 150: // "ACTION_CTL_AUDIT_ENGINE"
case 151: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 152: // "ACTION_CTL_BDY_JSON"
case 153: // "ACTION_CTL_BDY_XML"
case 154: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 155: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 156: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 157: // "ACTION_CTL_RULE_REMOVE_BY_TAG"
case 158: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 159: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 160: // "Deny"
case 161: // "DeprecateVar"
case 162: // "Drop"
case 163: // "Exec"
case 164: // "ExpireVar"
case 165: // "Id"
case 166: // "InitCol"
case 167: // "Log"
case 168: // "LogData"
case 169: // "Maturity"
case 170: // "Msg"
case 171: // "MultiMatch"
case 172: // "NoAuditLog"
case 173: // "NoLog"
case 174: // "Pass"
case 175: // "Pause"
case 176: // "Phase"
case 177: // "Prepend"
case 178: // "Proxy"
case 179: // "Redirect"
case 180: // "Rev"
case 181: // "SanatiseArg"
case 182: // "SanatiseMatched"
case 183: // "SanatiseMatchedBytes"
case 184: // "SanatiseRequestHeader"
case 185: // "SanatiseResponseHeader"
case 186: // "SetEnv"
case 187: // "SetRsc"
case 188: // "SetSid"
case 189: // "SetUID"
case 190: // "Severity"
case 191: // "Skip"
case 192: // "SkipAfter"
case 193: // "Status"
case 194: // "Tag"
case 195: // "ACTION_TRANSFORMATION_BASE_64_ENCODE"
case 196: // "ACTION_TRANSFORMATION_BASE_64_DECODE"
case 197: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT"
case 198: // "ACTION_TRANSFORMATION_CMD_LINE"
case 199: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 200: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 201: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 202: // "ACTION_TRANSFORMATION_HEX_DECODE"
case 203: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 204: // "ACTION_TRANSFORMATION_JS_DECODE"
case 205: // "ACTION_TRANSFORMATION_LENGTH"
case 206: // "ACTION_TRANSFORMATION_LOWERCASE"
case 207: // "ACTION_TRANSFORMATION_MD5"
case 208: // "ACTION_TRANSFORMATION_NONE"
case 209: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 210: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 211: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 212: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 213: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 214: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 215: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 216: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 217: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 218: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 219: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 220: // "ACTION_TRANSFORMATION_SHA1"
case 221: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 222: // "ACTION_TRANSFORMATION_TRIM"
case 223: // "ACTION_TRANSFORMATION_UPPERCASE"
case 224: // "ACTION_TRANSFORMATION_URL_DECODE"
case 225: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 226: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 227: // "Ver"
case 228: // "xmlns"
case 229: // "CONFIG_COMPONENT_SIG"
case 230: // "CONFIG_CONN_ENGINE"
case 231: // "CONFIG_SEC_ARGUMENT_SEPARATOR"
case 232: // "CONFIG_SEC_WEB_APP_ID"
case 233: // "CONFIG_SEC_SERVER_SIG"
case 234: // "CONFIG_DIR_AUDIT_DIR"
case 235: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 236: // "CONFIG_DIR_AUDIT_ENG"
case 237: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 238: // "CONFIG_DIR_AUDIT_LOG"
case 239: // "CONFIG_DIR_AUDIT_LOG2"
case 240: // "CONFIG_DIR_AUDIT_LOG_P"
case 241: // "CONFIG_DIR_AUDIT_STS"
case 242: // "CONFIG_DIR_AUDIT_TPE"
case 243: // "CONFIG_DIR_DEBUG_LOG"
case 244: // "CONFIG_DIR_DEBUG_LVL"
case 245: // "CONFIG_SEC_CACHE_TRANSFORMATIONS"
case 246: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS"
case 247: // "CONFIG_SEC_HASH_ENGINE"
case 248: // "CONFIG_SEC_HASH_KEY"
case 249: // "CONFIG_SEC_HASH_PARAM"
case 250: // "CONFIG_SEC_HASH_METHOD_RX"
case 251: // "CONFIG_SEC_HASH_METHOD_PM"
case 252: // "CONFIG_SEC_CHROOT_DIR"
case 253: // "CONFIG_DIR_GEO_DB"
case 254: // "CONFIG_DIR_GSB_DB"
case 255: // "CONFIG_SEC_GUARDIAN_LOG"
case 256: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 257: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 258: // "CONFIG_SEC_CONN_R_STATE_LIMIT"
case 259: // "CONFIG_SEC_CONN_W_STATE_LIMIT"
case 260: // "CONFIG_SEC_SENSOR_ID"
case 261: // "CONFIG_DIR_REQ_BODY"
case 262: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 263: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 264: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 265: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 266: // "CONFIG_DIR_RES_BODY"
case 267: // "CONFIG_DIR_RES_BODY_LIMIT"
case 268: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 269: // "CONFIG_SEC_RULE_INHERITANCE"
case 270: // "CONFIG_SEC_RULE_PERF_TIME"
case 271: // "CONFIG_DIR_RULE_ENG"
case 272: // "CONFIG_DIR_SEC_ACTION"
case 273: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 274: // "CONFIG_DIR_SEC_MARKER"
case 275: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 276: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 277: // "CONFIG_SEC_HTTP_BLKEY"
case 278: // "CONFIG_SEC_INTERCEPT_ON_ERROR"
case 279: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 280: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 281: // "CONFIG_SEC_RULE_REMOVE_BY_MSG"
case 282: // "CONFIG_SEC_RULE_REMOVE_BY_TAG"
case 283: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG"
case 284: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG"
case 285: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID"
case 286: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID"
case 287: // "CONFIG_UPDLOAD_KEEP_FILES"
case 288: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 289: // "CONFIG_UPLOAD_DIR"
case 290: // "CONFIG_UPLOAD_FILE_LIMIT"
case 291: // "CONFIG_UPLOAD_FILE_MODE"
case 292: // "CONFIG_VALUE_ABORT"
case 293: // "CONFIG_VALUE_DETC"
case 294: // "CONFIG_VALUE_HTTPS"
case 295: // "CONFIG_VALUE_OFF"
case 296: // "CONFIG_VALUE_ON"
case 297: // "CONFIG_VALUE_PARALLEL"
case 298: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 299: // "CONFIG_VALUE_REJECT"
case 300: // "CONFIG_VALUE_RELEVANT_ONLY"
case 301: // "CONFIG_VALUE_SERIAL"
case 302: // "CONFIG_VALUE_WARN"
case 303: // "CONFIG_XML_EXTERNAL_ENTITY"
case 304: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 305: // "CONGIG_DIR_SEC_ARG_SEP"
case 306: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 307: // "CONFIG_SEC_COOKIEV0_SEPARATOR"
case 308: // "CONGIG_DIR_SEC_DATA_DIR"
case 309: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 310: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION"
case 311: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION"
case 312: // "CONGIG_DIR_SEC_TMP_DIR"
case 313: // "DIRECTIVE"
case 314: // "DIRECTIVE_SECRULESCRIPT"
case 315: // "FREE_TEXT_QUOTE_MACRO_EXPANSION"
case 316: // "QUOTATION_MARK"
case 317: // "RUN_TIME_VAR_BLD"
case 318: // "RUN_TIME_VAR_DUR"
case 319: // "RUN_TIME_VAR_HSV"
case 320: // "RUN_TIME_VAR_REMOTE_USER"
case 321: // "RUN_TIME_VAR_TIME"
case 322: // "RUN_TIME_VAR_TIME_DAY"
case 323: // "RUN_TIME_VAR_TIME_EPOCH"
case 324: // "RUN_TIME_VAR_TIME_HOUR"
case 325: // "RUN_TIME_VAR_TIME_MIN"
case 326: // "RUN_TIME_VAR_TIME_MON"
case 327: // "RUN_TIME_VAR_TIME_SEC"
case 328: // "RUN_TIME_VAR_TIME_WDAY"
case 329: // "RUN_TIME_VAR_TIME_YEAR"
case 330: // "VARIABLE"
case 331: // "Dictionary element"
case 332: // "Dictionary element, selected by regexp"
value.copy< std::string > (that.value);
break;
case 339: // op
case 340: // op_before_init
value.copy< std::unique_ptr > (that.value);
break;
case 347: // run_time_string
value.copy< std::unique_ptr > (that.value);
break;
case 344: // var
value.copy< std::unique_ptr > (that.value);
break;
case 345: // act
case 346: // setvar_action
value.copy< std::unique_ptr > (that.value);
break;
case 342: // variables
case 343: // variables_may_be_quoted
value.copy< std::unique_ptr > > > (that.value);
break;
case 337: // actions
case 338: // 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 352 "/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 859 "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 143: // "Accuracy"
case 144: // "Allow"
case 145: // "Append"
case 146: // "AuditLog"
case 147: // "Block"
case 148: // "Capture"
case 149: // "Chain"
case 150: // "ACTION_CTL_AUDIT_ENGINE"
case 151: // "ACTION_CTL_AUDIT_LOG_PARTS"
case 152: // "ACTION_CTL_BDY_JSON"
case 153: // "ACTION_CTL_BDY_XML"
case 154: // "ACTION_CTL_FORCE_REQ_BODY_VAR"
case 155: // "ACTION_CTL_REQUEST_BODY_ACCESS"
case 156: // "ACTION_CTL_RULE_REMOVE_BY_ID"
case 157: // "ACTION_CTL_RULE_REMOVE_BY_TAG"
case 158: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID"
case 159: // "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG"
case 160: // "Deny"
case 161: // "DeprecateVar"
case 162: // "Drop"
case 163: // "Exec"
case 164: // "ExpireVar"
case 165: // "Id"
case 166: // "InitCol"
case 167: // "Log"
case 168: // "LogData"
case 169: // "Maturity"
case 170: // "Msg"
case 171: // "MultiMatch"
case 172: // "NoAuditLog"
case 173: // "NoLog"
case 174: // "Pass"
case 175: // "Pause"
case 176: // "Phase"
case 177: // "Prepend"
case 178: // "Proxy"
case 179: // "Redirect"
case 180: // "Rev"
case 181: // "SanatiseArg"
case 182: // "SanatiseMatched"
case 183: // "SanatiseMatchedBytes"
case 184: // "SanatiseRequestHeader"
case 185: // "SanatiseResponseHeader"
case 186: // "SetEnv"
case 187: // "SetRsc"
case 188: // "SetSid"
case 189: // "SetUID"
case 190: // "Severity"
case 191: // "Skip"
case 192: // "SkipAfter"
case 193: // "Status"
case 194: // "Tag"
case 195: // "ACTION_TRANSFORMATION_BASE_64_ENCODE"
case 196: // "ACTION_TRANSFORMATION_BASE_64_DECODE"
case 197: // "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT"
case 198: // "ACTION_TRANSFORMATION_CMD_LINE"
case 199: // "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE"
case 200: // "ACTION_TRANSFORMATION_CSS_DECODE"
case 201: // "ACTION_TRANSFORMATION_HEX_ENCODE"
case 202: // "ACTION_TRANSFORMATION_HEX_DECODE"
case 203: // "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE"
case 204: // "ACTION_TRANSFORMATION_JS_DECODE"
case 205: // "ACTION_TRANSFORMATION_LENGTH"
case 206: // "ACTION_TRANSFORMATION_LOWERCASE"
case 207: // "ACTION_TRANSFORMATION_MD5"
case 208: // "ACTION_TRANSFORMATION_NONE"
case 209: // "ACTION_TRANSFORMATION_NORMALISE_PATH"
case 210: // "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN"
case 211: // "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT"
case 212: // "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT"
case 213: // "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT"
case 214: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS"
case 215: // "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR"
case 216: // "ACTION_TRANSFORMATION_REMOVE_NULLS"
case 217: // "ACTION_TRANSFORMATION_REMOVE_WHITESPACE"
case 218: // "ACTION_TRANSFORMATION_REPLACE_COMMENTS"
case 219: // "ACTION_TRANSFORMATION_REPLACE_NULLS"
case 220: // "ACTION_TRANSFORMATION_SHA1"
case 221: // "ACTION_TRANSFORMATION_SQL_HEX_DECODE"
case 222: // "ACTION_TRANSFORMATION_TRIM"
case 223: // "ACTION_TRANSFORMATION_UPPERCASE"
case 224: // "ACTION_TRANSFORMATION_URL_DECODE"
case 225: // "ACTION_TRANSFORMATION_URL_DECODE_UNI"
case 226: // "ACTION_TRANSFORMATION_UTF8_TO_UNICODE"
case 227: // "Ver"
case 228: // "xmlns"
case 229: // "CONFIG_COMPONENT_SIG"
case 230: // "CONFIG_CONN_ENGINE"
case 231: // "CONFIG_SEC_ARGUMENT_SEPARATOR"
case 232: // "CONFIG_SEC_WEB_APP_ID"
case 233: // "CONFIG_SEC_SERVER_SIG"
case 234: // "CONFIG_DIR_AUDIT_DIR"
case 235: // "CONFIG_DIR_AUDIT_DIR_MOD"
case 236: // "CONFIG_DIR_AUDIT_ENG"
case 237: // "CONFIG_DIR_AUDIT_FLE_MOD"
case 238: // "CONFIG_DIR_AUDIT_LOG"
case 239: // "CONFIG_DIR_AUDIT_LOG2"
case 240: // "CONFIG_DIR_AUDIT_LOG_P"
case 241: // "CONFIG_DIR_AUDIT_STS"
case 242: // "CONFIG_DIR_AUDIT_TPE"
case 243: // "CONFIG_DIR_DEBUG_LOG"
case 244: // "CONFIG_DIR_DEBUG_LVL"
case 245: // "CONFIG_SEC_CACHE_TRANSFORMATIONS"
case 246: // "CONFIG_SEC_DISABLE_BACKEND_COMPRESS"
case 247: // "CONFIG_SEC_HASH_ENGINE"
case 248: // "CONFIG_SEC_HASH_KEY"
case 249: // "CONFIG_SEC_HASH_PARAM"
case 250: // "CONFIG_SEC_HASH_METHOD_RX"
case 251: // "CONFIG_SEC_HASH_METHOD_PM"
case 252: // "CONFIG_SEC_CHROOT_DIR"
case 253: // "CONFIG_DIR_GEO_DB"
case 254: // "CONFIG_DIR_GSB_DB"
case 255: // "CONFIG_SEC_GUARDIAN_LOG"
case 256: // "CONFIG_DIR_PCRE_MATCH_LIMIT"
case 257: // "CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION"
case 258: // "CONFIG_SEC_CONN_R_STATE_LIMIT"
case 259: // "CONFIG_SEC_CONN_W_STATE_LIMIT"
case 260: // "CONFIG_SEC_SENSOR_ID"
case 261: // "CONFIG_DIR_REQ_BODY"
case 262: // "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT"
case 263: // "CONFIG_DIR_REQ_BODY_LIMIT"
case 264: // "CONFIG_DIR_REQ_BODY_LIMIT_ACTION"
case 265: // "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT"
case 266: // "CONFIG_DIR_RES_BODY"
case 267: // "CONFIG_DIR_RES_BODY_LIMIT"
case 268: // "CONFIG_DIR_RES_BODY_LIMIT_ACTION"
case 269: // "CONFIG_SEC_RULE_INHERITANCE"
case 270: // "CONFIG_SEC_RULE_PERF_TIME"
case 271: // "CONFIG_DIR_RULE_ENG"
case 272: // "CONFIG_DIR_SEC_ACTION"
case 273: // "CONFIG_DIR_SEC_DEFAULT_ACTION"
case 274: // "CONFIG_DIR_SEC_MARKER"
case 275: // "CONFIG_DIR_UNICODE_MAP_FILE"
case 276: // "CONFIG_SEC_COLLECTION_TIMEOUT"
case 277: // "CONFIG_SEC_HTTP_BLKEY"
case 278: // "CONFIG_SEC_INTERCEPT_ON_ERROR"
case 279: // "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION"
case 280: // "CONFIG_SEC_RULE_REMOVE_BY_ID"
case 281: // "CONFIG_SEC_RULE_REMOVE_BY_MSG"
case 282: // "CONFIG_SEC_RULE_REMOVE_BY_TAG"
case 283: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG"
case 284: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG"
case 285: // "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID"
case 286: // "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID"
case 287: // "CONFIG_UPDLOAD_KEEP_FILES"
case 288: // "CONFIG_UPDLOAD_SAVE_TMP_FILES"
case 289: // "CONFIG_UPLOAD_DIR"
case 290: // "CONFIG_UPLOAD_FILE_LIMIT"
case 291: // "CONFIG_UPLOAD_FILE_MODE"
case 292: // "CONFIG_VALUE_ABORT"
case 293: // "CONFIG_VALUE_DETC"
case 294: // "CONFIG_VALUE_HTTPS"
case 295: // "CONFIG_VALUE_OFF"
case 296: // "CONFIG_VALUE_ON"
case 297: // "CONFIG_VALUE_PARALLEL"
case 298: // "CONFIG_VALUE_PROCESS_PARTIAL"
case 299: // "CONFIG_VALUE_REJECT"
case 300: // "CONFIG_VALUE_RELEVANT_ONLY"
case 301: // "CONFIG_VALUE_SERIAL"
case 302: // "CONFIG_VALUE_WARN"
case 303: // "CONFIG_XML_EXTERNAL_ENTITY"
case 304: // "CONGIG_DIR_RESPONSE_BODY_MP"
case 305: // "CONGIG_DIR_SEC_ARG_SEP"
case 306: // "CONGIG_DIR_SEC_COOKIE_FORMAT"
case 307: // "CONFIG_SEC_COOKIEV0_SEPARATOR"
case 308: // "CONGIG_DIR_SEC_DATA_DIR"
case 309: // "CONGIG_DIR_SEC_STATUS_ENGINE"
case 310: // "CONFIG_SEC_STREAM_IN_BODY_INSPECTION"
case 311: // "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION"
case 312: // "CONGIG_DIR_SEC_TMP_DIR"
case 313: // "DIRECTIVE"
case 314: // "DIRECTIVE_SECRULESCRIPT"
case 315: // "FREE_TEXT_QUOTE_MACRO_EXPANSION"
case 316: // "QUOTATION_MARK"
case 317: // "RUN_TIME_VAR_BLD"
case 318: // "RUN_TIME_VAR_DUR"
case 319: // "RUN_TIME_VAR_HSV"
case 320: // "RUN_TIME_VAR_REMOTE_USER"
case 321: // "RUN_TIME_VAR_TIME"
case 322: // "RUN_TIME_VAR_TIME_DAY"
case 323: // "RUN_TIME_VAR_TIME_EPOCH"
case 324: // "RUN_TIME_VAR_TIME_HOUR"
case 325: // "RUN_TIME_VAR_TIME_MIN"
case 326: // "RUN_TIME_VAR_TIME_MON"
case 327: // "RUN_TIME_VAR_TIME_SEC"
case 328: // "RUN_TIME_VAR_TIME_WDAY"
case 329: // "RUN_TIME_VAR_TIME_YEAR"
case 330: // "VARIABLE"
case 331: // "Dictionary element"
case 332: // "Dictionary element, selected by regexp"
yylhs.value.build< std::string > ();
break;
case 339: // op
case 340: // op_before_init
yylhs.value.build< std::unique_ptr > ();
break;
case 347: // run_time_string
yylhs.value.build< std::unique_ptr > ();
break;
case 344: // var
yylhs.value.build< std::unique_ptr > ();
break;
case 345: // act
case 346: // setvar_action
yylhs.value.build< std::unique_ptr > ();
break;
case 342: // variables
case 343: // variables_may_be_quoted
yylhs.value.build< std::unique_ptr > > > ();
break;
case 337: // actions
case 338: // 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 735 "seclang-parser.yy" // lalr1.cc:859
{
return 0;
}
#line 1192 "seclang-parser.cc" // lalr1.cc:859
break;
case 6:
#line 748 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8));
}
#line 1200 "seclang-parser.cc" // lalr1.cc:859
break;
case 7:
#line 754 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStorageDir(yystack_[0].value.as< std::string > ());
}
#line 1208 "seclang-parser.cc" // lalr1.cc:859
break;
case 8:
#line 760 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus);
}
#line 1216 "seclang-parser.cc" // lalr1.cc:859
break;
case 9:
#line 764 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus);
}
#line 1224 "seclang-parser.cc" // lalr1.cc:859
break;
case 10:
#line 768 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus);
}
#line 1232 "seclang-parser.cc" // lalr1.cc:859
break;
case 11:
#line 774 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8));
}
#line 1240 "seclang-parser.cc" // lalr1.cc:859
break;
case 12:
#line 780 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFilePath2(yystack_[0].value.as< std::string > ());
}
#line 1248 "seclang-parser.cc" // lalr1.cc:859
break;
case 13:
#line 786 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setParts(yystack_[0].value.as< std::string > ());
}
#line 1256 "seclang-parser.cc" // lalr1.cc:859
break;
case 14:
#line 792 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFilePath1(yystack_[0].value.as< std::string > ());
}
#line 1264 "seclang-parser.cc" // lalr1.cc:859
break;
case 15:
#line 797 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat);
}
#line 1272 "seclang-parser.cc" // lalr1.cc:859
break;
case 16:
#line 802 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat);
}
#line 1280 "seclang-parser.cc" // lalr1.cc:859
break;
case 17:
#line 808 "seclang-parser.yy" // lalr1.cc:859
{
std::string relevant_status(yystack_[0].value.as< std::string > ());
driver.m_auditLog->setRelevantStatus(relevant_status);
}
#line 1289 "seclang-parser.cc" // lalr1.cc:859
break;
case 18:
#line 815 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType);
}
#line 1297 "seclang-parser.cc" // lalr1.cc:859
break;
case 19:
#line 819 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType);
}
#line 1305 "seclang-parser.cc" // lalr1.cc:859
break;
case 20:
#line 823 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType);
}
#line 1313 "seclang-parser.cc" // lalr1.cc:859
break;
case 21:
#line 829 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadKeepFiles = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1321 "seclang-parser.cc" // lalr1.cc:859
break;
case 22:
#line 833 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadKeepFiles = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1329 "seclang-parser.cc" // lalr1.cc:859
break;
case 23:
#line 837 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off");
YYERROR;
}
#line 1338 "seclang-parser.cc" // lalr1.cc:859
break;
case 24:
#line 842 "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 1347 "seclang-parser.cc" // lalr1.cc:859
break;
case 25:
#line 847 "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 1356 "seclang-parser.cc" // lalr1.cc:859
break;
case 26:
#line 852 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_uploadDirectory.m_set = true;
driver.m_uploadDirectory.m_value = yystack_[0].value.as< std::string > ();
}
#line 1365 "seclang-parser.cc" // lalr1.cc:859
break;
case 27:
#line 857 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1373 "seclang-parser.cc" // lalr1.cc:859
break;
case 28:
#line 861 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1381 "seclang-parser.cc" // lalr1.cc:859
break;
case 29:
#line 868 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ());
}
#line 1389 "seclang-parser.cc" // lalr1.cc:859
break;
case 30:
#line 872 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ());
}
#line 1397 "seclang-parser.cc" // lalr1.cc:859
break;
case 31:
#line 879 "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 1407 "seclang-parser.cc" // lalr1.cc:859
break;
case 32:
#line 885 "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 1418 "seclang-parser.cc" // lalr1.cc:859
break;
case 33:
#line 895 "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 1431 "seclang-parser.cc" // lalr1.cc:859
break;
case 34:
#line 904 "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 1445 "seclang-parser.cc" // lalr1.cc:859
break;
case 35:
#line 914 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(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 1458 "seclang-parser.cc" // lalr1.cc:859
break;
case 36:
#line 923 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(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 1472 "seclang-parser.cc" // lalr1.cc:859
break;
case 37:
#line 936 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::UnconditionalMatch());
}
#line 1480 "seclang-parser.cc" // lalr1.cc:859
break;
case 38:
#line 940 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectSQLi());
}
#line 1488 "seclang-parser.cc" // lalr1.cc:859
break;
case 39:
#line 944 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectXSS());
}
#line 1496 "seclang-parser.cc" // lalr1.cc:859
break;
case 40:
#line 948 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUrlEncoding());
}
#line 1504 "seclang-parser.cc" // lalr1.cc:859
break;
case 41:
#line 952 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUtf8Encoding());
}
#line 1512 "seclang-parser.cc" // lalr1.cc:859
break;
case 42:
#line 956 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1520 "seclang-parser.cc" // lalr1.cc:859
break;
case 43:
#line 960 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1528 "seclang-parser.cc" // lalr1.cc:859
break;
case 44:
#line 964 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1536 "seclang-parser.cc" // lalr1.cc:859
break;
case 45:
#line 968 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1544 "seclang-parser.cc" // lalr1.cc:859
break;
case 46:
#line 972 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::ValidateHash($1); */
OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location);
}
#line 1553 "seclang-parser.cc" // lalr1.cc:859
break;
case 47:
#line 977 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1561 "seclang-parser.cc" // lalr1.cc:859
break;
case 48:
#line 981 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1569 "seclang-parser.cc" // lalr1.cc:859
break;
case 49:
#line 985 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1577 "seclang-parser.cc" // lalr1.cc:859
break;
case 50:
#line 989 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1585 "seclang-parser.cc" // lalr1.cc:859
break;
case 51:
#line 993 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::GsbLookup($1); */
OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location);
}
#line 1594 "seclang-parser.cc" // lalr1.cc:859
break;
case 52:
#line 998 "seclang-parser.yy" // lalr1.cc:859
{
/* $$ = new operators::Rsub($1); */
OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location);
}
#line 1603 "seclang-parser.cc" // lalr1.cc:859
break;
case 53:
#line 1003 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1611 "seclang-parser.cc" // lalr1.cc:859
break;
case 54:
#line 1007 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1619 "seclang-parser.cc" // lalr1.cc:859
break;
case 55:
#line 1011 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1627 "seclang-parser.cc" // lalr1.cc:859
break;
case 56:
#line 1015 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1635 "seclang-parser.cc" // lalr1.cc:859
break;
case 57:
#line 1019 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1643 "seclang-parser.cc" // lalr1.cc:859
break;
case 58:
#line 1023 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1651 "seclang-parser.cc" // lalr1.cc:859
break;
case 59:
#line 1027 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1659 "seclang-parser.cc" // lalr1.cc:859
break;
case 60:
#line 1031 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1667 "seclang-parser.cc" // lalr1.cc:859
break;
case 61:
#line 1035 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1675 "seclang-parser.cc" // lalr1.cc:859
break;
case 62:
#line 1039 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1683 "seclang-parser.cc" // lalr1.cc:859
break;
case 63:
#line 1043 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1691 "seclang-parser.cc" // lalr1.cc:859
break;
case 64:
#line 1047 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1699 "seclang-parser.cc" // lalr1.cc:859
break;
case 65:
#line 1051 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1707 "seclang-parser.cc" // lalr1.cc:859
break;
case 66:
#line 1055 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1715 "seclang-parser.cc" // lalr1.cc:859
break;
case 67:
#line 1059 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1723 "seclang-parser.cc" // lalr1.cc:859
break;
case 68:
#line 1063 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1731 "seclang-parser.cc" // lalr1.cc:859
break;
case 69:
#line 1067 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1739 "seclang-parser.cc" // lalr1.cc:859
break;
case 70:
#line 1071 "seclang-parser.yy" // lalr1.cc:859
{
OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 1747 "seclang-parser.cc" // lalr1.cc:859
break;
case 71:
#line 1075 "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 1762 "seclang-parser.cc" // lalr1.cc:859
break;
case 73:
#line 1090 "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 1790 "seclang-parser.cc" // lalr1.cc:859
break;
case 74:
#line 1114 "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 1813 "seclang-parser.cc" // lalr1.cc:859
break;
case 75:
#line 1133 "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 1832 "seclang-parser.cc" // lalr1.cc:859
break;
case 76:
#line 1148 "seclang-parser.yy" // lalr1.cc:859
{
std::string err;
std::vector *a = new std::vector();
for (auto &i : *yystack_[0].value.as< std::unique_ptr > > > ().get()) {
a->push_back(i.release());
}
RuleScript *r = new RuleScript(
/* path to script */ yystack_[1].value.as< std::string > (),
/* actions */ a,
/* file name */ driver.ref.back(),
/* line number */ yystack_[2].location.end.line
);
if (r->init(&err) == false) {
driver.error(yystack_[2].location, "Failed to load script: " + err);
delete r;
YYERROR;
}
if (driver.addSecRuleScript(r) == false) {
delete r;
YYERROR;
}
}
#line 1860 "seclang-parser.cc" // lalr1.cc:859
break;
case 77:
#line 1172 "seclang-parser.yy" // lalr1.cc:859
{
bool hasDisruptive = false;
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 (a->isDisruptive() == true && dynamic_cast(a) == NULL) {
hasDisruptive = true;
}
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 (hasDisruptive == false) {
driver.error(yystack_[2].location, "SecDefaultAction must specify a disruptive action.");
YYERROR;
}
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 1920 "seclang-parser.cc" // lalr1.cc:859
break;
case 78:
#line 1228 "seclang-parser.yy" // lalr1.cc:859
{
driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as< std::string > ()));
}
#line 1928 "seclang-parser.cc" // lalr1.cc:859
break;
case 79:
#line 1232 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::DisabledRuleEngine;
}
#line 1936 "seclang-parser.cc" // lalr1.cc:859
break;
case 80:
#line 1236 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::EnabledRuleEngine;
}
#line 1944 "seclang-parser.cc" // lalr1.cc:859
break;
case 81:
#line 1240 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRuleEngine = modsecurity::Rules::DetectionOnlyRuleEngine;
}
#line 1952 "seclang-parser.cc" // lalr1.cc:859
break;
case 82:
#line 1244 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRequestBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1960 "seclang-parser.cc" // lalr1.cc:859
break;
case 83:
#line 1248 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secRequestBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1968 "seclang-parser.cc" // lalr1.cc:859
break;
case 84:
#line 1252 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secResponseBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 1976 "seclang-parser.cc" // lalr1.cc:859
break;
case 85:
#line 1256 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secResponseBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 1984 "seclang-parser.cc" // lalr1.cc:859
break;
case 86:
#line 1260 "seclang-parser.yy" // lalr1.cc:859
{
if (yystack_[0].value.as< std::string > ().length() != 1) {
driver.error(yystack_[1].location, "Argument separator should be set to a single character.");
YYERROR;
}
driver.m_secArgumentSeparator.m_value = yystack_[0].value.as< std::string > ();
driver.m_secArgumentSeparator.m_set = true;
}
#line 1997 "seclang-parser.cc" // lalr1.cc:859
break;
case 87:
#line 1269 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_components.push_back(yystack_[0].value.as< std::string > ());
}
#line 2005 "seclang-parser.cc" // lalr1.cc:859
break;
case 88:
#line 1273 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecConnEngine is not yet supported.");
YYERROR;
}
#line 2014 "seclang-parser.cc" // lalr1.cc:859
break;
case 89:
#line 1278 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2021 "seclang-parser.cc" // lalr1.cc:859
break;
case 90:
#line 1281 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secWebAppId.m_value = yystack_[0].value.as< std::string > ();
driver.m_secWebAppId.m_set = true;
}
#line 2030 "seclang-parser.cc" // lalr1.cc:859
break;
case 91:
#line 1286 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecServerSignature is not supported.");
YYERROR;
}
#line 2039 "seclang-parser.cc" // lalr1.cc:859
break;
case 92:
#line 1291 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecCacheTransformations is not supported.");
YYERROR;
}
#line 2048 "seclang-parser.cc" // lalr1.cc:859
break;
case 93:
#line 1296 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported.");
YYERROR;
}
#line 2057 "seclang-parser.cc" // lalr1.cc:859
break;
case 94:
#line 1301 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2064 "seclang-parser.cc" // lalr1.cc:859
break;
case 95:
#line 1304 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecContentInjection is not yet supported.");
YYERROR;
}
#line 2073 "seclang-parser.cc" // lalr1.cc:859
break;
case 96:
#line 1309 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2080 "seclang-parser.cc" // lalr1.cc:859
break;
case 97:
#line 1312 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecChrootDir is not supported.");
YYERROR;
}
#line 2089 "seclang-parser.cc" // lalr1.cc:859
break;
case 98:
#line 1317 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecHashEngine is not yet supported.");
YYERROR;
}
#line 2098 "seclang-parser.cc" // lalr1.cc:859
break;
case 99:
#line 1322 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2105 "seclang-parser.cc" // lalr1.cc:859
break;
case 100:
#line 1325 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecHashKey is not yet supported.");
YYERROR;
}
#line 2114 "seclang-parser.cc" // lalr1.cc:859
break;
case 101:
#line 1330 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecHashParam is not yet supported.");
YYERROR;
}
#line 2123 "seclang-parser.cc" // lalr1.cc:859
break;
case 102:
#line 1335 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported.");
YYERROR;
}
#line 2132 "seclang-parser.cc" // lalr1.cc:859
break;
case 103:
#line 1340 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported.");
YYERROR;
}
#line 2141 "seclang-parser.cc" // lalr1.cc:859
break;
case 104:
#line 1345 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecGsbLookupDb is not supported.");
YYERROR;
}
#line 2150 "seclang-parser.cc" // lalr1.cc:859
break;
case 105:
#line 1350 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecGuardianLog is not supported.");
YYERROR;
}
#line 2159 "seclang-parser.cc" // lalr1.cc:859
break;
case 106:
#line 1355 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported.");
YYERROR;
}
#line 2168 "seclang-parser.cc" // lalr1.cc:859
break;
case 107:
#line 1360 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2175 "seclang-parser.cc" // lalr1.cc:859
break;
case 108:
#line 1363 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported.");
YYERROR;
}
#line 2184 "seclang-parser.cc" // lalr1.cc:859
break;
case 109:
#line 1368 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported.");
YYERROR;
}
#line 2193 "seclang-parser.cc" // lalr1.cc:859
break;
case 110:
#line 1373 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecSensorId is not yet supported.");
YYERROR;
}
#line 2202 "seclang-parser.cc" // lalr1.cc:859
break;
case 111:
#line 1378 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported.");
YYERROR;
}
#line 2211 "seclang-parser.cc" // lalr1.cc:859
break;
case 112:
#line 1383 "seclang-parser.yy" // lalr1.cc:859
{
}
#line 2218 "seclang-parser.cc" // lalr1.cc:859
break;
case 113:
#line 1386 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported.");
YYERROR;
}
#line 2227 "seclang-parser.cc" // lalr1.cc:859
break;
case 114:
#line 1391 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported.");
YYERROR;
}
#line 2236 "seclang-parser.cc" // lalr1.cc:859
break;
case 115:
#line 1396 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported.");
YYERROR;
}
#line 2245 "seclang-parser.cc" // lalr1.cc:859
break;
case 116:
#line 1401 "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 2262 "seclang-parser.cc" // lalr1.cc:859
break;
case 117:
#line 1414 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as< std::string > (), &error) == false) {
std::stringstream ss;
ss << "SecRuleRemoveByTag: failed to load:";
ss << yystack_[0].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
}
#line 2279 "seclang-parser.cc" // lalr1.cc:859
break;
case 118:
#line 1427 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as< std::string > (), &error) == false) {
std::stringstream ss;
ss << "SecRuleRemoveByMsg: failed to load:";
ss << yystack_[0].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
}
#line 2296 "seclang-parser.cc" // lalr1.cc:859
break;
case 119:
#line 1440 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
if (driver.m_exceptions.loadUpdateTargetByTag(yystack_[1].value.as< std::string > (), std::move(yystack_[0].value.as< std::unique_ptr > > > ()), &error) == false) {
std::stringstream ss;
ss << "SecRuleUpdateTargetByTag: failed to load:";
ss << yystack_[1].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
}
#line 2313 "seclang-parser.cc" // lalr1.cc:859
break;
case 120:
#line 1453 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
if (driver.m_exceptions.loadUpdateTargetByMsg(yystack_[1].value.as< std::string > (), std::move(yystack_[0].value.as< std::unique_ptr > > > ()), &error) == false) {
std::stringstream ss;
ss << "SecRuleUpdateTargetByMsg: failed to load:";
ss << yystack_[1].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
}
#line 2330 "seclang-parser.cc" // lalr1.cc:859
break;
case 121:
#line 1466 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
double ruleId;
try {
ruleId = std::stod(yystack_[1].value.as< std::string > ());
} catch (...) {
std::stringstream ss;
ss << "SecRuleUpdateTargetById: failed to load:";
ss << "The input \"" + yystack_[1].value.as< std::string > () + "\" does not ";
ss << "seems to be a valid rule id.";
ss << ". ";
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
if (driver.m_exceptions.loadUpdateTargetById(ruleId, std::move(yystack_[0].value.as< std::unique_ptr > > > ()), &error) == false) {
std::stringstream ss;
ss << "SecRuleUpdateTargetById: failed to load:";
ss << yystack_[1].value.as< std::string > ();
ss << ". ";
ss << error;
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
}
#line 2360 "seclang-parser.cc" // lalr1.cc:859
break;
case 122:
#line 1492 "seclang-parser.yy" // lalr1.cc:859
{
std::string error;
double ruleId;
try {
ruleId = std::stod(yystack_[1].value.as< std::string > ());
} catch (...) {
std::stringstream ss;
ss << "SecRuleUpdateActionById: failed to load:";
ss << "The input \"" + yystack_[1].value.as< std::string > () + "\" does not ";
ss << "seems to be a valid rule id.";
ss << ". ";
driver.error(yystack_[2].location, ss.str());
YYERROR;
}
std::vector *a = new std::vector();
for (auto &i : *yystack_[0].value.as< std::unique_ptr > > > ().get()) {
a->push_back(i.release());
}
driver.error(yystack_[2].location, "SecRuleUpdateActionById is not yet supported");
YYERROR;
}
#line 2389 "seclang-parser.cc" // lalr1.cc:859
break;
case 123:
#line 1518 "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 2405 "seclang-parser.cc" // lalr1.cc:859
break;
case 124:
#line 1530 "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 2428 "seclang-parser.cc" // lalr1.cc:859
break;
case 125:
#line 1550 "seclang-parser.yy" // lalr1.cc:859
{
#ifdef WITH_GEOIP
std::string err;
std::string file = modsecurity::utils::find_resource(yystack_[0].value.as< std::string > (),
driver.ref.back(), &err);
if (file.empty()) {
std::stringstream ss;
ss << "Failed to load locate the GeoDB file from: " << yystack_[0].value.as< std::string > () << " ";
ss << err;
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
if (GeoLookup::getInstance().setDataBase(file, &err) == false) {
std::stringstream ss;
ss << "Failed to load the GeoDB from: ";
ss << file << ". " << err;
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 2459 "seclang-parser.cc" // lalr1.cc:859
break;
case 126:
#line 1578 "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 2468 "seclang-parser.cc" // lalr1.cc:859
break;
case 127:
#line 1583 "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 2477 "seclang-parser.cc" // lalr1.cc:859
break;
case 128:
#line 1588 "seclang-parser.yy" // lalr1.cc:859
{
std::stringstream ss;
ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer ";
ss << "supported. Instead, you can use your web server configurations to control ";
ss << "those values. ModSecurity will follow the web server decision.";
driver.error(yystack_[1].location, ss.str());
YYERROR;
}
#line 2490 "seclang-parser.cc" // lalr1.cc:859
break;
case 129:
#line 1597 "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 2499 "seclang-parser.cc" // lalr1.cc:859
break;
case 130:
#line 1602 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction;
}
#line 2507 "seclang-parser.cc" // lalr1.cc:859
break;
case 131:
#line 1606 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction;
}
#line 2515 "seclang-parser.cc" // lalr1.cc:859
break;
case 132:
#line 1610 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction;
}
#line 2523 "seclang-parser.cc" // lalr1.cc:859
break;
case 133:
#line 1614 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction;
}
#line 2531 "seclang-parser.cc" // lalr1.cc:859
break;
case 134:
#line 1618 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction;
}
#line 2539 "seclang-parser.cc" // lalr1.cc:859
break;
case 135:
#line 1622 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction;
}
#line 2547 "seclang-parser.cc" // lalr1.cc:859
break;
case 138:
#line 1636 "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);
driver.m_responseBodyTypeToBeInspected.m_set = true;
for (std::set::iterator it=tokens.begin();
it!=tokens.end(); ++it)
{
driver.m_responseBodyTypeToBeInspected.m_value.insert(*it);
}
}
#line 2563 "seclang-parser.cc" // lalr1.cc:859
break;
case 139:
#line 1648 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_responseBodyTypeToBeInspected.m_set = true;
driver.m_responseBodyTypeToBeInspected.m_clear = true;
driver.m_responseBodyTypeToBeInspected.m_value.clear();
}
#line 2573 "seclang-parser.cc" // lalr1.cc:859
break;
case 140:
#line 1654 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secXMLExternalEntity = modsecurity::RulesProperties::FalseConfigBoolean;
}
#line 2581 "seclang-parser.cc" // lalr1.cc:859
break;
case 141:
#line 1658 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_secXMLExternalEntity = modsecurity::RulesProperties::TrueConfigBoolean;
}
#line 2589 "seclang-parser.cc" // lalr1.cc:859
break;
case 142:
#line 1662 "seclang-parser.yy" // lalr1.cc:859
{
/* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended
std::stringstream ss;
ss << "As of ModSecurity version 3.0, SecTmpDir is no longer supported.";
ss << " Instead, you can use your web server configurations to control when";
ss << "and where to swap. ModSecurity will follow the web server decision.";
driver.error(@0, ss.str());
YYERROR;
*/
}
#line 2604 "seclang-parser.cc" // lalr1.cc:859
break;
case 145:
#line 1683 "seclang-parser.yy" // lalr1.cc:859
{
if (atoi(yystack_[0].value.as< std::string > ().c_str()) == 1) {
driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported.");
YYERROR;
}
}
#line 2615 "seclang-parser.cc" // lalr1.cc:859
break;
case 146:
#line 1690 "seclang-parser.yy" // lalr1.cc:859
{
driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported.");
YYERROR;
}
#line 2624 "seclang-parser.cc" // lalr1.cc:859
break;
case 149:
#line 1705 "seclang-parser.yy" // lalr1.cc:859
{
/* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended
driver.error(@0, "SecCollectionTimeout is not yet supported.");
YYERROR;
*/
}
#line 2635 "seclang-parser.cc" // lalr1.cc:859
break;
case 150:
#line 1712 "seclang-parser.yy" // lalr1.cc:859
{
driver.m_httpblKey.m_set = true;
driver.m_httpblKey.m_value = yystack_[0].value.as< std::string > ();
}
#line 2644 "seclang-parser.cc" // lalr1.cc:859
break;
case 151:
#line 1720 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ());
}
#line 2652 "seclang-parser.cc" // lalr1.cc:859
break;
case 152:
#line 1724 "seclang-parser.yy" // lalr1.cc:859
{
yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ());
}
#line 2660 "seclang-parser.cc" // lalr1.cc:859
break;
case 153:
#line 1731 "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 2669 "seclang-parser.cc" // lalr1.cc:859
break;
case 154:
#line 1736 "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 2679 "seclang-parser.cc" // lalr1.cc:859
break;
case 155:
#line 1742 "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 2689 "seclang-parser.cc" // lalr1.cc:859
break;
case 156:
#line 1748 "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 2699 "seclang-parser.cc" // lalr1.cc:859
break;
case 157:
#line 1754 "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 2710 "seclang-parser.cc" // lalr1.cc:859
break;
case 158:
#line 1761 "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 2721 "seclang-parser.cc" // lalr1.cc:859
break;
case 159:
#line 1771 "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 2729 "seclang-parser.cc" // lalr1.cc:859
break;
case 160:
#line 1775 "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 2737 "seclang-parser.cc" // lalr1.cc:859
break;
case 161:
#line 1779 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_NoDictElement());
}
#line 2745 "seclang-parser.cc" // lalr1.cc:859
break;
case 162:
#line 1783 "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 2753 "seclang-parser.cc" // lalr1.cc:859
break;
case 163:
#line 1787 "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 2761 "seclang-parser.cc" // lalr1.cc:859
break;
case 164:
#line 1791 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_NoDictElement());
}
#line 2769 "seclang-parser.cc" // lalr1.cc:859
break;
case 165:
#line 1795 "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 2777 "seclang-parser.cc" // lalr1.cc:859
break;
case 166:
#line 1799 "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 2785 "seclang-parser.cc" // lalr1.cc:859
break;
case 167:
#line 1803 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_NoDictElement());
}
#line 2793 "seclang-parser.cc" // lalr1.cc:859
break;
case 168:
#line 1807 "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 2801 "seclang-parser.cc" // lalr1.cc:859
break;
case 169:
#line 1811 "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 2809 "seclang-parser.cc" // lalr1.cc:859
break;
case 170:
#line 1815 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_NoDictElement());
}
#line 2817 "seclang-parser.cc" // lalr1.cc:859
break;
case 171:
#line 1819 "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 2825 "seclang-parser.cc" // lalr1.cc:859
break;
case 172:
#line 1823 "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 2833 "seclang-parser.cc" // lalr1.cc:859
break;
case 173:
#line 1827 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_NoDictElement());
}
#line 2841 "seclang-parser.cc" // lalr1.cc:859
break;
case 174:
#line 1831 "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 2849 "seclang-parser.cc" // lalr1.cc:859
break;
case 175:
#line 1835 "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 2857 "seclang-parser.cc" // lalr1.cc:859
break;
case 176:
#line 1839 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_NoDictElement());
}
#line 2865 "seclang-parser.cc" // lalr1.cc:859
break;
case 177:
#line 1843 "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 2873 "seclang-parser.cc" // lalr1.cc:859
break;
case 178:
#line 1847 "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 2881 "seclang-parser.cc" // lalr1.cc:859
break;
case 179:
#line 1851 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_NoDictElement());
}
#line 2889 "seclang-parser.cc" // lalr1.cc:859
break;
case 180:
#line 1855 "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 2897 "seclang-parser.cc" // lalr1.cc:859
break;
case 181:
#line 1859 "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 2905 "seclang-parser.cc" // lalr1.cc:859
break;
case 182:
#line 1863 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_NoDictElement());
}
#line 2913 "seclang-parser.cc" // lalr1.cc:859
break;
case 183:
#line 1867 "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 2921 "seclang-parser.cc" // lalr1.cc:859
break;
case 184:
#line 1871 "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 2929 "seclang-parser.cc" // lalr1.cc:859
break;
case 185:
#line 1875 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_NoDictElement());
}
#line 2937 "seclang-parser.cc" // lalr1.cc:859
break;
case 186:
#line 1879 "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 2945 "seclang-parser.cc" // lalr1.cc:859
break;
case 187:
#line 1883 "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 2953 "seclang-parser.cc" // lalr1.cc:859
break;
case 188:
#line 1887 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_NoDictElement());
}
#line 2961 "seclang-parser.cc" // lalr1.cc:859
break;
case 189:
#line 1891 "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 2969 "seclang-parser.cc" // lalr1.cc:859
break;
case 190:
#line 1895 "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 2977 "seclang-parser.cc" // lalr1.cc:859
break;
case 191:
#line 1899 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_NoDictElement());
}
#line 2985 "seclang-parser.cc" // lalr1.cc:859
break;
case 192:
#line 1903 "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 2993 "seclang-parser.cc" // lalr1.cc:859
break;
case 193:
#line 1907 "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 3001 "seclang-parser.cc" // lalr1.cc:859
break;
case 194:
#line 1911 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_NoDictElement());
}
#line 3009 "seclang-parser.cc" // lalr1.cc:859
break;
case 195:
#line 1915 "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 3017 "seclang-parser.cc" // lalr1.cc:859
break;
case 196:
#line 1919 "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 3025 "seclang-parser.cc" // lalr1.cc:859
break;
case 197:
#line 1923 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_NoDictElement());
}
#line 3033 "seclang-parser.cc" // lalr1.cc:859
break;
case 198:
#line 1927 "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 3041 "seclang-parser.cc" // lalr1.cc:859
break;
case 199:
#line 1931 "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 3049 "seclang-parser.cc" // lalr1.cc:859
break;
case 200:
#line 1935 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_NoDictElement());
}
#line 3057 "seclang-parser.cc" // lalr1.cc:859
break;
case 201:
#line 1939 "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 3065 "seclang-parser.cc" // lalr1.cc:859
break;
case 202:
#line 1943 "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 3073 "seclang-parser.cc" // lalr1.cc:859
break;
case 203:
#line 1947 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_NoDictElement());
}
#line 3081 "seclang-parser.cc" // lalr1.cc:859
break;
case 204:
#line 1951 "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 3089 "seclang-parser.cc" // lalr1.cc:859
break;
case 205:
#line 1955 "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 3097 "seclang-parser.cc" // lalr1.cc:859
break;
case 206:
#line 1959 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_NoDictElement());
}
#line 3105 "seclang-parser.cc" // lalr1.cc:859
break;
case 207:
#line 1963 "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 3113 "seclang-parser.cc" // lalr1.cc:859
break;
case 208:
#line 1967 "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 3121 "seclang-parser.cc" // lalr1.cc:859
break;
case 209:
#line 1971 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_NoDictElement());
}
#line 3129 "seclang-parser.cc" // lalr1.cc:859
break;
case 210:
#line 1975 "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 3137 "seclang-parser.cc" // lalr1.cc:859
break;
case 211:
#line 1979 "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 3145 "seclang-parser.cc" // lalr1.cc:859
break;
case 212:
#line 1983 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV"));
}
#line 3153 "seclang-parser.cc" // lalr1.cc:859
break;
case 213:
#line 1987 "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 3161 "seclang-parser.cc" // lalr1.cc:859
break;
case 214:
#line 1991 "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 3169 "seclang-parser.cc" // lalr1.cc:859
break;
case 215:
#line 1995 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML_NoDictElement());
}
#line 3177 "seclang-parser.cc" // lalr1.cc:859
break;
case 216:
#line 1999 "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 3185 "seclang-parser.cc" // lalr1.cc:859
break;
case 217:
#line 2003 "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 3193 "seclang-parser.cc" // lalr1.cc:859
break;
case 218:
#line 2007 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_NoDictElement());
}
#line 3201 "seclang-parser.cc" // lalr1.cc:859
break;
case 219:
#line 2011 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 3209 "seclang-parser.cc" // lalr1.cc:859
break;
case 220:
#line 2015 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 3217 "seclang-parser.cc" // lalr1.cc:859
break;
case 221:
#line 2019 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 3225 "seclang-parser.cc" // lalr1.cc:859
break;
case 222:
#line 2023 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_NoDictElement());
}
#line 3233 "seclang-parser.cc" // lalr1.cc:859
break;
case 223:
#line 2027 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 3241 "seclang-parser.cc" // lalr1.cc:859
break;
case 224:
#line 2031 "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 3249 "seclang-parser.cc" // lalr1.cc:859
break;
case 225:
#line 2035 "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 3257 "seclang-parser.cc" // lalr1.cc:859
break;
case 226:
#line 2039 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_NoDictElement());
}
#line 3265 "seclang-parser.cc" // lalr1.cc:859
break;
case 227:
#line 2043 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 3273 "seclang-parser.cc" // lalr1.cc:859
break;
case 228:
#line 2047 "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 3281 "seclang-parser.cc" // lalr1.cc:859
break;
case 229:
#line 2051 "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 3289 "seclang-parser.cc" // lalr1.cc:859
break;
case 230:
#line 2055 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_NoDictElement());
}
#line 3297 "seclang-parser.cc" // lalr1.cc:859
break;
case 231:
#line 2059 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ())));
}
#line 3305 "seclang-parser.cc" // lalr1.cc:859
break;
case 232:
#line 2063 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElement(yystack_[0].value.as< std::string > ()));
}
#line 3313 "seclang-parser.cc" // lalr1.cc:859
break;
case 233:
#line 2067 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElementRegexp(yystack_[0].value.as< std::string > ()));
}
#line 3321 "seclang-parser.cc" // lalr1.cc:859
break;
case 234:
#line 2071 "seclang-parser.yy" // lalr1.cc:859
{
VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr