]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: auth_passdb_preinit() - Lookup settings again after SETTINGS_EVENT_FILTER_NAME...
authorMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 11 Mar 2024 08:13:24 +0000 (09:13 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
This makes sure defaults which are set specifically for this passdb
driver are applied correctly.

src/auth/auth-settings.h
src/auth/auth.c

index cbaed3546091a5e475c35ea33260f4e87f5d930a..b8488545115af2b19cb94f8053f438b57df57266 100644 (file)
@@ -126,6 +126,7 @@ struct auth_settings {
 };
 
 extern const struct setting_parser_info auth_setting_parser_info;
+extern const struct setting_parser_info auth_passdb_setting_parser_info;
 extern const struct setting_parser_info auth_passdb_pre_setting_parser_info;
 extern const struct setting_parser_info auth_passdb_post_setting_parser_info;
 extern const struct setting_parser_info auth_userdb_setting_parser_info;
index b779189be5caa0cceb75a56100bb2e056c182134..9df0a7e04e71c37fd92a244fedaa615d4dbffc75 100644 (file)
@@ -74,18 +74,20 @@ static enum auth_db_rule auth_db_rule_parse(const char *str)
 }
 
 static void
-auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set,
+auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *_set,
                    struct auth_passdb **passdbs)
 {
        struct auth_passdb *auth_passdb, **dest;
+       const struct auth_passdb_settings *set;
 
        /* Lookup passdb-specific auth_settings */
        struct event *event = event_create(auth_event);
        event_add_str(event, "protocol", auth->protocol);
-       event_add_str(event, "passdb", set->name);
+       event_add_str(event, "passdb", _set->name);
        event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME,
                      p_strconcat(event_get_pool(event), "passdb_",
-                                 set->driver, NULL));
+                                 _set->driver, NULL));
+       set = settings_get_or_fatal(event, &auth_passdb_setting_parser_info);
 
        auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
        auth_passdb->auth_set =
@@ -142,6 +144,7 @@ auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set,
 
 static void auth_passdb_deinit(struct auth_passdb *passdb)
 {
+       settings_free(passdb->set);
        settings_free(passdb->auth_set);
        passdb_deinit(passdb->passdb);
 }