if requests_table[req] then
-- Duplicate request
- if forced and not requests_table[req].forced then
- requests_table[req].forced = true
+ local nreq = requests_table[req]
+ if forced and not nreq.forced then
+ nreq.forced = true
end
+
+ return true,nreq -- Duplicate
else
+ local nreq
+
local resolve_ip = rule.resolve_ip and not is_ip
if rule.process_script then
local processed = rule.process_script(req, rule.rbl, task, resolve_ip)
if processed then
- local nreq = {
+ nreq = {
forced = forced,
n = processed,
orig = req_str,
to_resolve = orign
end
- local nreq = {
+ nreq = {
forced = forced,
n = to_resolve,
orig = req_str,
}
requests_table[req] = nreq
end
-
+ return false, nreq
end
end
local nresolved = 0
-- This is called when doing resolve_ip phase...
- local function gen_rbl_ip_dns_callback(_)
+ local function gen_rbl_ip_dns_callback(orig_resolve_table_elt)
return function(_, _, results, err)
if not err then
for _,dns_res in ipairs(results) do
-- Check if we have rspamd{ip} userdata
if type(dns_res) == 'userdata' then
-- Add result as an actual RBL request
- add_dns_request(task, dns_res, false, true,
- resolved_req)
+ local dup,nreq = add_dns_request(task, dns_res, false, true,
+ resolved_req, orig_resolve_table_elt.what)
+ -- Add original name
+ if not dup then
+ nreq.orig = nreq.orig .. ':' .. orig_resolve_table_elt.n
+ end
end
end
end
if r:resolve_a({
task = task,
name = req.n,
- callback = gen_rbl_ip_dns_callback(req.orig),
+ callback = gen_rbl_ip_dns_callback(req),
forced = req.forced
}) then
nresolved = nresolved + 1