dovecot-2.0: mail_storage_service_lookup*() now separates userdb...

dovecot at dovecot.org dovecot at dovecot.org
Tue Mar 16 20:21:53 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/15860795f158
changeset: 10930:15860795f158
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Mar 16 20:21:48 2010 +0200
description:
mail_storage_service_lookup*() now separates userdb lookup and user setting errors.

diffstat:

 src/doveadm/doveadm-mail.c             |   2 +-
 src/lib-storage/mail-storage-service.c |   7 +++++--
 src/lib-storage/mail-storage-service.h |   3 ++-
 src/plugins/expire/expire-tool.c       |  10 +++++++++-
 src/util/script.c                      |   2 +-
 5 files changed, 18 insertions(+), 6 deletions(-)

diffs (92 lines):

diff -r a66d3650e3c3 -r 15860795f158 src/doveadm/doveadm-mail.c
--- a/src/doveadm/doveadm-mail.c	Tue Mar 16 19:59:59 2010 +0200
+++ b/src/doveadm/doveadm-mail.c	Tue Mar 16 20:21:48 2010 +0200
@@ -183,7 +183,7 @@
 			else if (ret == 0)
 				i_info("User no longer exists, skipping");
 		} T_END;
-		if (ret < 0)
+		if (ret == -1)
 			break;
 		if (doveadm_verbose) {
 			if (++user_idx % interval == 0) {
diff -r a66d3650e3c3 -r 15860795f158 src/lib-storage/mail-storage-service.c
--- a/src/lib-storage/mail-storage-service.c	Tue Mar 16 19:59:59 2010 +0200
+++ b/src/lib-storage/mail-storage-service.c	Tue Mar 16 20:21:48 2010 +0200
@@ -812,12 +812,15 @@
 	if (userdb_fields != NULL) {
 		auth_user_fields_parse(userdb_fields, temp_pool, &reply);
 		if (user_reply_handle(user, &reply, error_r) < 0)
-			ret = -1;
+			ret = -2;
 	}
 	pool_unref(&temp_pool);
 
 	/* load per-user plugins */
-	mail_storage_service_load_modules(ctx, user_info, user->user_set);
+	if (ret > 0) {
+		mail_storage_service_load_modules(ctx, user_info,
+						  user->user_set);
+	}
 
 	*user_r = user;
 	return ret;
diff -r a66d3650e3c3 -r 15860795f158 src/lib-storage/mail-storage-service.h
--- a/src/lib-storage/mail-storage-service.h	Tue Mar 16 19:59:59 2010 +0200
+++ b/src/lib-storage/mail-storage-service.h	Tue Mar 16 20:21:48 2010 +0200
@@ -60,7 +60,8 @@
    or _all_init(). */
 void mail_storage_service_init_settings(struct mail_storage_service_ctx *ctx,
 					const struct mail_storage_service_input *input);
-/* Returns 1 if ok, 0 if user wasn't found, -1 if error. */
+/* Returns 1 if ok, 0 if user wasn't found, -1 if fatal error,
+   -2 if user had invalid settings. */
 int mail_storage_service_lookup(struct mail_storage_service_ctx *ctx,
 				const struct mail_storage_service_input *input,
 				struct mail_storage_service_user **user_r,
diff -r a66d3650e3c3 -r 15860795f158 src/plugins/expire/expire-tool.c
--- a/src/plugins/expire/expire-tool.c	Tue Mar 16 19:59:59 2010 +0200
+++ b/src/plugins/expire/expire-tool.c	Tue Mar 16 20:21:48 2010 +0200
@@ -23,6 +23,7 @@
 	struct mail_user *mail_user;
 	struct expire_env *env;
 	bool testrun;
+	bool userdb_lookup_failed;
 };
 
 static int expire_init_user(struct expire_context *ctx, const char *user)
@@ -43,7 +44,12 @@
 	if (ret <= 0) {
 		if (ret < 0 || ctx->testrun)
 			i_error("%s", errstr);
-		return ret;
+		if (ret == -1) {
+			/* the next userdb lookup is most likely
+			   going to fail too */
+			ctx->userdb_lookup_failed = TRUE;
+		}
+		return ret < 0 ? -1 : 0;
 	}
 
 	if (mail_user_set_plugin_getenv(ctx->mail_user->set, "expire") == NULL)
@@ -263,6 +269,8 @@
 		} T_END;
 
 		if (ret < 0) {
+			if (ctx.userdb_lookup_failed)
+				break;
 			/* failed to update */
 		} else if (next_expire == 0) {
 			/* no more messages or mailbox deleted */
diff -r a66d3650e3c3 -r 15860795f158 src/util/script.c
--- a/src/util/script.c	Tue Mar 16 19:59:59 2010 +0200
+++ b/src/util/script.c	Tue Mar 16 20:21:48 2010 +0200
@@ -93,7 +93,7 @@
 		t_strdup_printf("script(%s): ", input.username));
 
 	service_ctx = mail_storage_service_init(master_service, NULL, flags);
-	if (mail_storage_service_lookup(service_ctx, &input, &user, &error) < 0)
+	if (mail_storage_service_lookup(service_ctx, &input, &user, &error) <= 0)
 		i_fatal("%s", error);
 	mail_storage_service_restrict_setenv(service_ctx, user);
 


More information about the dovecot-cvs mailing list