prelude-lml/master: Split lml_alert_prepare() into several function
[email protected] Tue, 26 Jan 2010 14:22:15 +0100 (CET)
| Newsgroups | gmane.comp.security.ids.prelude.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit 1ed499a7ff40e501e73293c2c84fd8e54bc9abe9 Author: Yoann Vandoorselaere <[email protected]> Date: Fri Jan 22 11:39:49 2010 +0100 Split lml_alert_prepare() into several function This introduce lml_additional_data_prepare() and lml_alert_set_infos(), both used from lml_alert_prepare(). This allow more granularity when creating alert, especially coming from multiples log entry. ======================================== src/include/prelude-lml.h | 3 ++ src/lml-alert.c | 88 ++++++++++++++++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 21 deletions(-) ======================================== diff --git a/src/include/prelude-lml.h b/src/include/prelude-lml.h index bfe1475..a2f14df 100644 --- a/src/include/prelude-lml.h +++ b/src/include/prelude-lml.h @@ -62,8 +62,11 @@ const char *lml_log_entry_get_target_process_pid(const lml_log_entry_t *log_entr /* * Alert emission */ +int lml_alert_set_infos(idmef_message_t *message, const lml_log_entry_t *log); + void lml_alert_emit(const lml_log_source_t *ls, const lml_log_entry_t *log, idmef_message_t *msg); int lml_alert_prepare(idmef_message_t *message, const lml_log_source_t *ls, const lml_log_entry_t *log); +int lml_additional_data_prepare(prelude_list_t *adlist, const lml_log_source_t *ls, const lml_log_entry_t *log); #endif diff --git a/src/lml-alert.c b/src/lml-alert.c index 0cbcd53..a1899fd 100644 --- a/src/lml-alert.c +++ b/src/lml-alert.c @@ -272,37 +272,58 @@ static int generate_target(const lml_log_entry_t *log_entry, idmef_alert_t *aler -static int generate_additional_data(idmef_alert_t *alert, const char *meaning, const char *data) +static int generate_additional_data(idmef_additional_data_t **adata, const char *meaning, const char *data) { int ret; prelude_string_t *str; - idmef_additional_data_t *adata; - ret = idmef_alert_new_additional_data(alert, &adata, IDMEF_LIST_APPEND); + ret = idmef_additional_data_new(adata); if ( ret < 0 ) return ret; - ret = idmef_additional_data_new_meaning(adata, &str); + ret = idmef_additional_data_new_meaning(*adata, &str); if ( ret < 0 ) return ret; prelude_string_set_ref(str, meaning); - return idmef_additional_data_set_string_dup(adata, data); + return idmef_additional_data_set_string_dup(*adata, data); } -int lml_alert_prepare(idmef_message_t *message, const lml_log_source_t *ls, const lml_log_entry_t *log) +int lml_additional_data_prepare(prelude_list_t *adlist, const lml_log_source_t *ls, const lml_log_entry_t *log) +{ + const char *ptr, *source; + idmef_additional_data_t *adata; + + source = lml_log_source_get_name(ls); + if ( generate_additional_data(&adata, "Log received from", source) < 0 ) + return -1; + + prelude_linked_object_add_tail(adlist, (prelude_linked_object_t *) adata); + + ptr = lml_log_entry_get_original_log(log); + if ( ptr ) { + if ( generate_additional_data(&adata, "Original Log", ptr) < 0 ) + return -1; + + prelude_linked_object_add_tail(adlist, (prelude_linked_object_t *) adata); + } + + return 0; +} + + +int lml_alert_set_infos(idmef_message_t *message, const lml_log_entry_t *log) { int ret; idmef_time_t *time; idmef_alert_t *alert; - const char *ptr, *source; idmef_analyzer_t *cur_analyzer; - alert = idmef_message_get_alert(message); - if ( ! alert ) + ret = idmef_message_new_alert(message, &alert); + if ( ret < 0 ) return -1; ret = idmef_alert_new_detect_time(alert, &time); @@ -320,18 +341,45 @@ int lml_alert_prepare(idmef_message_t *message, const lml_log_source_t *ls, cons return -1; } - source = lml_log_source_get_name(ls); - if ( generate_additional_data(alert, "Log received from", source) < 0 ) + if ( lml_log_entry_get_format(log) ) + lml_log_format_apply_idmef(lml_log_entry_get_format(log), message); + + return 0; +} + + + +int lml_alert_prepare(idmef_message_t *message, const lml_log_source_t *ls, const lml_log_entry_t *log) +{ + int ret; + idmef_alert_t *alert; + const char *ptr, *source; + idmef_additional_data_t *adata; + + ret = idmef_message_new_alert(message, &alert); + if ( ret < 0 ) return -1; - ptr = lml_log_entry_get_original_log(log); - if ( ptr ) { - if ( generate_additional_data(alert, "Original Log", ptr) < 0 ) + if ( ls ) { + source = lml_log_source_get_name(ls); + + if ( generate_additional_data(&adata, "Log received from", source) < 0 ) return -1; + + idmef_alert_set_additional_data(alert, adata, IDMEF_LIST_APPEND); } - if ( lml_log_entry_get_format(log) ) - lml_log_format_apply_idmef(lml_log_entry_get_format(log), message); + if ( log ) { + ptr = lml_log_entry_get_original_log(log); + if ( ptr ) { + if ( generate_additional_data(&adata, "Original Log", ptr) < 0 ) + return -1; + + idmef_alert_set_additional_data(alert, adata, IDMEF_LIST_APPEND); + } + + lml_alert_set_infos(message, log); + } return 0; } @@ -344,11 +392,9 @@ void lml_alert_emit(const lml_log_source_t *ls, const lml_log_entry_t *log, idme idmef_time_t *time; idmef_alert_t *alert; - if ( ls && log ) { - ret = lml_alert_prepare(message, ls, log); - if ( ret < 0 ) - return; - } + ret = lml_alert_prepare(message, ls, log); + if ( ret < 0 ) + return; alert = idmef_message_get_alert(message); if ( ! alert ) _______________________________________________ Prelude-cvslog site list [email protected] http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog