]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: db-lua - Call auth_passdb/userdb_init() on the lua script
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 9 May 2023 07:18:57 +0000 (10:18 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 19 May 2023 09:25:44 +0000 (09:25 +0000)
This allows the script to prepare itself for these roles.

src/auth/db-lua.c
src/auth/db-lua.h
src/auth/passdb-lua.c
src/auth/userdb-lua.c

index eac366c6e5afd3f5d922ab9faa80fe84326980f5..0f1519371b786c34208ea7c78c6c3c2328b03d7b 100644 (file)
@@ -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
index be08619224dc822ace672db64a0d70420201d7ca..8188eadfdc4d932a7c27ec06bec3299cc40565b7 100644 (file)
@@ -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;
 };
 
index ad56e9983bbb032dd1a9cb5ab27c45c8b6a32f14..5fbc5927e6dde318ad617cd497c23b1053527bcc 100644 (file)
@@ -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(&params, &error) < 0)
                i_fatal("passdb-lua: initialization failed: %s", error);
index 9453f1e8ebc0a9cd0bde6e416341b31c19a31e76..f08755b2cca6d81da01f2ba35369478652a11828 100644 (file)
@@ -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(&params, &error) < 0)
                i_fatal("userdb-lua: initialization failed: %s", error);