From: Aki Tuomi Date: Tue, 9 May 2023 07:56:41 +0000 (+0300) Subject: auth: db-lua - Support passing arguments to auth_passdb/userdb_init() X-Git-Tag: 2.4.0~2758 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=079ced3a7fab14b3fc9f61287ca3a599194bf727;p=thirdparty%2Fdovecot%2Fcore.git auth: db-lua - Support passing arguments to auth_passdb/userdb_init() --- diff --git a/src/auth/db-lua.c b/src/auth/db-lua.c index 0f1519371b..e086307c2e 100644 --- a/src/auth/db-lua.c +++ b/src/auth/db-lua.c @@ -449,9 +449,21 @@ int auth_lua_script_init(const struct auth_lua_script_parameters *params, } if (!dlua_script_has_function(script, fn)) return 0; + i_assert(params->arguments == NULL || + (str_array_length(params->arguments) % 2 == 0)); + if (params->arguments != NULL) { + /* prepare a table for arguments */ + lua_createtable(script->L, 0, str_array_length(params->arguments) / 2); + for (const char *const *p = params->arguments; *p != NULL; p += 2) { + lua_pushstring(script->L, p[1]); + lua_setfield(script->L, -2, p[0]); + } + } else { + lua_newtable(script->L); + } /* call the function */ - if (dlua_pcall(script->L, fn, 0, 0, error_r) < 0) + if (dlua_pcall(script->L, fn, 1, 0, error_r) < 0) return -1; i_assert(lua_gettop(script->L) == 0); diff --git a/src/auth/db-lua.h b/src/auth/db-lua.h index 8188eadfdc..cccc8d59c7 100644 --- a/src/auth/db-lua.h +++ b/src/auth/db-lua.h @@ -17,6 +17,7 @@ enum auth_lua_script_type { struct auth_lua_script_parameters { enum auth_lua_script_type stype; struct dlua_script *script; + const char *const *arguments; }; int auth_lua_script_init(const struct auth_lua_script_parameters *params,