From: Timo Sirainen Date: Fri, 13 Jan 2023 00:13:05 +0000 (+0200) Subject: lib-storage: Replace settings_parser_get_root_set() with master_service_settings_pars... X-Git-Tag: 2.4.0~2288 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b19f65dc1112ee7dd15504e2e9e8f35a3dd58fdc;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Replace settings_parser_get_root_set() with master_service_settings_parser_get() --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.c b/src/lib-storage/index/dbox-multi/mdbox-settings.c index 5948ce8201..094b163a9d 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.c +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.c @@ -31,6 +31,7 @@ static const struct setting_parser_info mdbox_setting_parser_info = { .defaults = &mdbox_default_settings, .struct_size = sizeof(struct mdbox_settings), + .pool_offset1 = 1 + offsetof(struct mdbox_settings, pool), .parent = &mail_user_setting_parser_info }; diff --git a/src/lib-storage/index/dbox-multi/mdbox-settings.h b/src/lib-storage/index/dbox-multi/mdbox-settings.h index 353da69618..ab3e67265c 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-settings.h +++ b/src/lib-storage/index/dbox-multi/mdbox-settings.h @@ -2,6 +2,7 @@ #define MDBOX_SETTINGS_H struct mdbox_settings { + pool_t pool; bool mdbox_preallocate_space; uoff_t mdbox_rotate_size; unsigned int mdbox_rotate_interval; diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index 1bbdd3b266..8bcdb00f4b 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -5,6 +5,7 @@ #include "ioloop.h" #include "mkdir-parents.h" #include "master-service.h" +#include "master-service-settings.h" #include "settings-parser.h" #include "mail-index-modseq.h" #include "mail-index-alloc-cache.h" @@ -46,8 +47,13 @@ int mdbox_storage_create(struct mail_storage *_storage, struct mdbox_storage *storage = MDBOX_STORAGE(_storage); const char *dir; - storage->set = settings_parser_get_root_set(_storage->user->set_parser, - mdbox_get_setting_parser_info()); + if (master_service_settings_parser_get(_storage->event, + _storage->user->set_parser, + mdbox_get_setting_parser_info(), + MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND, + &storage->set, error_r) < 0) + return -1; + storage->preallocate_space = storage->set->mdbox_preallocate_space; if (*ns->list->set.mailbox_dir_name == '\0') { @@ -90,6 +96,7 @@ void mdbox_storage_destroy(struct mail_storage *_storage) array_free(&storage->move_to_alt_map_uids); array_free(&storage->open_files); i_free(storage->corrupted_reason); + master_service_settings_free(storage->set); dbox_storage_destroy(_storage); } diff --git a/src/lib-storage/index/imapc/Makefile.am b/src/lib-storage/index/imapc/Makefile.am index 72ee102ff3..07c2da585f 100644 --- a/src/lib-storage/index/imapc/Makefile.am +++ b/src/lib-storage/index/imapc/Makefile.am @@ -4,6 +4,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-test \ -I$(top_srcdir)/src/lib-settings \ + -I$(top_srcdir)/src/lib-master \ -I$(top_srcdir)/src/lib-mail \ -I$(top_srcdir)/src/lib-imap \ -I$(top_srcdir)/src/lib-imap-client \ diff --git a/src/lib-storage/index/imapc/imapc-settings.c b/src/lib-storage/index/imapc/imapc-settings.c index cd3542e6a5..9a99020ae9 100644 --- a/src/lib-storage/index/imapc/imapc-settings.c +++ b/src/lib-storage/index/imapc/imapc-settings.c @@ -69,6 +69,7 @@ static const struct setting_parser_info imapc_setting_parser_info = { .defaults = &imapc_default_settings, .struct_size = sizeof(struct imapc_settings), + .pool_offset1 = 1 + offsetof(struct imapc_settings, pool), .parent = &mail_user_setting_parser_info, .check_func = imapc_settings_check diff --git a/src/lib-storage/index/imapc/imapc-settings.h b/src/lib-storage/index/imapc/imapc-settings.h index c9aa811d27..504c6205ca 100644 --- a/src/lib-storage/index/imapc/imapc-settings.h +++ b/src/lib-storage/index/imapc/imapc-settings.h @@ -30,6 +30,7 @@ enum imapc_features { * serialization of settings. */ struct imapc_settings { + pool_t pool; const char *imapc_host; in_port_t imapc_port; diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index c5573ccf32..489b921745 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -4,6 +4,7 @@ #include "ioloop.h" #include "str.h" #include "settings-parser.h" +#include "master-service-settings.h" #include "imap-arg.h" #include "imap-resp-code.h" #include "mailbox-tree.h" @@ -315,13 +316,17 @@ int imapc_storage_client_create(struct mail_namespace *ns, struct imapc_client_settings set; string_t *str; - imapc_set = settings_parser_get_root_set(ns->user->set_parser, - imapc_get_setting_parser_info()); + if (master_service_settings_parser_get(ns->user->event, + ns->user->set_parser, imapc_get_setting_parser_info(), + MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND, + &imapc_set, error_r) < 0) + return -1; i_zero(&set); set.host = imapc_set->imapc_host; if (*set.host == '\0') { *error_r = "missing imapc_host"; + master_service_settings_free(imapc_set); return -1; } set.port = imapc_set->imapc_port; @@ -335,6 +340,7 @@ int imapc_storage_client_create(struct mail_namespace *ns, set.password = imapc_set->imapc_password; if (*set.password == '\0') { *error_r = "missing imapc_password"; + master_service_settings_free(imapc_set); return -1; } set.sasl_mechanisms = imapc_set->imapc_sasl_mechanisms; @@ -405,6 +411,7 @@ void imapc_storage_client_unref(struct imapc_storage_client **_client) if (--client->refcount > 0) return; imapc_client_deinit(&client->client); + master_service_settings_free(client->set); array_foreach_modifiable(&client->untagged_callbacks, cb) i_free(cb->name); array_free(&client->untagged_callbacks); diff --git a/src/lib-storage/index/maildir/Makefile.am b/src/lib-storage/index/maildir/Makefile.am index 7acf2496d1..962cb1de28 100644 --- a/src/lib-storage/index/maildir/Makefile.am +++ b/src/lib-storage/index/maildir/Makefile.am @@ -3,6 +3,7 @@ noinst_LTLIBRARIES = libstorage_maildir.la AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-settings \ + -I$(top_srcdir)/src/lib-master \ -I$(top_srcdir)/src/lib-mail \ -I$(top_srcdir)/src/lib-imap \ -I$(top_srcdir)/src/lib-index \ diff --git a/src/lib-storage/index/maildir/maildir-settings.c b/src/lib-storage/index/maildir/maildir-settings.c index ac4bdcde5d..e203cd0e96 100644 --- a/src/lib-storage/index/maildir/maildir-settings.c +++ b/src/lib-storage/index/maildir/maildir-settings.c @@ -33,6 +33,7 @@ static const struct setting_parser_info maildir_setting_parser_info = { .defaults = &maildir_default_settings, .struct_size = sizeof(struct maildir_settings), + .pool_offset1 = 1 + offsetof(struct maildir_settings, pool), .parent = &mail_user_setting_parser_info }; diff --git a/src/lib-storage/index/maildir/maildir-settings.h b/src/lib-storage/index/maildir/maildir-settings.h index cfcb732e3d..055bcac6ef 100644 --- a/src/lib-storage/index/maildir/maildir-settings.h +++ b/src/lib-storage/index/maildir/maildir-settings.h @@ -2,6 +2,7 @@ #define MAILDIR_SETTINGS_H struct maildir_settings { + pool_t pool; bool maildir_copy_with_hardlinks; bool maildir_very_dirty_syncs; bool maildir_broken_filename_sizes; diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index 35698b0982..5f3feb901b 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -6,6 +6,7 @@ #include "eacces-error.h" #include "unlink-old-files.h" #include "settings-parser.h" +#include "master-service-settings.h" #include "mailbox-uidvalidity.h" #include "mailbox-list-private.h" #include "maildir-storage.h" @@ -56,8 +57,12 @@ maildir_storage_create(struct mail_storage *_storage, struct mail_namespace *ns, struct mailbox_list *list = ns->list; const char *dir; - storage->set = settings_parser_get_root_set(_storage->user->set_parser, - maildir_get_setting_parser_info()); + if (master_service_settings_parser_get(_storage->event, + _storage->user->set_parser, + maildir_get_setting_parser_info(), + MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND, + &storage->set, error_r) < 0) + return -1; storage->temp_prefix = p_strdup(_storage->pool, mailbox_list_get_temp_prefix(list)); @@ -77,6 +82,14 @@ maildir_storage_create(struct mail_storage *_storage, struct mail_namespace *ns, return 0; } +static void maildir_storage_destroy(struct mail_storage *_storage) +{ + struct maildir_storage *storage = MAILDIR_STORAGE(_storage); + + master_service_settings_free(storage->set); + index_storage_destroy(_storage); +} + static void maildir_storage_get_list_settings(const struct mail_namespace *ns, struct mailbox_list_settings *set) { @@ -728,7 +741,7 @@ struct mail_storage maildir_storage = { maildir_get_setting_parser_info, maildir_storage_alloc, maildir_storage_create, - index_storage_destroy, + maildir_storage_destroy, maildir_storage_add_list, maildir_storage_get_list_settings, maildir_storage_autodetect, diff --git a/src/lib-storage/index/mbox/mbox-settings.c b/src/lib-storage/index/mbox/mbox-settings.c index 3b4bbdd51b..df32768607 100644 --- a/src/lib-storage/index/mbox/mbox-settings.c +++ b/src/lib-storage/index/mbox/mbox-settings.c @@ -43,6 +43,7 @@ static const struct setting_parser_info mbox_setting_parser_info = { .defaults = &mbox_default_settings, .struct_size = sizeof(struct mbox_settings), + .pool_offset1 = 1 + offsetof(struct mbox_settings, pool), .parent = &mail_user_setting_parser_info }; diff --git a/src/lib-storage/index/mbox/mbox-settings.h b/src/lib-storage/index/mbox/mbox-settings.h index eb99d82046..1d48091ce7 100644 --- a/src/lib-storage/index/mbox/mbox-settings.h +++ b/src/lib-storage/index/mbox/mbox-settings.h @@ -2,6 +2,7 @@ #define MBOX_SETTINGS_H struct mbox_settings { + pool_t pool; const char *mbox_read_locks; const char *mbox_write_locks; unsigned int mbox_lock_timeout; diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 4413cf6292..444ace27fd 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -6,6 +6,7 @@ #include "ostream.h" #include "restrict-access.h" #include "master-service.h" +#include "master-service-settings.h" #include "settings-parser.h" #include "mailbox-list-private.h" #include "mbox-storage.h" @@ -184,8 +185,12 @@ mbox_storage_create(struct mail_storage *_storage, struct mail_namespace *ns, return -1; } - storage->set = settings_parser_get_root_set(_storage->user->set_parser, - mbox_get_setting_parser_info()); + if (master_service_settings_parser_get(_storage->event, + _storage->user->set_parser, + mbox_get_setting_parser_info(), + MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND, + &storage->set, error_r) < 0) + return -1; if (mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_INDEX, &dir)) { _storage->temp_path_prefix = p_strconcat(_storage->pool, dir, @@ -201,6 +206,14 @@ mbox_storage_create(struct mail_storage *_storage, struct mail_namespace *ns, return 0; } +static void mbox_storage_destroy(struct mail_storage *_storage) +{ + struct mbox_storage *storage = MBOX_STORAGE(_storage); + + master_service_settings_free(storage->set); + index_storage_destroy(_storage); +} + static void mbox_storage_get_list_settings(const struct mail_namespace *ns, struct mailbox_list_settings *set) { @@ -826,7 +839,7 @@ struct mail_storage mbox_storage = { mbox_get_setting_parser_info, mbox_storage_alloc, mbox_storage_create, - index_storage_destroy, + mbox_storage_destroy, mbox_storage_add_list, mbox_storage_get_list_settings, mbox_storage_autodetect, diff --git a/src/lib-storage/index/pop3c/Makefile.am b/src/lib-storage/index/pop3c/Makefile.am index 868dc1eb26..093176ebeb 100644 --- a/src/lib-storage/index/pop3c/Makefile.am +++ b/src/lib-storage/index/pop3c/Makefile.am @@ -3,6 +3,7 @@ noinst_LTLIBRARIES = libstorage_pop3c.la AM_CPPFLAGS = \ -I$(top_srcdir)/src/lib \ -I$(top_srcdir)/src/lib-settings \ + -I$(top_srcdir)/src/lib-master \ -I$(top_srcdir)/src/lib-dns \ -I$(top_srcdir)/src/lib-ssl-iostream \ -I$(top_srcdir)/src/lib-mail \ diff --git a/src/lib-storage/index/pop3c/pop3c-settings.c b/src/lib-storage/index/pop3c/pop3c-settings.c index 8a2c189555..4e1bd27f41 100644 --- a/src/lib-storage/index/pop3c/pop3c-settings.c +++ b/src/lib-storage/index/pop3c/pop3c-settings.c @@ -102,6 +102,7 @@ static const struct setting_parser_info pop3c_setting_parser_info = { .defaults = &pop3c_default_settings, .struct_size = sizeof(struct pop3c_settings), + .pool_offset1 = 1 + offsetof(struct pop3c_settings, pool), .parent = &mail_user_setting_parser_info, .check_func = pop3c_settings_check diff --git a/src/lib-storage/index/pop3c/pop3c-settings.h b/src/lib-storage/index/pop3c/pop3c-settings.h index bf44e24477..fb635ba04d 100644 --- a/src/lib-storage/index/pop3c/pop3c-settings.h +++ b/src/lib-storage/index/pop3c/pop3c-settings.h @@ -11,6 +11,7 @@ enum pop3c_features { struct pop3c_settings { + pool_t pool; const char *pop3c_host; in_port_t pop3c_port; diff --git a/src/lib-storage/index/pop3c/pop3c-storage.c b/src/lib-storage/index/pop3c/pop3c-storage.c index e5ce89696b..2a3822616b 100644 --- a/src/lib-storage/index/pop3c/pop3c-storage.c +++ b/src/lib-storage/index/pop3c/pop3c-storage.c @@ -4,6 +4,7 @@ #include "ioloop.h" #include "str.h" #include "settings-parser.h" +#include "master-service-settings.h" #include "mail-copy.h" #include "mail-user.h" #include "mailbox-list-private.h" @@ -41,8 +42,13 @@ pop3c_storage_create(struct mail_storage *_storage, { struct pop3c_storage *storage = POP3C_STORAGE(_storage); - storage->set = settings_parser_get_root_set(_storage->user->set_parser, - pop3c_get_setting_parser_info()); + if (master_service_settings_parser_get(_storage->event, + _storage->user->set_parser, + pop3c_get_setting_parser_info(), + MASTER_SERVICE_SETTINGS_GET_FLAG_NO_EXPAND, + &storage->set, error_r) < 0) + return -1; + if (storage->set->pop3c_host[0] == '\0') { *error_r = "missing pop3c_host"; return -1; @@ -58,6 +64,14 @@ pop3c_storage_create(struct mail_storage *_storage, return 0; } +static void pop3c_storage_destroy(struct mail_storage *_storage) +{ + struct pop3c_storage *storage = POP3C_STORAGE(_storage); + + master_service_settings_free(storage->set); + index_storage_destroy(_storage); +} + static struct pop3c_client * pop3c_client_create_from_set(struct mail_storage *storage, const struct pop3c_settings *set) @@ -313,7 +327,7 @@ struct mail_storage pop3c_storage = { pop3c_get_setting_parser_info, pop3c_storage_alloc, pop3c_storage_create, - index_storage_destroy, + pop3c_storage_destroy, NULL, pop3c_storage_get_list_settings, NULL,