From: Markus Valentin Date: Thu, 29 Feb 2024 16:15:31 +0000 (+0100) Subject: auth: [user|pass]db-lua: Convert module arguments to const_string array X-Git-Tag: 2.4.0~654 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6da7c368975fbd77bb0f8de2b886e4ee72295ef;p=thirdparty%2Fdovecot%2Fcore.git auth: [user|pass]db-lua: Convert module arguments to const_string array --- diff --git a/src/auth/db-lua.c b/src/auth/db-lua.c index a89037309e..be9a4ce115 100644 --- a/src/auth/db-lua.c +++ b/src/auth/db-lua.c @@ -527,14 +527,14 @@ auth_lua_script_get_default_cache_key(const struct auth_lua_script_parameters *p 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"); @@ -554,7 +554,9 @@ int auth_lua_script_auth_db_init(const struct auth_lua_script_parameters *params 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; @@ -567,19 +569,29 @@ int auth_lua_script_auth_db_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) { + + 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; diff --git a/src/auth/db-lua.h b/src/auth/db-lua.h index 71c9534e70..cda1df1e7a 100644 --- a/src/auth/db-lua.h +++ b/src/auth/db-lua.h @@ -15,6 +15,19 @@ struct auth_lua_settings { 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, @@ -24,9 +37,8 @@ struct auth_lua_script_parameters { 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 diff --git a/src/auth/passdb-lua.c b/src/auth/passdb-lua.c index 9cdc81a7bf..a8eb681315 100644 --- a/src/auth/passdb-lua.c +++ b/src/auth/passdb-lua.c @@ -9,14 +9,6 @@ #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) @@ -116,7 +108,6 @@ static int 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; @@ -129,9 +120,6 @@ passdb_lua_preinit(pool_t pool, struct event *event, 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", @@ -140,8 +128,7 @@ passdb_lua_preinit(pool_t pool, struct event *event, 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) @@ -163,7 +150,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, - .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); diff --git a/src/auth/userdb-lua.c b/src/auth/userdb-lua.c index b5a5a159bb..28c8f3e923 100644 --- a/src/auth/userdb-lua.c +++ b/src/auth/userdb-lua.c @@ -9,13 +9,6 @@ #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) { @@ -40,7 +33,6 @@ static int 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; @@ -53,9 +45,6 @@ userdb_lua_preinit(pool_t pool, struct event *event, 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", @@ -64,8 +53,7 @@ userdb_lua_preinit(pool_t pool, struct event *event, 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) @@ -87,7 +75,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, - .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);