Skip to content

Commit 3a06266

Browse files
authored
Report input attribute addresses on ddwaf_known_addresses (#485)
1 parent 5d64fa7 commit 3a06266

File tree

3 files changed

+77
-11
lines changed

3 files changed

+77
-11
lines changed

src/rule.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ class core_rule {
165165
void get_addresses(std::unordered_map<target_index, std::string> &addresses) const
166166
{
167167
expr_->get_addresses(addresses);
168+
169+
for (const auto &attr : attributes_) {
170+
if (std::holds_alternative<rule_attribute::input_target>(attr.value_or_target)) {
171+
const auto &input = std::get<rule_attribute::input_target>(attr.value_or_target);
172+
addresses.emplace(input.index, input.name);
173+
}
174+
}
168175
}
169176

170177
protected:

tests/integration/rules/attributes/test.cpp

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ TEST(TestRuleAttributesIntegration, SingleValueOutputAndEvent)
101101
.name = "rule2",
102102
.tags = {{"type", "flow2"}, {"category", "category2"}},
103103
.matches = {{.op = "match_regex",
104-
.op_value = "^rule2",
104+
.op_value = "^rule2$",
105105
.highlight = "rule2"sv,
106106
.args = {{.value = "rule2"sv, .address = "value2"}}}}});
107107

@@ -709,7 +709,7 @@ TEST(TestRuleAttributesIntegration, AttributesEventsAndSubcontextMatches)
709709
.name = "rule2",
710710
.tags = {{"type", "flow2"}, {"category", "category2"}},
711711
.matches = {{.op = "match_regex",
712-
.op_value = "^rule2",
712+
.op_value = "^rule2$",
713713
.highlight = "rule2"sv,
714714
.args = {{
715715
.value = "rule2"sv,
@@ -744,7 +744,7 @@ TEST(TestRuleAttributesIntegration, AttributesEventsAndSubcontextMatches)
744744
.name = "rule2",
745745
.tags = {{"type", "flow2"}, {"category", "category2"}},
746746
.matches = {{.op = "match_regex",
747-
.op_value = "^rule2",
747+
.op_value = "^rule2$",
748748
.highlight = "rule2"sv,
749749
.args = {{
750750
.value = "rule2"sv,
@@ -763,4 +763,28 @@ TEST(TestRuleAttributesIntegration, AttributesEventsAndSubcontextMatches)
763763
ddwaf_context_destroy(context1);
764764
}
765765

766+
TEST(TestRuleAttributesIntegration, InputAttributesInKnownAddresses)
767+
{
768+
auto *alloc = ddwaf_get_default_allocator();
769+
auto rule = read_file<ddwaf_object>("rules.yaml", base_dir);
770+
ASSERT_TRUE(rule.type != DDWAF_OBJ_INVALID);
771+
772+
ddwaf_handle handle = ddwaf_init(&rule, nullptr);
773+
ASSERT_NE(handle, nullptr);
774+
ddwaf_object_destroy(&rule, alloc);
775+
776+
uint32_t size;
777+
const char *const *addresses = ddwaf_known_addresses(handle, &size);
778+
EXPECT_EQ(size, 12);
779+
780+
std::set<std::string_view> available_addresses{"value1", "value2", "value3", "value4", "value5",
781+
"value6", "value7", "value8", "value9", "value10", "output_value9", "output_value10"};
782+
while ((size--) != 0U) {
783+
EXPECT_NE(available_addresses.find(addresses[size]), available_addresses.end());
784+
}
785+
786+
// Destroying the handle should not invalidate it
787+
ddwaf_destroy(handle);
788+
}
789+
766790
} // namespace

tests/integration/rules/attributes/yaml/rules.yaml

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ rules:
1919
parameters:
2020
inputs:
2121
- address: value1
22-
regex: ^rule1
22+
regex: ^rule1$
2323
output:
2424
event: false
2525
keep: false
@@ -36,7 +36,7 @@ rules:
3636
parameters:
3737
inputs:
3838
- address: value2
39-
regex: ^rule2
39+
regex: ^rule2$
4040
output:
4141
event: true
4242
keep: false
@@ -53,7 +53,7 @@ rules:
5353
parameters:
5454
inputs:
5555
- address: value3
56-
regex: ^rule3
56+
regex: ^rule3$
5757
output:
5858
event: false
5959
keep: false
@@ -70,7 +70,7 @@ rules:
7070
parameters:
7171
inputs:
7272
- address: value4
73-
regex: ^rule4
73+
regex: ^rule4$
7474
output:
7575
event: false
7676
keep: false
@@ -93,7 +93,7 @@ rules:
9393
parameters:
9494
inputs:
9595
- address: value5
96-
regex: ^rule5
96+
regex: ^rule5$
9797
output:
9898
event: false
9999
keep: true
@@ -112,7 +112,7 @@ rules:
112112
parameters:
113113
inputs:
114114
- address: value6
115-
regex: ^rule6
115+
regex: ^rule6$
116116
output:
117117
event: false
118118
keep: false
@@ -130,7 +130,7 @@ rules:
130130
parameters:
131131
inputs:
132132
- address: value7
133-
regex: ^rule7
133+
regex: ^rule7$
134134
output:
135135
event: false
136136
keep: true
@@ -148,10 +148,45 @@ rules:
148148
parameters:
149149
inputs:
150150
- address: value8
151-
regex: ^rule8
151+
regex: ^rule8$
152152
output:
153153
event: false
154154
keep: false
155155
attributes:
156156
result.rule8:
157157
address: value8
158+
- id: rule9
159+
name: rule9
160+
tags:
161+
type: flow9
162+
category: category9
163+
conditions:
164+
- operator: match_regex
165+
parameters:
166+
inputs:
167+
- address: value9
168+
regex: ^rule9$
169+
output:
170+
event: false
171+
keep: true
172+
attributes:
173+
result.rule9:
174+
address: output_value9
175+
- id: rule10
176+
name: rule10
177+
tags:
178+
type: flow10
179+
category: category10
180+
conditions:
181+
- operator: match_regex
182+
parameters:
183+
inputs:
184+
- address: value10
185+
regex: ^rule10$
186+
output:
187+
event: false
188+
keep: true
189+
attributes:
190+
result.rule10:
191+
address: output_value10
192+
key_path: [path, to, scalar]

0 commit comments

Comments
 (0)