From 2236faedd3be845da5b86a2ca78f4acb63cad930 Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Fri, 30 Nov 2012 21:58:13 -0500 Subject: [PATCH] Fixup commit 5f89607. Probably was using --disable-agent. --- src/cache.c | 35 ++++++++++++++++++++--------------- src/commands.c | 14 ++++++++++---- src/crypto.c | 2 +- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/cache.c b/src/cache.c index 32891fca..7c1a0c34 100644 --- a/src/cache.c +++ b/src/cache.c @@ -46,9 +46,6 @@ static struct slist_s *key_cache; static struct agent_s *cache_agent; #endif -#define NOT_PKCS(c) (c && c->data && c->data->key) -#define PKCS(c) (c && c->data && !c->data->key) - extern void log_write (const char *fmt, ...); typedef gpg_error_t (*free_data_fn_t) (file_cache_t *); @@ -150,13 +147,9 @@ cache_unlock_mutex (const unsigned char *md5file, int remove) return p ? 0 : GPG_ERR_NO_DATA; } -static int -valid_grip (file_cache_t * e) -{ - if (!use_agent || NOT_PKCS (e)) - return 1; - #ifdef WITH_AGENT +static int valid_agent_grip (file_cache_t *e) +{ size_t c; for (c = 0; c < sizeof (e->grip); c++) @@ -164,9 +157,22 @@ valid_grip (file_cache_t * e) if (e->grip[c]) return 1; } + + return 0; +} #endif +static int +valid_grip (file_cache_t * e) +{ + if (e->data && e->data->key) + return 1; + +#ifdef WITH_AGENT + return valid_agent_grip (e); +#else return 0; +#endif } static gpg_error_t @@ -175,13 +181,13 @@ iscached (const unsigned char *md5file, int *defer) gpg_error_t rc = 0; file_cache_t *p = get_entry (md5file); - if (!p || !valid_grip (p) || !p->data) + if (!p || !p->data || !valid_grip (p)) return GPG_ERR_NO_DATA; if (defer) *defer = p->defer_clear; - if (!use_agent || NOT_PKCS (p)) + if (p->data && p->data->key) return 0; #ifdef WITH_AGENT @@ -197,6 +203,7 @@ iscached (const unsigned char *md5file, int *defer) rc = 0; else rc = isdigit (*fields[4]) || *fields[5] == 'C' ? 0 : GPG_ERR_NO_DATA; + strv_free (fields); xfree (line); } @@ -406,7 +413,7 @@ clear_once (file_cache_t * p) if (!rc && valid_grip (p)) { #ifdef WITH_AGENT - if (use_agent && PKCS (p)) + if (use_agent && valid_agent_grip (p)) { rc = send_to_agent (cache_agent, NULL, NULL, "CLEAR_PASSPHRASE --mode=normal %s", p->grip); @@ -673,14 +680,12 @@ free_cache_data_once (struct cache_data_s *data) if (!data) return; - if (data->doc) - gcry_free (data->doc); - #ifdef WITH_AGENT if (data->pubkey) gcry_sexp_release (data->pubkey); #endif + gcry_free (data->doc); gcry_free (data->key); xfree (data->crc); xfree (data); diff --git a/src/commands.c b/src/commands.c index 59ef2952..1abcbe2c 100644 --- a/src/commands.c +++ b/src/commands.c @@ -197,6 +197,7 @@ free_client (struct client_s *client) client->crypto->pkey_sexp = NULL; memset (client->crypto->sign_grip, 0, sizeof (client->crypto->sign_grip)); + memset (client->crypto->grip, 0, sizeof(client->crypto->grip)); } if (client->xml_error) @@ -2246,8 +2247,8 @@ clearcache_command (assuan_context_t ctx, char *line) if (!memcmp (thd->cl->md5file, md5file, sizeof (md5file))) { - rc = - cache_lock_mutex (thd->cl->ctx, thd->cl->md5file, -1, 0, -1); + rc = cache_lock_mutex (thd->cl->ctx, thd->cl->md5file, -1, 0, + -1); if (gpg_err_code (rc) == GPG_ERR_LOCKED) { if (pthread_equal (pthread_self (), thd->tid)) @@ -2261,7 +2262,9 @@ clearcache_command (assuan_context_t ctx, char *line) cache_unlock_mutex (thd->cl->md5file, 0); } else - cache_defer_clear (thd->cl->md5file); + { + cache_defer_clear (thd->cl->md5file); + } break; } @@ -2273,7 +2276,10 @@ clearcache_command (assuan_context_t ctx, char *line) * error from above since this would defeat the locking check of the * remaining entries. */ if (!all_rc && all) - cache_clear (NULL); + { + cache_clear (NULL); + } + /* No clients are using the specified file. */ else if (!all_rc && !rc && !once) { diff --git a/src/crypto.c b/src/crypto.c index 4dac1d83..ba47cf77 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -271,7 +271,6 @@ decrypt_data (assuan_context_t ctx, struct crypto_s *crypto, { gpg_error_t rc = 0; unsigned char *key = salted_key; - size_t keylen = skeylen; gcry_cipher_hd_t h = NULL; size_t blocksize, keysize = 0; int algo = cipher_to_gcrypt (crypto->hdr.flags); @@ -279,6 +278,7 @@ decrypt_data (assuan_context_t ctx, struct crypto_s *crypto, uint64_t n = crypto->hdr.iterations; long progress = 0; #ifdef WITH_AGENT + size_t keylen = skeylen; gcry_sexp_t sig_sexp; if (crypto->hdr.flags & PWMD_FLAG_PKCS) -- 2.11.4.GIT