login-settings.c revision 6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2005-2009 Dovecot authors, see the included COPYING file */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstatic bool login_settings_check(void *_set, pool_t pool, const char **error_r);
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen { type, #name, offsetof(struct login_settings, name), NULL }
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstatic struct setting_define login_setting_defines[] = {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstatic struct login_settings login_default_settings = {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen MEMBER(login_log_format_elements) "user=<%u> method=%m rip=%r lip=%l %c",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen MEMBER(ssl_cert_file) SSLDIR"/certs/dovecot.pem",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen MEMBER(ssl_key_file) SSLDIR"/private/dovecot.pem",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen MEMBER(ssl_parameters_file) "ssl-parameters.dat",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstruct setting_parser_info login_setting_parser_info = {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen MEMBER(struct_size) sizeof(struct login_settings),
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* <settings checks> */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstatic int ssl_settings_check(void *_set ATTR_UNUSED, const char **error_r)
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen *error_r = t_strdup_printf("SSL support not compiled in but ssl=%s",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen if (set->ssl_verify_client_cert && *set->ssl_ca_file == '\0') {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen *error_r = "ssl_verify_client_cert set, but ssl_ca_file not";
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen *error_r = t_strdup_printf("ssl_cert_file: access(%s) failed: %m",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen *error_r = t_strdup_printf("ssl_key_file: access(%s) failed: %m",
d48e40d6c77d673ad402d96571198d1cce4da225Timo Sirainen if (*set->ssl_ca_file != '\0' && access(set->ssl_ca_file, R_OK) < 0) {
b78d8dbe4179aabcbf9fda41d282673558dae4d6Timo Sirainen *error_r = t_strdup_printf("ssl_ca_file: access(%s) failed: %m",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstatic bool login_settings_check(void *_set, pool_t pool ATTR_UNUSED,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen const char **error_r)
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen t_strsplit(set->login_log_format_elements, " ");
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen if (set->ssl_require_client_cert || set->ssl_username_from_cert) {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen /* if we require valid cert, make sure we also ask for it */
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen *error_r = "login_max_connections must be at least 1";
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen /* disabled */
7db7fbea5d8a07463b625f93d69166d56018dadfTimo Sirainen } else if (strcmp(set->ssl, "required") == 0) {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen *error_r = t_strdup_printf("Unknown ssl setting value: %s",
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen/* </settings checks> */
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainenstruct login_settings *login_settings_read(struct master_service *service)
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen static const struct setting_parser_info *set_roots[] = {
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen if (master_service_settings_read(service, set_roots, NULL, FALSE,
96f89d51e8315f644f46804a9f0fc4f685ac48bfTimo Sirainen i_fatal("Error reading configuration: %s", error);