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