commit a0fc561: [Minor] Various fixes

Vsevolod Stakhov vsevolod at rspamd.com
Fri Nov 10 13:49:13 UTC 2023


Author: Vsevolod Stakhov
Date: 2023-11-10 09:34:55 +0000
URL: https://github.com/rspamd/rspamd/commit/a0fc56157cacf18ceb0cdb73054f053dc82768ab

[Minor] Various fixes

---
 lualib/rspamadm/fuzzy_ping.lua |  2 ++
 src/plugins/fuzzy_check.c      | 56 ++++++++++++++++++++++++++++++------------
 2 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/lualib/rspamadm/fuzzy_ping.lua b/lualib/rspamadm/fuzzy_ping.lua
index eed509282..3630771cc 100644
--- a/lualib/rspamadm/fuzzy_ping.lua
+++ b/lualib/rspamadm/fuzzy_ping.lua
@@ -111,6 +111,7 @@ local function handler(args)
   -- Perform ping using a fake task from async stuff provided by rspamadm
   local rspamd_task = require "rspamd_task"
 
+  -- TODO: this task is not cleared at the end, do something about it some day
   local task = rspamd_task.create(rspamd_config, rspamadm_ev_base)
   task:set_session(rspamadm_session)
   task:set_resolver(rspamadm_dns_resolver)
@@ -120,6 +121,7 @@ local function handler(args)
 
   local function gen_ping_fuzzy_cb(num)
     return function(success, server, latency_or_err)
+      rspamd_logger.errx(task, 'pinged %s: %s', server, latency_or_err)
       if not success then
         results[num] = {
           success = false,
diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c
index 4c93d1de5..6fd1f168b 100644
--- a/src/plugins/fuzzy_check.c
+++ b/src/plugins/fuzzy_check.c
@@ -4423,6 +4423,39 @@ fuzzy_lua_session_is_completed(struct fuzzy_lua_session *session)
 	return FALSE;
 }
 
+static void
+fuzzy_lua_push_result(struct fuzzy_lua_session *session, gdouble latency)
+{
+	lua_rawgeti(session->L, LUA_REGISTRYINDEX, session->cbref);
+	lua_pushboolean(session->L, TRUE);
+	rspamd_lua_ip_push(session->L, session->addr);
+	lua_pushnumber(session->L, latency);
+
+	/* TODO: check results maybe? */
+	lua_pcall(session->L, 3, 0, 0);
+}
+
+#ifdef __GNUC__
+static void
+fuzzy_lua_push_error(struct fuzzy_lua_session *session, const gchar *err_fmt, ...) __attribute__((format(printf, 2, 3)));
+#endif
+
+static void
+fuzzy_lua_push_error(struct fuzzy_lua_session *session, const gchar *err_fmt, ...)
+{
+	va_list v;
+
+	va_start(v, err_fmt);
+	lua_rawgeti(session->L, LUA_REGISTRYINDEX, session->cbref);
+	lua_pushboolean(session->L, FALSE);
+	rspamd_lua_ip_push(session->L, session->addr);
+	lua_pushvfstring(session->L, err_fmt, v);
+	va_end(v);
+
+	/* TODO: check results maybe? */
+	lua_pcall(session->L, 3, 0, 0);
+}
+
 static gint
 fuzzy_lua_try_read(struct fuzzy_lua_session *session)
 {
@@ -4437,6 +4470,7 @@ fuzzy_lua_try_read(struct fuzzy_lua_session *session)
 			return 0;
 		}
 		else {
+			fuzzy_lua_push_error(session, "cannot read from socket: %s", strerror(errno));
 			return -1;
 		}
 	}
@@ -4448,31 +4482,18 @@ fuzzy_lua_try_read(struct fuzzy_lua_session *session)
 		while ((rep = fuzzy_process_reply(&p, &r,
 										  session->commands, session->rule, &cmd, &io)) != NULL) {
 
-			lua_rawgeti(session->L, LUA_REGISTRYINDEX, session->cbref);
-
 			if (rep->v1.prob > 0.5) {
 				if (cmd->cmd == FUZZY_PING) {
-					/* ret, addr, latency */
-					lua_pushboolean(session->L, TRUE);
-					rspamd_lua_ip_push(session->L, session->addr);
-					lua_pushnumber(session->L, fuzzy_milliseconds_since_midnight() - rep->v1.value);
+					fuzzy_lua_push_result(session, fuzzy_milliseconds_since_midnight() - rep->v1.value);
 				}
 				else {
-					/* TODO: unsupported */
-					lua_pushboolean(session->L, FALSE);
-					rspamd_lua_ip_push(session->L, session->addr);
-					lua_pushstring(session->L, "unsupported");
+					fuzzy_lua_push_error(session, "unsupported");
 				}
 			}
 			else {
-				lua_pushboolean(session->L, FALSE);
-				rspamd_lua_ip_push(session->L, session->addr);
-				lua_pushfstring(session->L, "invalid reply from server: %d", rep->v1.value);
+				fuzzy_lua_push_error(session, "invalid reply from server: %d", rep->v1.value);
 			}
 
-			/* TODO: check results maybe? */
-			lua_pcall(session->L, 3, 0, 0);
-
 			ret = 1;
 		}
 	}
@@ -4506,6 +4527,7 @@ fuzzy_lua_io_callback(gint fd, short what, void *arg)
 				if (what & EV_WRITE) {
 					/* Retransmit attempt */
 					if (!fuzzy_cmd_vector_to_wire(fd, session->commands)) {
+						fuzzy_lua_push_error(session, "cannot write to socket");
 						ret = return_error;
 					}
 					else {
@@ -4524,6 +4546,7 @@ fuzzy_lua_io_callback(gint fd, short what, void *arg)
 	}
 	else if (what & EV_WRITE) {
 		if (!fuzzy_cmd_vector_to_wire(fd, session->commands)) {
+			fuzzy_lua_push_error(session, "cannot write to socket");
 			ret = return_error;
 		}
 		else {
@@ -4532,6 +4555,7 @@ fuzzy_lua_io_callback(gint fd, short what, void *arg)
 	}
 	else {
 		/* Timeout */
+		fuzzy_lua_push_error(session, "timeout waiting for the reply");
 		ret = return_error;
 	}
 


More information about the Commits mailing list