Mercurial > prosody-modules
annotate mod_dnsbl/mod_dnsbl.lua @ 6492:b82fceda0abc
mod_dnsbl: Fix IPv4 lookups (double reverse)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 24 Mar 2026 20:50:36 +0000 |
| parents | bf8f96ee2605 |
| children | ccbba57cacb5 |
| rev | line source |
|---|---|
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local lfs = require "lfs"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 local adns = require "net.adns"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 local it = require "util.iterators"; |
|
6426
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
5 local hex = require "util.hex"; |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 local parse_cidr = require "util.ip".parse_cidr; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local parse_ip = require "util.ip".new_ip; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local promise = require "util.promise"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local set = require "util.set"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 local st = require "util.stanza"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 local render_message = require "util.interpolation".new("%b{}", function (s) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 return s; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 end); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local trie = module:require("mod_anti_spam/trie"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 local dnsbls_config_raw = module:get_option("dnsbls"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 local default_dnsbl_flag = module:get_option_string("dnsbl_flag", "dnsbl_hit"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local default_dnsbl_message = module:get_option("dnsbl_message"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 if not dnsbls_config_raw then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 module:log_status("error", "No 'dnsbls' in config file"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 return; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local dnsbls = set.new(); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 local dnsbls_config = {}; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 for k, v in ipairs(dnsbls_config_raw) do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 local dnsbl_name, dnsbl_config; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 if type(k) == "string" then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 dnsbl_name = k; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 dnsbl_config = v; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 else |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 dnsbl_name = v; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 dnsbl_config = {}; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 dnsbls:add(dnsbl_name); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 dnsbls_config[dnsbl_name] = dnsbl_config; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 local function read_dnsbl_file(filename) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 local t = trie.new(); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 local f, err = io.open(filename); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 if not f then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 module:log("error", "Failed to read file: %s", err); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 return t; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local n_line, n_added = 0, 0; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 for line in f:lines() do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 n_line = n_line + 1; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 line = line:gsub("#.+$", ""):match("^%s*(.-)%s*$"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 if line == "" then -- luacheck: ignore 542 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 -- Skip |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 else |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 local parsed_ip, parsed_bits = parse_cidr(line); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 if not parsed_ip then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 -- Skip |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 module:log("warn", "Failed to parse IP/CIDR on %s:%d", filename, n_line); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 else |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 if not parsed_bits then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 -- Default to full length of IP address |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 parsed_bits = #parsed_ip.packed * 8; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 t:add_subnet(parsed_ip, parsed_bits); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 n_added = n_added + 1; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 module:log("info", "Loaded %d entries from %s", n_added, filename); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 return t; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
78 local ipsets = {}; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
79 local ipsets_last_updated = {}; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
80 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
81 function reload_file_dnsbls() |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 for dnsbl in dnsbls do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 if dnsbl:byte(1) == 64 then -- '@' |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 local filename = dnsbl:sub(2); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
85 local file_last_updated = lfs.attributes(filename, "change"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 if (ipsets_last_updated[dnsbl] or 0) < file_last_updated then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
87 ipsets[dnsbl] = read_dnsbl_file(filename); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 ipsets_last_updated[dnsbl] = file_last_updated; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 module:hook_global("config-reloaded", reload_file_dnsbls); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 reload_file_dnsbls(); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 local mod_flags = module:depends("flags"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 local function reverse(ip, suffix) |
|
6426
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
100 if ip.proto == "IPv4" then |
|
6492
b82fceda0abc
mod_dnsbl: Fix IPv4 lookups (double reverse)
Matthew Wild <mwild1@gmail.com>
parents:
6426
diff
changeset
|
101 local query_string = ip.packed; |
|
6426
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
102 return ("%d.%d.%d.%d.%s"):format( |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
103 query_string:byte(4, 4), |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
104 query_string:byte(3, 3), |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
105 query_string:byte(2, 2), |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
106 query_string:byte(1, 1), |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
107 suffix |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
108 ); |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
109 elseif ip.proto == "IPv6" then |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
110 return hex.encode(ip.packed):reverse():gsub("%x", "%1.")..suffix; |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
111 end |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 function check_dnsbl(ip_address, dnsbl, callback, ud) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 if dnsbl:byte(1) == 64 then -- '@' |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 local parsed_ip = parse_ip(ip_address); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 if not parsed_ip then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 module:log("warn", "Failed to parse IP address: %s", ip_address); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 callback(ud, false, dnsbl); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 return; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 callback(ud, not not ipsets[dnsbl]:contains_ip(parsed_ip), dnsbl); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 return; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 else |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 if ip_address:sub(1,7):lower() == "::ffff:" then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 ip_address = ip_address:sub(8); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
127 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
128 |
|
6426
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
129 local parsed_ip = parse_ip(ip_address); |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
130 |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
131 local rbl_ip = reverse(parsed_ip, dnsbl); |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
132 if not rbl_ip then |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
133 module:log("warn", "Unable to query dnsbls for invalid IP: %s", parsed_ip.proto); |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
134 return; |
|
bf8f96ee2605
mod_dnsbl: Fix support for IPv6 lookups (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents:
6425
diff
changeset
|
135 end |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 module:log("debug", "Sending DNSBL lookup for %s", ip_address); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 adns.lookup(function (reply) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 local hit = not not (reply and reply[1]); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 module:log("debug", "Received DNSBL result for %s: %s", ip_address, hit and "present" or "absent"); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 callback(ud, hit, dnsbl); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 end, rbl_ip); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 local function handle_dnsbl_register_result(registration_event, hit, dnsbl) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 if not hit then return; end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 if registration_event.dnsbl_match then return; end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 registration_event.dnsbl_match = true; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 local username = registration_event.username; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 local flag = dnsbls_config[dnsbl].flag or default_dnsbl_flag; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
154 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
155 module:log("info", "Flagging %s for user %s registered from %s matching %s", flag, username, registration_event.ip, dnsbl); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
156 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 mod_flags:add_flag(username, flag, "Matched "..dnsbl); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 local msg = dnsbls_config[dnsbl].message or default_dnsbl_message; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 if msg then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 module:log("debug", "Sending warning message to %s", username); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 local msg_stanza = st.message( |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 to = username.."@"..module.host; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
166 from = module.host; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
167 }, |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
168 render_message(msg, { registration = registration_event }) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
169 ); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 module:send(msg_stanza); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
173 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 module:hook("user-registered", function (event) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 local session = event.session; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 local ip = event.ip or (session and session.ip); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 if not ip then return; end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 if not event.ip then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
180 event.ip = ip; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
181 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
182 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 for dnsbl in dnsbls do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 check_dnsbl(ip, dnsbl, handle_dnsbl_register_result, event); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 end); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
187 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
188 module:add_item("account-trait", { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
189 name = "register-dnsbl-hit"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
190 prob_bad_true = 0.6; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 prob_bad_false = 0.4; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
192 }); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
193 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
194 module:hook("get-account-traits", function (event) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
195 event.traits["register-dnsbl-hit"] = mod_flags.has_flag(event.username, default_dnsbl_flag); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
196 end); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
197 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
198 module:add_item("shell-command", { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
199 section = "dnsbl"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
200 section_desc = "Manage DNS blocklists"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
201 name = "lists"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
202 desc = "Show all lists currently in use on the specified host"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
203 args = { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
204 { name = "host", type = "string" }; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
205 }; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
206 host_selector = "host"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
207 handler = function(self, host) --luacheck: ignore 212/self 212/host |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 local count = 0; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 for list in dnsbls do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
210 count = count + 1; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
211 self.session.print(list); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
212 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
213 return true, ("%d lists"):format(count); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
214 end; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
215 }); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
216 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
217 module:add_item("shell-command", { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
218 section = "dnsbl"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
219 section_desc = "Manage DNS blocklists"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
220 name = "check"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
221 desc = "Check an IP against the configured block lists"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
222 args = { |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
223 { name = "host", type = "string" }; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
224 { name = "ip_address", type = "string" }; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
225 }; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
226 host_selector = "host"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
227 handler = function(self, host, ip_address) --luacheck: ignore 212/self 212/host |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
228 local parsed_ip = parse_ip(ip_address); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
229 if not parsed_ip then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
230 return false, "Failed to parse IP address"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
231 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
232 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
233 local matches, total = 0, 0; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
234 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
235 local promises = {}; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 for dnsbl in dnsbls do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
238 total = total + 1; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 promises[dnsbl] = promise.new(function (resolve) |
|
6425
987f0ee7d395
mod_dnsbl: Fix incorrect result from lookup
Matthew Wild <mwild1@gmail.com>
parents:
6424
diff
changeset
|
240 check_dnsbl(parsed_ip.normal, dnsbl, function (_, hit) |
|
987f0ee7d395
mod_dnsbl: Fix incorrect result from lookup
Matthew Wild <mwild1@gmail.com>
parents:
6424
diff
changeset
|
241 resolve(hit); |
|
987f0ee7d395
mod_dnsbl: Fix incorrect result from lookup
Matthew Wild <mwild1@gmail.com>
parents:
6424
diff
changeset
|
242 end); |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
243 end); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
244 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
245 |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
246 return promise.all_settled(promises):next(function (results) |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
247 for dnsbl, result in it.sorted_pairs(results) do |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
248 local msg; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
249 if result.status == "fulfilled" then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
250 if result.value then |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
251 msg = "[X]"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
252 matches = matches + 1; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
253 else |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
254 msg = "[ ]"; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
255 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
256 else |
|
6424
ec4a0e4d950e
mod_dnsbl: Fix result and error handling in shell command
Matthew Wild <mwild1@gmail.com>
parents:
6133
diff
changeset
|
257 msg = "[E]"; |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
258 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
259 |
|
6424
ec4a0e4d950e
mod_dnsbl: Fix result and error handling in shell command
Matthew Wild <mwild1@gmail.com>
parents:
6133
diff
changeset
|
260 self.session.print(msg, dnsbl); |
|
ec4a0e4d950e
mod_dnsbl: Fix result and error handling in shell command
Matthew Wild <mwild1@gmail.com>
parents:
6133
diff
changeset
|
261 if result.status == "rejected" then |
|
ec4a0e4d950e
mod_dnsbl: Fix result and error handling in shell command
Matthew Wild <mwild1@gmail.com>
parents:
6133
diff
changeset
|
262 self.session.print(" ", "Error checking list: "..(result.reason:gsub("\n", "\n \t"))); |
|
ec4a0e4d950e
mod_dnsbl: Fix result and error handling in shell command
Matthew Wild <mwild1@gmail.com>
parents:
6133
diff
changeset
|
263 end |
|
6133
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
264 end |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
265 return ("Found in %d of %d lists"):format(matches, total); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
266 end); |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
267 end; |
|
99860e1b817d
mod_dnsbl: Flag accounts registered by IPs matching blocklists
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
268 }); |
