auth-settings.c revision a8396081c30f2e3b793b644da10ad875cb2417f3
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* Copyright (c) 2005-2017 Dovecot authors, see the included COPYING file */
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic bool auth_settings_check(void *_set, pool_t pool, const char **error_r);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic bool auth_passdb_settings_check(void *_set, pool_t pool, const char **error_r);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic bool auth_userdb_settings_check(void *_set, pool_t pool, const char **error_r);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen/* <settings checks> */
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic struct file_listener_settings auth_unix_listeners_array[] = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen { "auth-login", 0600, "$default_internal_user", "" },
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen { "auth-client", 0600, "$default_internal_user", "" },
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen { "auth-userdb", 0666, "$default_internal_user", "" },
bf661a542d17273066e720b4f75868a1ff975a4cTimo Sirainenstatic struct file_listener_settings *auth_unix_listeners[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen auth_unix_listeners, sizeof(auth_unix_listeners), { NULL, }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen/* </settings checks> */
04ab375449dd97eed50ada88dd0df2abab01cfeeTimo Sirainenstruct service_settings auth_service_settings = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen .unix_listeners = { { &auth_unix_listeners_buf,
ccc895c0358108d2304239063e940b7d75f364abTimo Sirainen/* <settings checks> */
8d630c15a8ed6f85553467c3a231a273defca5f6Timo Sirainenstatic struct file_listener_settings auth_worker_unix_listeners_array[] = {
d9fdacd5fb3e07997e5c389739d2054f0c8441d8Timo Sirainen { "auth-worker", 0600, "$default_internal_user", "" }
c5ab90cfad9cc3e33bcb1baeb30ffc82a7b7053aTimo Sirainenstatic struct file_listener_settings *auth_worker_unix_listeners[] = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenstatic buffer_t auth_worker_unix_listeners_buf = {
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen auth_worker_unix_listeners, sizeof(auth_worker_unix_listeners), { NULL, }
ab0155cbec1286e1cd00a0e01d78e0f3ca34cea6Timo Sirainen/* </settings checks> */
ab0155cbec1286e1cd00a0e01d78e0f3ca34cea6Timo Sirainenstruct service_settings auth_worker_service_settings = {
5fb3bff645380804c9db2510940c41db6b8fdb01Timo Sirainen .unix_listeners = { { &auth_worker_unix_listeners_buf,
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen { type, #name, offsetof(struct auth_passdb_settings, name), NULL }
b2c1349cf07410aefab0f5b17153af9e5cfcf48fTimo Sirainenstatic const struct setting_define auth_passdb_setting_defines[] = {
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainenstatic const struct auth_passdb_settings auth_passdb_default_settings = {
42507d758b053bb483de58fba55c73a9eb5d3fbaTimo Sirainen .skip = "never:authenticated:unauthenticated",
a3ee5ce6ecc8e228ee69300fdd562d7ac8be89a7Timo Sirainen .result_success = "return-ok:return:return-fail:continue:continue-ok:continue-fail",
a3ee5ce6ecc8e228ee69300fdd562d7ac8be89a7Timo 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",
a423d985ba7261661475811c22b21b80ec765a71Timo Sirainenconst struct setting_parser_info auth_passdb_setting_parser_info = {
345212e8f61ebf14ff4f80df26df9e655eb5121eTimo Sirainen .type_offset = offsetof(struct auth_passdb_settings, name),
c13f3df87bc8ec1fb279fc0ffa6e8517f74dc07cTimo Sirainen .struct_size = sizeof(struct auth_passdb_settings),
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { type, #name, offsetof(struct auth_userdb_settings, name), NULL }
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenstatic const struct setting_define auth_userdb_setting_defines[] = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenstatic const struct auth_userdb_settings auth_userdb_default_settings = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen /* NOTE: when adding fields, update also auth.c:userdb_dummy_set */
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen .result_success = "return-ok:return:return-fail:continue:continue-ok:continue-fail",
90adcaa0a00eba29b7fbd50ca66be11c8d086d6aTimo Sirainen .result_failure = "continue:return:return-ok:return-fail:continue-ok:continue-fail",
90adcaa0a00eba29b7fbd50ca66be11c8d086d6aTimo Sirainen .result_internalfail = "continue:return:return-ok:return-fail:continue-ok:continue-fail",
87460b08cb97b31cde640d4975a6aa2c1d0e7226Timo Sirainenconst struct setting_parser_info auth_userdb_setting_parser_info = {
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen .type_offset = offsetof(struct auth_userdb_settings, name),
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen .struct_size = sizeof(struct auth_userdb_settings),
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen/* we're kind of kludging here to avoid "auth_" prefix in the struct fields */
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainen { type, "auth_"#name, offsetof(struct auth_settings, name), NULL }
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { type, #name, offsetof(struct auth_settings, name), NULL }
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen { SET_DEFLIST, name, offsetof(struct auth_settings, field), defines }
fdc557286bc9f92c5f3bb49096ff6e2bcec0ea79Timo Sirainenstatic const struct setting_define auth_setting_defines[] = {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen DEFLIST(passdbs, "passdb", &auth_passdb_setting_parser_info),
a423d985ba7261661475811c22b21b80ec765a71Timo Sirainen DEFLIST(userdbs, "userdb", &auth_userdb_setting_parser_info),
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainenstatic const struct auth_settings auth_default_settings = {
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen .username_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@",
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen .policy_request_attributes = "login=%{orig_username} pwhash=%{hashed_password} remote=%{real_rip} device_id=%{client_id} protocol=%s",
.last_valid_uid = 0,
.last_valid_gid = 0,
const char **error_r)
const char *const *tmp;
unsigned int ips_count;
int ret;
return TRUE;
if (ret != 0) {
return TRUE;
const char **error_r)
unsigned int num;
if (p != NULL) {
return FALSE;
return TRUE;
return TRUE;
return TRUE;
return TRUE;
return FALSE;
const char **error_r)
return FALSE;
return FALSE;
return FALSE;
return FALSE;
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];