pySigma-backend-sqlite 1.2.0__tar.gz → 1.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pySigma-backend-sqlite
3
- Version: 1.2.0
3
+ Version: 1.2.4
4
4
  Summary: pySigma sqlite backend
5
5
  License-Expression: LGPL-3.0-only
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pySigma-backend-sqlite"
3
- version = "1.2.0"
3
+ version = "1.2.4"
4
4
  description = "pySigma sqlite backend"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -13,6 +13,7 @@ from sigma.conditions import (
13
13
  )
14
14
  from sigma.types import (
15
15
  SigmaCompareExpression,
16
+ SigmaRegularExpression,
16
17
  SigmaString,
17
18
  SpecialChars,
18
19
  SigmaCIDRExpression,
@@ -413,6 +414,12 @@ class sqliteBackend(TextQueryBackend):
413
414
 
414
415
  search = self.convert_correlation_search(rule)
415
416
 
417
+ # Correlation search templates hardcode "FROM logs"; honor a "table" state
418
+ # key set by a setState transformation, matching finalize_query_default.
419
+ table = self.last_processing_pipeline.state.get("table")
420
+ if table is not None:
421
+ search = search.replace("FROM logs", f"FROM {table}")
422
+
416
423
  # Determine select_fields based on whether GROUP BY is used
417
424
  if rule.group_by:
418
425
  # When GROUP BY is used, only select the grouped fields
@@ -477,6 +484,12 @@ class sqliteBackend(TextQueryBackend):
477
484
  else:
478
485
  return converted
479
486
 
487
+ def convert_value_re(
488
+ self, r: SigmaRegularExpression, state: ConversionState
489
+ ) -> str:
490
+ # Doubling single quotes is mandatory: the regex is embedded in a '...' SQL string literal.
491
+ return super().convert_value_re(r, state).replace("'", "''")
492
+
480
493
  def convert_condition_field_eq_val_str(
481
494
  self, cond: ConditionFieldEqualsValueExpression, state: ConversionState
482
495
  ) -> Union[str, DeferredQueryExpression]:
@@ -626,7 +639,10 @@ class sqliteBackend(TextQueryBackend):
626
639
  # TODO : fields support will be handled with a backend option (all fields by default)
627
640
  # fields = "*" if len(rule.fields) == 0 else f"*, {', '.join(rule.fields)}"
628
641
 
629
- sqlite_query = f"SELECT * FROM {self.table} WHERE {query}"
642
+ # Table name can be overridden per-pipeline via a setState transformation
643
+ # setting the "table" state key, else fall back to the backend default.
644
+ table = state.processing_state.get("table", self.table)
645
+ sqlite_query = f"SELECT * FROM {table} WHERE {query}"
630
646
 
631
647
  return sqlite_query
632
648