diff options
Diffstat (limited to 'src/libstat/learn_cache/redis_cache.c')
-rw-r--r-- | src/libstat/learn_cache/redis_cache.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/libstat/learn_cache/redis_cache.c b/src/libstat/learn_cache/redis_cache.c index 3026009bc..0bbae8560 100644 --- a/src/libstat/learn_cache/redis_cache.c +++ b/src/libstat/learn_cache/redis_cache.c @@ -35,6 +35,7 @@ static const gchar *M = "redis learn cache"; struct rspamd_redis_cache_ctx { lua_State *L; struct rspamd_statfile_config *stcf; + const gchar *username; const gchar *password; const gchar *dbname; const gchar *redis_object; @@ -77,7 +78,17 @@ static void rspamd_redis_cache_maybe_auth(struct rspamd_redis_cache_ctx *ctx, redisAsyncContext *redis) { - if (ctx->password) { + if (ctx->username) { + if (ctx->password) { + redisAsyncCommand(redis, NULL, NULL, "AUTH %s %s", ctx->username, ctx->password); + } + else { + msg_err("Redis requires a password when username is supplied"); + redisAsyncFree(ctx); + return NULL; + } + } + else if (ctx->password) { redisAsyncCommand(redis, NULL, NULL, "AUTH %s", ctx->password); } if (ctx->dbname) { @@ -328,6 +339,14 @@ rspamd_stat_cache_redis_init(struct rspamd_stat_ctx *ctx, } lua_pop(L, 1); + lua_pushstring(L, "username"); + lua_gettable(L, -2); + if (lua_type(L, -1) == LUA_TSTRING) { + cache_ctx->username = rspamd_mempool_strdup(cfg->cfg_pool, + lua_tostring(L, -1)); + } + lua_pop(L, 1); + lua_pushstring(L, "password"); lua_gettable(L, -2); if (lua_type(L, -1) == LUA_TSTRING) { |