From: Markus Valentin Date: Mon, 11 Mar 2024 08:13:24 +0000 (+0100) Subject: auth: auth_passdb_preinit() - Lookup settings again after SETTINGS_EVENT_FILTER_NAME... X-Git-Tag: 2.4.1~926 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=416c41a35869bbd1f879ce689364e7088a0ae108;p=thirdparty%2Fdovecot%2Fcore.git auth: auth_passdb_preinit() - Lookup settings again after SETTINGS_EVENT_FILTER_NAME is set This makes sure defaults which are set specifically for this passdb driver are applied correctly. --- diff --git a/src/auth/auth-settings.h b/src/auth/auth-settings.h index cbaed35460..b848854511 100644 --- a/src/auth/auth-settings.h +++ b/src/auth/auth-settings.h @@ -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; diff --git a/src/auth/auth.c b/src/auth/auth.c index b779189be5..9df0a7e04e 100644 --- a/src/auth/auth.c +++ b/src/auth/auth.c @@ -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); }