exports.exec_redis_script = exec_redis_script
-local function redis_connect_sync(redis_params, is_write, key, cfg)
+local function redis_connect_sync(redis_params, is_write, key, cfg, ev_base)
if not redis_params then
return false,nil
end
+ if not cfg then
+ cfg = rspamd_config
+ end
+ if not ev_base then
+ ev_base = rspamadm_ev_base
+ end
local rspamd_redis = require "rspamd_redis"
local addr
local options = {
host = addr:get_addr(),
timeout = redis_params['timeout'],
+ config = cfg,
+ ev_base = ev_base
}
+ for k,v in pairs(redis_params) do
+ options[k] = v
+ end
local ret,conn = rspamd_redis.connect_sync(options)
if not ret then
return res
end
+--[[[
+-- @function lua_util.deepcopy(table)
+-- params: {
+- - table
+-- }
+-- Performs deep copy of the table. Including metatables
+--]]
+local function deepcopy(orig)
+ local orig_type = type(orig)
+ local copy
+ if orig_type == 'table' then
+ copy = {}
+ for orig_key, orig_value in next, orig, nil do
+ copy[deepcopy(orig_key)] = deepcopy(orig_value)
+ end
+ setmetatable(copy, deepcopy(getmetatable(orig)))
+ else -- number, string, boolean, etc
+ copy = orig
+ end
+ return copy
+end
+
+exports.deepcopy = deepcopy
+
-- Debugging support
local unconditional_debug = false
local debug_modules = {}
end
end
-local function deepcopy(orig)
- local orig_type = type(orig)
- local copy
- if orig_type == 'table' then
- copy = {}
- for orig_key, orig_value in next, orig, nil do
- copy[deepcopy(orig_key)] = deepcopy(orig_value)
- end
- setmetatable(copy, deepcopy(getmetatable(orig)))
- else -- number, string, boolean, etc
- copy = orig
- end
- return copy
-end
local function override_defaults(def, override)
for k,v in pairs(override) do
if k ~= 'selector' and k ~= 'backend' then
end
-- Allow config override
local rule = {
- selector = deepcopy(selector),
- backend = deepcopy(backend),
+ selector = lua_util.deepcopy(selector),
+ backend = lua_util.deepcopy(backend),
config = {}
}