]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: userdb-static - Convert args to settings
authorMarkus Valentin <markus.valentin@open-xchange.com>
Fri, 16 Feb 2024 12:24:22 +0000 (13:24 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
This adds the userdb_static named filter and changes userdb args
based initialization to use actual settings:
* allow_all_users -> userdb_static_allow_all_users

src/auth/userdb-static.c

index fe0dd2445003639cbb8e9423d18b07922ce88ec9..1f6cd6467d3584f4c51d0bf78d583de0d7967bac 100644 (file)
@@ -7,6 +7,7 @@
 #include "var-expand.h"
 #include "userdb.h"
 #include "userdb-template.h"
+#include "settings.h"
 
 
 struct static_context {
@@ -16,28 +17,10 @@ struct static_context {
 
 struct static_userdb_module {
        struct userdb_module module;
-       struct userdb_template *tmpl;
 
        bool allow_all_users:1;
 };
 
-static void static_lookup_real(struct auth_request *auth_request,
-                              userdb_callback_t *callback)
-{
-       struct userdb_module *_module = auth_request->userdb->userdb;
-       struct static_userdb_module *module =
-               (struct static_userdb_module *)_module;
-       const char *error;
-
-       if (userdb_template_export(module->tmpl, auth_request, &error) < 0) {
-               e_error(authdb_event(auth_request),
-                       "Failed to expand template: %s", error);
-               callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
-               return;
-       }
-       callback(USERDB_RESULT_OK, auth_request);
-}
-
 static void
 static_credentials_callback(enum passdb_result result,
                            const unsigned char *credentials ATTR_UNUSED,
@@ -52,9 +35,15 @@ static_credentials_callback(enum passdb_result result,
        auth_request->context = ctx->old_context;
        auth_request_set_state(auth_request, AUTH_REQUEST_STATE_USERDB);
 
+       if (auth_request_set_userdb_fields(auth_request, NULL) < 0) {
+               ctx->callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
+               i_free(ctx);
+               return;
+       }
+
        switch (result) {
        case PASSDB_RESULT_OK:
-               static_lookup_real(auth_request, ctx->callback);
+               ctx->callback(USERDB_RESULT_OK, auth_request);
                break;
        case PASSDB_RESULT_USER_UNKNOWN:
        case PASSDB_RESULT_USER_DISABLED:
@@ -110,29 +99,37 @@ static void static_lookup(struct auth_request *auth_request,
                                uchar_empty_ptr, 0, auth_request);
                }
        } else {
-               static_lookup_real(auth_request, callback);
+               if (auth_request_set_userdb_fields(auth_request, NULL) < 0)
+                       callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
+               else
+                       callback(USERDB_RESULT_OK, auth_request);
        }
 }
 
-static struct userdb_module *
-static_preinit(pool_t pool, const char *args)
+static int static_preinit(pool_t pool, struct event *event,
+                         struct userdb_module **module_r, const char **error_r)
+
 {
+       struct auth_static_settings *set;
        struct static_userdb_module *module;
-       const char *value;
+
+       if (settings_get(event, &auth_static_setting_parser_info, 0,
+                        &set, error_r) < 0)
+               return -1;
 
        module = p_new(pool, struct static_userdb_module, 1);
-       module->tmpl = userdb_template_build(pool, "static", args);
+       module->allow_all_users = set->userdb_static_allow_all_users;
 
-       if (userdb_template_remove(module->tmpl, "allow_all_users", &value)) {
-               module->allow_all_users = value == NULL ||
-                       strcasecmp(value, "yes") == 0;
-       }
-       return &module->module;
+       settings_free(set);
+
+       *module_r = &module->module;
+       return 0;
 }
 
 struct userdb_module_interface userdb_static = {
        .name = "static",
+       .fields_supported = TRUE,
 
-       .preinit_legacy = static_preinit,
+       .preinit = static_preinit,
        .lookup = static_lookup,
 };