aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--agent/agent.h1
-rw-r--r--agent/cache.c20
-rw-r--r--agent/gpg-agent.c3
-rw-r--r--doc/gpg-agent.texi5
4 files changed, 28 insertions, 1 deletions
diff --git a/agent/agent.h b/agent/agent.h
index c2d857959..743b76595 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -450,6 +450,7 @@ int agent_clear_passphrase (ctrl_t ctrl,
/*-- cache.c --*/
void initialize_module_cache (void);
void deinitialize_module_cache (void);
+void agent_cache_housekeeping (void);
void agent_flush_cache (void);
int agent_put_cache (const char *key, cache_mode_t cache_mode,
const char *data, int ttl);
diff --git a/agent/cache.c b/agent/cache.c
index 80d5f8d1e..ed5c97cd2 100644
--- a/agent/cache.c
+++ b/agent/cache.c
@@ -259,6 +259,26 @@ housekeeping (void)
void
+agent_cache_housekeeping (void)
+{
+ int res;
+
+ if (DBG_CACHE)
+ log_debug ("agent_cache_housekeeping\n");
+
+ res = npth_mutex_lock (&cache_lock);
+ if (res)
+ log_fatal ("failed to acquire cache mutex: %s\n", strerror (res));
+
+ housekeeping ();
+
+ res = npth_mutex_unlock (&cache_lock);
+ if (res)
+ log_fatal ("failed to release cache mutex: %s\n", strerror (res));
+}
+
+
+void
agent_flush_cache (void)
{
ITEM r;
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index a1964ece8..bd9a471e8 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -2398,6 +2398,9 @@ handle_tick (void)
}
#endif
+ /* Need to check for expired cache entries. */
+ agent_cache_housekeeping ();
+
/* Check whether the homedir is still available. */
if (!shutdown_pending
&& (!have_homedir_inotify || !reliable_homedir_inotify)
diff --git a/doc/gpg-agent.texi b/doc/gpg-agent.texi
index 3e8bd894d..4781bbdca 100644
--- a/doc/gpg-agent.texi
+++ b/doc/gpg-agent.texi
@@ -403,7 +403,10 @@ control this behavior but this command line option takes precedence.
Set the time a cache entry is valid to @var{n} seconds. The default
is 600 seconds. Each time a cache entry is accessed, the entry's
timer is reset. To set an entry's maximum lifetime, use
-@command{max-cache-ttl}.
+@command{max-cache-ttl}. Note that a cached passphrase may not
+evicted immediately from memory if no client requests a cache
+operation. This is due to an internal housekeeping function which is
+only run every few seconds.
@item --default-cache-ttl-ssh @var{n}
@opindex default-cache-ttl