Skip to content

Commit

Permalink
sigmac: Improved fieldlist backend
Browse files Browse the repository at this point in the history
* Unique list of fields for multiple rules
* Aggregation support
  • Loading branch information
thomaspatzke committed Mar 21, 2018
1 parent 5c0f811 commit 5f8b60c
Showing 1 changed file with 28 additions and 2 deletions.
30 changes: 28 additions & 2 deletions tools/sigma/backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ def generate(self, sigmaparser):
before = self.generateBefore(parsed)
if before is not None:
self.output.print(before, end="")
self.output.print(self.generateQuery(parsed))
query = self.generateQuery(parsed)
if query is not None:
self.output.print(query)
after = self.generateAfter(parsed)
if after is not None:
self.output.print(after, end="")
Expand Down Expand Up @@ -731,8 +733,15 @@ class FieldnameListBackend(BaseBackend):
active = True
output_class = SingleOutput

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields = set()

def generateQuery(self, parsed):
return "\n".join(sorted(set(list(flatten(self.generateNode(parsed.parsedSearch))))))
fields = list(flatten(self.generateNode(parsed.parsedSearch)))
if parsed.parsedAgg:
fields += self.generateAggregation(parsed.parsedAgg)
self.fields.update(fields)

def generateANDNode(self, node):
return [self.generateNode(val) for val in node]
Expand Down Expand Up @@ -760,6 +769,23 @@ def generateMapItemNode(self, node):
def generateValueNode(self, node):
return []

def generateNULLValueNode(self, node):
return [node.item]

def generateNotNULLValueNode(self, node):
return [node.item]

def generateAggregation(self, agg):
fields = list()
if agg.groupfield is not None:
fields.append(agg.groupfield)
if agg.aggfield is not None:
fields.append(agg.aggfield)
return fields

def finalize(self):
self.output.print("\n".join(sorted(self.fields)))

# Helpers
def flatten(l):
for i in l:
Expand Down

0 comments on commit 5f8b60c

Please sign in to comment.