aboutsummaryrefslogtreecommitdiffstats
path: root/lualib/lua_mime.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lualib/lua_mime.lua')
-rw-r--r--lualib/lua_mime.lua44
1 files changed, 44 insertions, 0 deletions
diff --git a/lualib/lua_mime.lua b/lualib/lua_mime.lua
index 847a00a69..5b1c857e9 100644
--- a/lualib/lua_mime.lua
+++ b/lualib/lua_mime.lua
@@ -510,5 +510,49 @@ exports.multipattern_text_replace = function(task, mp, replacements)
return state
end
+--[[[
+-- @function lua_mime.modify_headers(task, {add = {hname = {value = 'value', order = 1}}, remove = {hname = {1,2}}})
+-- Adds/removes headers both internal and in the milter reply
+--]]
+exports.modify_headers = function(task, hdr_alterations)
+ local add = hdr_alterations.add or {}
+ local remove = hdr_alterations.remove or {}
+
+ local hdr_flattened = {} -- For C API
+ for hname,hdr in pairs(add) do
+ if not hdr_flattened[hname] then
+ hdr_flattened[hname] = {add = {}}
+ end
+ local add_tbl = hdr_flattened[hname].add
+ if hdr.value then
+ table.insert(add_tbl, {hdr.order or -1, hdr.value})
+ else
+ table.insert(add_tbl, {-1, hdr})
+ end
+ end
+
+ for hname,hdr in pairs(remove) do
+ if not hdr_flattened[hname] then
+ hdr_flattened[hname] = {remove = {}}
+ end
+ local remove_tbl = hdr_flattened[hname].remove
+ if type(hdr) == 'number' then
+ table.insert(remove_tbl, hdr)
+ else
+ for _,num in ipairs(hdr) do
+ table.insert(remove_tbl, num)
+ end
+ end
+ end
+
+ task:set_milter_reply({
+ add_headers = add,
+ remove_headers = remove
+ })
+
+ for hname,flat_rules in pairs(hdr_flattened) do
+ task:modify_header(hname, flat_rules)
+ end
+end
return exports