dovecot-2.1: lib-master: Added -i parameter to read config by in...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Feb 6 21:39:22 EET 2012
details: http://hg.dovecot.org/dovecot-2.1/rev/3fa544e4f26b
changeset: 14069:3fa544e4f26b
user: Timo Sirainen <tss at iki.fi>
date: Mon Feb 06 21:39:11 2012 +0200
description:
lib-master: Added -i parameter to read config by instance name rather than path.
diffstat:
src/lib-master/Makefile.am | 1 +
src/lib-master/master-service-private.h | 2 +-
src/lib-master/master-service.c | 36 +++++++++++++++++++++++++++++---
3 files changed, 34 insertions(+), 5 deletions(-)
diffs (112 lines):
diff -r 5f60958926e1 -r 3fa544e4f26b src/lib-master/Makefile.am
--- a/src/lib-master/Makefile.am Mon Feb 06 21:26:55 2012 +0200
+++ b/src/lib-master/Makefile.am Mon Feb 06 21:39:11 2012 +0200
@@ -6,6 +6,7 @@
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/lib-settings \
-DPKG_RUNDIR=\""$(rundir)"\" \
+ -DPKG_STATEDIR=\""$(statedir)"\" \
-DSYSCONFDIR=\""$(pkgsysconfdir)"\" \
-DBINDIR=\""$(bindir)"\"
diff -r 5f60958926e1 -r 3fa544e4f26b src/lib-master/master-service-private.h
--- a/src/lib-master/master-service-private.h Mon Feb 06 21:26:55 2012 +0200
+++ b/src/lib-master/master-service-private.h Mon Feb 06 21:39:11 2012 +0200
@@ -23,7 +23,7 @@
char **argv;
const char *version_string;
- const char *config_path;
+ char *config_path;
ARRAY_TYPE(const_string) config_overrides;
int config_fd;
int syslog_facility;
diff -r 5f60958926e1 -r 3fa544e4f26b src/lib-master/master-service.c
--- a/src/lib-master/master-service.c Mon Feb 06 21:26:55 2012 +0200
+++ b/src/lib-master/master-service.c Mon Feb 06 21:39:11 2012 +0200
@@ -3,6 +3,7 @@
#include "lib.h"
#include "lib-signals.h"
#include "ioloop.h"
+#include "abspath.h"
#include "array.h"
#include "strescape.h"
#include "env-util.h"
@@ -12,6 +13,7 @@
#include "fd-close-on-exec.h"
#include "settings-parser.h"
#include "syslog-util.h"
+#include "master-instance.h"
#include "master-login.h"
#include "master-service-private.h"
#include "master-service-settings.h"
@@ -45,7 +47,7 @@
const char *master_service_getopt_string(void)
{
- return "c:ko:Os:L";
+ return "c:i:ko:Os:L";
}
static void sig_die(const siginfo_t *si, void *context)
@@ -155,9 +157,9 @@
service->service_count_left = (unsigned int)-1;
service->config_fd = -1;
- service->config_path = getenv(MASTER_CONFIG_FILE_ENV);
+ service->config_path = i_strdup(getenv(MASTER_CONFIG_FILE_ENV));
if (service->config_path == NULL) {
- service->config_path = DEFAULT_CONFIG_FILE_PATH;
+ service->config_path = i_strdup(DEFAULT_CONFIG_FILE_PATH);
service->config_path_is_default = TRUE;
}
@@ -326,14 +328,39 @@
service->idle_die_callback = callback;
}
+static bool get_instance_config(const char *name, const char **config_path_r)
+{
+ struct master_instance_list *list;
+ const struct master_instance *inst;
+ const char *path;
+
+ list = master_instance_list_init(MASTER_INSTANCE_PATH);
+ inst = master_instance_list_find_by_name(list, name);
+ if (inst != NULL) {
+ path = t_strdup_printf("%s/dovecot.conf", inst->base_dir);
+ if (t_readlink(path, config_path_r) < 0)
+ i_fatal("readlink(%s) failed: %m", path);
+ }
+ master_instance_list_deinit(&list);
+ return inst != NULL;
+}
+
bool master_service_parse_option(struct master_service *service,
int opt, const char *arg)
{
+ const char *path;
+
switch (opt) {
case 'c':
- service->config_path = arg;
+ service->config_path = i_strdup(arg);
service->config_path_is_default = FALSE;
break;
+ case 'i':
+ if (!get_instance_config(arg, &path))
+ i_fatal("Unknown instance name: %s", arg);
+ service->config_path = i_strdup(path);
+ service->keep_environment = TRUE;
+ break;
case 'k':
service->keep_environment = TRUE;
break;
@@ -710,6 +737,7 @@
i_free(service->listeners);
i_free(service->getopt_str);
i_free(service->name);
+ i_free(service->config_path);
i_free(service);
lib_deinit();
More information about the dovecot-cvs
mailing list