]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Print map id when using it in lua logger
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Mar 2016 14:44:49 +0000 (14:44 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 12 Mar 2016 14:44:49 +0000 (14:44 +0000)
src/lua/lua_common.h
src/lua/lua_logger.c
src/lua/lua_map.c

index ed284ff5b80e1582a2e7a9d08866b9156c415747..69e02142b8a5daaf174ee4f25b6f42febbd48b3b 100644 (file)
@@ -82,6 +82,28 @@ struct rspamd_lua_regexp {
        gint re_flags;
 };
 
+struct rspamd_map;
+struct lua_map_callback_data;
+struct radix_tree_compressed;
+
+enum rspamd_lua_map_type {
+       RSPAMD_LUA_MAP_RADIX = 0,
+       RSPAMD_LUA_MAP_SET,
+       RSPAMD_LUA_MAP_HASH,
+       RSPAMD_LUA_MAP_CALLBACK
+};
+
+struct rspamd_lua_map {
+       struct rspamd_map *map;
+       enum rspamd_lua_map_type type;
+
+       union {
+               struct radix_tree_compressed *radix;
+               GHashTable *hash;
+               struct lua_map_callback_data *cbdata;
+       } data;
+};
+
 /* Common utility functions */
 
 /**
@@ -176,6 +198,8 @@ gint rspamd_lua_push_header (lua_State * L,
  */
 struct rspamd_task *lua_check_task (lua_State * L, gint pos);
 
+struct rspamd_lua_map *lua_check_map (lua_State * L, gint pos);
+
 /**
  * Push ip address from a string (nil is pushed if a string cannot be converted)
  */
index 8f2f62c037439223259715e943e80f698e3e318b..66c472a27498f0c17d74e66fb9e876f82763b3e9 100644 (file)
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 #include "lua_common.h"
+#include "libutil/map.h"
+#include "libutil/map_private.h"
 
 /***
  * @module rspamd_logger
@@ -480,6 +482,21 @@ lua_logger_logx (lua_State *L, GLogLevelFlags level, gboolean is_string)
                                        uid = cfg->checksum;
                                }
                        }
+                       else if (strcmp (clsname, "rspamd{map}") == 0) {
+                               struct rspamd_lua_map *map;
+
+                               map = lua_check_map (L, 1);
+
+                               if (map) {
+                                       if (map->map) {
+                                               uid = map->map->pool->tag.uid;
+                                       }
+                                       else {
+                                               uid = "embedded";
+                                       }
+                               }
+                       }
+
 
                        /* Metatable, __index, classname */
                        lua_pop (L, 3);
index 0f8b077bf6871e354acfabe79547d26608247838..934d691227fbeef36cd38410b0f2acc0da82726d 100644 (file)
@@ -98,17 +98,6 @@ static const struct luaL_reg maplib_m[] = {
        {NULL, NULL}
 };
 
-enum rspamd_lua_map_type {
-       RSPAMD_LUA_MAP_RADIX = 0,
-       RSPAMD_LUA_MAP_SET,
-       RSPAMD_LUA_MAP_HASH,
-       RSPAMD_LUA_MAP_CALLBACK
-};
-
-struct rspamd_map;
-struct radix_tree_compressed;
-struct rspamd_lua_map;
-
 struct lua_map_callback_data {
        lua_State *L;
        gint ref;
@@ -116,24 +105,11 @@ struct lua_map_callback_data {
        struct rspamd_lua_map *lua_map;
 };
 
-struct rspamd_lua_map {
-       struct rspamd_map *map;
-       enum rspamd_lua_map_type type;
-
-       union {
-               struct radix_tree_compressed *radix;
-               GHashTable *hash;
-               struct lua_map_callback_data *cbdata;
-       } data;
-};
-
-
-
-static struct rspamd_lua_map  *
-lua_check_map (lua_State * L)
+struct rspamd_lua_map  *
+lua_check_map (lua_State * L, gint pos)
 {
-       void *ud = luaL_checkudata (L, 1, "rspamd{map}");
-       luaL_argcheck (L, ud != NULL, 1, "'map' expected");
+       void *ud = luaL_checkudata (L, pos, "rspamd{map}");
+       luaL_argcheck (L, ud != NULL, pos, "'map' expected");
        return ud ? *((struct rspamd_lua_map **)ud) : NULL;
 }
 
@@ -431,7 +407,7 @@ lua_config_add_map (lua_State *L)
 static gint
 lua_map_get_key (lua_State * L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        radix_compressed_t *radix;
        struct rspamd_lua_ip *addr = NULL;
        const gchar *key, *value = NULL;
@@ -506,7 +482,7 @@ lua_map_get_key (lua_State * L)
 static int
 lua_map_is_signed (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        gboolean ret = FALSE;
 
        if (map != NULL) {
@@ -527,7 +503,7 @@ lua_map_is_signed (lua_State *L)
 static int
 lua_map_get_proto (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        const gchar *ret = "undefined";
 
        if (map != NULL) {
@@ -556,7 +532,7 @@ lua_map_get_proto (lua_State *L)
 static int
 lua_map_get_sign_key (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        GString *ret = NULL;
 
        if (map != NULL) {
@@ -583,7 +559,7 @@ lua_map_get_sign_key (lua_State *L)
 static int
 lua_map_set_sign_key (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        const gchar *pk_str;
        struct rspamd_cryptobox_pubkey *pk;
        gsize len;
@@ -620,7 +596,7 @@ lua_map_set_sign_key (lua_State *L)
 static int
 lua_map_set_callback (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
 
        if (!map || map->type != RSPAMD_LUA_MAP_CALLBACK || map->data.cbdata == NULL) {
                return luaL_error (L, "invalid map");
@@ -640,7 +616,7 @@ lua_map_set_callback (lua_State *L)
 static int
 lua_map_get_uri (lua_State *L)
 {
-       struct rspamd_lua_map *map = lua_check_map (L);
+       struct rspamd_lua_map *map = lua_check_map (L, 1);
        const gchar *ret = "undefined";
 
        if (map != NULL) {