]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Ppopagate monitored errors from rbl module
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 17 Mar 2021 14:21:38 +0000 (14:21 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 17 Mar 2021 14:21:38 +0000 (14:21 +0000)
src/libserver/monitored.c
src/libserver/monitored.h
src/lua/lua_config.c
src/plugins/lua/rbl.lua

index 7b55b07ec811489319f41ba04f9d9db643f3b452..e1fac6fa13b07cb45a2fc095db023064a65fbc31 100644 (file)
@@ -98,7 +98,7 @@ struct rspamd_monitored {
 
 INIT_LOG_MODULE(monitored)
 
-static inline void
+inline void
 rspamd_monitored_propagate_error (struct rspamd_monitored *m,
                const gchar *error)
 {
index 2453a8f48c271d0ef03831c62e5c752fb062b35d..ce259d176d84620e4391a9720e9e7b346b9f3e78 100644 (file)
@@ -148,6 +148,14 @@ void rspamd_monitored_stop (struct rspamd_monitored *m);
  */
 void rspamd_monitored_start (struct rspamd_monitored *m);
 
+/**
+ * Propagate external monitored error
+ * @param m
+ * @param error
+ */
+void rspamd_monitored_propagate_error (struct rspamd_monitored *m,
+                                                                          const gchar *error);
+
 /**
  * Destroy monitored context and all monitored objects inside
  * @param ctx
index f42ca268ede64efa1226957e1a10f035c410686b..fdc572d9dfca19fdb4aeb47cb1ef67740dfcddae 100644 (file)
@@ -912,12 +912,14 @@ LUA_FUNCTION_DEF (monitored, alive);
 LUA_FUNCTION_DEF (monitored, latency);
 LUA_FUNCTION_DEF (monitored, offline);
 LUA_FUNCTION_DEF (monitored, total_offline);
+LUA_FUNCTION_DEF (monitored, propagate_error);
 
 static const struct luaL_reg monitoredlib_m[] = {
        LUA_INTERFACE_DEF (monitored, alive),
        LUA_INTERFACE_DEF (monitored, latency),
        LUA_INTERFACE_DEF (monitored, offline),
        LUA_INTERFACE_DEF (monitored, total_offline),
+       LUA_INTERFACE_DEF (monitored, propagate_error),
        {"__tostring", rspamd_lua_class_tostring},
        {NULL, NULL}
 };
@@ -4631,6 +4633,23 @@ lua_monitored_latency (lua_State *L)
        return 1;
 }
 
+static gint
+lua_monitored_propagate_error (lua_State *L)
+{
+       LUA_TRACE_POINT;
+       struct rspamd_monitored *m = lua_check_monitored (L, 1);
+       const gchar *what = luaL_checkstring (L, 2);
+
+       if (m && what) {
+               rspamd_monitored_propagate_error (m, what);
+       }
+       else {
+               return luaL_error (L, "invalid arguments");
+       }
+
+       return 0;
+}
+
 void
 luaopen_config (lua_State * L)
 {
index f476932b0f795d7001bdda934bd5dc7fc831a9fe..fcda1727f61f90cd302843fa678277e89a1a4415 100644 (file)
@@ -228,6 +228,9 @@ local function rbl_dns_process(task, rbl, to_resolve, results, err, resolve_tabl
     rspamd_logger.infox(task, 'error looking up %s: %s', to_resolve, err)
     task:insert_result(rbl.symbol .. '_FAIL', 1, string.format('%s:%s',
         resolve_table_elt.orig, err))
+    if rbl.monitored then
+      rbl.monitored:propagate_error(err)
+    end
     return
   end