]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
alert/eve: use addr info struct for source/target (jsonbuilder prep)
authorJason Ish <jason.ish@oisf.net>
Fri, 13 Mar 2020 19:38:02 +0000 (13:38 -0600)
committerVictor Julien <victor@inliniac.net>
Wed, 3 Jun 2020 11:36:55 +0000 (13:36 +0200)
Update the source/target logging to use the cached address info
instead of fetching it from the constructed json_t object.

This is required for migration to JsonBuilder which does not
have the ability to retrieve already set fields.

src/output-json-alert.c
src/output-json-alert.h
src/output-json-drop.c
src/output-json.c
src/output-json.h
src/output.c

index 2b955c050eed07410a39d88afaaeffd28450ca46..ee64fb151cf7d50f1833ff8d8c8664974acd9418 100644 (file)
@@ -214,7 +214,7 @@ static void AlertJsonDns(const Flow *f, const uint64_t tx_id, json_t *js)
 }
 
 static void AlertJsonSourceTarget(const Packet *p, const PacketAlert *pa,
-                                  json_t *js, json_t* ajs)
+                                  json_t* ajs, JsonAddrInfo *addr)
 {
     json_t *sjs = json_object();
     if (sjs == NULL) {
@@ -228,8 +228,8 @@ static void AlertJsonSourceTarget(const Packet *p, const PacketAlert *pa,
     }
 
     if (pa->s->flags & SIG_FLAG_DEST_IS_TARGET) {
-        json_object_set(sjs, "ip", json_object_get(js, "src_ip"));
-        json_object_set(tjs, "ip", json_object_get(js, "dest_ip"));
+        json_object_set(sjs, "ip", json_string(addr->src_ip));
+        json_object_set(tjs, "ip", json_string(addr->dst_ip));
         switch (p->proto) {
             case IPPROTO_ICMP:
             case IPPROTO_ICMPV6:
@@ -237,13 +237,13 @@ static void AlertJsonSourceTarget(const Packet *p, const PacketAlert *pa,
             case IPPROTO_UDP:
             case IPPROTO_TCP:
             case IPPROTO_SCTP:
-                json_object_set(sjs, "port", json_object_get(js, "src_port"));
-                json_object_set(tjs, "port", json_object_get(js, "dest_port"));
+                json_object_set(sjs, "port", json_integer(addr->sp));
+                json_object_set(tjs, "port", json_integer(addr->dp));
                 break;
         }
     } else if (pa->s->flags & SIG_FLAG_SRC_IS_TARGET) {
-        json_object_set(sjs, "ip", json_object_get(js, "dest_ip"));
-        json_object_set(tjs, "ip", json_object_get(js, "src_ip"));
+        json_object_set(sjs, "ip", json_string(addr->dst_ip));
+        json_object_set(tjs, "ip", json_string(addr->src_ip));
         switch (p->proto) {
             case IPPROTO_ICMP:
             case IPPROTO_ICMPV6:
@@ -251,8 +251,8 @@ static void AlertJsonSourceTarget(const Packet *p, const PacketAlert *pa,
             case IPPROTO_UDP:
             case IPPROTO_TCP:
             case IPPROTO_SCTP:
-                json_object_set(sjs, "port", json_object_get(js, "dest_port"));
-                json_object_set(tjs, "port", json_object_get(js, "src_port"));
+                json_object_set(sjs, "port", json_integer(addr->dp));
+                json_object_set(tjs, "port", json_integer(addr->sp));
                 break;
         }
     }
@@ -293,7 +293,7 @@ static void AlertJsonMetadata(AlertJsonOutputCtx *json_output_ctx, const PacketA
 
 
 void AlertJsonHeader(void *ctx, const Packet *p, const PacketAlert *pa, json_t *js,
-                     uint16_t flags)
+                     uint16_t flags, JsonAddrInfo *addr)
 {
     AlertJsonOutputCtx *json_output_ctx = (AlertJsonOutputCtx *)ctx;
     const char *action = "allowed";
@@ -334,8 +334,8 @@ void AlertJsonHeader(void *ctx, const Packet *p, const PacketAlert *pa, json_t *
     if (p->tenant_id > 0)
         json_object_set_new(ajs, "tenant_id", json_integer(p->tenant_id));
 
-    if (pa->s->flags & SIG_FLAG_HAS_TARGET) {
-        AlertJsonSourceTarget(p, pa, js, ajs);
+    if (addr && pa->s->flags & SIG_FLAG_HAS_TARGET) {
+        AlertJsonSourceTarget(p, pa, ajs, addr);
     }
 
     if ((json_output_ctx != NULL) && (flags & LOG_JSON_RULE_METADATA)) {
@@ -452,7 +452,8 @@ static int AlertJson(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p)
         MemBufferReset(aft->json_buffer);
 
         /* alert */
-        AlertJsonHeader(json_output_ctx, p, pa, js, json_output_ctx->flags);
+        AlertJsonHeader(json_output_ctx, p, pa, js, json_output_ctx->flags,
+                &addr);
 
         if (IS_TUNNEL_PKT(p)) {
             AlertJsonTunnel(p, js);
index c8d3f7f456af50b7172d24925680ba688746b155..7db5be76fbff21391162fc503ba32fa7d5073e6f 100644 (file)
@@ -29,7 +29,7 @@
 
 void JsonAlertLogRegister(void);
 void AlertJsonHeader(void *ctx, const Packet *p, const PacketAlert *pa, json_t *js,
-                     uint16_t flags);
+                     uint16_t flags, JsonAddrInfo *addr);
 
 #endif /* __OUTPUT_JSON_ALERT_H__ */
 
index f9ef9d260cb9b13694b742bd57e8cbeae570e793..f41c8ed872c8a2cddc86f35ee0fbfe7f97c1b4be 100644 (file)
@@ -87,7 +87,10 @@ static int DropLogJSON (JsonDropLogThread *aft, const Packet *p)
 {
     JsonDropOutputCtx *drop_ctx = aft->drop_ctx;
 
-    json_t *js = CreateJSONHeader(p, LOG_DIR_PACKET, "drop", NULL);
+    JsonAddrInfo addr = json_addr_info_zero;
+    JsonAddrInfoInit(p, LOG_DIR_PACKET, &addr);
+
+    json_t *js = CreateJSONHeader(p, LOG_DIR_PACKET, "drop", &addr);
     if (unlikely(js == NULL))
         return TM_ECODE_OK;
 
@@ -160,14 +163,14 @@ static int DropLogJSON (JsonDropLogThread *aft, const Packet *p)
             if ((pa->action & (ACTION_REJECT|ACTION_REJECT_DST|ACTION_REJECT_BOTH)) ||
                ((pa->action & ACTION_DROP) && EngineModeIsIPS()))
             {
-                AlertJsonHeader(NULL, p, pa, js, 0);
+                AlertJsonHeader(NULL, p, pa, js, 0, &addr);
                 logged = 1;
             }
         }
         if (logged == 0) {
             if (p->alerts.drop.action != 0) {
                 const PacketAlert *pa = &p->alerts.drop;
-                AlertJsonHeader(NULL, p, pa, js, 0);
+                AlertJsonHeader(NULL, p, pa, js, 0, &addr);
             }
         }
     }
index d30966670d15b781a17cd3bc18ff42b69530f40b..ff6ca1616302b942d7066355ee96756b3514730f 100644 (file)
@@ -82,6 +82,8 @@ static const char *TRAFFIC_LABEL_PREFIX = "traffic/label/";
 static size_t traffic_id_prefix_len = 0;
 static size_t traffic_label_prefix_len = 0;
 
+const JsonAddrInfo json_addr_info_zero;
+
 void OutputJsonRegister (void)
 {
     OutputRegisterModule(MODULE_NAME, "eve-log", OutputJsonInitCtx);
@@ -881,7 +883,7 @@ json_t *CreateJSONHeader(const Packet *p, enum OutputJsonLogDirection dir,
     }
 
     /* 5-tuple */
-    JsonAddrInfo addr_info = {0};
+    JsonAddrInfo addr_info = json_addr_info_zero;
     if (addr == NULL) {
         JsonAddrInfoInit(p, dir, &addr_info);
         addr = &addr_info;
index 9b694e39e4f099bf4f4787b6f1050c3a5152e795..d928a9ee4c12810c47d59c8390e21e73da6fa548 100644 (file)
@@ -52,6 +52,8 @@ typedef struct JsonAddrInfo_ {
     char proto[JSON_PROTO_LEN];
 } JsonAddrInfo;
 
+extern const JsonAddrInfo json_addr_info_zero;
+
 void JsonAddrInfoInit(const Packet *p, enum OutputJsonLogDirection dir,
         JsonAddrInfo *addr);
 
index 086f9a0b622be0bacaa749cb65f5a504c68fea2a..fd43b8614ba65040e07f89ec608ea14bc996b5c6 100644 (file)
@@ -44,6 +44,7 @@
 #include "alert-debuglog.h"
 #include "alert-prelude.h"
 #include "alert-syslog.h"
+#include "output-json.h"
 #include "output-json-alert.h"
 #include "output-json-anomaly.h"
 #include "output-json-flow.h"