libprelude/master: Set analyzer before sending IDMEF messages.
[email protected] Fri, 5 Jun 2009 18:45:48 +0200 (CEST)
| Newsgroups | gmane.comp.security.ids.prelude.cvs |
|---|---|
| Message-ID | <[email protected]> |
commit e79e55a1c4c749885ae77d303abb328de9299050 Author: Yoann Vandoorselaere <[email protected]> Date: Thu Jun 4 15:48:59 2009 +0200 Set analyzer before sending IDMEF messages. Prior to this change, it was the responsability of the user to set the IDMEFAnalyzer object in an IDMEF message to be sent. In order to make it easier to write sensors, this is now automated as part of the sending process. ======================================== src/common.c | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+), 0 deletions(-) ======================================== diff --git a/src/common.c b/src/common.c index 302462c..38de2ec 100644 --- a/src/common.c +++ b/src/common.c @@ -522,6 +522,31 @@ prelude_msg_priority_t _idmef_impact_severity_to_msg_priority(idmef_impact_sever +static int add_analyzer(prelude_client_t *client, void *top, + void *(*geta)(void *top, idmef_analyzer_t *analyzer), + int (*insa)(void *top, idmef_analyzer_t *analyzer, int pos)) +{ + prelude_string_t *str; + uint64_t wanted_analyzerid, analyzerid; + idmef_analyzer_t *analyzer = NULL, *canalyzer; + + canalyzer = prelude_client_get_analyzer(client); + wanted_analyzerid = prelude_client_profile_get_analyzerid(prelude_client_get_profile(client)); + + while ( (analyzer = geta(top, analyzer)) && analyzer != canalyzer ) { + str = idmef_analyzer_get_analyzerid(analyzer); + if ( ! str ) + continue; + + analyzerid = strtoull(prelude_string_get_string(str), NULL, 10); + if ( analyzerid == wanted_analyzerid ) + return 0; + } + + return insa(top, idmef_analyzer_ref(prelude_client_get_analyzer(client)), IDMEF_LIST_PREPEND); +} + + int _idmef_message_assign_missing(prelude_client_t *client, idmef_message_t *msg) { idmef_alert_t *alert; @@ -533,11 +558,15 @@ int _idmef_message_assign_missing(prelude_client_t *client, idmef_message_t *msg if ( ! idmef_alert_get_messageid(alert) ) idmef_alert_set_messageid(alert, get_message_ident(ident)); + + add_analyzer(client, alert, (void *) idmef_alert_get_next_analyzer, (void *) idmef_alert_set_analyzer); } else { heartbeat = idmef_message_get_heartbeat(msg); if ( ! idmef_heartbeat_get_messageid(heartbeat) ) idmef_heartbeat_set_messageid(heartbeat, get_message_ident(ident)); + + add_analyzer(client, heartbeat, (void *) idmef_heartbeat_get_next_analyzer, (void *)idmef_heartbeat_set_analyzer); } return 0; _______________________________________________ Prelude-cvslog site list [email protected] http://lists.prelude-ids.org/mailman/listinfo/prelude-cvslog