#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"
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
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;
};
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);
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);