dovecot-2.0: lib-master: Added support for parse_full_config inp...

dovecot at dovecot.org dovecot at dovecot.org
Wed Oct 6 21:35:20 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/d63b48a452f1
changeset: 12258:d63b48a452f1
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Oct 06 19:35:06 2010 +0100
description:
lib-master: Added support for parse_full_config input option for settings parsing.

diffstat:

 src/lib-master/master-service-settings.c |  33 ++++++++++++++++++++++-----------
 src/lib-master/master-service-settings.h |   1 +
 2 files changed, 23 insertions(+), 11 deletions(-)

diffs (62 lines):

diff -r 8d36d8f5fcef -r d63b48a452f1 src/lib-master/master-service-settings.c
--- 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);
 }
 
diff -r 8d36d8f5fcef -r d63b48a452f1 src/lib-master/master-service-settings.h
--- a/src/lib-master/master-service-settings.h	Wed Oct 06 19:34:41 2010 +0100
+++ b/src/lib-master/master-service-settings.h	Wed Oct 06 19:35:06 2010 +0100
@@ -23,6 +23,7 @@
 	bool preserve_home;
 	bool never_exec;
 	bool use_sysexits;
+	bool parse_full_config;
 
 	const char *module;
 	const char *service;


More information about the dovecot-cvs mailing list