Skip to content

Commit 082a3e3

Browse files
author
Felipe Zimmerle
committed
Adds support to SecWebAppID
1 parent 37c34f3 commit 082a3e3

File tree

16 files changed

+3141
-3029
lines changed

16 files changed

+3141
-3029
lines changed

CHANGES

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11

22
v3.0.????? - ?
33
---------------------------
4-
4+
5+
- Adds support for SecWebAppId
6+
[Issue #1442 - @zimmerle, @victorhora]
57
- Adds support for SecRuleRemoveByTag.
68
[Issue #1476 - @zimmerle, @victorhora]
79
- Adds support for update target by message.

headers/modsecurity/collection/collection.h

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class Collection {
5252
virtual void del(const std::string& key) = 0;
5353

5454
virtual std::unique_ptr<std::string> resolveFirst(
55-
const std::string& var) = 0;
55+
const std::string& var) = 0;
5656

5757
virtual void resolveSingleMatch(const std::string& var,
5858
std::vector<const Variable *> *l) = 0;
@@ -62,52 +62,129 @@ class Collection {
6262
std::vector<const Variable *> *l) = 0;
6363

6464

65+
/* store */
6566
virtual void store(std::string key, std::string compartment,
6667
std::string value) {
6768
std::string nkey = compartment + "::" + key;
6869
store(nkey, value);
6970
}
7071

72+
73+
virtual void store(std::string key, std::string compartment,
74+
std::string compartment2, std::string value) {
75+
std::string nkey = compartment + "::" + compartment2 + "::" + key;
76+
store(nkey, value);
77+
}
78+
79+
80+
/* storeOrUpdateFirst */
7181
virtual bool storeOrUpdateFirst(const std::string &key,
7282
std::string compartment, const std::string &value) {
7383
std::string nkey = compartment + "::" + key;
7484
return storeOrUpdateFirst(nkey, value);
7585
}
7686

87+
88+
virtual bool storeOrUpdateFirst(const std::string &key,
89+
std::string compartment, std::string compartment2,
90+
const std::string &value) {
91+
std::string nkey = compartment + "::" + compartment2 + "::" + key;
92+
return storeOrUpdateFirst(nkey, value);
93+
}
94+
95+
96+
/* updateFirst */
7797
virtual bool updateFirst(const std::string &key, std::string compartment,
7898
const std::string &value) {
7999
std::string nkey = compartment + "::" + key;
80100
return updateFirst(nkey, value);
81101
}
82102

103+
104+
virtual bool updateFirst(const std::string &key, std::string compartment,
105+
std::string compartment2, const std::string &value) {
106+
std::string nkey = compartment + "::" + compartment2 + "::" + key;
107+
return updateFirst(nkey, value);
108+
}
109+
110+
111+
/* del */
83112
virtual void del(const std::string& key, std::string compartment) {
84113
std::string nkey = compartment + "::" + key;
85114
del(nkey);
86115
}
87116

117+
118+
virtual void del(const std::string& key, std::string compartment,
119+
std::string compartment2) {
120+
std::string nkey = compartment + "::" + compartment2 + "::" + key;
121+
del(nkey);
122+
}
123+
124+
125+
/* resolveFirst */
88126
virtual std::unique_ptr<std::string> resolveFirst(const std::string& var,
89127
std::string compartment) {
90128
std::string nkey = compartment + "::" + var;
91129
return resolveFirst(nkey);
92130
}
93131

132+
133+
virtual std::unique_ptr<std::string> resolveFirst(const std::string& var,
134+
std::string compartment, std::string compartment2) {
135+
std::string nkey = compartment + "::" + compartment2 + "::" + var;
136+
return resolveFirst(nkey);
137+
}
138+
139+
140+
/* resolveSingleMatch */
94141
virtual void resolveSingleMatch(const std::string& var,
95142
std::string compartment, std::vector<const Variable *> *l) {
96143
std::string nkey = compartment + "::" + var;
97144
resolveSingleMatch(nkey, l);
98145
}
99146

147+
148+
virtual void resolveSingleMatch(const std::string& var,
149+
std::string compartment, std::string compartment2,
150+
std::vector<const Variable *> *l) {
151+
std::string nkey = compartment + "::" + compartment2 + "::" + var;
152+
resolveSingleMatch(nkey, l);
153+
}
154+
155+
156+
/* resolveMultiMatches */
100157
virtual void resolveMultiMatches(const std::string& var,
101158
std::string compartment, std::vector<const Variable *> *l) {
102159
std::string nkey = compartment + "::" + var;
103160
resolveMultiMatches(nkey, l);
104161
}
105162

163+
164+
virtual void resolveMultiMatches(const std::string& var,
165+
std::string compartment, std::string compartment2,
166+
std::vector<const Variable *> *l) {
167+
std::string nkey = compartment + "::" + compartment2 + "::" + var;
168+
resolveMultiMatches(nkey, l);
169+
}
170+
171+
172+
/* resolveRegularExpression */
106173
virtual void resolveRegularExpression(const std::string& var,
107174
std::string compartment, std::vector<const Variable *> *l) {
108175
std::string nkey = compartment + "::" + var;
109176
resolveRegularExpression(nkey, l);
110177
}
178+
179+
180+
virtual void resolveRegularExpression(const std::string& var,
181+
std::string compartment, std::string compartment2,
182+
std::vector<const Variable *> *l) {
183+
std::string nkey = compartment + "::" + compartment2 + "::" + var;
184+
resolveRegularExpression(nkey, l);
185+
}
186+
187+
std::string m_name;
111188
};
112189

113190
} // namespace collection

headers/modsecurity/collection/collections.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,28 +54,48 @@ class Collections :
5454
void storeOrUpdateFirst(const std::string& collectionName,
5555
const std::string& variableName,
5656
const std::string& targetValue);
57+
void storeOrUpdateFirst(const std::string& collectionName,
58+
const std::string& variableName,
59+
const std::string& appid,
60+
const std::string& targetValue);
5761
bool storeOrUpdateFirst(const std::string &key, const std::string &value);
5862
bool updateFirst(const std::string &key, const std::string &value);
5963
void del(const std::string& key);
6064
std::unique_ptr<std::string> resolveFirst(const std::string& var);
6165
std::unique_ptr<std::string> resolveFirst(const std::string& collectionName,
6266
const std::string& var);
67+
std::unique_ptr<std::string> resolveFirst(const std::string& collectionName,
68+
const std::string &appid, const std::string& var);
6369

6470
void resolveSingleMatch(const std::string& var,
6571
std::vector<const Variable *> *l);
6672
void resolveSingleMatch(const std::string& var,
6773
const std::string& collection,
6874
std::vector<const Variable *> *l);
75+
void resolveSingleMatch(const std::string& var,
76+
const std::string& collection,
77+
const std::string& appid,
78+
std::vector<const Variable *> *l);
79+
6980
void resolveMultiMatches(const std::string& var,
7081
std::vector<const Variable *> *l);
7182
void resolveMultiMatches(const std::string& var,
7283
const std::string& collection,
7384
std::vector<const Variable *> *l);
85+
void resolveMultiMatches(const std::string& var,
86+
const std::string& collection,
87+
const std::string& appid,
88+
std::vector<const Variable *> *l);
89+
7490
void resolveRegularExpression(const std::string& var,
7591
std::vector<const Variable *> *l);
7692
void resolveRegularExpression(const std::string& var,
7793
const std::string& collection,
7894
std::vector<const Variable *> *l);
95+
void resolveRegularExpression(const std::string& var,
96+
const std::string& collection,
97+
const std::string& appid,
98+
std::vector<const Variable *> *l);
7999

80100
/**
81101
* This is a special collection to host the transaction variables.

headers/modsecurity/rules_properties.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,11 @@ class RulesProperties {
340340
from->m_secArgumentSeparator.m_value;
341341
}
342342

343+
if (from->m_secWebAppId.m_set == true) {
344+
to->m_secWebAppId.m_value = \
345+
from->m_secWebAppId.m_value;
346+
}
347+
343348
if (from->m_unicodeMapTable.m_set == true) {
344349
to->m_unicodeMapTable.m_unicode_map_table = \
345350
from->m_unicodeMapTable.m_unicode_map_table;
@@ -380,7 +385,6 @@ class RulesProperties {
380385
}
381386
}
382387

383-
384388
if (to->m_auditLog) {
385389
std::string error;
386390
to->m_auditLog->merge(from->m_auditLog, &error);
@@ -480,6 +484,7 @@ class RulesProperties {
480484
ConfigString m_uploadDirectory;
481485
ConfigString m_uploadTmpDirectory;
482486
ConfigString m_secArgumentSeparator;
487+
ConfigString m_secWebAppId;
483488
std::vector<actions::Action *> m_defaultActions[8];
484489
std::vector<modsecurity::Rule *> m_rules[8];
485490
ConfigUnicodeMap m_unicodeMapTable;

src/actions/set_var.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <memory>
2121

2222
#include "modsecurity/transaction.h"
23+
#include "modsecurity/rules.h"
2324
#include "modsecurity/rule.h"
2425
#include "src/macro_expansion.h"
2526
#include "src/utils/string.h"
@@ -154,7 +155,7 @@ bool SetVar::evaluate(Rule *rule, Transaction *transm_parser_payload) {
154155
+ ":" + m_variableNameExpanded + " with value: " + targetValue);
155156
#endif
156157
transm_parser_payload->m_collections.storeOrUpdateFirst(m_collectionName,
157-
m_variableNameExpanded, targetValue);
158+
m_variableNameExpanded, transm_parser_payload->m_rules->m_secWebAppId.m_value, targetValue);
158159

159160
end:
160161
return true;

0 commit comments

Comments
 (0)