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