]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Distinguish dynamic and static items
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 11 May 2022 21:06:09 +0000 (22:06 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 11 May 2022 21:06:09 +0000 (22:06 +0100)
src/libserver/rspamd_symcache.h
src/libserver/symcache/symcache_c.cxx
src/lua/lua_http.c
src/lua/lua_tcp.c
src/lua/lua_udp.c

index d1a9c41feb5a0bc23b7752ee29023c299c3e3d83..99158fbc3ef1c6d613885f01324da75edfe29039 100644 (file)
@@ -484,13 +484,19 @@ gboolean rspamd_symcache_is_item_allowed (struct rspamd_task *task,
  * @param item
  * @return
  */
-gint rspamd_symcache_item_flags (struct rspamd_symcache_item *item);
+gint rspamd_symcache_dyn_item_flags (struct rspamd_task *task,
+                                                                        struct rspamd_symcache_dynamic_item *dyn_item);
+gint rspamd_symcache_item_flags(struct rspamd_symcache_item *item);
+
 /**
  * Returns cache item name
  * @param item
  * @return
  */
-const gchar* rspamd_symcache_item_name (struct rspamd_symcache_item *item);
+const gchar* rspamd_symcache_dyn_item_name (struct rspamd_task *task,
+                                                                                       struct rspamd_symcache_dynamic_item *dyn_item);
+const gchar * rspamd_symcache_item_name(struct rspamd_symcache_item *item);
+
 /**
  * Returns the current item stat
  * @param item
index f67078b6239a8a83c4dee2e02d18a476af0ba65b..fafc89d1943e5d8dd60c28b23e786eb58f1758d5 100644 (file)
@@ -251,6 +251,39 @@ rspamd_symcache_item_flags(struct rspamd_symcache_item *item)
        return real_item->get_flags();
 }
 
+
+const gchar*
+rspamd_symcache_dyn_item_name (struct rspamd_task *task,
+                                                          struct rspamd_symcache_dynamic_item *dyn_item)
+{
+       auto *cache_runtime = C_API_SYMCACHE_RUNTIME(task->symcache_runtime);
+       auto *real_dyn_item = C_API_SYMCACHE_DYN_ITEM(dyn_item);
+
+       if (cache_runtime == nullptr || real_dyn_item == nullptr) {
+               return nullptr;
+       }
+
+       auto static_item = cache_runtime->get_item_by_dynamic_item(real_dyn_item);
+
+       return static_item->get_name().c_str();
+}
+
+gint
+rspamd_symcache_item_flags(struct rspamd_task *task,
+                                                  struct rspamd_symcache_dynamic_item *dyn_item)
+{
+       auto *cache_runtime = C_API_SYMCACHE_RUNTIME(task->symcache_runtime);
+       auto *real_dyn_item = C_API_SYMCACHE_DYN_ITEM(dyn_item);
+
+       if (cache_runtime == nullptr || real_dyn_item == nullptr) {
+               return 0;
+       }
+
+       auto static_item = cache_runtime->get_item_by_dynamic_item(real_dyn_item);
+
+       return static_item->get_flags();
+}
+
 guint
 rspamd_symcache_get_symbol_flags(struct rspamd_symcache *cache,
                                                                 const gchar *symbol)
index 1d6c327989ebae07f0a1db5e1553e5bb9fb454af..1fb5732f84cf4ad3f1227908a63e9dff466c1b15 100644 (file)
@@ -446,7 +446,8 @@ lua_http_make_connection (struct lua_http_cbdata *cbd)
                        if (cbd->item) {
                                rspamd_session_add_event_full (cbd->session,
                                                (event_finalizer_t) lua_http_fin, cbd,
-                                               M, rspamd_symcache_item_name (cbd->item));
+                                               M,
+                                               rspamd_symcache_dyn_item_name (cbd->task, cbd->item));
                        }
                        else {
                                rspamd_session_add_event (cbd->session,
index 851e1511d6acd3671731b6d91f7756aedba023c7..e1024ee36a2366dae7abe89ff6949af0ce4cfa7e 100644 (file)
@@ -1233,7 +1233,7 @@ lua_tcp_register_event (struct lua_tcp_cbdata *cbd)
 
                if (cbd->item) {
                        cbd->async_ev = rspamd_session_add_event_full (cbd->session, fin, cbd, M,
-                                       rspamd_symcache_item_name (cbd->item));
+                                       rspamd_symcache_dyn_item_name (cbd->task, cbd->item));
                }
                else {
                        cbd->async_ev = rspamd_session_add_event (cbd->session, fin, cbd, M);
index b976f9adf85668617fc349d6cf8083018ab3ebab..b9e2830629100357626b7470009f85845cd405e8 100644 (file)
@@ -238,7 +238,8 @@ lua_udp_maybe_register_event (struct lua_udp_cbdata *cbd)
        if (cbd->s && !cbd->async_ev) {
                if (cbd->item) {
                        cbd->async_ev = rspamd_session_add_event_full (cbd->s, lua_udp_cbd_fin,
-                                       cbd, M, rspamd_symcache_item_name (cbd->item));
+                                       cbd, M,
+                                       rspamd_symcache_dyn_item_name (cbd->task, cbd->item));
                }
                else {
                        cbd->async_ev = rspamd_session_add_event (cbd->s, lua_udp_cbd_fin,