From 02db3e291d9b1301faa052af992ee923e2d266e3 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 31 Aug 2022 23:25:02 +0100 Subject: [PATCH] [Fix] Fix synchronous auth/select in lua_redis Issue: #4255 --- lualib/lua_redis.lua | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lualib/lua_redis.lua b/lualib/lua_redis.lua index fa7d52992..a34adff6b 100644 --- a/lualib/lua_redis.lua +++ b/lualib/lua_redis.lua @@ -1422,21 +1422,36 @@ local function redis_connect_sync(redis_params, is_write, key, cfg, ev_base) local ret,conn = rspamd_redis.connect_sync(options) if not ret then - logger.errx('cannot execute redis request: %s', conn) + logger.errx('cannot create redis connection: %s', conn) addr:fail() return false,nil,addr end if conn then + local need_exec = false if redis_params['password'] then conn:add_cmd('AUTH', {redis_params['password']}) + need_exec = true end if redis_params['db'] then conn:add_cmd('SELECT', {tostring(redis_params['db'])}) + need_exec = true elseif redis_params['dbname'] then conn:add_cmd('SELECT', {tostring(redis_params['dbname'])}) + need_exec = true + end + + if need_exec then + local exec_ret, res = conn:exec() + + if not exec_ret then + logger.errx('cannot prepare redis connection (authentication or db selection failure): %s', + res) + addr:fail() + return false,nil,addr + end end end -- 2.39.5