]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Added master_service_settings_output.permission_denied error flag.
authorTimo Sirainen <tss@iki.fi>
Thu, 1 Aug 2013 11:18:00 +0000 (14:18 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 1 Aug 2013 11:18:00 +0000 (14:18 +0300)
src/lib-master/master-service-settings.c
src/lib-master/master-service-settings.h

index 5566d43e5e850aa36888cfbb1db7ec60f5271c6c..62f7b9ddd73af50f688edb8993160947881b9ef7 100644 (file)
@@ -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)
index ad7d6ea79ad813253939d05c7a76e29805ed5e94..e5b5ace1db18dfdd2d8fdb0f0316171b41cf0ed5 100644 (file)
@@ -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;