From: Vsevolod Stakhov Date: Tue, 16 Sep 2025 08:18:59 +0000 (+0100) Subject: [Minor] Improve logging for mime parser X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F5619%2Fhead;p=thirdparty%2Frspamd.git [Minor] Improve logging for mime parser - Add debug logs for mime parser --- diff --git a/src/libmime/message.c b/src/libmime/message.c index 21b54e7ec9..67cc7925ff 100644 --- a/src/libmime/message.c +++ b/src/libmime/message.c @@ -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 { diff --git a/src/libmime/mime_parser.c b/src/libmime/mime_parser.c index 075fec347d..fc5a86c893 100644 --- a/src/libmime/mime_parser.c +++ b/src/libmime/mime_parser.c @@ -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) diff --git a/src/libmime/mime_parser.h b/src/libmime/mime_parser.h index 38175256cc..d11b56659b 100644 --- a/src/libmime/mime_parser.h +++ b/src/libmime/mime_parser.h @@ -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 }