]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Mx check: Emit quit command
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 21 Nov 2021 16:33:41 +0000 (16:33 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 21 Nov 2021 16:34:01 +0000 (16:34 +0000)
Issue: #3966

lualib/lua_smtp.lua
src/plugins/lua/mx_check.lua

index a15f1ae17b526a1feab5f41fbaec2c844f2ac242..256da052229c9907d74747c214bce026c63edef7 100644 (file)
@@ -59,7 +59,7 @@ local function sendmail(opts, message, callback)
           mdata = tostring(mdata)
         end
         if string.sub(mdata, 1, 1) ~= wantcode then
-          callback(false, string.format('bad smtp responce on stage %s: "%s" when "%s" expected',
+          callback(false, string.format('bad smtp response on stage %s: "%s" when "%s" expected',
               stage, mdata, wantcode))
           if conn then
             conn:close()
@@ -169,7 +169,7 @@ local function sendmail(opts, message, callback)
       end
     end
 
-    -- HELLO stage
+    -- HELO stage
     local function hello_cb(merr)
       if no_error_write(merr) then
         conn:add_read(hello_done_cb, CRLF)
index c88aa56015fd220cc95dd1dd5d792af5aefdc151..678c21566df3e8565e9eae42f9d4769abd06d0a3 100644 (file)
@@ -43,6 +43,7 @@ local redis_params
 local exclude_domains
 
 local E = {}
+local CRLF = '\r\n'
 
 local function mx_check(task)
   local ip_addr = task:get_ip()
@@ -130,26 +131,30 @@ local function mx_check(task)
     return function(_, _, results, err)
       mxes[name].ips = results
 
-      local function io_cb(io_err)
+      local function io_cb(io_err, _, conn)
         if io_err then
           mxes[name].checked = true
+          conn:close()
         else
           mxes[name].checked = true
           mxes[name].working = true
           valid = true
         end
         check_results(mxes)
+        conn:add_write(function(_)
+          conn:close()
+        end, string.format('QUIT%s', CRLF))
       end
       local function on_connect_cb(conn)
         if err then
           mxes[name].checked = true
+          conn:close()
+          check_results(mxes)
         else
           mxes[name].checked = true
           valid = true
           mxes[name].working = true
         end
-        conn:close()
-        check_results(mxes)
       end
 
       if err or not results or #results == 0 then
@@ -162,6 +167,7 @@ local function mx_check(task)
           task = task,
           host = results[1]:to_string(),
           callback = io_cb,
+          stop_pattern = CRLF,
           on_connect = on_connect_cb,
           timeout = settings.timeout,
           port = 25