From e1c695b059428b6daa385ced5bfda2c9cdf98a75 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 19 Oct 2015 17:13:33 +0100 Subject: Fix parsing of headers --- rules/http_headers.lua | 62 +++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 28 deletions(-) (limited to 'rules/http_headers.lua') diff --git a/rules/http_headers.lua b/rules/http_headers.lua index 9a7ff3b09..41f3c95cf 100644 --- a/rules/http_headers.lua +++ b/rules/http_headers.lua @@ -34,18 +34,20 @@ rspamd_config:add_condition("R_DKIM_ALLOW", function(task) if hdr then local parser = ucl.parser() local res, err = parser:parse_string(tostring(hdr)) - if not res or type(res) ~= 'table' then + if not res then logger.infox(task, "cannot parse DKIM header: %1", err) return true end - if res['result'] then - if res['result'] == 'pass' or res['result'] == 'allow' then - task:insert_result('R_DKIM_ALLOW', 1.0) - elseif res['result'] == 'fail' or res['result'] == 'reject' then - task:insert_result('R_DKIM_REJECT', 1.0) - elseif res['result'] == 'tempfail' or res['result'] == 'softfail' then - task:insert_result('R_DKIM_TEMPFAIL', 1.0) + local obj = parser:get_object() + + if obj['result'] then + if obj['result'] == 'pass' or obj['result'] == 'allow' then + task:insert_result('R_DKIM_ALLOW', 1.0, 'http header') + elseif obj['result'] == 'fail' or obj['result'] == 'reject' then + task:insert_result('R_DKIM_REJECT', 1.0, 'http header') + elseif obj['result'] == 'tempfail' or obj['result'] == 'softfail' then + task:insert_result('R_DKIM_TEMPFAIL', 1.0, 'http header') end return false @@ -62,20 +64,22 @@ rspamd_config:add_condition("R_SPF_ALLOW", function(task) if hdr then local parser = ucl.parser() local res, err = parser:parse_string(tostring(hdr)) - if not res or type(res) ~= 'table' then + if not res then logger.infox(task, "cannot parse SPF header: %1", err) return true end - if res['result'] then - if res['result'] == 'pass' or res['result'] == 'allow' then - task:insert_result('R_SPF_ALLOW', 1.0) - elseif res['result'] == 'fail' or res['result'] == 'reject' then - task:insert_result('R_SPF_FAIL', 1.0) - elseif res['result'] == 'neutral' then - task:insert_result('R_SPF_NEUTRAL', 1.0) - elseif res['result'] == 'tempfail' or res['result'] == 'softfail' then - task:insert_result('R_SPF_TEMPFAIL', 1.0) + local obj = parser:get_object() + + if obj['result'] then + if obj['result'] == 'pass' or obj['result'] == 'allow' then + task:insert_result('R_SPF_ALLOW', 1.0, 'http header') + elseif obj['result'] == 'fail' or obj['result'] == 'reject' then + task:insert_result('R_SPF_FAIL', 1.0, 'http header') + elseif obj['result'] == 'neutral' then + task:insert_result('R_SPF_NEUTRAL', 1.0, 'http header') + elseif obj['result'] == 'tempfail' or obj['result'] == 'softfail' then + task:insert_result('R_SPF_TEMPFAIL', 1.0, 'http header') end return false @@ -91,20 +95,22 @@ rspamd_config:add_condition("DMARC_POLICY_ALLOW", function(task) if hdr then local parser = ucl.parser() local res, err = parser:parse_string(tostring(hdr)) - if not res or type(res) ~= 'table' then + if not res then logger.infox(task, "cannot parse DMARC header: %1", err) return true end - if res['result'] then - if res['result'] == 'pass' or res['result'] == 'allow' then - task:insert_result('DMARC_POLICY_ALLOW', 1.0) - elseif res['result'] == 'fail' or res['result'] == 'reject' then - task:insert_result('DMARC_POLICY_REJECT', 1.0) - elseif res['result'] == 'quarantine' then - task:insert_result('DMARC_POLICY_QUARANTINE', 1.0) - elseif res['result'] == 'tempfail' or res['result'] == 'softfail' then - task:insert_result('DMARC_POLICY_SOFTFAIL', 1.0) + local obj = parser:get_object() + + if obj['result'] then + if obj['result'] == 'pass' or obj['result'] == 'allow' then + task:insert_result('DMARC_POLICY_ALLOW', 1.0, 'http header') + elseif obj['result'] == 'fail' or obj['result'] == 'reject' then + task:insert_result('DMARC_POLICY_REJECT', 1.0, 'http header') + elseif obj['result'] == 'quarantine' then + task:insert_result('DMARC_POLICY_QUARANTINE', 1.0, 'http header') + elseif obj['result'] == 'tempfail' or obj['result'] == 'softfail' then + task:insert_result('DMARC_POLICY_SOFTFAIL', 1.0, 'http header') end return false -- cgit v1.2.3