From: Vsevolod Stakhov Date: Fri, 15 Nov 2024 09:54:20 +0000 (+0000) Subject: [Fix] Dmarc: Properly encode structured headers X-Git-Tag: 3.11.0~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c06830279ff9f98d3d5ee2888da7b2fa33a8c339;p=thirdparty%2Frspamd.git [Fix] Dmarc: Properly encode structured headers Issue: #5221 --- diff --git a/lualib/plugins/dmarc.lua b/lualib/plugins/dmarc.lua index 720c76e168..f69016b741 100644 --- a/lualib/plugins/dmarc.lua +++ b/lualib/plugins/dmarc.lua @@ -194,14 +194,17 @@ exports.gen_munging_callback = function(munging_opts, settings) via_name = string.format('%s via %s', from.name, via_user) end - local hdr_encoded = rspamd_util.fold_header('From', - rspamd_util.mime_header_encode(string.format('%s <%s>', - via_name, via_addr)), task:get_newlines_type()) - local orig_from_encoded = rspamd_util.fold_header('X-Original-From', - rspamd_util.mime_header_encode(string.format('%s <%s>', - from.name or '', from.addr)), task:get_newlines_type()) + local encoded_via_name = rspamd_util.mime_header_encode(via_name) + local via_from_folded = rspamd_util.fold_header('From', + string.format('%s <%s>', encoded_via_name, via_addr), + task:get_newlines_type()) + local encoded_orig_name = rspamd_util.mime_header_encode(from.name or '') + local orig_from_folded = rspamd_util.fold_header('X-Original-From', + string.format('%s <%s>', encoded_orig_name, from.addr), + task:get_newlines_type()) local add_hdrs = { - ['From'] = { order = 1, value = hdr_encoded }, + ['From'] = { order = 1, value = via_from_folded }, + ['X-Original-From'] = { order = 0, value = orig_from_folded }, } local remove_hdrs = { ['From'] = 0 } @@ -223,13 +226,12 @@ exports.gen_munging_callback = function(munging_opts, settings) add_hdrs['Reply-To'] = { order = 0, value = nreply } - add_hdrs['X-Original-From'] = { order = 0, value = orig_from_encoded } lua_mime.modify_headers(task, { remove = remove_hdrs, add = add_hdrs }) lua_util.debugm(N, task, 'munged DMARC header for %s: %s -> %s', - from.domain, hdr_encoded, from.addr) + from.domain, via_from_folded, from.addr) rspamd_logger.infox(task, 'munged DMARC header for %s', from.addr) task:insert_result('DMARC_MUNGED', 1.0, from.addr) end