auth-settings.c revision 380dbb60ae291cbe39d1f710284562ca9167150b
b9f30617c2c96d54acbc4f85ed17b939c4f28916Timo Sirainen/* Copyright (c) 2005-2009 Dovecot authors, see the included COPYING file */
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#include "lib.h"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#include "array.h"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#include "settings-parser.h"
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include "master-service-settings.h"
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen#include "service-settings.h"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#include "auth-settings.h"
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#include <stddef.h>
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct setting_parser_info auth_setting_parser_info;
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenextern const struct setting_parser_info auth_root_setting_parser_info;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool, const char **error_r);
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen/* <settings checks> */
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic struct file_listener_settings auth_unix_listeners_array[] = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen { "login/auth", 0666, "", "" },
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen { "auth-userdb", 0600, "", "" },
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen { "auth-master", 0600, "", "" }
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic struct file_listener_settings *auth_unix_listeners[] = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen &auth_unix_listeners_array[0],
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen &auth_unix_listeners_array[1],
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen &auth_unix_listeners_array[2]
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic buffer_t auth_unix_listeners_buf = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen auth_unix_listeners, sizeof(auth_unix_listeners), { 0, }
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen/* </settings checks> */
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstruct service_settings auth_service_settings = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .name = "auth",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .protocol = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .type = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .executable = "auth",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .user = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .group = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .privileged_group = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .extra_groups = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .chroot = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .drop_priv_before_exec = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .process_min_avail = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .process_limit = 1,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .client_limit = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .service_count = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .vsz_limit = -1U,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .unix_listeners = { { &auth_unix_listeners_buf,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen sizeof(auth_unix_listeners[0]) } },
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .fifo_listeners = ARRAY_INIT,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .inet_listeners = ARRAY_INIT
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen/* <settings checks> */
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic struct file_listener_settings auth_worker_unix_listeners_array[] = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen { "auth-worker", 0600, "", "" }
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic struct file_listener_settings *auth_worker_unix_listeners[] = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen &auth_worker_unix_listeners_array[0]
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstatic buffer_t auth_worker_unix_listeners_buf = {
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen auth_worker_unix_listeners, sizeof(auth_worker_unix_listeners), { 0, }
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen/* </settings checks> */
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainenstruct service_settings auth_worker_service_settings = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .name = "auth-worker",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .protocol = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .type = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .executable = "auth -w",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .user = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .group = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .privileged_group = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .extra_groups = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .chroot = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .drop_priv_before_exec = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .process_min_avail = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .process_limit = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .client_limit = 1,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .service_count = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .vsz_limit = -1U,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .unix_listeners = { { &auth_worker_unix_listeners_buf,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen sizeof(auth_worker_unix_listeners[0]) } },
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .fifo_listeners = ARRAY_INIT,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .inet_listeners = ARRAY_INIT
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen};
9f0f2de10e4ea0c99052bf4b2bef8179f2536228Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#undef DEF
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define DEF(type, name) \
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen { type, #name, offsetof(struct auth_passdb_settings, name), NULL }
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct setting_define auth_passdb_setting_defines[] = {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, driver),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, args),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, deny),
380dbb60ae291cbe39d1f710284562ca9167150bTimo Sirainen DEF(SET_BOOL, pass),
380dbb60ae291cbe39d1f710284562ca9167150bTimo Sirainen DEF(SET_BOOL, master),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen SETTING_DEFINE_LIST_END
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenconst struct setting_parser_info auth_passdb_setting_parser_info = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .defines = auth_passdb_setting_defines,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .type_offset = offsetof(struct auth_passdb_settings, driver),
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .struct_size = sizeof(struct auth_passdb_settings),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .parent_offset = (size_t)-1,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .parent = &auth_setting_parser_info
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#undef DEF
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define DEF(type, name) \
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen { type, #name, offsetof(struct auth_userdb_settings, name), NULL }
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct setting_define auth_userdb_setting_defines[] = {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, driver),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, args),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen SETTING_DEFINE_LIST_END
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenconst struct setting_parser_info auth_userdb_setting_parser_info = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .defines = auth_userdb_setting_defines,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .type_offset = offsetof(struct auth_userdb_settings, driver),
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .struct_size = sizeof(struct auth_userdb_settings),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .parent_offset = (size_t)-1,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .parent = &auth_setting_parser_info
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
57d2429fae575e96ca276355af675deb66b76d00Timo Sirainen/* we're kind of kludging here to avoid "auth_" prefix in the struct fields */
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#undef DEF
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#undef DEFLIST
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define DEF(type, name) \
57d2429fae575e96ca276355af675deb66b76d00Timo Sirainen { type, "auth_"#name, offsetof(struct auth_settings, name), NULL }
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen#define DEFLIST(field, name, defines) \
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen { SET_DEFLIST, name, offsetof(struct auth_settings, field), defines }
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct setting_define auth_setting_defines[] = {
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, mechanisms),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, realms),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, default_realm),
61618d4c58080570f689614fec204ae14e90cef2Timo Sirainen DEF(SET_SIZE, cache_size),
50e20db49f29917fe9adcf1b56b11badf28bd0e4Timo Sirainen DEF(SET_TIME, cache_ttl),
50e20db49f29917fe9adcf1b56b11badf28bd0e4Timo Sirainen DEF(SET_TIME, cache_negative_ttl),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, username_chars),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, username_translation),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, username_format),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, master_user_separator),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, anonymous_username),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, krb5_keytab),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, gssapi_hostname),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_STR, winbind_helper_path),
50e20db49f29917fe9adcf1b56b11badf28bd0e4Timo Sirainen DEF(SET_TIME, failure_delay),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, verbose),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, debug),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, debug_passwords),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, ssl_require_client_cert),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, ssl_username_from_cert),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_BOOL, use_winbind),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEF(SET_UINT, worker_max_count),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen SETTING_DEFINE_LIST_END
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct auth_settings auth_default_settings = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .mechanisms = "plain",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .realms = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .default_realm = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .cache_size = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .cache_ttl = 60*60,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .cache_negative_ttl = 0,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .username_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .username_translation = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .username_format = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .master_user_separator = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .anonymous_username = "anonymous",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .krb5_keytab = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .gssapi_hostname = "",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .winbind_helper_path = "/usr/bin/ntlm_auth",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .failure_delay = 2,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .verbose = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .debug = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .debug_passwords = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .ssl_require_client_cert = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .ssl_username_from_cert = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .use_winbind = FALSE,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .worker_max_count = 30,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .passdbs = ARRAY_INIT,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .userdbs = ARRAY_INIT
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenconst struct setting_parser_info auth_setting_parser_info = {
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .module_name = "auth",
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .defines = auth_setting_defines,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .defaults = &auth_default_settings,
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .type_offset = (size_t)-1,
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .struct_size = sizeof(struct auth_settings),
383d0e8c24451468d6bea17e4b55d74de744abe6Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .parent_offset = (size_t)-1,
383d0e8c24451468d6bea17e4b55d74de744abe6Timo Sirainen
7bafda1813454621e03615e83d55bccfa7cc56bdTimo Sirainen .check_func = auth_settings_check
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen};
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen/* <settings checks> */
9575316ab47b32f14c5f8527bbb9673b2827dee0Timo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool ATTR_UNUSED,
2024157e8de36edd31f5fd72f5ea7364a0955fa7Timo Sirainen const char **error_r ATTR_UNUSED)
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen{
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen struct auth_settings *set = _set;
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen
15f526e5ac611b4532568d131fcd0abf664abe41Timo Sirainen if (set->debug_passwords)
15f526e5ac611b4532568d131fcd0abf664abe41Timo Sirainen set->debug = TRUE;
15f526e5ac611b4532568d131fcd0abf664abe41Timo Sirainen if (set->debug)
15f526e5ac611b4532568d131fcd0abf664abe41Timo Sirainen set->verbose = TRUE;
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen return TRUE;
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen}
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen/* </settings checks> */
d477acb83e14a776ece4ca94dcd1869e75d0c6eeTimo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstruct auth_settings *
2024157e8de36edd31f5fd72f5ea7364a0955fa7Timo Sirainenauth_settings_read(struct master_service *service)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen static const struct setting_parser_info *set_roots[] = {
2024157e8de36edd31f5fd72f5ea7364a0955fa7Timo Sirainen &auth_setting_parser_info,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen NULL
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen };
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen const char *error;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen void **sets;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen
44aac2d461b4cb8e05e8c07f2f209372997a8719Timo Sirainen if (master_service_settings_read_simple(service, set_roots, &error) < 0)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen i_fatal("Error reading configuration: %s", error);
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen sets = master_service_settings_get_others(service);
2024157e8de36edd31f5fd72f5ea7364a0955fa7Timo Sirainen return sets[0];
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen}