diff options
Diffstat (limited to 'src/plugins/lua/dmarc.lua')
-rw-r--r-- | src/plugins/lua/dmarc.lua | 81 |
1 files changed, 37 insertions, 44 deletions
diff --git a/src/plugins/lua/dmarc.lua b/src/plugins/lua/dmarc.lua index 17ef5c274..bf1e338da 100644 --- a/src/plugins/lua/dmarc.lua +++ b/src/plugins/lua/dmarc.lua @@ -115,7 +115,6 @@ local function dmarc_validate_policy(task, policy, hdrfromdom, dmarc_esld) table.insert(reason, "No valid SPF") end - local opts = ((task:get_symbol('DKIM_TRACE') or E)[1] or E).options local dkim_results = { pass = {}, @@ -124,12 +123,11 @@ local function dmarc_validate_policy(task, policy, hdrfromdom, dmarc_esld) fail = {}, } - if opts then dkim_results.pass = {} local dkim_violated - for _,opt in ipairs(opts) do + for _, opt in ipairs(opts) do local check_res = string.sub(opt, -1) local domain = string.sub(opt, 1, -3):lower() @@ -247,7 +245,7 @@ local function dmarc_validate_policy(task, policy, hdrfromdom, dmarc_esld) therefore cannot apply the advertised DMARC policy. ]]-- if spf_tmpfail or dkim_tmpfail then - task:insert_result(settings.symbols['dnsfail'], 1.0, policy.domain.. + task:insert_result(settings.symbols['dnsfail'], 1.0, policy.domain .. ' : ' .. 'SPF/DKIM temp error', policy.dmarc_policy) else -- We can now check the failed policy and maybe send report data elt @@ -305,34 +303,33 @@ local function dmarc_validate_policy(task, policy, hdrfromdom, dmarc_esld) -- Prepare and send redis report element local period = os.date('%Y%m%d', - task:get_date({format = 'connect', gmt = false})) + task:get_date({ format = 'connect', gmt = false })) -- Dmarc domain key must include dmarc domain, rua and period local dmarc_domain_key = table.concat( - {settings.reporting.redis_keys.report_prefix, dmarc_esld, policy.rua, period}, + { settings.reporting.redis_keys.report_prefix, dmarc_esld, policy.rua, period }, settings.reporting.redis_keys.join_char) local report_data = dmarc_common.dmarc_report(task, settings, { - spf_ok = spf_ok and 'pass' or 'fail', - dkim_ok = dkim_ok and 'pass' or 'fail', - disposition = (disposition == "softfail") and "none" or disposition, - sampled_out = sampled_out, - domain = hdrfromdom, - spf_domain = spf_domain, - dkim_results = dkim_results, - spf_result = spf_result + spf_ok = spf_ok and 'pass' or 'fail', + dkim_ok = dkim_ok and 'pass' or 'fail', + disposition = (disposition == "softfail") and "none" or disposition, + sampled_out = sampled_out, + domain = hdrfromdom, + spf_domain = spf_domain, + dkim_results = dkim_results, + spf_result = spf_result }) - - local idx_key = table.concat({settings.reporting.redis_keys.index_prefix, period}, + local idx_key = table.concat({ settings.reporting.redis_keys.index_prefix, period }, settings.reporting.redis_keys.join_char) if report_data then lua_redis.exec_redis_script(take_report_id, - {task = task, is_write = true}, + { task = task, is_write = true }, dmarc_report_cb, - {idx_key, dmarc_domain_key, - tostring(settings.reporting.max_entries), tostring(settings.reporting.keys_expire)}, - {hdrfromdom, report_data}) + { idx_key, dmarc_domain_key, + tostring(settings.reporting.max_entries), tostring(settings.reporting.keys_expire) }, + { hdrfromdom, report_data }) end end end @@ -365,13 +362,12 @@ local function dmarc_callback(task) return maybe_force_action(task, 'na') elseif (from or E)[1] then task:insert_result(settings.symbols['na'], 1.0, 'No domain in From header') - return maybe_force_action(task,'na') + return maybe_force_action(task, 'na') else task:insert_result(settings.symbols['na'], 1.0, 'No From header') - return maybe_force_action(task,'na') + return maybe_force_action(task, 'na') end - local dns_checks_inflight = 0 local dmarc_domain_policy = {} local dmarc_tld_policy = {} @@ -403,7 +399,7 @@ local function dmarc_callback(task) policy_target = dmarc_tld_policy end - return function (_, _, results, err) + return function(_, _, results, err) dns_checks_inflight = dns_checks_inflight - 1 if not seen_invalid then @@ -421,8 +417,8 @@ local function dmarc_callback(task) else local has_valid_policy = false - for _,rec in ipairs(results) do - local ret,results_or_err = dmarc_common.dmarc_check_record(task, rec, is_tld) + for _, rec in ipairs(results) do + local ret, results_or_err = dmarc_common.dmarc_check_record(task, rec, is_tld) if not ret then if results_or_err then @@ -442,7 +438,7 @@ local function dmarc_callback(task) end has_valid_policy = true - for k,v in pairs(results_or_err) do + for k, v in pairs(results_or_err) do policy_target[k] = v end end @@ -471,7 +467,7 @@ local function dmarc_callback(task) local resolve_name = '_dmarc.' .. hfromdom task:get_resolver():resolve_txt({ - task=task, + task = task, name = resolve_name, callback = gen_dmarc_cb(hfromdom, false), forced = true @@ -482,7 +478,7 @@ local function dmarc_callback(task) resolve_name = '_dmarc.' .. dmarc_domain task:get_resolver():resolve_txt({ - task=task, + task = task, name = resolve_name, callback = gen_dmarc_cb(dmarc_domain, true), forced = true @@ -492,7 +488,6 @@ local function dmarc_callback(task) end end - local opts = rspamd_config:get_all_opt('dmarc') settings = lua_util.override_defaults(settings, opts) @@ -523,7 +518,6 @@ if type(settings.reporting) == 'table' then }) end - if settings.reporting == true then rspamd_logger.errx(rspamd_config, 'old style dmarc reporting is NO LONGER supported, please read the documentation') elseif settings.reporting.enabled then @@ -575,49 +569,49 @@ rspamd_config:register_symbol({ name = settings.symbols['allow'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['reject'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['quarantine'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['softfail'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['dnsfail'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['badpolicy'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) rspamd_config:register_symbol({ name = settings.symbols['na'], parent = id, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, type = 'virtual' }) @@ -639,7 +633,7 @@ if settings.munging then local munging_opts = lua_util.override_defaults(munging_defaults, settings.munging) - if not munging_opts.list_map then + if not munging_opts.list_map then rspamd_logger.errx(rspamd_config, 'cannot enable DMARC munging with no list_map parameter') return @@ -648,7 +642,7 @@ if settings.munging then munging_opts.list_map = lua_maps.map_add_from_ucl(munging_opts.list_map, 'set', 'DMARC munging map of the recipients addresses to munge') - if not munging_opts.list_map then + if not munging_opts.list_map then rspamd_logger.errx(rspamd_config, 'cannot enable DMARC munging with invalid list_map (invalid map)') return @@ -656,19 +650,18 @@ if settings.munging then if munging_opts.munge_map_condition then munging_opts.munge_map_condition = lua_maps_expressions.create(rspamd_config, - munging_opts.munge_map_condition, N) + munging_opts.munge_map_condition, N) end - rspamd_config:register_symbol({ name = 'DMARC_MUNGED', type = 'normal', flags = 'nostat', score = 0, group = 'policies', - groups = {'dmarc'}, + groups = { 'dmarc' }, callback = dmarc_common.gen_munging_callback(munging_opts, settings), - augmentations = {lua_util.dns_timeout_augmentation(rspamd_config)}, + augmentations = { lua_util.dns_timeout_augmentation(rspamd_config) }, }) rspamd_config:register_dependency('DMARC_MUNGED', 'DMARC_CHECK') |