auth-settings.c revision f01eb1f51d618633c0189be9ab60a774f47fb7df
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* Copyright (c) 2005-2012 Dovecot authors, see the included COPYING file */
e4fb5bfcdff32d337d054cce36e00e1cdfaae9f8Timo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool, const char **error_r);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic bool auth_passdb_settings_check(void *_set, pool_t pool, const char **error_r);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic bool auth_userdb_settings_check(void *_set, pool_t pool, const char **error_r);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* <settings checks> */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic struct file_listener_settings auth_unix_listeners_array[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { "auth-login", 0600, "$default_internal_user", "" },
31ddc75584c5cde53d2e78a737587f2e7fdcb0d2Timo Sirainen { "auth-userdb", 0666, "$default_internal_user", "" },
31ddc75584c5cde53d2e78a737587f2e7fdcb0d2Timo Sirainenstatic struct file_listener_settings *auth_unix_listeners[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen auth_unix_listeners, sizeof(auth_unix_listeners), { 0, }
fd3d711f219fd6813492acbe051e04327f0ca0f0Timo Sirainen/* </settings checks> */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct service_settings auth_service_settings = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .unix_listeners = { { &auth_unix_listeners_buf,
024815ea2ffdda9ea79919f18e865663977f73eaTimo Sirainen/* <settings checks> */
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainenstatic struct file_listener_settings auth_worker_unix_listeners_array[] = {
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainen { "auth-worker", 0600, "$default_internal_user", "" }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic struct file_listener_settings *auth_worker_unix_listeners[] = {
8e7da21696c9f8a6d5e601243fb6172ec85d47b2Timo Sirainenstatic buffer_t auth_worker_unix_listeners_buf = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen auth_worker_unix_listeners, sizeof(auth_worker_unix_listeners), { 0, }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* </settings checks> */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstruct service_settings auth_worker_service_settings = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .unix_listeners = { { &auth_worker_unix_listeners_buf,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { type, #name, offsetof(struct auth_passdb_settings, name), NULL }
d8b77aef97e89f1ccc5cbdaef77be9052279e35fTimo Sirainenstatic const struct setting_define auth_passdb_setting_defines[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const struct auth_passdb_settings auth_passdb_default_settings = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .skip = "never:authenticated:unauthenticated",
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .result_success = "return-ok:return:return-fail:continue:continue-ok:continue-fail",
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .result_failure = "continue:return:return-ok:return-fail:continue-ok:continue-fail",
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .result_internalfail = "continue:return:return-ok:return-fail:continue-ok:continue-fail",
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconst struct setting_parser_info auth_passdb_setting_parser_info = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .struct_size = sizeof(struct auth_passdb_settings),
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { type, #name, offsetof(struct auth_userdb_settings, name), NULL }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const struct setting_define auth_userdb_setting_defines[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const struct auth_userdb_settings auth_userdb_default_settings = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconst struct setting_parser_info auth_userdb_setting_parser_info = {
24fc71a693331ffe77e2b6d81c70aca6fa055e47Timo Sirainen .struct_size = sizeof(struct auth_userdb_settings),
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* we're kind of kludging here to avoid "auth_" prefix in the struct fields */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { type, "auth_"#name, offsetof(struct auth_settings, name), NULL }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen { type, #name, offsetof(struct auth_settings, name), NULL }
b92813e2f96d4b28f989528ed5dd6115da7d9bdbTimo Sirainen { SET_DEFLIST, name, offsetof(struct auth_settings, field), defines }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const struct setting_define auth_setting_defines[] = {
b35f7104715edee0cfac6d46ab0b342033867eb7Timo Sirainen DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
b35f7104715edee0cfac6d46ab0b342033867eb7Timo Sirainen DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenstatic const struct auth_settings auth_default_settings = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen .username_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@",
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconst struct setting_parser_info auth_setting_parser_info = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* <settings checks> */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenauth_settings_set_self_ips(struct auth_settings *set, pool_t pool,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char **error_r)
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen const char *const *tmp;
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen set->proxy_self_ips = p_new(pool, struct ip_addr, 1);
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen tmp = t_strsplit_spaces(set->proxy_self, " ");
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen ret = net_gethostbyname(*tmp, &ips, &ips_count);
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen *error_r = t_strdup_printf("auth_proxy_self_ips: "
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen "gethostbyname(%s) failed: %s",
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen set->proxy_self_ips = array_idx(&ips_array, 0);
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool,
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen const char **error_r)
bbf796c17f02538058d7559bfe96d677e5b55015Timo Sirainen const char *p;
return FALSE;
return FALSE;
return FALSE;
return TRUE;
const char **error_r)
return FALSE;
return FALSE;
return TRUE;
const char **error_r)
return FALSE;
return TRUE;
struct auth_settings *
const char *error;
void **sets;
i_unreached();
return sets[0];