login-settings.c revision efe78d3ba24fc866af1c79b9223dc0809ba26cad
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2005-2016 Dovecot authors, see the included COPYING file */
d63b4241643b6014d49ff356f14e0f3ee43068a8Timo Sirainenstatic bool login_settings_check(void *_set, pool_t pool, const char **error_r);
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen { type, #name, offsetof(struct login_settings, name), NULL }
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct setting_define login_setting_defines[] = {
c9d685897f9e7f0d5e27c00d4b03281d6049ccd1Timo Sirainen DEF(SET_TIME, login_proxy_max_disconnect_delay),
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenstatic const struct login_settings login_default_settings = {
f016dec9837e6a41867708e4b89ca5308dedab05Timo Sirainen .login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c session=<%{session}>",
7744586e3e0fd60158abfbb03a233d3bd8d6c48bTimo Sirainenconst struct setting_parser_info login_setting_parser_info = {
f059a046515f4b2b15a6c2a10a6f12f6166e39a5Timo Sirainenstatic const struct setting_parser_info *default_login_set_roots[] = {
f059a046515f4b2b15a6c2a10a6f12f6166e39a5Timo Sirainenconst struct setting_parser_info **login_set_roots = default_login_set_roots;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainenstatic struct master_service_settings_cache *set_cache;
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen/* <settings checks> */
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainenstatic bool login_settings_check(void *_set, pool_t pool,
97db4761382024093f441e4bc78ba8b6a056504dTimo Sirainen p_strsplit(pool, set->login_log_format_elements, " ");
b215a8a123623782554a83f3025ef4e771bd8f01Timo Sirainen/* </settings checks> */
ed4cdfe5847a6063d5a4684a6a47b17e943922b5Timo Sirainenstatic const struct var_expand_table *
ed4cdfe5847a6063d5a4684a6a47b17e943922b5Timo Sirainenlogin_set_var_expand_table(const struct master_service_settings_input *input)
acfda38b75d0f0e899ef692fef01593bd56ed85eTimo Sirainen { 'l', net_ip2addr(&input->local_ip), "lip" },
acfda38b75d0f0e899ef692fef01593bd56ed85eTimo Sirainen { 'r', net_ip2addr(&input->remote_ip), "rip" },
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainenlogin_setting_dup(pool_t pool, const struct setting_parser_info *info,
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainen if (!settings_check(info, pool, dest, &error)) {
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainen const struct master_service_ssl_settings **ssl_set_r,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen unsigned int i, count;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen set_cache = master_service_settings_cache_init(master_service,
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen if (master_service_settings_cache_read(set_cache, &input, NULL,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen i_fatal("Error reading configuration: %s", error);
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen cache_sets = master_service_settings_parser_get_others(master_service, parser);
9d6307357b77c1006fff39f324d4f536d456b170Timo Sirainen for (count = 0; input.roots[count] != NULL; count++) ;
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainen for (i = 0; i < count; i++)
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainen sets[i] = login_setting_dup(pool, input.roots[i], cache_sets[i]);
0f5dc4da3982053036be65190e44bf28a67b1ca2Timo Sirainen if (settings_var_expand(&login_setting_parser_info, sets[0], pool,
0f5dc4da3982053036be65190e44bf28a67b1ca2Timo Sirainen login_set_var_expand_table(&input), &error) <= 0)
0f5dc4da3982053036be65190e44bf28a67b1ca2Timo Sirainen i_fatal("Failed to expand settings: %s", error);
f29756821a4c6b12b73e4a2a3e1c230117a43773Timo Sirainen login_setting_dup(pool, &master_service_ssl_setting_parser_info,