]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Improve logging for mime parser 5619/head
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 16 Sep 2025 08:18:59 +0000 (09:18 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 16 Sep 2025 08:18:59 +0000 (09:18 +0100)
- Add debug logs for mime parser

src/libmime/message.c
src/libmime/mime_parser.c
src/libmime/mime_parser.h

index 21b54e7ec92ccea2d5e0f6b2e31fe36fb7b98de3..67cc7925ff604213bca5696b3cca0735fb99c6c1 100644 (file)
@@ -1454,13 +1454,22 @@ void rspamd_message_process(struct rspamd_task *task)
                struct rspamd_mime_part *pp;
                PTR_ARRAY_FOREACH(MESSAGE_FIELD(task, parts), j, pp)
                {
-                       if (pp->parsed_data.len > 0 &&
-                               (/* no detection yet */ (pp->detected_type == NULL && pp->detected_ext == NULL) ||
-                                /* refine generic archives */
-                                (pp->detected_ext && (g_ascii_strcasecmp(pp->detected_ext, "zip") == 0 ||
-                                                                          g_ascii_strcasecmp(pp->detected_ext, "rar") == 0 ||
-                                                                          g_ascii_strcasecmp(pp->detected_ext, "7z") == 0 ||
-                                                                          g_ascii_strcasecmp(pp->detected_ext, "gz") == 0)))) {
+                       gboolean needs_refine = FALSE;
+                       if (pp->parsed_data.len > 0) {
+                               if (pp->detected_type == NULL && pp->detected_ext == NULL) {
+                                       needs_refine = TRUE;
+                               }
+                               else if (pp->part_type == RSPAMD_MIME_PART_ARCHIVE) {
+                                       needs_refine = TRUE;
+                               }
+                       }
+
+                       if (needs_refine) {
+                               msg_debug_mime("second-pass lua_magic for part #%ud: reason=%s; ext=%s type=%s",
+                                                          pp->part_number,
+                                                          (pp->detected_type == NULL && pp->detected_ext == NULL) ? "undetected" : "archive",
+                                                          pp->detected_ext ? pp->detected_ext : "(nil)",
+                                                          pp->detected_type ? pp->detected_type : "(nil)");
                                struct rspamd_mime_part **pmime;
                                struct rspamd_task **ptask;
                                lua_pushcfunction(L, &rspamd_lua_traceback);
@@ -1476,6 +1485,8 @@ void rspamd_message_process(struct rspamd_task *task)
                                if (lua_pcall(L, 2, 2, err_idx2) == 0) {
                                        if (lua_istable(L, -1)) {
                                                const char *mb;
+                                               const char *old_ext = pp->detected_ext;
+                                               const char *old_type = pp->detected_type;
                                                if (lua_isstring(L, -2)) {
                                                        pp->detected_ext = rspamd_mempool_strdup(task->task_pool, lua_tostring(L, -2));
                                                }
@@ -1503,6 +1514,10 @@ void rspamd_message_process(struct rspamd_task *task)
                                                        pp->flags |= RSPAMD_MIME_PART_NO_TEXT_EXTRACTION;
                                                }
                                                lua_pop(L, 1);
+                                               msg_debug_mime("second-pass result for part #%ud: ext %s->%s, type %s->%s",
+                                                                          pp->part_number,
+                                                                          old_ext ? old_ext : "(nil)", pp->detected_ext ? pp->detected_ext : "(nil)",
+                                                                          old_type ? old_type : "(nil)", pp->detected_type ? pp->detected_type : "(nil)");
                                        }
                                }
                                else {
index 075fec347d02c7b2ce2c11101928011d6ac086bb..fc5a86c89378fa56a40676b515975572eff14b45 100644 (file)
@@ -118,7 +118,7 @@ static const unsigned int max_key_usages = 10000;
                                                                                                                  RSPAMD_LOG_FUNC,                                      \
                                                                                                                  __VA_ARGS__)
 
-INIT_LOG_MODULE(mime)
+INIT_LOG_MODULE_PUBLIC(mime)
 
 #define RSPAMD_MIME_BOUNDARY_FLAG_CLOSED (1 << 0)
 #define RSPAMD_BOUNDARY_IS_CLOSED(b) ((b)->flags & RSPAMD_MIME_BOUNDARY_FLAG_CLOSED)
index 38175256cc1dec264262a8adc4ac620ff61f988b..d11b56659bedcf963ffecd05a477c885c61b8741 100644 (file)
@@ -17,6 +17,7 @@
 #define SRC_LIBMIME_MIME_PARSER_H_
 
 #include "config.h"
+#include "libserver/logger.h"
 
 struct rspamd_config;
 
@@ -48,6 +49,12 @@ enum rspamd_mime_parse_error rspamd_mime_parse_task(struct rspamd_task *task,
 
 void rspamd_mime_parser_calc_digest(struct rspamd_mime_part *part);
 
+/* Public logging support for mime module */
+EXTERN_LOG_MODULE_DEF(mime);
+#define msg_debug_mime(...) rspamd_conditional_debug_fast(NULL, task->from_addr,                                \
+                                                                                                                 rspamd_mime_log_id, "mime", task->task_pool->tag.uid, \
+                                                                                                                 RSPAMD_LOG_FUNC,                                      \
+                                                                                                                 __VA_ARGS__)
 
 #ifdef __cplusplus
 }