]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output-json: make JSON flags in eve-log user configurable
authorMats Klepsland <mats.klepsland@gmail.com>
Thu, 19 Jan 2017 06:15:00 +0000 (07:15 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 17 Feb 2017 12:04:23 +0000 (13:04 +0100)
src/output-json.c
src/util-logopenfile.c
src/util-logopenfile.h

index 95f9b0167dbb3163f1d6effb192c4faff8ebda0d..7b655f64ca8b7340613d80fbf40bddbdd1bdcca1 100644 (file)
@@ -481,8 +481,7 @@ int OutputJSONBuffer(json_t *js, LogFileCtx *file_ctx, MemBuffer **buffer)
     };
 
     int r = json_dump_callback(js, OutputJSONMemBufferCallback, &wrapper,
-            JSON_PRESERVE_ORDER|JSON_COMPACT|JSON_ENSURE_ASCII|
-            JSON_ESCAPE_SLASH);
+            file_ctx->json_flags);
     if (r != 0)
         return TM_ECODE_OK;
 
index 636aaab83f5dfdfab536c7dc75425505de2d0fc5..da644f7912ca4bcaa93ee6f541cd97ff1a9d9d63 100644 (file)
@@ -256,6 +256,35 @@ SCConfLogOpenGeneric(ConfNode *conf,
     if (append == NULL)
         append = DEFAULT_LOG_MODE_APPEND;
 
+    /* JSON flags */
+#ifdef HAVE_LIBJANSSON
+    log_ctx->json_flags = JSON_PRESERVE_ORDER|JSON_COMPACT|
+                          JSON_ENSURE_ASCII|JSON_ESCAPE_SLASH;
+
+    ConfNode *json_flags = ConfNodeLookupChild(conf, "json");
+
+    if (json_flags != 0) {
+        const char *preserve_order = ConfNodeLookupChildValue(json_flags,
+                                                              "preserve-order");
+        if (preserve_order != NULL && ConfValIsFalse(preserve_order))
+            log_ctx->json_flags &= ~(JSON_PRESERVE_ORDER);
+
+        const char *compact = ConfNodeLookupChildValue(json_flags, "compact");
+        if (compact != NULL && ConfValIsFalse(compact))
+            log_ctx->json_flags &= ~(JSON_COMPACT);
+
+        const char *ensure_ascii = ConfNodeLookupChildValue(json_flags,
+                                                            "ensure-ascii");
+        if (ensure_ascii != NULL && ConfValIsFalse(ensure_ascii))
+            log_ctx->json_flags &= ~(JSON_ENSURE_ASCII);
+
+        const char *escape_slash = ConfNodeLookupChildValue(json_flags,
+                                                            "escape-slash");
+        if (escape_slash != NULL && ConfValIsFalse(escape_slash))
+            log_ctx->json_flags &= ~(JSON_ESCAPE_SLASH);
+    }
+#endif /* HAVE_LIBJANSSON */
+
     // Now, what have we been asked to open?
     if (strcasecmp(filetype, "unix_stream") == 0) {
         /* Don't bail. May be able to connect later. */
index cccbba47d0549f3026caad4986ca83e384253ea0..063e2bfb74526bf0e28924a4ba06425bed733d97 100644 (file)
@@ -118,6 +118,9 @@ typedef struct LogFileCtx_ {
      * allow for rotataion. */
     uint8_t is_regular;
 
+    /* JSON flags */
+    size_t json_flags;  /* passed to json_dump_callback() */
+
     /* Flag set when file rotation notification is received. */
     int rotation_flag;
 } LogFileCtx;