dovecot-2.2: lib-storage: If settings can't be read because of p...

dovecot at dovecot.org dovecot at dovecot.org
Thu Aug 1 14:18:29 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/2bccde4027ea
changeset: 16630:2bccde4027ea
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Aug 01 14:18:24 2013 +0300
description:
lib-storage: If settings can't be read because of permission denied, restart process.

diffstat:

 src/lib-storage/mail-storage-service.c |  10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diffs (41 lines):

diff -r 5696b0162527 -r 2bccde4027ea src/lib-storage/mail-storage-service.c
--- a/src/lib-storage/mail-storage-service.c	Thu Aug 01 14:18:00 2013 +0300
+++ b/src/lib-storage/mail-storage-service.c	Thu Aug 01 14:18:24 2013 +0300
@@ -65,6 +65,7 @@
 
 	unsigned int debug:1;
 	unsigned int log_initialized:1;
+	unsigned int config_permission_denied:1;
 };
 
 struct mail_storage_service_user {
@@ -831,6 +832,8 @@
 	enum mail_storage_service_flags flags;
 	unsigned int i;
 
+	ctx->config_permission_denied = FALSE;
+
 	flags = input == NULL ? ctx->flags :
 		mail_storage_service_input_get_flags(ctx, input);
 
@@ -879,6 +882,8 @@
 						 &set_output, error_r) < 0) {
 			*error_r = t_strdup_printf(
 				"Error reading configuration: %s", *error_r);
+			ctx->config_permission_denied =
+				set_output.permission_denied;
 			return -1;
 		}
 		*parser_r = ctx->service->set_parser;
@@ -988,6 +993,11 @@
 	if (mail_storage_service_read_settings(ctx, input, user_pool,
 					       &user_info, &set_parser,
 					       &error) < 0) {
+		if (ctx->config_permission_denied) {
+			/* just restart and maybe next time we will open the
+			   config socket before dropping privileges */
+			i_fatal("user %s: %s", username, error);
+		}
 		i_error("user %s: %s", username, error);
 		pool_unref(&user_pool);
 		*error_r = MAIL_ERRSTR_CRITICAL_MSG;


More information about the dovecot-cvs mailing list