From: Timo Sirainen Date: Wed, 22 Jan 2025 11:40:01 +0000 (+0200) Subject: global: Get named list filters' settings using settings_filter_names X-Git-Tag: 2.4.1~261 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4570db8cc8f2769dfc25ecbaff211ecbb0b9d566;p=thirdparty%2Fdovecot%2Fcore.git global: Get named list filters' settings using settings_filter_names --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 8414065b79..e9adb5bee8 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -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); diff --git a/src/auth/auth.c b/src/auth/auth.c index ac885eba07..03a839c804 100644 --- a/src/auth/auth.c +++ b/src/auth/auth.c @@ -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; diff --git a/src/lib-dict-backend/dict-sql-settings.c b/src/lib-dict-backend/dict-sql-settings.c index faa3b569c8..eda6d73fb6 100644 --- a/src/lib-dict-backend/dict-sql-settings.c +++ b/src/lib-dict-backend/dict-sql-settings.c @@ -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); diff --git a/src/lib-dict/dict.c b/src/lib-dict/dict.c index 503dbc243f..1ad60cf831 100644 --- a/src/lib-dict/dict.c +++ b/src/lib-dict/dict.c @@ -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); diff --git a/src/lib-sql/driver-sqlpool.c b/src/lib-sql/driver-sqlpool.c index 3027b1532c..eaa13a26b3 100644 --- a/src/lib-sql/driver-sqlpool.c +++ b/src/lib-sql/driver-sqlpool.c @@ -4,6 +4,7 @@ #include "array.h" #include "llist.h" #include "ioloop.h" +#include "settings.h" #include "sql-api-private.h" #include @@ -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) diff --git a/src/lib-storage/index/shared/shared-storage.c b/src/lib-storage/index/shared/shared-storage.c index 33eaf245b1..0e6b33f17a 100644 --- a/src/lib-storage/index/shared/shared-storage.c +++ b/src/lib-storage/index/shared/shared-storage.c @@ -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 diff --git a/src/lib-storage/mail-namespace.c b/src/lib-storage/mail-namespace.c index 3ea987411f..848d926ec3 100644 --- a/src/lib-storage/mail-namespace.c +++ b/src/lib-storage/mail-namespace.c @@ -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) { diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 779d9a3695..df662e08d1 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -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); diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index e7743c47f8..7e2f9ba87c 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -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, diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index ace1a3e75e..fa2c7ae170 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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( diff --git a/src/login-common/client-common.c b/src/login-common/client-common.c index 9a5a2405e7..715d110237 100644 --- a/src/login-common/client-common.c +++ b/src/login-common/client-common.c @@ -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, diff --git a/src/master/master-settings.c b/src/master/master-settings.c index 1f506359f7..2582067336 100644 --- a/src/master/master-settings.c +++ b/src/master/master-settings.c @@ -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; } diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index e351cf0060..d036c8d816 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -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) { diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index a60560d837..ab1177f48c 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -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, "a_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 */ diff --git a/src/stats/stats-metrics.c b/src/stats/stats-metrics.c index 4e0e46ae0e..a22e202eb0 100644 --- a/src/stats/stats-metrics.c +++ b/src/stats/stats-metrics.c @@ -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);