diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2021-10-12 13:00:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-12 13:00:49 +0100 |
commit | b68e6b885974acbbf75b244224ca87b2fcf304fc (patch) | |
tree | 14bb11bdd4c05d2ac3c2256c5dbe00fb57537422 /src/plugins/lua/external_relay.lua | |
parent | 7e1b38c704dc3e25bd1f0c171f4f53effcbef75e (diff) | |
parent | dfacd5dcf9b8e71bb1c7109bd4bdefa4d4ac75b1 (diff) | |
download | rspamd-b68e6b885974acbbf75b244224ca87b2fcf304fc.tar.gz rspamd-b68e6b885974acbbf75b244224ca87b2fcf304fc.zip |
Merge pull request #3931 from fatalbanana/fix_external_relay
[Minor] external_relay: use real_ip
Diffstat (limited to 'src/plugins/lua/external_relay.lua')
-rw-r--r-- | src/plugins/lua/external_relay.lua | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/src/plugins/lua/external_relay.lua b/src/plugins/lua/external_relay.lua index dc973b9a6..8b20bbe82 100644 --- a/src/plugins/lua/external_relay.lua +++ b/src/plugins/lua/external_relay.lua @@ -24,7 +24,6 @@ end local lua_maps = require "lua_maps" local lua_util = require "lua_util" -local rspamd_ip = require "rspamd_ip" local rspamd_logger = require "rspamd_logger" local ts = require("tableshape").types @@ -66,25 +65,19 @@ local config_schema = ts.shape{ ), } -local function set_from_rcvd(task, rcvd, remote_rcvd_ip) - if not remote_rcvd_ip then - if not rcvd.from_ip then - rspamd_logger.errx(task, 'no IP in header: %s', rcvd) - return - end - remote_rcvd_ip = rspamd_ip.from_string(rcvd.from_ip) - if not remote_rcvd_ip and remote_rcvd_ip:is_valid() then - rspamd_logger.errx(task, 'invalid remote IP: %s', rcvd.from_ip) - return - end +local function set_from_rcvd(task, rcvd) + local rcvd_ip = rcvd.real_ip + if not (rcvd_ip and rcvd_ip:is_valid()) then + rspamd_logger.errx(task, 'no IP in header: %s', rcvd) + return end - task:set_from_ip(remote_rcvd_ip) + task:set_from_ip(rcvd_ip) if rcvd.from_hostname then task:set_hostname(rcvd.from_hostname) task:set_helo(rcvd.from_hostname) -- use fake value for HELO else rspamd_logger.warnx(task, "couldn't get hostname from headers") - local ipstr = string.format('[%s]', rcvd.from_ip) + local ipstr = string.format('[%s]', rcvd_ip) task:set_hostname(ipstr) -- returns nil from task:get_hostname() task:set_helo(ipstr) end @@ -174,7 +167,7 @@ strategies.hostname_map = function(rule) local rcvd_hdrs = task:get_received_headers() -- Try find sending hostname in Received headers for _, rcvd in ipairs(rcvd_hdrs) do - if rcvd.by_hostname == from_hn and rcvd.from_ip then + if rcvd.by_hostname == from_hn and rcvd.real_ip then if not hostname_map:get_key(rcvd.from_hostname) then -- Remote hostname is not another relay, use this header return set_from_rcvd(task, rcvd) @@ -206,10 +199,10 @@ strategies['local'] = function(rule) local num_rcvd = #rcvd_hdrs -- Try find first non-local IP in Received headers for i, rcvd in ipairs(rcvd_hdrs) do - if rcvd.from_ip then - local remote_rcvd_ip = rspamd_ip.from_string(rcvd.from_ip) - if remote_rcvd_ip and remote_rcvd_ip:is_valid() and (not remote_rcvd_ip:is_local() or i == num_rcvd) then - return set_from_rcvd(task, rcvd, remote_rcvd_ip) + if rcvd.real_ip then + local rcvd_ip = rcvd.real_ip + if rcvd_ip and rcvd_ip:is_valid() and (not rcvd_ip:is_local() or i == num_rcvd) then + return set_from_rcvd(task, rcvd) end end end |