doveadm-settings.c revision 0ed18ece24069cc58be20f5f1cd5980f1ed37f2a
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen#include "lib.h"
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen#include "buffer.h"
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen#include "settings-parser.h"
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen#include "service-settings.h"
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen#include "mail-storage-settings.h"
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen#include "doveadm-settings.h"
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatic bool doveadm_settings_check(void *_set, pool_t pool, const char **error_r);
a8fe899601735459641edae975c0fa08be8482e2Timo Sirainen
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen/* <settings checks> */
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatic struct file_listener_settings doveadm_unix_listeners_array[] = {
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen { "doveadm-server", 0600, "", "" }
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen};
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainenstatic struct file_listener_settings *doveadm_unix_listeners[] = {
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen &doveadm_unix_listeners_array[0]
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen};
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainenstatic buffer_t doveadm_unix_listeners_buf = {
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen doveadm_unix_listeners, sizeof(doveadm_unix_listeners), { 0, }
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen};
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen/* </settings checks> */
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainenstruct service_settings doveadm_service_settings = {
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen .name = "doveadm",
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen .protocol = "",
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen .type = "",
6c00502d4ece417ead501db8f0ee3e8287ba4459Timo Sirainen .executable = "doveadm-server",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .user = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .group = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .privileged_group = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .extra_groups = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .chroot = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .drop_priv_before_exec = FALSE,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .process_min_avail = 0,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .process_limit = 0,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .client_limit = 1,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .service_count = 1,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .idle_kill = 0,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .vsz_limit = (uoff_t)-1,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .unix_listeners = { { &doveadm_unix_listeners_buf,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen sizeof(doveadm_unix_listeners[0]) } },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .fifo_listeners = ARRAY_INIT,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .inet_listeners = ARRAY_INIT
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen};
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen#undef DEF
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen#define DEF(type, name) \
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { type, #name, offsetof(struct doveadm_settings, name), NULL }
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainenstatic const struct setting_define doveadm_setting_defines[] = {
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, base_dir),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, mail_plugins),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, mail_plugin_dir),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, doveadm_socket_path),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_UINT, doveadm_worker_count),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_UINT, doveadm_proxy_port),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, doveadm_password),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, doveadm_allowed_commands),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, dsync_alt_char),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen DEF(SET_STR, dsync_remote_cmd),
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen { SET_STRLIST, "plugin", offsetof(struct doveadm_settings, plugin_envs), NULL },
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen SETTING_DEFINE_LIST_END
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen};
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainenconst struct doveadm_settings doveadm_default_settings = {
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .base_dir = PKG_RUNDIR,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .mail_plugins = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .mail_plugin_dir = MODULEDIR,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .doveadm_socket_path = "doveadm-server",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .doveadm_worker_count = 0,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .doveadm_proxy_port = 0,
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .doveadm_password = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .doveadm_allowed_commands = "",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .dsync_alt_char = "_",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .dsync_remote_cmd = "ssh -l%{login} %{host} doveadm dsync-server -u%u -l%{lock_timeout}",
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen .plugin_envs = ARRAY_INIT
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen};
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatic const struct setting_parser_info *doveadm_setting_dependencies[] = {
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen &mail_user_setting_parser_info,
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen NULL
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen};
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen
402e999a878e0cc41a0afb830fea0a93afc75f0dTimo Sirainenconst struct setting_parser_info doveadm_setting_parser_info = {
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen .module_name = "doveadm",
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen .defines = doveadm_setting_defines,
ecf44c74416ffa4e7c331e49a1e283be6b1aa668Timo Sirainen .defaults = &doveadm_default_settings,
ecf44c74416ffa4e7c331e49a1e283be6b1aa668Timo Sirainen
ecf44c74416ffa4e7c331e49a1e283be6b1aa668Timo Sirainen .type_offset = (size_t)-1,
ecf44c74416ffa4e7c331e49a1e283be6b1aa668Timo Sirainen .struct_size = sizeof(struct doveadm_settings),
402e999a878e0cc41a0afb830fea0a93afc75f0dTimo Sirainen
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen .parent_offset = (size_t)-1,
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen .check_func = doveadm_settings_check,
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen .dependencies = doveadm_setting_dependencies
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen};
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainenstruct doveadm_settings *doveadm_settings;
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainenstatic void
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainenfix_base_path(struct doveadm_settings *set, pool_t pool, const char **str)
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen{
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen if (*str != NULL && **str != '\0' && **str != '/')
fcaf124d4a727424a338cccfd4274c2393818cd3Timo Sirainen *str = p_strconcat(pool, set->base_dir, "/", *str, NULL);
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen}
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen
402e999a878e0cc41a0afb830fea0a93afc75f0dTimo Sirainen/* <settings checks> */
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainenstatic bool doveadm_settings_check(void *_set ATTR_UNUSED,
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen pool_t pool ATTR_UNUSED,
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen const char **error_r ATTR_UNUSED)
421d30619384e72a27e2a5d13ff6525aff4d17feTimo Sirainen{
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen#ifndef CONFIG_BINARY
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen struct doveadm_settings *set = _set;
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen fix_base_path(set, pool, &set->doveadm_socket_path);
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen#endif
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen return TRUE;
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen}
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen/* </settings checks> */
643a81fff9003cba13deb49a565a3c8171da524dTimo Sirainen