login-settings.c revision 97db4761382024093f441e4bc78ba8b6a056504d
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (c) 2005-2009 Dovecot authors, see the included COPYING file */
dd3ccdbb29dad006f7781ea138a5ba39727963c4Timo Sirainenstatic bool login_settings_check(void *_set, pool_t pool, const char **error_r);
6b6011c2242e470b41316f92512b282b5e306dacTimo Sirainen { type, #name, offsetof(struct login_settings, name), NULL }
ffaa309c211897ab875bbe0b093bc7e709bb1e5dTimo Sirainenstatic struct setting_define login_setting_defines[] = {
eed03830015b7138b9d4522e72bef650aa24b45fTimo Sirainenstatic struct login_settings login_default_settings = {
eed03830015b7138b9d4522e72bef650aa24b45fTimo Sirainen MEMBER(login_log_format_elements) "user=<%u> method=%m rip=%r lip=%l %c",
eed03830015b7138b9d4522e72bef650aa24b45fTimo Sirainen MEMBER(ssl_parameters_file) "ssl-parameters.dat",
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainenstruct setting_parser_info login_setting_parser_info = {
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen MEMBER(struct_size) sizeof(struct login_settings),
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen/* <settings checks> */
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainenstatic int ssl_settings_check(void *_set ATTR_UNUSED, const char **error_r)
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen *error_r = t_strdup_printf("SSL support not compiled in but ssl=%s",
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen *error_r = "ssl enabled, but ssl_cert not set";
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen *error_r = "ssl enabled, but ssl_key not set";
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen if (set->ssl_verify_client_cert && *set->ssl_ca_file == '\0') {
4fbf59562594dbbbe037f8d4c480dbf88f3fc708Timo Sirainen *error_r = "ssl_verify_client_cert set, but ssl_ca_file not";
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen if (*set->ssl_ca_file != '\0' && access(set->ssl_ca_file, R_OK) < 0) {
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen *error_r = t_strdup_printf("ssl_ca_file: access(%s) failed: %m",
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainenstatic bool login_settings_check(void *_set, pool_t pool, const char **error_r)
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen p_strsplit(pool, set->login_log_format_elements, " ");
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen if (set->ssl_require_client_cert || set->ssl_username_from_cert) {
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen /* if we require valid cert, make sure we also ask for it */
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen *error_r = "login_max_connections must be at least 1";
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen /* disabled */
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen } else if (strcmp(set->ssl, "required") == 0) {
38f624b427aa8b6fad3765e6efd97c85a7f97a09Timo Sirainen *error_r = t_strdup_printf("Unknown ssl setting value: %s",
38f624b427aa8b6fad3765e6efd97c85a7f97a09Timo Sirainen/* </settings checks> */
38f624b427aa8b6fad3765e6efd97c85a7f97a09Timo Sirainenlogin_settings_read(struct master_service *service, pool_t pool,
38f624b427aa8b6fad3765e6efd97c85a7f97a09Timo Sirainen static const struct setting_parser_info *set_roots[] = {
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen /* this function always clears the previous settings pool. since we're
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen doing per-connection lookups, we always need to duplicate the
65514ab6ccc1889e1667211fddb0cca4b51017dfTimo Sirainen settings using another pool. */
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen if (master_service_settings_read(service, &input, &error) < 0)
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen i_fatal("Error reading configuration: %s", error);
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen sets = master_service_settings_get_others(service);
315ce5be539bfe8bc7777ab0654499c49583cea2Timo Sirainen set = settings_dup(&login_setting_parser_info, sets[0], pool);
e5b06a21b5f857d7037fd6ff41ba3bd449d1232aTimo Sirainen i_fatal("login_settings_check() failed: %s", error);