From: Timo Sirainen Date: Sat, 17 Dec 2022 19:44:06 +0000 (+0200) Subject: lib-master: Support returning master_service_settings_output.config_fd X-Git-Tag: 2.4.0~3069 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db8b1a5b6252cf800986bdcfee85989afd12dc40;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Support returning master_service_settings_output.config_fd --- diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 42775fe29c..31b2ed02e5 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -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); diff --git a/src/lib-master/master-service-settings.h b/src/lib-master/master-service-settings.h index bfde3ab9c7..74fd0e2812 100644 --- a/src/lib-master/master-service-settings.h +++ b/src/lib-master/master-service-settings.h @@ -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