dovecot-2.2: Made PKG_STATEDIR configurable with state_dir setting.

dovecot at dovecot.org dovecot at dovecot.org
Wed Aug 22 16:55:44 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/543852ebb327
changeset: 14950:543852ebb327
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Aug 22 16:55:27 2012 +0300
description:
Made PKG_STATEDIR configurable with state_dir setting.
Based on patch by Chris Webb.

Normally this isn't needed, since the data in the state_dir can be shared
across multiple Dovecot instances, but in some specific use cases this may
be useful (e.g. users running their own Dovecots).

diffstat:

 src/config/Makefile.am                   |   1 +
 src/doveadm/doveadm-instance.c           |  13 +++++++++----
 src/doveadm/doveadm-mount.c              |   6 ++++--
 src/doveadm/doveadm-settings.c           |   1 +
 src/doveadm/doveadm-settings.h           |   1 +
 src/doveadm/doveadm.c                    |   4 ++++
 src/lib-master/master-instance.h         |   2 +-
 src/lib-master/master-service-settings.c |   2 ++
 src/lib-master/master-service-settings.h |   1 +
 src/lib-master/master-service-ssl.c      |   4 ++--
 src/lib-master/master-service.c          |   6 ++++--
 src/login-common/ssl-proxy-openssl.c     |   3 +--
 src/master/main.c                        |  11 +++++++----
 src/master/master-settings.c             |   6 ++++--
 src/master/master-settings.h             |   1 +
 src/replication/replicator/replicator.c  |  19 ++++++++++++++-----
 src/ssl-params/main.c                    |  10 ++++++++--
 17 files changed, 65 insertions(+), 26 deletions(-)

diffs (truncated from 378 to 300 lines):

diff -r 5b89c50164de -r 543852ebb327 src/config/Makefile.am
--- a/src/config/Makefile.am	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/config/Makefile.am	Wed Aug 22 16:55:27 2012 +0300
@@ -9,6 +9,7 @@
 	-I$(top_srcdir)/src/lib-settings \
 	-I$(top_srcdir)/src/lib-master \
 	-DPKG_RUNDIR=\""$(rundir)"\" \
+	-DPKG_STATEDIR=\""$(statedir)"\" \
 	-DPKG_LIBEXECDIR=\""$(pkglibexecdir)"\" \
 	-DEXAMPLE_CONFIG_DIR=\""$(exampledir)"\" \
 	-DMODULEDIR=\""$(moduledir)"\" \
diff -r 5b89c50164de -r 543852ebb327 src/doveadm/doveadm-instance.c
--- a/src/doveadm/doveadm-instance.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/doveadm/doveadm-instance.c	Wed Aug 22 16:55:27 2012 +0300
@@ -2,6 +2,7 @@
 
 #include "lib.h"
 #include "master-instance.h"
+#include "master-service-settings.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
 
@@ -48,7 +49,7 @@
 	struct master_instance_list *list;
 	struct master_instance_list_iter *iter;
 	const struct master_instance *inst;
-	const char *pidfile_path;
+	const char *instance_path, *pidfile_path;
 	bool show_config = FALSE;
 	int c;
 
@@ -71,7 +72,9 @@
 		doveadm_print_header_simple("running");
 	}
 
-	list = master_instance_list_init(MASTER_INSTANCE_PATH);
+	instance_path = t_strconcat(service_set->state_dir,
+				    "/"MASTER_INSTANCE_FNAME, NULL);
+	list = master_instance_list_init(instance_path);
 	iter = master_instance_list_iterate_init(list);
 	while ((inst = master_instance_iterate_list_next(iter)) != NULL) {
 		if (argv[0] != NULL && strcmp(argv[0], inst->name) != 0)
@@ -99,13 +102,15 @@
 {
 	struct master_instance_list *list;
 	const struct master_instance *inst;
-	const char *base_dir;
+	const char *base_dir, *instance_path;
 	int ret;
 
 	if (argc != 2)
 		instance_cmd_help(cmd_instance_remove);
 
-	list = master_instance_list_init(MASTER_INSTANCE_PATH);
+	instance_path = t_strconcat(service_set->state_dir,
+				    "/"MASTER_INSTANCE_FNAME, NULL);
+	list = master_instance_list_init(instance_path);
 	inst = master_instance_list_find_by_name(list, argv[1]);
 	base_dir = inst != NULL ? inst->base_dir : argv[1];
 	if ((ret = master_instance_list_remove(list, base_dir)) < 0) {
diff -r 5b89c50164de -r 543852ebb327 src/doveadm/doveadm-mount.c
--- a/src/doveadm/doveadm-mount.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/doveadm/doveadm-mount.c	Wed Aug 22 16:55:27 2012 +0300
@@ -1,6 +1,7 @@
 /* Copyright (c) 2012 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "master-service-settings.h"
 #include "mountpoint-list.h"
 #include "doveadm.h"
 #include "doveadm-print.h"
@@ -13,8 +14,9 @@
 {
 	const char *perm_path, *state_path;
 
-	perm_path = t_strconcat(PKG_STATEDIR"/"MOUNTPOINT_LIST_FNAME, NULL);
-	state_path = t_strconcat(doveadm_settings->base_dir,
+	perm_path = t_strconcat(service_set->state_dir,
+				 "/"MOUNTPOINT_LIST_FNAME, NULL);
+	state_path = t_strconcat(service_set->base_dir,
 				 "/"MOUNTPOINT_LIST_FNAME, NULL);
 	return mountpoint_list_init(perm_path, state_path);
 }
diff -r 5b89c50164de -r 543852ebb327 src/doveadm/doveadm-settings.c
--- a/src/doveadm/doveadm-settings.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/doveadm/doveadm-settings.c	Wed Aug 22 16:55:27 2012 +0300
@@ -102,6 +102,7 @@
 };
 
 struct doveadm_settings *doveadm_settings;
+const struct master_service_settings *service_set;
 
 static void
 fix_base_path(struct doveadm_settings *set, pool_t pool, const char **str)
diff -r 5b89c50164de -r 543852ebb327 src/doveadm/doveadm-settings.h
--- a/src/doveadm/doveadm-settings.h	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/doveadm/doveadm-settings.h	Wed Aug 22 16:55:27 2012 +0300
@@ -18,5 +18,6 @@
 
 extern const struct setting_parser_info doveadm_setting_parser_info;
 extern struct doveadm_settings *doveadm_settings;
+extern const struct master_service_settings *service_set;
 
 #endif
diff -r 5b89c50164de -r 543852ebb327 src/doveadm/doveadm.c
--- a/src/doveadm/doveadm.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/doveadm/doveadm.c	Wed Aug 22 16:55:27 2012 +0300
@@ -261,6 +261,10 @@
 					 &output, &error) < 0)
 		i_fatal("Error reading configuration: %s", error);
 
+	service_set = master_service_settings_get(master_service);
+	service_set = settings_dup(&master_service_setting_parser_info,
+				   service_set, pool_datastack_create());
+
 	set = master_service_settings_get_others(master_service)[0];
 	doveadm_settings = settings_dup(&doveadm_setting_parser_info, set,
 					pool_datastack_create());
diff -r 5b89c50164de -r 543852ebb327 src/lib-master/master-instance.h
--- a/src/lib-master/master-instance.h	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/lib-master/master-instance.h	Wed Aug 22 16:55:27 2012 +0300
@@ -1,7 +1,7 @@
 #ifndef MASTER_INSTANCE_H
 #define MASTER_INSTANCE_H
 
-#define MASTER_INSTANCE_PATH PKG_STATEDIR"/instances"
+#define MASTER_INSTANCE_FNAME "instances"
 
 struct master_instance_list;
 
diff -r 5b89c50164de -r 543852ebb327 src/lib-master/master-service-settings.c
--- a/src/lib-master/master-service-settings.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/lib-master/master-service-settings.c	Wed Aug 22 16:55:27 2012 +0300
@@ -35,6 +35,7 @@
 
 static const struct setting_define master_service_setting_defines[] = {
 	DEF(SET_STR, base_dir),
+	DEF(SET_STR, state_dir),
 	DEF(SET_STR, log_path),
 	DEF(SET_STR, info_log_path),
 	DEF(SET_STR, debug_log_path),
@@ -50,6 +51,7 @@
 
 static const struct master_service_settings master_service_default_settings = {
 	.base_dir = PKG_RUNDIR,
+	.state_dir = PKG_STATEDIR,
 	.log_path = "syslog",
 	.info_log_path = "",
 	.debug_log_path = "",
diff -r 5b89c50164de -r 543852ebb327 src/lib-master/master-service-settings.h
--- a/src/lib-master/master-service-settings.h	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/lib-master/master-service-settings.h	Wed Aug 22 16:55:27 2012 +0300
@@ -12,6 +12,7 @@
 
 struct master_service_settings {
 	const char *base_dir;
+	const char *state_dir;
 	const char *log_path;
 	const char *info_log_path;
 	const char *debug_log_path;
diff -r 5b89c50164de -r 543852ebb327 src/lib-master/master-service-ssl.c
--- a/src/lib-master/master-service-ssl.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/lib-master/master-service-ssl.c	Wed Aug 22 16:55:27 2012 +0300
@@ -50,8 +50,8 @@
 	if (ret < 0)
 		i_error("read(%s) failed: %m", path);
 	else if (ssl_iostream_context_import_params(service->ssl_ctx, buf) < 0) {
-		i_error("Corrupted SSL parameters file: "
-			PKG_STATEDIR"/ssl-parameters.dat - disabling SSL %u", (int)buf->used);
+		i_error("Corrupted SSL parameters file in state_dir: "
+			"ssl-parameters.dat - disabling SSL %u", (int)buf->used);
 		ret = -1;
 	}
 	i_close_fd(&fd);
diff -r 5b89c50164de -r 543852ebb327 src/lib-master/master-service.c
--- a/src/lib-master/master-service.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/lib-master/master-service.c	Wed Aug 22 16:55:27 2012 +0300
@@ -332,9 +332,11 @@
 {
 	struct master_instance_list *list;
 	const struct master_instance *inst;
-	const char *path;
+	const char *instance_path, *path;
 
-	list = master_instance_list_init(MASTER_INSTANCE_PATH);
+	instance_path = t_strconcat(master_service->set->state_dir,
+				    "/"MASTER_INSTANCE_FNAME, NULL);
+	list = master_instance_list_init(instance_path);
 	inst = master_instance_list_find_by_name(list, name);
 	if (inst != NULL) {
 		path = t_strdup_printf("%s/dovecot.conf", inst->base_dir);
diff -r 5b89c50164de -r 543852ebb327 src/login-common/ssl-proxy-openssl.c
--- a/src/login-common/ssl-proxy-openssl.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/login-common/ssl-proxy-openssl.c	Wed Aug 22 16:55:27 2012 +0300
@@ -154,8 +154,7 @@
 
 static void ssl_params_corrupted(void)
 {
-	i_fatal("Corrupted SSL parameters file: "
-		PKG_STATEDIR"/ssl-parameters.dat");
+	i_fatal("Corrupted SSL parameters file in state_dir: ssl-parameters.dat");
 }
 
 static void read_next(struct ssl_parameters *params, void *data, size_t size)
diff -r 5b89c50164de -r 543852ebb327 src/master/main.c
--- a/src/master/main.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/master/main.c	Wed Aug 22 16:55:27 2012 +0300
@@ -313,7 +313,7 @@
 	struct mountpoint_list *mountpoints;
 	const char *perm_path, *state_path;
 
-	perm_path = t_strconcat(PKG_STATEDIR"/"MOUNTPOINT_LIST_FNAME, NULL);
+	perm_path = t_strconcat(set->state_dir, "/"MOUNTPOINT_LIST_FNAME, NULL);
 	state_path = t_strconcat(set->base_dir, "/"MOUNTPOINT_LIST_FNAME, NULL);
 	mountpoints = mountpoint_list_init(perm_path, state_path);
 
@@ -342,9 +342,12 @@
 				  instance_update_now, list);
 }
 
-static void instance_update(void)
+static void instance_update(const struct master_settings *set)
 {
-	instances = master_instance_list_init(MASTER_INSTANCE_PATH);
+	const char *path;
+
+	path = t_strconcat(set->state_dir, "/"MASTER_INSTANCE_FNAME, NULL);
+	instances = master_instance_list_init(path);
 	instance_update_now(instances);
 }
 
@@ -540,7 +543,7 @@
 	create_pid_file(pidfile_path);
 	create_config_symlink(set);
 	mountpoints_update(set);
-	instance_update();
+	instance_update(set);
 
 	services_monitor_start(services);
 }
diff -r 5b89c50164de -r 543852ebb327 src/master/master-settings.c
--- a/src/master/master-settings.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/master/master-settings.c	Wed Aug 22 16:55:27 2012 +0300
@@ -171,6 +171,7 @@
 
 static const struct setting_define master_setting_defines[] = {
 	DEF(SET_STR, base_dir),
+	DEF(SET_STR, state_dir),
 	DEF(SET_STR, libexec_dir),
 	DEF(SET_STR, instance_name),
 	DEF(SET_STR, import_environment),
@@ -211,6 +212,7 @@
 
 static const struct master_settings master_default_settings = {
 	.base_dir = PKG_RUNDIR,
+	.state_dir = PKG_STATEDIR,
 	.libexec_dir = PKG_LIBEXECDIR,
 	.instance_name = PACKAGE,
 	.import_environment = "TZ" ENV_SYSTEMD ENV_GDB,
@@ -736,8 +738,8 @@
 	}
 
 	/* Make sure our permanent state directory exists */
-	if (mkdir_parents(PKG_STATEDIR, 0755) < 0 && errno != EEXIST)
-		i_fatal("mkdir(%s) failed: %m", PKG_STATEDIR);
+	if (mkdir_parents(set->state_dir, 0755) < 0 && errno != EEXIST)
+		i_fatal("mkdir(%s) failed: %m", set->state_dir);
 
 	login_dir = t_strconcat(set->base_dir, "/login", NULL);
 	if (settings_have_auth_unix_listeners_in(set, login_dir)) {
diff -r 5b89c50164de -r 543852ebb327 src/master/master-settings.h
--- a/src/master/master-settings.h	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/master/master-settings.h	Wed Aug 22 16:55:27 2012 +0300
@@ -5,6 +5,7 @@
 
 struct master_settings {
 	const char *base_dir;
+	const char *state_dir;
 	const char *libexec_dir;
 	const char *instance_name;
 	const char *import_environment;
diff -r 5b89c50164de -r 543852ebb327 src/replication/replicator/replicator.c
--- a/src/replication/replicator/replicator.c	Wed Aug 22 15:19:19 2012 +0300
+++ b/src/replication/replicator/replicator.c	Wed Aug 22 16:55:27 2012 +0300
@@ -13,10 +13,11 @@
 
 #define REPLICATOR_AUTH_SERVICE_NAME "replicator"
 #define REPLICATOR_DB_DUMP_INTERVAL_MSECS (1000*60*15)
-#define REPLICATOR_DB_PATH PKG_STATEDIR"/replicator.db"
+#define REPLICATOR_DB_FNAME "replicator.db"
 
 static struct replicator_queue *queue;
 static struct replicator_brain *brain;
+static const struct master_service_settings *service_set;
 static const struct replicator_settings *set;
 static struct timeout *to_dump;
 
@@ -32,7 +33,7 @@
 	struct auth_master_user_list_ctx *ctx;
 	struct auth_user_info user_info;


More information about the dovecot-cvs mailing list