From 0007ea46ed354a53131bbed51c197d4c4e4ba837 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 1 Mar 2021 23:07:51 +0000 Subject: [PATCH] [Project] Dmarc: Add munging configuration --- src/plugins/lua/dmarc.lua | 57 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/plugins/lua/dmarc.lua b/src/plugins/lua/dmarc.lua index 63c92d64f..5bde32ff4 100644 --- a/src/plugins/lua/dmarc.lua +++ b/src/plugins/lua/dmarc.lua @@ -46,6 +46,7 @@ local report_settings = { from_name = 'Rspamd', msgid_from = 'rspamd', } + local report_template = [[From: "{= from_name =}" <{= from_addr =}> To: {= rcpt =} {%+ if is_string(bcc) %}Bcc: {= bcc =}{%- endif %} @@ -1440,5 +1441,57 @@ rspamd_config:register_symbol({ type = 'virtual' }) -rspamd_config:register_dependency('DMARC_CALLBACK', symbols['spf_allow_symbol']) -rspamd_config:register_dependency('DMARC_CALLBACK', symbols['dkim_allow_symbol']) +rspamd_config:register_dependency('DMARC_CHECK', symbols['spf_allow_symbol']) +rspamd_config:register_dependency('DMARC_CHECK', symbols['dkim_allow_symbol']) + +-- DMARC munging support + +if opts.munging then + local lua_maps = require "lua_maps" + local lua_maps_expressions = require "lua_maps_expressions" + + local munging_defaults = { + reply_goes_to_list = false, + dmarc_mitigate_allow_only = true, -- perform munging based on DMARC_POLICY_ALLOW only + munge_from = true, -- replace from with something like via + list_map = nil, -- map of maillist domains + munge_map_condition = nil, -- maps expression to enable munging + } + + local munging_opts = lua_util.override_defaults(munging_defaults, opts.munging) + + if not munging_opts.list_map then + rspamd_logger.errx(rspamd_config, 'cannot enable DMARC munging with no list_map parameter') + + return + end + + munging_opts.list_map = lua_maps.map_add_from_ucl(munging_opts.list_map, + 'set', 'DMARC munging map') + + if not munging_opts.list_map then + rspamd_logger.errx(rspamd_config, 'cannot enable DMARC munging with invalid list_map (invalid map)') + + return + end + + if munging_opts.munge_map_condition then + munging_opts.munge_map_condition = lua_maps_expressions.create(rspamd_config, + munging_opts.munge_map_condition, N) + end + + local function dmarc_munge_callback(task) + + end + + rspamd_config:register_symbol({ + name = 'DMARC_MUNGED', + type = 'normal', + callback = dmarc_munge_callback + }) + + rspamd_config:register_dependency('DMARC_MUNGED', 'DMARC_CHECK') + -- To avoid dkim signing issues + rspamd_config:register_dependency('DKIM_SIGNED', 'DMARC_MUNGED') + rspamd_config:register_dependency('ARC_SIGNED', 'DMARC_MUNGED') +end \ No newline at end of file -- 2.39.5