]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Allow to change flag from fuzzy learn condition
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Jun 2016 11:29:43 +0000 (12:29 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 28 Jun 2016 11:29:43 +0000 (12:29 +0100)
src/plugins/fuzzy_check.c

index f775e9e091da6d4207f418f65d9d9e1fa2f3e928..bda4a12bc4edc54d1ce4551a5291d31d308a0cc7 100644 (file)
@@ -2348,17 +2348,28 @@ fuzzy_process_handler (struct rspamd_http_connection_entry *conn_ent,
                        *ptask = task;
                        rspamd_lua_setclass (L, "rspamd{task}", -1);
 
-                       if (lua_pcall (L, 1, 1, err_idx) != 0) {
+                       if (lua_pcall (L, 1, LUA_MULTRET, err_idx) != 0) {
                                tb = lua_touserdata (L, -1);
                                msg_err_task ("call to user extraction script failed: %v", tb);
                                g_string_free (tb, TRUE);
                        }
                        else {
-                               skip = !(lua_toboolean (L, -1));
+                               if (lua_gettop (L) > 1) {
+                                       skip = !(lua_toboolean (L, -2));
+
+                                       if (lua_isnumber (L, -1)) {
+                                               msg_info_task ("learn condition changed flag from %d to "
+                                                               "%d", flag, (guint)lua_tonumber (L, -1));
+                                               flag = lua_tonumber (L, -1);
+                                       }
+                               }
+                               else {
+                                       skip = !(lua_toboolean (L, -1));
+                               }
                        }
 
                        /* Result + error function */
-                       lua_pop (L, 2);
+                       lua_settop (L, 0);
 
                        if (skip) {
                                msg_info_task ("skip rule %s as its condition callback returned"