]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Get named list filters' settings using settings_filter_names
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 22 Jan 2025 11:40:01 +0000 (13:40 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:16 +0000 (12:34 +0200)
15 files changed:
src/auth/auth-request.c
src/auth/auth.c
src/lib-dict-backend/dict-sql-settings.c
src/lib-dict/dict.c
src/lib-sql/driver-sqlpool.c
src/lib-storage/index/shared/shared-storage.c
src/lib-storage/mail-namespace.c
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage.c
src/login-common/client-common.c
src/master/master-settings.c
src/plugins/fts/fts-storage.c
src/plugins/quota/quota.c
src/stats/stats-metrics.c

index 8414065b79be7338feb35b843891520137cabe80..e9adb5bee8756abfb0fe8a437096327aa96ad1fa 100644 (file)
@@ -684,6 +684,8 @@ void auth_request_passdb_lookup_begin(struct auth_request *request)
        event_add_str(event, "passdb_driver", passdb_driver);
        settings_event_add_filter_name(event,
                t_strconcat("passdb_", passdb_driver, NULL));
+       settings_event_add_list_filter_name(event, "passdb",
+                                           request->passdb->name);
        event_set_log_prefix_callback(event, FALSE,
                auth_request_get_log_prefix_db, request);
 
@@ -739,6 +741,8 @@ void auth_request_userdb_lookup_begin(struct auth_request *request)
        event_add_str(event, "userdb_driver", userdb_driver);
        settings_event_add_filter_name(event,
                t_strconcat("userdb_", userdb_driver, NULL));
+       settings_event_add_list_filter_name(event, "userdb",
+                                           request->userdb->name);
        event_set_log_prefix_callback(event, FALSE,
                auth_request_get_log_prefix_db, request);
 
index ac885eba07a1e66df1b72951c1360b6cab18e191..03a839c804bca698d5b1353fa5dda5a902085ce0 100644 (file)
@@ -86,6 +86,7 @@ auth_passdb_preinit(struct auth *auth, const struct auth_passdb_settings *_set,
        event_add_str(event, "passdb", _set->name);
        settings_event_add_filter_name(event,
                t_strconcat("passdb_", _set->driver, NULL));
+       settings_event_add_list_filter_name(event, "passdb", _set->name);
        set = settings_get_or_fatal(event, &auth_passdb_setting_parser_info);
 
        auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
@@ -156,6 +157,7 @@ auth_userdb_preinit(struct auth *auth, const struct auth_userdb_settings *_set)
        event_add_str(event, "userdb", _set->name);
        settings_event_add_filter_name(event,
                t_strconcat("userdb_", _set->driver, NULL));
+       settings_event_add_list_filter_name(event, "userdb", _set->name);
        if (_set == &userdb_dummy_set) {
                /* If this is the dummy set do not try to lookup settings. */
                set = _set;
index faa3b569c89908667bc8e1ef0bf1633ebb896c7b..eda6d73fb60d02e72856090be942ac53f6f1eee8 100644 (file)
@@ -307,6 +307,8 @@ int dict_sql_settings_get(struct event *event,
                array_foreach_elem(&maps_set->maps, name) {
                        struct event *map_event = event_create(event);
                        event_add_str(map_event, "dict_map", name);
+                       settings_event_add_list_filter_name(map_event,
+                                                           "dict_map", name);
                        if (dict_sql_map_settings_get(map_event, set, &error) < 0) {
                                *error_r = t_strdup_printf(
                                        "Failed to get dict_map %s: %s", name, error);
index 503dbc243f6808bd008fb3eb45c7e0a7ff0e2ead..1ad60cf831ecfd95f9da0845461455e8f138afcb 100644 (file)
@@ -171,6 +171,7 @@ int dict_init_filter_auto(struct event *event, const char *dict_name,
        /* Get settings for the first dict list filter */
        event = event_create(event);
        event_add_str(event, "dict", dict_name);
+       settings_event_add_list_filter_name(event, "dict", dict_name);
        if (settings_get(event, &dict_setting_parser_info, 0,
                         &dict_set, error_r) < 0) {
                event_unref(&event);
index 3027b1532c4595bf1f636740291e377e665cde69..eaa13a26b3ae9bc9385e34552525924480a81ae4 100644 (file)
@@ -4,6 +4,7 @@
 #include "array.h"
 #include "llist.h"
 #include "ioloop.h"
+#include "settings.h"
 #include "sql-api-private.h"
 
 #include <time.h>
@@ -286,6 +287,7 @@ sqlpool_add_connection(struct sqlpool_db *db, struct sqlpool_host *host,
        struct event *event = event_create(db->api.event);
        event_set_ptr(event, SQLPOOL_EVENT_PTR, "yes");
        event_add_str(event, db->filter_name, host->hostname);
+       settings_event_add_list_filter_name(event, db->filter_name, host->hostname);
        ret = db->driver->v.init(event, &conndb, &error);
        event_unref(&event);
        if (ret < 0)
index 33eaf245b1e1d467cac5dfb6c5b497b8f767bce0..0e6b33f17a85fbbb5177818fc8ff2697c01e4218 100644 (file)
@@ -372,6 +372,8 @@ shared_mail_user_init(struct mail_storage *_storage,
        struct event *set_event = event_create(user->event);
        event_add_str(set_event, SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
        event_set_ptr(set_event, SETTINGS_EVENT_VAR_EXPAND_PARAMS, params);
+       settings_event_add_list_filter_name(set_event,
+               SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
 
        /* Expanding mail_path may verify whether the user exists by
           trying to access %{owner_home}. This sets
index 3ea987411f2ab6011ad0dab672d3db2427701f78..848d926ec3b0244ad2426ed72f94333c6f0f7dac 100644 (file)
@@ -474,6 +474,8 @@ int mail_namespaces_init(struct mail_user *user, const char **error_r)
 
                struct event *set_event = event_create(user->event);
                event_add_str(set_event, SETTINGS_EVENT_NAMESPACE_NAME, ns_names[i]);
+               settings_event_add_list_filter_name(set_event,
+                       SETTINGS_EVENT_NAMESPACE_NAME, ns_names[i]);
 
                if (mail_namespaces_init_add(user, set_event, ns_set,
                                             ns_p, error_r) < 0) {
index 779d9a36958ca167070b1c456b419a1331fc1806..df662e08d1fc9d4f728b53f839e5d274106cf029 100644 (file)
@@ -643,6 +643,8 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
                                        session_id_suffix);
        event_add_str(user->event, "session", mail_user->session_id);
        event_add_str(user->event, "service", service_name);
+       settings_event_add_list_filter_name(user->event, "service",
+                                           service_name);
 
        mail_user->userdb_fields = user->input.userdb_fields == NULL ? NULL :
                p_strarray_dup(mail_user->pool, user->input.userdb_fields);
index e7743c47f89b8ed3f0a7fd18853bea83b3cb23cb..7e2f9ba87c32b66898e578e84c3973f2e56f4804 100644 (file)
@@ -789,6 +789,8 @@ namespace_parse_mailboxes(struct event *event, pool_t pool,
                     array_count(&ns->mailboxes));
        event = event_create(event);
        event_add_str(event, SETTINGS_EVENT_NAMESPACE_NAME, ns->name);
+       settings_event_add_list_filter_name(event,
+               SETTINGS_EVENT_NAMESPACE_NAME, ns->name);
        array_foreach_elem(&ns->mailboxes, box_name) {
                if (settings_get_filter(event,
                                        SETTINGS_EVENT_MAILBOX_NAME_WITHOUT_PREFIX,
index ace1a3e75ec1a1cb1089b6d0121be39846a61680..fa2c7ae170e1dc12dd2c996a13df74866fe2837c 100644 (file)
@@ -337,8 +337,11 @@ mail_storage_create_list(struct mail_namespace *ns,
        /* Set namespace, but don't overwrite if it already is set.
           Shared storage uses the same shared namespace here also for the
           user's root prefix="" namespace. */
-       if (event_find_field_recursive(set_event, SETTINGS_EVENT_NAMESPACE_NAME) == NULL)
+       if (event_find_field_recursive(set_event, SETTINGS_EVENT_NAMESPACE_NAME) == NULL) {
                event_add_str(set_event, SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
+               settings_event_add_list_filter_name(set_event,
+                       SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
+       }
 
        if ((flags & MAIL_STORAGE_FLAG_SHARED_DYNAMIC) != 0) {
                mail_storage_create_ns_instance(ns, set_event);
@@ -403,6 +406,8 @@ mail_storage_create_list(struct mail_namespace *ns,
           support multiple storages. */
        struct event *event = event_create(parent_set_event);
        event_add_str(event, SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
+       settings_event_add_list_filter_name(event,
+               SETTINGS_EVENT_NAMESPACE_NAME, ns->set->name);
        int ret = mailbox_list_create(event, ns, mail_set, list_flags,
                                      &list, error_r);
        if (ret < 0) {
@@ -3492,6 +3497,8 @@ mail_storage_mailbox_create_event(struct event *parent,
        event_add_str(event, SETTINGS_EVENT_MAILBOX_NAME_WITHOUT_PREFIX,
                      mailbox_get_name_without_prefix(list->ns, vname));
        event_add_str(event, SETTINGS_EVENT_NAMESPACE_NAME, list->ns->set->name);
+       settings_event_add_list_filter_name(event,
+               SETTINGS_EVENT_NAMESPACE_NAME, list->ns->set->name);
 
        event_drop_parent_log_prefixes(event, 1);
        event_set_append_log_prefix(event, t_strdup_printf(
index 9a5a2405e7f47dcd313bb5efa1050e6b2bcf241d..715d1102371ac22688348c9a624f942983757f27 100644 (file)
@@ -269,6 +269,8 @@ int client_alloc(int fd, const struct master_service_connection *conn,
        event_add_int(client->event, "remote_port", conn->remote_port);
        event_add_str(client->event, "protocol", login_binary->protocol);
        event_add_str(client->event, "service", master_service_get_name(master_service));
+       settings_event_add_list_filter_name(client->event, "service",
+               master_service_get_name(master_service));
 
        /* Get settings before using log callback */
        event_set_ptr(client->event, SETTINGS_EVENT_VAR_EXPAND_CALLBACK,
index 1f506359f79bbab1a02804860c45e90694e27d9e..25820673363d5fd71081a57ff41b43bf50626b73 100644 (file)
@@ -436,7 +436,7 @@ static bool service_is_enabled(const struct master_settings *set,
 static bool
 master_service_get_file_listeners(struct service_settings *service_set,
                                  pool_t pool, struct event *event,
-                                 const char *set_name,
+                                 const char *set_name, const char *service_name,
                                  const struct setting_parser_info *info,
                                  const ARRAY_TYPE(const_string) *listener_names,
                                  ARRAY_TYPE(file_listener_settings) *parsed_listeners,
@@ -451,6 +451,7 @@ master_service_get_file_listeners(struct service_settings *service_set,
 
        event = event_create(event);
        event_add_str(event, "service", service_set->name);
+       settings_event_add_list_filter_name(event, "service", service_name);
 
        p_array_init(parsed_listeners, pool, array_count(listener_names));
        array_foreach_elem(listener_names, name) {
@@ -474,6 +475,7 @@ master_service_get_file_listeners(struct service_settings *service_set,
 
 static bool
 master_service_get_inet_listeners(struct service_settings *service_set,
+                                 const char *service_name,
                                  pool_t pool, struct event *event,
                                  const char **error_r)
 {
@@ -487,6 +489,7 @@ master_service_get_inet_listeners(struct service_settings *service_set,
 
        event = event_create(event);
        event_add_str(event, "service", service_set->name);
+       settings_event_add_list_filter_name(event, "service", service_name);
 
        p_array_init(&service_set->parsed_inet_listeners, pool,
                     array_count(&service_set->inet_listeners));
@@ -502,7 +505,10 @@ master_service_get_inet_listeners(struct service_settings *service_set,
                }
 
                event_add_str(event, "inet_listener", name);
-               if (settings_get(event, &master_setting_parser_info,
+               struct event *event2 = event_create(event);
+               settings_event_add_list_filter_name(event2, "inet_listener",
+                                                   name);
+               if (settings_get(event2, &master_setting_parser_info,
                                 SETTINGS_GET_FLAG_NO_CHECK,
                                 &master_set, &error) < 0) {
                        *error_r = t_strdup_printf(
@@ -510,8 +516,10 @@ master_service_get_inet_listeners(struct service_settings *service_set,
                                name, error);
                        ret = FALSE;
                        settings_free(listener_set);
+                       event_unref(&event2);
                        break;
                }
+               event_unref(&event2);
 
                struct inet_listener_settings *listener_set_dup =
                        p_memdup(pool, listener_set, sizeof(*listener_set));
@@ -560,20 +568,23 @@ master_settings_get_services(struct master_settings *set, pool_t pool,
                settings_free(service_set);
 
                if (!master_service_get_file_listeners(
-                               service_set_dup, pool, event, "unix_listener",
+                               service_set_dup, pool, event,
+                               "unix_listener", service_name,
                                &unix_listener_setting_parser_info,
                                &service_set_dup->unix_listeners,
                                &service_set_dup->parsed_unix_listeners,
                                error_r))
                        return FALSE;
                if (!master_service_get_file_listeners(
-                               service_set_dup, pool, event, "fifo_listener",
+                               service_set_dup, pool, event,
+                               "fifo_listener", service_name,
                                &fifo_listener_setting_parser_info,
                                &service_set_dup->fifo_listeners,
                                &service_set_dup->parsed_fifo_listeners,
                                error_r))
                        return FALSE;
-               if (!master_service_get_inet_listeners(service_set_dup, pool,
+               if (!master_service_get_inet_listeners(service_set_dup,
+                                                      service_name, pool,
                                                       event, error_r))
                        return FALSE;
        }
index e351cf006022fb23580b9295ab67427bc89d7258..d036c8d81655dd6380dde5dd69584e4e6aa0460b 100644 (file)
@@ -896,6 +896,7 @@ fts_init_namespace(struct fts_mailbox_list *flist, struct mail_namespace *ns)
        /* Get settings for the first fts list filter */
        struct event *event = event_create(ns->list->event);
        event_add_str(event, "fts", fts_name_first);
+       settings_event_add_list_filter_name(event, "fts", fts_name_first);
        settings_free(set);
        if (settings_get(event, &fts_setting_parser_info, 0,
                         &set, &error) < 0) {
index a60560d837afd3cdfe5ac58cf8aca2ed4393d42b..ab1177f48c5c61d20cb8bc868fb4d3d5f6791deb 100644 (file)
@@ -153,6 +153,8 @@ quota_root_settings_get(struct quota_root *root, struct event *set_event,
        else {
                event = event_create(set_event);
                event_add_str(event, "quota", root->set->quota_name);
+               settings_event_add_list_filter_name(event, "quota",
+                                                   root->set->quota_name);
        }
        int ret = settings_get(event, &quota_root_setting_parser_info, 0,
                               set_r, error_r);
@@ -223,6 +225,8 @@ quota_root_init(struct quota *quota, struct event *set_event, const char *root_n
                t_strdup_printf("quota-%s: ", root->backend.name));
        event_add_str(root->backend.event, "quota", root_name);
        settings_event_add_filter_name(root->backend.event, backend_filter);
+       settings_event_add_list_filter_name(root->backend.event, "quota",
+                                           root_name);
        event_drop_parent_log_prefixes(root->backend.event, 1);
 
        /* Lookup settings again with quota_backend filter name */
index 4e0e46ae0e7fb83215256d9ad2771fd294a3f138..a22e202eb0c9f1a0800e2ddca3f01282b7bbe918 100644 (file)
@@ -89,6 +89,8 @@ static int stats_exporters_add_filter(struct stats_metrics *metrics,
        } else {
                struct event *event = event_create(metrics->event);
                event_add_str(event, "event_exporter", filter_name);
+               settings_event_add_list_filter_name(event, "event_exporter",
+                                                   filter_name);
                ret = stats_exporters_add_set(metrics, event, set, error_r);
                event_unref(&event);
        }
@@ -301,9 +303,14 @@ stats_metrics_get_group_by(struct event *event,
                        struct event *group_event = event_create(event);
                        event_add_str(group_event, "metric_group_by",
                                      group_by_name);
+                       settings_event_add_list_filter_name(group_event,
+                               "metric_group_by", group_by_name);
                        struct event *method_event = event_create(group_event);
                        event_add_str(group_event, "metric_group_by_method",
                                      array_idx_elem(&group_by_set->method, 0));
+                       settings_event_add_list_filter_name(method_event,
+                               "metric_group_by_method",
+                               array_idx_elem(&group_by_set->method, 0));
                        ret = stats_metrics_get_group_by_method(method_event, set->pool,
                                                                group_by, error_r);
                        event_unref(&method_event);
@@ -338,6 +345,8 @@ static int stats_metrics_add_filter(struct stats_metrics *metrics,
                ARRAY_TYPE(stats_metric_settings_group_by) group_by;
                struct event *event = event_create(metrics->event);
                event_add_str(event, "metric", filter_name);
+               settings_event_add_list_filter_name(event, "metric",
+                                                   filter_name);
                ret = stats_metrics_get_group_by(event, set, &group_by, error_r);
                if (ret == 0)
                        ret = stats_metrics_add_set(metrics, set, &group_by, error_r);