Mercurial > dovecot > core-2.2
changeset 20854:e706c8ff0922
auth: Don't re-insert userdb results from auth cache data back to cache.
This was also breaking TTLs for the cached userdb results, because each
re-insert reset the TTL.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 11 Oct 2016 13:18:53 +0300 |
parents | ec2d92883d82 |
children | 0b12b2cb67dd |
files | src/auth/auth-request.c src/auth/auth-request.h |
diffstat | 2 files changed, 8 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/auth-request.c Mon Oct 10 21:22:15 2016 +0300 +++ b/src/auth/auth-request.c Tue Oct 11 13:18:53 2016 +0300 @@ -1327,9 +1327,10 @@ if (request->userdb_lookup_tempfailed) { /* no caching */ - } else if (result != USERDB_RESULT_INTERNAL_FAILURE) - auth_request_userdb_save_cache(request, result); - else if (passdb_cache != NULL && userdb->cache_key != NULL) { + } else if (result != USERDB_RESULT_INTERNAL_FAILURE) { + if (!request->userdb_result_from_cache) + auth_request_userdb_save_cache(request, result); + } else if (passdb_cache != NULL && userdb->cache_key != NULL) { /* lookup failed. if we're looking here only because the request was expired in cache, fallback to using cached expired record. */ @@ -1353,6 +1354,7 @@ request->private_callback.userdb = callback; request->userdb_lookup = TRUE; + request->userdb_result_from_cache = FALSE; if (request->userdb_reply == NULL) auth_request_init_userdb_reply(request); else { @@ -1369,6 +1371,7 @@ if (auth_request_lookup_user_cache(request, cache_key, &result, FALSE)) { + request->userdb_result_from_cache = TRUE; auth_request_userdb_callback(result, request); return; }
--- a/src/auth/auth-request.h Mon Oct 10 21:22:15 2016 +0300 +++ b/src/auth/auth-request.h Tue Oct 11 13:18:53 2016 +0300 @@ -144,6 +144,8 @@ /* userdb_* fields have been set by the passdb lookup, userdb prefetch will work. */ unsigned int userdb_prefetch_set:1; + /* userdb lookup's results are from cache */ + unsigned int userdb_result_from_cache:1; unsigned int stats_sent:1; unsigned int policy_refusal:1; unsigned int policy_processed:1;