From 9f47f1473c88a5b105ced2f11c87204a0abba424 Mon Sep 17 00:00:00 2001 From: Felipe Zimmerle Date: Tue, 12 Jan 2021 09:58:30 -0300 Subject: [PATCH] Removes memory leaks on the parse - Parser location is now a custom class. It holds a shared pointer with the file name; If the parser fails, the resource is deleted. - To follow the parser change, the Rule class now holds the file name in a shared pointer instead of a unique pointer. As a shared pointer we avoid duplication of the file name in memory, plus, it frees itself when not in use anymore. - Operator init also accepting the filename as a shared pointer. - Driver is treating m_location was privative. Now it holds a std::list> instead of: std::list. - Fix: addSecRule on Driver() was changed from RuleWithAction to RuleWithOperator. - Minor changes on the regression and rules-check utility to force deletion of resources even when they fail. - Couple of virtual destructors were placed to force the shared pointer decrementing on shared variables. - Deleted constructors for copy were placed for the sake of readability. --- .gitignore | 1 - headers/modsecurity/rule.h | 4 +- headers/modsecurity/rules.h | 11 + headers/modsecurity/rules_set.h | 3 +- headers/modsecurity/rules_set_phases.h | 9 + src/operators/fuzzy_hash.cc | 2 +- src/operators/fuzzy_hash.h | 2 +- src/operators/inspect_file.cc | 2 +- src/operators/inspect_file.h | 2 +- src/operators/ip_match.cc | 2 +- src/operators/ip_match.h | 2 +- src/operators/ip_match_from_file.cc | 2 +- src/operators/ip_match_from_file.h | 2 +- src/operators/operator.h | 2 +- src/operators/pm.cc | 2 +- src/operators/pm.h | 2 +- src/operators/pm_from_file.cc | 4 +- src/operators/pm_from_file.h | 2 +- src/operators/rx.cc | 2 +- src/operators/rx.h | 4 +- src/operators/rx_global.cc | 2 +- src/operators/rx_global.h | 2 +- src/operators/validate_byte_range.cc | 2 +- src/operators/validate_byte_range.h | 2 +- src/operators/validate_dtd.cc | 2 +- src/operators/validate_dtd.h | 2 +- src/operators/validate_schema.cc | 2 +- src/operators/validate_schema.h | 2 +- src/operators/verify_cc.cc | 2 +- src/operators/verify_cc.h | 2 +- src/parser/Makefile.am | 1 - src/parser/driver.cc | 25 +- src/parser/driver.h | 25 +- src/parser/location.hh | 22 +- src/parser/seclang-parser.cc | 1747 ++++++++++++------------ src/parser/seclang-parser.hh | 18 +- src/parser/seclang-parser.yy | 83 +- src/parser/seclang-scanner.cc | 1034 +++++++------- src/parser/seclang-scanner.ll | 1020 +++++++------- src/rule_marker.h | 8 +- src/rule_script.h | 4 +- src/rule_unconditional.h | 4 +- src/rule_with_actions.cc | 5 +- src/rule_with_actions.h | 5 +- src/rule_with_actions_properties.cc | 11 +- src/rule_with_operator.cc | 11 +- src/rule_with_operator.h | 4 +- src/run_time_string.h | 2 + src/utils/system.cc | 5 + src/utils/system.h | 4 + src/variables/variable.h | 20 + test/regression/regression.cc | 8 +- test/unit/unit.cc | 3 +- tools/rules-check/rules-check.cc | 9 +- 54 files changed, 2134 insertions(+), 2026 deletions(-) diff --git a/.gitignore b/.gitignore index 390c0e60..aad96ecf 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,6 @@ depcomp .dirstamp src/config.h src/config.h.in -src/location.hh src/position.hh src/stack.hh src/stamp-h1 diff --git a/headers/modsecurity/rule.h b/headers/modsecurity/rule.h index 77507f94..00bf2ca7 100644 --- a/headers/modsecurity/rule.h +++ b/headers/modsecurity/rule.h @@ -44,8 +44,8 @@ class Operator; class Rule { public: - Rule(std::unique_ptr fileName, int lineNumber) - : m_fileName(std::move(fileName)), + Rule(std::shared_ptr fileName, int lineNumber) + : m_fileName(fileName), m_lineNumber(lineNumber), m_phase(modsecurity::Phases::RequestHeadersPhase) { } diff --git a/headers/modsecurity/rules.h b/headers/modsecurity/rules.h index 3721f8bb..662c8d0b 100644 --- a/headers/modsecurity/rules.h +++ b/headers/modsecurity/rules.h @@ -47,6 +47,17 @@ class Rules { using iterator=typename container::iterator; using const_iterator=typename container::const_iterator; + Rules() + : m_rules() + { }; + + Rules(const Rules&) = delete; + + virtual ~Rules() { + m_rules.clear(); + } + + int append(Rules *from); bool insert(const std::shared_ptr &rule); diff --git a/headers/modsecurity/rules_set.h b/headers/modsecurity/rules_set.h index 77324155..5e3fffde 100644 --- a/headers/modsecurity/rules_set.h +++ b/headers/modsecurity/rules_set.h @@ -60,7 +60,8 @@ class RulesSet : public RulesSetProperties { #endif { } - ~RulesSet() { } + ~RulesSet() + { } int loadFromUri(const char *uri); int loadRemote(const char *key, const char *uri); diff --git a/headers/modsecurity/rules_set_phases.h b/headers/modsecurity/rules_set_phases.h index 2b9b67c9..6a196a67 100644 --- a/headers/modsecurity/rules_set_phases.h +++ b/headers/modsecurity/rules_set_phases.h @@ -47,6 +47,15 @@ class RulesSetPhases { using iterator = typename container::iterator; using const_iterator = typename container::const_iterator; + RulesSetPhases() + : m_rulesAtPhase() + { } + + RulesSetPhases(const RulesSetPhases&) = delete; + + virtual ~RulesSetPhases() + { }; + void insert(std::shared_ptr rule); void append(RulesSetPhases *from); diff --git a/src/operators/fuzzy_hash.cc b/src/operators/fuzzy_hash.cc index 732236b0..b3b6c3d0 100644 --- a/src/operators/fuzzy_hash.cc +++ b/src/operators/fuzzy_hash.cc @@ -23,7 +23,7 @@ namespace modsecurity { namespace operators { -bool FuzzyHash::init(const std::string ¶m2, std::string *error) { +bool FuzzyHash::init(std::shared_ptr param2, std::string *error) { #ifdef WITH_SSDEEP std::string digit; std::string file; diff --git a/src/operators/fuzzy_hash.h b/src/operators/fuzzy_hash.h index c0ebfcb0..47bda125 100644 --- a/src/operators/fuzzy_hash.h +++ b/src/operators/fuzzy_hash.h @@ -49,7 +49,7 @@ class FuzzyHash : public Operator { const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; private: int m_threshold; struct fuzzy_hash_chunk *m_head; diff --git a/src/operators/inspect_file.cc b/src/operators/inspect_file.cc index 69cf73c6..bf27e37f 100644 --- a/src/operators/inspect_file.cc +++ b/src/operators/inspect_file.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace operators { -bool InspectFile::init(const std::string ¶m2, std::string *error) { +bool InspectFile::init(std::shared_ptr param2, std::string *error) { std::istream *iss; std::string err; std::string err_lua; diff --git a/src/operators/inspect_file.h b/src/operators/inspect_file.h index 65acde7f..65a15e38 100644 --- a/src/operators/inspect_file.h +++ b/src/operators/inspect_file.h @@ -35,7 +35,7 @@ class InspectFile : public Operator { m_file(""), m_isScript(false) { } - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; bool evaluate(Transaction *transaction, const RuleWithActions *rule, diff --git a/src/operators/ip_match.cc b/src/operators/ip_match.cc index 94c16c21..e6e09687 100644 --- a/src/operators/ip_match.cc +++ b/src/operators/ip_match.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace operators { -bool IpMatch::init(const std::string &file, std::string *error) { +bool IpMatch::init(std::shared_ptr file, std::string *error) { std::string e(""); bool res = m_tree.addFromBuffer(m_param, &e); diff --git a/src/operators/ip_match.h b/src/operators/ip_match.h index 3522024b..cf49b51e 100644 --- a/src/operators/ip_match.h +++ b/src/operators/ip_match.h @@ -39,7 +39,7 @@ class IpMatch : public Operator { const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; protected: Utils::IpTree m_tree; diff --git a/src/operators/ip_match_from_file.cc b/src/operators/ip_match_from_file.cc index 12df526a..fa3d8269 100644 --- a/src/operators/ip_match_from_file.cc +++ b/src/operators/ip_match_from_file.cc @@ -26,7 +26,7 @@ namespace modsecurity { namespace operators { -bool IpMatchFromFile::init(const std::string &file, +bool IpMatchFromFile::init(std::shared_ptr file, std::string *error) { std::string e(""); bool res = false; diff --git a/src/operators/ip_match_from_file.h b/src/operators/ip_match_from_file.h index 59d01d90..b6084034 100644 --- a/src/operators/ip_match_from_file.h +++ b/src/operators/ip_match_from_file.h @@ -31,7 +31,7 @@ class IpMatchFromFile : public IpMatch { : IpMatch("IpMatchFromFile", std::move(param)) { } IpMatchFromFile(const std::string &n, std::unique_ptr param) : IpMatch(n, std::move(param)) { } - bool init(const std::string& file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; }; } // namespace operators diff --git a/src/operators/operator.h b/src/operators/operator.h index a45e2c26..eaefc2b4 100644 --- a/src/operators/operator.h +++ b/src/operators/operator.h @@ -104,7 +104,7 @@ class Operator { virtual ~Operator() { } static Operator *instantiate(std::string opName, std::string param); - virtual bool init(const std::string &arg, std::string *error) { + virtual bool init(std::shared_ptr arg, std::string *error) { return true; } diff --git a/src/operators/pm.cc b/src/operators/pm.cc index 09887834..7be7f6f9 100644 --- a/src/operators/pm.cc +++ b/src/operators/pm.cc @@ -117,7 +117,7 @@ bool Pm::evaluate(Transaction *transaction, } -bool Pm::init(const std::string &file, std::string *error) { +bool Pm::init(std::shared_ptr file, std::string *error) { std::vector vec; std::istringstream *iss; const char *err = NULL; diff --git a/src/operators/pm.h b/src/operators/pm.h index 604cbba7..13e3ac13 100644 --- a/src/operators/pm.h +++ b/src/operators/pm.h @@ -48,7 +48,7 @@ class Pm : public Operator { RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; void postOrderTraversal(acmp_btree_node_t *node); void cleanup(acmp_node_t *n); diff --git a/src/operators/pm_from_file.cc b/src/operators/pm_from_file.cc index 53f32695..fc0e9afb 100644 --- a/src/operators/pm_from_file.cc +++ b/src/operators/pm_from_file.cc @@ -43,7 +43,7 @@ bool PmFromFile::isComment(const std::string &s) { return true; } -bool PmFromFile::init(const std::string &config, std::string *error) { +bool PmFromFile::init(std::shared_ptr config, std::string *error) { std::istream *iss; if (m_param.compare(0, 8, "https://") == 0) { @@ -56,7 +56,7 @@ bool PmFromFile::init(const std::string &config, std::string *error) { iss = new std::stringstream(client.content); } else { std::string err; - std::string resource = utils::find_resource(m_param, config.c_str(), &err); + std::string resource = utils::find_resource(m_param, config.get()->c_str(), &err); iss = new std::ifstream(resource, std::ios::in); if (((std::ifstream *)iss)->is_open() == false) { diff --git a/src/operators/pm_from_file.h b/src/operators/pm_from_file.h index f4d0d994..ec584636 100644 --- a/src/operators/pm_from_file.h +++ b/src/operators/pm_from_file.h @@ -35,7 +35,7 @@ class PmFromFile : public Pm { explicit PmFromFile(const std::string &n, std::unique_ptr param) : Pm(n, std::move(param)) { } - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; private: static bool isComment(const std::string &s); diff --git a/src/operators/rx.cc b/src/operators/rx.cc index 5b79d23f..f47fc363 100644 --- a/src/operators/rx.cc +++ b/src/operators/rx.cc @@ -29,7 +29,7 @@ namespace modsecurity { namespace operators { -bool Rx::init(const std::string &file, std::string *error) { +bool Rx::init(std::shared_ptr file, std::string *error) { if (m_string->containsMacro() == false) { m_re = new Regex(m_param); } diff --git a/src/operators/rx.h b/src/operators/rx.h index 481b393d..6af2125d 100644 --- a/src/operators/rx.h +++ b/src/operators/rx.h @@ -42,7 +42,7 @@ class Rx : public Operator { m_couldContainsMacro = true; } - ~Rx() { + virtual ~Rx() { if (m_string->containsMacro() == false && m_re != NULL) { delete m_re; m_re = NULL; @@ -54,7 +54,7 @@ class Rx : public Operator { const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; private: Regex *m_re; diff --git a/src/operators/rx_global.cc b/src/operators/rx_global.cc index a9a6babb..eb777f6e 100644 --- a/src/operators/rx_global.cc +++ b/src/operators/rx_global.cc @@ -27,7 +27,7 @@ namespace modsecurity { namespace operators { -bool RxGlobal::init(const std::string &arg, std::string *error) { +bool RxGlobal::init(std::shared_ptr arg, std::string *error) { if (m_string->containsMacro() == false) { m_re = new Regex(m_param); } diff --git a/src/operators/rx_global.h b/src/operators/rx_global.h index 5156c0a8..1d549741 100644 --- a/src/operators/rx_global.h +++ b/src/operators/rx_global.h @@ -54,7 +54,7 @@ class RxGlobal : public Operator { const bpstd::string_view& input, RuleMessage *ruleMessage) override; - bool init(const std::string &arg, std::string *error) override; + bool init(std::shared_ptr arg, std::string *error) override; private: Regex *m_re; diff --git a/src/operators/validate_byte_range.cc b/src/operators/validate_byte_range.cc index 5687d6d4..b3abc295 100644 --- a/src/operators/validate_byte_range.cc +++ b/src/operators/validate_byte_range.cc @@ -85,7 +85,7 @@ bool ValidateByteRange::getRange(const bpstd::string_view &rangeRepresentation, } -bool ValidateByteRange::init(const std::string &file, +bool ValidateByteRange::init(std::shared_ptr file, std::string *error) { size_t pos = m_param.find_first_of(","); diff --git a/src/operators/validate_byte_range.h b/src/operators/validate_byte_range.h index 244ac9c5..14f49b55 100644 --- a/src/operators/validate_byte_range.h +++ b/src/operators/validate_byte_range.h @@ -43,7 +43,7 @@ class ValidateByteRange : public Operator { RuleMessage *ruleMessage) override; bool getRange(const bpstd::string_view &rangeRepresentation, std::string *error); - bool init(const std::string& file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; private: std::vector ranges; char table[32]; diff --git a/src/operators/validate_dtd.cc b/src/operators/validate_dtd.cc index e1f0cad0..788a1a6a 100644 --- a/src/operators/validate_dtd.cc +++ b/src/operators/validate_dtd.cc @@ -25,7 +25,7 @@ namespace modsecurity { namespace operators { #ifdef WITH_LIBXML2 -bool ValidateDTD::init(const std::string &file, std::string *error) { +bool ValidateDTD::init(std::shared_ptr file, std::string *error) { std::string err; m_resource = utils::find_resource(m_param, file, &err); if (m_resource == "") { diff --git a/src/operators/validate_dtd.h b/src/operators/validate_dtd.h index 731261f9..77300ea6 100644 --- a/src/operators/validate_dtd.h +++ b/src/operators/validate_dtd.h @@ -64,7 +64,7 @@ class ValidateDTD : public Operator { const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; static void error_runtime(void *ctx, const char *msg, ...) { diff --git a/src/operators/validate_schema.cc b/src/operators/validate_schema.cc index 6845c670..4b8c416b 100644 --- a/src/operators/validate_schema.cc +++ b/src/operators/validate_schema.cc @@ -27,7 +27,7 @@ namespace operators { #ifdef WITH_LIBXML2 -bool ValidateSchema::init(const std::string &file, std::string *error) { +bool ValidateSchema::init(std::shared_ptr file, std::string *error) { std::string err; m_resource = utils::find_resource(m_param, file, &err); if (m_resource == "") { diff --git a/src/operators/validate_schema.h b/src/operators/validate_schema.h index ea9c1c8c..0ded1080 100644 --- a/src/operators/validate_schema.h +++ b/src/operators/validate_schema.h @@ -46,7 +46,7 @@ class ValidateSchema : public Operator { const bpstd::string_view &input, RuleMessage *ruleMessage) override; - bool init(const std::string &file, std::string *error) override; + bool init(std::shared_ptr file, std::string *error) override; static void error_load(void *ctx, const char *msg, ...) { diff --git a/src/operators/verify_cc.cc b/src/operators/verify_cc.cc index 3acab213..4cdb9c5b 100644 --- a/src/operators/verify_cc.cc +++ b/src/operators/verify_cc.cc @@ -91,7 +91,7 @@ int VerifyCC::luhnVerify(const char *ccnumber, int len) { -bool VerifyCC::init(const std::string ¶m2, std::string *error) { +bool VerifyCC::init(std::shared_ptr param2, std::string *error) { const char *errptr = NULL; int erroffset = 0; diff --git a/src/operators/verify_cc.h b/src/operators/verify_cc.h index e14c7566..fd0b4c10 100644 --- a/src/operators/verify_cc.h +++ b/src/operators/verify_cc.h @@ -35,7 +35,7 @@ class VerifyCC : public Operator { m_pce(NULL) { } ~VerifyCC(); - bool init(const std::string ¶m, std::string *error) override; + bool init(std::shared_ptr param, std::string *error) override; bool evaluate(Transaction *transaction, const RuleWithActions *rule, diff --git a/src/parser/Makefile.am b/src/parser/Makefile.am index 17c03567..ee787670 100644 --- a/src/parser/Makefile.am +++ b/src/parser/Makefile.am @@ -38,7 +38,6 @@ CLEANFILES = test.cc \ seclang-scanner.cc \ seclang-parser.cc \ seclang-parser.hh \ - location.hh \ position.hh \ stack.hh diff --git a/src/parser/driver.cc b/src/parser/driver.cc index acb7d6b8..7579007d 100644 --- a/src/parser/driver.cc +++ b/src/parser/driver.cc @@ -34,18 +34,16 @@ Driver::Driver() Driver::~Driver() { - while (loc.empty() == false) { - yy::location *a = loc.back(); - loc.pop_back(); - delete a; + while (!m_location.empty()) { + m_location.pop_back(); } } -int Driver::addSecMarker(std::string marker, std::unique_ptr fileName, int lineNumber) { +int Driver::addSecMarker(std::string marker, std::shared_ptr fileName, int lineNumber) { // FIXME: we might move this to the parser. for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { - RuleMarker *r = new RuleMarker(marker, std::move(fileName), lineNumber); + RuleMarker *r = new RuleMarker(marker, fileName, lineNumber); std::unique_ptr rule(std::move(r)); rule->setPhase(i); m_rulesSetPhases.insert(std::move(rule)); @@ -73,7 +71,7 @@ int Driver::addSecRuleScript(std::unique_ptr rule) { } -int Driver::addSecRule(std::unique_ptr r) { +int Driver::addSecRule(std::unique_ptr r) { if (r->getPhase() >= modsecurity::Phases::NUMBER_OF_PHASES) { m_parserError << "Unknown phase: " << std::to_string(r->getPhase()); m_parserError << std::endl; @@ -173,7 +171,7 @@ int Driver::addSecRule(std::unique_ptr r) { return true; } - std::shared_ptr rule(std::move(r)); + std::shared_ptr rule(std::move(r)); /* * Checking if the rule has an ID and also checking if this ID is not used * by other rule @@ -195,11 +193,10 @@ int Driver::addSecRule(std::unique_ptr r) { int Driver::parse(const std::string &f, const std::string &ref) { m_lastRule = nullptr; - loc.push_back(new yy::location()); if (ref.empty()) { - loc.back()->begin.filename = loc.back()->end.filename = new std::string("<>"); + newLocation("<>"); } else { - loc.back()->begin.filename = loc.back()->end.filename = new std::string(ref); + newLocation(ref); } if (f.empty()) { @@ -258,16 +255,16 @@ int Driver::parseFile(const std::string &f) { } -void Driver::error(const yy::location& l, const std::string& m) { +void Driver::error(const yy::seclang_parser::location_type& l, const std::string& m) { error(l, m, ""); } -void Driver::error(const yy::location& l, const std::string& m, +void Driver::error(const yy::seclang_parser::location_type& l, const std::string& m, const std::string& c) { if (m_parserError.tellp() == 0) { m_parserError << "Rules error. "; - m_parserError << "File: " << *l.end.filename << ". "; + m_parserError << "File: " << *l.end.filename->get() << ". "; m_parserError << "Line: " << l.end.line << ". "; m_parserError << "Column: " << l.end.column - 1 << ". "; } diff --git a/src/parser/driver.h b/src/parser/driver.h index ed7fd077..89b289b5 100644 --- a/src/parser/driver.h +++ b/src/parser/driver.h @@ -64,11 +64,13 @@ typedef struct Driver_t Driver; class Driver : public RulesSetProperties { public: Driver(); + Driver(const Driver &d) = delete; + Driver &operator=(const Driver& other) = delete; virtual ~Driver(); - int addSecRule(std::unique_ptr rule); + int addSecRule(std::unique_ptr rule); int addSecAction(std::unique_ptr rule); - int addSecMarker(std::string marker, std::unique_ptr fileName, int lineNumber); + int addSecMarker(std::string marker, std::shared_ptr fileName, int lineNumber); int addSecRuleScript(std::unique_ptr rule); bool scan_begin(); @@ -82,16 +84,29 @@ class Driver : public RulesSetProperties { bool trace_parsing; - void error(const yy::location& l, const std::string& m); - void error(const yy::location& l, const std::string& m, + void error(const yy::seclang_parser::location_type& l, const std::string& m); + void error(const yy::seclang_parser::location_type& l, const std::string& m, const std::string& c); - std::list loc; + void newLocation(std::string file) { + m_location.push_back(std::make_shared()); + m_location.back()->setFileName(file); + } + + yy::seclang_parser::location_type *currentLocation() { + return m_location.back().get(); + } + + void popLocation() { + m_location.pop_back(); + } std::string buffer; RuleWithActions *m_lastRule; RulesSetPhases m_rulesSetPhases; + private: + std::list> m_location; }; diff --git a/src/parser/location.hh b/src/parser/location.hh index 314b0693..b23f340b 100644 --- a/src/parser/location.hh +++ b/src/parser/location.hh @@ -40,6 +40,7 @@ # include # include +# include # ifndef YY_NULLPTR # if defined __cplusplus @@ -61,7 +62,7 @@ namespace yy { { public: /// Type for file name. - typedef const std::string filename_type; + typedef const std::shared_ptr filename_type; /// Type for line and column numbers. typedef int counter_type; @@ -174,12 +175,14 @@ namespace yy { location (const position& b, const position& e) : begin (b) , end (e) + , m_fileName() {} /// Construct a 0-width location in \a p. explicit location (const position& p = position ()) : begin (p) , end (p) + , m_fileName() {} /// Construct a 0-width location in \a f, \a l, \a c. @@ -188,6 +191,7 @@ namespace yy { counter_type c = 1) : begin (f, l, c) , end (f, l, c) + , m_fileName() {} @@ -222,12 +226,28 @@ namespace yy { } /** \} */ + void setFileName(std::string fileName) { + m_fileName = std::make_shared(fileName); + begin.filename = &m_fileName; + end.filename = &m_fileName; + } + + std::shared_ptr getFileName() { + if (!m_fileName) { + if (end.filename) { + m_fileName = *end.filename; + } + } + return m_fileName; + } public: /// Beginning of the located region. position begin; /// End of the located region. position end; + private: + std::shared_ptr m_fileName; }; /// Join two locations, in place. diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index ed981cf4..59dba7fd 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -42,7 +42,7 @@ // Unqualified %code blocks. -#line 329 "seclang-parser.yy" +#line 339 "seclang-parser.yy" #include "src/parser/driver.h" @@ -1318,10 +1318,10 @@ namespace yy { // User initialization code. -#line 322 "seclang-parser.yy" +#line 331 "seclang-parser.yy" { // Initialize the initial location. - yyla.location.begin.filename = yyla.location.end.filename = new std::string(driver.file); + yyla.location.setFileName(driver.file); } #line 1328 "seclang-parser.cc" @@ -1690,7 +1690,7 @@ namespace yy { switch (yyn) { case 2: // input: "end of file" -#line 716 "seclang-parser.yy" +#line 726 "seclang-parser.yy" { return 0; } @@ -1698,7 +1698,7 @@ namespace yy { break; case 6: // audit_log: "CONFIG_DIR_AUDIT_DIR_MOD" -#line 729 "seclang-parser.yy" +#line 739 "seclang-parser.yy" { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } @@ -1706,7 +1706,7 @@ namespace yy { break; case 7: // audit_log: "CONFIG_DIR_AUDIT_DIR" -#line 735 "seclang-parser.yy" +#line 745 "seclang-parser.yy" { driver.m_auditLog->setStorageDir(yystack_[0].value.as < std::string > ()); } @@ -1714,7 +1714,7 @@ namespace yy { break; case 8: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_RELEVANT_ONLY" -#line 741 "seclang-parser.yy" +#line 751 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } @@ -1722,7 +1722,7 @@ namespace yy { break; case 9: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_OFF" -#line 745 "seclang-parser.yy" +#line 755 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } @@ -1730,7 +1730,7 @@ namespace yy { break; case 10: // audit_log: "CONFIG_DIR_AUDIT_ENG" "CONFIG_VALUE_ON" -#line 749 "seclang-parser.yy" +#line 759 "seclang-parser.yy" { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } @@ -1738,7 +1738,7 @@ namespace yy { break; case 11: // audit_log: "CONFIG_DIR_AUDIT_FLE_MOD" -#line 755 "seclang-parser.yy" +#line 765 "seclang-parser.yy" { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8)); } @@ -1746,7 +1746,7 @@ namespace yy { break; case 12: // audit_log: "CONFIG_DIR_AUDIT_LOG2" -#line 761 "seclang-parser.yy" +#line 771 "seclang-parser.yy" { driver.m_auditLog->setFilePath2(yystack_[0].value.as < std::string > ()); } @@ -1754,7 +1754,7 @@ namespace yy { break; case 13: // audit_log: "CONFIG_DIR_AUDIT_LOG_P" -#line 767 "seclang-parser.yy" +#line 777 "seclang-parser.yy" { driver.m_auditLog->setParts(yystack_[0].value.as < std::string > ()); } @@ -1762,7 +1762,7 @@ namespace yy { break; case 14: // audit_log: "CONFIG_DIR_AUDIT_LOG" -#line 773 "seclang-parser.yy" +#line 783 "seclang-parser.yy" { driver.m_auditLog->setFilePath1(yystack_[0].value.as < std::string > ()); } @@ -1770,7 +1770,7 @@ namespace yy { break; case 15: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT JSON -#line 778 "seclang-parser.yy" +#line 788 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } @@ -1778,7 +1778,7 @@ namespace yy { break; case 16: // audit_log: CONFIG_DIR_AUDIT_LOG_FMT NATIVE -#line 783 "seclang-parser.yy" +#line 793 "seclang-parser.yy" { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } @@ -1786,7 +1786,7 @@ namespace yy { break; case 17: // audit_log: "CONFIG_DIR_AUDIT_STS" -#line 789 "seclang-parser.yy" +#line 799 "seclang-parser.yy" { std::string relevant_status(yystack_[0].value.as < std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); @@ -1795,7 +1795,7 @@ namespace yy { break; case 18: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_SERIAL" -#line 796 "seclang-parser.yy" +#line 806 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } @@ -1803,7 +1803,7 @@ namespace yy { break; case 19: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_PARALLEL" -#line 800 "seclang-parser.yy" +#line 810 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } @@ -1811,7 +1811,7 @@ namespace yy { break; case 20: // audit_log: "CONFIG_DIR_AUDIT_TPE" "CONFIG_VALUE_HTTPS" -#line 804 "seclang-parser.yy" +#line 814 "seclang-parser.yy" { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } @@ -1819,7 +1819,7 @@ namespace yy { break; case 21: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_ON" -#line 810 "seclang-parser.yy" +#line 820 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -1827,7 +1827,7 @@ namespace yy { break; case 22: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_OFF" -#line 814 "seclang-parser.yy" +#line 824 "seclang-parser.yy" { driver.m_uploadKeepFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -1835,7 +1835,7 @@ namespace yy { break; case 23: // audit_log: "CONFIG_UPDLOAD_KEEP_FILES" "CONFIG_VALUE_RELEVANT_ONLY" -#line 818 "seclang-parser.yy" +#line 828 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; @@ -1844,7 +1844,7 @@ namespace yy { break; case 24: // audit_log: "CONFIG_UPLOAD_FILE_LIMIT" -#line 823 "seclang-parser.yy" +#line 833 "seclang-parser.yy" { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 10); @@ -1853,7 +1853,7 @@ namespace yy { break; case 25: // audit_log: "CONFIG_UPLOAD_FILE_MODE" -#line 828 "seclang-parser.yy" +#line 838 "seclang-parser.yy" { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as < std::string > ().c_str(), NULL, 8); @@ -1862,7 +1862,7 @@ namespace yy { break; case 26: // audit_log: "CONFIG_UPLOAD_DIR" -#line 833 "seclang-parser.yy" +#line 843 "seclang-parser.yy" { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as < std::string > (); @@ -1871,7 +1871,7 @@ namespace yy { break; case 27: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_ON" -#line 838 "seclang-parser.yy" +#line 848 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::TrueConfigBoolean; } @@ -1879,7 +1879,7 @@ namespace yy { break; case 28: // audit_log: "CONFIG_UPDLOAD_SAVE_TMP_FILES" "CONFIG_VALUE_OFF" -#line 842 "seclang-parser.yy" +#line 852 "seclang-parser.yy" { driver.m_tmpSaveUploadedFiles = modsecurity::RulesSetProperties::FalseConfigBoolean; } @@ -1887,7 +1887,7 @@ namespace yy { break; case 29: // actions: "QUOTATION_MARK" actions_may_quoted "QUOTATION_MARK" -#line 849 "seclang-parser.yy" +#line 859 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } @@ -1895,7 +1895,7 @@ namespace yy { break; case 30: // actions: actions_may_quoted -#line 853 "seclang-parser.yy" +#line 863 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } @@ -1903,7 +1903,7 @@ namespace yy { break; case 31: // actions_may_quoted: actions_may_quoted "," act -#line 860 "seclang-parser.yy" +#line 870 "seclang-parser.yy" { 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 > ())); @@ -1913,7 +1913,7 @@ namespace yy { break; case 32: // actions_may_quoted: act -#line 866 "seclang-parser.yy" +#line 876 "seclang-parser.yy" { std::unique_ptr>> b(new std::vector>()); ACTION_INIT(yystack_[0].value.as < std::unique_ptr > (), yystack_[1].location) @@ -1924,11 +1924,11 @@ namespace yy { break; case 33: // op: op_before_init -#line 876 "seclang-parser.yy" +#line 886 "seclang-parser.yy" { 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(*yystack_[0].location.end.filename, &error) == false) { + if (yylhs.value.as < std::unique_ptr > ()->init(yystack_[0].location.getFileName(), &error) == false) { driver.error(yystack_[1].location, error); YYERROR; } @@ -1937,12 +1937,12 @@ namespace yy { break; case 34: // op: "NOT" op_before_init -#line 885 "seclang-parser.yy" +#line 895 "seclang-parser.yy" { 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(*yystack_[1].location.end.filename, &error) == false) { + if (yylhs.value.as < std::unique_ptr > ()->init(yystack_[1].location.getFileName(), &error) == false) { driver.error(yystack_[2].location, error); YYERROR; } @@ -1951,11 +1951,11 @@ namespace yy { break; case 35: // op: run_time_string -#line 895 "seclang-parser.yy" +#line 905 "seclang-parser.yy" { 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(*yystack_[0].location.end.filename, &error) == false) { + if (yylhs.value.as < std::unique_ptr > ()->init(yystack_[0].location.getFileName(), &error) == false) { driver.error(yystack_[1].location, error); YYERROR; } @@ -1964,12 +1964,12 @@ namespace yy { break; case 36: // op: "NOT" run_time_string -#line 904 "seclang-parser.yy" +#line 914 "seclang-parser.yy" { 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(*yystack_[1].location.end.filename, &error) == false) { + if (yylhs.value.as < std::unique_ptr > ()->init(yystack_[1].location.getFileName(), &error) == false) { driver.error(yystack_[2].location, error); YYERROR; } @@ -1978,7 +1978,7 @@ namespace yy { break; case 37: // op_before_init: "OPERATOR_UNCONDITIONAL_MATCH" -#line 917 "seclang-parser.yy" +#line 927 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::UnconditionalMatch()); } @@ -1986,7 +1986,7 @@ namespace yy { break; case 38: // op_before_init: "OPERATOR_DETECT_SQLI" -#line 921 "seclang-parser.yy" +#line 931 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectSQLi()); } @@ -1994,7 +1994,7 @@ namespace yy { break; case 39: // op_before_init: "OPERATOR_DETECT_XSS" -#line 925 "seclang-parser.yy" +#line 935 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::DetectXSS()); } @@ -2002,7 +2002,7 @@ namespace yy { break; case 40: // op_before_init: "OPERATOR_VALIDATE_URL_ENCODING" -#line 929 "seclang-parser.yy" +#line 939 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUrlEncoding()); } @@ -2010,7 +2010,7 @@ namespace yy { break; case 41: // op_before_init: "OPERATOR_VALIDATE_UTF8_ENCODING" -#line 933 "seclang-parser.yy" +#line 943 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } @@ -2018,7 +2018,7 @@ namespace yy { break; case 42: // op_before_init: "OPERATOR_INSPECT_FILE" run_time_string -#line 937 "seclang-parser.yy" +#line 947 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2026,7 +2026,7 @@ namespace yy { break; case 43: // op_before_init: "OPERATOR_FUZZY_HASH" run_time_string -#line 941 "seclang-parser.yy" +#line 951 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2034,7 +2034,7 @@ namespace yy { break; case 44: // op_before_init: "OPERATOR_VALIDATE_BYTE_RANGE" run_time_string -#line 945 "seclang-parser.yy" +#line 955 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2042,7 +2042,7 @@ namespace yy { break; case 45: // op_before_init: "OPERATOR_VALIDATE_DTD" run_time_string -#line 949 "seclang-parser.yy" +#line 959 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2050,16 +2050,16 @@ namespace yy { break; case 46: // op_before_init: "OPERATOR_VALIDATE_HASH" run_time_string -#line 953 "seclang-parser.yy" +#line 963 "seclang-parser.yy" { /* $$ = new operators::ValidateHash($1); */ - OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); + OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[1].location); } #line 2059 "seclang-parser.cc" break; case 47: // op_before_init: "OPERATOR_VALIDATE_SCHEMA" run_time_string -#line 958 "seclang-parser.yy" +#line 968 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2067,7 +2067,7 @@ namespace yy { break; case 48: // op_before_init: "OPERATOR_VERIFY_CC" run_time_string -#line 962 "seclang-parser.yy" +#line 972 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2075,7 +2075,7 @@ namespace yy { break; case 49: // op_before_init: "OPERATOR_VERIFY_CPF" run_time_string -#line 966 "seclang-parser.yy" +#line 976 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2083,7 +2083,7 @@ namespace yy { break; case 50: // op_before_init: "OPERATOR_VERIFY_SSN" run_time_string -#line 970 "seclang-parser.yy" +#line 980 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2091,7 +2091,7 @@ namespace yy { break; case 51: // op_before_init: "OPERATOR_VERIFY_SVNR" run_time_string -#line 974 "seclang-parser.yy" +#line 984 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::VerifySVNR(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2099,25 +2099,25 @@ namespace yy { break; case 52: // op_before_init: "OPERATOR_GSB_LOOKUP" run_time_string -#line 978 "seclang-parser.yy" +#line 988 "seclang-parser.yy" { /* $$ = new operators::GsbLookup($1); */ - OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); + OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[1].location); } #line 2108 "seclang-parser.cc" break; case 53: // op_before_init: "OPERATOR_RSUB" run_time_string -#line 983 "seclang-parser.yy" +#line 993 "seclang-parser.yy" { /* $$ = new operators::Rsub($1); */ - OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); + OPERATOR_NOT_SUPPORTED("Rsub", yystack_[1].location); } #line 2117 "seclang-parser.cc" break; case 54: // op_before_init: "OPERATOR_WITHIN" run_time_string -#line 988 "seclang-parser.yy" +#line 998 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2125,7 +2125,7 @@ namespace yy { break; case 55: // op_before_init: "OPERATOR_CONTAINS_WORD" run_time_string -#line 992 "seclang-parser.yy" +#line 1002 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2133,7 +2133,7 @@ namespace yy { break; case 56: // op_before_init: "OPERATOR_CONTAINS" run_time_string -#line 996 "seclang-parser.yy" +#line 1006 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2141,7 +2141,7 @@ namespace yy { break; case 57: // op_before_init: "OPERATOR_ENDS_WITH" run_time_string -#line 1000 "seclang-parser.yy" +#line 1010 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2149,7 +2149,7 @@ namespace yy { break; case 58: // op_before_init: "OPERATOR_EQ" run_time_string -#line 1004 "seclang-parser.yy" +#line 1014 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2157,7 +2157,7 @@ namespace yy { break; case 59: // op_before_init: "OPERATOR_GE" run_time_string -#line 1008 "seclang-parser.yy" +#line 1018 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2165,7 +2165,7 @@ namespace yy { break; case 60: // op_before_init: "OPERATOR_GT" run_time_string -#line 1012 "seclang-parser.yy" +#line 1022 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2173,7 +2173,7 @@ namespace yy { break; case 61: // op_before_init: "OPERATOR_IP_MATCH_FROM_FILE" run_time_string -#line 1016 "seclang-parser.yy" +#line 1026 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2181,7 +2181,7 @@ namespace yy { break; case 62: // op_before_init: "OPERATOR_IP_MATCH" run_time_string -#line 1020 "seclang-parser.yy" +#line 1030 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2189,7 +2189,7 @@ namespace yy { break; case 63: // op_before_init: "OPERATOR_LE" run_time_string -#line 1024 "seclang-parser.yy" +#line 1034 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2197,7 +2197,7 @@ namespace yy { break; case 64: // op_before_init: "OPERATOR_LT" run_time_string -#line 1028 "seclang-parser.yy" +#line 1038 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2205,7 +2205,7 @@ namespace yy { break; case 65: // op_before_init: "OPERATOR_PM_FROM_FILE" run_time_string -#line 1032 "seclang-parser.yy" +#line 1042 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2213,7 +2213,7 @@ namespace yy { break; case 66: // op_before_init: "OPERATOR_PM" run_time_string -#line 1036 "seclang-parser.yy" +#line 1046 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2221,7 +2221,7 @@ namespace yy { break; case 67: // op_before_init: "OPERATOR_RBL" run_time_string -#line 1040 "seclang-parser.yy" +#line 1050 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2229,7 +2229,7 @@ namespace yy { break; case 68: // op_before_init: "OPERATOR_RX" run_time_string -#line 1044 "seclang-parser.yy" +#line 1054 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2237,7 +2237,7 @@ namespace yy { break; case 69: // op_before_init: "OPERATOR_RX_GLOBAL" run_time_string -#line 1048 "seclang-parser.yy" +#line 1058 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::RxGlobal(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2245,7 +2245,7 @@ namespace yy { break; case 70: // op_before_init: "OPERATOR_STR_EQ" run_time_string -#line 1052 "seclang-parser.yy" +#line 1062 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2253,7 +2253,7 @@ namespace yy { break; case 71: // op_before_init: "OPERATOR_STR_MATCH" run_time_string -#line 1056 "seclang-parser.yy" +#line 1066 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2261,7 +2261,7 @@ namespace yy { break; case 72: // op_before_init: "OPERATOR_BEGINS_WITH" run_time_string -#line 1060 "seclang-parser.yy" +#line 1070 "seclang-parser.yy" { OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } @@ -2269,7 +2269,7 @@ namespace yy { break; case 73: // op_before_init: "OPERATOR_GEOLOOKUP" -#line 1064 "seclang-parser.yy" +#line 1074 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) OPERATOR_CONTAINER(yylhs.value.as < std::unique_ptr > (), new operators::GeoLookup()); @@ -2284,7 +2284,7 @@ namespace yy { break; case 75: // expression: "DIRECTIVE" variables op actions -#line 1079 "seclang-parser.yy" +#line 1089 "seclang-parser.yy" { std::vector> *a = new std::vector>(); std::vector > *t = new std::vector >(); @@ -2308,7 +2308,7 @@ namespace yy { /* variables */ v, /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*yystack_[3].location.end.filename)), + /* file name */ yystack_[3].location.getFileName(), /* line number */ yystack_[3].location.end.line )); // TODO: filename should be a shared_ptr. @@ -2320,7 +2320,7 @@ namespace yy { break; case 76: // expression: "DIRECTIVE" variables op -#line 1111 "seclang-parser.yy" +#line 1121 "seclang-parser.yy" { variables::Variables *v = new variables::Variables(); for (auto &i : *yystack_[1].value.as < std::unique_ptr > > > ().get()) { @@ -2332,7 +2332,7 @@ namespace yy { /* variables */ v, /* actions */ NULL, /* transformations */ NULL, - /* file name */ std::unique_ptr(new std::string(*yystack_[2].location.end.filename)), + /* file name */ yystack_[2].location.getFileName(), /* line number */ yystack_[2].location.end.line )); if (driver.addSecRule(std::move(rule)) == false) { @@ -2343,7 +2343,7 @@ namespace yy { break; case 77: // expression: "CONFIG_DIR_SEC_ACTION" actions -#line 1130 "seclang-parser.yy" +#line 1140 "seclang-parser.yy" { std::vector> *a = new std::vector>(); std::vector > *t = new std::vector >(); @@ -2359,7 +2359,7 @@ namespace yy { std::unique_ptr rule(new RuleUnconditional( /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*yystack_[1].location.end.filename)), + /* file name */ yystack_[1].location.getFileName(), /* line number */ yystack_[1].location.end.line )); driver.addSecAction(std::move(rule)); @@ -2368,7 +2368,7 @@ namespace yy { break; case 78: // expression: "DIRECTIVE_SECRULESCRIPT" actions -#line 1151 "seclang-parser.yy" +#line 1161 "seclang-parser.yy" { std::string err; std::vector> *a = new std::vector>(); @@ -2386,7 +2386,7 @@ namespace yy { /* path to script */ yystack_[1].value.as < std::string > (), /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*yystack_[1].location.end.filename)), + /* file name */ yystack_[1].location.getFileName(), /* line number */ yystack_[1].location.end.line )); @@ -2402,7 +2402,7 @@ namespace yy { break; case 79: // expression: "CONFIG_DIR_SEC_DEFAULT_ACTION" actions -#line 1181 "seclang-parser.yy" +#line 1191 "seclang-parser.yy" { bool hasDisruptive = false; std::vector> *actions = new std::vector>(); @@ -2421,12 +2421,12 @@ namespace yy { if (phase != NULL) { definedPhase = phase->getPhase(); secRuleDefinedPhase = phase->getSecRulePhase(); - delete phase; } else if (dynamic_cast(a.get()) && !dynamic_cast(a.get())) { checkedActions.push_back(a); } else { driver.error(yystack_[2].location, "The action '" + *a->getName() + "' is not suitable to be part of the SecDefaultActions"); + delete actions; YYERROR; } } @@ -2435,6 +2435,7 @@ namespace yy { } if (hasDisruptive == false) { driver.error(yystack_[2].location, "SecDefaultAction must specify a disruptive action."); + delete actions; YYERROR; } if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { @@ -2443,6 +2444,7 @@ namespace yy { ss << secRuleDefinedPhase; ss << " was informed already."; driver.error(yystack_[2].location, ss.str()); + delete actions; YYERROR; } for (auto &a : checkedActions) { @@ -2453,80 +2455,80 @@ namespace yy { driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(a); } } - //delete actions; + delete actions; } -#line 2459 "seclang-parser.cc" +#line 2461 "seclang-parser.cc" break; case 80: // expression: "CONFIG_DIR_SEC_MARKER" -#line 1234 "seclang-parser.yy" +#line 1246 "seclang-parser.yy" { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as < std::string > ()), - /* file name */ std::unique_ptr(new std::string(*yystack_[0].location.end.filename)), + /* file name */ yystack_[0].location.getFileName(), /* line number */ yystack_[0].location.end.line ); } -#line 2470 "seclang-parser.cc" +#line 2472 "seclang-parser.cc" break; case 81: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_OFF" -#line 1241 "seclang-parser.yy" +#line 1253 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DisabledRuleEngine; } -#line 2478 "seclang-parser.cc" +#line 2480 "seclang-parser.cc" break; case 82: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_ON" -#line 1245 "seclang-parser.yy" +#line 1257 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::EnabledRuleEngine; } -#line 2486 "seclang-parser.cc" +#line 2488 "seclang-parser.cc" break; case 83: // expression: "CONFIG_DIR_RULE_ENG" "CONFIG_VALUE_DETC" -#line 1249 "seclang-parser.yy" +#line 1261 "seclang-parser.yy" { driver.m_secRuleEngine = modsecurity::RulesSet::DetectionOnlyRuleEngine; } -#line 2494 "seclang-parser.cc" +#line 2496 "seclang-parser.cc" break; case 84: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_ON" -#line 1253 "seclang-parser.yy" +#line 1265 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2502 "seclang-parser.cc" +#line 2504 "seclang-parser.cc" break; case 85: // expression: "CONFIG_DIR_REQ_BODY" "CONFIG_VALUE_OFF" -#line 1257 "seclang-parser.yy" +#line 1269 "seclang-parser.yy" { driver.m_secRequestBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2510 "seclang-parser.cc" +#line 2512 "seclang-parser.cc" break; case 86: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_ON" -#line 1261 "seclang-parser.yy" +#line 1273 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 2518 "seclang-parser.cc" +#line 2520 "seclang-parser.cc" break; case 87: // expression: "CONFIG_DIR_RES_BODY" "CONFIG_VALUE_OFF" -#line 1265 "seclang-parser.yy" +#line 1277 "seclang-parser.yy" { driver.m_secResponseBodyAccess = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 2526 "seclang-parser.cc" +#line 2528 "seclang-parser.cc" break; case 88: // expression: "CONFIG_SEC_ARGUMENT_SEPARATOR" -#line 1269 "seclang-parser.yy" +#line 1281 "seclang-parser.yy" { if (yystack_[0].value.as < std::string > ().length() != 1) { driver.error(yystack_[1].location, "Argument separator should be set to a single character."); @@ -2535,259 +2537,259 @@ namespace yy { driver.m_secArgumentSeparator.m_value = yystack_[0].value.as < std::string > (); driver.m_secArgumentSeparator.m_set = true; } -#line 2539 "seclang-parser.cc" +#line 2541 "seclang-parser.cc" break; case 89: // expression: "CONFIG_COMPONENT_SIG" -#line 1278 "seclang-parser.yy" +#line 1290 "seclang-parser.yy" { driver.m_components.push_back(yystack_[0].value.as < std::string > ()); } -#line 2547 "seclang-parser.cc" +#line 2549 "seclang-parser.cc" break; case 90: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_ON" -#line 1282 "seclang-parser.yy" +#line 1294 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; } -#line 2556 "seclang-parser.cc" +#line 2558 "seclang-parser.cc" break; case 91: // expression: "CONFIG_CONN_ENGINE" "CONFIG_VALUE_OFF" -#line 1287 "seclang-parser.yy" +#line 1299 "seclang-parser.yy" { } -#line 2563 "seclang-parser.cc" +#line 2565 "seclang-parser.cc" break; case 92: // expression: "CONFIG_SEC_WEB_APP_ID" -#line 1290 "seclang-parser.yy" +#line 1302 "seclang-parser.yy" { driver.m_secWebAppId.m_value = yystack_[0].value.as < std::string > (); driver.m_secWebAppId.m_set = true; } -#line 2572 "seclang-parser.cc" +#line 2574 "seclang-parser.cc" break; case 93: // expression: "CONFIG_SEC_SERVER_SIG" -#line 1295 "seclang-parser.yy" +#line 1307 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; } -#line 2581 "seclang-parser.cc" +#line 2583 "seclang-parser.cc" break; case 94: // expression: "CONFIG_SEC_CACHE_TRANSFORMATIONS" -#line 1300 "seclang-parser.yy" +#line 1312 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; } -#line 2590 "seclang-parser.cc" +#line 2592 "seclang-parser.cc" break; case 95: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_ON" -#line 1305 "seclang-parser.yy" +#line 1317 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; } -#line 2599 "seclang-parser.cc" +#line 2601 "seclang-parser.cc" break; case 96: // expression: "CONFIG_SEC_DISABLE_BACKEND_COMPRESS" "CONFIG_VALUE_OFF" -#line 1310 "seclang-parser.yy" +#line 1322 "seclang-parser.yy" { } -#line 2606 "seclang-parser.cc" +#line 2608 "seclang-parser.cc" break; case 97: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_ON" -#line 1313 "seclang-parser.yy" +#line 1325 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; } -#line 2615 "seclang-parser.cc" +#line 2617 "seclang-parser.cc" break; case 98: // expression: "CONFIG_CONTENT_INJECTION" "CONFIG_VALUE_OFF" -#line 1318 "seclang-parser.yy" +#line 1330 "seclang-parser.yy" { } -#line 2622 "seclang-parser.cc" +#line 2624 "seclang-parser.cc" break; case 99: // expression: "CONFIG_SEC_CHROOT_DIR" -#line 1321 "seclang-parser.yy" +#line 1333 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; } -#line 2631 "seclang-parser.cc" +#line 2633 "seclang-parser.cc" break; case 100: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_ON" -#line 1326 "seclang-parser.yy" +#line 1338 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; } -#line 2640 "seclang-parser.cc" +#line 2642 "seclang-parser.cc" break; case 101: // expression: "CONFIG_SEC_HASH_ENGINE" "CONFIG_VALUE_OFF" -#line 1331 "seclang-parser.yy" +#line 1343 "seclang-parser.yy" { } -#line 2647 "seclang-parser.cc" +#line 2649 "seclang-parser.cc" break; case 102: // expression: "CONFIG_SEC_HASH_KEY" -#line 1334 "seclang-parser.yy" +#line 1346 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; } -#line 2656 "seclang-parser.cc" +#line 2658 "seclang-parser.cc" break; case 103: // expression: "CONFIG_SEC_HASH_PARAM" -#line 1339 "seclang-parser.yy" +#line 1351 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; } -#line 2665 "seclang-parser.cc" +#line 2667 "seclang-parser.cc" break; case 104: // expression: "CONFIG_SEC_HASH_METHOD_RX" -#line 1344 "seclang-parser.yy" +#line 1356 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; } -#line 2674 "seclang-parser.cc" +#line 2676 "seclang-parser.cc" break; case 105: // expression: "CONFIG_SEC_HASH_METHOD_PM" -#line 1349 "seclang-parser.yy" +#line 1361 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; } -#line 2683 "seclang-parser.cc" +#line 2685 "seclang-parser.cc" break; case 106: // expression: "CONFIG_DIR_GSB_DB" -#line 1354 "seclang-parser.yy" +#line 1366 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; } -#line 2692 "seclang-parser.cc" +#line 2694 "seclang-parser.cc" break; case 107: // expression: "CONFIG_SEC_GUARDIAN_LOG" -#line 1359 "seclang-parser.yy" +#line 1371 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; } -#line 2701 "seclang-parser.cc" +#line 2703 "seclang-parser.cc" break; case 108: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_ON" -#line 1364 "seclang-parser.yy" +#line 1376 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; } -#line 2710 "seclang-parser.cc" +#line 2712 "seclang-parser.cc" break; case 109: // expression: "CONFIG_SEC_INTERCEPT_ON_ERROR" "CONFIG_VALUE_OFF" -#line 1369 "seclang-parser.yy" +#line 1381 "seclang-parser.yy" { } -#line 2717 "seclang-parser.cc" +#line 2719 "seclang-parser.cc" break; case 110: // expression: "CONFIG_SEC_CONN_R_STATE_LIMIT" -#line 1372 "seclang-parser.yy" +#line 1384 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; } -#line 2726 "seclang-parser.cc" +#line 2728 "seclang-parser.cc" break; case 111: // expression: "CONFIG_SEC_CONN_W_STATE_LIMIT" -#line 1377 "seclang-parser.yy" +#line 1389 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; } -#line 2735 "seclang-parser.cc" +#line 2737 "seclang-parser.cc" break; case 112: // expression: "CONFIG_SEC_SENSOR_ID" -#line 1382 "seclang-parser.yy" +#line 1394 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; } -#line 2744 "seclang-parser.cc" +#line 2746 "seclang-parser.cc" break; case 113: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_ON" -#line 1387 "seclang-parser.yy" +#line 1399 "seclang-parser.yy" { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; } -#line 2753 "seclang-parser.cc" +#line 2755 "seclang-parser.cc" break; case 114: // expression: "CONFIG_SEC_RULE_INHERITANCE" "CONFIG_VALUE_OFF" -#line 1392 "seclang-parser.yy" +#line 1404 "seclang-parser.yy" { } -#line 2760 "seclang-parser.cc" +#line 2762 "seclang-parser.cc" break; case 115: // expression: "CONFIG_SEC_RULE_PERF_TIME" -#line 1395 "seclang-parser.yy" +#line 1407 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; } -#line 2769 "seclang-parser.cc" +#line 2771 "seclang-parser.cc" break; case 116: // expression: "CONFIG_SEC_STREAM_IN_BODY_INSPECTION" -#line 1400 "seclang-parser.yy" +#line 1412 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; } -#line 2778 "seclang-parser.cc" +#line 2780 "seclang-parser.cc" break; case 117: // expression: "CONFIG_SEC_STREAM_OUT_BODY_INSPECTION" -#line 1405 "seclang-parser.yy" +#line 1417 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; } -#line 2787 "seclang-parser.cc" +#line 2789 "seclang-parser.cc" break; case 118: // expression: "CONFIG_SEC_RULE_REMOVE_BY_ID" -#line 1410 "seclang-parser.yy" +#line 1422 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.load(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2800,11 +2802,11 @@ namespace yy { YYERROR; } } -#line 2804 "seclang-parser.cc" +#line 2806 "seclang-parser.cc" break; case 119: // expression: "CONFIG_SEC_RULE_REMOVE_BY_TAG" -#line 1423 "seclang-parser.yy" +#line 1435 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByTag(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2817,11 +2819,11 @@ namespace yy { YYERROR; } } -#line 2821 "seclang-parser.cc" +#line 2823 "seclang-parser.cc" break; case 120: // expression: "CONFIG_SEC_RULE_REMOVE_BY_MSG" -#line 1436 "seclang-parser.yy" +#line 1448 "seclang-parser.yy" { std::string error; if (driver.m_exceptions.loadRemoveRuleByMsg(yystack_[0].value.as < std::string > (), &error) == false) { @@ -2834,11 +2836,11 @@ namespace yy { YYERROR; } } -#line 2838 "seclang-parser.cc" +#line 2840 "seclang-parser.cc" break; case 121: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG" variables_pre_process -#line 1449 "seclang-parser.yy" +#line 1461 "seclang-parser.yy" { 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) { @@ -2851,11 +2853,11 @@ namespace yy { YYERROR; } } -#line 2855 "seclang-parser.cc" +#line 2857 "seclang-parser.cc" break; case 122: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG" variables_pre_process -#line 1462 "seclang-parser.yy" +#line 1474 "seclang-parser.yy" { 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) { @@ -2868,11 +2870,11 @@ namespace yy { YYERROR; } } -#line 2872 "seclang-parser.cc" +#line 2874 "seclang-parser.cc" break; case 123: // expression: "CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID" variables_pre_process -#line 1475 "seclang-parser.yy" +#line 1487 "seclang-parser.yy" { std::string error; std::istringstream iss(yystack_[1].value.as < std::string > ()); @@ -2898,11 +2900,11 @@ namespace yy { YYERROR; } } -#line 2902 "seclang-parser.cc" +#line 2904 "seclang-parser.cc" break; case 124: // expression: "CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID" actions -#line 1501 "seclang-parser.yy" +#line 1513 "seclang-parser.yy" { std::string error; std::istringstream iss(yystack_[1].value.as < std::string > ()); @@ -2929,11 +2931,11 @@ namespace yy { YYERROR; } } -#line 2933 "seclang-parser.cc" +#line 2935 "seclang-parser.cc" break; case 125: // expression: "CONFIG_DIR_DEBUG_LVL" -#line 1529 "seclang-parser.yy" +#line 1541 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { driver.m_debugLog->setDebugLogLevel(atoi(yystack_[0].value.as < std::string > ().c_str())); @@ -2945,11 +2947,11 @@ namespace yy { YYERROR; } } -#line 2949 "seclang-parser.cc" +#line 2951 "seclang-parser.cc" break; case 126: // expression: "CONFIG_DIR_DEBUG_LOG" -#line 1541 "seclang-parser.yy" +#line 1553 "seclang-parser.yy" { if (driver.m_debugLog != NULL) { std::string error; @@ -2968,16 +2970,16 @@ namespace yy { YYERROR; } } -#line 2972 "seclang-parser.cc" +#line 2974 "seclang-parser.cc" break; case 127: // expression: "CONFIG_DIR_GEO_DB" -#line 1561 "seclang-parser.yy" +#line 1573 "seclang-parser.yy" { #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; std::string file = modsecurity::utils::find_resource(yystack_[0].value.as < std::string > (), - *yystack_[0].location.end.filename, &err); + yystack_[0].location.getFileName(), &err); if (file.empty()) { std::stringstream ss; ss << "Failed to load locate the GeoDB file from: " << yystack_[0].value.as < std::string > () << " "; @@ -2999,38 +3001,38 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 3003 "seclang-parser.cc" +#line 3005 "seclang-parser.cc" break; case 128: // expression: "CONFIG_DIR_ARGS_LIMIT" -#line 1588 "seclang-parser.yy" +#line 1600 "seclang-parser.yy" { driver.m_argumentsLimit.m_set = true; driver.m_argumentsLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3012 "seclang-parser.cc" +#line 3014 "seclang-parser.cc" break; case 129: // expression: "CONFIG_DIR_REQ_BODY_LIMIT" -#line 1594 "seclang-parser.yy" +#line 1606 "seclang-parser.yy" { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3021 "seclang-parser.cc" +#line 3023 "seclang-parser.cc" break; case 130: // expression: "CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT" -#line 1599 "seclang-parser.yy" +#line 1611 "seclang-parser.yy" { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3030 "seclang-parser.cc" +#line 3032 "seclang-parser.cc" break; case 131: // expression: "CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT" -#line 1604 "seclang-parser.yy" +#line 1616 "seclang-parser.yy" { std::stringstream ss; ss << "As of ModSecurity version 3.0, SecRequestBodyInMemoryLimit is no longer "; @@ -3039,68 +3041,68 @@ namespace yy { driver.error(yystack_[1].location, ss.str()); YYERROR; } -#line 3043 "seclang-parser.cc" +#line 3045 "seclang-parser.cc" break; case 132: // expression: "CONFIG_DIR_RES_BODY_LIMIT" -#line 1613 "seclang-parser.yy" +#line 1625 "seclang-parser.yy" { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as < std::string > ().c_str()); } -#line 3052 "seclang-parser.cc" +#line 3054 "seclang-parser.cc" break; case 133: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1618 "seclang-parser.yy" +#line 1630 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3060 "seclang-parser.cc" +#line 3062 "seclang-parser.cc" break; case 134: // expression: "CONFIG_DIR_REQ_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1622 "seclang-parser.yy" +#line 1634 "seclang-parser.yy" { driver.m_requestBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3068 "seclang-parser.cc" +#line 3070 "seclang-parser.cc" break; case 135: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_PROCESS_PARTIAL" -#line 1626 "seclang-parser.yy" +#line 1638 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 3076 "seclang-parser.cc" +#line 3078 "seclang-parser.cc" break; case 136: // expression: "CONFIG_DIR_RES_BODY_LIMIT_ACTION" "CONFIG_VALUE_REJECT" -#line 1630 "seclang-parser.yy" +#line 1642 "seclang-parser.yy" { driver.m_responseBodyLimitAction = modsecurity::RulesSet::BodyLimitAction::RejectBodyLimitAction; } -#line 3084 "seclang-parser.cc" +#line 3086 "seclang-parser.cc" break; case 137: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_ABORT" -#line 1634 "seclang-parser.yy" +#line 1646 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } -#line 3092 "seclang-parser.cc" +#line 3094 "seclang-parser.cc" break; case 138: // expression: "CONFIG_SEC_REMOTE_RULES_FAIL_ACTION" "CONFIG_VALUE_WARN" -#line 1638 "seclang-parser.yy" +#line 1650 "seclang-parser.yy" { driver.m_remoteRulesActionOnFailed = RulesSet::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } -#line 3100 "seclang-parser.cc" +#line 3102 "seclang-parser.cc" break; case 141: // expression: "CONGIG_DIR_RESPONSE_BODY_MP" -#line 1652 "seclang-parser.yy" +#line 1664 "seclang-parser.yy" { std::istringstream buf(yystack_[0].value.as < std::string > ()); std::istream_iterator beg(buf), end; @@ -3112,37 +3114,37 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_value.insert(*it); } } -#line 3116 "seclang-parser.cc" +#line 3118 "seclang-parser.cc" break; case 142: // expression: "CONGIG_DIR_RESPONSE_BODY_MP_CLEAR" -#line 1664 "seclang-parser.yy" +#line 1676 "seclang-parser.yy" { driver.m_responseBodyTypeToBeInspected.m_set = true; driver.m_responseBodyTypeToBeInspected.m_clear = true; driver.m_responseBodyTypeToBeInspected.m_value.clear(); } -#line 3126 "seclang-parser.cc" +#line 3128 "seclang-parser.cc" break; case 143: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_OFF" -#line 1670 "seclang-parser.yy" +#line 1682 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::FalseConfigBoolean; } -#line 3134 "seclang-parser.cc" +#line 3136 "seclang-parser.cc" break; case 144: // expression: "CONFIG_XML_EXTERNAL_ENTITY" "CONFIG_VALUE_ON" -#line 1674 "seclang-parser.yy" +#line 1686 "seclang-parser.yy" { driver.m_secXMLExternalEntity = modsecurity::RulesSetProperties::TrueConfigBoolean; } -#line 3142 "seclang-parser.cc" +#line 3144 "seclang-parser.cc" break; case 145: // expression: "CONGIG_DIR_SEC_TMP_DIR" -#line 1678 "seclang-parser.yy" +#line 1690 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default installations with modsecurity.conf-recommended std::stringstream ss; @@ -3153,31 +3155,31 @@ namespace yy { YYERROR; */ } -#line 3157 "seclang-parser.cc" +#line 3159 "seclang-parser.cc" break; case 148: // expression: "CONGIG_DIR_SEC_COOKIE_FORMAT" -#line 1699 "seclang-parser.yy" +#line 1711 "seclang-parser.yy" { if (atoi(yystack_[0].value.as < std::string > ().c_str()) == 1) { driver.error(yystack_[1].location, "SecCookieFormat 1 is not yet supported."); YYERROR; } } -#line 3168 "seclang-parser.cc" +#line 3170 "seclang-parser.cc" break; case 149: // expression: "CONFIG_SEC_COOKIEV0_SEPARATOR" -#line 1706 "seclang-parser.yy" +#line 1718 "seclang-parser.yy" { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; } -#line 3177 "seclang-parser.cc" +#line 3179 "seclang-parser.cc" break; case 151: // expression: "CONFIG_DIR_UNICODE_MAP_FILE" -#line 1716 "seclang-parser.yy" +#line 1728 "seclang-parser.yy" { std::string error; std::vector param; @@ -3214,7 +3216,7 @@ namespace yy { param.pop_back(); } - file = modsecurity::utils::find_resource(f, *yystack_[0].location.end.filename, &err); + file = modsecurity::utils::find_resource(f, yystack_[0].location.getFileName(), &err); if (file.empty()) { std::stringstream ss; ss << "Failed to locate the unicode map file from: " << f << " "; @@ -3231,31 +3233,31 @@ namespace yy { } } -#line 3235 "seclang-parser.cc" +#line 3237 "seclang-parser.cc" break; case 152: // expression: "CONFIG_SEC_COLLECTION_TIMEOUT" -#line 1770 "seclang-parser.yy" +#line 1782 "seclang-parser.yy" { /* Parser error disabled to avoid breaking default CRS installations with crs-setup.conf-recommended driver.error(@0, "SecCollectionTimeout is not yet supported."); YYERROR; */ } -#line 3246 "seclang-parser.cc" +#line 3248 "seclang-parser.cc" break; case 153: // expression: "CONFIG_SEC_HTTP_BLKEY" -#line 1777 "seclang-parser.yy" +#line 1789 "seclang-parser.yy" { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as < std::string > (); } -#line 3255 "seclang-parser.cc" +#line 3257 "seclang-parser.cc" break; case 154: // variables: variables_pre_process -#line 1785 "seclang-parser.yy" +#line 1797 "seclang-parser.yy" { std::unique_ptr > > originalList = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); std::unique_ptr>> newList(new std::vector>()); @@ -3289,2370 +3291,2365 @@ namespace yy { } yylhs.value.as < std::unique_ptr > > > () = std::move(newNewList); } -#line 3293 "seclang-parser.cc" +#line 3295 "seclang-parser.cc" break; case 155: // variables_pre_process: variables_may_be_quoted -#line 1822 "seclang-parser.yy" +#line 1834 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[0].value.as < std::unique_ptr > > > ()); } -#line 3301 "seclang-parser.cc" +#line 3303 "seclang-parser.cc" break; case 156: // variables_pre_process: "QUOTATION_MARK" variables_may_be_quoted "QUOTATION_MARK" -#line 1826 "seclang-parser.yy" +#line 1838 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > > > () = std::move(yystack_[1].value.as < std::unique_ptr > > > ()); } -#line 3309 "seclang-parser.cc" +#line 3311 "seclang-parser.cc" break; case 157: // variables_may_be_quoted: variables_may_be_quoted PIPE var -#line 1833 "seclang-parser.yy" +#line 1845 "seclang-parser.yy" { 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 3318 "seclang-parser.cc" +#line 3320 "seclang-parser.cc" break; case 158: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_EXCLUSION var -#line 1838 "seclang-parser.yy" +#line 1850 "seclang-parser.yy" { 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 3328 "seclang-parser.cc" +#line 3330 "seclang-parser.cc" break; case 159: // variables_may_be_quoted: variables_may_be_quoted PIPE VAR_COUNT var -#line 1844 "seclang-parser.yy" +#line 1856 "seclang-parser.yy" { 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 3338 "seclang-parser.cc" +#line 3340 "seclang-parser.cc" break; case 160: // variables_may_be_quoted: var -#line 1850 "seclang-parser.yy" +#line 1862 "seclang-parser.yy" { 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 3348 "seclang-parser.cc" +#line 3350 "seclang-parser.cc" break; case 161: // variables_may_be_quoted: VAR_EXCLUSION var -#line 1856 "seclang-parser.yy" +#line 1868 "seclang-parser.yy" { 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 3359 "seclang-parser.cc" +#line 3361 "seclang-parser.cc" break; case 162: // variables_may_be_quoted: VAR_COUNT var -#line 1863 "seclang-parser.yy" +#line 1875 "seclang-parser.yy" { 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 3370 "seclang-parser.cc" +#line 3372 "seclang-parser.cc" break; case 163: // var: VARIABLE_ARGS "Dictionary element" -#line 1873 "seclang-parser.yy" +#line 1885 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3378 "seclang-parser.cc" +#line 3380 "seclang-parser.cc" break; case 164: // var: VARIABLE_ARGS "Dictionary element, selected by regexp" -#line 1877 "seclang-parser.yy" +#line 1889 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3386 "seclang-parser.cc" +#line 3388 "seclang-parser.cc" break; case 165: // var: VARIABLE_ARGS -#line 1881 "seclang-parser.yy" +#line 1893 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Args_NoDictElement()); } -#line 3394 "seclang-parser.cc" +#line 3396 "seclang-parser.cc" break; case 166: // var: VARIABLE_ARGS_POST "Dictionary element" -#line 1885 "seclang-parser.yy" +#line 1897 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3402 "seclang-parser.cc" +#line 3404 "seclang-parser.cc" break; case 167: // var: VARIABLE_ARGS_POST "Dictionary element, selected by regexp" -#line 1889 "seclang-parser.yy" +#line 1901 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3410 "seclang-parser.cc" +#line 3412 "seclang-parser.cc" break; case 168: // var: VARIABLE_ARGS_POST -#line 1893 "seclang-parser.yy" +#line 1905 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPost_NoDictElement()); } -#line 3418 "seclang-parser.cc" +#line 3420 "seclang-parser.cc" break; case 169: // var: VARIABLE_ARGS_GET "Dictionary element" -#line 1897 "seclang-parser.yy" +#line 1909 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3426 "seclang-parser.cc" +#line 3428 "seclang-parser.cc" break; case 170: // var: VARIABLE_ARGS_GET "Dictionary element, selected by regexp" -#line 1901 "seclang-parser.yy" +#line 1913 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3434 "seclang-parser.cc" +#line 3436 "seclang-parser.cc" break; case 171: // var: VARIABLE_ARGS_GET -#line 1905 "seclang-parser.yy" +#line 1917 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGet_NoDictElement()); } -#line 3442 "seclang-parser.cc" +#line 3444 "seclang-parser.cc" break; case 172: // var: VARIABLE_FILES_SIZES "Dictionary element" -#line 1909 "seclang-parser.yy" +#line 1921 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3450 "seclang-parser.cc" +#line 3452 "seclang-parser.cc" break; case 173: // var: VARIABLE_FILES_SIZES "Dictionary element, selected by regexp" -#line 1913 "seclang-parser.yy" +#line 1925 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3458 "seclang-parser.cc" +#line 3460 "seclang-parser.cc" break; case 174: // var: VARIABLE_FILES_SIZES -#line 1917 "seclang-parser.yy" +#line 1929 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesSizes_NoDictElement()); } -#line 3466 "seclang-parser.cc" +#line 3468 "seclang-parser.cc" break; case 175: // var: VARIABLE_FILES_NAMES "Dictionary element" -#line 1921 "seclang-parser.yy" +#line 1933 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3474 "seclang-parser.cc" +#line 3476 "seclang-parser.cc" break; case 176: // var: VARIABLE_FILES_NAMES "Dictionary element, selected by regexp" -#line 1925 "seclang-parser.yy" +#line 1937 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3482 "seclang-parser.cc" +#line 3484 "seclang-parser.cc" break; case 177: // var: VARIABLE_FILES_NAMES -#line 1929 "seclang-parser.yy" +#line 1941 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesNames_NoDictElement()); } -#line 3490 "seclang-parser.cc" +#line 3492 "seclang-parser.cc" break; case 178: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element" -#line 1933 "seclang-parser.yy" +#line 1945 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3498 "seclang-parser.cc" +#line 3500 "seclang-parser.cc" break; case 179: // var: VARIABLE_FILES_TMP_CONTENT "Dictionary element, selected by regexp" -#line 1937 "seclang-parser.yy" +#line 1949 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3506 "seclang-parser.cc" +#line 3508 "seclang-parser.cc" break; case 180: // var: VARIABLE_FILES_TMP_CONTENT -#line 1941 "seclang-parser.yy" +#line 1953 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpContent_NoDictElement()); } -#line 3514 "seclang-parser.cc" +#line 3516 "seclang-parser.cc" break; case 181: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element" -#line 1945 "seclang-parser.yy" +#line 1957 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3522 "seclang-parser.cc" +#line 3524 "seclang-parser.cc" break; case 182: // var: VARIABLE_MULTIPART_FILENAME "Dictionary element, selected by regexp" -#line 1949 "seclang-parser.yy" +#line 1961 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3530 "seclang-parser.cc" +#line 3532 "seclang-parser.cc" break; case 183: // var: VARIABLE_MULTIPART_FILENAME -#line 1953 "seclang-parser.yy" +#line 1965 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartFileName_NoDictElement()); } -#line 3538 "seclang-parser.cc" +#line 3540 "seclang-parser.cc" break; case 184: // var: VARIABLE_MULTIPART_NAME "Dictionary element" -#line 1957 "seclang-parser.yy" +#line 1969 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3546 "seclang-parser.cc" +#line 3548 "seclang-parser.cc" break; case 185: // var: VARIABLE_MULTIPART_NAME "Dictionary element, selected by regexp" -#line 1961 "seclang-parser.yy" +#line 1973 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3554 "seclang-parser.cc" +#line 3556 "seclang-parser.cc" break; case 186: // var: VARIABLE_MULTIPART_NAME -#line 1965 "seclang-parser.yy" +#line 1977 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultiPartName_NoDictElement()); } -#line 3562 "seclang-parser.cc" +#line 3564 "seclang-parser.cc" break; case 187: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element" -#line 1969 "seclang-parser.yy" +#line 1981 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3570 "seclang-parser.cc" +#line 3572 "seclang-parser.cc" break; case 188: // var: VARIABLE_MATCHED_VARS_NAMES "Dictionary element, selected by regexp" -#line 1973 "seclang-parser.yy" +#line 1985 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3578 "seclang-parser.cc" +#line 3580 "seclang-parser.cc" break; case 189: // var: VARIABLE_MATCHED_VARS_NAMES -#line 1977 "seclang-parser.yy" +#line 1989 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarsNames_NoDictElement()); } -#line 3586 "seclang-parser.cc" +#line 3588 "seclang-parser.cc" break; case 190: // var: VARIABLE_MATCHED_VARS "Dictionary element" -#line 1981 "seclang-parser.yy" +#line 1993 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3594 "seclang-parser.cc" +#line 3596 "seclang-parser.cc" break; case 191: // var: VARIABLE_MATCHED_VARS "Dictionary element, selected by regexp" -#line 1985 "seclang-parser.yy" +#line 1997 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3602 "seclang-parser.cc" +#line 3604 "seclang-parser.cc" break; case 192: // var: VARIABLE_MATCHED_VARS -#line 1989 "seclang-parser.yy" +#line 2001 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVars_NoDictElement()); } -#line 3610 "seclang-parser.cc" +#line 3612 "seclang-parser.cc" break; case 193: // var: VARIABLE_FILES "Dictionary element" -#line 1993 "seclang-parser.yy" +#line 2005 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3618 "seclang-parser.cc" +#line 3620 "seclang-parser.cc" break; case 194: // var: VARIABLE_FILES "Dictionary element, selected by regexp" -#line 1997 "seclang-parser.yy" +#line 2009 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3626 "seclang-parser.cc" +#line 3628 "seclang-parser.cc" break; case 195: // var: VARIABLE_FILES -#line 2001 "seclang-parser.yy" +#line 2013 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Files_NoDictElement()); } -#line 3634 "seclang-parser.cc" +#line 3636 "seclang-parser.cc" break; case 196: // var: VARIABLE_REQUEST_COOKIES "Dictionary element" -#line 2005 "seclang-parser.yy" +#line 2017 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3642 "seclang-parser.cc" +#line 3644 "seclang-parser.cc" break; case 197: // var: VARIABLE_REQUEST_COOKIES "Dictionary element, selected by regexp" -#line 2009 "seclang-parser.yy" +#line 2021 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3650 "seclang-parser.cc" +#line 3652 "seclang-parser.cc" break; case 198: // var: VARIABLE_REQUEST_COOKIES -#line 2013 "seclang-parser.yy" +#line 2025 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookies_NoDictElement()); } -#line 3658 "seclang-parser.cc" +#line 3660 "seclang-parser.cc" break; case 199: // var: VARIABLE_REQUEST_HEADERS "Dictionary element" -#line 2017 "seclang-parser.yy" +#line 2029 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3666 "seclang-parser.cc" +#line 3668 "seclang-parser.cc" break; case 200: // var: VARIABLE_REQUEST_HEADERS "Dictionary element, selected by regexp" -#line 2021 "seclang-parser.yy" +#line 2033 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3674 "seclang-parser.cc" +#line 3676 "seclang-parser.cc" break; case 201: // var: VARIABLE_REQUEST_HEADERS -#line 2025 "seclang-parser.yy" +#line 2037 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeaders_NoDictElement()); } -#line 3682 "seclang-parser.cc" +#line 3684 "seclang-parser.cc" break; case 202: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element" -#line 2029 "seclang-parser.yy" +#line 2041 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3690 "seclang-parser.cc" +#line 3692 "seclang-parser.cc" break; case 203: // var: VARIABLE_RESPONSE_HEADERS "Dictionary element, selected by regexp" -#line 2033 "seclang-parser.yy" +#line 2045 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3698 "seclang-parser.cc" +#line 3700 "seclang-parser.cc" break; case 204: // var: VARIABLE_RESPONSE_HEADERS -#line 2037 "seclang-parser.yy" +#line 2049 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeaders_NoDictElement()); } -#line 3706 "seclang-parser.cc" +#line 3708 "seclang-parser.cc" break; case 205: // var: VARIABLE_GEO "Dictionary element" -#line 2041 "seclang-parser.yy" +#line 2053 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3714 "seclang-parser.cc" +#line 3716 "seclang-parser.cc" break; case 206: // var: VARIABLE_GEO "Dictionary element, selected by regexp" -#line 2045 "seclang-parser.yy" +#line 2057 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3722 "seclang-parser.cc" +#line 3724 "seclang-parser.cc" break; case 207: // var: VARIABLE_GEO -#line 2049 "seclang-parser.yy" +#line 2061 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Geo_NoDictElement()); } -#line 3730 "seclang-parser.cc" +#line 3732 "seclang-parser.cc" break; case 208: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element" -#line 2053 "seclang-parser.yy" +#line 2065 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3738 "seclang-parser.cc" +#line 3740 "seclang-parser.cc" break; case 209: // var: VARIABLE_REQUEST_COOKIES_NAMES "Dictionary element, selected by regexp" -#line 2057 "seclang-parser.yy" +#line 2069 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3746 "seclang-parser.cc" +#line 3748 "seclang-parser.cc" break; case 210: // var: VARIABLE_REQUEST_COOKIES_NAMES -#line 2061 "seclang-parser.yy" +#line 2073 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestCookiesNames_NoDictElement()); } -#line 3754 "seclang-parser.cc" +#line 3756 "seclang-parser.cc" break; case 211: // var: VARIABLE_RULE "Dictionary element" -#line 2065 "seclang-parser.yy" +#line 2077 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3762 "seclang-parser.cc" +#line 3764 "seclang-parser.cc" break; case 212: // var: VARIABLE_RULE "Dictionary element, selected by regexp" -#line 2069 "seclang-parser.yy" +#line 2081 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3770 "seclang-parser.cc" +#line 3772 "seclang-parser.cc" break; case 213: // var: VARIABLE_RULE -#line 2073 "seclang-parser.yy" +#line 2085 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Rule_NoDictElement()); } -#line 3778 "seclang-parser.cc" +#line 3780 "seclang-parser.cc" break; case 214: // var: "RUN_TIME_VAR_ENV" "Dictionary element" -#line 2077 "seclang-parser.yy" +#line 2089 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3786 "seclang-parser.cc" +#line 3788 "seclang-parser.cc" break; case 215: // var: "RUN_TIME_VAR_ENV" "Dictionary element, selected by regexp" -#line 2081 "seclang-parser.yy" +#line 2093 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV:" + yystack_[0].value.as < std::string > ())); } -#line 3794 "seclang-parser.cc" +#line 3796 "seclang-parser.cc" break; case 216: // var: "RUN_TIME_VAR_ENV" -#line 2085 "seclang-parser.yy" +#line 2097 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Env("ENV")); } -#line 3802 "seclang-parser.cc" +#line 3804 "seclang-parser.cc" break; case 217: // var: "RUN_TIME_VAR_XML" "Dictionary element" -#line 2089 "seclang-parser.yy" +#line 2101 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_WithNSPath(yystack_[0].value.as < std::string > ())); } -#line 3810 "seclang-parser.cc" +#line 3812 "seclang-parser.cc" break; case 218: // var: "RUN_TIME_VAR_XML" "Dictionary element, selected by regexp" -#line 2093 "seclang-parser.yy" +#line 2105 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_WithNSPath(yystack_[0].value.as < std::string > ())); } -#line 3818 "seclang-parser.cc" +#line 3820 "seclang-parser.cc" break; case 219: // var: "RUN_TIME_VAR_XML" -#line 2097 "seclang-parser.yy" +#line 2109 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::XML_WithoutNSPath()); } -#line 3826 "seclang-parser.cc" +#line 3828 "seclang-parser.cc" break; case 220: // var: "FILES_TMPNAMES" "Dictionary element" -#line 2101 "seclang-parser.yy" +#line 2113 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3834 "seclang-parser.cc" +#line 3836 "seclang-parser.cc" break; case 221: // var: "FILES_TMPNAMES" "Dictionary element, selected by regexp" -#line 2105 "seclang-parser.yy" +#line 2117 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3842 "seclang-parser.cc" +#line 3844 "seclang-parser.cc" break; case 222: // var: "FILES_TMPNAMES" -#line 2109 "seclang-parser.yy" +#line 2121 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesTmpNames_NoDictElement()); } -#line 3850 "seclang-parser.cc" +#line 3852 "seclang-parser.cc" break; case 223: // var: "RESOURCE" run_time_string -#line 2113 "seclang-parser.yy" +#line 2125 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3858 "seclang-parser.cc" +#line 3860 "seclang-parser.cc" break; case 224: // var: "RESOURCE" "Dictionary element" -#line 2117 "seclang-parser.yy" +#line 2129 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3866 "seclang-parser.cc" +#line 3868 "seclang-parser.cc" break; case 225: // var: "RESOURCE" "Dictionary element, selected by regexp" -#line 2121 "seclang-parser.yy" +#line 2133 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3874 "seclang-parser.cc" +#line 3876 "seclang-parser.cc" break; case 226: // var: "RESOURCE" -#line 2125 "seclang-parser.yy" +#line 2137 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Resource_NoDictElement()); } -#line 3882 "seclang-parser.cc" +#line 3884 "seclang-parser.cc" break; case 227: // var: "VARIABLE_IP" run_time_string -#line 2129 "seclang-parser.yy" +#line 2141 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3890 "seclang-parser.cc" +#line 3892 "seclang-parser.cc" break; case 228: // var: "VARIABLE_IP" "Dictionary element" -#line 2133 "seclang-parser.yy" +#line 2145 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3898 "seclang-parser.cc" +#line 3900 "seclang-parser.cc" break; case 229: // var: "VARIABLE_IP" "Dictionary element, selected by regexp" -#line 2137 "seclang-parser.yy" +#line 2149 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3906 "seclang-parser.cc" +#line 3908 "seclang-parser.cc" break; case 230: // var: "VARIABLE_IP" -#line 2141 "seclang-parser.yy" +#line 2153 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Ip_NoDictElement()); } -#line 3914 "seclang-parser.cc" +#line 3916 "seclang-parser.cc" break; case 231: // var: "VARIABLE_GLOBAL" run_time_string -#line 2145 "seclang-parser.yy" +#line 2157 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3922 "seclang-parser.cc" +#line 3924 "seclang-parser.cc" break; case 232: // var: "VARIABLE_GLOBAL" "Dictionary element" -#line 2149 "seclang-parser.yy" +#line 2161 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3930 "seclang-parser.cc" +#line 3932 "seclang-parser.cc" break; case 233: // var: "VARIABLE_GLOBAL" "Dictionary element, selected by regexp" -#line 2153 "seclang-parser.yy" +#line 2165 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3938 "seclang-parser.cc" +#line 3940 "seclang-parser.cc" break; case 234: // var: "VARIABLE_GLOBAL" -#line 2157 "seclang-parser.yy" +#line 2169 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Global_NoDictElement()); } -#line 3946 "seclang-parser.cc" +#line 3948 "seclang-parser.cc" break; case 235: // var: "VARIABLE_USER" run_time_string -#line 2161 "seclang-parser.yy" +#line 2173 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3954 "seclang-parser.cc" +#line 3956 "seclang-parser.cc" break; case 236: // var: "VARIABLE_USER" "Dictionary element" -#line 2165 "seclang-parser.yy" +#line 2177 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3962 "seclang-parser.cc" +#line 3964 "seclang-parser.cc" break; case 237: // var: "VARIABLE_USER" "Dictionary element, selected by regexp" -#line 2169 "seclang-parser.yy" +#line 2181 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 3970 "seclang-parser.cc" +#line 3972 "seclang-parser.cc" break; case 238: // var: "VARIABLE_USER" -#line 2173 "seclang-parser.yy" +#line 2185 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::User_NoDictElement()); } -#line 3978 "seclang-parser.cc" +#line 3980 "seclang-parser.cc" break; case 239: // var: "VARIABLE_TX" run_time_string -#line 2177 "seclang-parser.yy" +#line 2189 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 3986 "seclang-parser.cc" +#line 3988 "seclang-parser.cc" break; case 240: // var: "VARIABLE_TX" "Dictionary element" -#line 2181 "seclang-parser.yy" +#line 2193 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElement(yystack_[0].value.as < std::string > ())); } -#line 3994 "seclang-parser.cc" +#line 3996 "seclang-parser.cc" break; case 241: // var: "VARIABLE_TX" "Dictionary element, selected by regexp" -#line 2185 "seclang-parser.yy" +#line 2197 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4002 "seclang-parser.cc" +#line 4004 "seclang-parser.cc" break; case 242: // var: "VARIABLE_TX" -#line 2189 "seclang-parser.yy" +#line 2201 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Tx_NoDictElement()); } -#line 4010 "seclang-parser.cc" +#line 4012 "seclang-parser.cc" break; case 243: // var: "VARIABLE_SESSION" run_time_string -#line 2193 "seclang-parser.yy" +#line 2205 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DynamicElement(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 4018 "seclang-parser.cc" +#line 4020 "seclang-parser.cc" break; case 244: // var: "VARIABLE_SESSION" "Dictionary element" -#line 2197 "seclang-parser.yy" +#line 2209 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4026 "seclang-parser.cc" +#line 4028 "seclang-parser.cc" break; case 245: // var: "VARIABLE_SESSION" "Dictionary element, selected by regexp" -#line 2201 "seclang-parser.yy" +#line 2213 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4034 "seclang-parser.cc" +#line 4036 "seclang-parser.cc" break; case 246: // var: "VARIABLE_SESSION" -#line 2205 "seclang-parser.yy" +#line 2217 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Session_NoDictElement()); } -#line 4042 "seclang-parser.cc" +#line 4044 "seclang-parser.cc" break; case 247: // var: "Variable ARGS_NAMES" "Dictionary element" -#line 2209 "seclang-parser.yy" +#line 2221 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4050 "seclang-parser.cc" +#line 4052 "seclang-parser.cc" break; case 248: // var: "Variable ARGS_NAMES" "Dictionary element, selected by regexp" -#line 2213 "seclang-parser.yy" +#line 2225 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4058 "seclang-parser.cc" +#line 4060 "seclang-parser.cc" break; case 249: // var: "Variable ARGS_NAMES" -#line 2217 "seclang-parser.yy" +#line 2229 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsNames_NoDictElement()); } -#line 4066 "seclang-parser.cc" +#line 4068 "seclang-parser.cc" break; case 250: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element" -#line 2221 "seclang-parser.yy" +#line 2233 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4074 "seclang-parser.cc" +#line 4076 "seclang-parser.cc" break; case 251: // var: VARIABLE_ARGS_GET_NAMES "Dictionary element, selected by regexp" -#line 2225 "seclang-parser.yy" +#line 2237 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4082 "seclang-parser.cc" +#line 4084 "seclang-parser.cc" break; case 252: // var: VARIABLE_ARGS_GET_NAMES -#line 2229 "seclang-parser.yy" +#line 2241 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsGetNames_NoDictElement()); } -#line 4090 "seclang-parser.cc" +#line 4092 "seclang-parser.cc" break; case 253: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element" -#line 2234 "seclang-parser.yy" +#line 2246 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4098 "seclang-parser.cc" +#line 4100 "seclang-parser.cc" break; case 254: // var: VARIABLE_ARGS_POST_NAMES "Dictionary element, selected by regexp" -#line 2238 "seclang-parser.yy" +#line 2250 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4106 "seclang-parser.cc" +#line 4108 "seclang-parser.cc" break; case 255: // var: VARIABLE_ARGS_POST_NAMES -#line 2242 "seclang-parser.yy" +#line 2254 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsPostNames_NoDictElement()); } -#line 4114 "seclang-parser.cc" +#line 4116 "seclang-parser.cc" break; case 256: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element" -#line 2247 "seclang-parser.yy" +#line 2259 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4122 "seclang-parser.cc" +#line 4124 "seclang-parser.cc" break; case 257: // var: VARIABLE_REQUEST_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2251 "seclang-parser.yy" +#line 2263 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4130 "seclang-parser.cc" +#line 4132 "seclang-parser.cc" break; case 258: // var: VARIABLE_REQUEST_HEADERS_NAMES -#line 2255 "seclang-parser.yy" +#line 2267 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestHeadersNames_NoDictElement()); } -#line 4138 "seclang-parser.cc" +#line 4140 "seclang-parser.cc" break; case 259: // var: VARIABLE_RESPONSE_CONTENT_TYPE -#line 2260 "seclang-parser.yy" +#line 2272 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentType()); } -#line 4146 "seclang-parser.cc" +#line 4148 "seclang-parser.cc" break; case 260: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element" -#line 2265 "seclang-parser.yy" +#line 2277 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElement(yystack_[0].value.as < std::string > ())); } -#line 4154 "seclang-parser.cc" +#line 4156 "seclang-parser.cc" break; case 261: // var: VARIABLE_RESPONSE_HEADERS_NAMES "Dictionary element, selected by regexp" -#line 2269 "seclang-parser.yy" +#line 2281 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as < std::string > ())); } -#line 4162 "seclang-parser.cc" +#line 4164 "seclang-parser.cc" break; case 262: // var: VARIABLE_RESPONSE_HEADERS_NAMES -#line 2273 "seclang-parser.yy" +#line 2285 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseHeadersNames_NoDictElement()); } -#line 4170 "seclang-parser.cc" +#line 4172 "seclang-parser.cc" break; case 263: // var: VARIABLE_ARGS_COMBINED_SIZE -#line 2277 "seclang-parser.yy" +#line 2289 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ArgsCombinedSize()); } -#line 4178 "seclang-parser.cc" +#line 4180 "seclang-parser.cc" break; case 264: // var: "AUTH_TYPE" -#line 2281 "seclang-parser.yy" +#line 2293 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::AuthType()); } -#line 4186 "seclang-parser.cc" +#line 4188 "seclang-parser.cc" break; case 265: // var: "FILES_COMBINED_SIZE" -#line 2285 "seclang-parser.yy" +#line 2297 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FilesCombinedSize()); } -#line 4194 "seclang-parser.cc" +#line 4196 "seclang-parser.cc" break; case 266: // var: "FULL_REQUEST" -#line 2289 "seclang-parser.yy" +#line 2301 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequest()); } -#line 4202 "seclang-parser.cc" +#line 4204 "seclang-parser.cc" break; case 267: // var: "FULL_REQUEST_LENGTH" -#line 2293 "seclang-parser.yy" +#line 2305 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::FullRequestLength()); } -#line 4210 "seclang-parser.cc" +#line 4212 "seclang-parser.cc" break; case 268: // var: "INBOUND_DATA_ERROR" -#line 2297 "seclang-parser.yy" +#line 2309 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::InboundDataError()); } -#line 4218 "seclang-parser.cc" +#line 4220 "seclang-parser.cc" break; case 269: // var: "MATCHED_VAR" -#line 2301 "seclang-parser.yy" +#line 2313 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVar()); } -#line 4226 "seclang-parser.cc" +#line 4228 "seclang-parser.cc" break; case 270: // var: "MATCHED_VAR_NAME" -#line 2305 "seclang-parser.yy" +#line 2317 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MatchedVarName()); } -#line 4234 "seclang-parser.cc" +#line 4236 "seclang-parser.cc" break; case 271: // var: VARIABLE_MULTIPART_BOUNDARY_QUOTED -#line 2309 "seclang-parser.yy" +#line 2321 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryQuoted()); } -#line 4242 "seclang-parser.cc" +#line 4244 "seclang-parser.cc" break; case 272: // var: VARIABLE_MULTIPART_BOUNDARY_WHITESPACE -#line 2313 "seclang-parser.yy" +#line 2325 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartBoundaryWhiteSpace()); } -#line 4250 "seclang-parser.cc" +#line 4252 "seclang-parser.cc" break; case 273: // var: "MULTIPART_CRLF_LF_LINES" -#line 2317 "seclang-parser.yy" +#line 2329 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartCrlfLFLines()); } -#line 4258 "seclang-parser.cc" +#line 4260 "seclang-parser.cc" break; case 274: // var: "MULTIPART_DATA_AFTER" -#line 2321 "seclang-parser.yy" +#line 2333 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateAfter()); } -#line 4266 "seclang-parser.cc" +#line 4268 "seclang-parser.cc" break; case 275: // var: VARIABLE_MULTIPART_DATA_BEFORE -#line 2325 "seclang-parser.yy" +#line 2337 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartDateBefore()); } -#line 4274 "seclang-parser.cc" +#line 4276 "seclang-parser.cc" break; case 276: // var: "MULTIPART_FILE_LIMIT_EXCEEDED" -#line 2329 "seclang-parser.yy" +#line 2341 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartFileLimitExceeded()); } -#line 4282 "seclang-parser.cc" +#line 4284 "seclang-parser.cc" break; case 277: // var: "MULTIPART_HEADER_FOLDING" -#line 2333 "seclang-parser.yy" +#line 2345 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartHeaderFolding()); } -#line 4290 "seclang-parser.cc" +#line 4292 "seclang-parser.cc" break; case 278: // var: "MULTIPART_INVALID_HEADER_FOLDING" -#line 2337 "seclang-parser.yy" +#line 2349 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidHeaderFolding()); } -#line 4298 "seclang-parser.cc" +#line 4300 "seclang-parser.cc" break; case 279: // var: VARIABLE_MULTIPART_INVALID_PART -#line 2341 "seclang-parser.yy" +#line 2353 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidPart()); } -#line 4306 "seclang-parser.cc" +#line 4308 "seclang-parser.cc" break; case 280: // var: "MULTIPART_INVALID_QUOTING" -#line 2345 "seclang-parser.yy" +#line 2357 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartInvalidQuoting()); } -#line 4314 "seclang-parser.cc" +#line 4316 "seclang-parser.cc" break; case 281: // var: VARIABLE_MULTIPART_LF_LINE -#line 2349 "seclang-parser.yy" +#line 2361 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartLFLine()); } -#line 4322 "seclang-parser.cc" +#line 4324 "seclang-parser.cc" break; case 282: // var: VARIABLE_MULTIPART_MISSING_SEMICOLON -#line 2353 "seclang-parser.yy" +#line 2365 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4330 "seclang-parser.cc" +#line 4332 "seclang-parser.cc" break; case 283: // var: VARIABLE_MULTIPART_SEMICOLON_MISSING -#line 2357 "seclang-parser.yy" +#line 2369 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartMissingSemicolon()); } -#line 4338 "seclang-parser.cc" +#line 4340 "seclang-parser.cc" break; case 284: // var: "MULTIPART_STRICT_ERROR" -#line 2361 "seclang-parser.yy" +#line 2373 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartStrictError()); } -#line 4346 "seclang-parser.cc" +#line 4348 "seclang-parser.cc" break; case 285: // var: "MULTIPART_UNMATCHED_BOUNDARY" -#line 2365 "seclang-parser.yy" +#line 2377 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::MultipartUnmatchedBoundary()); } -#line 4354 "seclang-parser.cc" +#line 4356 "seclang-parser.cc" break; case 286: // var: "OUTBOUND_DATA_ERROR" -#line 2369 "seclang-parser.yy" +#line 2381 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::OutboundDataError()); } -#line 4362 "seclang-parser.cc" +#line 4364 "seclang-parser.cc" break; case 287: // var: "PATH_INFO" -#line 2373 "seclang-parser.yy" +#line 2385 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::PathInfo()); } -#line 4370 "seclang-parser.cc" +#line 4372 "seclang-parser.cc" break; case 288: // var: "QUERY_STRING" -#line 2377 "seclang-parser.yy" +#line 2389 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::QueryString()); } -#line 4378 "seclang-parser.cc" +#line 4380 "seclang-parser.cc" break; case 289: // var: "REMOTE_ADDR" -#line 2381 "seclang-parser.yy" +#line 2393 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteAddr()); } -#line 4386 "seclang-parser.cc" +#line 4388 "seclang-parser.cc" break; case 290: // var: "REMOTE_HOST" -#line 2385 "seclang-parser.yy" +#line 2397 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemoteHost()); } -#line 4394 "seclang-parser.cc" +#line 4396 "seclang-parser.cc" break; case 291: // var: "REMOTE_PORT" -#line 2389 "seclang-parser.yy" +#line 2401 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RemotePort()); } -#line 4402 "seclang-parser.cc" +#line 4404 "seclang-parser.cc" break; case 292: // var: "REQBODY_ERROR" -#line 2393 "seclang-parser.yy" +#line 2405 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyError()); } -#line 4410 "seclang-parser.cc" +#line 4412 "seclang-parser.cc" break; case 293: // var: "REQBODY_ERROR_MSG" -#line 2397 "seclang-parser.yy" +#line 2409 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyErrorMsg()); } -#line 4418 "seclang-parser.cc" +#line 4420 "seclang-parser.cc" break; case 294: // var: "REQBODY_PROCESSOR" -#line 2401 "seclang-parser.yy" +#line 2413 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessor()); } -#line 4426 "seclang-parser.cc" +#line 4428 "seclang-parser.cc" break; case 295: // var: "REQBODY_PROCESSOR_ERROR" -#line 2405 "seclang-parser.yy" +#line 2417 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorError()); } -#line 4434 "seclang-parser.cc" +#line 4436 "seclang-parser.cc" break; case 296: // var: "REQBODY_PROCESSOR_ERROR_MSG" -#line 2409 "seclang-parser.yy" +#line 2421 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ReqbodyProcessorErrorMsg()); } -#line 4442 "seclang-parser.cc" +#line 4444 "seclang-parser.cc" break; case 297: // var: "REQUEST_BASENAME" -#line 2413 "seclang-parser.yy" +#line 2425 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBasename()); } -#line 4450 "seclang-parser.cc" +#line 4452 "seclang-parser.cc" break; case 298: // var: "REQUEST_BODY" -#line 2417 "seclang-parser.yy" +#line 2429 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBody()); } -#line 4458 "seclang-parser.cc" +#line 4460 "seclang-parser.cc" break; case 299: // var: "REQUEST_BODY_LENGTH" -#line 2421 "seclang-parser.yy" +#line 2433 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestBodyLength()); } -#line 4466 "seclang-parser.cc" +#line 4468 "seclang-parser.cc" break; case 300: // var: "REQUEST_FILENAME" -#line 2425 "seclang-parser.yy" +#line 2437 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestFilename()); } -#line 4474 "seclang-parser.cc" +#line 4476 "seclang-parser.cc" break; case 301: // var: "REQUEST_LINE" -#line 2429 "seclang-parser.yy" +#line 2441 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestLine()); } -#line 4482 "seclang-parser.cc" +#line 4484 "seclang-parser.cc" break; case 302: // var: "REQUEST_METHOD" -#line 2433 "seclang-parser.yy" +#line 2445 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestMethod()); } -#line 4490 "seclang-parser.cc" +#line 4492 "seclang-parser.cc" break; case 303: // var: "REQUEST_PROTOCOL" -#line 2437 "seclang-parser.yy" +#line 2449 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestProtocol()); } -#line 4498 "seclang-parser.cc" +#line 4500 "seclang-parser.cc" break; case 304: // var: "REQUEST_URI" -#line 2441 "seclang-parser.yy" +#line 2453 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURI()); } -#line 4506 "seclang-parser.cc" +#line 4508 "seclang-parser.cc" break; case 305: // var: "REQUEST_URI_RAW" -#line 2445 "seclang-parser.yy" +#line 2457 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::RequestURIRaw()); } -#line 4514 "seclang-parser.cc" +#line 4516 "seclang-parser.cc" break; case 306: // var: "RESPONSE_BODY" -#line 2449 "seclang-parser.yy" +#line 2461 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseBody()); } -#line 4522 "seclang-parser.cc" +#line 4524 "seclang-parser.cc" break; case 307: // var: "RESPONSE_CONTENT_LENGTH" -#line 2453 "seclang-parser.yy" +#line 2465 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseContentLength()); } -#line 4530 "seclang-parser.cc" +#line 4532 "seclang-parser.cc" break; case 308: // var: "RESPONSE_PROTOCOL" -#line 2457 "seclang-parser.yy" +#line 2469 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseProtocol()); } -#line 4538 "seclang-parser.cc" +#line 4540 "seclang-parser.cc" break; case 309: // var: "RESPONSE_STATUS" -#line 2461 "seclang-parser.yy" +#line 2473 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ResponseStatus()); } -#line 4546 "seclang-parser.cc" +#line 4548 "seclang-parser.cc" break; case 310: // var: "SERVER_ADDR" -#line 2465 "seclang-parser.yy" +#line 2477 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerAddr()); } -#line 4554 "seclang-parser.cc" +#line 4556 "seclang-parser.cc" break; case 311: // var: "SERVER_NAME" -#line 2469 "seclang-parser.yy" +#line 2481 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerName()); } -#line 4562 "seclang-parser.cc" +#line 4564 "seclang-parser.cc" break; case 312: // var: "SERVER_PORT" -#line 2473 "seclang-parser.yy" +#line 2485 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::ServerPort()); } -#line 4570 "seclang-parser.cc" +#line 4572 "seclang-parser.cc" break; case 313: // var: "SESSIONID" -#line 2477 "seclang-parser.yy" +#line 2489 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::SessionID()); } -#line 4578 "seclang-parser.cc" +#line 4580 "seclang-parser.cc" break; case 314: // var: "UNIQUE_ID" -#line 2481 "seclang-parser.yy" +#line 2493 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UniqueID()); } -#line 4586 "seclang-parser.cc" +#line 4588 "seclang-parser.cc" break; case 315: // var: "URLENCODED_ERROR" -#line 2485 "seclang-parser.yy" +#line 2497 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UrlEncodedError()); } -#line 4594 "seclang-parser.cc" +#line 4596 "seclang-parser.cc" break; case 316: // var: "USERID" -#line 2489 "seclang-parser.yy" +#line 2501 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::UserID()); } -#line 4602 "seclang-parser.cc" +#line 4604 "seclang-parser.cc" break; case 317: // var: "VARIABLE_STATUS" -#line 2493 "seclang-parser.yy" +#line 2505 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4610 "seclang-parser.cc" +#line 4612 "seclang-parser.cc" break; case 318: // var: "VARIABLE_STATUS_LINE" -#line 2497 "seclang-parser.yy" +#line 2509 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::Status()); } -#line 4618 "seclang-parser.cc" +#line 4620 "seclang-parser.cc" break; case 319: // var: "WEBAPPID" -#line 2501 "seclang-parser.yy" +#line 2513 "seclang-parser.yy" { VARIABLE_CONTAINER(yylhs.value.as < std::unique_ptr > (), new variables::WebAppId()); } -#line 4626 "seclang-parser.cc" +#line 4628 "seclang-parser.cc" break; case 320: // var: "RUN_TIME_VAR_DUR" -#line 2505 "seclang-parser.yy" +#line 2517 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Duration(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4637 "seclang-parser.cc" +#line 4639 "seclang-parser.cc" break; case 321: // var: "RUN_TIME_VAR_BLD" -#line 2513 "seclang-parser.yy" +#line 2525 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new ModsecBuild(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4648 "seclang-parser.cc" +#line 4650 "seclang-parser.cc" break; case 322: // var: "RUN_TIME_VAR_HSV" -#line 2520 "seclang-parser.yy" +#line 2532 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new HighestSeverity(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4659 "seclang-parser.cc" +#line 4661 "seclang-parser.cc" break; case 323: // var: "RUN_TIME_VAR_REMOTE_USER" -#line 2527 "seclang-parser.yy" +#line 2539 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new RemoteUser(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4670 "seclang-parser.cc" +#line 4672 "seclang-parser.cc" break; case 324: // var: "RUN_TIME_VAR_TIME" -#line 2534 "seclang-parser.yy" +#line 2546 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new Time(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4681 "seclang-parser.cc" +#line 4683 "seclang-parser.cc" break; case 325: // var: "RUN_TIME_VAR_TIME_DAY" -#line 2541 "seclang-parser.yy" +#line 2553 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4692 "seclang-parser.cc" +#line 4694 "seclang-parser.cc" break; case 326: // var: "RUN_TIME_VAR_TIME_EPOCH" -#line 2548 "seclang-parser.yy" +#line 2560 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeEpoch(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4703 "seclang-parser.cc" +#line 4705 "seclang-parser.cc" break; case 327: // var: "RUN_TIME_VAR_TIME_HOUR" -#line 2555 "seclang-parser.yy" +#line 2567 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeHour(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4714 "seclang-parser.cc" +#line 4716 "seclang-parser.cc" break; case 328: // var: "RUN_TIME_VAR_TIME_MIN" -#line 2562 "seclang-parser.yy" +#line 2574 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMin(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4725 "seclang-parser.cc" +#line 4727 "seclang-parser.cc" break; case 329: // var: "RUN_TIME_VAR_TIME_MON" -#line 2569 "seclang-parser.yy" +#line 2581 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMon(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4736 "seclang-parser.cc" +#line 4738 "seclang-parser.cc" break; case 330: // var: "RUN_TIME_VAR_TIME_SEC" -#line 2576 "seclang-parser.yy" +#line 2588 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeSec(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4747 "seclang-parser.cc" +#line 4749 "seclang-parser.cc" break; case 331: // var: "RUN_TIME_VAR_TIME_WDAY" -#line 2583 "seclang-parser.yy" +#line 2595 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeWDay(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4758 "seclang-parser.cc" +#line 4760 "seclang-parser.cc" break; case 332: // var: "RUN_TIME_VAR_TIME_YEAR" -#line 2590 "seclang-parser.yy" +#line 2602 "seclang-parser.yy" { std::string name(yystack_[0].value.as < std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeYear(name)); yylhs.value.as < std::unique_ptr > () = std::move(c); } -#line 4769 "seclang-parser.cc" +#line 4771 "seclang-parser.cc" break; case 333: // act: "Accuracy" -#line 2600 "seclang-parser.yy" +#line 2612 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as < std::string > ())); } -#line 4777 "seclang-parser.cc" +#line 4779 "seclang-parser.cc" break; case 334: // act: "Allow" -#line 2604 "seclang-parser.yy" +#line 2616 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as < std::string > ())); } -#line 4785 "seclang-parser.cc" +#line 4787 "seclang-parser.cc" break; case 335: // act: "Append" -#line 2608 "seclang-parser.yy" +#line 2620 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("Append", yystack_[1].location); + ACTION_NOT_SUPPORTED("Append", yystack_[0].location); } -#line 4793 "seclang-parser.cc" +#line 4795 "seclang-parser.cc" break; case 336: // act: "AuditLog" -#line 2612 "seclang-parser.yy" +#line 2624 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::AuditLog()); } -#line 4801 "seclang-parser.cc" +#line 4803 "seclang-parser.cc" break; case 337: // act: "Block" -#line 2616 "seclang-parser.yy" +#line 2628 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Block()); } -#line 4809 "seclang-parser.cc" +#line 4811 "seclang-parser.cc" break; case 338: // act: "Capture" -#line 2620 "seclang-parser.yy" +#line 2632 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Capture()); } -#line 4817 "seclang-parser.cc" +#line 4819 "seclang-parser.cc" break; case 339: // act: "Chain" -#line 2624 "seclang-parser.yy" +#line 2636 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Chain()); } -#line 4825 "seclang-parser.cc" +#line 4827 "seclang-parser.cc" break; case 340: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_ON" -#line 2628 "seclang-parser.yy" +#line 2640 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("CtlAuditEngine", yystack_[2].location); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", yystack_[1].location); } -#line 4834 "seclang-parser.cc" +#line 4835 "seclang-parser.cc" break; case 341: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_OFF" -#line 2633 "seclang-parser.yy" +#line 2644 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("CtlAuditEngine", yystack_[2].location); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", yystack_[1].location); } #line 4843 "seclang-parser.cc" break; case 342: // act: "ACTION_CTL_AUDIT_ENGINE" "CONFIG_VALUE_RELEVANT_ONLY" -#line 2638 "seclang-parser.yy" +#line 2648 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("CtlAuditEngine", yystack_[2].location); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", yystack_[1].location); } -#line 4852 "seclang-parser.cc" +#line 4851 "seclang-parser.cc" break; case 343: // act: "ACTION_CTL_AUDIT_LOG_PARTS" -#line 2643 "seclang-parser.yy" +#line 2652 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as < std::string > ())); } -#line 4860 "seclang-parser.cc" +#line 4859 "seclang-parser.cc" break; case 344: // act: "ACTION_CTL_BDY_JSON" -#line 2647 "seclang-parser.yy" +#line 2656 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as < std::string > ())); } -#line 4868 "seclang-parser.cc" +#line 4867 "seclang-parser.cc" break; case 345: // act: "ACTION_CTL_BDY_XML" -#line 2651 "seclang-parser.yy" +#line 2660 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as < std::string > ())); } -#line 4876 "seclang-parser.cc" +#line 4875 "seclang-parser.cc" break; case 346: // act: "ACTION_CTL_BDY_URLENCODED" -#line 2655 "seclang-parser.yy" +#line 2664 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as < std::string > ())); } -#line 4884 "seclang-parser.cc" +#line 4883 "seclang-parser.cc" break; case 347: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_ON" -#line 2659 "seclang-parser.yy" +#line 2668 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("CtlForceRequestBodyVariable", yystack_[2].location); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:forceRequestBodyVariable", yystack_[1].location); } -#line 4893 "seclang-parser.cc" +#line 4891 "seclang-parser.cc" break; case 348: // act: "ACTION_CTL_FORCE_REQ_BODY_VAR" "CONFIG_VALUE_OFF" -#line 2664 "seclang-parser.yy" +#line 2672 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("CtlForceRequestBodyVariable", yystack_[2].location); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:forceRequestBodyVariable", yystack_[1].location); } -#line 4902 "seclang-parser.cc" +#line 4899 "seclang-parser.cc" break; case 349: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_ON" -#line 2669 "seclang-parser.yy" +#line 2676 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "true")); } -#line 4910 "seclang-parser.cc" +#line 4907 "seclang-parser.cc" break; case 350: // act: "ACTION_CTL_REQUEST_BODY_ACCESS" "CONFIG_VALUE_OFF" -#line 2673 "seclang-parser.yy" +#line 2680 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as < std::string > () + "false")); } -#line 4918 "seclang-parser.cc" +#line 4915 "seclang-parser.cc" break; case 351: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_ON" -#line 2677 "seclang-parser.yy" +#line 2684 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); } -#line 4926 "seclang-parser.cc" +#line 4923 "seclang-parser.cc" break; case 352: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_OFF" -#line 2681 "seclang-parser.yy" +#line 2688 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } -#line 4934 "seclang-parser.cc" +#line 4931 "seclang-parser.cc" break; case 353: // act: "ACTION_CTL_RULE_ENGINE" "CONFIG_VALUE_DETC" -#line 2685 "seclang-parser.yy" +#line 2692 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } -#line 4942 "seclang-parser.cc" +#line 4939 "seclang-parser.cc" break; case 354: // act: "ACTION_CTL_RULE_REMOVE_BY_ID" -#line 2689 "seclang-parser.yy" +#line 2696 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as < std::string > ())); } -#line 4950 "seclang-parser.cc" +#line 4947 "seclang-parser.cc" break; case 355: // act: "ACTION_CTL_RULE_REMOVE_BY_TAG" -#line 2693 "seclang-parser.yy" +#line 2700 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as < std::string > ())); } -#line 4958 "seclang-parser.cc" +#line 4955 "seclang-parser.cc" break; case 356: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_ID" -#line 2697 "seclang-parser.yy" +#line 2704 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as < std::string > ())); } -#line 4966 "seclang-parser.cc" +#line 4963 "seclang-parser.cc" break; case 357: // act: "ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG" -#line 2701 "seclang-parser.yy" +#line 2708 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as < std::string > ())); } -#line 4974 "seclang-parser.cc" +#line 4971 "seclang-parser.cc" break; case 358: // act: "Deny" -#line 2705 "seclang-parser.yy" +#line 2712 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Deny()); } -#line 4982 "seclang-parser.cc" +#line 4979 "seclang-parser.cc" break; case 359: // act: "DeprecateVar" -#line 2709 "seclang-parser.yy" +#line 2716 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); + ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[0].location); } -#line 4990 "seclang-parser.cc" +#line 4987 "seclang-parser.cc" break; case 360: // act: "Drop" -#line 2713 "seclang-parser.yy" +#line 2720 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Drop()); } -#line 4998 "seclang-parser.cc" +#line 4995 "seclang-parser.cc" break; case 361: // act: "Exec" -#line 2717 "seclang-parser.yy" +#line 2724 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Exec(yystack_[0].value.as < std::string > ())); } -#line 5006 "seclang-parser.cc" +#line 5003 "seclang-parser.cc" break; case 362: // act: "ExpireVar" -#line 2721 "seclang-parser.yy" +#line 2728 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::ExpireVar(yystack_[0].value.as < std::string > ())); } -#line 5014 "seclang-parser.cc" +#line 5011 "seclang-parser.cc" break; case 363: // act: "Id" -#line 2725 "seclang-parser.yy" +#line 2732 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as < std::string > ())); } -#line 5022 "seclang-parser.cc" +#line 5019 "seclang-parser.cc" break; case 364: // act: "InitCol" run_time_string -#line 2729 "seclang-parser.yy" +#line 2736 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as < std::string > (), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5030 "seclang-parser.cc" +#line 5027 "seclang-parser.cc" break; case 365: // act: "LogData" run_time_string -#line 2733 "seclang-parser.yy" +#line 2740 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5038 "seclang-parser.cc" +#line 5035 "seclang-parser.cc" break; case 366: // act: "Log" -#line 2737 "seclang-parser.yy" +#line 2744 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Log()); } -#line 5046 "seclang-parser.cc" +#line 5043 "seclang-parser.cc" break; case 367: // act: "Maturity" -#line 2741 "seclang-parser.yy" +#line 2748 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as < std::string > ())); } -#line 5054 "seclang-parser.cc" +#line 5051 "seclang-parser.cc" break; case 368: // act: "Msg" run_time_string -#line 2745 "seclang-parser.yy" +#line 2752 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5062 "seclang-parser.cc" +#line 5059 "seclang-parser.cc" break; case 369: // act: "MultiMatch" -#line 2749 "seclang-parser.yy" +#line 2756 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::MultiMatch()); } -#line 5070 "seclang-parser.cc" +#line 5067 "seclang-parser.cc" break; case 370: // act: "NoAuditLog" -#line 2753 "seclang-parser.yy" +#line 2760 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoAuditLog()); } -#line 5078 "seclang-parser.cc" +#line 5075 "seclang-parser.cc" break; case 371: // act: "NoLog" -#line 2757 "seclang-parser.yy" +#line 2764 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::NoLog()); } -#line 5086 "seclang-parser.cc" +#line 5083 "seclang-parser.cc" break; case 372: // act: "Pass" -#line 2761 "seclang-parser.yy" +#line 2768 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Pass()); } -#line 5094 "seclang-parser.cc" +#line 5091 "seclang-parser.cc" break; case 373: // act: "Pause" -#line 2765 "seclang-parser.yy" +#line 2772 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); + ACTION_NOT_SUPPORTED("Pause", yystack_[0].location); } -#line 5102 "seclang-parser.cc" +#line 5099 "seclang-parser.cc" break; case 374: // act: "Phase" -#line 2769 "seclang-parser.yy" +#line 2776 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Phase(yystack_[0].value.as < std::string > ())); } -#line 5110 "seclang-parser.cc" +#line 5107 "seclang-parser.cc" break; case 375: // act: "Prepend" -#line 2773 "seclang-parser.yy" +#line 2780 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); + ACTION_NOT_SUPPORTED("Prepend", yystack_[0].location); } -#line 5118 "seclang-parser.cc" +#line 5115 "seclang-parser.cc" break; case 376: // act: "Proxy" -#line 2777 "seclang-parser.yy" +#line 2784 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); + ACTION_NOT_SUPPORTED("Proxy", yystack_[0].location); } -#line 5126 "seclang-parser.cc" +#line 5123 "seclang-parser.cc" break; case 377: // act: "Redirect" run_time_string -#line 2781 "seclang-parser.yy" +#line 2788 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5134 "seclang-parser.cc" +#line 5131 "seclang-parser.cc" break; case 378: // act: "Rev" -#line 2785 "seclang-parser.yy" +#line 2792 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Rev(yystack_[0].value.as < std::string > ())); } -#line 5142 "seclang-parser.cc" +#line 5139 "seclang-parser.cc" break; case 379: // act: "SanitiseArg" -#line 2789 "seclang-parser.yy" +#line 2796 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[0].location); } -#line 5150 "seclang-parser.cc" +#line 5147 "seclang-parser.cc" break; case 380: // act: "SanitiseMatched" -#line 2793 "seclang-parser.yy" +#line 2800 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[0].location); } -#line 5158 "seclang-parser.cc" +#line 5155 "seclang-parser.cc" break; case 381: // act: "SanitiseMatchedBytes" -#line 2797 "seclang-parser.yy" +#line 2804 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[0].location); } -#line 5166 "seclang-parser.cc" +#line 5163 "seclang-parser.cc" break; case 382: // act: "SanitiseRequestHeader" -#line 2801 "seclang-parser.yy" +#line 2808 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[0].location); } -#line 5174 "seclang-parser.cc" +#line 5171 "seclang-parser.cc" break; case 383: // act: "SanitiseResponseHeader" -#line 2805 "seclang-parser.yy" +#line 2812 "seclang-parser.yy" { - ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[0].location); } -#line 5182 "seclang-parser.cc" +#line 5179 "seclang-parser.cc" break; case 384: // act: "SetEnv" run_time_string -#line 2809 "seclang-parser.yy" +#line 2816 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetENV(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5190 "seclang-parser.cc" +#line 5187 "seclang-parser.cc" break; case 385: // act: "SetRsc" run_time_string -#line 2813 "seclang-parser.yy" +#line 2820 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5198 "seclang-parser.cc" +#line 5195 "seclang-parser.cc" break; case 386: // act: "SetSid" run_time_string -#line 2817 "seclang-parser.yy" +#line 2824 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5206 "seclang-parser.cc" +#line 5203 "seclang-parser.cc" break; case 387: // act: "SetUID" run_time_string -#line 2821 "seclang-parser.yy" +#line 2828 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5214 "seclang-parser.cc" +#line 5211 "seclang-parser.cc" break; case 388: // act: "SetVar" setvar_action -#line 2825 "seclang-parser.yy" +#line 2832 "seclang-parser.yy" { yylhs.value.as < std::unique_ptr > () = std::move(yystack_[0].value.as < std::unique_ptr > ()); } -#line 5222 "seclang-parser.cc" +#line 5219 "seclang-parser.cc" break; case 389: // act: "Severity" -#line 2829 "seclang-parser.yy" +#line 2836 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Severity(yystack_[0].value.as < std::string > ())); } -#line 5230 "seclang-parser.cc" +#line 5227 "seclang-parser.cc" break; case 390: // act: "Skip" -#line 2833 "seclang-parser.yy" +#line 2840 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Skip(yystack_[0].value.as < std::string > ())); } -#line 5238 "seclang-parser.cc" +#line 5235 "seclang-parser.cc" break; case 391: // act: "SkipAfter" -#line 2837 "seclang-parser.yy" +#line 2844 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as < std::string > ())); } -#line 5246 "seclang-parser.cc" +#line 5243 "seclang-parser.cc" break; case 392: // act: "Status" -#line 2841 "seclang-parser.yy" +#line 2848 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as < std::string > ())); } -#line 5254 "seclang-parser.cc" +#line 5251 "seclang-parser.cc" break; case 393: // act: "Tag" run_time_string -#line 2845 "seclang-parser.yy" +#line 2852 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5262 "seclang-parser.cc" +#line 5259 "seclang-parser.cc" break; case 394: // act: "Ver" -#line 2849 "seclang-parser.yy" +#line 2856 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::Ver(yystack_[0].value.as < std::string > ())); } -#line 5270 "seclang-parser.cc" +#line 5267 "seclang-parser.cc" break; case 395: // act: "xmlns" -#line 2853 "seclang-parser.yy" +#line 2860 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as < std::string > ())); } -#line 5278 "seclang-parser.cc" +#line 5275 "seclang-parser.cc" break; case 396: // act: "ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT" -#line 2857 "seclang-parser.yy" +#line 2864 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityZero7bit()); } -#line 5286 "seclang-parser.cc" +#line 5283 "seclang-parser.cc" break; case 397: // act: "ACTION_TRANSFORMATION_PARITY_ODD_7_BIT" -#line 2861 "seclang-parser.yy" +#line 2868 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityOdd7bit()); } -#line 5294 "seclang-parser.cc" +#line 5291 "seclang-parser.cc" break; case 398: // act: "ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT" -#line 2865 "seclang-parser.yy" +#line 2872 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ParityEven7bit()); } -#line 5302 "seclang-parser.cc" +#line 5299 "seclang-parser.cc" break; case 399: // act: "ACTION_TRANSFORMATION_SQL_HEX_DECODE" -#line 2869 "seclang-parser.yy" +#line 2876 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::SqlHexDecode()); } -#line 5310 "seclang-parser.cc" +#line 5307 "seclang-parser.cc" break; case 400: // act: "ACTION_TRANSFORMATION_BASE_64_ENCODE" -#line 2873 "seclang-parser.yy" +#line 2880 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Encode()); } -#line 5318 "seclang-parser.cc" +#line 5315 "seclang-parser.cc" break; case 401: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE" -#line 2877 "seclang-parser.yy" +#line 2884 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64Decode()); } -#line 5326 "seclang-parser.cc" +#line 5323 "seclang-parser.cc" break; case 402: // act: "ACTION_TRANSFORMATION_BASE_64_DECODE_EXT" -#line 2881 "seclang-parser.yy" +#line 2888 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Base64DecodeExt()); } -#line 5334 "seclang-parser.cc" +#line 5331 "seclang-parser.cc" break; case 403: // act: "ACTION_TRANSFORMATION_CMD_LINE" -#line 2885 "seclang-parser.yy" +#line 2892 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CmdLine()); } -#line 5342 "seclang-parser.cc" +#line 5339 "seclang-parser.cc" break; case 404: // act: "ACTION_TRANSFORMATION_SHA1" -#line 2889 "seclang-parser.yy" +#line 2896 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Sha1()); } -#line 5350 "seclang-parser.cc" +#line 5347 "seclang-parser.cc" break; case 405: // act: "ACTION_TRANSFORMATION_MD5" -#line 2893 "seclang-parser.yy" +#line 2900 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Md5()); } -#line 5358 "seclang-parser.cc" +#line 5355 "seclang-parser.cc" break; case 406: // act: "ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE" -#line 2897 "seclang-parser.yy" +#line 2904 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::EscapeSeqDecode()); } -#line 5366 "seclang-parser.cc" +#line 5363 "seclang-parser.cc" break; case 407: // act: "ACTION_TRANSFORMATION_HEX_ENCODE" -#line 2901 "seclang-parser.yy" +#line 2908 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexEncode()); } -#line 5374 "seclang-parser.cc" +#line 5371 "seclang-parser.cc" break; case 408: // act: "ACTION_TRANSFORMATION_HEX_DECODE" -#line 2905 "seclang-parser.yy" +#line 2912 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HexDecode()); } -#line 5382 "seclang-parser.cc" +#line 5379 "seclang-parser.cc" break; case 409: // act: "ACTION_TRANSFORMATION_LOWERCASE" -#line 2909 "seclang-parser.yy" +#line 2916 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::LowerCase()); } -#line 5390 "seclang-parser.cc" +#line 5387 "seclang-parser.cc" break; case 410: // act: "ACTION_TRANSFORMATION_PHP_ARGS_NAMES" -#line 2913 "seclang-parser.yy" +#line 2920 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::PhpArgsNames()); } -#line 5398 "seclang-parser.cc" +#line 5395 "seclang-parser.cc" break; case 411: // act: "ACTION_TRANSFORMATION_UPPERCASE" -#line 2917 "seclang-parser.yy" +#line 2924 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UpperCase()); } -#line 5406 "seclang-parser.cc" +#line 5403 "seclang-parser.cc" break; case 412: // act: "ACTION_TRANSFORMATION_URL_DECODE_UNI" -#line 2921 "seclang-parser.yy" +#line 2928 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecodeUni()); } -#line 5414 "seclang-parser.cc" +#line 5411 "seclang-parser.cc" break; case 413: // act: "ACTION_TRANSFORMATION_URL_DECODE" -#line 2925 "seclang-parser.yy" +#line 2932 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlDecode()); } -#line 5422 "seclang-parser.cc" +#line 5419 "seclang-parser.cc" break; case 414: // act: "ACTION_TRANSFORMATION_URL_ENCODE" -#line 2929 "seclang-parser.yy" +#line 2936 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::UrlEncode()); } -#line 5430 "seclang-parser.cc" +#line 5427 "seclang-parser.cc" break; case 415: // act: "ACTION_TRANSFORMATION_NONE" -#line 2933 "seclang-parser.yy" +#line 2940 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::None()); } -#line 5438 "seclang-parser.cc" +#line 5435 "seclang-parser.cc" break; case 416: // act: "ACTION_TRANSFORMATION_COMPRESS_WHITESPACE" -#line 2937 "seclang-parser.yy" +#line 2944 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CompressWhitespace()); } -#line 5446 "seclang-parser.cc" +#line 5443 "seclang-parser.cc" break; case 417: // act: "ACTION_TRANSFORMATION_REMOVE_WHITESPACE" -#line 2941 "seclang-parser.yy" +#line 2948 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveWhitespace()); } -#line 5454 "seclang-parser.cc" +#line 5451 "seclang-parser.cc" break; case 418: // act: "ACTION_TRANSFORMATION_REPLACE_NULLS" -#line 2945 "seclang-parser.yy" +#line 2952 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceNulls()); } -#line 5462 "seclang-parser.cc" +#line 5459 "seclang-parser.cc" break; case 419: // act: "ACTION_TRANSFORMATION_REMOVE_NULLS" -#line 2949 "seclang-parser.yy" +#line 2956 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveNulls()); } -#line 5470 "seclang-parser.cc" +#line 5467 "seclang-parser.cc" break; case 420: // act: "ACTION_TRANSFORMATION_HTML_ENTITY_DECODE" -#line 2953 "seclang-parser.yy" +#line 2960 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::HtmlEntityDecode()); } -#line 5478 "seclang-parser.cc" +#line 5475 "seclang-parser.cc" break; case 421: // act: "ACTION_TRANSFORMATION_JS_DECODE" -#line 2957 "seclang-parser.yy" +#line 2964 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::JsDecode()); } -#line 5486 "seclang-parser.cc" +#line 5483 "seclang-parser.cc" break; case 422: // act: "ACTION_TRANSFORMATION_CSS_DECODE" -#line 2961 "seclang-parser.yy" +#line 2968 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::CssDecode()); } -#line 5494 "seclang-parser.cc" +#line 5491 "seclang-parser.cc" break; case 423: // act: "ACTION_TRANSFORMATION_TRIM" -#line 2965 "seclang-parser.yy" +#line 2972 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Trim()); } -#line 5502 "seclang-parser.cc" +#line 5499 "seclang-parser.cc" break; case 424: // act: "ACTION_TRANSFORMATION_TRIM_LEFT" -#line 2969 "seclang-parser.yy" +#line 2976 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimLeft()); } -#line 5510 "seclang-parser.cc" +#line 5507 "seclang-parser.cc" break; case 425: // act: "ACTION_TRANSFORMATION_TRIM_RIGHT" -#line 2973 "seclang-parser.yy" +#line 2980 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::TrimRight()); } -#line 5518 "seclang-parser.cc" +#line 5515 "seclang-parser.cc" break; case 426: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH_WIN" -#line 2977 "seclang-parser.yy" +#line 2984 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePathWin()); } -#line 5526 "seclang-parser.cc" +#line 5523 "seclang-parser.cc" break; case 427: // act: "ACTION_TRANSFORMATION_NORMALISE_PATH" -#line 2981 "seclang-parser.yy" +#line 2988 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::NormalisePath()); } -#line 5534 "seclang-parser.cc" +#line 5531 "seclang-parser.cc" break; case 428: // act: "ACTION_TRANSFORMATION_LENGTH" -#line 2985 "seclang-parser.yy" +#line 2992 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Length()); } -#line 5542 "seclang-parser.cc" +#line 5539 "seclang-parser.cc" break; case 429: // act: "ACTION_TRANSFORMATION_UTF8_TO_UNICODE" -#line 2989 "seclang-parser.yy" +#line 2996 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::Utf8ToUnicode()); } -#line 5550 "seclang-parser.cc" +#line 5547 "seclang-parser.cc" break; case 430: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR" -#line 2993 "seclang-parser.yy" +#line 3000 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveCommentsChar()); } -#line 5558 "seclang-parser.cc" +#line 5555 "seclang-parser.cc" break; case 431: // act: "ACTION_TRANSFORMATION_REMOVE_COMMENTS" -#line 2997 "seclang-parser.yy" +#line 3004 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::RemoveComments()); } -#line 5566 "seclang-parser.cc" +#line 5563 "seclang-parser.cc" break; case 432: // act: "ACTION_TRANSFORMATION_REPLACE_COMMENTS" -#line 3001 "seclang-parser.yy" +#line 3008 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::transformations::ReplaceComments()); } -#line 5574 "seclang-parser.cc" +#line 5571 "seclang-parser.cc" break; case 433: // setvar_action: "NOT" var -#line 3008 "seclang-parser.yy" +#line 3015 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5582 "seclang-parser.cc" +#line 5579 "seclang-parser.cc" break; case 434: // setvar_action: var -#line 3012 "seclang-parser.yy" +#line 3019 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5590 "seclang-parser.cc" +#line 5587 "seclang-parser.cc" break; case 435: // setvar_action: var SETVAR_OPERATION_EQUALS run_time_string -#line 3016 "seclang-parser.yy" +#line 3023 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5598 "seclang-parser.cc" +#line 5595 "seclang-parser.cc" break; case 436: // setvar_action: var SETVAR_OPERATION_EQUALS_PLUS run_time_string -#line 3020 "seclang-parser.yy" +#line 3027 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5606 "seclang-parser.cc" +#line 5603 "seclang-parser.cc" break; case 437: // setvar_action: var SETVAR_OPERATION_EQUALS_MINUS run_time_string -#line 3024 "seclang-parser.yy" +#line 3031 "seclang-parser.yy" { ACTION_CONTAINER(yylhs.value.as < std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as < std::unique_ptr > ()), std::move(yystack_[0].value.as < std::unique_ptr > ()))); } -#line 5614 "seclang-parser.cc" +#line 5611 "seclang-parser.cc" break; case 438: // run_time_string: run_time_string "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3031 "seclang-parser.yy" +#line 3038 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->append(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5623 "seclang-parser.cc" +#line 5620 "seclang-parser.cc" break; case 439: // run_time_string: run_time_string var -#line 3036 "seclang-parser.yy" +#line 3043 "seclang-parser.yy" { yystack_[1].value.as < std::unique_ptr > ()->append(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(yystack_[1].value.as < std::unique_ptr > ()); } -#line 5632 "seclang-parser.cc" +#line 5629 "seclang-parser.cc" break; case 440: // run_time_string: "FREE_TEXT_QUOTE_MACRO_EXPANSION" -#line 3041 "seclang-parser.yy" +#line 3048 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->append(yystack_[0].value.as < std::string > ()); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5642 "seclang-parser.cc" +#line 5639 "seclang-parser.cc" break; case 441: // run_time_string: var -#line 3047 "seclang-parser.yy" +#line 3054 "seclang-parser.yy" { std::unique_ptr r(new RunTimeString()); r->append(std::move(yystack_[0].value.as < std::unique_ptr > ())); yylhs.value.as < std::unique_ptr > () = std::move(r); } -#line 5652 "seclang-parser.cc" +#line 5649 "seclang-parser.cc" break; -#line 5656 "seclang-parser.cc" +#line 5653 "seclang-parser.cc" default: break; @@ -7148,51 +7145,51 @@ namespace yy { const short seclang_parser::yyrline_[] = { - 0, 715, 715, 719, 720, 723, 728, 734, 740, 744, - 748, 754, 760, 766, 772, 777, 782, 788, 795, 799, - 803, 809, 813, 817, 822, 827, 832, 837, 841, 848, - 852, 859, 865, 875, 884, 894, 903, 916, 920, 924, - 928, 932, 936, 940, 944, 948, 952, 957, 961, 965, - 969, 973, 977, 982, 987, 991, 995, 999, 1003, 1007, - 1011, 1015, 1019, 1023, 1027, 1031, 1035, 1039, 1043, 1047, - 1051, 1055, 1059, 1063, 1077, 1078, 1110, 1129, 1150, 1180, - 1233, 1240, 1244, 1248, 1252, 1256, 1260, 1264, 1268, 1277, - 1281, 1286, 1289, 1294, 1299, 1304, 1309, 1312, 1317, 1320, - 1325, 1330, 1333, 1338, 1343, 1348, 1353, 1358, 1363, 1368, - 1371, 1376, 1381, 1386, 1391, 1394, 1399, 1404, 1409, 1422, - 1435, 1448, 1461, 1474, 1500, 1528, 1540, 1560, 1587, 1593, - 1598, 1603, 1612, 1617, 1621, 1625, 1629, 1633, 1637, 1641, - 1646, 1651, 1663, 1669, 1673, 1677, 1688, 1697, 1698, 1705, - 1710, 1715, 1769, 1776, 1784, 1821, 1825, 1832, 1837, 1843, - 1849, 1855, 1862, 1872, 1876, 1880, 1884, 1888, 1892, 1896, - 1900, 1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, - 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, - 1980, 1984, 1988, 1992, 1996, 2000, 2004, 2008, 2012, 2016, - 2020, 2024, 2028, 2032, 2036, 2040, 2044, 2048, 2052, 2056, - 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, - 2100, 2104, 2108, 2112, 2116, 2120, 2124, 2128, 2132, 2136, - 2140, 2144, 2148, 2152, 2156, 2160, 2164, 2168, 2172, 2176, - 2180, 2184, 2188, 2192, 2196, 2200, 2204, 2208, 2212, 2216, - 2220, 2224, 2228, 2233, 2237, 2241, 2246, 2250, 2254, 2259, - 2264, 2268, 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2300, - 2304, 2308, 2312, 2316, 2320, 2324, 2328, 2332, 2336, 2340, - 2344, 2348, 2352, 2356, 2360, 2364, 2368, 2372, 2376, 2380, - 2384, 2388, 2392, 2396, 2400, 2404, 2408, 2412, 2416, 2420, - 2424, 2428, 2432, 2436, 2440, 2444, 2448, 2452, 2456, 2460, - 2464, 2468, 2472, 2476, 2480, 2484, 2488, 2492, 2496, 2500, - 2504, 2512, 2519, 2526, 2533, 2540, 2547, 2554, 2561, 2568, - 2575, 2582, 2589, 2599, 2603, 2607, 2611, 2615, 2619, 2623, - 2627, 2632, 2637, 2642, 2646, 2650, 2654, 2658, 2663, 2668, - 2672, 2676, 2680, 2684, 2688, 2692, 2696, 2700, 2704, 2708, - 2712, 2716, 2720, 2724, 2728, 2732, 2736, 2740, 2744, 2748, - 2752, 2756, 2760, 2764, 2768, 2772, 2776, 2780, 2784, 2788, - 2792, 2796, 2800, 2804, 2808, 2812, 2816, 2820, 2824, 2828, - 2832, 2836, 2840, 2844, 2848, 2852, 2856, 2860, 2864, 2868, - 2872, 2876, 2880, 2884, 2888, 2892, 2896, 2900, 2904, 2908, - 2912, 2916, 2920, 2924, 2928, 2932, 2936, 2940, 2944, 2948, - 2952, 2956, 2960, 2964, 2968, 2972, 2976, 2980, 2984, 2988, - 2992, 2996, 3000, 3007, 3011, 3015, 3019, 3023, 3030, 3035, - 3040, 3046 + 0, 725, 725, 729, 730, 733, 738, 744, 750, 754, + 758, 764, 770, 776, 782, 787, 792, 798, 805, 809, + 813, 819, 823, 827, 832, 837, 842, 847, 851, 858, + 862, 869, 875, 885, 894, 904, 913, 926, 930, 934, + 938, 942, 946, 950, 954, 958, 962, 967, 971, 975, + 979, 983, 987, 992, 997, 1001, 1005, 1009, 1013, 1017, + 1021, 1025, 1029, 1033, 1037, 1041, 1045, 1049, 1053, 1057, + 1061, 1065, 1069, 1073, 1087, 1088, 1120, 1139, 1160, 1190, + 1245, 1252, 1256, 1260, 1264, 1268, 1272, 1276, 1280, 1289, + 1293, 1298, 1301, 1306, 1311, 1316, 1321, 1324, 1329, 1332, + 1337, 1342, 1345, 1350, 1355, 1360, 1365, 1370, 1375, 1380, + 1383, 1388, 1393, 1398, 1403, 1406, 1411, 1416, 1421, 1434, + 1447, 1460, 1473, 1486, 1512, 1540, 1552, 1572, 1599, 1605, + 1610, 1615, 1624, 1629, 1633, 1637, 1641, 1645, 1649, 1653, + 1658, 1663, 1675, 1681, 1685, 1689, 1700, 1709, 1710, 1717, + 1722, 1727, 1781, 1788, 1796, 1833, 1837, 1844, 1849, 1855, + 1861, 1867, 1874, 1884, 1888, 1892, 1896, 1900, 1904, 1908, + 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948, + 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, + 1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, + 2032, 2036, 2040, 2044, 2048, 2052, 2056, 2060, 2064, 2068, + 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2100, 2104, 2108, + 2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, 2148, + 2152, 2156, 2160, 2164, 2168, 2172, 2176, 2180, 2184, 2188, + 2192, 2196, 2200, 2204, 2208, 2212, 2216, 2220, 2224, 2228, + 2232, 2236, 2240, 2245, 2249, 2253, 2258, 2262, 2266, 2271, + 2276, 2280, 2284, 2288, 2292, 2296, 2300, 2304, 2308, 2312, + 2316, 2320, 2324, 2328, 2332, 2336, 2340, 2344, 2348, 2352, + 2356, 2360, 2364, 2368, 2372, 2376, 2380, 2384, 2388, 2392, + 2396, 2400, 2404, 2408, 2412, 2416, 2420, 2424, 2428, 2432, + 2436, 2440, 2444, 2448, 2452, 2456, 2460, 2464, 2468, 2472, + 2476, 2480, 2484, 2488, 2492, 2496, 2500, 2504, 2508, 2512, + 2516, 2524, 2531, 2538, 2545, 2552, 2559, 2566, 2573, 2580, + 2587, 2594, 2601, 2611, 2615, 2619, 2623, 2627, 2631, 2635, + 2639, 2643, 2647, 2651, 2655, 2659, 2663, 2667, 2671, 2675, + 2679, 2683, 2687, 2691, 2695, 2699, 2703, 2707, 2711, 2715, + 2719, 2723, 2727, 2731, 2735, 2739, 2743, 2747, 2751, 2755, + 2759, 2763, 2767, 2771, 2775, 2779, 2783, 2787, 2791, 2795, + 2799, 2803, 2807, 2811, 2815, 2819, 2823, 2827, 2831, 2835, + 2839, 2843, 2847, 2851, 2855, 2859, 2863, 2867, 2871, 2875, + 2879, 2883, 2887, 2891, 2895, 2899, 2903, 2907, 2911, 2915, + 2919, 2923, 2927, 2931, 2935, 2939, 2943, 2947, 2951, 2955, + 2959, 2963, 2967, 2971, 2975, 2979, 2983, 2987, 2991, 2995, + 2999, 3003, 3007, 3014, 3018, 3022, 3026, 3030, 3037, 3042, + 3047, 3053 }; void @@ -7224,9 +7221,9 @@ namespace yy { } // yy -#line 7228 "seclang-parser.cc" +#line 7225 "seclang-parser.cc" -#line 3053 "seclang-parser.yy" +#line 3060 "seclang-parser.yy" void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index d4d7cb0d..558ad0ef 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -45,17 +45,22 @@ #ifndef YY_YY_SECLANG_PARSER_HH_INCLUDED # define YY_YY_SECLANG_PARSER_HH_INCLUDED // "%code requires" blocks. -#line 10 "seclang-parser.yy" +#line 13 "seclang-parser.yy" #include #include +#include +#include "location.hh" namespace ModSecurity { namespace Parser { class Driver; } + } + + #include "src/rule_unconditional.h" #include "src/rule_with_operator.h" #include "src/rule_with_actions.h" @@ -200,6 +205,7 @@ class Driver; #include "src/utils/geo_lookup.h" #include "src/utils/string.h" #include "src/utils/system.h" +#include "src/variables/variable.h" #include "src/variables/args_combined_size.h" #include "src/variables/args_get.h" #include "src/variables/args_get_names.h" @@ -354,7 +360,7 @@ using namespace modsecurity::operators; a = std::move(c); -#line 358 "seclang-parser.hh" +#line 364 "seclang-parser.hh" # include # include // std::abort @@ -399,7 +405,7 @@ using namespace modsecurity::operators; #else # define YY_CONSTEXPR #endif -# include "location.hh" + #include #ifndef YY_ASSERT # include @@ -488,7 +494,7 @@ using namespace modsecurity::operators; #endif namespace yy { -#line 492 "seclang-parser.hh" +#line 498 "seclang-parser.hh" @@ -946,7 +952,7 @@ namespace yy { typedef YYSTYPE semantic_type; #endif /// Symbol locations. - typedef location location_type; + typedef yy::location location_type; /// Syntax errors thrown from user actions. struct syntax_error : std::runtime_error @@ -8629,7 +8635,7 @@ switch (yykind) } } // yy -#line 8633 "seclang-parser.hh" +#line 8639 "seclang-parser.hh" diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index db3e37f2..17ed1c40 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -4,19 +4,27 @@ %define api.parser.class {seclang_parser} %define api.token.constructor %define api.value.type variant -//%define api.namespace {modsecurity::yy} %define parse.assert +//%define api.filename.type { std::shared_ptr } +%define api.location.type { yy::location } + + %code requires { #include #include +#include +#include "location.hh" namespace ModSecurity { namespace Parser { class Driver; } + } + + #include "src/rule_unconditional.h" #include "src/rule_with_operator.h" #include "src/rule_with_actions.h" @@ -161,6 +169,7 @@ class Driver; #include "src/utils/geo_lookup.h" #include "src/utils/string.h" #include "src/utils/system.h" +#include "src/variables/variable.h" #include "src/variables/args_combined_size.h" #include "src/variables/args_get.h" #include "src/variables/args_get_names.h" @@ -321,8 +330,9 @@ using namespace modsecurity::operators; %initial-action { // Initialize the initial location. - @$.begin.filename = @$.end.filename = new std::string(driver.file); + @$.setFileName(driver.file); }; + %define parse.trace %define parse.error verbose %code @@ -876,7 +886,7 @@ op: { $$ = std::move($1); std::string error; - if ($$->init(*@1.end.filename, &error) == false) { + if ($$->init(@1.getFileName(), &error) == false) { driver.error(@0, error); YYERROR; } @@ -886,7 +896,7 @@ op: $$ = std::move($2); $$->m_negation = true; std::string error; - if ($$->init(*@1.end.filename, &error) == false) { + if ($$->init(@1.getFileName(), &error) == false) { driver.error(@0, error); YYERROR; } @@ -895,7 +905,7 @@ op: { OPERATOR_CONTAINER($$, new operators::Rx(std::move($1))); std::string error; - if ($$->init(*@1.end.filename, &error) == false) { + if ($$->init(@1.getFileName(), &error) == false) { driver.error(@0, error); YYERROR; } @@ -905,7 +915,7 @@ op: OPERATOR_CONTAINER($$, new operators::Rx(std::move($2))); $$->m_negation = true; std::string error; - if ($$->init(*@1.end.filename, &error) == false) { + if ($$->init(@1.getFileName(), &error) == false) { driver.error(@0, error); YYERROR; } @@ -952,7 +962,7 @@ op_before_init: | OPERATOR_VALIDATE_HASH run_time_string { /* $$ = new operators::ValidateHash($1); */ - OPERATOR_NOT_SUPPORTED("ValidateHash", @0); + OPERATOR_NOT_SUPPORTED("ValidateHash", @1); } | OPERATOR_VALIDATE_SCHEMA run_time_string { @@ -977,12 +987,12 @@ op_before_init: | OPERATOR_GSB_LOOKUP run_time_string { /* $$ = new operators::GsbLookup($1); */ - OPERATOR_NOT_SUPPORTED("GsbLookup", @0); + OPERATOR_NOT_SUPPORTED("GsbLookup", @1); } | OPERATOR_RSUB run_time_string { /* $$ = new operators::Rsub($1); */ - OPERATOR_NOT_SUPPORTED("Rsub", @0); + OPERATOR_NOT_SUPPORTED("Rsub", @1); } | OPERATOR_WITHIN run_time_string { @@ -1099,7 +1109,7 @@ expression: /* variables */ v, /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), + /* file name */ @1.getFileName(), /* line number */ @1.end.line )); // TODO: filename should be a shared_ptr. @@ -1119,7 +1129,7 @@ expression: /* variables */ v, /* actions */ NULL, /* transformations */ NULL, - /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), + /* file name */ @1.getFileName(), /* line number */ @1.end.line )); if (driver.addSecRule(std::move(rule)) == false) { @@ -1142,7 +1152,7 @@ expression: std::unique_ptr rule(new RuleUnconditional( /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), + /* file name */ @1.getFileName(), /* line number */ @1.end.line )); driver.addSecAction(std::move(rule)); @@ -1165,7 +1175,7 @@ expression: /* path to script */ $1, /* actions */ a, /* transformations */ t, - /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), + /* file name */ @1.getFileName(), /* line number */ @1.end.line )); @@ -1196,12 +1206,12 @@ expression: if (phase != NULL) { definedPhase = phase->getPhase(); secRuleDefinedPhase = phase->getSecRulePhase(); - delete phase; } else if (dynamic_cast(a.get()) && !dynamic_cast(a.get())) { checkedActions.push_back(a); } else { driver.error(@0, "The action '" + *a->getName() + "' is not suitable to be part of the SecDefaultActions"); + delete actions; YYERROR; } } @@ -1210,6 +1220,7 @@ expression: } if (hasDisruptive == false) { driver.error(@0, "SecDefaultAction must specify a disruptive action."); + delete actions; YYERROR; } if (!driver.m_rulesSetPhases[definedPhase]->m_defaultActions.empty()) { @@ -1218,6 +1229,7 @@ expression: ss << secRuleDefinedPhase; ss << " was informed already."; driver.error(@0, ss.str()); + delete actions; YYERROR; } for (auto &a : checkedActions) { @@ -1228,12 +1240,12 @@ expression: driver.m_rulesSetPhases[definedPhase]->m_defaultActions.push_back(a); } } - //delete actions; + delete actions; } | CONFIG_DIR_SEC_MARKER { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded($1), - /* file name */ std::unique_ptr(new std::string(*@1.end.filename)), + /* file name */ @1.getFileName(), /* line number */ @1.end.line ); } @@ -1562,7 +1574,7 @@ expression: #if defined(WITH_GEOIP) or defined(WITH_MAXMIND) std::string err; std::string file = modsecurity::utils::find_resource($1, - *@1.end.filename, &err); + @1.getFileName(), &err); if (file.empty()) { std::stringstream ss; ss << "Failed to load locate the GeoDB file from: " << $1 << " "; @@ -1749,7 +1761,7 @@ expression: param.pop_back(); } - file = modsecurity::utils::find_resource(f, *@1.end.filename, &err); + file = modsecurity::utils::find_resource(f, @1.getFileName(), &err); if (file.empty()) { std::stringstream ss; ss << "Failed to locate the unicode map file from: " << f << " "; @@ -2606,7 +2618,7 @@ act: } | ACTION_APPEND { - ACTION_NOT_SUPPORTED("Append", @0); + ACTION_NOT_SUPPORTED("Append", @1); } | ACTION_AUDIT_LOG { @@ -2626,18 +2638,15 @@ act: } | ACTION_CTL_AUDIT_ENGINE CONFIG_VALUE_ON { - ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", @1); } | ACTION_CTL_AUDIT_ENGINE CONFIG_VALUE_OFF { - ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", @1); } | ACTION_CTL_AUDIT_ENGINE CONFIG_VALUE_RELEVANT_ONLY { - ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:auditEngine", @1); } | ACTION_CTL_AUDIT_LOG_PARTS { @@ -2657,13 +2666,11 @@ act: } | ACTION_CTL_FORCE_REQ_BODY_VAR CONFIG_VALUE_ON { - ACTION_NOT_SUPPORTED("CtlForceRequestBodyVariable", @0); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:forceRequestBodyVariable", @1); } | ACTION_CTL_FORCE_REQ_BODY_VAR CONFIG_VALUE_OFF { - ACTION_NOT_SUPPORTED("CtlForceRequestBodyVariable", @0); - //ACTION_CONTAINER($$, new actions::Action($1)); + ACTION_NOT_SUPPORTED("ctl:forceRequestBodyVariable", @1); } | ACTION_CTL_REQUEST_BODY_ACCESS CONFIG_VALUE_ON { @@ -2707,7 +2714,7 @@ act: } | ACTION_DEPRECATE_VAR { - ACTION_NOT_SUPPORTED("DeprecateVar", @0); + ACTION_NOT_SUPPORTED("DeprecateVar", @1); } | ACTION_DROP { @@ -2763,7 +2770,7 @@ act: } | ACTION_PAUSE { - ACTION_NOT_SUPPORTED("Pause", @0); + ACTION_NOT_SUPPORTED("Pause", @1); } | ACTION_PHASE { @@ -2771,11 +2778,11 @@ act: } | ACTION_PREPEND { - ACTION_NOT_SUPPORTED("Prepend", @0); + ACTION_NOT_SUPPORTED("Prepend", @1); } | ACTION_PROXY { - ACTION_NOT_SUPPORTED("Proxy", @0); + ACTION_NOT_SUPPORTED("Proxy", @1); } | ACTION_REDIRECT run_time_string { @@ -2787,23 +2794,23 @@ act: } | ACTION_SANITISE_ARG { - ACTION_NOT_SUPPORTED("SanitiseArg", @0); + ACTION_NOT_SUPPORTED("SanitiseArg", @1); } | ACTION_SANITISE_MATCHED { - ACTION_NOT_SUPPORTED("SanitiseMatched", @0); + ACTION_NOT_SUPPORTED("SanitiseMatched", @1); } | ACTION_SANITISE_MATCHED_BYTES { - ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", @0); + ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", @1); } | ACTION_SANITISE_REQUEST_HEADER { - ACTION_NOT_SUPPORTED("SanitiseRequestHeader", @0); + ACTION_NOT_SUPPORTED("SanitiseRequestHeader", @1); } | ACTION_SANITISE_RESPONSE_HEADER { - ACTION_NOT_SUPPORTED("SanitiseResponseHeader", @0); + ACTION_NOT_SUPPORTED("SanitiseResponseHeader", @1); } | ACTION_SETENV run_time_string { diff --git a/src/parser/seclang-scanner.cc b/src/parser/seclang-scanner.cc index 5cbf5a62..b675c6f9 100644 --- a/src/parser/seclang-scanner.cc +++ b/src/parser/seclang-scanner.cc @@ -5074,7 +5074,7 @@ static const flex_int16_t yy_rule_linenum[541] = 1157, 1158, 1162, 1163, 1167, 1168, 1173, 1175, 1176, 1177, 1178, 1180, 1181, 1182, 1183, 1185, 1186, 1187, 1188, 1190, 1192, 1193, 1195, 1196, 1197, 1198, 1200, 1205, 1206, 1207, - 1211, 1212, 1213, 1218, 1220, 1221, 1222, 1241, 1268, 1298 + 1211, 1212, 1213, 1218, 1220, 1221, 1222, 1239, 1266, 1295 } ; /* The intent behind this definition is that it'll catch @@ -5165,7 +5165,7 @@ static std::stack YY_PREVIOUS_STATE; #line 493 "seclang-scanner.ll" // Code run each time a pattern is matched. - # define YY_USER_ACTION driver.loc.back()->columns (yyleng); + # define YY_USER_ACTION driver.currentLocation()->columns (yyleng); #line 5170 "seclang-scanner.cc" #line 5171 "seclang-scanner.cc" @@ -5488,7 +5488,7 @@ YY_DECL #line 502 "seclang-scanner.ll" // Code run each time yylex is called. - driver.loc.back()->step(); + driver.currentLocation()->step(); #line 5493 "seclang-scanner.cc" @@ -5569,564 +5569,564 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP #line 506 "seclang-scanner.ll" -{ return p::make_ACTION_APPEND(yytext, *driver.loc.back()); } +{ return p::make_ACTION_APPEND(yytext, *driver.currentLocation()); } YY_BREAK case 2: YY_RULE_SETUP #line 507 "seclang-scanner.ll" -{ return p::make_ACTION_BLOCK(yytext, *driver.loc.back()); } +{ return p::make_ACTION_BLOCK(yytext, *driver.currentLocation()); } YY_BREAK case 3: YY_RULE_SETUP #line 508 "seclang-scanner.ll" -{ return p::make_ACTION_CAPTURE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CAPTURE(yytext, *driver.currentLocation()); } YY_BREAK case 4: YY_RULE_SETUP #line 509 "seclang-scanner.ll" -{ return p::make_ACTION_CHAIN(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CHAIN(yytext, *driver.currentLocation()); } YY_BREAK case 5: YY_RULE_SETUP #line 510 "seclang-scanner.ll" -{ return p::make_ACTION_DENY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_DENY(yytext, *driver.currentLocation()); } YY_BREAK case 6: YY_RULE_SETUP #line 511 "seclang-scanner.ll" -{ return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 7: YY_RULE_SETUP #line 512 "seclang-scanner.ll" -{ return p::make_ACTION_DROP(yytext, *driver.loc.back()); } +{ return p::make_ACTION_DROP(yytext, *driver.currentLocation()); } YY_BREAK case 8: YY_RULE_SETUP #line 513 "seclang-scanner.ll" -{ return p::make_ACTION_ID(yytext, *driver.loc.back()); } +{ return p::make_ACTION_ID(yytext, *driver.currentLocation()); } YY_BREAK case 9: YY_RULE_SETUP #line 514 "seclang-scanner.ll" -{ return p::make_ACTION_LOG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_LOG(yytext, *driver.currentLocation()); } YY_BREAK case 10: YY_RULE_SETUP #line 515 "seclang-scanner.ll" -{ return p::make_ACTION_MULTI_MATCH(yytext, *driver.loc.back()); } +{ return p::make_ACTION_MULTI_MATCH(yytext, *driver.currentLocation()); } YY_BREAK case 11: YY_RULE_SETUP #line 516 "seclang-scanner.ll" -{ return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.currentLocation()); } YY_BREAK case 12: YY_RULE_SETUP #line 517 "seclang-scanner.ll" -{ return p::make_ACTION_NO_LOG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_NO_LOG(yytext, *driver.currentLocation()); } YY_BREAK case 13: YY_RULE_SETUP #line 518 "seclang-scanner.ll" -{ return p::make_ACTION_PASS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_PASS(yytext, *driver.currentLocation()); } YY_BREAK case 14: YY_RULE_SETUP #line 519 "seclang-scanner.ll" -{ return p::make_ACTION_PAUSE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_PAUSE(yytext, *driver.currentLocation()); } YY_BREAK case 15: YY_RULE_SETUP #line 520 "seclang-scanner.ll" -{ return p::make_ACTION_PREPEND(yytext, *driver.loc.back()); } +{ return p::make_ACTION_PREPEND(yytext, *driver.currentLocation()); } YY_BREAK case 16: YY_RULE_SETUP #line 521 "seclang-scanner.ll" -{ return p::make_ACTION_PROXY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_PROXY(yytext, *driver.currentLocation()); } YY_BREAK case 17: YY_RULE_SETUP #line 522 "seclang-scanner.ll" -{ return p::make_ACTION_SANITISE_ARG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SANITISE_ARG(yytext, *driver.currentLocation()); } YY_BREAK case 18: YY_RULE_SETUP #line 523 "seclang-scanner.ll" -{ return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.currentLocation()); } YY_BREAK case 19: YY_RULE_SETUP #line 524 "seclang-scanner.ll" -{ return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.currentLocation()); } YY_BREAK case 20: YY_RULE_SETUP #line 525 "seclang-scanner.ll" -{ return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.currentLocation()); } YY_BREAK case 21: YY_RULE_SETUP #line 526 "seclang-scanner.ll" -{ return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.currentLocation()); } YY_BREAK case 22: YY_RULE_SETUP #line 527 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.currentLocation()); } YY_BREAK case 23: YY_RULE_SETUP #line 529 "seclang-scanner.ll" -{ return p::make_ACTION_STATUS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_STATUS(yytext, *driver.currentLocation()); } YY_BREAK case 24: /* rule 24 can match eol */ YY_RULE_SETUP #line 530 "seclang-scanner.ll" -{ return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_ACCURACY(yytext, *driver.currentLocation()); } YY_BREAK case 25: /* rule 25 can match eol */ YY_RULE_SETUP #line 531 "seclang-scanner.ll" -{ return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_ACCURACY(yytext, *driver.currentLocation()); } YY_BREAK case 26: YY_RULE_SETUP #line 532 "seclang-scanner.ll" -{ return p::make_ACTION_ALLOW(yytext, *driver.loc.back()); } +{ return p::make_ACTION_ALLOW(yytext, *driver.currentLocation()); } YY_BREAK case 27: YY_RULE_SETUP #line 533 "seclang-scanner.ll" -{ return p::make_ACTION_AUDIT_LOG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_AUDIT_LOG(yytext, *driver.currentLocation()); } YY_BREAK case 28: YY_RULE_SETUP #line 534 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.currentLocation()); } YY_BREAK case 29: YY_RULE_SETUP #line 535 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.currentLocation()); } YY_BREAK case 30: YY_RULE_SETUP #line 536 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.currentLocation()); } YY_BREAK case 31: YY_RULE_SETUP #line 537 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_BDY_XML(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_BDY_XML(yytext, *driver.currentLocation()); } YY_BREAK case 32: YY_RULE_SETUP #line 538 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.currentLocation()); } YY_BREAK case 33: YY_RULE_SETUP #line 539 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 34: YY_RULE_SETUP #line 540 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.currentLocation()); } YY_BREAK case 35: YY_RULE_SETUP #line 541 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_RULE_ENGINE(*driver.loc.back()); } +{ return p::make_ACTION_CTL_RULE_ENGINE(*driver.currentLocation()); } YY_BREAK case 36: YY_RULE_SETUP #line 542 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.currentLocation()); } YY_BREAK case 37: YY_RULE_SETUP #line 543 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.currentLocation()); } YY_BREAK case 38: YY_RULE_SETUP #line 544 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.currentLocation()); } YY_BREAK case 39: YY_RULE_SETUP #line 545 "seclang-scanner.ll" -{ return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.loc.back()); } +{ return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.currentLocation()); } YY_BREAK case 40: /* rule 40 can match eol */ YY_RULE_SETUP #line 546 "seclang-scanner.ll" -{ return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXEC(yytext, *driver.currentLocation()); } YY_BREAK case 41: /* rule 41 can match eol */ YY_RULE_SETUP #line 547 "seclang-scanner.ll" -{ return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXEC(yytext, *driver.currentLocation()); } YY_BREAK case 42: /* rule 42 can match eol */ YY_RULE_SETUP #line 548 "seclang-scanner.ll" -{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 43: /* rule 43 can match eol */ YY_RULE_SETUP #line 549 "seclang-scanner.ll" -{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 44: /* rule 44 can match eol */ YY_RULE_SETUP #line 550 "seclang-scanner.ll" -{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 45: /* rule 45 can match eol */ YY_RULE_SETUP #line 551 "seclang-scanner.ll" -{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } YY_BREAK case 46: YY_RULE_SETUP #line 552 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.currentLocation()); } YY_BREAK case 47: /* rule 47 can match eol */ YY_RULE_SETUP #line 553 "seclang-scanner.ll" -{ return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_MATURITY(yytext, *driver.currentLocation()); } YY_BREAK case 48: /* rule 48 can match eol */ YY_RULE_SETUP #line 554 "seclang-scanner.ll" -{ return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_MATURITY(yytext, *driver.currentLocation()); } YY_BREAK case 49: YY_RULE_SETUP #line 555 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.currentLocation()); } YY_BREAK case 50: YY_RULE_SETUP #line 556 "seclang-scanner.ll" -{ return p::make_ACTION_PHASE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_PHASE(yytext, *driver.currentLocation()); } YY_BREAK case 51: YY_RULE_SETUP #line 557 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.currentLocation()); } YY_BREAK case 52: /* rule 52 can match eol */ YY_RULE_SETUP #line 558 "seclang-scanner.ll" -{ return p::make_ACTION_REV(yytext, *driver.loc.back()); } +{ return p::make_ACTION_REV(yytext, *driver.currentLocation()); } YY_BREAK case 53: /* rule 53 can match eol */ YY_RULE_SETUP #line 559 "seclang-scanner.ll" -{ return p::make_ACTION_REV(yytext, *driver.loc.back()); } +{ return p::make_ACTION_REV(yytext, *driver.currentLocation()); } YY_BREAK case 54: YY_RULE_SETUP #line 560 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.currentLocation()); } YY_BREAK case 55: YY_RULE_SETUP #line 561 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.currentLocation()); } YY_BREAK case 56: YY_RULE_SETUP #line 562 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.currentLocation()); } YY_BREAK case 57: YY_RULE_SETUP #line 564 "seclang-scanner.ll" -{ BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } +{ BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.currentLocation()); } YY_BREAK case 58: YY_RULE_SETUP #line 565 "seclang-scanner.ll" -{ BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } +{ BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.currentLocation()); } YY_BREAK case 59: YY_RULE_SETUP #line 568 "seclang-scanner.ll" -{ return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SEVERITY(yytext, *driver.currentLocation()); } YY_BREAK case 60: YY_RULE_SETUP #line 569 "seclang-scanner.ll" -{ return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SEVERITY(yytext, *driver.currentLocation()); } YY_BREAK case 61: YY_RULE_SETUP #line 570 "seclang-scanner.ll" -{ return p::make_ACTION_SKIP_AFTER(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SKIP_AFTER(yytext, *driver.currentLocation()); } YY_BREAK case 62: YY_RULE_SETUP #line 571 "seclang-scanner.ll" -{ return p::make_ACTION_SKIP(yytext, *driver.loc.back()); } +{ return p::make_ACTION_SKIP(yytext, *driver.currentLocation()); } YY_BREAK case 63: YY_RULE_SETUP #line 572 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.currentLocation()); } YY_BREAK case 64: /* rule 64 can match eol */ YY_RULE_SETUP #line 573 "seclang-scanner.ll" -{ return p::make_ACTION_VER(yytext, *driver.loc.back()); } +{ return p::make_ACTION_VER(yytext, *driver.currentLocation()); } YY_BREAK case 65: YY_RULE_SETUP #line 574 "seclang-scanner.ll" -{ return p::make_ACTION_XMLNS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_XMLNS(yytext, *driver.currentLocation()); } YY_BREAK case 66: YY_RULE_SETUP #line 576 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.currentLocation()); } YY_BREAK case 67: YY_RULE_SETUP #line 577 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.currentLocation()); } YY_BREAK case 68: YY_RULE_SETUP #line 578 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.currentLocation()); } YY_BREAK case 69: YY_RULE_SETUP #line 579 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 70: YY_RULE_SETUP #line 580 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.currentLocation()); } YY_BREAK case 71: YY_RULE_SETUP #line 581 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 72: YY_RULE_SETUP #line 582 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.currentLocation()); } YY_BREAK case 73: YY_RULE_SETUP #line 583 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.currentLocation()); } YY_BREAK case 74: YY_RULE_SETUP #line 584 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.currentLocation()); } YY_BREAK case 75: YY_RULE_SETUP #line 585 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.currentLocation()); } YY_BREAK case 76: YY_RULE_SETUP #line 586 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 77: YY_RULE_SETUP #line 587 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.currentLocation()); } YY_BREAK case 78: YY_RULE_SETUP #line 588 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 79: YY_RULE_SETUP #line 589 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.currentLocation()); } YY_BREAK case 80: YY_RULE_SETUP #line 590 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.currentLocation()); } YY_BREAK case 81: YY_RULE_SETUP #line 591 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.currentLocation()); } YY_BREAK case 82: YY_RULE_SETUP #line 592 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.currentLocation()); } YY_BREAK case 83: YY_RULE_SETUP #line 593 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.currentLocation()); } YY_BREAK case 84: YY_RULE_SETUP #line 594 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 85: YY_RULE_SETUP #line 595 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.currentLocation()); } YY_BREAK case 86: YY_RULE_SETUP #line 596 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.currentLocation()); } YY_BREAK case 87: YY_RULE_SETUP #line 597 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.currentLocation()); } YY_BREAK case 88: YY_RULE_SETUP #line 598 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.currentLocation()); } YY_BREAK case 89: YY_RULE_SETUP #line 599 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.currentLocation()); } YY_BREAK case 90: YY_RULE_SETUP #line 600 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 91: YY_RULE_SETUP #line 601 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 92: YY_RULE_SETUP #line 602 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.currentLocation()); } YY_BREAK case 93: YY_RULE_SETUP #line 603 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.currentLocation()); } YY_BREAK case 94: YY_RULE_SETUP #line 604 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.currentLocation()); } YY_BREAK case 95: YY_RULE_SETUP #line 605 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.currentLocation()); } YY_BREAK case 96: YY_RULE_SETUP #line 606 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.currentLocation()); } YY_BREAK case 97: YY_RULE_SETUP #line 607 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.currentLocation()); } YY_BREAK case 98: YY_RULE_SETUP #line 608 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.currentLocation()); } YY_BREAK case 99: YY_RULE_SETUP #line 609 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.currentLocation()); } YY_BREAK case 100: YY_RULE_SETUP #line 610 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.currentLocation()); } YY_BREAK case 101: YY_RULE_SETUP #line 611 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.currentLocation()); } YY_BREAK case 102: YY_RULE_SETUP #line 612 "seclang-scanner.ll" -{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } +{ return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.currentLocation()); } YY_BREAK case 103: YY_RULE_SETUP #line 613 "seclang-scanner.ll" -{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } +{ BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.currentLocation()); } YY_BREAK case 104: YY_RULE_SETUP #line 615 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.currentLocation()); } YY_BREAK case 105: YY_RULE_SETUP #line 616 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.currentLocation()); } YY_BREAK case 106: YY_RULE_SETUP #line 617 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.currentLocation()); } YY_BREAK case 107: /* rule 107 can match eol */ YY_RULE_SETUP #line 618 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 108: /* rule 108 can match eol */ YY_RULE_SETUP #line 619 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 109: YY_RULE_SETUP #line 623 "seclang-scanner.ll" -{ return p::make_COMMA(*driver.loc.back()); } +{ return p::make_COMMA(*driver.currentLocation()); } YY_BREAK @@ -6134,13 +6134,13 @@ case 110: /* rule 110 can match eol */ YY_RULE_SETUP #line 628 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ BEGIN(INITIAL); yyless(yyleng); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 111: /* rule 111 can match eol */ YY_RULE_SETUP #line 629 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ BEGIN(INITIAL); yyless(yyleng); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK @@ -6159,14 +6159,14 @@ case 114: /* rule 114 can match eol */ YY_RULE_SETUP #line 636 "seclang-scanner.ll" -{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 115: YY_RULE_SETUP #line 641 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.loc.back()); } +{ BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.currentLocation()); } YY_BREAK case 116: /* rule 116 can match eol */ @@ -6178,7 +6178,7 @@ case 117: /* rule 117 can match eol */ YY_RULE_SETUP #line 643 "seclang-scanner.ll" -{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK @@ -6210,13 +6210,13 @@ case 122: /* rule 122 can match eol */ YY_RULE_SETUP #line 660 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 123: /* rule 123 can match eol */ YY_RULE_SETUP #line 661 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK @@ -6246,7 +6246,7 @@ case 128: /* rule 128 can match eol */ YY_RULE_SETUP #line 672 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -6259,7 +6259,7 @@ case 130: /* rule 130 can match eol */ YY_RULE_SETUP #line 677 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -6277,7 +6277,7 @@ case 133: /* rule 133 can match eol */ YY_RULE_SETUP #line 683 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -6296,7 +6296,7 @@ YY_RULE_SETUP case 136: YY_RULE_SETUP #line 692 "seclang-scanner.ll" -{ return p::make_NOT(*driver.loc.back()); } +{ return p::make_NOT(*driver.currentLocation()); } YY_BREAK case 137: /* rule 137 can match eol */ @@ -6309,17 +6309,17 @@ YY_RULE_SETUP case 138: YY_RULE_SETUP #line 698 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.currentLocation()); } YY_BREAK case 139: YY_RULE_SETUP #line 699 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.currentLocation()); } YY_BREAK case 140: YY_RULE_SETUP #line 700 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.currentLocation()); } YY_BREAK @@ -6355,7 +6355,7 @@ case 145: /* rule 145 can match eol */ YY_RULE_SETUP #line 722 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK case 146: /* rule 146 can match eol */ @@ -6374,7 +6374,7 @@ case 148: /* rule 148 can match eol */ YY_RULE_SETUP #line 729 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK case 149: /* rule 149 can match eol */ @@ -6386,7 +6386,7 @@ YY_RULE_SETUP case YY_STATE_EOF(FINISH_ACTIONS): #line 738 "seclang-scanner.ll" -{ BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); } +{ BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.currentLocation()); } YY_BREAK case 150: YY_RULE_SETUP @@ -6398,612 +6398,612 @@ case 151: /* rule 151 can match eol */ YY_RULE_SETUP #line 742 "seclang-scanner.ll" -{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } +{ return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.currentLocation()); } YY_BREAK case 152: /* rule 152 can match eol */ YY_RULE_SETUP #line 743 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.currentLocation()); } YY_BREAK case 153: /* rule 153 can match eol */ YY_RULE_SETUP #line 744 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.currentLocation()); } YY_BREAK case 154: YY_RULE_SETUP #line 745 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 155: YY_RULE_SETUP #line 746 "seclang-scanner.ll" -{ return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } +{ return p::make_CONFIG_CONTENT_INJECTION(*driver.currentLocation()); } YY_BREAK case 156: YY_RULE_SETUP #line 747 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 157: YY_RULE_SETUP #line 748 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 158: YY_RULE_SETUP #line 749 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 159: YY_RULE_SETUP #line 750 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 160: YY_RULE_SETUP #line 751 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 161: YY_RULE_SETUP #line 752 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 162: YY_RULE_SETUP #line 753 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.currentLocation()); } YY_BREAK case 163: YY_RULE_SETUP #line 754 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 164: YY_RULE_SETUP #line 755 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 165: YY_RULE_SETUP #line 756 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 166: YY_RULE_SETUP #line 757 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 167: YY_RULE_SETUP #line 758 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 168: YY_RULE_SETUP #line 759 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.currentLocation()); } YY_BREAK case 169: YY_RULE_SETUP #line 760 "seclang-scanner.ll" -{ return p::make_JSON(*driver.loc.back()); } +{ return p::make_JSON(*driver.currentLocation()); } YY_BREAK case 170: YY_RULE_SETUP #line 761 "seclang-scanner.ll" -{ return p::make_NATIVE(*driver.loc.back()); } +{ return p::make_NATIVE(*driver.currentLocation()); } YY_BREAK case 171: YY_RULE_SETUP #line 762 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 172: YY_RULE_SETUP #line 763 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 173: YY_RULE_SETUP #line 764 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 174: YY_RULE_SETUP #line 765 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.currentLocation()); } YY_BREAK case 175: YY_RULE_SETUP #line 768 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 176: YY_RULE_SETUP #line 769 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 177: YY_RULE_SETUP #line 770 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 178: YY_RULE_SETUP #line 771 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 179: YY_RULE_SETUP #line 772 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 180: YY_RULE_SETUP #line 773 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 181: YY_RULE_SETUP #line 774 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 182: YY_RULE_SETUP #line 775 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 183: YY_RULE_SETUP #line 777 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.currentLocation()); } YY_BREAK case 184: YY_RULE_SETUP #line 778 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 185: YY_RULE_SETUP #line 779 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 186: YY_RULE_SETUP #line 780 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.currentLocation()); } YY_BREAK case 187: YY_RULE_SETUP #line 781 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.currentLocation()); } YY_BREAK case 188: YY_RULE_SETUP #line 782 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 189: YY_RULE_SETUP #line 783 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.currentLocation()); } YY_BREAK case 190: YY_RULE_SETUP #line 784 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.currentLocation()); } YY_BREAK case 191: YY_RULE_SETUP #line 785 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 192: YY_RULE_SETUP #line 786 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 193: YY_RULE_SETUP #line 787 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 194: YY_RULE_SETUP #line 788 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 195: YY_RULE_SETUP #line 789 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 196: YY_RULE_SETUP #line 790 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 197: YY_RULE_SETUP #line 791 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 198: YY_RULE_SETUP #line 792 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 199: YY_RULE_SETUP #line 793 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 200: YY_RULE_SETUP #line 794 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 201: YY_RULE_SETUP #line 795 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 202: YY_RULE_SETUP #line 796 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 203: YY_RULE_SETUP #line 797 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 204: YY_RULE_SETUP #line 798 "seclang-scanner.ll" -{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 205: YY_RULE_SETUP #line 799 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 206: YY_RULE_SETUP #line 800 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 207: YY_RULE_SETUP #line 801 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.currentLocation()); } YY_BREAK case 208: YY_RULE_SETUP #line 802 "seclang-scanner.ll" -{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.currentLocation()); } YY_BREAK case 209: YY_RULE_SETUP #line 803 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 210: YY_RULE_SETUP #line 804 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 211: YY_RULE_SETUP #line 805 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 212: YY_RULE_SETUP #line 806 "seclang-scanner.ll" -{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 213: YY_RULE_SETUP #line 807 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_ABORT(yytext, *driver.currentLocation()); } YY_BREAK case 214: YY_RULE_SETUP #line 808 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_DETC(yytext, *driver.currentLocation()); } YY_BREAK case 215: YY_RULE_SETUP #line 809 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.currentLocation()); } YY_BREAK case 216: YY_RULE_SETUP #line 810 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_OFF(yytext, *driver.currentLocation()); } YY_BREAK case 217: YY_RULE_SETUP #line 811 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_ON(yytext, *driver.currentLocation()); } YY_BREAK case 218: YY_RULE_SETUP #line 812 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.currentLocation()); } YY_BREAK case 219: YY_RULE_SETUP #line 813 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.currentLocation()); } YY_BREAK case 220: YY_RULE_SETUP #line 814 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_REJECT(yytext, *driver.currentLocation()); } YY_BREAK case 221: YY_RULE_SETUP #line 815 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.currentLocation()); } YY_BREAK case 222: YY_RULE_SETUP #line 816 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.currentLocation()); } YY_BREAK case 223: YY_RULE_SETUP #line 817 "seclang-scanner.ll" -{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_VALUE_WARN(yytext, *driver.currentLocation()); } YY_BREAK case 224: YY_RULE_SETUP #line 818 "seclang-scanner.ll" -{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.currentLocation()); } YY_BREAK case 225: YY_RULE_SETUP #line 819 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 226: YY_RULE_SETUP #line 820 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } +{ return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.currentLocation()); } YY_BREAK case 227: YY_RULE_SETUP #line 821 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.currentLocation()); } YY_BREAK case 228: YY_RULE_SETUP #line 822 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 229: YY_RULE_SETUP #line 823 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 230: YY_RULE_SETUP #line 824 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 231: YY_RULE_SETUP #line 825 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 232: YY_RULE_SETUP #line 826 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 233: YY_RULE_SETUP #line 827 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.currentLocation()); } YY_BREAK case 234: YY_RULE_SETUP #line 828 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 235: YY_RULE_SETUP #line 829 "seclang-scanner.ll" -{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 236: YY_RULE_SETUP #line 830 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 237: YY_RULE_SETUP #line 831 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 238: YY_RULE_SETUP #line 832 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.currentLocation()); } YY_BREAK case 239: YY_RULE_SETUP #line 833 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 240: YY_RULE_SETUP #line 834 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 241: YY_RULE_SETUP #line 835 "seclang-scanner.ll" -{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_CONN_ENGINE(yytext, *driver.currentLocation()); } YY_BREAK case 242: YY_RULE_SETUP #line 836 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.currentLocation()); } YY_BREAK case 243: YY_RULE_SETUP #line 837 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.currentLocation()); } YY_BREAK case 244: YY_RULE_SETUP #line 838 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.currentLocation()); } YY_BREAK case 245: YY_RULE_SETUP #line 839 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.currentLocation()); } YY_BREAK case 246: YY_RULE_SETUP #line 840 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.currentLocation()); } YY_BREAK case 247: YY_RULE_SETUP #line 841 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 248: YY_RULE_SETUP #line 842 "seclang-scanner.ll" -{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } +{ return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } YY_BREAK case 249: YY_RULE_SETUP #line 843 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.currentLocation()); } YY_BREAK case 250: YY_RULE_SETUP #line 844 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.currentLocation()); } YY_BREAK case 251: YY_RULE_SETUP #line 845 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.currentLocation()); } YY_BREAK case 252: YY_RULE_SETUP #line 846 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.currentLocation()); } YY_BREAK case 253: YY_RULE_SETUP #line 847 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.currentLocation()); } YY_BREAK case 254: YY_RULE_SETUP #line 848 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.currentLocation()); } YY_BREAK case 255: YY_RULE_SETUP #line 849 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 256: YY_RULE_SETUP #line 850 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.currentLocation()); } YY_BREAK case 257: YY_RULE_SETUP #line 851 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.currentLocation()); } YY_BREAK case 258: YY_RULE_SETUP #line 852 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.currentLocation()); } YY_BREAK case 259: YY_RULE_SETUP #line 854 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } +{ BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.currentLocation()); } YY_BREAK case 260: YY_RULE_SETUP #line 855 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.currentLocation()); } YY_BREAK case 261: YY_RULE_SETUP #line 856 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.currentLocation()); } YY_BREAK case 262: YY_RULE_SETUP #line 858 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.currentLocation()); } YY_BREAK case 263: YY_RULE_SETUP #line 859 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 264: YY_RULE_SETUP #line 860 "seclang-scanner.ll" -{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{ return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.currentLocation()); } YY_BREAK case 265: /* rule 265 can match eol */ YY_RULE_SETUP #line 861 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 266: /* rule 266 can match eol */ YY_RULE_SETUP #line 862 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(COMMENT); } YY_BREAK case 267: /* rule 267 can match eol */ YY_RULE_SETUP #line 863 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(COMMENT); } YY_BREAK case 268: YY_RULE_SETUP #line 864 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* comment, just ignore. */ } +{ driver.currentLocation()->step(); /* comment, just ignore. */ } YY_BREAK case 269: YY_RULE_SETUP #line 865 "seclang-scanner.ll" -{ driver.loc.back()->step(); /* carriage return, just ignore. */} +{ driver.currentLocation()->step(); /* carriage return, just ignore. */} YY_BREAK case 270: YY_RULE_SETUP #line 866 "seclang-scanner.ll" -{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +{ return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } YY_BREAK case 271: YY_RULE_SETUP #line 867 "seclang-scanner.ll" -{ return p::make_COMMA(*driver.loc.back()); } +{ return p::make_COMMA(*driver.currentLocation()); } YY_BREAK case 272: @@ -7016,27 +7016,27 @@ YY_RULE_SETUP case 273: YY_RULE_SETUP #line 874 "seclang-scanner.ll" -{ return p::make_PIPE(*driver.loc.back()); } +{ return p::make_PIPE(*driver.currentLocation()); } YY_BREAK case 274: YY_RULE_SETUP #line 875 "seclang-scanner.ll" -{ return p::make_PIPE(*driver.loc.back()); } +{ return p::make_PIPE(*driver.currentLocation()); } YY_BREAK case 275: YY_RULE_SETUP #line 876 "seclang-scanner.ll" -{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +{ return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } YY_BREAK case 276: YY_RULE_SETUP #line 877 "seclang-scanner.ll" -{ return p::make_VAR_EXCLUSION(*driver.loc.back()); } +{ return p::make_VAR_EXCLUSION(*driver.currentLocation()); } YY_BREAK case 277: YY_RULE_SETUP #line 878 "seclang-scanner.ll" -{ return p::make_VAR_COUNT(*driver.loc.back()); } +{ return p::make_VAR_COUNT(*driver.currentLocation()); } YY_BREAK @@ -7108,744 +7108,744 @@ YY_RULE_SETUP case 289: YY_RULE_SETUP #line 900 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.currentLocation()); } YY_BREAK case 290: YY_RULE_SETUP #line 901 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_GET_NAMES(*driver.currentLocation()); } YY_BREAK case 291: YY_RULE_SETUP #line 902 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.currentLocation()); } YY_BREAK case 292: YY_RULE_SETUP #line 903 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_NAMES(*driver.currentLocation()); } YY_BREAK case 293: YY_RULE_SETUP #line 904 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.currentLocation()); } YY_BREAK case 294: YY_RULE_SETUP #line 905 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_POST_NAMES(*driver.currentLocation()); } YY_BREAK case 295: YY_RULE_SETUP #line 906 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.currentLocation()); } YY_BREAK case 296: YY_RULE_SETUP #line 907 "seclang-scanner.ll" -{ return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } +{ return p::make_VARIABLE_AUTH_TYPE(*driver.currentLocation()); } YY_BREAK case 297: YY_RULE_SETUP #line 908 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.currentLocation()); } YY_BREAK case 298: YY_RULE_SETUP #line 909 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } +{ return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.currentLocation()); } YY_BREAK case 299: YY_RULE_SETUP #line 910 "seclang-scanner.ll" -{ return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } +{ return p::make_VARIABLE_FULL_REQUEST(*driver.currentLocation()); } YY_BREAK case 300: YY_RULE_SETUP #line 911 "seclang-scanner.ll" -{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.currentLocation()); } YY_BREAK case 301: YY_RULE_SETUP #line 912 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } +{ return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.currentLocation()); } YY_BREAK case 302: YY_RULE_SETUP #line 913 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } +{ return p::make_VARIABLE_MATCHED_VAR(*driver.currentLocation()); } YY_BREAK case 303: YY_RULE_SETUP #line 914 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.currentLocation()); } YY_BREAK case 304: YY_RULE_SETUP #line 915 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.currentLocation()); } YY_BREAK case 305: YY_RULE_SETUP #line 916 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.currentLocation()); } YY_BREAK case 306: YY_RULE_SETUP #line 917 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.currentLocation()); } YY_BREAK case 307: YY_RULE_SETUP #line 918 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.currentLocation()); } YY_BREAK case 308: YY_RULE_SETUP #line 919 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.currentLocation()); } YY_BREAK case 309: YY_RULE_SETUP #line 920 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.currentLocation()); } YY_BREAK case 310: YY_RULE_SETUP #line 921 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_FILENAME(*driver.currentLocation()); } YY_BREAK case 311: YY_RULE_SETUP #line 922 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.currentLocation()); } YY_BREAK case 312: YY_RULE_SETUP #line 923 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.currentLocation()); } YY_BREAK case 313: YY_RULE_SETUP #line 924 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.currentLocation()); } YY_BREAK case 314: YY_RULE_SETUP #line 925 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.currentLocation()); } YY_BREAK case 315: YY_RULE_SETUP #line 926 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.currentLocation()); } YY_BREAK case 316: YY_RULE_SETUP #line 927 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.currentLocation()); } YY_BREAK case 317: YY_RULE_SETUP #line 928 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.currentLocation()); } YY_BREAK case 318: YY_RULE_SETUP #line 929 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.currentLocation()); } YY_BREAK case 319: YY_RULE_SETUP #line 930 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.currentLocation()); } YY_BREAK case 320: YY_RULE_SETUP #line 931 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_NAME(*driver.currentLocation()); } YY_BREAK case 321: YY_RULE_SETUP #line 932 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.currentLocation()); } YY_BREAK case 322: YY_RULE_SETUP #line 933 "seclang-scanner.ll" -{ return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.loc.back()); } +{ return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.currentLocation()); } YY_BREAK case 323: YY_RULE_SETUP #line 934 "seclang-scanner.ll" -{ return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.currentLocation()); } YY_BREAK case 324: YY_RULE_SETUP #line 935 "seclang-scanner.ll" -{ return p::make_VARIABLE_PATH_INFO(*driver.loc.back()); } +{ return p::make_VARIABLE_PATH_INFO(*driver.currentLocation()); } YY_BREAK case 325: YY_RULE_SETUP #line 936 "seclang-scanner.ll" -{ return p::make_VARIABLE_QUERY_STRING(*driver.loc.back()); } +{ return p::make_VARIABLE_QUERY_STRING(*driver.currentLocation()); } YY_BREAK case 326: YY_RULE_SETUP #line 937 "seclang-scanner.ll" -{ return p::make_VARIABLE_REMOTE_ADDR(*driver.loc.back()); } +{ return p::make_VARIABLE_REMOTE_ADDR(*driver.currentLocation()); } YY_BREAK case 327: YY_RULE_SETUP #line 938 "seclang-scanner.ll" -{ return p::make_VARIABLE_REMOTE_HOST(*driver.loc.back()); } +{ return p::make_VARIABLE_REMOTE_HOST(*driver.currentLocation()); } YY_BREAK case 328: YY_RULE_SETUP #line 939 "seclang-scanner.ll" -{ return p::make_VARIABLE_REMOTE_PORT(*driver.loc.back()); } +{ return p::make_VARIABLE_REMOTE_PORT(*driver.currentLocation()); } YY_BREAK case 329: YY_RULE_SETUP #line 940 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.loc.back()); } +{ return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.currentLocation()); } YY_BREAK case 330: YY_RULE_SETUP #line 941 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQBODY_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_REQBODY_ERROR(*driver.currentLocation()); } YY_BREAK case 331: YY_RULE_SETUP #line 942 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.loc.back()); } +{ return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.currentLocation()); } YY_BREAK case 332: YY_RULE_SETUP #line 943 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.currentLocation()); } YY_BREAK case 333: YY_RULE_SETUP #line 944 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.loc.back()); } +{ return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.currentLocation()); } YY_BREAK case 334: YY_RULE_SETUP #line 945 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_BASENAME(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_BASENAME(*driver.currentLocation()); } YY_BREAK case 335: YY_RULE_SETUP #line 946 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.currentLocation()); } YY_BREAK case 336: YY_RULE_SETUP #line 947 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_BODY(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_BODY(*driver.currentLocation()); } YY_BREAK case 337: YY_RULE_SETUP #line 948 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.currentLocation()); } YY_BREAK case 338: YY_RULE_SETUP #line 949 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.currentLocation()); } YY_BREAK case 339: YY_RULE_SETUP #line 950 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.currentLocation()); } YY_BREAK case 340: YY_RULE_SETUP #line 951 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_LINE(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_LINE(*driver.currentLocation()); } YY_BREAK case 341: YY_RULE_SETUP #line 952 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_METHOD(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_METHOD(*driver.currentLocation()); } YY_BREAK case 342: YY_RULE_SETUP #line 953 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.currentLocation()); } YY_BREAK case 343: YY_RULE_SETUP #line 954 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_URI_RAW(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_URI_RAW(*driver.currentLocation()); } YY_BREAK case 344: YY_RULE_SETUP #line 955 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_URI(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_URI(*driver.currentLocation()); } YY_BREAK case 345: YY_RULE_SETUP #line 956 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_BODY(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_BODY(*driver.currentLocation()); } YY_BREAK case 346: YY_RULE_SETUP #line 957 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.currentLocation()); } YY_BREAK case 347: YY_RULE_SETUP #line 958 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.currentLocation()); } YY_BREAK case 348: YY_RULE_SETUP #line 959 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.currentLocation()); } YY_BREAK case 349: YY_RULE_SETUP #line 960 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.currentLocation()); } YY_BREAK case 350: YY_RULE_SETUP #line 961 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.currentLocation()); } YY_BREAK case 351: YY_RULE_SETUP #line 962 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_STATUS(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_STATUS(*driver.currentLocation()); } YY_BREAK case 352: YY_RULE_SETUP #line 963 "seclang-scanner.ll" -{ return p::make_VARIABLE_SERVER_ADDR(*driver.loc.back()); } +{ return p::make_VARIABLE_SERVER_ADDR(*driver.currentLocation()); } YY_BREAK case 353: YY_RULE_SETUP #line 964 "seclang-scanner.ll" -{ return p::make_VARIABLE_SERVER_NAME(*driver.loc.back()); } +{ return p::make_VARIABLE_SERVER_NAME(*driver.currentLocation()); } YY_BREAK case 354: YY_RULE_SETUP #line 965 "seclang-scanner.ll" -{ return p::make_VARIABLE_SERVER_PORT(*driver.loc.back()); } +{ return p::make_VARIABLE_SERVER_PORT(*driver.currentLocation()); } YY_BREAK case 355: YY_RULE_SETUP #line 966 "seclang-scanner.ll" -{ return p::make_VARIABLE_SESSION_ID(*driver.loc.back()); } +{ return p::make_VARIABLE_SESSION_ID(*driver.currentLocation()); } YY_BREAK case 356: YY_RULE_SETUP #line 967 "seclang-scanner.ll" -{ return p::make_VARIABLE_UNIQUE_ID(*driver.loc.back()); } +{ return p::make_VARIABLE_UNIQUE_ID(*driver.currentLocation()); } YY_BREAK case 357: YY_RULE_SETUP #line 968 "seclang-scanner.ll" -{ return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.loc.back()); } +{ return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.currentLocation()); } YY_BREAK case 358: YY_RULE_SETUP #line 969 "seclang-scanner.ll" -{ return p::make_VARIABLE_USER_ID(*driver.loc.back()); } +{ return p::make_VARIABLE_USER_ID(*driver.currentLocation()); } YY_BREAK case 359: YY_RULE_SETUP #line 970 "seclang-scanner.ll" -{ return p::make_VARIABLE_WEB_APP_ID(*driver.loc.back()); } +{ return p::make_VARIABLE_WEB_APP_ID(*driver.currentLocation()); } YY_BREAK case 360: YY_RULE_SETUP #line 971 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS(*driver.currentLocation()); } YY_BREAK case 361: YY_RULE_SETUP #line 972 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.currentLocation()); } YY_BREAK case 362: YY_RULE_SETUP #line 973 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_GET(*driver.currentLocation()); } YY_BREAK case 363: YY_RULE_SETUP #line 974 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.currentLocation()); } YY_BREAK case 364: YY_RULE_SETUP #line 975 "seclang-scanner.ll" -{ return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } +{ return p::make_VARIABLE_ARGS_POST(*driver.currentLocation()); } YY_BREAK case 365: YY_RULE_SETUP #line 976 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.currentLocation()); } YY_BREAK case 366: YY_RULE_SETUP #line 977 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES_SIZES(*driver.currentLocation()); } YY_BREAK case 367: YY_RULE_SETUP #line 978 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.currentLocation()); } YY_BREAK case 368: YY_RULE_SETUP #line 979 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES_NAMES(*driver.currentLocation()); } YY_BREAK case 369: YY_RULE_SETUP #line 980 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.currentLocation()); } YY_BREAK case 370: YY_RULE_SETUP #line 981 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.currentLocation()); } YY_BREAK case 371: YY_RULE_SETUP #line 982 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.currentLocation()); } YY_BREAK case 372: YY_RULE_SETUP #line 983 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.currentLocation()); } YY_BREAK case 373: YY_RULE_SETUP #line 984 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.currentLocation()); } YY_BREAK case 374: YY_RULE_SETUP #line 985 "seclang-scanner.ll" -{ return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } +{ return p::make_VARIABLE_MATCHED_VARS(*driver.currentLocation()); } YY_BREAK case 375: YY_RULE_SETUP #line 986 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.currentLocation()); } YY_BREAK case 376: YY_RULE_SETUP #line 987 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES(*driver.currentLocation()); } YY_BREAK case 377: YY_RULE_SETUP #line 988 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.currentLocation()); } YY_BREAK case 378: YY_RULE_SETUP #line 989 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_COOKIES(*driver.currentLocation()); } YY_BREAK case 379: YY_RULE_SETUP #line 990 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.currentLocation()); } YY_BREAK case 380: YY_RULE_SETUP #line 991 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_HEADERS(*driver.currentLocation()); } YY_BREAK case 381: YY_RULE_SETUP #line 992 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.currentLocation()); } YY_BREAK case 382: YY_RULE_SETUP #line 993 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } +{ return p::make_VARIABLE_RESPONSE_HEADERS(*driver.currentLocation()); } YY_BREAK case 383: YY_RULE_SETUP #line 994 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.currentLocation()); } YY_BREAK case 384: YY_RULE_SETUP #line 995 "seclang-scanner.ll" -{ return p::make_VARIABLE_GEO(*driver.loc.back()); } +{ return p::make_VARIABLE_GEO(*driver.currentLocation()); } YY_BREAK case 385: YY_RULE_SETUP #line 996 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.currentLocation()); } YY_BREAK case 386: YY_RULE_SETUP #line 997 "seclang-scanner.ll" -{ return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.currentLocation()); } YY_BREAK case 387: YY_RULE_SETUP #line 998 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.currentLocation()); } YY_BREAK case 388: YY_RULE_SETUP #line 999 "seclang-scanner.ll" -{ return p::make_VARIABLE_RULE(*driver.loc.back()); } +{ return p::make_VARIABLE_RULE(*driver.currentLocation()); } YY_BREAK case 389: YY_RULE_SETUP #line 1000 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.currentLocation()); } YY_BREAK case 390: YY_RULE_SETUP #line 1001 "seclang-scanner.ll" -{ return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } +{ return p::make_VARIABLE_FILES_TMP_NAMES(*driver.currentLocation()); } YY_BREAK case 391: YY_RULE_SETUP #line 1002 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.currentLocation()); } YY_BREAK case 392: YY_RULE_SETUP #line 1003 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_XML(*driver.currentLocation()); } YY_BREAK case 393: YY_RULE_SETUP #line 1004 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.currentLocation()); } YY_BREAK case 394: YY_RULE_SETUP #line 1005 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_ENV(*driver.currentLocation()); } YY_BREAK case 395: YY_RULE_SETUP #line 1006 "seclang-scanner.ll" -{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } +{ BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.currentLocation()); } YY_BREAK case 396: YY_RULE_SETUP #line 1007 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_BLD(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_BLD(yytext, *driver.currentLocation()); } YY_BREAK case 397: YY_RULE_SETUP #line 1008 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_DUR(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_DUR(yytext, *driver.currentLocation()); } YY_BREAK case 398: YY_RULE_SETUP #line 1009 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_HSV(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_HSV(yytext, *driver.currentLocation()); } YY_BREAK case 399: YY_RULE_SETUP #line 1010 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.currentLocation()); } YY_BREAK case 400: YY_RULE_SETUP #line 1011 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.currentLocation()); } YY_BREAK case 401: YY_RULE_SETUP #line 1012 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.currentLocation()); } YY_BREAK case 402: YY_RULE_SETUP #line 1013 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.currentLocation()); } YY_BREAK case 403: YY_RULE_SETUP #line 1014 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.currentLocation()); } YY_BREAK case 404: YY_RULE_SETUP #line 1015 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.currentLocation()); } YY_BREAK case 405: YY_RULE_SETUP #line 1016 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.currentLocation()); } YY_BREAK case 406: YY_RULE_SETUP #line 1017 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.currentLocation()); } YY_BREAK case 407: YY_RULE_SETUP #line 1018 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME(yytext, *driver.currentLocation()); } YY_BREAK case 408: YY_RULE_SETUP #line 1019 "seclang-scanner.ll" -{ return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.loc.back()); } +{ return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.currentLocation()); } YY_BREAK case 409: YY_RULE_SETUP #line 1022 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.loc.back(), "");} +{ driver.error (*driver.currentLocation(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.currentLocation(), "");} YY_BREAK case 410: YY_RULE_SETUP #line 1023 "seclang-scanner.ll" -{ return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } +{ return p::make_VARIABLE_GLOBAL(*driver.currentLocation()); } YY_BREAK case 411: YY_RULE_SETUP #line 1024 "seclang-scanner.ll" -{ return p::make_VARIABLE_IP(*driver.loc.back()); } +{ return p::make_VARIABLE_IP(*driver.currentLocation()); } YY_BREAK case 412: YY_RULE_SETUP #line 1025 "seclang-scanner.ll" -{ return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } +{ return p::make_VARIABLE_RESOURCE(*driver.currentLocation()); } YY_BREAK case 413: YY_RULE_SETUP #line 1026 "seclang-scanner.ll" -{ return p::make_VARIABLE_SESSION(*driver.loc.back()); } +{ return p::make_VARIABLE_SESSION(*driver.currentLocation()); } YY_BREAK case 414: YY_RULE_SETUP #line 1027 "seclang-scanner.ll" -{ return p::make_VARIABLE_STATUS(*driver.loc.back()); } +{ return p::make_VARIABLE_STATUS(*driver.currentLocation()); } YY_BREAK case 415: YY_RULE_SETUP #line 1028 "seclang-scanner.ll" -{ return p::make_VARIABLE_STATUS_LINE(*driver.loc.back()); } +{ return p::make_VARIABLE_STATUS_LINE(*driver.currentLocation()); } YY_BREAK case 416: YY_RULE_SETUP #line 1029 "seclang-scanner.ll" -{ return p::make_VARIABLE_TX(*driver.loc.back()); } +{ return p::make_VARIABLE_TX(*driver.currentLocation()); } YY_BREAK case 417: YY_RULE_SETUP #line 1030 "seclang-scanner.ll" -{ return p::make_VARIABLE_USER(*driver.loc.back()); } +{ return p::make_VARIABLE_USER(*driver.currentLocation()); } YY_BREAK case 418: YY_RULE_SETUP #line 1034 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.currentLocation()); } YY_BREAK case 419: YY_RULE_SETUP #line 1035 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_IP(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_IP(*driver.currentLocation()); } YY_BREAK case 420: YY_RULE_SETUP #line 1036 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.currentLocation()); } YY_BREAK case 421: YY_RULE_SETUP #line 1037 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_SESSION(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_SESSION(*driver.currentLocation()); } YY_BREAK case 422: YY_RULE_SETUP #line 1038 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_TX(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_TX(*driver.currentLocation()); } YY_BREAK case 423: YY_RULE_SETUP #line 1039 "seclang-scanner.ll" -{ BEGINX_(); return p::make_VARIABLE_USER(*driver.loc.back()); } +{ BEGINX_(); return p::make_VARIABLE_USER(*driver.currentLocation()); } YY_BREAK case 424: YY_RULE_SETUP #line 1044 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.currentLocation()); } YY_BREAK case 425: YY_RULE_SETUP #line 1045 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.currentLocation()); } YY_BREAK case 426: YY_RULE_SETUP #line 1046 "seclang-scanner.ll" -{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } +{ BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.currentLocation()); } YY_BREAK case 427: /* rule 427 can match eol */ YY_RULE_SETUP #line 1047 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 428: /* rule 428 can match eol */ YY_RULE_SETUP #line 1048 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 429: /* rule 429 can match eol */ YY_RULE_SETUP #line 1049 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 430: /* rule 430 can match eol */ YY_RULE_SETUP #line 1050 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 431: /* rule 431 can match eol */ YY_RULE_SETUP #line 1051 "seclang-scanner.ll" -{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK case 432: /* rule 432 can match eol */ YY_RULE_SETUP #line 1052 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK case 433: /* rule 433 can match eol */ YY_RULE_SETUP #line 1054 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 434: /* rule 434 can match eol */ YY_RULE_SETUP #line 1055 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 435: YY_RULE_SETUP @@ -7868,49 +7868,49 @@ case 438: /* rule 438 can match eol */ YY_RULE_SETUP #line 1063 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 439: /* rule 439 can match eol */ YY_RULE_SETUP #line 1064 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 440: /* rule 440 can match eol */ YY_RULE_SETUP #line 1065 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 441: /* rule 441 can match eol */ YY_RULE_SETUP #line 1066 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 442: /* rule 442 can match eol */ YY_RULE_SETUP #line 1067 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 443: /* rule 443 can match eol */ YY_RULE_SETUP #line 1068 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } +{ BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.currentLocation()); } YY_BREAK case 444: /* rule 444 can match eol */ YY_RULE_SETUP #line 1070 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } YY_BREAK case 445: /* rule 445 can match eol */ YY_RULE_SETUP #line 1071 "seclang-scanner.ll" -{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +{ BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } YY_BREAK case 446: YY_RULE_SETUP @@ -7920,233 +7920,233 @@ YY_RULE_SETUP case 447: YY_RULE_SETUP #line 1074 "seclang-scanner.ll" -{ return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +{ return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } YY_BREAK case 448: YY_RULE_SETUP #line 1080 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.currentLocation()); } YY_BREAK case 449: YY_RULE_SETUP #line 1081 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.currentLocation()); } YY_BREAK case 450: YY_RULE_SETUP #line 1082 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.currentLocation()); } YY_BREAK case 451: YY_RULE_SETUP #line 1083 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.currentLocation()); } YY_BREAK case 452: YY_RULE_SETUP #line 1084 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.currentLocation()); } YY_BREAK case 453: YY_RULE_SETUP #line 1085 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.currentLocation()); } YY_BREAK case 454: YY_RULE_SETUP #line 1088 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.currentLocation()); } YY_BREAK case 455: YY_RULE_SETUP #line 1089 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.currentLocation()); } YY_BREAK case 456: YY_RULE_SETUP #line 1090 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.currentLocation()); } YY_BREAK case 457: YY_RULE_SETUP #line 1091 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.currentLocation()); } YY_BREAK case 458: YY_RULE_SETUP #line 1092 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.currentLocation()); } YY_BREAK case 459: YY_RULE_SETUP #line 1093 "seclang-scanner.ll" -{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } +{ BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.currentLocation()); } YY_BREAK case 460: YY_RULE_SETUP #line 1097 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.currentLocation()); } YY_BREAK case 461: YY_RULE_SETUP #line 1098 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.currentLocation()); } YY_BREAK case 462: YY_RULE_SETUP #line 1099 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.currentLocation()); } YY_BREAK case 463: YY_RULE_SETUP #line 1100 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.currentLocation()); } YY_BREAK case 464: YY_RULE_SETUP #line 1101 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.currentLocation()); } YY_BREAK case 465: YY_RULE_SETUP #line 1102 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.currentLocation()); } YY_BREAK case 466: YY_RULE_SETUP #line 1103 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.currentLocation()); } YY_BREAK case 467: YY_RULE_SETUP #line 1104 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.currentLocation()); } YY_BREAK case 468: YY_RULE_SETUP #line 1105 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.currentLocation()); } YY_BREAK case 469: YY_RULE_SETUP #line 1106 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.currentLocation()); } YY_BREAK case 470: YY_RULE_SETUP #line 1107 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.currentLocation()); } YY_BREAK case 471: YY_RULE_SETUP #line 1108 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.currentLocation()); } YY_BREAK case 472: YY_RULE_SETUP #line 1109 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.currentLocation()); } YY_BREAK case 473: YY_RULE_SETUP #line 1110 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.currentLocation()); } YY_BREAK case 474: YY_RULE_SETUP #line 1111 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.currentLocation()); } YY_BREAK case 475: YY_RULE_SETUP #line 1112 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.currentLocation()); } YY_BREAK case 476: YY_RULE_SETUP #line 1113 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.currentLocation()); } YY_BREAK case 477: YY_RULE_SETUP #line 1114 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.currentLocation()); } YY_BREAK case 478: YY_RULE_SETUP #line 1115 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.currentLocation()); } YY_BREAK case 479: YY_RULE_SETUP #line 1116 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.currentLocation()); } YY_BREAK case 480: YY_RULE_SETUP #line 1117 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.currentLocation()); } YY_BREAK case 481: YY_RULE_SETUP #line 1118 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.currentLocation()); } YY_BREAK case 482: YY_RULE_SETUP #line 1119 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.currentLocation()); } YY_BREAK case 483: YY_RULE_SETUP #line 1120 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.currentLocation()); } YY_BREAK case 484: YY_RULE_SETUP #line 1121 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.currentLocation()); } YY_BREAK case 485: YY_RULE_SETUP #line 1122 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.currentLocation()); } YY_BREAK case 486: YY_RULE_SETUP #line 1123 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.currentLocation()); } YY_BREAK case 487: YY_RULE_SETUP #line 1124 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.currentLocation()); } YY_BREAK case 488: YY_RULE_SETUP #line 1125 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.currentLocation()); } YY_BREAK case 489: YY_RULE_SETUP #line 1126 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.currentLocation()); } YY_BREAK case 490: YY_RULE_SETUP #line 1127 "seclang-scanner.ll" -{ BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.loc.back()); } +{ BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.currentLocation()); } YY_BREAK case 491: YY_RULE_SETUP #line 1129 "seclang-scanner.ll" -{ return p::make_NOT(*driver.loc.back()); } +{ return p::make_NOT(*driver.currentLocation()); } YY_BREAK case 492: YY_RULE_SETUP @@ -8178,7 +8178,7 @@ case 496: /* rule 496 can match eol */ YY_RULE_SETUP #line 1144 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -8191,7 +8191,7 @@ case 498: /* rule 498 can match eol */ YY_RULE_SETUP #line 1149 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -8216,7 +8216,7 @@ case 502: /* rule 502 can match eol */ YY_RULE_SETUP #line 1158 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -8229,7 +8229,7 @@ case 504: /* rule 504 can match eol */ YY_RULE_SETUP #line 1163 "seclang-scanner.ll" -{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{ return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } YY_BREAK @@ -8254,73 +8254,73 @@ case 508: /* rule 508 can match eol */ YY_RULE_SETUP #line 1175 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 509: /* rule 509 can match eol */ YY_RULE_SETUP #line 1176 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 510: /* rule 510 can match eol */ YY_RULE_SETUP #line 1177 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 511: /* rule 511 can match eol */ YY_RULE_SETUP #line 1178 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 512: /* rule 512 can match eol */ YY_RULE_SETUP #line 1180 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 513: /* rule 513 can match eol */ YY_RULE_SETUP #line 1181 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 514: /* rule 514 can match eol */ YY_RULE_SETUP #line 1182 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 515: /* rule 515 can match eol */ YY_RULE_SETUP #line 1183 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 516: /* rule 516 can match eol */ YY_RULE_SETUP #line 1185 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 517: /* rule 517 can match eol */ YY_RULE_SETUP #line 1186 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 518: /* rule 518 can match eol */ YY_RULE_SETUP #line 1187 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 519: /* rule 519 can match eol */ YY_RULE_SETUP #line 1188 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } YY_BREAK case 520: YY_RULE_SETUP @@ -8331,37 +8331,37 @@ case 521: /* rule 521 can match eol */ YY_RULE_SETUP #line 1192 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 522: /* rule 522 can match eol */ YY_RULE_SETUP #line 1193 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 523: /* rule 523 can match eol */ YY_RULE_SETUP #line 1195 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 524: /* rule 524 can match eol */ YY_RULE_SETUP #line 1196 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 525: /* rule 525 can match eol */ YY_RULE_SETUP #line 1197 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 526: /* rule 526 can match eol */ YY_RULE_SETUP #line 1198 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } YY_BREAK case 527: YY_RULE_SETUP @@ -8379,13 +8379,13 @@ case 529: /* rule 529 can match eol */ YY_RULE_SETUP #line 1206 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 530: /* rule 530 can match eol */ YY_RULE_SETUP #line 1207 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK @@ -8393,19 +8393,19 @@ case 531: /* rule 531 can match eol */ YY_RULE_SETUP #line 1211 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 532: /* rule 532 can match eol */ YY_RULE_SETUP #line 1212 "seclang-scanner.ll" -{ driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 533: /* rule 533 can match eol */ YY_RULE_SETUP #line 1213 "seclang-scanner.ll" -{ BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +{ BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } YY_BREAK case 534: @@ -8416,17 +8416,17 @@ YY_RULE_SETUP case 535: YY_RULE_SETUP #line 1220 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +{ driver.error (*driver.currentLocation(), "Invalid input: ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } YY_BREAK case 536: YY_RULE_SETUP #line 1221 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +{ driver.error (*driver.currentLocation(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } YY_BREAK case 537: YY_RULE_SETUP #line 1222 "seclang-scanner.ll" -{ driver.error (*driver.loc.back(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +{ driver.error (*driver.currentLocation(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(EXPECTING_ACTION_PREDICATE_VARIABLE): @@ -8472,39 +8472,37 @@ case YY_STATE_EOF(SETVAR_ACTION_QUOTED_WAITING_CONTENT): yypop_buffer_state(); if (!YY_CURRENT_BUFFER) { - return p::make_END(*driver.loc.back()); + return p::make_END(*driver.currentLocation()); } - yy::location *l = driver.loc.back(); - driver.loc.pop_back(); - delete l; + driver.popLocation(); } YY_BREAK case 538: YY_RULE_SETUP -#line 1241 "seclang-scanner.ll" +#line 1239 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; - std::string fi = modsecurity::utils::find_resource(file, *driver.loc.back()->end.filename, &err); + std::string fi = modsecurity::utils::find_resource(file, driver.currentLocation()->getFileName(), &err); if (fi.empty() == true) { BEGIN(INITIAL); - driver.error (*driver.loc.back(), "", file + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", file + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } std::list files = modsecurity::utils::expandEnv(fi, 0); files.reverse(); for (auto& s: files) { std::string err; - std::string f = modsecurity::utils::find_resource(s, *driver.loc.back()->end.filename, &err); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(f); + std::string f = modsecurity::utils::find_resource(s, driver.currentLocation()->getFileName(), &err); + driver.newLocation(f); + yyin = fopen(f.c_str(), "r" ); if (!yyin) { BEGIN(INITIAL); - driver.loc.pop_back(); - driver.error (*driver.loc.back(), "", s + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.popLocation(); + driver.error (*driver.currentLocation(), "", s + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE )); } @@ -8512,31 +8510,30 @@ YY_RULE_SETUP YY_BREAK case 539: YY_RULE_SETUP -#line 1268 "seclang-scanner.ll" +#line 1266 "seclang-scanner.ll" { std::string err; const char *file = strchr(yytext, ' ') + 1; char *f = strdup(file + 1); f[strlen(f)-1] = '\0'; - std::string fi = modsecurity::utils::find_resource(f, *driver.loc.back()->end.filename, &err); + std::string fi = modsecurity::utils::find_resource(f, driver.currentLocation()->getFileName(), &err); if (fi.empty() == true) { BEGIN(INITIAL); - driver.error (*driver.loc.back(), "", file + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", file + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } std::list files = modsecurity::utils::expandEnv(fi, 0); files.reverse(); for (auto& s: files) { - std::string f = modsecurity::utils::find_resource(s, *driver.loc.back()->end.filename, &err); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(f); + std::string f = modsecurity::utils::find_resource(s, driver.currentLocation()->getFileName(), &err); + driver.newLocation(f); yyin = fopen(f.c_str(), "r" ); if (!yyin) { BEGIN(INITIAL); - driver.loc.pop_back(); - driver.error (*driver.loc.back(), "", s + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.popLocation(); + driver.error (*driver.currentLocation(), "", s + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE )); } @@ -8546,7 +8543,7 @@ YY_RULE_SETUP case 540: /* rule 540 can match eol */ YY_RULE_SETUP -#line 1298 "seclang-scanner.ll" +#line 1295 "seclang-scanner.ll" { HttpsClient c; std::string key; @@ -8554,15 +8551,15 @@ YY_RULE_SETUP std::vector conf = modsecurity::utils::string::split(yytext, ' '); if (conf.size() < 2) { - driver.error (*driver.loc.back(), "", "SecRemoteRules demands a key and a URI"); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", "SecRemoteRules demands a key and a URI"); + throw p::syntax_error(*driver.currentLocation(), ""); } key = conf[1]; url = conf[2]; c.setKey(key); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(url); + driver.newLocation(url); + YY_BUFFER_STATE temp = YY_CURRENT_BUFFER; yypush_buffer_state(temp); @@ -8574,8 +8571,8 @@ YY_RULE_SETUP /** TODO: Implement the server logging mechanism. */ } if (driver.m_remoteRulesActionOnFailed == RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction) { - driver.error (*driver.loc.back(), "", yytext + std::string(" - Failed to download: ") + c.error); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", yytext + std::string(" - Failed to download: ") + c.error); + throw p::syntax_error(*driver.currentLocation(), ""); } } @@ -8584,10 +8581,10 @@ YY_RULE_SETUP YY_BREAK case 541: YY_RULE_SETUP -#line 1334 "seclang-scanner.ll" +#line 1331 "seclang-scanner.ll" ECHO; YY_BREAK -#line 8590 "seclang-scanner.cc" +#line 8587 "seclang-scanner.cc" case YY_END_OF_BUFFER: { @@ -9692,7 +9689,7 @@ void yyfree (void * ptr ) /* %ok-for-header */ -#line 1334 "seclang-scanner.ll" +#line 1331 "seclang-scanner.ll" namespace modsecurity { @@ -9708,6 +9705,7 @@ bool Driver::scan_begin () { } void Driver::scan_end () { + yy_delete_buffer(YY_CURRENT_BUFFER); yylex_destroy(); BEGIN(INITIAL); } diff --git a/src/parser/seclang-scanner.ll b/src/parser/seclang-scanner.ll index 2383106d..56acbab3 100755 --- a/src/parser/seclang-scanner.ll +++ b/src/parser/seclang-scanner.ll @@ -491,7 +491,7 @@ EQUALS_MINUS (?i:=\-) %{ // Code run each time a pattern is matched. - # define YY_USER_ACTION driver.loc.back()->columns (yyleng); + # define YY_USER_ACTION driver.currentLocation()->columns (yyleng); %} @@ -499,147 +499,147 @@ EQUALS_MINUS (?i:=\-) %{ // Code run each time yylex is called. - driver.loc.back()->step(); + driver.currentLocation()->step(); %} { -{ACTION_APPEND} { return p::make_ACTION_APPEND(yytext, *driver.loc.back()); } -{ACTION_BLOCK} { return p::make_ACTION_BLOCK(yytext, *driver.loc.back()); } -{ACTION_CAPTURE} { return p::make_ACTION_CAPTURE(yytext, *driver.loc.back()); } -{ACTION_CHAIN} { return p::make_ACTION_CHAIN(yytext, *driver.loc.back()); } -{ACTION_DENY} { return p::make_ACTION_DENY(yytext, *driver.loc.back()); } -{ACTION_DEPRECATE_VAR} { return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.loc.back()); } -{ACTION_DROP} { return p::make_ACTION_DROP(yytext, *driver.loc.back()); } -{ACTION_ID} { return p::make_ACTION_ID(yytext, *driver.loc.back()); } -{ACTION_LOG} { return p::make_ACTION_LOG(yytext, *driver.loc.back()); } -{ACTION_MULTI_MATCH} { return p::make_ACTION_MULTI_MATCH(yytext, *driver.loc.back()); } -{ACTION_NO_AUDIT_LOG} { return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.loc.back()); } -{ACTION_NO_LOG} { return p::make_ACTION_NO_LOG(yytext, *driver.loc.back()); } -{ACTION_PASS} { return p::make_ACTION_PASS(yytext, *driver.loc.back()); } -{ACTION_PAUSE} { return p::make_ACTION_PAUSE(yytext, *driver.loc.back()); } -{ACTION_PREPEND} { return p::make_ACTION_PREPEND(yytext, *driver.loc.back()); } -{ACTION_PROXY} { return p::make_ACTION_PROXY(yytext, *driver.loc.back()); } -{ACTION_SANITISE_ARG} { return p::make_ACTION_SANITISE_ARG(yytext, *driver.loc.back()); } -{ACTION_SANITISE_MATCHED} { return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.loc.back()); } -{ACTION_SANITISE_MATCHED_BYTES} { return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.loc.back()); } -{ACTION_SANITISE_REQUEST_HEADER} { return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.loc.back()); } -{ACTION_SANITISE_RESPONSE_HEADER} { return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.loc.back()); } -{ACTION_SETRSC}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.loc.back()); } +{ACTION_APPEND} { return p::make_ACTION_APPEND(yytext, *driver.currentLocation()); } +{ACTION_BLOCK} { return p::make_ACTION_BLOCK(yytext, *driver.currentLocation()); } +{ACTION_CAPTURE} { return p::make_ACTION_CAPTURE(yytext, *driver.currentLocation()); } +{ACTION_CHAIN} { return p::make_ACTION_CHAIN(yytext, *driver.currentLocation()); } +{ACTION_DENY} { return p::make_ACTION_DENY(yytext, *driver.currentLocation()); } +{ACTION_DEPRECATE_VAR} { return p::make_ACTION_DEPRECATE_VAR(yytext, *driver.currentLocation()); } +{ACTION_DROP} { return p::make_ACTION_DROP(yytext, *driver.currentLocation()); } +{ACTION_ID} { return p::make_ACTION_ID(yytext, *driver.currentLocation()); } +{ACTION_LOG} { return p::make_ACTION_LOG(yytext, *driver.currentLocation()); } +{ACTION_MULTI_MATCH} { return p::make_ACTION_MULTI_MATCH(yytext, *driver.currentLocation()); } +{ACTION_NO_AUDIT_LOG} { return p::make_ACTION_NO_AUDIT_LOG(yytext, *driver.currentLocation()); } +{ACTION_NO_LOG} { return p::make_ACTION_NO_LOG(yytext, *driver.currentLocation()); } +{ACTION_PASS} { return p::make_ACTION_PASS(yytext, *driver.currentLocation()); } +{ACTION_PAUSE} { return p::make_ACTION_PAUSE(yytext, *driver.currentLocation()); } +{ACTION_PREPEND} { return p::make_ACTION_PREPEND(yytext, *driver.currentLocation()); } +{ACTION_PROXY} { return p::make_ACTION_PROXY(yytext, *driver.currentLocation()); } +{ACTION_SANITISE_ARG} { return p::make_ACTION_SANITISE_ARG(yytext, *driver.currentLocation()); } +{ACTION_SANITISE_MATCHED} { return p::make_ACTION_SANITISE_MATCHED(yytext, *driver.currentLocation()); } +{ACTION_SANITISE_MATCHED_BYTES} { return p::make_ACTION_SANITISE_MATCHED_BYTES(yytext, *driver.currentLocation()); } +{ACTION_SANITISE_REQUEST_HEADER} { return p::make_ACTION_SANITISE_REQUEST_HEADER(yytext, *driver.currentLocation()); } +{ACTION_SANITISE_RESPONSE_HEADER} { return p::make_ACTION_SANITISE_RESPONSE_HEADER(yytext, *driver.currentLocation()); } +{ACTION_SETRSC}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETRSC(yytext, *driver.currentLocation()); } -{ACTION_STATUS} { return p::make_ACTION_STATUS(yytext, *driver.loc.back()); } -{ACTION_ACCURACY}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } -{ACTION_ACCURACY}:{FREE_TEXT_QUOTE} { return p::make_ACTION_ACCURACY(yytext, *driver.loc.back()); } -{ACTION_ALLOW} { return p::make_ACTION_ALLOW(yytext, *driver.loc.back()); } -{ACTION_AUDIT_LOG} { return p::make_ACTION_AUDIT_LOG(yytext, *driver.loc.back()); } -{ACTION_CTL_AUDIT_ENGINE}= { return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.loc.back()); } -{ACTION_CTL_AUDIT_LOG_PARTS}=[+|-]{AUDIT_PARTS} { return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.loc.back()); } -{ACTION_CTL_BDY_JSON} { return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.loc.back()); } -{ACTION_CTL_BDY_XML} { return p::make_ACTION_CTL_BDY_XML(yytext, *driver.loc.back()); } -{ACTION_CTL_BDY_URLENCODED} { return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.loc.back()); } -{ACTION_CTL_FORCE_REQ_BODY_VAR}= { return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.loc.back()); } -{ACTION_CTL_REQUEST_BODY_ACCESS}= { return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.loc.back()); } -{ACTION_CTL_RULE_ENGINE}= { return p::make_ACTION_CTL_RULE_ENGINE(*driver.loc.back()); } -{ACTION_CTL_RULE_REMOVE_BY_ID}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.loc.back()); } -{ACTION_CTL_RULE_REMOVE_BY_TAG}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.loc.back()); } -{ACTION_CTL_RULE_REMOVE_TARGET_BY_ID}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.loc.back()); } -{ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.loc.back()); } -{ACTION_EXEC}:'{VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } -{ACTION_EXEC}:{VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXEC(yytext, *driver.loc.back()); } -{ACTION_EXPIRE_VAR}:'{VAR_FREE_TEXT_QUOTE}={VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } -{ACTION_EXPIRE_VAR}:'{VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } -{ACTION_EXPIRE_VAR}:{VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } -{ACTION_EXPIRE_VAR}:{VAR_FREE_TEXT_SPACE}={VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.loc.back()); } -{ACTION_INITCOL}:{COL_NAME}= { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.loc.back()); } -{ACTION_MATURITY}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } -{ACTION_MATURITY}:{FREE_TEXT_QUOTE} { return p::make_ACTION_MATURITY(yytext, *driver.loc.back()); } -{ACTION_MSG}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.loc.back()); } -{ACTION_PHASE} { return p::make_ACTION_PHASE(yytext, *driver.loc.back()); } -{ACTION_REDIRECT}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.loc.back()); } -{ACTION_REV}:'{FREE_TEXT_QUOTE_COMMA}' { return p::make_ACTION_REV(yytext, *driver.loc.back()); } -{ACTION_REV}:{FREE_TEXT_QUOTE_COMMA} { return p::make_ACTION_REV(yytext, *driver.loc.back()); } -{ACTION_SETENV}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.loc.back()); } -{ACTION_SETSID}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.loc.back()); } -{ACTION_SETUID}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.loc.back()); } +{ACTION_STATUS} { return p::make_ACTION_STATUS(yytext, *driver.currentLocation()); } +{ACTION_ACCURACY}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_ACCURACY(yytext, *driver.currentLocation()); } +{ACTION_ACCURACY}:{FREE_TEXT_QUOTE} { return p::make_ACTION_ACCURACY(yytext, *driver.currentLocation()); } +{ACTION_ALLOW} { return p::make_ACTION_ALLOW(yytext, *driver.currentLocation()); } +{ACTION_AUDIT_LOG} { return p::make_ACTION_AUDIT_LOG(yytext, *driver.currentLocation()); } +{ACTION_CTL_AUDIT_ENGINE}= { return p::make_ACTION_CTL_AUDIT_ENGINE(yytext, *driver.currentLocation()); } +{ACTION_CTL_AUDIT_LOG_PARTS}=[+|-]{AUDIT_PARTS} { return p::make_ACTION_CTL_AUDIT_LOG_PARTS(yytext, *driver.currentLocation()); } +{ACTION_CTL_BDY_JSON} { return p::make_ACTION_CTL_BDY_JSON(yytext, *driver.currentLocation()); } +{ACTION_CTL_BDY_XML} { return p::make_ACTION_CTL_BDY_XML(yytext, *driver.currentLocation()); } +{ACTION_CTL_BDY_URLENCODED} { return p::make_ACTION_CTL_BDY_URLENCODED(yytext, *driver.currentLocation()); } +{ACTION_CTL_FORCE_REQ_BODY_VAR}= { return p::make_ACTION_CTL_FORCE_REQ_BODY_VAR(yytext, *driver.currentLocation()); } +{ACTION_CTL_REQUEST_BODY_ACCESS}= { return p::make_ACTION_CTL_REQUEST_BODY_ACCESS(yytext, *driver.currentLocation()); } +{ACTION_CTL_RULE_ENGINE}= { return p::make_ACTION_CTL_RULE_ENGINE(*driver.currentLocation()); } +{ACTION_CTL_RULE_REMOVE_BY_ID}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_BY_ID(yytext, *driver.currentLocation()); } +{ACTION_CTL_RULE_REMOVE_BY_TAG}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_BY_TAG(yytext, *driver.currentLocation()); } +{ACTION_CTL_RULE_REMOVE_TARGET_BY_ID}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_ID(yytext, *driver.currentLocation()); } +{ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG}[=]{REMOVE_RULE_BY} { return p::make_ACTION_CTL_RULE_REMOVE_TARGET_BY_TAG(yytext, *driver.currentLocation()); } +{ACTION_EXEC}:'{VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXEC(yytext, *driver.currentLocation()); } +{ACTION_EXEC}:{VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXEC(yytext, *driver.currentLocation()); } +{ACTION_EXPIRE_VAR}:'{VAR_FREE_TEXT_QUOTE}={VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } +{ACTION_EXPIRE_VAR}:'{VAR_FREE_TEXT_QUOTE}' { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } +{ACTION_EXPIRE_VAR}:{VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } +{ACTION_EXPIRE_VAR}:{VAR_FREE_TEXT_SPACE}={VAR_FREE_TEXT_SPACE_COMMA} { return p::make_ACTION_EXPIRE_VAR(yytext, *driver.currentLocation()); } +{ACTION_INITCOL}:{COL_NAME}= { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_INITCOL(yytext, *driver.currentLocation()); } +{ACTION_MATURITY}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_MATURITY(yytext, *driver.currentLocation()); } +{ACTION_MATURITY}:{FREE_TEXT_QUOTE} { return p::make_ACTION_MATURITY(yytext, *driver.currentLocation()); } +{ACTION_MSG}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_MSG(yytext, *driver.currentLocation()); } +{ACTION_PHASE} { return p::make_ACTION_PHASE(yytext, *driver.currentLocation()); } +{ACTION_REDIRECT}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_REDIRECT(yytext, *driver.currentLocation()); } +{ACTION_REV}:'{FREE_TEXT_QUOTE_COMMA}' { return p::make_ACTION_REV(yytext, *driver.currentLocation()); } +{ACTION_REV}:{FREE_TEXT_QUOTE_COMMA} { return p::make_ACTION_REV(yytext, *driver.currentLocation()); } +{ACTION_SETENV}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETENV(yytext, *driver.currentLocation()); } +{ACTION_SETSID}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETSID(yytext, *driver.currentLocation()); } +{ACTION_SETUID}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_SETUID(yytext, *driver.currentLocation()); } -{ACTION_SETVAR}:' { BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } -{ACTION_SETVAR}: { BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.loc.back()); } +{ACTION_SETVAR}:' { BEGIN(SETVAR_ACTION_QUOTED); return p::make_ACTION_SETVAR(*driver.currentLocation()); } +{ACTION_SETVAR}: { BEGIN(SETVAR_ACTION_NONQUOTED); return p::make_ACTION_SETVAR(*driver.currentLocation()); } -{ACTION_SEVERITY}:'{ACTION_SEVERITY_VALUE}' { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } -{ACTION_SEVERITY}:{ACTION_SEVERITY_VALUE} { return p::make_ACTION_SEVERITY(yytext, *driver.loc.back()); } -{ACTION_SKIP_AFTER}:{FREE_TEXT_SPACE_COMMA_QUOTE} { return p::make_ACTION_SKIP_AFTER(yytext, *driver.loc.back()); } -{ACTION_SKIP}:{CONFIG_VALUE_NUMBER} { return p::make_ACTION_SKIP(yytext, *driver.loc.back()); } -{ACTION_TAG}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.loc.back()); } -{ACTION_VER}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_VER(yytext, *driver.loc.back()); } -{ACTION_XMLNS}:{FREE_TEXT_SPACE_COMMA_QUOTE} { return p::make_ACTION_XMLNS(yytext, *driver.loc.back()); } +{ACTION_SEVERITY}:'{ACTION_SEVERITY_VALUE}' { return p::make_ACTION_SEVERITY(yytext, *driver.currentLocation()); } +{ACTION_SEVERITY}:{ACTION_SEVERITY_VALUE} { return p::make_ACTION_SEVERITY(yytext, *driver.currentLocation()); } +{ACTION_SKIP_AFTER}:{FREE_TEXT_SPACE_COMMA_QUOTE} { return p::make_ACTION_SKIP_AFTER(yytext, *driver.currentLocation()); } +{ACTION_SKIP}:{CONFIG_VALUE_NUMBER} { return p::make_ACTION_SKIP(yytext, *driver.currentLocation()); } +{ACTION_TAG}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_TAG(yytext, *driver.currentLocation()); } +{ACTION_VER}:'{FREE_TEXT_QUOTE}' { return p::make_ACTION_VER(yytext, *driver.currentLocation()); } +{ACTION_XMLNS}:{FREE_TEXT_SPACE_COMMA_QUOTE} { return p::make_ACTION_XMLNS(yytext, *driver.currentLocation()); } -{ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_PARITY_ODD_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_SQL_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_BASE_64_ENCODE} { return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_BASE_64_DECODE} { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_BASE_64_DECODE_EXT} { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_CMD_LINE} { return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_SHA1} { return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_MD5} { return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE} { return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_HEX_ENCODE} { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_LOWERCASE} { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_PHP_ARGS_NAMES} { return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_UPPERCASE} { return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_URL_ENCODE} { return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_URL_DECODE_UNI} { return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_URL_DECODE} { return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_NONE} { return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_COMPRESS_WHITESPACE} { return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REMOVE_WHITESPACE} { return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REPLACE_NULLS} { return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REMOVE_NULLS} { return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_HTML_ENTITY_DECODE} { return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_JS_DECODE} { return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_CSS_DECODE} { return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_TRIM} { return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_TRIM_LEFT} { return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_TRIM_RIGHT} { return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_NORMALISE_PATH_WIN} { return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_NORMALISE_PATH} { return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_LENGTH} { return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_UTF8_TO_UNICODE} { return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR} { return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REMOVE_COMMENTS} { return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.loc.back()); } -{ACTION_TRANSFORMATION_REPLACE_COMMENTS} { return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.loc.back()); } -{ACTION_LOG_DATA}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.loc.back()); } +{ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_ZERO_7_BIT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_PARITY_ODD_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_ODD_7_BIT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT} { return p::make_ACTION_TRANSFORMATION_PARITY_EVEN_7_BIT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_SQL_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_SQL_HEX_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_BASE_64_ENCODE} { return p::make_ACTION_TRANSFORMATION_BASE_64_ENCODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_BASE_64_DECODE} { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_BASE_64_DECODE_EXT} { return p::make_ACTION_TRANSFORMATION_BASE_64_DECODE_EXT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_CMD_LINE} { return p::make_ACTION_TRANSFORMATION_CMD_LINE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_SHA1} { return p::make_ACTION_TRANSFORMATION_SHA1(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_MD5} { return p::make_ACTION_TRANSFORMATION_MD5(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE} { return p::make_ACTION_TRANSFORMATION_ESCAPE_SEQ_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_HEX_ENCODE} { return p::make_ACTION_TRANSFORMATION_HEX_ENCODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_HEX_DECODE} { return p::make_ACTION_TRANSFORMATION_HEX_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_LOWERCASE} { return p::make_ACTION_TRANSFORMATION_LOWERCASE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_PHP_ARGS_NAMES} { return p::make_ACTION_TRANSFORMATION_PHP_ARGS_NAMES(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_UPPERCASE} { return p::make_ACTION_TRANSFORMATION_UPPERCASE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_URL_ENCODE} { return p::make_ACTION_TRANSFORMATION_URL_ENCODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_URL_DECODE_UNI} { return p::make_ACTION_TRANSFORMATION_URL_DECODE_UNI(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_URL_DECODE} { return p::make_ACTION_TRANSFORMATION_URL_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_NONE} { return p::make_ACTION_TRANSFORMATION_NONE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_COMPRESS_WHITESPACE} { return p::make_ACTION_TRANSFORMATION_COMPRESS_WHITESPACE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REMOVE_WHITESPACE} { return p::make_ACTION_TRANSFORMATION_REMOVE_WHITESPACE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REPLACE_NULLS} { return p::make_ACTION_TRANSFORMATION_REPLACE_NULLS(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REMOVE_NULLS} { return p::make_ACTION_TRANSFORMATION_REMOVE_NULLS(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_HTML_ENTITY_DECODE} { return p::make_ACTION_TRANSFORMATION_HTML_ENTITY_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_JS_DECODE} { return p::make_ACTION_TRANSFORMATION_JS_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_CSS_DECODE} { return p::make_ACTION_TRANSFORMATION_CSS_DECODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_TRIM} { return p::make_ACTION_TRANSFORMATION_TRIM(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_TRIM_LEFT} { return p::make_ACTION_TRANSFORMATION_TRIM_LEFT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_TRIM_RIGHT} { return p::make_ACTION_TRANSFORMATION_TRIM_RIGHT(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_NORMALISE_PATH_WIN} { return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH_WIN(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_NORMALISE_PATH} { return p::make_ACTION_TRANSFORMATION_NORMALISE_PATH(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_LENGTH} { return p::make_ACTION_TRANSFORMATION_LENGTH(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_UTF8_TO_UNICODE} { return p::make_ACTION_TRANSFORMATION_UTF8_TO_UNICODE(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR} { return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS_CHAR(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REMOVE_COMMENTS} { return p::make_ACTION_TRANSFORMATION_REMOVE_COMMENTS(yytext, *driver.currentLocation()); } +{ACTION_TRANSFORMATION_REPLACE_COMMENTS} { return p::make_ACTION_TRANSFORMATION_REPLACE_COMMENTS(yytext, *driver.currentLocation()); } +{ACTION_LOG_DATA}: { BEGIN(EXPECTING_ACTION_PREDICATE); return p::make_ACTION_LOG_DATA(yytext, *driver.currentLocation()); } -{CONFIG_VALUE_DETC} { return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } -{CONFIG_VALUE_OFF} { return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } -{CONFIG_VALUE_ON} { return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } -[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } -[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } +{CONFIG_VALUE_DETC} { return p::make_CONFIG_VALUE_DETC(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_OFF} { return p::make_CONFIG_VALUE_OFF(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_ON} { return p::make_CONFIG_VALUE_ON(yytext, *driver.currentLocation()); } +[ \t]*\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +[ \t]*\\\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } { -[ \t]*[,][ \t]* { return p::make_COMMA(*driver.loc.back()); } +[ \t]*[,][ \t]* { return p::make_COMMA(*driver.currentLocation()); } } { -[ \t]*\n { BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } -[ \t]*\r\n { BEGIN(INITIAL); yyless(yyleng); driver.loc.back()->lines(1); driver.loc.back()->step(); } +[ \t]*\n { BEGIN(INITIAL); yyless(yyleng); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +[ \t]*\r\n { BEGIN(INITIAL); yyless(yyleng); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } { [ ][ \t]* { BEGIN(INITIAL); yyless(yyleng); } [ ]*[ \t]*\n { BEGIN(INITIAL); yyless(1); } -[ ]*[ \t]*\r\n { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +[ ]*[ \t]*\r\n { BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } { -["][ \t]* { BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.loc.back()); } +["][ \t]* { BEGIN(INITIAL); yyless(yyleng); p::make_NEW_LINE(*driver.currentLocation()); } ["][ \t]*\n { BEGIN(INITIAL); yyless(1); } -["][ \t]*\r\n { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +["][ \t]*\r\n { BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } @@ -656,8 +656,8 @@ EQUALS_MINUS (?i:=\-) { -[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } -[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } +[ \t]*\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +[ \t]*\\\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } { @@ -668,18 +668,18 @@ EQUALS_MINUS (?i:=\-) { ['] { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } -{FREE_TEXT_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { ["] { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(yyleng); } -{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { [,] { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } ["] { yyless(0); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE);} -{FREE_TEXT_COMMA_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_COMMA_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { @@ -688,15 +688,15 @@ EQUALS_MINUS (?i:=\-) } { -{NOT} { return p::make_NOT(*driver.loc.back()); } +{NOT} { return p::make_NOT(*driver.currentLocation()); } .|\n { BEGIN_ACTION_OPERATION(); yyless(0); } } { -{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } -{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } -{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } +{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.currentLocation()); } +{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.currentLocation()); } +{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.currentLocation()); } } { @@ -718,14 +718,14 @@ EQUALS_MINUS (?i:=\-) { -{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } .|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } } { \' { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -{FREE_TEXT_EQUALS_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_EQUALS_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } .|\n { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); yyless(0); } } @@ -734,147 +734,147 @@ EQUALS_MINUS (?i:=\-) { -<> { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.loc.back()); } +<> { BEGIN(INITIAL); yyless(0); p::make_NEW_LINE(*driver.currentLocation()); } . { BEGIN(INITIAL); } } -{CONFIG_COMPONENT_SIG}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } -{CONFIG_SEC_SERVER_SIG}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.loc.back()); } -{CONFIG_SEC_WEB_APP_ID}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.loc.back()); } -{CONFIG_SEC_WEB_APP_ID}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_CONTENT_INJECTION} { return p::make_CONFIG_CONTENT_INJECTION(*driver.loc.back()); } -{CONFIG_DIR_AUDIT_DIR_MOD}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_DIR_MOD}[ \t]+["]{CONFIG_VALUE_NUMBER}["] { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_ARGUMENT_SEPARATOR}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_ARGUMENT_SEPARATOR}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_ENG} { return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.loc.back()); } -{CONFIG_DIR_AUDIT_FLE_MOD}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG2}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG_P}[ \t]+{AUDIT_PARTS} { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG_P}[ \t]+["]{AUDIT_PARTS}["] { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG_FMT} { return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.loc.back()); } -{JSON} { return p::make_JSON(*driver.loc.back()); } -{NATIVE} { return p::make_NATIVE(*driver.loc.back()); } -{CONFIG_DIR_AUDIT_LOG}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_STS}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_STS}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_AUDIT_TPE} { return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.loc.back()); } +{CONFIG_COMPONENT_SIG}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_COMPONENT_SIG(strchr(yytext, ' ') + 2, *driver.currentLocation()); } +{CONFIG_SEC_SERVER_SIG}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_SEC_SERVER_SIG(strchr(yytext, ' ') + 2, *driver.currentLocation()); } +{CONFIG_SEC_WEB_APP_ID}[ \t]+["]{FREE_TEXT}["] { return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 2), *driver.currentLocation()); } +{CONFIG_SEC_WEB_APP_ID}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_WEB_APP_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_CONTENT_INJECTION} { return p::make_CONFIG_CONTENT_INJECTION(*driver.currentLocation()); } +{CONFIG_DIR_AUDIT_DIR_MOD}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_DIR_MOD}[ \t]+["]{CONFIG_VALUE_NUMBER}["] { return p::make_CONFIG_DIR_AUDIT_DIR_MOD(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_AUDIT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_ARGUMENT_SEPARATOR}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_ARGUMENT_SEPARATOR}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_SEC_ARGUMENT_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_ENG} { return p::make_CONFIG_DIR_AUDIT_ENG(yytext, *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_FLE_MOD}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_AUDIT_FLE_MOD(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG2}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_LOG2(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG_P}[ \t]+{AUDIT_PARTS} { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG_P}[ \t]+["]{AUDIT_PARTS}["] { return p::make_CONFIG_DIR_AUDIT_LOG_P(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_AUDIT_LOG(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG_FMT} { return p::make_CONFIG_DIR_AUDIT_LOG_FMT(*driver.currentLocation()); } +{JSON} { return p::make_JSON(*driver.currentLocation()); } +{NATIVE} { return p::make_NATIVE(*driver.currentLocation()); } +{CONFIG_DIR_AUDIT_LOG}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_AUDIT_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_STS}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_STS}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_DIR_AUDIT_STS(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_AUDIT_TPE} { return p::make_CONFIG_DIR_AUDIT_TPE(yytext, *driver.currentLocation()); } -{CONFIG_DIR_DEBUG_LOG}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_DEBUG_LOG}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_DEBUG_LVL}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_GEO_DB}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_PCRE_MATCH_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_ARGS_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } +{CONFIG_DIR_DEBUG_LOG}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_DEBUG_LOG(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_DEBUG_LOG}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_DEBUG_LOG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_DEBUG_LVL}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_DEBUG_LVL(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_GEO_DB}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_DIR_GEO_DB(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT_RECURSION(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_PCRE_MATCH_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_PCRE_MATCH_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_ARGS_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_ARGS_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_IN_MEMORY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } -{CONFIG_DIR_REQ_BODY_LIMIT_ACTION} { return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } -{CONFIG_DIR_REQ_BODY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_REQ_BODY} { return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.loc.back()); } -{CONFIG_DIR_RES_BODY_LIMIT_ACTION} { return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.loc.back()); } -{CONFIG_DIR_RES_BODY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_RES_BODY} { return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.loc.back()); } -{CONFIG_DIR_RULE_ENG} { return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.loc.back()); } -{CONFIG_DIR_SEC_MARKER}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_SEC_MARKER}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_DIR_UNICODE_MAP_FILE}[ \t]+{FREE_TEXT_NEW_LINE}[ ]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_SEC_REMOVE_RULES_BY_ID}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_REMOVE_RULES_BY_MSG}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_REMOVE_RULES_BY_MSG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_REMOVE_RULES_BY_TAG}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_REMOVE_RULES_BY_TAG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_TAG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_TAG}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_MSG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_MSG}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_ID}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_TARGET_BY_ID}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_ACTION_BY_ID}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_UPDATE_ACTION_BY_ID}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_UPDLOAD_KEEP_FILES} { return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.loc.back()); } -{CONFIG_UPDLOAD_SAVE_TMP_FILES} { return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.loc.back()); } -{CONFIG_UPLOAD_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_UPLOAD_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_UPLOAD_FILE_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_UPLOAD_FILE_MODE}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_VALUE_ABORT} { return p::make_CONFIG_VALUE_ABORT(yytext, *driver.loc.back()); } -{CONFIG_VALUE_DETC} { return p::make_CONFIG_VALUE_DETC(yytext, *driver.loc.back()); } -{CONFIG_VALUE_HTTPS} { return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.loc.back()); } -{CONFIG_VALUE_OFF} { return p::make_CONFIG_VALUE_OFF(yytext, *driver.loc.back()); } -{CONFIG_VALUE_ON} { return p::make_CONFIG_VALUE_ON(yytext, *driver.loc.back()); } -{CONFIG_VALUE_PARALLEL} { return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.loc.back()); } -{CONFIG_VALUE_PROCESS_PARTIAL} { return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.loc.back()); } -{CONFIG_VALUE_REJECT} { return p::make_CONFIG_VALUE_REJECT(yytext, *driver.loc.back()); } -{CONFIG_VALUE_RELEVANT_ONLY} { return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.loc.back()); } -{CONFIG_VALUE_SERIAL} { return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.loc.back()); } -{CONFIG_VALUE_WARN} { return p::make_CONFIG_VALUE_WARN(yytext, *driver.loc.back()); } -{CONFIG_XML_EXTERNAL_ENTITY} { return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.loc.back()); } -{CONGIG_DIR_RESPONSE_BODY_MP}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONGIG_DIR_RESPONSE_BODY_MP_CLEAR} { return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.loc.back()); } -{CONGIG_DIR_SEC_ARG_SEP}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.loc.back()); } -{CONGIG_DIR_SEC_COOKIE_FORMAT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_SEC_COOKIEV0_SEPARATOR}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_COOKIEV0_SEPARATOR}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONGIG_DIR_SEC_DATA_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONGIG_DIR_SEC_DATA_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONGIG_DIR_SEC_STATUS_ENGINE}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.loc.back()); } -{CONGIG_DIR_SEC_TMP_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONGIG_DIR_SEC_TMP_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{DIRECTIVE_SECRULESCRIPT}[ \t]+{CONFIG_VALUE_PATH} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{DIRECTIVE_SECRULESCRIPT}[ \t]+["]{FREE_TEXT_SPACE_COMMA_QUOTE}["] { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_CACHE_TRANSFORMATIONS}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.loc.back()); } -{CONFIG_SEC_CHROOT_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_CHROOT_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_CONN_ENGINE} { return p::make_CONFIG_CONN_ENGINE(yytext, *driver.loc.back()); } -{CONFIG_SEC_HASH_ENGINE} { return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.loc.back()); } -{CONFIG_SEC_HASH_KEY} { return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.loc.back()); } -{CONFIG_SEC_HASH_PARAM} { return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.loc.back()); } -{CONFIG_SEC_HASH_METHOD_RX} { return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.loc.back()); } -{CONFIG_SEC_HASH_METHOD_PM} { return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.loc.back()); } -{CONFIG_DIR_GSB_DB}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_DIR_GSB_DB}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.loc.back()); } -{CONFIG_SEC_GUARDIAN_LOG} { return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.loc.back()); } -{CONFIG_SEC_INTERCEPT_ON_ERROR} { return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.loc.back()); } -{CONFIG_SEC_CONN_R_STATE_LIMIT}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.loc.back()); } -{CONFIG_SEC_CONN_W_STATE_LIMIT}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.loc.back()); } -{CONFIG_SEC_SENSOR_ID}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.loc.back()); } -{CONFIG_SEC_RULE_INHERITANCE} { return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.loc.back()); } -{CONFIG_SEC_RULE_PERF_TIME}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_SEC_STREAM_IN_BODY_INSPECTION} { return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.loc.back()); } -{CONFIG_SEC_STREAM_OUT_BODY_INSPECTION} { return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.loc.back()); } -{CONFIG_SEC_DISABLE_BACKEND_COMPRESS} { return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.loc.back()); } +{CONFIG_DIR_REQ_BODY_LIMIT_ACTION} { return p::make_CONFIG_DIR_REQ_BODY_LIMIT_ACTION(yytext, *driver.currentLocation()); } +{CONFIG_DIR_REQ_BODY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_REQ_BODY_NO_FILES_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_REQ_BODY} { return p::make_CONFIG_DIR_REQ_BODY(yytext, *driver.currentLocation()); } +{CONFIG_DIR_RES_BODY_LIMIT_ACTION} { return p::make_CONFIG_DIR_RES_BODY_LIMIT_ACTION(yytext, *driver.currentLocation()); } +{CONFIG_DIR_RES_BODY_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_RES_BODY_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_RES_BODY} { return p::make_CONFIG_DIR_RES_BODY(yytext, *driver.currentLocation()); } +{CONFIG_DIR_RULE_ENG} { return p::make_CONFIG_DIR_RULE_ENG(yytext, *driver.currentLocation()); } +{CONFIG_DIR_SEC_MARKER}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_SEC_MARKER}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_DIR_SEC_MARKER(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_DIR_UNICODE_MAP_FILE}[ \t]+{FREE_TEXT_NEW_LINE}[ ]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_DIR_UNICODE_MAP_FILE(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_SEC_REMOVE_RULES_BY_ID}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_REMOVE_RULES_BY_MSG}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_REMOVE_RULES_BY_MSG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { return p::make_CONFIG_SEC_RULE_REMOVE_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_REMOVE_RULES_BY_TAG}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_REMOVE_RULES_BY_TAG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { return p::make_CONFIG_SEC_RULE_REMOVE_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_TAG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_TAG}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_MSG}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_MSG}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_ID}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_TARGET_BY_ID}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { state_variable_from = 1; BEGIN(TRANSACTION_TO_VARIABLE); return p::make_CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_ACTION_BY_ID}[ \t]+["]{FREE_TEXT_NEW_LINE}["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_UPDATE_ACTION_BY_ID}[ \t]+{FREE_TEXT_SPACE_COMMA_QUOTE} { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_CONFIG_SEC_RULE_UPDATE_ACTION_BY_ID(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_UPDLOAD_KEEP_FILES} { return p::make_CONFIG_UPDLOAD_KEEP_FILES(yytext, *driver.currentLocation()); } +{CONFIG_UPDLOAD_SAVE_TMP_FILES} { return p::make_CONFIG_UPDLOAD_SAVE_TMP_FILES(yytext, *driver.currentLocation()); } +{CONFIG_UPLOAD_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_UPLOAD_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_UPLOAD_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_UPLOAD_FILE_LIMIT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_UPLOAD_FILE_LIMIT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_UPLOAD_FILE_MODE}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_UPLOAD_FILE_MODE(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_VALUE_ABORT} { return p::make_CONFIG_VALUE_ABORT(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_DETC} { return p::make_CONFIG_VALUE_DETC(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_HTTPS} { return p::make_CONFIG_VALUE_HTTPS(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_OFF} { return p::make_CONFIG_VALUE_OFF(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_ON} { return p::make_CONFIG_VALUE_ON(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_PARALLEL} { return p::make_CONFIG_VALUE_PARALLEL(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_PROCESS_PARTIAL} { return p::make_CONFIG_VALUE_PROCESS_PARTIAL(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_REJECT} { return p::make_CONFIG_VALUE_REJECT(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_RELEVANT_ONLY} { return p::make_CONFIG_VALUE_RELEVANT_ONLY(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_SERIAL} { return p::make_CONFIG_VALUE_SERIAL(yytext, *driver.currentLocation()); } +{CONFIG_VALUE_WARN} { return p::make_CONFIG_VALUE_WARN(yytext, *driver.currentLocation()); } +{CONFIG_XML_EXTERNAL_ENTITY} { return p::make_CONFIG_XML_EXTERNAL_ENTITY(yytext, *driver.currentLocation()); } +{CONGIG_DIR_RESPONSE_BODY_MP}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_RESPONSE_BODY_MP(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONGIG_DIR_RESPONSE_BODY_MP_CLEAR} { return p::make_CONGIG_DIR_RESPONSE_BODY_MP_CLEAR(*driver.currentLocation()); } +{CONGIG_DIR_SEC_ARG_SEP}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_SEC_ARG_SEP(yytext, *driver.currentLocation()); } +{CONGIG_DIR_SEC_COOKIE_FORMAT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONGIG_DIR_SEC_COOKIE_FORMAT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_SEC_COOKIEV0_SEPARATOR}[ \t]+["]{NEW_LINE_FREE_TEXT}["] { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_COOKIEV0_SEPARATOR}[ \t]+{NEW_LINE_FREE_TEXT} { return p::make_CONFIG_SEC_COOKIEV0_SEPARATOR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONGIG_DIR_SEC_DATA_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONGIG_DIR_SEC_DATA_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONGIG_DIR_SEC_DATA_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONGIG_DIR_SEC_STATUS_ENGINE}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONGIG_DIR_SEC_STATUS_ENGINE(yytext, *driver.currentLocation()); } +{CONGIG_DIR_SEC_TMP_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONGIG_DIR_SEC_TMP_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONGIG_DIR_SEC_TMP_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{DIRECTIVE_SECRULESCRIPT}[ \t]+{CONFIG_VALUE_PATH} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{DIRECTIVE_SECRULESCRIPT}[ \t]+["]{FREE_TEXT_SPACE_COMMA_QUOTE}["] { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_DIRECTIVE_SECRULESCRIPT(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_CACHE_TRANSFORMATIONS}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CACHE_TRANSFORMATIONS(yytext, *driver.currentLocation()); } +{CONFIG_SEC_CHROOT_DIR}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_CHROOT_DIR}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_SEC_CHROOT_DIR(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_CONN_ENGINE} { return p::make_CONFIG_CONN_ENGINE(yytext, *driver.currentLocation()); } +{CONFIG_SEC_HASH_ENGINE} { return p::make_CONFIG_SEC_HASH_ENGINE(yytext, *driver.currentLocation()); } +{CONFIG_SEC_HASH_KEY} { return p::make_CONFIG_SEC_HASH_KEY(yytext, *driver.currentLocation()); } +{CONFIG_SEC_HASH_PARAM} { return p::make_CONFIG_SEC_HASH_PARAM(yytext, *driver.currentLocation()); } +{CONFIG_SEC_HASH_METHOD_RX} { return p::make_CONFIG_SEC_HASH_METHOD_RX(yytext, *driver.currentLocation()); } +{CONFIG_SEC_HASH_METHOD_PM} { return p::make_CONFIG_SEC_HASH_METHOD_PM(yytext, *driver.currentLocation()); } +{CONFIG_DIR_GSB_DB}[ \t]+{CONFIG_VALUE_PATH} { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_DIR_GSB_DB}[ \t]+["]{CONFIG_VALUE_PATH}["] { return p::make_CONFIG_DIR_GSB_DB(parserSanitizer(strchr(yytext, ' ') + 1), *driver.currentLocation()); } +{CONFIG_SEC_GUARDIAN_LOG} { return p::make_CONFIG_SEC_GUARDIAN_LOG(yytext, *driver.currentLocation()); } +{CONFIG_SEC_INTERCEPT_ON_ERROR} { return p::make_CONFIG_SEC_INTERCEPT_ON_ERROR(yytext, *driver.currentLocation()); } +{CONFIG_SEC_CONN_R_STATE_LIMIT}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CONN_R_STATE_LIMIT(yytext, *driver.currentLocation()); } +{CONFIG_SEC_CONN_W_STATE_LIMIT}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_CONN_W_STATE_LIMIT(yytext, *driver.currentLocation()); } +{CONFIG_SEC_SENSOR_ID}{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_SENSOR_ID(yytext, *driver.currentLocation()); } +{CONFIG_SEC_RULE_INHERITANCE} { return p::make_CONFIG_SEC_RULE_INHERITANCE(yytext, *driver.currentLocation()); } +{CONFIG_SEC_RULE_PERF_TIME}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_SEC_RULE_PERF_TIME(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_SEC_STREAM_IN_BODY_INSPECTION} { return p::make_CONFIG_SEC_STREAM_IN_BODY_INSPECTION(yytext, *driver.currentLocation()); } +{CONFIG_SEC_STREAM_OUT_BODY_INSPECTION} { return p::make_CONFIG_SEC_STREAM_OUT_BODY_INSPECTION(yytext, *driver.currentLocation()); } +{CONFIG_SEC_DISABLE_BACKEND_COMPRESS} { return p::make_CONFIG_SEC_DISABLE_BACKEND_COMPRESS(yytext, *driver.currentLocation()); } -{DIRECTIVE} { BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.loc.back()); } -{CONFIG_DIR_SEC_DEFAULT_ACTION} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.loc.back()); } -{CONFIG_DIR_SEC_ACTION} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.loc.back()); } +{DIRECTIVE} { BEGIN(TRANSACTION_TO_VARIABLE); return p::make_DIRECTIVE(yytext, *driver.currentLocation()); } +{CONFIG_DIR_SEC_DEFAULT_ACTION} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_DEFAULT_ACTION(yytext, *driver.currentLocation()); } +{CONFIG_DIR_SEC_ACTION} { BEGIN(TRANSACTION_FROM_DIRECTIVE_TO_ACTIONS); return p::make_CONFIG_DIR_SEC_ACTION(yytext, *driver.currentLocation()); } -{CONFIG_SEC_REMOTE_RULES_FAIL_ACTION} { return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.loc.back()); } -{CONFIG_SEC_COLLECTION_TIMEOUT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.loc.back()); } -{CONFIG_SEC_HTTP_BLKEY}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.loc.back()); } -[ \t]*[\n] { driver.loc.back()->lines(1); driver.loc.back()->step(); } -#[ \t]*SecRule[^\\].*\\[ \t]*[\r\n]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } -#[ \t]*SecAction[^\\].*\\[ \t]*[^\\n] { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(COMMENT); } -#.* { driver.loc.back()->step(); /* comment, just ignore. */ } -\r { driver.loc.back()->step(); /* carriage return, just ignore. */} -["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } -[,] { return p::make_COMMA(*driver.loc.back()); } +{CONFIG_SEC_REMOTE_RULES_FAIL_ACTION} { return p::make_CONFIG_SEC_REMOTE_RULES_FAIL_ACTION(yytext, *driver.currentLocation()); } +{CONFIG_SEC_COLLECTION_TIMEOUT}[ \t]+{CONFIG_VALUE_NUMBER} { return p::make_CONFIG_SEC_COLLECTION_TIMEOUT(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +{CONFIG_SEC_HTTP_BLKEY}[ \t]+{FREE_TEXT_NEW_LINE} { return p::make_CONFIG_SEC_HTTP_BLKEY(strchr(yytext, ' ') + 1, *driver.currentLocation()); } +[ \t]*[\n] { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +#[ \t]*SecRule[^\\].*\\[ \t]*[\r\n]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(COMMENT); } +#[ \t]*SecAction[^\\].*\\[ \t]*[^\\n] { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(COMMENT); } +#.* { driver.currentLocation()->step(); /* comment, just ignore. */ } +\r { driver.currentLocation()->step(); /* carriage return, just ignore. */} +["] { return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } +[,] { return p::make_COMMA(*driver.currentLocation()); } { [ \t]* { BEGIN(EXPECTING_VARIABLE); } } { -[|] { return p::make_PIPE(*driver.loc.back()); } -[,] { return p::make_PIPE(*driver.loc.back()); } -["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } -{VAR_EXCLUSION} { return p::make_VAR_EXCLUSION(*driver.loc.back()); } -{VAR_COUNT} { return p::make_VAR_COUNT(*driver.loc.back()); } +[|] { return p::make_PIPE(*driver.currentLocation()); } +[,] { return p::make_PIPE(*driver.currentLocation()); } +["] { return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } +{VAR_EXCLUSION} { return p::make_VAR_EXCLUSION(*driver.currentLocation()); } +{VAR_COUNT} { return p::make_VAR_COUNT(*driver.currentLocation()); } } { @@ -896,162 +896,162 @@ EQUALS_MINUS (?i:=\-) { . { BEGIN(LEXING_ERROR_VARIABLE); yyless(0); } -{VARIABLE_ARGS_COMBINED_SIZE} { return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.loc.back()); } -{VARIABLE_ARGS_GET_NAMES} { return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } -{VARIABLE_ARGS_GET_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.loc.back()); } -{VARIABLE_ARGS_NAMES} { return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } -{VARIABLE_ARGS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.loc.back()); } -{VARIABLE_ARGS_POST_NAMES} { return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } -{VARIABLE_ARGS_POST_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.loc.back()); } -{VARIABLE_AUTH_TYPE} { return p::make_VARIABLE_AUTH_TYPE(*driver.loc.back()); } -{VARIABLE_FILES_COMBINED_SIZE} { return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.loc.back()); } -{VARIABLE_FULL_REQUEST_LENGTH} { return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.loc.back()); } -{VARIABLE_FULL_REQUEST} { return p::make_VARIABLE_FULL_REQUEST(*driver.loc.back()); } -{VARIABLE_INBOUND_DATA_ERROR} { return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.loc.back()); } -{VARIABLE_MATCHED_VAR_NAME} { return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.loc.back()); } -{VARIABLE_MATCHED_VAR} { return p::make_VARIABLE_MATCHED_VAR(*driver.loc.back()); } -{VARIABLE_MULTIPART_BOUNDARY_QUOTED} { return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.loc.back()); } -{VARIABLE_MULTIPART_BOUNDARY_WHITESPACE} { return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.loc.back()); } -{VARIABLE_MULTIPART_CRLF_LF_LINES} { return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.loc.back()); } -{VARIABLE_MULTIPART_DATA_AFTER} { return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.loc.back()); } -{VARIABLE_MULTIPART_DATA_BEFORE} { return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.loc.back()); } -{VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED} { return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.loc.back()); } -{VARIABLE_MULTIPART_FILENAME}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } -{VARIABLE_MULTIPART_FILENAME} { return p::make_VARIABLE_MULTIPART_FILENAME(*driver.loc.back()); } -{VARIABLE_MULTIPART_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } -{VARIABLE_MULTIPART_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.loc.back()); } -{VARIABLE_MULTIPART_INVALID_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.loc.back()); } -{VARIABLE_MULTIPART_INVALID_PART} { return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.loc.back()); } -{VARIABLE_MULTIPART_INVALID_QUOTING} { return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.loc.back()); } -{VARIABLE_MULTIPART_LF_LINE} { return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.loc.back()); } -{VARIABLE_MULTIPART_MISSING_SEMICOLON} { return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.loc.back()); } -{VARIABLE_MULTIPART_SEMICOLON_MISSING} { return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.loc.back()); } -{VARIABLE_MULTIPART_NAME}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } -{VARIABLE_MULTIPART_NAME} { return p::make_VARIABLE_MULTIPART_NAME(*driver.loc.back()); } -{VARIABLE_MULTIPART_STRICT_ERROR} { return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.loc.back()); } -{VARIABLE_MULTIPART_UNMATCHED_BOUNDARY} { return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.loc.back()); } -{VARIABLE_OUTBOUND_DATA_ERROR} { return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.loc.back()); } -{VARIABLE_PATH_INFO} { return p::make_VARIABLE_PATH_INFO(*driver.loc.back()); } -{VARIABLE_QUERY_STRING} { return p::make_VARIABLE_QUERY_STRING(*driver.loc.back()); } -{VARIABLE_REMOTE_ADDR} { return p::make_VARIABLE_REMOTE_ADDR(*driver.loc.back()); } -{VARIABLE_REMOTE_HOST} { return p::make_VARIABLE_REMOTE_HOST(*driver.loc.back()); } -{VARIABLE_REMOTE_PORT} { return p::make_VARIABLE_REMOTE_PORT(*driver.loc.back()); } -{VARIABLE_REQBODY_ERROR_MSG} { return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.loc.back()); } -{VARIABLE_REQBODY_ERROR} { return p::make_VARIABLE_REQBODY_ERROR(*driver.loc.back()); } -{VARIABLE_REQBODY_PROCESSOR_ERROR_MSG} { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.loc.back()); } -{VARIABLE_REQBODY_PROCESSOR_ERROR} { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.loc.back()); } -{VARIABLE_REQBODY_PROCESSOR} { return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.loc.back()); } -{VARIABLE_REQUEST_BASENAME} { return p::make_VARIABLE_REQUEST_BASENAME(*driver.loc.back()); } -{VARIABLE_REQUEST_BODY_LENGTH} { return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.loc.back()); } -{VARIABLE_REQUEST_BODY} { return p::make_VARIABLE_REQUEST_BODY(*driver.loc.back()); } -{VARIABLE_REQUEST_FILE_NAME} { return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.loc.back()); } -{VARIABLE_REQUEST_HEADERS_NAMES} { return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } -{VARIABLE_REQUEST_HEADERS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.loc.back()); } -{VARIABLE_REQUEST_LINE} { return p::make_VARIABLE_REQUEST_LINE(*driver.loc.back()); } -{VARIABLE_REQUEST_METHOD} { return p::make_VARIABLE_REQUEST_METHOD(*driver.loc.back()); } -{VARIABLE_REQUEST_PROTOCOL} { return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.loc.back()); } -{VARIABLE_REQUEST_URI_RAW} { return p::make_VARIABLE_REQUEST_URI_RAW(*driver.loc.back()); } -{VARIABLE_REQUEST_URI} { return p::make_VARIABLE_REQUEST_URI(*driver.loc.back()); } -{VARIABLE_RESPONSE_BODY} { return p::make_VARIABLE_RESPONSE_BODY(*driver.loc.back()); } -{VARIABLE_RESPONSE_CONTENT_LENGTH} { return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.loc.back()); } -{VARIABLE_RESPONSE_CONTENT_TYPE} { return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.loc.back()); } -{VARIABLE_RESPONSE_HEADERS_NAMES} { return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } -{VARIABLE_RESPONSE_HEADERS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.loc.back()); } -{VARIABLE_RESPONSE_PROTOCOL} { return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.loc.back()); } -{VARIABLE_RESPONSE_STATUS} { return p::make_VARIABLE_RESPONSE_STATUS(*driver.loc.back()); } -{VARIABLE_SERVER_ADDR} { return p::make_VARIABLE_SERVER_ADDR(*driver.loc.back()); } -{VARIABLE_SERVER_NAME} { return p::make_VARIABLE_SERVER_NAME(*driver.loc.back()); } -{VARIABLE_SERVER_PORT} { return p::make_VARIABLE_SERVER_PORT(*driver.loc.back()); } -{VARIABLE_SESSION_ID} { return p::make_VARIABLE_SESSION_ID(*driver.loc.back()); } -{VARIABLE_UNIQUE_ID} { return p::make_VARIABLE_UNIQUE_ID(*driver.loc.back()); } -{VARIABLE_URL_ENCODED_ERROR} { return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.loc.back()); } -{VARIABLE_USER_ID} { return p::make_VARIABLE_USER_ID(*driver.loc.back()); } -{VARIABLE_WEB_APP_ID} { return p::make_VARIABLE_WEB_APP_ID(*driver.loc.back()); } -{VARIABLE_ARGS} { return p::make_VARIABLE_ARGS(*driver.loc.back()); } -{VARIABLE_ARGS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.loc.back()); } -{VARIABLE_ARGS_GET} { return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } -{VARIABLE_ARGS_GET}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.loc.back()); } -{VARIABLE_ARGS_POST} { return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } -{VARIABLE_ARGS_POST}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.loc.back()); } -{VARIABLE_FILES_SIZES} { return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } -{VARIABLE_FILES_SIZES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.loc.back()); } -{VARIABLE_FILES_NAMES} { return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } -{VARIABLE_FILES_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.loc.back()); } -{VARIABLE_FILES_TMP_CONTENT} { return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } -{VARIABLE_FILES_TMP_CONTENT}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.loc.back()); } -{VARIABLE_MATCHED_VARS_NAMES} { return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } -{VARIABLE_MATCHED_VARS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.loc.back()); } -{VARIABLE_MATCHED_VARS} { return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } -{VARIABLE_MATCHED_VARS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.loc.back()); } -{VARIABLE_FILES} { return p::make_VARIABLE_FILES(*driver.loc.back()); } -{VARIABLE_FILES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.loc.back()); } -{VARIABLE_REQUEST_COOKIES} { return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } -{VARIABLE_REQUEST_COOKIES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.loc.back()); } -{VARIABLE_REQUEST_HEADERS} { return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } -{VARIABLE_REQUEST_HEADERS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.loc.back()); } -{VARIABLE_RESPONSE_HEADERS} { return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } -{VARIABLE_RESPONSE_HEADERS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.loc.back()); } -{VARIABLE_GEO} { return p::make_VARIABLE_GEO(*driver.loc.back()); } -{VARIABLE_GEO}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.loc.back()); } -{VARIABLE_REQUEST_COOKIES_NAMES} { return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } -{VARIABLE_REQUEST_COOKIES_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.loc.back()); } -{VARIABLE_RULE} { return p::make_VARIABLE_RULE(*driver.loc.back()); } -{VARIABLE_RULE}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.loc.back()); } -{VARIABLE_FILES_TMP_NAMES} { return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } -{VARIABLE_FILES_TMP_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.loc.back()); } -{RUN_TIME_VAR_XML} { return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } -{RUN_TIME_VAR_XML}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.loc.back()); } -{RUN_TIME_VAR_ENV} { return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } -{RUN_TIME_VAR_ENV}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.loc.back()); } -{RUN_TIME_VAR_BLD} { return p::make_RUN_TIME_VAR_BLD(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_DUR} { return p::make_RUN_TIME_VAR_DUR(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_HSV} { return p::make_RUN_TIME_VAR_HSV(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_REMOTE_USER} { return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_DAY} { return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_EPOCH} { return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_HOUR} { return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_MIN} { return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_MON} { return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_SEC} { return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_YEAR} { return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME} { return p::make_RUN_TIME_VAR_TIME(yytext, *driver.loc.back()); } -{RUN_TIME_VAR_TIME_WDAY} { return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.loc.back()); } +{VARIABLE_ARGS_COMBINED_SIZE} { return p::make_VARIABLE_ARGS_COMBINED_SIZE(*driver.currentLocation()); } +{VARIABLE_ARGS_GET_NAMES} { return p::make_VARIABLE_ARGS_GET_NAMES(*driver.currentLocation()); } +{VARIABLE_ARGS_GET_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET_NAMES(*driver.currentLocation()); } +{VARIABLE_ARGS_NAMES} { return p::make_VARIABLE_ARGS_NAMES(*driver.currentLocation()); } +{VARIABLE_ARGS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_NAMES(*driver.currentLocation()); } +{VARIABLE_ARGS_POST_NAMES} { return p::make_VARIABLE_ARGS_POST_NAMES(*driver.currentLocation()); } +{VARIABLE_ARGS_POST_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST_NAMES(*driver.currentLocation()); } +{VARIABLE_AUTH_TYPE} { return p::make_VARIABLE_AUTH_TYPE(*driver.currentLocation()); } +{VARIABLE_FILES_COMBINED_SIZE} { return p::make_VARIABLE_FILES_COMBINED_SIZE(*driver.currentLocation()); } +{VARIABLE_FULL_REQUEST_LENGTH} { return p::make_VARIABLE_FULL_REQUEST_LENGTH(*driver.currentLocation()); } +{VARIABLE_FULL_REQUEST} { return p::make_VARIABLE_FULL_REQUEST(*driver.currentLocation()); } +{VARIABLE_INBOUND_DATA_ERROR} { return p::make_VARIABLE_INBOUND_DATA_ERROR(*driver.currentLocation()); } +{VARIABLE_MATCHED_VAR_NAME} { return p::make_VARIABLE_MATCHED_VAR_NAME(*driver.currentLocation()); } +{VARIABLE_MATCHED_VAR} { return p::make_VARIABLE_MATCHED_VAR(*driver.currentLocation()); } +{VARIABLE_MULTIPART_BOUNDARY_QUOTED} { return p::make_VARIABLE_MULTIPART_BOUNDARY_QUOTED(*driver.currentLocation()); } +{VARIABLE_MULTIPART_BOUNDARY_WHITESPACE} { return p::make_VARIABLE_MULTIPART_BOUNDARY_WHITESPACE(*driver.currentLocation()); } +{VARIABLE_MULTIPART_CRLF_LF_LINES} { return p::make_VARIABLE_MULTIPART_CRLF_LF_LINES(*driver.currentLocation()); } +{VARIABLE_MULTIPART_DATA_AFTER} { return p::make_VARIABLE_MULTIPART_DATA_AFTER(*driver.currentLocation()); } +{VARIABLE_MULTIPART_DATA_BEFORE} { return p::make_VARIABLE_MULTIPART_DATA_BEFORE(*driver.currentLocation()); } +{VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED} { return p::make_VARIABLE_MULTIPART_FILE_LIMIT_EXCEEDED(*driver.currentLocation()); } +{VARIABLE_MULTIPART_FILENAME}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_FILENAME(*driver.currentLocation()); } +{VARIABLE_MULTIPART_FILENAME} { return p::make_VARIABLE_MULTIPART_FILENAME(*driver.currentLocation()); } +{VARIABLE_MULTIPART_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.currentLocation()); } +{VARIABLE_MULTIPART_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_HEADER_FOLDING(*driver.currentLocation()); } +{VARIABLE_MULTIPART_INVALID_HEADER_FOLDING} { return p::make_VARIABLE_MULTIPART_INVALID_HEADER_FOLDING(*driver.currentLocation()); } +{VARIABLE_MULTIPART_INVALID_PART} { return p::make_VARIABLE_MULTIPART_INVALID_PART(*driver.currentLocation()); } +{VARIABLE_MULTIPART_INVALID_QUOTING} { return p::make_VARIABLE_MULTIPART_INVALID_QUOTING(*driver.currentLocation()); } +{VARIABLE_MULTIPART_LF_LINE} { return p::make_VARIABLE_MULTIPART_LF_LINE(*driver.currentLocation()); } +{VARIABLE_MULTIPART_MISSING_SEMICOLON} { return p::make_VARIABLE_MULTIPART_MISSING_SEMICOLON(*driver.currentLocation()); } +{VARIABLE_MULTIPART_SEMICOLON_MISSING} { return p::make_VARIABLE_MULTIPART_SEMICOLON_MISSING(*driver.currentLocation()); } +{VARIABLE_MULTIPART_NAME}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MULTIPART_NAME(*driver.currentLocation()); } +{VARIABLE_MULTIPART_NAME} { return p::make_VARIABLE_MULTIPART_NAME(*driver.currentLocation()); } +{VARIABLE_MULTIPART_STRICT_ERROR} { return p::make_VARIABLE_MULTIPART_STRICT_ERROR(*driver.currentLocation()); } +{VARIABLE_MULTIPART_UNMATCHED_BOUNDARY} { return p::make_VARIABLE_MULTIPART_UNMATCHED_BOUNDARY(*driver.currentLocation()); } +{VARIABLE_OUTBOUND_DATA_ERROR} { return p::make_VARIABLE_OUTBOUND_DATA_ERROR(*driver.currentLocation()); } +{VARIABLE_PATH_INFO} { return p::make_VARIABLE_PATH_INFO(*driver.currentLocation()); } +{VARIABLE_QUERY_STRING} { return p::make_VARIABLE_QUERY_STRING(*driver.currentLocation()); } +{VARIABLE_REMOTE_ADDR} { return p::make_VARIABLE_REMOTE_ADDR(*driver.currentLocation()); } +{VARIABLE_REMOTE_HOST} { return p::make_VARIABLE_REMOTE_HOST(*driver.currentLocation()); } +{VARIABLE_REMOTE_PORT} { return p::make_VARIABLE_REMOTE_PORT(*driver.currentLocation()); } +{VARIABLE_REQBODY_ERROR_MSG} { return p::make_VARIABLE_REQBODY_ERROR_MSG(*driver.currentLocation()); } +{VARIABLE_REQBODY_ERROR} { return p::make_VARIABLE_REQBODY_ERROR(*driver.currentLocation()); } +{VARIABLE_REQBODY_PROCESSOR_ERROR_MSG} { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR_MSG(*driver.currentLocation()); } +{VARIABLE_REQBODY_PROCESSOR_ERROR} { return p::make_VARIABLE_REQBODY_PROCESSOR_ERROR(*driver.currentLocation()); } +{VARIABLE_REQBODY_PROCESSOR} { return p::make_VARIABLE_REQBODY_PROCESSOR(*driver.currentLocation()); } +{VARIABLE_REQUEST_BASENAME} { return p::make_VARIABLE_REQUEST_BASENAME(*driver.currentLocation()); } +{VARIABLE_REQUEST_BODY_LENGTH} { return p::make_VARIABLE_REQUEST_BODY_LENGTH(*driver.currentLocation()); } +{VARIABLE_REQUEST_BODY} { return p::make_VARIABLE_REQUEST_BODY(*driver.currentLocation()); } +{VARIABLE_REQUEST_FILE_NAME} { return p::make_VARIABLE_REQUEST_FILE_NAME(*driver.currentLocation()); } +{VARIABLE_REQUEST_HEADERS_NAMES} { return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.currentLocation()); } +{VARIABLE_REQUEST_HEADERS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS_NAMES(*driver.currentLocation()); } +{VARIABLE_REQUEST_LINE} { return p::make_VARIABLE_REQUEST_LINE(*driver.currentLocation()); } +{VARIABLE_REQUEST_METHOD} { return p::make_VARIABLE_REQUEST_METHOD(*driver.currentLocation()); } +{VARIABLE_REQUEST_PROTOCOL} { return p::make_VARIABLE_REQUEST_PROTOCOL(*driver.currentLocation()); } +{VARIABLE_REQUEST_URI_RAW} { return p::make_VARIABLE_REQUEST_URI_RAW(*driver.currentLocation()); } +{VARIABLE_REQUEST_URI} { return p::make_VARIABLE_REQUEST_URI(*driver.currentLocation()); } +{VARIABLE_RESPONSE_BODY} { return p::make_VARIABLE_RESPONSE_BODY(*driver.currentLocation()); } +{VARIABLE_RESPONSE_CONTENT_LENGTH} { return p::make_VARIABLE_RESPONSE_CONTENT_LENGTH(*driver.currentLocation()); } +{VARIABLE_RESPONSE_CONTENT_TYPE} { return p::make_VARIABLE_RESPONSE_CONTENT_TYPE(*driver.currentLocation()); } +{VARIABLE_RESPONSE_HEADERS_NAMES} { return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.currentLocation()); } +{VARIABLE_RESPONSE_HEADERS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS_NAMES(*driver.currentLocation()); } +{VARIABLE_RESPONSE_PROTOCOL} { return p::make_VARIABLE_RESPONSE_PROTOCOL(*driver.currentLocation()); } +{VARIABLE_RESPONSE_STATUS} { return p::make_VARIABLE_RESPONSE_STATUS(*driver.currentLocation()); } +{VARIABLE_SERVER_ADDR} { return p::make_VARIABLE_SERVER_ADDR(*driver.currentLocation()); } +{VARIABLE_SERVER_NAME} { return p::make_VARIABLE_SERVER_NAME(*driver.currentLocation()); } +{VARIABLE_SERVER_PORT} { return p::make_VARIABLE_SERVER_PORT(*driver.currentLocation()); } +{VARIABLE_SESSION_ID} { return p::make_VARIABLE_SESSION_ID(*driver.currentLocation()); } +{VARIABLE_UNIQUE_ID} { return p::make_VARIABLE_UNIQUE_ID(*driver.currentLocation()); } +{VARIABLE_URL_ENCODED_ERROR} { return p::make_VARIABLE_URL_ENCODED_ERROR(*driver.currentLocation()); } +{VARIABLE_USER_ID} { return p::make_VARIABLE_USER_ID(*driver.currentLocation()); } +{VARIABLE_WEB_APP_ID} { return p::make_VARIABLE_WEB_APP_ID(*driver.currentLocation()); } +{VARIABLE_ARGS} { return p::make_VARIABLE_ARGS(*driver.currentLocation()); } +{VARIABLE_ARGS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS(*driver.currentLocation()); } +{VARIABLE_ARGS_GET} { return p::make_VARIABLE_ARGS_GET(*driver.currentLocation()); } +{VARIABLE_ARGS_GET}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_GET(*driver.currentLocation()); } +{VARIABLE_ARGS_POST} { return p::make_VARIABLE_ARGS_POST(*driver.currentLocation()); } +{VARIABLE_ARGS_POST}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_ARGS_POST(*driver.currentLocation()); } +{VARIABLE_FILES_SIZES} { return p::make_VARIABLE_FILES_SIZES(*driver.currentLocation()); } +{VARIABLE_FILES_SIZES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_SIZES(*driver.currentLocation()); } +{VARIABLE_FILES_NAMES} { return p::make_VARIABLE_FILES_NAMES(*driver.currentLocation()); } +{VARIABLE_FILES_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_NAMES(*driver.currentLocation()); } +{VARIABLE_FILES_TMP_CONTENT} { return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.currentLocation()); } +{VARIABLE_FILES_TMP_CONTENT}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_CONTENT(*driver.currentLocation()); } +{VARIABLE_MATCHED_VARS_NAMES} { return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.currentLocation()); } +{VARIABLE_MATCHED_VARS_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS_NAMES(*driver.currentLocation()); } +{VARIABLE_MATCHED_VARS} { return p::make_VARIABLE_MATCHED_VARS(*driver.currentLocation()); } +{VARIABLE_MATCHED_VARS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_MATCHED_VARS(*driver.currentLocation()); } +{VARIABLE_FILES} { return p::make_VARIABLE_FILES(*driver.currentLocation()); } +{VARIABLE_FILES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES(*driver.currentLocation()); } +{VARIABLE_REQUEST_COOKIES} { return p::make_VARIABLE_REQUEST_COOKIES(*driver.currentLocation()); } +{VARIABLE_REQUEST_COOKIES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES(*driver.currentLocation()); } +{VARIABLE_REQUEST_HEADERS} { return p::make_VARIABLE_REQUEST_HEADERS(*driver.currentLocation()); } +{VARIABLE_REQUEST_HEADERS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_HEADERS(*driver.currentLocation()); } +{VARIABLE_RESPONSE_HEADERS} { return p::make_VARIABLE_RESPONSE_HEADERS(*driver.currentLocation()); } +{VARIABLE_RESPONSE_HEADERS}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RESPONSE_HEADERS(*driver.currentLocation()); } +{VARIABLE_GEO} { return p::make_VARIABLE_GEO(*driver.currentLocation()); } +{VARIABLE_GEO}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_GEO(*driver.currentLocation()); } +{VARIABLE_REQUEST_COOKIES_NAMES} { return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.currentLocation()); } +{VARIABLE_REQUEST_COOKIES_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_REQUEST_COOKIES_NAMES(*driver.currentLocation()); } +{VARIABLE_RULE} { return p::make_VARIABLE_RULE(*driver.currentLocation()); } +{VARIABLE_RULE}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_RULE(*driver.currentLocation()); } +{VARIABLE_FILES_TMP_NAMES} { return p::make_VARIABLE_FILES_TMP_NAMES(*driver.currentLocation()); } +{VARIABLE_FILES_TMP_NAMES}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_VARIABLE_FILES_TMP_NAMES(*driver.currentLocation()); } +{RUN_TIME_VAR_XML} { return p::make_RUN_TIME_VAR_XML(*driver.currentLocation()); } +{RUN_TIME_VAR_XML}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_XML(*driver.currentLocation()); } +{RUN_TIME_VAR_ENV} { return p::make_RUN_TIME_VAR_ENV(*driver.currentLocation()); } +{RUN_TIME_VAR_ENV}[:.] { BEGINX(EXPECTING_VAR_PARAMETER); return p::make_RUN_TIME_VAR_ENV(*driver.currentLocation()); } +{RUN_TIME_VAR_BLD} { return p::make_RUN_TIME_VAR_BLD(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_DUR} { return p::make_RUN_TIME_VAR_DUR(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_HSV} { return p::make_RUN_TIME_VAR_HSV(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_REMOTE_USER} { return p::make_RUN_TIME_VAR_REMOTE_USER(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_DAY} { return p::make_RUN_TIME_VAR_TIME_DAY(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_EPOCH} { return p::make_RUN_TIME_VAR_TIME_EPOCH(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_HOUR} { return p::make_RUN_TIME_VAR_TIME_HOUR(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_MIN} { return p::make_RUN_TIME_VAR_TIME_MIN(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_MON} { return p::make_RUN_TIME_VAR_TIME_MON(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_SEC} { return p::make_RUN_TIME_VAR_TIME_SEC(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_YEAR} { return p::make_RUN_TIME_VAR_TIME_YEAR(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME} { return p::make_RUN_TIME_VAR_TIME(yytext, *driver.currentLocation()); } +{RUN_TIME_VAR_TIME_WDAY} { return p::make_RUN_TIME_VAR_TIME_WDAY(yytext, *driver.currentLocation()); } -{VARIABLE_WEBSERVER_ERROR_LOG} { driver.error (*driver.loc.back(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.loc.back(), "");} -{VARIABLE_GLOBAL} { return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } -{VARIABLE_IP} { return p::make_VARIABLE_IP(*driver.loc.back()); } -{VARIABLE_RESOURCE} { return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } -{VARIABLE_SESSION} { return p::make_VARIABLE_SESSION(*driver.loc.back()); } -{VARIABLE_STATUS} { return p::make_VARIABLE_STATUS(*driver.loc.back()); } -{VARIABLE_STATUS_LINE} { return p::make_VARIABLE_STATUS_LINE(*driver.loc.back()); } -{VARIABLE_TX} { return p::make_VARIABLE_TX(*driver.loc.back()); } -{VARIABLE_USER} { return p::make_VARIABLE_USER(*driver.loc.back()); } +{VARIABLE_WEBSERVER_ERROR_LOG} { driver.error (*driver.currentLocation(), "Variable VARIABLE_WEBSERVER_ERROR_LOG is not supported by libModSecurity", ""); throw p::syntax_error(*driver.currentLocation(), "");} +{VARIABLE_GLOBAL} { return p::make_VARIABLE_GLOBAL(*driver.currentLocation()); } +{VARIABLE_IP} { return p::make_VARIABLE_IP(*driver.currentLocation()); } +{VARIABLE_RESOURCE} { return p::make_VARIABLE_RESOURCE(*driver.currentLocation()); } +{VARIABLE_SESSION} { return p::make_VARIABLE_SESSION(*driver.currentLocation()); } +{VARIABLE_STATUS} { return p::make_VARIABLE_STATUS(*driver.currentLocation()); } +{VARIABLE_STATUS_LINE} { return p::make_VARIABLE_STATUS_LINE(*driver.currentLocation()); } +{VARIABLE_TX} { return p::make_VARIABLE_TX(*driver.currentLocation()); } +{VARIABLE_USER} { return p::make_VARIABLE_USER(*driver.currentLocation()); } } { -{VARIABLE_GLOBAL}[:.] { BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.loc.back()); } -{VARIABLE_IP}[:.] { BEGINX_(); return p::make_VARIABLE_IP(*driver.loc.back()); } -{VARIABLE_RESOURCE}[:.] { BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.loc.back()); } -{VARIABLE_SESSION}[:.] { BEGINX_(); return p::make_VARIABLE_SESSION(*driver.loc.back()); } -{VARIABLE_TX}[:.] { BEGINX_(); return p::make_VARIABLE_TX(*driver.loc.back()); } -{VARIABLE_USER}[:.] { BEGINX_(); return p::make_VARIABLE_USER(*driver.loc.back()); } +{VARIABLE_GLOBAL}[:.] { BEGINX_(); return p::make_VARIABLE_GLOBAL(*driver.currentLocation()); } +{VARIABLE_IP}[:.] { BEGINX_(); return p::make_VARIABLE_IP(*driver.currentLocation()); } +{VARIABLE_RESOURCE}[:.] { BEGINX_(); return p::make_VARIABLE_RESOURCE(*driver.currentLocation()); } +{VARIABLE_SESSION}[:.] { BEGINX_(); return p::make_VARIABLE_SESSION(*driver.currentLocation()); } +{VARIABLE_TX}[:.] { BEGINX_(); return p::make_VARIABLE_TX(*driver.currentLocation()); } +{VARIABLE_USER}[:.] { BEGINX_(); return p::make_VARIABLE_USER(*driver.currentLocation()); } } { -{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.loc.back()); } -{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.loc.back()); } -{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.loc.back()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } -{FREE_TEXT_EQUALS_MACRO_EXPANSION}['] { yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } -{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{EQUALS_PLUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_PLUS(*driver.currentLocation()); } +{EQUALS_MINUS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS_MINUS(*driver.currentLocation()); } +{EQUALS} { BEGIN_ACTION_WAITING_CONTENT(); return p::make_SETVAR_OPERATION_EQUALS(*driver.currentLocation()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } +{FREE_TEXT_EQUALS_MACRO_EXPANSION}['] { yyless(yyleng - 1); BEGIN_PREVIOUS(); return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } +{FREE_TEXT_EQUALS_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_NO_PIPE}[\/]['][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_NO_PIPE}[\/]['][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } ["] { BEGIN_PREVIOUS(); yyless(0); } [,] { BEGIN_PREVIOUS(); yyless(0); } . { BEGINX(LEXING_ERROR_ACTION); yyless(0); } @@ -1059,73 +1059,73 @@ EQUALS_MINUS (?i:=\-) { -[\/]{DICT_ELEMENT_NO_PIPE}[\/] { BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } -{DICT_ELEMENT} { BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.loc.back()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/] { BEGIN_PREVIOUS(); yyless(yyleng); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][ ] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['] { BEGIN_PREVIOUS(); yyless(yyleng - 0); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_WITH_PIPE}[\/]['][|] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } +{DICT_ELEMENT} { BEGIN_PREVIOUS(); return p::make_DICT_ELEMENT(yytext, *driver.currentLocation()); } -[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.loc.back()); } -['][\/]{DICT_ELEMENT_NO_PIPE}[\/]['][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.loc.back()); } +[\/]{DICT_ELEMENT_NO_PIPE}[\/][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 1, yyleng-2), *driver.currentLocation()); } +['][\/]{DICT_ELEMENT_NO_PIPE}[\/]['][,] { BEGIN_PREVIOUS(); yyless(yyleng - 1); return p::make_DICT_ELEMENT_REGEXP(std::string(yytext, 2, yyleng-4), *driver.currentLocation()); } . { BEGINX(LEXING_ERROR_ACTION); yyless(0); } -["] { return p::make_QUOTATION_MARK(yytext, *driver.loc.back()); } +["] { return p::make_QUOTATION_MARK(yytext, *driver.currentLocation()); } } { -{OPERATOR_GEOLOOKUP}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } -{OPERATOR_UNCONDITIONAL_MATCH}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } -{OPERATOR_DETECT_SQLI}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } -{OPERATOR_DETECT_XSS}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } -{OPERATOR_VALIDATE_URL_ENCODING}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } -{OPERATOR_VALIDATE_UTF8_ENCODING}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } +{OPERATOR_GEOLOOKUP}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.currentLocation()); } +{OPERATOR_UNCONDITIONAL_MATCH}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.currentLocation()); } +{OPERATOR_DETECT_SQLI}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.currentLocation()); } +{OPERATOR_DETECT_XSS}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.currentLocation()); } +{OPERATOR_VALIDATE_URL_ENCODING}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.currentLocation()); } +{OPERATOR_VALIDATE_UTF8_ENCODING}[ ] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.currentLocation()); } } { -{OPERATOR_GEOLOOKUP}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.loc.back()); } -{OPERATOR_UNCONDITIONAL_MATCH}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.loc.back()); } -{OPERATOR_DETECT_SQLI}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.loc.back()); } -{OPERATOR_DETECT_XSS}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.loc.back()); } -{OPERATOR_VALIDATE_URL_ENCODING}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.loc.back()); } -{OPERATOR_VALIDATE_UTF8_ENCODING}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.loc.back()); } +{OPERATOR_GEOLOOKUP}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_GEOLOOKUP(*driver.currentLocation()); } +{OPERATOR_UNCONDITIONAL_MATCH}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_UNCONDITIONAL_MATCH(*driver.currentLocation()); } +{OPERATOR_DETECT_SQLI}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_SQLI(*driver.currentLocation()); } +{OPERATOR_DETECT_XSS}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_DETECT_XSS(*driver.currentLocation()); } +{OPERATOR_VALIDATE_URL_ENCODING}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_URL_ENCODING(*driver.currentLocation()); } +{OPERATOR_VALIDATE_UTF8_ENCODING}[ ]*["] { BEGIN(TRANSACTION_FROM_OPERATOR_TO_ACTIONS); return p::make_OPERATOR_VALIDATE_UTF8_ENCODING(*driver.currentLocation()); } } { -{OPERATOR_WITHIN} { BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.loc.back()); } -{OPERATOR_CONTAINS_WORD} { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.loc.back()); } -{OPERATOR_CONTAINS} { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.loc.back()); } -{OPERATOR_ENDS_WITH} { BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.loc.back()); } -{OPERATOR_EQ} { BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.loc.back()); } -{OPERATOR_GE} { BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.loc.back()); } -{OPERATOR_GT} { BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.loc.back()); } -{OPERATOR_IP_MATCH_FROM_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.loc.back()); } -{OPERATOR_IP_MATCH} { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.loc.back()); } -{OPERATOR_LE} { BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.loc.back()); } -{OPERATOR_LT} { BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.loc.back()); } -{OPERATOR_PM_FROM_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.loc.back()); } -{OPERATOR_PM} { BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.loc.back()); } -{OPERATOR_RBL} { BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.loc.back()); } -{OPERATOR_RX} { BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.loc.back()); } -{OPERATOR_RX_GLOBAL} { BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.loc.back()); } -{OPERATOR_STR_EQ} { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.loc.back()); } -{OPERATOR_STR_MATCH} { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.loc.back()); } -{OPERATOR_BEGINS_WITH} { BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.loc.back()); } -{OPERATOR_INSPECT_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.loc.back()); } -{OPERATOR_FUZZY_HASH} { BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.loc.back()); } -{OPERATOR_VALIDATE_BYTE_RANGE} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.loc.back()); } -{OPERATOR_VALIDATE_DTD} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.loc.back()); } -{OPERATOR_VALIDATE_HASH} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.loc.back()); } -{OPERATOR_VALIDATE_SCHEMA} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.loc.back()); } -{OPERATOR_VERIFY_CC} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.loc.back()); } -{OPERATOR_VERIFY_CPF} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.loc.back()); } -{OPERATOR_VERIFY_SSN} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.loc.back()); } -{OPERATOR_VERIFY_SVNR} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.loc.back()); } -{OPERATOR_GSB_LOOKUP} { BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.loc.back()); } -{OPERATOR_RSUB} { BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.loc.back()); } +{OPERATOR_WITHIN} { BEGIN_PARAMETER(); return p::make_OPERATOR_WITHIN(*driver.currentLocation()); } +{OPERATOR_CONTAINS_WORD} { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS_WORD(*driver.currentLocation()); } +{OPERATOR_CONTAINS} { BEGIN_PARAMETER(); return p::make_OPERATOR_CONTAINS(*driver.currentLocation()); } +{OPERATOR_ENDS_WITH} { BEGIN_PARAMETER(); return p::make_OPERATOR_ENDS_WITH(*driver.currentLocation()); } +{OPERATOR_EQ} { BEGIN_PARAMETER(); return p::make_OPERATOR_EQ(*driver.currentLocation()); } +{OPERATOR_GE} { BEGIN_PARAMETER(); return p::make_OPERATOR_GE(*driver.currentLocation()); } +{OPERATOR_GT} { BEGIN_PARAMETER(); return p::make_OPERATOR_GT(*driver.currentLocation()); } +{OPERATOR_IP_MATCH_FROM_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH_FROM_FILE(*driver.currentLocation()); } +{OPERATOR_IP_MATCH} { BEGIN_PARAMETER(); return p::make_OPERATOR_IP_MATCH(*driver.currentLocation()); } +{OPERATOR_LE} { BEGIN_PARAMETER(); return p::make_OPERATOR_LE(*driver.currentLocation()); } +{OPERATOR_LT} { BEGIN_PARAMETER(); return p::make_OPERATOR_LT(*driver.currentLocation()); } +{OPERATOR_PM_FROM_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_PM_FROM_FILE(*driver.currentLocation()); } +{OPERATOR_PM} { BEGIN_PARAMETER(); return p::make_OPERATOR_PM(*driver.currentLocation()); } +{OPERATOR_RBL} { BEGIN_PARAMETER(); return p::make_OPERATOR_RBL( *driver.currentLocation()); } +{OPERATOR_RX} { BEGIN_PARAMETER(); return p::make_OPERATOR_RX(*driver.currentLocation()); } +{OPERATOR_RX_GLOBAL} { BEGIN_PARAMETER(); return p::make_OPERATOR_RX_GLOBAL(*driver.currentLocation()); } +{OPERATOR_STR_EQ} { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_EQ(*driver.currentLocation()); } +{OPERATOR_STR_MATCH} { BEGIN_PARAMETER(); return p::make_OPERATOR_STR_MATCH(*driver.currentLocation()); } +{OPERATOR_BEGINS_WITH} { BEGIN_PARAMETER(); return p::make_OPERATOR_BEGINS_WITH(*driver.currentLocation()); } +{OPERATOR_INSPECT_FILE} { BEGIN_PARAMETER(); return p::make_OPERATOR_INSPECT_FILE(*driver.currentLocation()); } +{OPERATOR_FUZZY_HASH} { BEGIN_PARAMETER(); return p::make_OPERATOR_FUZZY_HASH(*driver.currentLocation()); } +{OPERATOR_VALIDATE_BYTE_RANGE} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_BYTE_RANGE(*driver.currentLocation()); } +{OPERATOR_VALIDATE_DTD} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_DTD(*driver.currentLocation()); } +{OPERATOR_VALIDATE_HASH} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_HASH(*driver.currentLocation()); } +{OPERATOR_VALIDATE_SCHEMA} { BEGIN_PARAMETER(); return p::make_OPERATOR_VALIDATE_SCHEMA(*driver.currentLocation()); } +{OPERATOR_VERIFY_CC} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CC(*driver.currentLocation()); } +{OPERATOR_VERIFY_CPF} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_CPF(*driver.currentLocation()); } +{OPERATOR_VERIFY_SSN} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SSN(*driver.currentLocation()); } +{OPERATOR_VERIFY_SVNR} { BEGIN_PARAMETER(); return p::make_OPERATOR_VERIFY_SVNR(*driver.currentLocation()); } +{OPERATOR_GSB_LOOKUP} { BEGIN_PARAMETER(); return p::make_OPERATOR_GSB_LOOKUP(*driver.currentLocation()); } +{OPERATOR_RSUB} { BEGIN_PARAMETER(); return p::make_OPERATOR_RSUB(*driver.currentLocation()); } -{NOT} { return p::make_NOT(*driver.loc.back()); } +{NOT} { return p::make_NOT(*driver.currentLocation()); } . { BEGIN_NO_OP_INFORMED(); yyless(0); } } @@ -1140,12 +1140,12 @@ EQUALS_MINUS (?i:=\-) { ["] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } -{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { [ ] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } -{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { {START_MACRO_VARIABLE} { BEGINX(EXPECTING_ACTION_PREDICATE_VARIABLE); } @@ -1154,12 +1154,12 @@ EQUALS_MINUS (?i:=\-) { ["] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } -{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_DOUBLE_QUOTE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { [ ] { BEGIN(TRANSACTION_FROM_OPERATOR_PARAMETERS_TO_ACTIONS); } -{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.loc.back()); } +{FREE_TEXT_SPACE_MACRO_EXPANSION} { return p::make_FREE_TEXT_QUOTE_MACRO_EXPANSION(yytext, *driver.currentLocation()); } } { @@ -1171,30 +1171,30 @@ EQUALS_MINUS (?i:=\-) { [ ]+ { BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\\\r\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\\\r\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\r\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\r\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\\\r\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\\\r\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\r\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\r\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\\\r\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\r\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } -[ \t]*\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\\\r\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\\\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\r\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } +[ \t]*\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ONLY_ONE); } [ \t]*\"[ \t]* { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\\\r\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\\\r\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\r\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } -[ \t]*\"[ \t]*\r\\\n[ \t]*\"[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\\\r\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\\\r\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\r\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } +[ \t]*\"[ \t]*\r\\\n[ \t]*\"[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } [ \t]*\"[ \t]*\"[ \t]* { BEGIN(EXPECTING_ACTIONS_ENDS_WITH_DOUBLE_QUOTE); } } @@ -1202,23 +1202,23 @@ EQUALS_MINUS (?i:=\-) { [ \t]+ { } -[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } -[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } +[ \t]*\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +[ \t]*\\\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } { -.*[ \t]*\\\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } -.*[ \t]*\\\r\n[ \t]* { driver.loc.back()->lines(1); driver.loc.back()->step(); } -.*[^\\] { BEGIN(INITIAL); driver.loc.back()->lines(1); driver.loc.back()->step(); } +.*[ \t]*\\\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +.*[ \t]*\\\r\n[ \t]* { driver.currentLocation()->lines(1); driver.currentLocation()->step(); } +.*[^\\] { BEGIN(INITIAL); driver.currentLocation()->lines(1); driver.currentLocation()->step(); } } . { BEGIN(LEXING_ERROR); yyless(0); } -.+ { driver.error (*driver.loc.back(), "Invalid input: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } -.+ { driver.error (*driver.loc.back(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } -.+ { driver.error (*driver.loc.back(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.loc.back(), ""); } +.+ { driver.error (*driver.currentLocation(), "Invalid input: ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } +.+ { driver.error (*driver.currentLocation(), "Expecting an action, got: ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } +.+ { driver.error (*driver.currentLocation(), "Expecting a variable, got: : ", yytext); throw p::syntax_error(*driver.currentLocation(), ""); } <> { @@ -1228,37 +1228,35 @@ EQUALS_MINUS (?i:=\-) yypop_buffer_state(); if (!YY_CURRENT_BUFFER) { - return p::make_END(*driver.loc.back()); + return p::make_END(*driver.currentLocation()); } - yy::location *l = driver.loc.back(); - driver.loc.pop_back(); - delete l; + driver.popLocation(); } {CONFIG_INCLUDE}[ \t]+{CONFIG_VALUE_PATH} { std::string err; const char *file = strchr(yytext, ' ') + 1; - std::string fi = modsecurity::utils::find_resource(file, *driver.loc.back()->end.filename, &err); + std::string fi = modsecurity::utils::find_resource(file, driver.currentLocation()->getFileName(), &err); if (fi.empty() == true) { BEGIN(INITIAL); - driver.error (*driver.loc.back(), "", file + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", file + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } std::list files = modsecurity::utils::expandEnv(fi, 0); files.reverse(); for (auto& s: files) { std::string err; - std::string f = modsecurity::utils::find_resource(s, *driver.loc.back()->end.filename, &err); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(f); + std::string f = modsecurity::utils::find_resource(s, driver.currentLocation()->getFileName(), &err); + driver.newLocation(f); + yyin = fopen(f.c_str(), "r" ); if (!yyin) { BEGIN(INITIAL); - driver.loc.pop_back(); - driver.error (*driver.loc.back(), "", s + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.popLocation(); + driver.error (*driver.currentLocation(), "", s + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE )); } @@ -1269,25 +1267,24 @@ EQUALS_MINUS (?i:=\-) const char *file = strchr(yytext, ' ') + 1; char *f = strdup(file + 1); f[strlen(f)-1] = '\0'; - std::string fi = modsecurity::utils::find_resource(f, *driver.loc.back()->end.filename, &err); + std::string fi = modsecurity::utils::find_resource(f, driver.currentLocation()->getFileName(), &err); if (fi.empty() == true) { BEGIN(INITIAL); - driver.error (*driver.loc.back(), "", file + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", file + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } std::list files = modsecurity::utils::expandEnv(fi, 0); files.reverse(); for (auto& s: files) { - std::string f = modsecurity::utils::find_resource(s, *driver.loc.back()->end.filename, &err); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(f); + std::string f = modsecurity::utils::find_resource(s, driver.currentLocation()->getFileName(), &err); + driver.newLocation(f); yyin = fopen(f.c_str(), "r" ); if (!yyin) { BEGIN(INITIAL); - driver.loc.pop_back(); - driver.error (*driver.loc.back(), "", s + std::string(": Not able to open file. ") + err); - throw p::syntax_error(*driver.loc.back(), ""); + driver.popLocation(); + driver.error (*driver.currentLocation(), "", s + std::string(": Not able to open file. ") + err); + throw p::syntax_error(*driver.currentLocation(), ""); } yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE )); } @@ -1301,15 +1298,15 @@ EQUALS_MINUS (?i:=\-) std::vector conf = modsecurity::utils::string::split(yytext, ' '); if (conf.size() < 2) { - driver.error (*driver.loc.back(), "", "SecRemoteRules demands a key and a URI"); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", "SecRemoteRules demands a key and a URI"); + throw p::syntax_error(*driver.currentLocation(), ""); } key = conf[1]; url = conf[2]; c.setKey(key); - driver.loc.push_back(new yy::location()); - driver.loc.back()->begin.filename = driver.loc.back()->end.filename = new std::string(url); + driver.newLocation(url); + YY_BUFFER_STATE temp = YY_CURRENT_BUFFER; yypush_buffer_state(temp); @@ -1321,8 +1318,8 @@ EQUALS_MINUS (?i:=\-) /** TODO: Implement the server logging mechanism. */ } if (driver.m_remoteRulesActionOnFailed == RulesSet::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction) { - driver.error (*driver.loc.back(), "", yytext + std::string(" - Failed to download: ") + c.error); - throw p::syntax_error(*driver.loc.back(), ""); + driver.error (*driver.currentLocation(), "", yytext + std::string(" - Failed to download: ") + c.error); + throw p::syntax_error(*driver.currentLocation(), ""); } } @@ -1345,6 +1342,7 @@ bool Driver::scan_begin () { } void Driver::scan_end () { + yy_delete_buffer(YY_CURRENT_BUFFER); yylex_destroy(); BEGIN(INITIAL); } diff --git a/src/rule_marker.h b/src/rule_marker.h index 280cacb6..ddb0ed5f 100644 --- a/src/rule_marker.h +++ b/src/rule_marker.h @@ -39,19 +39,19 @@ class RuleMarker : public Rule { public: RuleMarker( const std::string &name, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber) - : Rule(std::move(fileName), lineNumber), + : Rule(fileName, lineNumber), m_name(std::make_shared(name)) { } RuleMarker(RuleMarker &&r) : Rule(r), - m_name(std::move(r.m_name)) + m_name(r.m_name) { }; RuleMarker(const RuleMarker &r) : Rule(r), - m_name(std::move(r.m_name)) + m_name(r.m_name) { }; virtual bool evaluate(Transaction *transaction) const override { diff --git a/src/rule_script.h b/src/rule_script.h index 321486b0..600c4a98 100644 --- a/src/rule_script.h +++ b/src/rule_script.h @@ -49,9 +49,9 @@ class RuleScript : public RuleWithActions { RuleScript(const std::string &name, Actions *actions, Transformations *t, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber) - : RuleWithActions(actions, t, std::move(fileName), lineNumber), + : RuleWithActions(actions, t, fileName, lineNumber), m_name(name), m_lua(std::unique_ptr(new engine::Lua())) { } diff --git a/src/rule_unconditional.h b/src/rule_unconditional.h index c44f55eb..b048feb1 100644 --- a/src/rule_unconditional.h +++ b/src/rule_unconditional.h @@ -42,9 +42,9 @@ class RuleUnconditional : public RuleWithActions { RuleUnconditional( Actions *actions, Transformations *transformations, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber) - : RuleWithActions(actions, transformations, std::move(fileName), lineNumber) { } + : RuleWithActions(actions, transformations, fileName, lineNumber) { } RuleUnconditional(const RuleUnconditional &r) : RuleWithActions(r) diff --git a/src/rule_with_actions.cc b/src/rule_with_actions.cc index 048af1f5..32b280a4 100644 --- a/src/rule_with_actions.cc +++ b/src/rule_with_actions.cc @@ -63,9 +63,9 @@ namespace modsecurity { RuleWithActions::RuleWithActions( Actions *actions, Transformations *transformations, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber) - : Rule(std::move(fileName), lineNumber), + : Rule(fileName, lineNumber), RuleWithActionsProperties(transformations), m_ruleId(0), m_chainedRuleChild(nullptr), @@ -96,6 +96,7 @@ RuleWithActions::RuleWithActions( } newActions.push_back(a); } + delete actions; } diff --git a/src/rule_with_actions.h b/src/rule_with_actions.h index 22660ef9..78dd73c9 100644 --- a/src/rule_with_actions.h +++ b/src/rule_with_actions.h @@ -79,12 +79,15 @@ class RuleWithActions : public Rule, public RuleWithActionsProperties { RuleWithActions( Actions *a, Transformations *t, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber); RuleWithActions(const RuleWithActions &r); RuleWithActions &operator=(const RuleWithActions& r); + virtual ~RuleWithActions() + { }; + virtual bool evaluate(Transaction *transaction) const override; void executeActionsIndependentOfChainedRuleResult( diff --git a/src/rule_with_actions_properties.cc b/src/rule_with_actions_properties.cc index fd39ec20..03de1ac8 100644 --- a/src/rule_with_actions_properties.cc +++ b/src/rule_with_actions_properties.cc @@ -44,8 +44,15 @@ RuleWithActionsProperties::RuleWithActionsProperties(Transformations *transforma m_setVars(), m_disruptiveAction(nullptr), m_tags(), - m_transformations(transformations != nullptr ? *transformations : Transformations()) -{ } + m_transformations() +{ + if (transformations != nullptr) { + for (auto &t : *transformations) { + m_transformations.push_back(t); + } + } + delete transformations; +} diff --git a/src/rule_with_operator.cc b/src/rule_with_operator.cc index ddd49d06..f9773f06 100644 --- a/src/rule_with_operator.cc +++ b/src/rule_with_operator.cc @@ -58,7 +58,7 @@ RuleWithOperator::RuleWithOperator(Operator *op, variables::Variables *_variables, Actions *actions, Transformations *transformations, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber) : RuleWithActions(actions, transformations, std::move(fileName), lineNumber), m_variables(std::unique_ptr(_variables)), @@ -74,8 +74,8 @@ RuleWithOperator::RuleWithOperator(Operator *op, -RuleWithOperator::~RuleWithOperator() { -} +RuleWithOperator::~RuleWithOperator() +{ } void RuleWithOperator::updateMatchedVars(Transaction *trans, @@ -223,9 +223,9 @@ bool RuleWithOperator::evaluate(Transaction *trans) const { variables::Variables *variables = m_variables.get(); bool recursiveGlobalRet; std::string eparam; - variables::Variables vars; + variables::Variables vars(false); vars.reserve(4); - variables::Variables exclusion; + variables::Variables exclusion(false); RuleWithActions::evaluate(trans); @@ -278,6 +278,7 @@ bool RuleWithOperator::evaluate(Transaction *trans) const { continue; } e.clear(); + var->evaluate(trans, &e); for (const auto &vv : e) { TransformationsResults transformationsResults; diff --git a/src/rule_with_operator.h b/src/rule_with_operator.h index 097da682..8de2d8eb 100644 --- a/src/rule_with_operator.h +++ b/src/rule_with_operator.h @@ -45,7 +45,7 @@ class RuleWithOperator : public RuleWithActions { variables::Variables *variables, Actions *actions, Transformations *transformations, - std::unique_ptr fileName, + std::shared_ptr fileName, int lineNumber); RuleWithOperator(const RuleWithOperator &op) @@ -95,7 +95,7 @@ class RuleWithOperator : public RuleWithActions { virtual void dump(std::stringstream &out) const override { Rule::dump(out); - out << "# RuleWithOperator" << std::endl; + out << "# RuleWithOperator (op counter: " << m_operator.use_count() << ")" << std::endl; out << "SecRule "; out << m_variables->getVariableNames() << " "; out << "\"" << "@" << m_operator->m_op << " " << m_operator->m_param << "\""; diff --git a/src/run_time_string.h b/src/run_time_string.h index 551f5980..6c4950a7 100644 --- a/src/run_time_string.h +++ b/src/run_time_string.h @@ -62,6 +62,8 @@ class RunTimeString { return *this; } + ~RunTimeString() + { } void append(const std::string &text); void append(std::unique_ptr var); diff --git a/src/utils/system.cc b/src/utils/system.cc index bf61801e..e0e476e1 100644 --- a/src/utils/system.cc +++ b/src/utils/system.cc @@ -62,6 +62,11 @@ double cpu_seconds(void) { } +std::string find_resource(const std::string& file, std::shared_ptr config, + std::string *err) { + return find_resource(file, *config.get(), err); +} + std::string find_resource(const std::string& resource, const std::string& config, std::string *err) { std::ifstream *iss; diff --git a/src/utils/system.h b/src/utils/system.h index 130c25c6..e89bafc4 100644 --- a/src/utils/system.h +++ b/src/utils/system.h @@ -31,6 +31,10 @@ namespace utils { double cpu_seconds(void); std::string find_resource(const std::string& file, const std::string& config, std::string *err); + +std::string find_resource(const std::string& file, std::shared_ptr config, + std::string *err); + std::string get_path(const std::string& file); std::list expandEnv(const std::string& var, int flags); bool createDir(std::string dir, int mode, std::string *error); diff --git a/src/variables/variable.h b/src/variables/variable.h index c1c9b56c..65642d9e 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -711,6 +711,24 @@ class VariableRegex : public Variable { class Variables : public std::vector { public: + + explicit Variables(bool cleanup = true) + : m_cleanup(cleanup) + { } + + Variables(const Variable &a) = delete; + Variables& operator=(const Variables& other) = delete; + + ~Variables() { + if (!m_cleanup) { + return; + } + + for (auto *a : *this) { + delete a; + } + } + bool contains(Variable *v) { return std::find_if(begin(), end(), [v](Variable *m) -> bool { return *v == *m; }) != end(); @@ -739,6 +757,8 @@ class Variables : public std::vector { } return names; } + private: + bool m_cleanup; }; diff --git a/test/regression/regression.cc b/test/regression/regression.cc index 9d1ba597..1c53bc5c 100644 --- a/test/regression/regression.cc +++ b/test/regression/regression.cc @@ -174,6 +174,7 @@ modsecurity::RulesSet *setupModSecRules(RegressionTestResult *r) { auto s = rules->getParserError(); if (regex_search(s, &match, re)) { r->passed(); + delete rules; return nullptr; } } @@ -187,6 +188,7 @@ modsecurity::RulesSet *setupModSecRules(RegressionTestResult *r) { reason << KWHT << "Expected: " << RESET << r->getExpectedParserError() << std::endl; reason << KWHT << "Produced: " << RESET << rules->getParserError() << std::endl; r->failed(reason.str()); + delete rules; return nullptr; } @@ -278,6 +280,8 @@ void processRequest( CustomDebugLog *d = reinterpret_cast(rules->m_debugLog); debug_log.assign(d->log_messages()); + delete modsec_transaction; + *status_code = r.status; } @@ -398,9 +402,9 @@ int main(int argc, char **argv) { ModSecurityTest test; std::string ver(MODSECURITY_VERSION); - std::string envvar("MODSECURITY=ModSecurity " + ver + " regression tests"); + std::string envvar("ModSecurity " + ver + " regression tests"); - putenv(strdup(envvar.c_str())); + setenv("MODSECURITY", envvar.c_str(), 0); #ifndef NO_LOGS int test_number = 0; #endif diff --git a/test/unit/unit.cc b/test/unit/unit.cc index 40b47dfb..32fe5142 100644 --- a/test/unit/unit.cc +++ b/test/unit/unit.cc @@ -77,7 +77,8 @@ void perform_unit_test(ModSecurityTest *test, UnitTest *t, if (t->type == "op") { Operator *op = Operator::instantiate(t->name, t->param); - op->init(t->filename, &error); + std::shared_ptr fileName = std::make_shared(t->filename); + op->init(fileName, &error); int ret = op->evaluate(NULL, NULL, t->input, NULL); t->obtained = ret; if (ret != t->ret) { diff --git a/tools/rules-check/rules-check.cc b/tools/rules-check/rules-check.cc index fb3108d1..2ee67a64 100644 --- a/tools/rules-check/rules-check.cc +++ b/tools/rules-check/rules-check.cc @@ -41,7 +41,7 @@ int main(int argc, char **argv) { if (*args == NULL) { print_help(argv[0]); - return 0; + goto ret; } while (*args != NULL) { @@ -90,19 +90,22 @@ int main(int argc, char **argv) { std::cout << "Loaded " << std::to_string(r) << " rules." << std::endl; if (err.empty() == false) { std::cerr << " " << err << std::endl; + goto end; } rules->dump(); next: args++; } - delete rules; - +end: if (ret < 0) { std::cout << "Test failed." << std::endl; } else { std::cout << "Test ok." << std::endl; } +ret: + delete rules; + return ret; }