]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Support returning master_service_settings_output.config_fd
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sat, 17 Dec 2022 19:44:06 +0000 (21:44 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 27 Jan 2023 13:01:47 +0000 (13:01 +0000)
src/lib-master/master-service-settings.c
src/lib-master/master-service-settings.h

index 42775fe29c3630e4fe942ca720fe32561024d81f..31b2ed02e56f426df0ee3d5ff9019db4d869216c 100644 (file)
@@ -525,6 +525,7 @@ int master_service_settings_read(struct master_service *service,
        bool use_environment = FALSE;
 
        i_zero(output_r);
+       output_r->config_fd = -1;
 
        if (service->config_fd != -1 && !input->reload_config) {
                /* config was already read once */
@@ -606,6 +607,11 @@ int master_service_settings_read(struct master_service *service,
                        return -1;
                }
 
+               if (input->return_config_fd) {
+                       output_r->config_fd = dup(fd);
+                       if (output_r->config_fd == -1)
+                               i_fatal("dup(%s) failed: %m", path);
+               }
                if (input->config_path == NULL) {
                        i_assert(service->config_fd == -1 ||
                                 service->config_fd == fd);
index bfde3ab9c779607a6040f3e26e3283cc1db8e5a7..74fd0e2812f6d73517b093fe0a66e5305b8a155a 100644 (file)
@@ -41,6 +41,7 @@ struct master_service_settings_input {
        bool reload_config;
        bool never_exec;
        bool always_exec;
+       bool return_config_fd;
        bool use_sysexits;
 
        const char *service;
@@ -53,6 +54,8 @@ struct master_service_settings_output {
        /* if service was not given for lookup, this contains names of services
           that have more specific settings */
        const char *const *specific_services;
+       /* Configuration file fd. Returned if input.return_config_fd=TRUE. */
+       int config_fd;
 
        /* Config couldn't be read because we don't have enough permissions.
           The process probably should be restarted and the settings read