Mercurial > dovecot > core-2.2
changeset 12258:d63b48a452f1
lib-master: Added support for parse_full_config input option for settings parsing.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 06 Oct 2010 19:35:06 +0100 |
parents | 8d36d8f5fcef |
children | 092c39cf86b9 |
files | src/lib-master/master-service-settings.c src/lib-master/master-service-settings.h |
diffstat | 2 files changed, 23 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-master/master-service-settings.c Wed Oct 06 19:34:41 2010 +0100 +++ b/src/lib-master/master-service-settings.c Wed Oct 06 19:35:06 2010 +0100 @@ -88,6 +88,7 @@ const struct master_service_settings_input *input) { const char **conf_argv, *binary_path = service->argv[0]; + unsigned int i, argv_max_count; (void)t_binary_abspath(&binary_path); @@ -97,18 +98,28 @@ env_put("USE_SYSEXITS=1"); /* @UNSAFE */ - conf_argv = t_new(const char *, 8 + (service->argc + 1) + 1); - conf_argv[0] = DOVECOT_CONFIG_BIN_PATH; - conf_argv[1] = "-f"; - conf_argv[2] = t_strconcat("service=", service->name, NULL); - conf_argv[3] = "-m"; - conf_argv[4] = input->module == NULL ? "" : input->module; - conf_argv[5] = "-c"; - conf_argv[6] = service->config_path; - conf_argv[7] = "-e"; - conf_argv[8] = binary_path; - memcpy(conf_argv+9, service->argv + 1, + i = 0; + argv_max_count = 9 + (service->argc + 1) + 1; + conf_argv = t_new(const char *, argv_max_count); + conf_argv[i++] = DOVECOT_CONFIG_BIN_PATH; + conf_argv[i++] = "-f"; + conf_argv[i++] = t_strconcat("service=", service->name, NULL); + conf_argv[i++] = "-c"; + conf_argv[i++] = service->config_path; + if (input->module != NULL) { + conf_argv[i++] = "-m"; + conf_argv[i++] = input->module; + } + if (input->parse_full_config) + conf_argv[i++] = "-p"; + + conf_argv[i++] = "-e"; + conf_argv[i++] = binary_path; + memcpy(conf_argv+i, service->argv + 1, (service->argc) * sizeof(conf_argv[0])); + i += service->argc; + + i_assert(i < argv_max_count); execv_const(conf_argv[0], conf_argv); }