summaryrefslogtreecommitdiffstats
path: root/src/lua/lua_config.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-29 15:46:33 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-07-29 15:46:33 +0100
commitc22be8c74f0627f9df8a5a6ee538be981075c181 (patch)
tree1372a4e09835965ec6269856ab7f77be5c5636a1 /src/lua/lua_config.c
parentc4ad321b3349ec12cd9124f40582fa70baa588e8 (diff)
downloadrspamd-c22be8c74f0627f9df8a5a6ee538be981075c181.tar.gz
rspamd-c22be8c74f0627f9df8a5a6ee538be981075c181.zip
[Feature] Improve symbol type parsing in Lua API
Diffstat (limited to 'src/lua/lua_config.c')
-rw-r--r--src/lua/lua_config.c76
1 files changed, 47 insertions, 29 deletions
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c
index 7423bdaeb..b01b0c5a0 100644
--- a/src/lua/lua_config.c
+++ b/src/lua/lua_config.c
@@ -1376,35 +1376,6 @@ lua_config_get_key (lua_State *L)
}
static gint
-lua_parse_symbol_type (const gchar *str)
-{
- gint ret = SYMBOL_TYPE_NORMAL;
-
- if (str) {
- if (strcmp (str, "virtual") == 0) {
- ret = SYMBOL_TYPE_VIRTUAL;
- }
- else if (strcmp (str, "callback") == 0) {
- ret = SYMBOL_TYPE_CALLBACK;
- }
- else if (strcmp (str, "normal") == 0) {
- ret = SYMBOL_TYPE_NORMAL;
- }
- else if (strcmp (str, "prefilter") == 0) {
- ret = SYMBOL_TYPE_PREFILTER|SYMBOL_TYPE_GHOST;
- }
- else if (strcmp (str, "postfilter") == 0) {
- ret = SYMBOL_TYPE_POSTFILTER|SYMBOL_TYPE_GHOST;
- }
- else {
- msg_warn ("bad type: %s", str);
- }
- }
-
- return ret;
-}
-
-static gint
lua_parse_symbol_flags (const gchar *str)
{
int ret = 0;
@@ -1431,6 +1402,53 @@ lua_parse_symbol_flags (const gchar *str)
}
static gint
+lua_parse_symbol_type (const gchar *str)
+{
+ gint ret = SYMBOL_TYPE_NORMAL;
+ gchar **vec;
+ guint i, l;
+
+ if (str) {
+ vec = g_strsplit_set (str, ",;", -1);
+
+ if (vec) {
+ l = g_strv_length (vec);
+
+ for (i = 0; i < l; i ++) {
+ str = vec[i];
+
+ if (g_ascii_strcasecmp (str, "virtual") == 0) {
+ ret = SYMBOL_TYPE_VIRTUAL;
+ } else if (g_ascii_strcasecmp (str, "callback") == 0) {
+ ret = SYMBOL_TYPE_CALLBACK;
+ } else if (g_ascii_strcasecmp (str, "normal") == 0) {
+ ret = SYMBOL_TYPE_NORMAL;
+ } else if (g_ascii_strcasecmp (str, "prefilter") == 0) {
+ ret = SYMBOL_TYPE_PREFILTER | SYMBOL_TYPE_GHOST;
+ } else if (g_ascii_strcasecmp (str, "postfilter") == 0) {
+ ret = SYMBOL_TYPE_POSTFILTER | SYMBOL_TYPE_GHOST;
+ } else {
+ gint fl = 0;
+
+ fl = lua_parse_symbol_flags (str);
+
+ if (fl == 0) {
+ msg_warn ("bad type: %s", str);
+ }
+ else {
+ ret |= fl;
+ }
+ }
+ }
+
+ g_strfreev (vec);
+ }
+ }
+
+ return ret;
+}
+
+static gint
lua_config_register_symbol (lua_State * L)
{
struct rspamd_config *cfg = lua_check_config (L, 1);