From e09b26340c95d58db0501fbda2522ebcc6cebf09 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Tue, 3 Dec 2024 16:55:38 +0100 Subject: [PATCH] eve/alert: enrich decoder event Default decoder event alert was very sparse, not even logging packet type and pcap_cnt. Expand support for this record type. It will be more useful with the ethernet headers and packet field, but these are still disabled by default. Ticket: #7433. (cherry picked from commit 2fe2cf855310678141896195e3191fa582752e6c) --- src/output-json-alert.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/output-json-alert.c b/src/output-json-alert.c index 8dade1901bac..4005c48800c2 100644 --- a/src/output-json-alert.c +++ b/src/output-json-alert.c @@ -939,28 +939,40 @@ static int AlertJson(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p) static int AlertJsonDecoderEvent(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p) { AlertJsonOutputCtx *json_output_ctx = aft->json_output_ctx; - char timebuf[64]; if (p->alerts.cnt == 0) return TM_ECODE_OK; - CreateIsoTimeString(p->ts, timebuf, sizeof(timebuf)); - for (int i = 0; i < p->alerts.cnt; i++) { const PacketAlert *pa = &p->alerts.alerts[i]; if (unlikely(pa->s == NULL)) { continue; } - JsonBuilder *jb = jb_new_object(); - if (unlikely(jb == NULL)) { + JsonBuilder *jb = + CreateEveHeader(p, LOG_DIR_PACKET, "alert", NULL, json_output_ctx->eve_ctx); + if (unlikely(jb == NULL)) return TM_ECODE_OK; + + AlertJsonHeader(json_output_ctx, p, pa, jb, json_output_ctx->flags, NULL, NULL); + + if (IS_TUNNEL_PKT(p)) { + AlertJsonTunnel(p, jb); } - /* just the timestamp, no tuple */ - jb_set_string(jb, "timestamp", timebuf); + /* base64-encoded full packet */ + if (json_output_ctx->flags & LOG_JSON_PACKET) { + EvePacket(p, jb, 0); + } - AlertJsonHeader(json_output_ctx, p, pa, jb, json_output_ctx->flags, NULL, NULL); + char *pcap_filename = PcapLogGetFilename(); + if (pcap_filename != NULL) { + jb_set_string(jb, "capture_file", pcap_filename); + } + + if (json_output_ctx->flags & LOG_JSON_VERDICT) { + EveAddVerdict(jb, p); + } OutputJsonBuilderBuffer(jb, aft->ctx); jb_free(jb);