From 72852045441aa5395f7512e93be8897d9db50a6c Mon Sep 17 00:00:00 2001 From: Carsten Rosenberg Date: Sat, 28 Sep 2019 21:13:38 +0200 Subject: [PATCH] [Minor] lua_scanners - icap - fix host header and empty return --- lualib/lua_scanners/icap.lua | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lualib/lua_scanners/icap.lua b/lualib/lua_scanners/icap.lua index d43ba4f78..a845a999a 100644 --- a/lualib/lua_scanners/icap.lua +++ b/lualib/lua_scanners/icap.lua @@ -104,7 +104,7 @@ local function icap_check(task, content, digest, rule) -- Build the icap queries local options_request = { "OPTIONS icap://" .. addr:to_string() .. ":" .. addr:get_port() .. "/" .. rule.scheme .. " ICAP/1.0\r\n", - "Host:" .. addr:to_string() .. "\r\n", + "Host: " .. addr:to_string() .. "\r\n", "User-Agent: Rspamd\r\n", "Encapsulated: null-body=0\r\n\r\n", } @@ -284,11 +284,11 @@ local function icap_check(task, content, digest, rule) local result = tostring(data) conn:close() - local icap_headers = icap_result_header_table(result) + local icap_headers = icap_result_header_table(result) or {} -- Find ICAP/1.x 2xx response - if string.find(icap_headers.icap, 'ICAP%/1%.. 2%d%d') then + if icap_headers.icap ~= nil and string.find(icap_headers.icap, 'ICAP%/1%.. 2%d%d') then icap_parse_result(icap_headers) - elseif string.find(icap_headers.icap, 'ICAP%/1%.. [45]%d%d') then + elseif icap_headers.icap ~= nil and string.find(icap_headers.icap, 'ICAP%/1%.. [45]%d%d') then -- Find ICAP/1.x 5/4xx response --[[ Symantec String: @@ -302,7 +302,7 @@ local function icap_check(task, content, digest, rule) else rspamd_logger.errx(task, '%s: unhandled response |%s|', rule.log_prefix, string.gsub(result, "\r\n", ", ")) - common.yield_result(task, rule, 'unhandled icap response: ' .. icap_headers.icap, 0.0, 'fail') + common.yield_result(task, rule, 'unhandled icap response: ' .. icap_headers.icap or "-", 0.0, 'fail') end end end @@ -321,7 +321,7 @@ local function icap_check(task, content, digest, rule) else local icap_headers = icap_result_header_table(tostring(data)) - if string.find(icap_headers.icap, 'ICAP%/1%.. 2%d%d') then + if icap_headers.icap ~= nil and string.find(icap_headers.icap, 'ICAP%/1%.. 2%d%d') then if icap_headers['Methods'] ~= nil and string.find(icap_headers['Methods'], 'RESPMOD') then if icap_headers['Allow'] ~= nil and string.find(icap_headers['Allow'], '204') then add_respond_header('Allow', '204') @@ -341,6 +341,7 @@ local function icap_check(task, content, digest, rule) end conn:add_write(icap_w_respond_cb, get_respond_query()) + else rspamd_logger.errx(task, '%s: RESPMOD method not advertised: Methods: %s', rule.log_prefix, icap_headers['Methods']) @@ -348,7 +349,7 @@ local function icap_check(task, content, digest, rule) end else rspamd_logger.errx(task, '%s: OPTIONS query failed: %s', - rule.log_prefix, icap_headers.icap) + rule.log_prefix, icap_headers.icap or "-") common.yield_result(task, rule, 'OPTIONS query failed', 0.0, 'fail') end end -- 2.39.5