From: Vsevolod Stakhov Date: Sat, 23 Sep 2017 14:44:54 +0000 (+0100) Subject: [Fix] Fix loading of per-user redis backend for statistics X-Git-Tag: 1.7.0~615 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8a0ae90207f4bffbb8bd158597816c08d2983568;p=rspamd.git [Fix] Fix loading of per-user redis backend for statistics Issue: #1843 Closes: #1843 --- diff --git a/src/libstat/backends/redis_backend.c b/src/libstat/backends/redis_backend.c index cb20c9656..1fd0ca1f5 100644 --- a/src/libstat/backends/redis_backend.c +++ b/src/libstat/backends/redis_backend.c @@ -1228,50 +1228,48 @@ rspamd_redis_try_ucl (struct redis_stat_ctx *backend, } } - elt = ucl_object_lookup (obj, "prefix"); - if (elt == NULL || ucl_object_type (elt) != UCL_STRING) { - /* Default non-users statistics */ - backend->redis_object = REDIS_DEFAULT_OBJECT; + users_enabled = ucl_object_lookup_any (obj, "per_user", + "users_enabled", NULL); - /* - * Make redis backend compatible with sqlite3 backend in users settings - */ - users_enabled = ucl_object_lookup_any (obj, "per_user", - "users_enabled", NULL); - - if (users_enabled != NULL) { - if (ucl_object_type (users_enabled) == UCL_BOOLEAN) { - backend->enable_users = ucl_object_toboolean (users_enabled); - backend->cbref_user = -1; + if (users_enabled != NULL) { + if (ucl_object_type (users_enabled) == UCL_BOOLEAN) { + backend->enable_users = ucl_object_toboolean (users_enabled); + backend->cbref_user = -1; + } + else if (ucl_object_type (users_enabled) == UCL_STRING) { + lua_script = ucl_object_tostring (users_enabled); - if (backend->enable_users) { - backend->redis_object = REDIS_DEFAULT_USERS_OBJECT; - } + if (luaL_dostring (cfg->lua_state, lua_script) != 0) { + msg_err_config ("cannot execute lua script for users " + "extraction: %s", lua_tostring (cfg->lua_state, -1)); } - else if (ucl_object_type (users_enabled) == UCL_STRING) { - lua_script = ucl_object_tostring (users_enabled); - - if (luaL_dostring (cfg->lua_state, lua_script) != 0) { - msg_err_config ("cannot execute lua script for users " - "extraction: %s", lua_tostring (cfg->lua_state, -1)); + else { + if (lua_type (cfg->lua_state, -1) == LUA_TFUNCTION) { + backend->enable_users = TRUE; + backend->cbref_user = luaL_ref (cfg->lua_state, + LUA_REGISTRYINDEX); } else { - if (lua_type (cfg->lua_state, -1) == LUA_TFUNCTION) { - backend->enable_users = TRUE; - backend->cbref_user = luaL_ref (cfg->lua_state, - LUA_REGISTRYINDEX); - } - else { - msg_err_config ("lua script must return " - "function(task) and not %s", - lua_typename (cfg->lua_state, lua_type ( - cfg->lua_state, -1))); - } + msg_err_config ("lua script must return " + "function(task) and not %s", + lua_typename (cfg->lua_state, lua_type ( + cfg->lua_state, -1))); } } } + } + else { + backend->enable_users = FALSE; + } + + elt = ucl_object_lookup (obj, "prefix"); + if (elt == NULL || ucl_object_type (elt) != UCL_STRING) { + /* Default non-users statistics */ + if (backend->enable_users && backend->cbref_user == -1) { + backend->redis_object = REDIS_DEFAULT_USERS_OBJECT; + } else { - backend->enable_users = FALSE; + backend->redis_object = REDIS_DEFAULT_OBJECT; } } else {