diff options
Diffstat (limited to 'g10')
-rw-r--r-- | g10/ChangeLog | 7 | ||||
-rw-r--r-- | g10/cardglue.c | 4 | ||||
-rw-r--r-- | g10/keydb.h | 2 | ||||
-rw-r--r-- | g10/passphrase.c | 33 |
4 files changed, 39 insertions, 7 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog index a27c70901..9b1f0336a 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,10 @@ +2005-07-26 Werner Koch <[email protected]> + + * passphrase.c (agent_get_passphrase): Make sure to release the + saved codeset. + (agent_open): Add arg ORIG_CODESET and switch back to it in case + of error. Changed all callers. + 2005-07-22 David Shaw <[email protected]> * keyedit.c (sign_uids): Don't prompt for setting signature expiry diff --git a/g10/cardglue.c b/g10/cardglue.c index 0e2da279c..14feb4188 100644 --- a/g10/cardglue.c +++ b/g10/cardglue.c @@ -83,7 +83,7 @@ static assuan_error_t learn_status_cb (void *opaque, const char *line); #define ASSUAN_LINELENGTH 100 static assuan_context_t -agent_open (int try) +agent_open (int try, const char *orig_codeset) { return NULL; } @@ -338,7 +338,7 @@ open_card_via_agent (int *scd_available) int rc; *scd_available = 0; - ctx = agent_open (1); + ctx = agent_open (1, NULL); if (!ctx) return NULL; diff --git a/g10/keydb.h b/g10/keydb.h index e7b4292f6..bf7ccd1d9 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -189,7 +189,7 @@ int build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, /*-- passphrase.h --*/ #ifdef ENABLE_AGENT_SUPPORT -assuan_context_t agent_open (int try); +assuan_context_t agent_open (int try, const char *orig_codeset); void agent_close (assuan_context_t ctx); #else /* If we build w/o agent support, assuan.h won't get included and thus diff --git a/g10/passphrase.c b/g10/passphrase.c index 862411184..85b82ca4e 100644 --- a/g10/passphrase.c +++ b/g10/passphrase.c @@ -275,10 +275,12 @@ agent_send_all_options (assuan_context_t ctx) * Returns: -1 on error; on success an Assuan context for that * connection is returned. With TRY set to true, no error messages * are printed and the use of the agent won't get disabled on failure. + * If ORIG_CODESET is not NULL, the function will swithc the codeset + * back to that one before printing error messages. */ #ifdef ENABLE_AGENT_SUPPORT assuan_context_t -agent_open (int try) +agent_open (int try, const char *orig_codeset) { int rc; assuan_context_t ctx; @@ -295,6 +297,10 @@ agent_open (int try) { if (!try) { +#ifdef ENABLE_NLS + if (orig_codeset) + bind_textdomain_codeset (PACKAGE, orig_codeset); +#endif /*ENABLE_NLS*/ log_error (_("gpg-agent is not available in this session\n")); opt.use_agent = 0; } @@ -307,6 +313,10 @@ agent_open (int try) { if (!try) { +#ifdef ENABLE_NLS + if (orig_codeset) + bind_textdomain_codeset (PACKAGE, orig_codeset); +#endif /*ENABLE_NLS*/ log_error ( _("malformed GPG_AGENT_INFO environment variable\n")); opt.use_agent = 0; } @@ -322,6 +332,10 @@ agent_open (int try) { if (!try) { +#ifdef ENABLE_NLS + if (orig_codeset) + bind_textdomain_codeset (PACKAGE, orig_codeset); +#endif /*ENABLE_NLS*/ log_error (_("gpg-agent protocol version %d is not supported\n"), prot); opt.use_agent = 0; @@ -335,6 +349,10 @@ agent_open (int try) { if (!try) { +#ifdef ENABLE_NLS + if (orig_codeset) + bind_textdomain_codeset (PACKAGE, orig_codeset); +#endif /*ENABLE_NLS*/ log_error ( _("can't connect to `%s': %s\n"), infostr, assuan_strerror (rc)); opt.use_agent = 0; @@ -348,6 +366,10 @@ agent_open (int try) { if (!try) { +#ifdef ENABLE_NLS + if (orig_codeset) + bind_textdomain_codeset (PACKAGE, orig_codeset); +#endif /*ENABLE_NLS*/ log_error (_("problem with the agent - disabling agent use\n")); opt.use_agent = 0; } @@ -485,7 +507,7 @@ agent_get_passphrase ( u32 *keyid, int mode, const char *cacheid, } #endif - if ( !(ctx = agent_open (0)) ) + if ( !(ctx = agent_open (0, orig_codeset)) ) goto failure; if (custom_description) @@ -633,7 +655,10 @@ agent_get_passphrase ( u32 *keyid, int mode, const char *cacheid, failure: #ifdef ENABLE_NLS if (orig_codeset) - bind_textdomain_codeset (PACKAGE, orig_codeset); + { + bind_textdomain_codeset (PACKAGE, orig_codeset); + xfree (orig_codeset); + } #endif xfree (atext); agent_close (ctx); @@ -683,7 +708,7 @@ passphrase_clear_cache ( u32 *keyid, const char *cacheid, int algo ) else pk = NULL; - if ( !(ctx = agent_open (0)) ) + if ( !(ctx = agent_open (0, NULL)) ) goto failure; { |