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