auth-settings.c revision 9dd1c256910f1fb42823116a641e7edb3ad11970
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (c) 2005-2009 Dovecot authors, see the included COPYING file */
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#include "lib.h"
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#include "array.h"
9d92ea347e1c098fa33ea517514dfdc0bb8995e2Timo Sirainen#include "settings-parser.h"
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#include "master-service-settings.h"
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#include "service-settings.h"
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang#include "auth-settings.h"
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#include <stddef.h>
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wangextern const struct setting_parser_info auth_setting_parser_info;
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenextern const struct setting_parser_info auth_root_setting_parser_info;
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool, const char **error_r);
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenstatic bool auth_passdb_settings_check(void *_set, pool_t pool, const char **error_r);
998395f6743fbecc07ee65ae08c416fa6cea9e09Teemu Huovilastatic bool auth_userdb_settings_check(void *_set, pool_t pool, const char **error_r);
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang/* <settings checks> */
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wangstatic struct file_listener_settings auth_unix_listeners_array[] = {
eb568e46e82bc814ca3384236a483691a12f9c54Baofeng Wang { "login/auth", 0666, "", "" },
eb568e46e82bc814ca3384236a483691a12f9c54Baofeng Wang { "auth-userdb", 0600, "", "" },
eb568e46e82bc814ca3384236a483691a12f9c54Baofeng Wang { "auth-master", 0600, "", "" }
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstatic struct file_listener_settings *auth_unix_listeners[] = {
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen &auth_unix_listeners_array[0],
3448096d5b1cd324ed5132045de0345cd7120a25Timo Sirainen &auth_unix_listeners_array[1],
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen &auth_unix_listeners_array[2]
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstatic buffer_t auth_unix_listeners_buf = {
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody auth_unix_listeners, sizeof(auth_unix_listeners), { 0, }
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody};
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody/* </settings checks> */
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstruct service_settings auth_service_settings = {
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .name = "auth",
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen .protocol = "",
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen .type = "",
72c4ef3b44c50c662b37bba93b463b0caeb63a4fTimo Sirainen .executable = "auth",
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila .user = "",
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody .group = "",
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody .privileged_group = "",
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .extra_groups = "",
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .chroot = "",
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .drop_priv_before_exec = FALSE,
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .process_min_avail = 0,
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .process_limit = 1,
202468f94e6c6c8b5d3d98ee74e01bb0d0bb04aaTimo Sirainen .client_limit = 0,
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen .service_count = 0,
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen .vsz_limit = -1U,
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen .unix_listeners = { { &auth_unix_listeners_buf,
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen sizeof(auth_unix_listeners[0]) } },
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .fifo_listeners = ARRAY_INIT,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .inet_listeners = ARRAY_INIT
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen/* <settings checks> */
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstatic struct file_listener_settings auth_worker_unix_listeners_array[] = {
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila { "auth-worker", 0600, "", "" }
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovilastatic struct file_listener_settings *auth_worker_unix_listeners[] = {
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila &auth_worker_unix_listeners_array[0]
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstatic buffer_t auth_worker_unix_listeners_buf = {
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen auth_worker_unix_listeners, sizeof(auth_worker_unix_listeners), { 0, }
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen};
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen/* </settings checks> */
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainenstruct service_settings auth_worker_service_settings = {
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen .name = "auth-worker",
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen .protocol = "",
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen .type = "",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .executable = "auth -w",
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .user = "",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .group = "",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .privileged_group = "",
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .extra_groups = "",
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .chroot = "",
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen
2ac5f36aa7c2e7a07ba8815d43a6d7483f62e74cTimo Sirainen .drop_priv_before_exec = FALSE,
2ac5f36aa7c2e7a07ba8815d43a6d7483f62e74cTimo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .process_min_avail = 0,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .process_limit = 0,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .client_limit = 1,
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen .service_count = 0,
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang .vsz_limit = -1U,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .unix_listeners = { { &auth_worker_unix_listeners_buf,
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen sizeof(auth_worker_unix_listeners[0]) } },
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang .fifo_listeners = ARRAY_INIT,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .inet_listeners = ARRAY_INIT
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#undef DEF
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#define DEF(type, name) \
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen { type, #name, offsetof(struct auth_passdb_settings, name), NULL }
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenstatic const struct setting_define auth_passdb_setting_defines[] = {
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen DEF(SET_STR, driver),
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang DEF(SET_STR, args),
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen DEF(SET_BOOL, deny),
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen DEF(SET_BOOL, pass),
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen DEF(SET_BOOL, master),
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang SETTING_DEFINE_LIST_END
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenconst struct setting_parser_info auth_passdb_setting_parser_info = {
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .defines = auth_passdb_setting_defines,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .type_offset = (size_t)-1,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .struct_size = sizeof(struct auth_passdb_settings),
62461eb609e1d852e027cf4e07d30d51288678a2Aki Tuomi
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .parent_offset = (size_t)-1,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .parent = &auth_setting_parser_info,
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang .check_func = auth_passdb_settings_check
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#undef DEF
8b1a9a4d63b0abccdf7cb1acb8359d5396dd657bTimo Sirainen#define DEF(type, name) \
507ea0bc5b25efb4c96033a19dec66689a50ebd0Baofeng Wang { type, #name, offsetof(struct auth_userdb_settings, name), NULL }
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenstatic const struct setting_define auth_userdb_setting_defines[] = {
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen DEF(SET_STR, driver),
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila DEF(SET_STR, args),
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen SETTING_DEFINE_LIST_END
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenconst struct setting_parser_info auth_userdb_setting_parser_info = {
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .defines = auth_userdb_setting_defines,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .type_offset = (size_t)-1,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .struct_size = sizeof(struct auth_userdb_settings),
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .parent_offset = (size_t)-1,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .parent = &auth_setting_parser_info,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .check_func = auth_userdb_settings_check
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen/* we're kind of kludging here to avoid "auth_" prefix in the struct fields */
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#undef DEF
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#undef DEFLIST
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen#define DEF(type, name) \
3448096d5b1cd324ed5132045de0345cd7120a25Timo Sirainen { type, "auth_"#name, offsetof(struct auth_settings, name), NULL }
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen#define DEFLIST(field, name, defines) \
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen { SET_DEFLIST, name, offsetof(struct auth_settings, field), defines }
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainenstatic const struct setting_define auth_setting_defines[] = {
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen DEF(SET_STR, mechanisms),
78f87ea1d30f3f54bdf8560ea947ab7ee094283aTeemu Huovila DEF(SET_STR, realms),
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen DEF(SET_STR, default_realm),
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen DEF(SET_SIZE, cache_size),
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen DEF(SET_TIME, cache_ttl),
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen DEF(SET_TIME, cache_negative_ttl),
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila DEF(SET_STR, username_chars),
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila DEF(SET_STR, username_translation),
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila DEF(SET_STR, username_format),
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody DEF(SET_STR, master_user_separator),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_STR, anonymous_username),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_STR, krb5_keytab),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_STR, gssapi_hostname),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_STR, winbind_helper_path),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_TIME, failure_delay),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_BOOL, verbose),
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen DEF(SET_BOOL, debug),
202468f94e6c6c8b5d3d98ee74e01bb0d0bb04aaTimo Sirainen DEF(SET_BOOL, debug_passwords),
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen DEF(SET_BOOL, ssl_require_client_cert),
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen DEF(SET_BOOL, ssl_username_from_cert),
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen DEF(SET_BOOL, use_winbind),
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen DEF(SET_UINT, worker_max_count),
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen SETTING_DEFINE_LIST_END
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen};
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovilastatic const struct auth_settings auth_default_settings = {
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .mechanisms = "plain",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .realms = "",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .default_realm = "",
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .cache_size = 0,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .cache_ttl = 60*60,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .cache_negative_ttl = 0,
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen .username_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .username_translation = "",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .username_format = "",
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .master_user_separator = "",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .anonymous_username = "anonymous",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .krb5_keytab = "",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .gssapi_hostname = "",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .winbind_helper_path = "/usr/bin/ntlm_auth",
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .failure_delay = 2,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .verbose = FALSE,
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen .debug = FALSE,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .debug_passwords = FALSE,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .ssl_require_client_cert = FALSE,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .ssl_username_from_cert = FALSE,
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .use_winbind = FALSE,
3448096d5b1cd324ed5132045de0345cd7120a25Timo Sirainen
fdf70410de49eadfbb77997bb60ebba19aee4752Teemu Huovila .worker_max_count = 30,
fdf70410de49eadfbb77997bb60ebba19aee4752Teemu Huovila
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody .passdbs = ARRAY_INIT,
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen .userdbs = ARRAY_INIT
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen};
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen
fdf70410de49eadfbb77997bb60ebba19aee4752Teemu Huovilaconst struct setting_parser_info auth_setting_parser_info = {
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen .module_name = "auth",
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen .defines = auth_setting_defines,
b04e76cbc807707d299055be79500f8ff131da43Timo Sirainen .defaults = &auth_default_settings,
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila .type_offset = (size_t)-1,
0c5854b6891c59c1c3f443569bc823d7db571582Teemu Huovila .struct_size = sizeof(struct auth_settings),
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .parent_offset = (size_t)-1,
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen .check_func = auth_settings_check
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen};
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen/* <settings checks> */
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool ATTR_UNUSED,
b6b06530d654f0436bfbaefc1e988d53fff0cbeeTimo Sirainen const char **error_r ATTR_UNUSED)
202468f94e6c6c8b5d3d98ee74e01bb0d0bb04aaTimo Sirainen{
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen struct auth_settings *set = _set;
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen if (set->debug_passwords)
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen set->debug = TRUE;
83172e28d4ac684dfed83f7c9db933493d7c5922Timo Sirainen if (set->debug)
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen set->verbose = TRUE;
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen return TRUE;
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen}
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainenstatic bool
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainenauth_passdb_settings_check(void *_set, pool_t pool ATTR_UNUSED,
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila const char **error_r)
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen{
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen struct auth_passdb_settings *set = _set;
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
568fec5b1e629f25d288b48007485b9aa4a018b1Timo Sirainen if (set->driver == NULL || *set->driver == '\0') {
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen *error_r = "passdb is missing driver";
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen return FALSE;
f5c0d5cada4da23a167c38426d0c481a3e1d5583Timo Sirainen }
62fc0b4f07eb6f18a3bff4b1fccb636e6fae3cf4Timo Sirainen return TRUE;
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen}
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainen
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainenstatic bool
c865b0e9c65fd77f7b2ab6f8616d3def5501ecb3Timo Sirainenauth_userdb_settings_check(void *_set, pool_t pool ATTR_UNUSED,
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila const char **error_r)
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila{
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila struct auth_userdb_settings *set = _set;
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila if (set->driver == NULL || *set->driver == '\0') {
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila *error_r = "passdb is missing driver";
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila return FALSE;
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila }
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila return TRUE;
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila}
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila/* </settings checks> */
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovilastruct auth_settings *
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovilaauth_settings_read(struct master_service *service)
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila{
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila static const struct setting_parser_info *set_roots[] = {
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila &auth_setting_parser_info,
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila NULL
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila };
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila const char *error;
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila void **sets;
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila
19ed8f08b23d6ed204e6b27e5d1c0c6fe6bb11ddPhil Carmody if (master_service_settings_read_simple(service, set_roots, &error) < 0)
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila i_fatal("Error reading configuration: %s", error);
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila sets = master_service_settings_get_others(service);
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila return sets[0];
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila}
3a54211bd6c4dc3f8687c16020770551cf83a548Teemu Huovila