Skip to content
This repository was archived by the owner on Jul 8, 2021. It is now read-only.

Commit 5b10f7e

Browse files
mirkodziadzka-aviAbhi Joglekar
authored and
Abhi Joglekar
committed
Treat _NAMES variables as collections (owasp-modsecurity#5)
* Treat _NAMES variables as collections * Fix an issue with the offset of ARGS_NAMES. * Fix regression tests for the new behaviour. * Add generated seclang files.
1 parent 0508395 commit 5b10f7e

19 files changed

+4002
-3278
lines changed

headers/modsecurity/transaction.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ class TransactionAnchoredVariables {
9595
public:
9696
explicit TransactionAnchoredVariables(Transaction *t)
9797
: m_variableArgsNames(t, "ARGS_NAMES"),
98-
m_variableArgGetNames(t, "ARGS_GET_NAMES"),
99-
m_variableArgPostNames(t, "ARGS_POST_NAMES"),
98+
m_variableArgsGetNames(t, "ARGS_GET_NAMES"),
99+
m_variableArgsPostNames(t, "ARGS_POST_NAMES"),
100100
m_variableRequestHeadersNames(t, "REQUEST_HEADERS_NAMES"),
101101
m_variableResponseContentType(t, "RESPONSE_CONTENT_TYPE"),
102102
m_variableResponseHeadersNames(t, "RESPONSE_HEADERS_NAMES"),
@@ -172,12 +172,12 @@ class TransactionAnchoredVariables {
172172
m_variableOffset(0)
173173
{ }
174174

175-
AnchoredVariable m_variableArgsNames;
176-
AnchoredVariable m_variableArgGetNames;
177-
AnchoredVariable m_variableArgPostNames;
178-
AnchoredVariable m_variableRequestHeadersNames;
175+
AnchoredSetVariable m_variableArgsNames;
176+
AnchoredSetVariable m_variableArgsGetNames;
177+
AnchoredSetVariable m_variableArgsPostNames;
178+
AnchoredSetVariable m_variableRequestHeadersNames;
179179
AnchoredVariable m_variableResponseContentType;
180-
AnchoredVariable m_variableResponseHeadersNames;
180+
AnchoredSetVariable m_variableResponseHeadersNames;
181181
AnchoredVariable m_variableARGScombinedSize;
182182
AnchoredVariable m_variableAuthType;
183183
AnchoredVariable m_variableFilesCombinedSize;

src/macro_expansion.cc

+16-16
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,9 @@ std::string MacroExpansion::expand(const std::string& input,
7373
collection = variable.find(":");
7474
}
7575
if (collection == std::string::npos) {
76-
if (compareStrNoCase(variable, "ARGS_NAMES")) {
77-
variableValue = transaction->m_variableArgsNames.resolveFirst();
78-
}
79-
else if (compareStrNoCase(variable, "ARGS_GET_NAMES")) {
80-
variableValue = transaction->m_variableArgGetNames.resolveFirst();
81-
}
82-
else if (compareStrNoCase(variable, "ARGS_POST_NAMES")) {
83-
variableValue = transaction->m_variableArgPostNames.resolveFirst();
84-
}
85-
else if (compareStrNoCase(variable, "REQUEST_HEADERS_NAMES")) {
86-
variableValue = transaction->m_variableRequestHeadersNames.resolveFirst();
87-
}
88-
else if (compareStrNoCase(variable, "RESPONSE_CONTENT_TYPE")) {
76+
if (compareStrNoCase(variable, "RESPONSE_CONTENT_TYPE")) {
8977
variableValue = transaction->m_variableResponseContentType.resolveFirst();
9078
}
91-
else if (compareStrNoCase(variable, "RESPONSE_HEADERS_NAMES")) {
92-
variableValue = transaction->m_variableResponseHeadersNames.resolveFirst();
93-
}
9479
else if (compareStrNoCase(variable, "ARGS_COMBINED_SIZE")) {
9580
variableValue = transaction->m_variableARGScombinedSize.resolveFirst();
9681
}
@@ -245,6 +230,15 @@ std::string MacroExpansion::expand(const std::string& input,
245230
if (compareStrNoCase(col, "ARGS")) {
246231
variableValue = transaction->m_variableArgs.resolveFirst(var);
247232
}
233+
else if (compareStrNoCase(variable, "ARGS_NAMES")) {
234+
variableValue = transaction->m_variableArgsNames.resolveFirst(var);
235+
}
236+
else if (compareStrNoCase(variable, "ARGS_GET_NAMES")) {
237+
variableValue = transaction->m_variableArgsGetNames.resolveFirst(var);
238+
}
239+
else if (compareStrNoCase(variable, "ARGS_POST_NAMES")) {
240+
variableValue = transaction->m_variableArgsPostNames.resolveFirst(var);
241+
}
248242
else if (compareStrNoCase(col, "RULE")) {
249243
variableValue = transaction->m_variableRule.resolveFirst(var);
250244
}
@@ -284,9 +278,15 @@ std::string MacroExpansion::expand(const std::string& input,
284278
else if (compareStrNoCase(col, "REQUEST_HEADERS")) {
285279
variableValue = transaction->m_variableRequestHeaders.resolveFirst(var);
286280
}
281+
else if (compareStrNoCase(variable, "REQUEST_HEADERS_NAMES")) {
282+
variableValue = transaction->m_variableRequestHeadersNames.resolveFirst(var);
283+
}
287284
else if (compareStrNoCase(col, "RESPONSE_HEADERS")) {
288285
variableValue = transaction->m_variableResponseHeaders.resolveFirst(var);
289286
}
287+
else if (compareStrNoCase(variable, "RESPONSE_HEADERS_NAMES")) {
288+
variableValue = transaction->m_variableResponseHeadersNames.resolveFirst(var);
289+
}
290290
else if (compareStrNoCase(col, "GEO")) {
291291
variableValue = transaction->m_variableGeo.resolveFirst(var);
292292
}

0 commit comments

Comments
 (0)