summaryrefslogtreecommitdiffstats
path: root/lualib/rspamadm/dns_tool.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lualib/rspamadm/dns_tool.lua')
-rw-r--r--lualib/rspamadm/dns_tool.lua38
1 files changed, 28 insertions, 10 deletions
diff --git a/lualib/rspamadm/dns_tool.lua b/lualib/rspamadm/dns_tool.lua
index a747e8aa7..24a8fecf8 100644
--- a/lualib/rspamadm/dns_tool.lua
+++ b/lualib/rspamadm/dns_tool.lua
@@ -18,6 +18,7 @@ limitations under the License.
local argparse = require "argparse"
local rspamd_logger = require "rspamd_logger"
local ansicolors = require "ansicolors"
+local bit = require "bit"
local parser = argparse()
:name "rspamadm dns_tool"
@@ -105,6 +106,18 @@ local function spf_handler(opts)
os.exit(1)
end
+ local function flag_to_str(fl)
+ if bit.band(fl, rspamd_spf.flags.temp_fail) ~= 0 then
+ return "temporary failure"
+ elseif bit.band(fl, rspamd_spf.flags.perm_fail) ~= 0 then
+ return "permanent failure"
+ elseif bit.band(fl, rspamd_spf.flags.na) ~= 0 then
+ return "no spf record"
+ end
+
+ return "unknown flag: " .. tostring(fl)
+ end
+
local function display_spf_results(elt, colored)
local dec = function(e) return e end
local policy_decode = function(e)
@@ -155,17 +168,22 @@ local function spf_handler(opts)
os.exit(0)
end
- printf('SPF record for %s; digest: %s',
- highlight(opts.domain or opts.from), highlight(record:get_digest()))
- for _,elt in ipairs(record:get_elts()) do
- if result and error_or_addr and elt.str and elt.str == error_or_addr.str then
- printf("%s", highlight('*** Matched ***'))
- display_spf_results(elt, true)
- printf('------')
- else
- display_spf_results(elt, false)
- printf('------')
+ if result then
+ printf('SPF record for %s; digest: %s',
+ highlight(opts.domain or opts.from), highlight(record:get_digest()))
+ for _,elt in ipairs(record:get_elts()) do
+ if result and error_or_addr and elt.str and elt.str == error_or_addr.str then
+ printf("%s", highlight('*** Matched ***'))
+ display_spf_results(elt, true)
+ printf('------')
+ else
+ display_spf_results(elt, false)
+ printf('------')
+ end
end
+ else
+ printf('Error getting SPF record: %s (%s flag)', err,
+ flag_to_str(flag_or_policy))
end
else
printf('Cannot get SPF record: %s', err)