]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Fix synchronous auth/select in lua_redis
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 31 Aug 2022 22:25:02 +0000 (23:25 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 31 Aug 2022 22:32:42 +0000 (23:32 +0100)
Issue: #4255

lualib/lua_redis.lua

index fa7d529929fe8a3f2253ab7a1044e1f944fe90ce..a34adff6b3fb9b73753cef350bdd8caf04a788fd 100644 (file)
@@ -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