login-settings.c revision f29756821a4c6b12b73e4a2a3e1c230117a43773
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch/* Copyright (c) 2005-2012 Dovecot authors, see the included COPYING file */
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic bool login_settings_check(void *_set, pool_t pool, const char **error_r);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch { type, #name, offsetof(struct login_settings, name), NULL }
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic const struct setting_define login_setting_defines[] = {
1d4c4128808d04cf4b8396ce04ce524da9194782Stephan Boschstatic const struct login_settings login_default_settings = {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch .login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c session=<%{session}>",
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschconst struct setting_parser_info login_setting_parser_info = {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic const struct setting_parser_info *default_login_set_roots[] = {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschconst struct setting_parser_info **login_set_roots = default_login_set_roots;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic struct master_service_settings_cache *set_cache;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch/* <settings checks> */
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic bool login_settings_check(void *_set, pool_t pool,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch p_strsplit(pool, set->login_log_format_elements, " ");
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch/* </settings checks> */
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschstatic const struct var_expand_table *
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschlogin_set_var_expand_table(const struct master_service_settings_input *input)
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch static struct var_expand_table static_tab[] = {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch tab[1].value = net_ip2addr(&input->remote_ip);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Boschlogin_setting_dup(pool_t pool, const struct setting_parser_info *info,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch if (!settings_check(info, pool, dest, &error)) {
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch const struct master_service_ssl_settings **ssl_set_r,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch unsigned int i, count;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch set_cache = master_service_settings_cache_init(master_service,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch if (master_service_settings_cache_read(set_cache, &input, NULL,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch i_fatal("Error reading configuration: %s", error);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch cache_sets = settings_parser_get_list(parser) +
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch for (count = 0; input.roots[count] != NULL; count++) ;
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch for (i = 0; i < count; i++)
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch sets[i] = login_setting_dup(pool, input.roots[i], cache_sets[i]);
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch settings_var_expand(&login_setting_parser_info, sets[0], pool,
56dd928c164ec5c0d1158a1760154b58c5f1f6e7Stephan Bosch login_setting_dup(pool, &master_service_ssl_setting_parser_info,