From cfa178a42cac8c4ddb34ca995253346873129d0d Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 1 Aug 2013 14:18:00 +0300 Subject: [PATCH] lib-master: Added master_service_settings_output.permission_denied error flag. --- src/lib-master/master-service-settings.c | 7 ++++++- src/lib-master/master-service-settings.h | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 5566d43e5e..62f7b9ddd7 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -150,6 +150,7 @@ config_exec_fallback(struct master_service *service, { const char *path; struct stat st; + int saved_errno = errno; if (input->never_exec) return; @@ -161,6 +162,7 @@ config_exec_fallback(struct master_service *service, /* it's a file, not a socket/pipe */ master_service_exec_config(service, input); } + errno = saved_errno; } static int @@ -377,8 +379,11 @@ int master_service_settings_read(struct master_service *service, for (;;) { fd = master_service_open_config(service, input, &path, error_r); - if (fd == -1) + if (fd == -1) { + if (errno == EACCES) + output_r->permission_denied = TRUE; return -1; + } if (config_send_request(service, input, fd, path, error_r) == 0) diff --git a/src/lib-master/master-service-settings.h b/src/lib-master/master-service-settings.h index ad7d6ea79a..e5b5ace1db 100644 --- a/src/lib-master/master-service-settings.h +++ b/src/lib-master/master-service-settings.h @@ -52,6 +52,10 @@ struct master_service_settings_output { local/remote ip/host */ unsigned int used_local:1; unsigned int used_remote:1; + /* Config couldn't be read because we don't have enough permissions. + The process probably should be restarted and the settings read + before dropping privileges. */ + unsigned int permission_denied:1; }; extern const struct setting_parser_info master_service_setting_parser_info; -- 2.47.3