diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2023-09-25 06:34:24 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2023-09-25 06:34:24 (GMT) |
commit | 4c13ca820e4fa01ca62ad66c0665ebbee150f87c (patch) | |
tree | 46d573dc869b11efa03c6782c06dc5121b3dc609 /src/analysis/scan/rule.c | |
parent | 61704628e3ca8c31df1666b3be4b723643dd25db (diff) |
Handle private and global rules.
Diffstat (limited to 'src/analysis/scan/rule.c')
-rw-r--r-- | src/analysis/scan/rule.c | 83 |
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); } |