# HG changeset patch # User Timo Sirainen # Date 1476181133 -10800 # Node ID e706c8ff0922fc9cee0eaa075531c38e2508380a # Parent ec2d92883d821c078f482ab65f11bdb5a299cda2 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. diff -r ec2d92883d82 -r e706c8ff0922 src/auth/auth-request.c --- 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; } diff -r ec2d92883d82 -r e706c8ff0922 src/auth/auth-request.h --- 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;