From: Aki Tuomi Date: Tue, 9 May 2023 07:18:57 +0000 (+0300) Subject: auth: db-lua - Call auth_passdb/userdb_init() on the lua script X-Git-Tag: 2.4.0~2759 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9dab3dc5eaa257371ae150047404506acd6823d5;p=thirdparty%2Fdovecot%2Fcore.git auth: db-lua - Call auth_passdb/userdb_init() on the lua script This allows the script to prepare itself for these roles. --- diff --git a/src/auth/db-lua.c b/src/auth/db-lua.c index eac366c6e5..0f1519371b 100644 --- a/src/auth/db-lua.c +++ b/src/auth/db-lua.c @@ -18,7 +18,9 @@ #include "password-scheme.h" #include "auth-request-var-expand.h" +#define AUTH_LUA_PASSDB_INIT "auth_passdb_init" #define AUTH_LUA_PASSDB_LOOKUP "auth_passdb_lookup" +#define AUTH_LUA_USERDB_INIT "auth_userdb_init" #define AUTH_LUA_USERDB_LOOKUP "auth_userdb_lookup" #define AUTH_LUA_USERDB_ITERATE "auth_userdb_iterate" @@ -434,7 +436,26 @@ int auth_lua_script_init(const struct auth_lua_script_parameters *params, dlua_dovecot_register(script); auth_lua_dovecot_auth_register(script->L); auth_lua_auth_request_register(script->L); - return dlua_script_init(script, error_r); + if (dlua_script_init(script, error_r) < 0) + return -1; + const char *fn; + switch (params->stype) { + case AUTH_LUA_SCRIPT_TYPE_PASSDB: + fn = AUTH_LUA_PASSDB_INIT; + break; + case AUTH_LUA_SCRIPT_TYPE_USERDB: + fn = AUTH_LUA_USERDB_INIT; + break; + } + if (!dlua_script_has_function(script, fn)) + return 0; + + /* call the function */ + if (dlua_pcall(script->L, fn, 0, 0, error_r) < 0) + return -1; + + i_assert(lua_gettop(script->L) == 0); + return 0; } static void diff --git a/src/auth/db-lua.h b/src/auth/db-lua.h index be08619224..8188eadfdc 100644 --- a/src/auth/db-lua.h +++ b/src/auth/db-lua.h @@ -9,7 +9,13 @@ struct dlua_script; +enum auth_lua_script_type { + AUTH_LUA_SCRIPT_TYPE_PASSDB, + AUTH_LUA_SCRIPT_TYPE_USERDB, +}; + struct auth_lua_script_parameters { + enum auth_lua_script_type stype; struct dlua_script *script; }; diff --git a/src/auth/passdb-lua.c b/src/auth/passdb-lua.c index ad56e9983b..5fbc5927e6 100644 --- a/src/auth/passdb-lua.c +++ b/src/auth/passdb-lua.c @@ -160,6 +160,7 @@ static void passdb_lua_init(struct passdb_module *_module) const struct auth_lua_script_parameters params = { .script = module->script, + .stype = AUTH_LUA_SCRIPT_TYPE_PASSDB, }; if (auth_lua_script_init(¶ms, &error) < 0) i_fatal("passdb-lua: initialization failed: %s", error); diff --git a/src/auth/userdb-lua.c b/src/auth/userdb-lua.c index 9453f1e8eb..f08755b2cc 100644 --- a/src/auth/userdb-lua.c +++ b/src/auth/userdb-lua.c @@ -84,6 +84,7 @@ static void userdb_lua_init(struct userdb_module *_module) const struct auth_lua_script_parameters params = { .script = module->script, + .stype = AUTH_LUA_SCRIPT_TYPE_USERDB, }; if (auth_lua_script_init(¶ms, &error) < 0) i_fatal("userdb-lua: initialization failed: %s", error);