Mercurial > dovecot > core-2.2
changeset 10930:15860795f158 HEAD
mail_storage_service_lookup*() now separates userdb lookup and user setting errors.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 16 Mar 2010 20:21:48 +0200 |
parents | a66d3650e3c3 |
children | 03b679cd8d1f |
files | src/doveadm/doveadm-mail.c src/lib-storage/mail-storage-service.c src/lib-storage/mail-storage-service.h src/plugins/expire/expire-tool.c src/util/script.c |
diffstat | 5 files changed, 18 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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) {
--- 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;
--- 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,
--- 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 */
--- 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);