dovecot-2.2: lib-storage: Use module_dir_try_load_missing() to l...

dovecot at dovecot.org dovecot at dovecot.org
Fri Feb 6 16:18:36 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/f64cf4d075c8
changeset: 18226:f64cf4d075c8
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Feb 06 18:18:19 2015 +0200
description:
lib-storage: Use module_dir_try_load_missing() to load user plugins.

diffstat:

 src/lib-storage/mail-storage-service.c |  33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diffs (71 lines):

diff -r 88b09d5912c0 -r f64cf4d075c8 src/lib-storage/mail-storage-service.c
--- a/src/lib-storage/mail-storage-service.c	Fri Feb 06 18:18:10 2015 +0200
+++ b/src/lib-storage/mail-storage-service.c	Fri Feb 06 18:18:19 2015 +0200
@@ -968,17 +968,18 @@
 		auth_master_init(user_set->auth_socket_path, flags));
 }
 
-static void
+static int
 mail_storage_service_load_modules(struct mail_storage_service_ctx *ctx,
 				  const struct setting_parser_info *user_info,
-				  const struct mail_user_settings *user_set)
+				  const struct mail_user_settings *user_set,
+				  const char **error_r)
 {
 	struct module_dir_load_settings mod_set;
 
 	if (*user_set->mail_plugins == '\0')
-		return;
+		return 0;
 	if ((ctx->flags & MAIL_STORAGE_SERVICE_FLAG_NO_PLUGINS) != 0)
-		return;
+		return 0;
 
 	memset(&mod_set, 0, sizeof(mod_set));
 	mod_set.abi_version = DOVECOT_ABI_VERSION;
@@ -987,10 +988,10 @@
 	mod_set.require_init_funcs = TRUE;
 	mod_set.debug = mail_user_set_get_mail_debug(user_info, user_set);
 
-	mail_storage_service_modules =
-		module_dir_load_missing(mail_storage_service_modules,
-					user_set->mail_plugin_dir,
-					user_set->mail_plugins, &mod_set);
+	return module_dir_try_load_missing(&mail_storage_service_modules,
+					   user_set->mail_plugin_dir,
+					   user_set->mail_plugins,
+					   &mod_set, error_r);
 }
 
 static int extra_field_key_cmp_p(const char *const *s1, const char *const *s2)
@@ -1086,7 +1087,12 @@
 	if (ctx->conn == NULL)
 		mail_storage_service_first_init(ctx, user_info, user_set);
 	/* load global plugins */
-	mail_storage_service_load_modules(ctx, user_info, user_set);
+	if (mail_storage_service_load_modules(ctx, user_info, user_set, &error) < 0) {
+		i_error("%s", error);
+		pool_unref(&user_pool);
+		*error_r = MAIL_ERRSTR_CRITICAL_MSG;
+		return -1;
+	}
 
 	if (ctx->userdb_next_pool == NULL)
 		temp_pool = pool_alloconly_create("userdb lookup", 2048);
@@ -1152,8 +1158,13 @@
 
 	/* load per-user plugins */
 	if (ret > 0) {
-		mail_storage_service_load_modules(ctx, user_info,
-						  user->user_set);
+		if (mail_storage_service_load_modules(ctx, user_info,
+						      user->user_set,
+						      &error) < 0) {
+			i_error("%s", error);
+			*error_r = MAIL_ERRSTR_CRITICAL_MSG;
+			ret = -2;
+		}
 	}
 
 	*user_r = user;


More information about the dovecot-cvs mailing list