diff options
Diffstat (limited to 'src/log_helper.c')
-rw-r--r-- | src/log_helper.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/log_helper.c b/src/log_helper.c index a118f1181..995420a41 100644 --- a/src/log_helper.c +++ b/src/log_helper.c @@ -77,7 +77,7 @@ rspamd_log_helper_read (gint fd, short what, gpointer ud) struct log_helper_ctx *ctx = ud; guchar buf[1024]; gssize r; - guint32 n, i; + guint32 n, i, nextra; struct rspamd_protocol_log_message_sum *sm; struct rspamd_worker_lua_script *sc; struct rspamd_config **pcfg; @@ -86,10 +86,12 @@ rspamd_log_helper_read (gint fd, short what, gpointer ud) if (r >= (gssize)sizeof (struct rspamd_protocol_log_message_sum)) { memcpy (&n, buf, sizeof (n)); + memcpy (&nextra, buf + sizeof (n), sizeof (nextra)); - if (n != (r - sizeof (*sm)) / sizeof (struct rspamd_protocol_log_symbol_result)) { + if (n + nextra != + (r - sizeof (*sm)) / sizeof (struct rspamd_protocol_log_symbol_result)) { msg_warn ("cannot read data from log pipe: bad length: %d elements " - "announced but %d available", n, + "announced but %d available", n + nextra, (r - sizeof (*sm)) / sizeof (struct rspamd_protocol_log_symbol_result)); } @@ -118,7 +120,18 @@ rspamd_log_helper_read (gint fd, short what, gpointer ud) rspamd_lua_setclass (ctx->L, "rspamd{config}", -1); lua_pushnumber (ctx->L, sm->settings_id); - if (lua_pcall (ctx->L, 5, 0, 0) != 0) { + lua_createtable (ctx->L, nextra, 0); + for (i = 0; i < nextra; i ++) { + lua_createtable (ctx->L, 2, 0); + lua_pushnumber (ctx->L, sm->results[i + n].id); + lua_rawseti (ctx->L, -2, 1); + lua_pushnumber (ctx->L, sm->results[i + n].score); + lua_rawseti (ctx->L, -2, 2); + + lua_rawseti (ctx->L, -2, (i + 1)); + } + + if (lua_pcall (ctx->L, 6, 0, 0) != 0) { msg_err ("error executing log handler code: %s", lua_tostring (ctx->L, -1)); lua_pop (ctx->L, 1); |