]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Added support for parse_full_config input option for settings parsing.
authorTimo Sirainen <tss@iki.fi>
Wed, 6 Oct 2010 18:35:06 +0000 (19:35 +0100)
committerTimo Sirainen <tss@iki.fi>
Wed, 6 Oct 2010 18:35:06 +0000 (19:35 +0100)
src/lib-master/master-service-settings.c
src/lib-master/master-service-settings.h

index 4b6856c794065ab5a30203171b1280c594326edb..78bed7abdb40ac5a5bcd322b95108d680a48a521 100644 (file)
@@ -88,6 +88,7 @@ master_service_exec_config(struct master_service *service,
                           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 @@ master_service_exec_config(struct master_service *service,
                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);
 }
 
index 2960af0ae8bc715d43735ab9ca99098405789a04..064e914a2e53e9a4013cb882918731d0efadf805 100644 (file)
@@ -23,6 +23,7 @@ struct master_service_settings_input {
        bool preserve_home;
        bool never_exec;
        bool use_sysexits;
+       bool parse_full_config;
 
        const char *module;
        const char *service;