302 Commits

Author SHA1 Message Date
Felipe Zimmerle
de9b5b2f16
Cosmetics: Using VariableValues instead of std::vector<...>
Making the code more readable.
2020-10-29 13:44:09 -03:00
WGH
21a63b296a
Use std::shared_ptr for variable resolution
AnchoredSetVariable::resolve is called for every rule
(see RuleWithOperator::evaluate). The previous implementation allocated
a new copy of every variable, which quickly added up. In my tests,
AnchoredSetVariable::resolve function consumed 7.8% of run time.

AnchoredSetVariable (which is a multimap) values are never changed,
only added. This means it's safe to store them in std::shared_ptr,
and make resolve return shared_ptr pointing to the same object.

Other resolve implementation could also use this optimization by not
allocating new objects, however, they are not hot spots, so this
optimization was not implemented there.

In my benchmark, this raises performance from 117 requests per second to
131 RPS, and overhead is lowered from 7.8% to 2.4%.

As a bonus, replacing plain pointer with smart pointers make code
cleaner, since using smart pointers makes manual deletes no longer necessary.

Additionally, VariableOrigin is now stored in plain std::vector,
since it's wasteful to store structure containing just two integer
values using std::list<std::unique_ptr<T>>.
2020-10-29 13:44:08 -03:00
WGH
b32a169d2a
Make all "rule id" variables of type RuleId
Previously, ModSecurity inconsistently used RuleId, int and double for
rule id variables in different places.
2020-10-29 13:44:07 -03:00
Felipe Zimmerle
d393b4734b
Makes RuleWithActions const in run time operations 2020-10-29 13:44:07 -03:00
Felipe Zimmerle
e4125318d9
Introduces ActionWithExecution 2020-10-29 13:44:06 -03:00
Felipe Zimmerle
3bdd96c603
Removes method isDisruptive from Action class 2020-10-29 13:44:06 -03:00
Felipe Zimmerle
18681bb3d5
Action: make sure that null constructor is not used 2020-10-29 13:44:06 -03:00
Felipe Zimmerle
647717b926
Computes auditlog during rules load time 2020-10-29 13:44:05 -03:00
Felipe Zimmerle
8aa3e3439d
actions: Removes Rule parameter from runtime execute
Generals organization on the Action class
2020-10-29 13:44:05 -03:00
Felipe Zimmerle
67b08dfe43
actions: Compute the rule association during rules load 2020-10-29 13:44:04 -03:00
Felipe Zimmerle
af23c720ae
Makes operator to use string_view 2020-10-29 13:44:03 -03:00
Felipe Zimmerle
f5cdf03de1
Improves rules dump for better testing 2020-10-29 13:44:03 -03:00
Felipe Zimmerle
8890f9bbbc
Better error handling when loading configurations 2020-10-29 13:44:03 -03:00
Felipe Zimmerle
fb35dd975c
Cosmetics: Defining a type for RuleId 2020-10-29 13:44:02 -03:00
Felipe Zimmerle
c9204a1c1f
Moves rule* headers to src/ 2020-10-29 13:44:02 -03:00
Felipe Zimmerle
7bbc5c3441
Cleanup on Action class 2020-10-29 13:44:02 -03:00
Felipe Zimmerle
7da4c9a007
Removes RuleMessage from action execute signature 2020-10-29 13:44:01 -03:00
Felipe Zimmerle
6547f3601f
Refactoring: Makes transformations to work with new execute signature 2020-10-29 13:44:01 -03:00
Felipe Zimmerle
71de3b48f2
Cosmetics: fix some cppcheck complains 2020-10-29 13:44:00 -03:00
Felipe Zimmerle
2331976238
Refactoring: rename evaluate to execute on actions 2020-10-29 13:44:00 -03:00
Felipe Zimmerle
35a341e473
Refactoring in the Rule class to make it more elegant 2020-10-29 13:43:59 -03:00
Felipe Zimmerle
e0703a4774
Rule: isMarker is no longer necessary 2020-10-29 13:43:57 -03:00
Felipe Zimmerle
0daeb09b0a
Adds new method for rule merge
IMPORTANT: SecDefaultAction specified on a child configuration will
overwrite the ones specified on the parent; Previously it was
concatenating.
2020-10-29 13:43:54 -03:00
Felipe Zimmerle
3a189a131f
Moves default actions to be part of the rules 2020-10-29 10:34:45 -03:00
Felipe Zimmerle
7e0bc26917
Using performLogging function 2020-03-31 15:20:15 -03:00
Felipe Zimmerle
7a48245aed
Creates RuleUnconditional
Makes RuleScript child of RuleWithActions instead of Operator
2020-03-31 14:44:19 -03:00
Felipe Zimmerle
f63bd1a45d
Moves Rule[WithActions|WithOperator] to their own files 2020-03-31 13:33:38 -03:00
Felipe Zimmerle
8274be066a
Refactoring: Having RuleMarker in a separated file 2020-03-31 12:45:46 -03:00
Felipe Zimmerle
bdedfd2463
Refactoring: Renames RuleBase to Rule 2020-03-31 12:26:13 -03:00
Felipe Zimmerle
59d4268882
Refactoring: renames Rule to RuleWithOperator 2020-03-31 10:00:08 -03:00
Felipe Zimmerle
8eb7b8fe6c
Refactoring: Splits Rule into Rule and RuleWithActions 2020-03-30 20:22:37 -03:00
Felipe Zimmerle
43f8aee6b6
Splits Rule class into: Rule, RuleBase, RuleMarker 2020-03-30 20:21:36 -03:00
Felipe Zimmerle
fda03c0016
Yet another refactoring in Rule 2020-03-30 15:38:51 -03:00
Felipe Zimmerle
b66224853b
Refactoring in Rule: Meaningful structures name 2020-03-27 17:43:43 -03:00
Felipe Zimmerle
96849c07de
Makes action name a shared pointer 2020-03-27 16:13:15 -03:00
Felipe Zimmerle
9c526b3647
Avoids copy on the transformation operation 2020-03-27 16:12:55 -03:00
Felipe Zimmerle
8cfb289cea
Lets reserve some memory for rule message 2020-03-27 15:49:02 -03:00
Felipe Zimmerle
a609249d64
Makes m_id a shared pointer 2020-03-27 15:48:11 -03:00
Felipe Zimmerle
343b86c2a7
Makes m_fileName a shared pointer 2020-03-27 15:00:22 -03:00
Felipe Zimmerle
14b2bd77a0
Makes m_uri_no_query_string_decoded a shared pointer 2020-03-27 14:46:56 -03:00
Felipe Zimmerle
d7d5cd2a91
Makes m_serverIpAddress a shared pointer 2020-03-27 14:46:43 -03:00
Felipe Zimmerle
8df35deadb
Makes m_clientIpAddress a shared pointer 2020-03-27 14:22:20 -03:00
Felipe Zimmerle
196adcae23
Removes reference counter for RulesSet 2020-03-27 14:06:12 -03:00
Felipe Zimmerle
5ebfa5eacb
Removes referece count from audit logs 2020-03-26 10:38:55 -03:00
Felipe Zimmerle
4b94fabef9
Removes reference count form Actions 2020-03-26 10:01:11 -03:00
Felipe Zimmerle
6b0ad8049a
Having default actions as o shared pointer 2020-03-26 09:59:57 -03:00
Felipe Zimmerle
9d158611cf
Makes Rule a shared pointer 2020-03-25 16:11:23 -03:00
Felipe Zimmerle
f1d22f9b02
Fix version check 2020-03-24 17:20:22 -03:00
Felipe Zimmerle
6367e6d5e9
Having a class Rules 2020-03-24 17:20:10 -03:00
Felipe Zimmerle
fb7714f202
Creates class RulesSetPhases 2020-03-24 14:00:28 -03:00