input.never_exec = TRUE;
input.reload_config = TRUE;
input.return_config_fd = TRUE;
+ input.disable_check_settings = TRUE;
if (master_service_settings_read(master_service, &input,
&output, &error) < 0) {
i_error("%s", error);
i_sd_notify(0, "READY=1");
return;
}
+ if (master_service_settings_get(NULL, &master_setting_parser_info, 0,
+ &set, &error) < 0) {
+ i_close_fd(&output.config_fd);
+ i_error("%s", error);
+ i_sd_notify(0, "READY=1");
+ return;
+ }
i_close_fd(&global_config_fd);
global_config_fd = output.config_fd;
fd_close_on_exec(global_config_fd, TRUE);
- set = master_service_settings_get_root_set(master_service,
- &master_setting_parser_info);
if (services_create(set, &new_services, &error) < 0) {
/* new configuration is invalid, keep the old */
i_error("Config reload failed: %s", error);
i_sd_notify(0, "READY=1");
+ master_service_settings_free(set);
return;
}
+ master_service_settings_free(set);
new_services->config->config_file_path =
p_strdup(new_services->pool,
services->config->config_file_path);
master_service_stop(master_service);
}
-static struct master_settings *master_settings_read(void)
+static const struct master_settings *master_settings_read(void)
{
struct master_service_settings_input input;
struct master_service_settings_output output;
input.preserve_environment = TRUE;
input.always_exec = TRUE;
input.return_config_fd = TRUE;
+ input.disable_check_settings = TRUE;
if (master_service_settings_read(master_service, &input, &output,
&error) < 0)
i_fatal("%s", error);
global_config_fd = output.config_fd;
fd_close_on_exec(global_config_fd, TRUE);
- return master_service_settings_get_root_set(master_service,
- &master_setting_parser_info);
+ return master_service_settings_get_or_fatal(NULL,
+ &master_setting_parser_info);
}
static void main_log_startup(char **protocols)
int main(int argc, char *argv[])
{
- struct master_settings *set;
+ const struct master_settings *set;
const char *error, *doveconf_arg = NULL;
failure_callback_t *orig_info_callback, *orig_debug_callback;
bool foreground = FALSE, ask_key_pass = FALSE;
T_BEGIN {
main_init(set);
+ master_service_settings_free(set);
} T_END;
master_service_run(master_service, NULL);
main_deinit();
service_list->refcount = 1;
service_list->pool = pool;
service_list->event = event;
- service_list->set_pool = master_service_settings_detach(master_service);
service_list->set = set;
service_list->master_log_fd[0] = -1;
service_list->master_log_fd[1] = -1;
pool_unref(&pool);
return -1;
}
+ pool_ref(set->pool);
return 0;
}
timeout_remove(&service_list->to_kill);
event_unref(&service_list->event);
- pool_unref(&service_list->set_pool);
+ master_service_settings_free(service_list->set);
pool_unref(&service_list->pool);
}