Mercurial > dovecot > core-2.2
changeset 9106:fce3926fe910 HEAD
mail_storage_service_init*() can now take multiple set_roots.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 15 Apr 2009 12:40:16 -0400 |
parents | fdbc1902b4a9 |
children | a8dfff3ed857 |
files | src/imap/main.c src/lda/main.c src/lib-storage/mail-storage-service.c src/lib-storage/mail-storage-service.h src/pop3/main.c |
diffstat | 5 files changed, 32 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/main.c Wed Apr 15 12:33:37 2009 -0400 +++ b/src/imap/main.c Wed Apr 15 12:40:16 2009 -0400 @@ -134,6 +134,10 @@ int main(int argc, char *argv[], char *envp[]) { + const struct setting_parser_info *set_roots[] = { + &imap_setting_parser_info, + NULL + }; enum master_service_flags service_flags = 0; enum mail_storage_service_flags storage_service_flags = 0; struct mail_user *mail_user; @@ -178,8 +182,7 @@ i_fatal("USER environment missing"); } - mail_user = mail_storage_service_init_user(service, user, - &imap_setting_parser_info, + mail_user = mail_storage_service_init_user(service, user, set_roots, storage_service_flags); set = mail_storage_service_get_settings(service); restrict_access_allow_coredumps(TRUE);
--- a/src/lda/main.c Wed Apr 15 12:33:37 2009 -0400 +++ b/src/lda/main.c Wed Apr 15 12:40:16 2009 -0400 @@ -176,6 +176,10 @@ int main(int argc, char *argv[]) { + const struct setting_parser_info *set_roots[] = { + &lda_setting_parser_info, + NULL + }; struct mail_deliver_context ctx; enum mail_storage_service_flags service_flags = 0; const char *user, *errstr, *path, *getopt_str; @@ -314,8 +318,8 @@ } service_flags |= MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; - ctx.dest_user = mail_storage_service_init_user(service, user, - &lda_setting_parser_info, service_flags); + ctx.dest_user = mail_storage_service_init_user(service, user, set_roots, + service_flags); ctx.set = mail_storage_service_get_settings(service); duplicate_init(mail_user_set_get_storage_set(ctx.dest_user->set));
--- a/src/lib-storage/mail-storage-service.c Wed Apr 15 12:33:37 2009 -0400 +++ b/src/lib-storage/mail-storage-service.c Wed Apr 15 12:40:16 2009 -0400 @@ -282,11 +282,13 @@ static void mail_storage_service_init_settings(struct master_service *service, - const struct setting_parser_info *set_root, + const struct setting_parser_info *set_roots[], bool preserve_home) { - const struct setting_parser_info *set_roots[3]; + ARRAY_DEFINE(all_set_roots, const struct setting_parser_info *); + const struct setting_parser_info *info = &mail_user_setting_parser_info; const char *error; + unsigned int i; (void)umask(0077); @@ -294,12 +296,15 @@ mail_storage_register_all(); mailbox_list_register_all(); - set_roots[0] = &mail_user_setting_parser_info; - set_roots[1] = set_root; - set_roots[2] = NULL; + t_array_init(&all_set_roots, 5); + array_append(&all_set_roots, &info, 1); + for (i = 0; set_roots[i] != NULL; i++) + array_append(&all_set_roots, &set_roots[i], 1); + (void)array_append_space(&all_set_roots); /* read settings after registering storages so they can have their own setting definitions too */ + set_roots = array_idx_modifiable(&all_set_roots, 0); if (master_service_settings_read(service, set_roots, mail_storage_get_dynamic_parsers(), preserve_home, &error) < 0) @@ -395,7 +400,7 @@ struct mail_user * mail_storage_service_init_user(struct master_service *service, const char *user, - const struct setting_parser_info *set_root, + const struct setting_parser_info *set_roots[], enum mail_storage_service_flags flags) { const struct master_service_settings *set; @@ -408,7 +413,7 @@ bool userdb_lookup; userdb_lookup = (flags & MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP) != 0; - mail_storage_service_init_settings(service, set_root, !userdb_lookup); + mail_storage_service_init_settings(service, set_roots, !userdb_lookup); if ((flags & MAIL_STORAGE_SERVICE_FLAG_DEBUG) != 0) set_keyval(service, "mail_debug", "yes"); @@ -484,7 +489,7 @@ struct mail_storage_service_multi_ctx * mail_storage_service_multi_init(struct master_service *service, - const struct setting_parser_info *set_root, + const struct setting_parser_info *set_roots[], enum mail_storage_service_flags flags) { struct mail_storage_service_multi_ctx *ctx; @@ -497,7 +502,7 @@ ctx->service = service; ctx->flags = flags; - mail_storage_service_init_settings(service, set_root, FALSE); + mail_storage_service_init_settings(service, set_roots, FALSE); /* do all the global initialization. delay initializing plugins until we drop privileges the first time. */
--- a/src/lib-storage/mail-storage-service.h Wed Apr 15 12:33:37 2009 -0400 +++ b/src/lib-storage/mail-storage-service.h Wed Apr 15 12:40:16 2009 -0400 @@ -16,13 +16,13 @@ struct mail_user * mail_storage_service_init_user(struct master_service *service, const char *user, - const struct setting_parser_info *set_root, + const struct setting_parser_info *set_roots[], enum mail_storage_service_flags flags); void mail_storage_service_deinit_user(void); struct mail_storage_service_multi_ctx * mail_storage_service_multi_init(struct master_service *service, - const struct setting_parser_info *set_root, + const struct setting_parser_info *set_roots[], enum mail_storage_service_flags flags); /* Returns 1 if ok, 0 if user wasn't found, -1 if error. */ int mail_storage_service_multi_next(struct mail_storage_service_multi_ctx *ctx,
--- a/src/pop3/main.c Wed Apr 15 12:33:37 2009 -0400 +++ b/src/pop3/main.c Wed Apr 15 12:40:16 2009 -0400 @@ -139,6 +139,10 @@ int main(int argc, char *argv[], char *envp[]) { + const struct setting_parser_info *set_roots[] = { + &pop3_setting_parser_info, + NULL + }; enum master_service_flags service_flags = 0; enum mail_storage_service_flags storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT; @@ -176,8 +180,7 @@ i_fatal("USER environment missing"); } - mail_user = mail_storage_service_init_user(service, user, - &pop3_setting_parser_info, + mail_user = mail_storage_service_init_user(service, user, set_roots, storage_service_flags); set = mail_storage_service_get_settings(service); restrict_access_allow_coredumps(TRUE);