]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: [user|pass]db-lua: Convert module arguments to const_string array
authorMarkus Valentin <markus.valentin@open-xchange.com>
Thu, 29 Feb 2024 16:15:31 +0000 (17:15 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
src/auth/db-lua.c
src/auth/db-lua.h
src/auth/passdb-lua.c
src/auth/userdb-lua.c

index a89037309ef8f864e9da849750c99400b81c497a..be9a4ce11523e515f207ca40f31fbf2ea8769cbf 100644 (file)
@@ -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;
index 71c9534e7096201a621ef685c148aebc871e977b..cda1df1e7a06e3d7552dba1ec8cf96021947d493 100644 (file)
@@ -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
index 9cdc81a7bf871d12ca39b6ecd9e57e13d2900441..a8eb6813152018aeeb4c4cf29b9881fdaa15bb44 100644 (file)
@@ -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(&params, 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(&params, &error) < 0)
                i_fatal("passdb-lua: auth_passdb_init() failed: %s", error);
index b5a5a159bb33db9ae1fcddf2ef073ac05fae1f82..28c8f3e9239d7a3c03bd471a8c3ff69a92cf1034 100644 (file)
@@ -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(&params, 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(&params, &error) < 0)
                i_fatal("userdb-lua: auth_userdb_init() failed: %s", error);