NULL
};
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
NULL
};
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
{
const char *match = "";
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
NULL
};
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
if (fd != -1) {
if (config_parser_add_seen_file_fd(&ctx, fd, path, error_r) < 0)
return -1;
+ } else {
+ /* stat contents don't matter for defaults, as long as they
+ don't change. */
+ struct stat st;
+ i_zero(&st);
+ config_parser_add_seen_file(&ctx, &st,
+ MASTER_SERVICE_BINARY_CONFIG_DEFAULTS);
}
for (count = 0; all_infos[count] != NULL; count++) ;
int main(int argc, char *argv[])
{
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
int main(int argc, char *argv[])
{
const enum master_service_flags service_flags =
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_STD_CLIENT |
MASTER_SERVICE_FLAG_DONT_SEND_STATS;
t_array_init(&conf_argv, 11 + (service->argc + 1) + 1);
strarr_push(&conf_argv, DOVECOT_CONFIG_BIN_PATH);
- strarr_push(&conf_argv, "-c");
- strarr_push(&conf_argv, service->config_path);
+ if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+ strarr_push(&conf_argv, "-d");
+ else {
+ strarr_push(&conf_argv, "-c");
+ strarr_push(&conf_argv, service->config_path);
+ }
if (input->check_full_config)
strarr_push(&conf_argv, "-C");
const char *path;
int fd = -1;
+ if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+ path = MASTER_SERVICE_BINARY_CONFIG_DEFAULTS;
+ else if (input->config_path != NULL)
+ path = input->config_path;
+ else
+ path = master_service_get_config_path(service);
+ *path_r = path;
*cached_config_r = FALSE;
- *path_r = path = input->config_path != NULL ? input->config_path :
- master_service_get_config_path(service);
+
if ((fd = master_service_binary_config_cache_get(cache_dir, path)) != -1) {
*cached_config_r = TRUE;
return fd;
}
+ if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_DEFAULTS) != 0)
+ master_service_exec_config(service, input);
+
if (!service->config_path_from_master &&
!service->config_path_changed_with_param &&
!input->always_exec &&
if (str_to_int(value, &fd) < 0 || fd < 0)
i_fatal("Invalid "DOVECOT_CONFIG_FD_ENV": %s", value);
path = t_strdup_printf("<"DOVECOT_CONFIG_FD_ENV" %d>", fd);
- } else if ((service->flags & MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS) == 0) {
+ } else if ((service->flags & MASTER_SERVICE_FLAG_CONFIG_BUILTIN) == 0) {
/* Open config via socket if possible. If it doesn't work,
execute doveconf -F. */
T_BEGIN {
#ifndef MASTER_SERVICE_SETTINGS_H
#define MASTER_SERVICE_SETTINGS_H
+#define MASTER_SERVICE_BINARY_CONFIG_DEFAULTS "<default config>"
+
/* <settings checks> */
#ifdef DOVECOT_PRO_EDITION
# define VERBOSE_PROCTITLE_DEFAULT TRUE
array_push_back(&service->config_overrides, &arg);
break;
case 'O':
- service->flags |= MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS;
+ service->flags |= MASTER_SERVICE_FLAG_CONFIG_DEFAULTS;
break;
case 'L':
service->log_directly = TRUE;
/* Log to configured log file instead of stderr. By default when
_FLAG_STANDALONE is set, logging is done to stderr. */
MASTER_SERVICE_FLAG_DONT_LOG_TO_STDERR = 0x04,
- /* Don't read settings, but use whatever is in environment */
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS = 0x10,
+ /* Use only default settings (by executing doveconf -dF) */
+ MASTER_SERVICE_FLAG_CONFIG_DEFAULTS = 0x10,
+ /* Use only built-in settings (do not execute doveconf). If any
+ settings are overridden, their infos must be registered with
+ settings_info_register(). Used by unit tests. */
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN = 0x20,
/* Use MASTER_LOGIN_NOTIFY_FD to track login overflow state */
MASTER_SERVICE_FLAG_TRACK_LOGIN_STATE = 0x40,
/* If master sends SIGINT, don't die even if we don't have clients */
master_service = master_service_init("test-mail-storage",
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_DONT_SEND_STATS |
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_NO_SSL_INIT |
MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
&argc, &argv, "");
master_service = master_service_init("test-mail",
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_DONT_SEND_STATS |
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_NO_SSL_INIT |
MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
&argc, &argv, "");
master_service = master_service_init("test-mail-key",
MASTER_SERVICE_FLAG_STANDALONE |
MASTER_SERVICE_FLAG_DONT_SEND_STATS |
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS |
+ MASTER_SERVICE_FLAG_CONFIG_BUILTIN |
MASTER_SERVICE_FLAG_NO_SSL_INIT |
MASTER_SERVICE_FLAG_NO_INIT_DATASTACK_FRAME,
&argc, &argv, "");
params.base_dir = PKG_RUNDIR;
master_service = master_service_init("test-fs",
MASTER_SERVICE_FLAG_STANDALONE |
- MASTER_SERVICE_FLAG_NO_CONFIG_SETTINGS,
+ MASTER_SERVICE_FLAG_CONFIG_DEFAULTS,
&argc, &argv, "Daf:p:st:u:");
while ((c = master_getopt(master_service)) > 0) {
switch (c) {