summaryrefslogtreecommitdiff
path: root/src/analysis/scan/rule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/scan/rule.c')
-rw-r--r--src/analysis/scan/rule.c83
1 files changed, 71 insertions, 12 deletions
diff --git a/src/analysis/scan/rule.c b/src/analysis/scan/rule.c
index a7d7765..68222dd 100644
--- a/src/analysis/scan/rule.c
+++ b/src/analysis/scan/rule.c
@@ -97,6 +97,8 @@ static void g_scan_rule_class_init(GScanRuleClass *klass)
static void g_scan_rule_init(GScanRule *rule)
{
+ rule->flags = SRF_NONE;
+
rule->name = NULL;
rule->name_hash = 0;
@@ -159,7 +161,8 @@ static void g_scan_rule_finalize(GScanRule *rule)
/******************************************************************************
* *
-* Paramètres : name = désignation à associer à la future règle. *
+* Paramètres : flags = propriétés particulières à conférer à la règle. *
+* name = désignation à associer à la future règle. *
* *
* Description : Crée une règle de détection statique à l'aide de motifs. *
* *
@@ -169,12 +172,14 @@ static void g_scan_rule_finalize(GScanRule *rule)
* *
******************************************************************************/
-GScanRule *g_scan_rule_new(const char *name)
+GScanRule *g_scan_rule_new(ScanRuleFlags flags, const char *name)
{
GScanRule *result; /* Structure à retourner */
result = g_object_new(G_TYPE_SCAN_RULE, NULL);
+ result->flags = flags;
+
result->name = strdup(name);
result->name_hash = fnv_64a_hash(name);
@@ -185,7 +190,60 @@ GScanRule *g_scan_rule_new(const char *name)
/******************************************************************************
* *
-* Paramètres : rule = règle de détection à compléter. *
+* Paramètres : rule = règle de détection à initialiser pleinement. *
+* flags = propriétés particulières à conférer à la règle. *
+* name = désignation à associer à la future règle. *
+* *
+* Description : Met en place une règle de détection statique avec motifs. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_scan_rule_create(GScanRule *rule, ScanRuleFlags flags, const char *name)
+{
+ GScanRule *result; /* Structure à retourner */
+
+ result = g_object_new(G_TYPE_SCAN_RULE, NULL);
+
+ result->flags = flags;
+
+ result->name = strdup(name);
+ result->name_hash = fnv_64a_hash(name);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : rule = règle de détection à consulter. *
+* *
+* Description : Indique les particularités liées à une règle de détection. *
+* *
+* Retour : Propriétés particulières attachées à la règle. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+ScanRuleFlags g_scan_rule_get_flags(const GScanRule *rule)
+{
+ ScanRuleFlags result; /* Fanions à retourner */
+
+ result = rule->flags;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : rule = règle de détection à consulter. *
* hash = empreinte précalculée associée au nom. [OUT] *
* *
* Description : Indique le nom associé à une règle de détection. *
@@ -202,7 +260,8 @@ const char *g_scan_rule_get_name(const GScanRule *rule, fnv64_t *hash)
result = rule->name;
- *hash = rule->name_hash;
+ if (hash != NULL)
+ *hash = rule->name_hash;
return result;
@@ -635,7 +694,7 @@ char *g_scan_rule_convert_as_text(const GScanRule *rule, GScanContext *context)
* padding = éventuel bourrage initial à placer ou NULL. *
* level = profondeur actuelle. *
* fd = canal d'écriture. *
-* trailing = impose une virgule finale ? *
+* tail = décline la pose d'une virgule finale ? *
* *
* Description : Affiche une règle au format JSON. *
* *
@@ -645,10 +704,10 @@ char *g_scan_rule_convert_as_text(const GScanRule *rule, GScanContext *context)
* *
******************************************************************************/
-void g_scan_rule_output_to_json(const GScanRule *rule, GScanContext *context, const sized_string_t *padding, unsigned int level, int fd, bool trailing)
+void g_scan_rule_output_to_json(const GScanRule *rule, GScanContext *context, const sized_string_t *padding, unsigned int level, int fd, bool tail)
{
size_t i; /* Boucle de parcours */
- bool sub_trailing; /* Virgule finale */
+ bool sub_tail; /* Saut de la virgule finale ? */
/* Introduction */
@@ -677,9 +736,9 @@ void g_scan_rule_output_to_json(const GScanRule *rule, GScanContext *context, co
for (i = 0; i < rule->bytes_used; i++)
{
- sub_trailing = ((i + 1) < rule->bytes_used);
+ sub_tail = ((i + 1) == rule->bytes_used);
- g_search_pattern_output_to_json(rule->bytes_locals[i], context, padding, level + 2, fd, sub_trailing);
+ g_search_pattern_output_to_json(rule->bytes_locals[i], context, padding, level + 2, fd, sub_tail);
}
@@ -707,10 +766,10 @@ void g_scan_rule_output_to_json(const GScanRule *rule, GScanContext *context, co
for (i = 0; i < level; i++)
write(fd, padding->data, padding->len);
- if (trailing)
- write(fd, "},\n", 3);
- else
+ if (tail)
write(fd, "}\n", 2);
+ else
+ write(fd, "},\n", 3);
}