passdb-cache.c revision a64adf62fa33f2463a86f990217b0c9078531a40
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen/* Copyright (c) 2004-2009 Dovecot authors, see the included COPYING file */
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainenpassdb_cache_log_hit(struct auth_request *request, const char *value)
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainen const char *p;
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainen /* hide the password */
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainen auth_request_log_debug(request, "cache", "hit: %s", value);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenbool passdb_cache_verify_plain(struct auth_request *request, const char *key,
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen enum passdb_result *result_r, int use_expired)
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen const char *value, *cached_pw, *scheme, *const *list;
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* value = password \t ... */
8759adc67109b5a12a7af3ed717c7040622a0a04Timo Sirainen value = auth_cache_lookup(passdb_cache, request, key, &node, &expired);
00bde9ae9eab9e720462bf6ec9a4dd85e88c3bbfTimo Sirainen if (value == NULL || (expired && !use_expired)) {
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* negative cache entry */
bcf5f1acb2e3891f951fd0848c23b86c35efe7e1Timo Sirainen auth_request_log_info(request, "cache", "User unknown");
3ab7783791bd46cdd46e9b9de3e98e8efcb6c6bfTimo Sirainen /* NULL password */
bcf5f1acb2e3891f951fd0848c23b86c35efe7e1Timo Sirainen auth_request_log_info(request, "cache", "NULL password access");
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen ret = auth_request_password_verify(request, password, cached_pw,
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen /* the last authentication was successful. assume that
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen the password was changed and cache is expired. */
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen /* save the extra_fields only after we know we're using the
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen cached data */
553308791c097219e8eb31cbd03a29e9e1333848Timo Sirainen auth_request_set_fields(request, list + 1, NULL);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenbool passdb_cache_lookup_credentials(struct auth_request *request,
8759adc67109b5a12a7af3ed717c7040622a0a04Timo Sirainen value = auth_cache_lookup(passdb_cache, request, key, &node, &expired);
00bde9ae9eab9e720462bf6ec9a4dd85e88c3bbfTimo Sirainen if (value == NULL || (expired && !use_expired)) {
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* negative cache entry */
553308791c097219e8eb31cbd03a29e9e1333848Timo Sirainen auth_request_set_fields(request, list + 1, NULL);
cc0495b3bbe3c3e41c512274b302d6f0fa028187Timo Sirainen i_assert(*scheme_r != NULL || *password_r == NULL);
0b47a03ce89751b2c04b03da255ba68b796864a7Timo Sirainen *result_r = PASSDB_RESULT_SCHEME_NOT_AVAILABLE;
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainenvoid passdb_cache_init(const struct auth_settings *set)
a64adf62fa33f2463a86f990217b0c9078531a40Timo Sirainen if (set->cache_size == 0 || set->cache_ttl == 0)