switch (params->stype) {
case AUTH_LUA_SCRIPT_TYPE_PASSDB:
i_assert(params->passdb_module != NULL);
- params->passdb_module->default_cache_key =
+ params->passdb_module->module.default_cache_key =
auth_cache_parse_key_and_fields(params->pool,
lua_tostring(script->L, -1),
&post_set->fields, "lua");
break;
case AUTH_LUA_SCRIPT_TYPE_USERDB:
i_assert(params->userdb_module != NULL);
- params->userdb_module->default_cache_key =
+ params->userdb_module->module.default_cache_key =
auth_cache_parse_key_and_fields(params->pool,
lua_tostring(script->L, -1),
&post_set->fields, "lua");
const char **error_r)
{
struct dlua_script *script = params->script;
+ const struct auth_lua_settings *set;
const char *fn;
+
switch (params->stype) {
case AUTH_LUA_SCRIPT_TYPE_PASSDB:
fn = AUTH_LUA_PASSDB_INIT;
}
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) {
+
+ if (settings_get(script->event, &auth_lua_setting_parser_info, 0,
+ &set, error_r) < 0)
+ return -1;
+
+ i_assert(array_is_empty(&set->auth_lua_config) ||
+ (array_count(&set->auth_lua_config) % 2 == 0));
+ if (!array_is_empty(&set->auth_lua_config)) {
/* 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]);
+ lua_createtable(script->L, 0,
+ array_count(&set->auth_lua_config) / 2);
+ unsigned int count;
+ const char *const *str_array = array_get(&set->auth_lua_config,
+ &count);
+ for (unsigned int i = 0; i < count; i += 2) {
+ lua_pushstring(script->L, str_array[i + 1]);
+ lua_setfield(script->L, -2, str_array[i]);
}
} else {
lua_newtable(script->L);
}
+ settings_free(set);
/* call the function */
if (dlua_pcall(script->L, fn, 1, 0, error_r) < 0)
return -1;
extern const struct setting_parser_info auth_lua_setting_parser_info;
+struct dlua_passdb_module {
+ struct passdb_module module;
+ struct dlua_script *script;
+ const struct auth_lua_settings *set;
+ bool has_password_verify;
+};
+
+struct dlua_userdb_module {
+ struct userdb_module module;
+ const struct auth_lua_settings *set;
+ struct dlua_script *script;
+};
+
enum auth_lua_script_type {
AUTH_LUA_SCRIPT_TYPE_PASSDB,
AUTH_LUA_SCRIPT_TYPE_USERDB,
enum auth_lua_script_type stype;
struct dlua_script *script;
pool_t pool;
- struct userdb_module *userdb_module;
- struct passdb_module *passdb_module;
- const char *const *arguments;
+ struct dlua_userdb_module *userdb_module;
+ struct dlua_passdb_module *passdb_module;
};
int
#include "db-lua.h"
-struct dlua_passdb_module {
- struct passdb_module module;
- struct dlua_script *script;
- const struct auth_lua_settings *set;
- const char *const *arguments;
- bool has_password_verify;
-};
-
static enum passdb_result
passdb_lua_verify_password(struct dlua_passdb_module *module,
struct auth_request *request, const char *password)
passdb_lua_preinit(pool_t pool, struct event *event,
struct passdb_module **module_r, const char **error_r)
{
- unsigned int count;
const struct auth_lua_settings *set;
struct dlua_passdb_module *module;
module = p_new(pool, struct dlua_passdb_module, 1);
module->set = set;
- if (!array_is_empty(&set->auth_lua_config))
- module->arguments = array_get(&set->auth_lua_config, &count);
-
if (dlua_script_create_file(module->set->auth_lua_file, &module->script,
event, error_r) < 0)
i_fatal("passdb-lua: failed to load '%s': %s",
const struct auth_lua_script_parameters params = {
.script = module->script,
.stype = AUTH_LUA_SCRIPT_TYPE_PASSDB,
- .arguments = module->arguments,
- .passdb_module = &module->module,
+ .passdb_module = module,
.pool = pool,
};
if (auth_lua_script_init(¶ms, error_r) < 0)
const struct auth_lua_script_parameters params = {
.script = module->script,
.stype = AUTH_LUA_SCRIPT_TYPE_PASSDB,
- .arguments = module->arguments,
+ .passdb_module = module,
};
if (auth_lua_script_auth_db_init(¶ms, &error) < 0)
i_fatal("passdb-lua: auth_passdb_init() failed: %s", error);
#include "db-lua.h"
-struct dlua_userdb_module {
- struct userdb_module module;
- struct dlua_script *script;
- const struct auth_lua_settings *set;
- const char *const *arguments;
-};
-
static void userdb_lua_lookup(struct auth_request *auth_request,
userdb_callback_t *callback)
{
userdb_lua_preinit(pool_t pool, struct event *event,
struct userdb_module **module_r, const char **error_r)
{
- unsigned int count;
const struct auth_lua_settings *set;
struct dlua_userdb_module *module;
module = p_new(pool, struct dlua_userdb_module, 1);
module->set = set;
- if (!array_is_empty(&set->auth_lua_config))
- module->arguments = array_get(&set->auth_lua_config, &count);
-
if (dlua_script_create_file(module->set->auth_lua_file, &module->script,
event, error_r) < 0)
i_fatal("userdb-lua: failed to load '%s': %s",
const struct auth_lua_script_parameters params = {
.script = module->script,
.stype = AUTH_LUA_SCRIPT_TYPE_USERDB,
- .userdb_module = &module->module,
- .arguments = module->arguments,
+ .userdb_module = module,
.pool = pool,
};
if (auth_lua_script_init(¶ms, error_r) < 0)
const struct auth_lua_script_parameters params = {
.script = module->script,
.stype = AUTH_LUA_SCRIPT_TYPE_USERDB,
- .arguments = module->arguments,
+ .userdb_module = module,
};
if (auth_lua_script_auth_db_init(¶ms, &error) < 0)
i_fatal("userdb-lua: auth_userdb_init() failed: %s", error);