diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libserver/cfg_file.h | 1 | ||||
-rw-r--r-- | src/libserver/cfg_utils.c | 3 | ||||
-rw-r--r-- | src/libserver/task.c | 32 |
3 files changed, 28 insertions, 8 deletions
diff --git a/src/libserver/cfg_file.h b/src/libserver/cfg_file.h index 199c965f4..ede88d9d7 100644 --- a/src/libserver/cfg_file.h +++ b/src/libserver/cfg_file.h @@ -234,6 +234,7 @@ enum rspamd_log_format_type { RSPAMD_LOG_TIME_VIRTUAL, RSPAMD_LOG_LUA, RSPAMD_LOG_DIGEST, + RSPAMD_LOG_FILENAME, }; enum rspamd_log_format_flags { diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c index 86009712e..c042c5eb2 100644 --- a/src/libserver/cfg_utils.c +++ b/src/libserver/cfg_utils.c @@ -425,6 +425,9 @@ rspamd_config_process_var (struct rspamd_config *cfg, const rspamd_ftok_t *var, rspamd_ftok_cstr_equal (&tok, "checksum", TRUE)) { type = RSPAMD_LOG_DIGEST; } + else if (rspamd_ftok_cstr_equal (&tok, "filename", TRUE)) { + type = RSPAMD_LOG_FILENAME; + } else { msg_err_config ("unknown log variable: %T", &tok); return FALSE; diff --git a/src/libserver/task.c b/src/libserver/task.c index dfb7f07c9..55a00649d 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -986,6 +986,11 @@ rspamd_task_log_check_condition (struct rspamd_task *task, ret = TRUE; } break; + case RSPAMD_LOG_FILENAME: + if (task->msg.fpath) { + ret = TRUE; + } + break; default: ret = TRUE; break; @@ -1268,6 +1273,7 @@ rspamd_task_log_variable (struct rspamd_task *task, rspamd_fstring_t *res = logbuf; rspamd_ftok_t var = {.begin = NULL, .len = 0}; static gchar numbuf[64]; + static const gchar undef[] = "undef"; switch (lf->type) { /* String vars */ @@ -1277,8 +1283,8 @@ rspamd_task_log_variable (struct rspamd_task *task, var.len = strlen (var.begin); } else { - var.begin = "undef"; - var.len = 5; + var.begin = undef; + var.len = sizeof (undef) - 1; } break; case RSPAMD_LOG_QID: @@ -1287,8 +1293,8 @@ rspamd_task_log_variable (struct rspamd_task *task, var.len = strlen (var.begin); } else { - var.begin = "undef"; - var.len = 5; + var.begin = undef; + var.len = sizeof (undef) - 1; } break; case RSPAMD_LOG_USER: @@ -1297,8 +1303,8 @@ rspamd_task_log_variable (struct rspamd_task *task, var.len = strlen (var.begin); } else { - var.begin = "undef"; - var.len = 5; + var.begin = undef; + var.len = sizeof (undef) - 1; } break; case RSPAMD_LOG_IP: @@ -1307,8 +1313,8 @@ rspamd_task_log_variable (struct rspamd_task *task, var.len = strlen (var.begin); } else { - var.begin = "undef"; - var.len = 5; + var.begin = undef; + var.len = sizeof (undef) - 1; } break; /* Numeric vars */ @@ -1376,6 +1382,16 @@ rspamd_task_log_variable (struct rspamd_task *task, (gint)sizeof (task->digest), task->digest); var.begin = numbuf; break; + case RSPAMD_LOG_FILENAME: + if (task->msg.fpath) { + var.len = strlen (task->msg.fpath); + var.begin = task->msg.fpath; + } + else { + var.begin = undef; + var.len = sizeof (undef) - 1; + } + break; default: var = rspamd_task_log_metric_res (task, lf); break; |