diff options
-rw-r--r-- | sm/ChangeLog | 6 | ||||
-rw-r--r-- | sm/export.c | 2 | ||||
-rw-r--r-- | sm/gpgsm.h | 2 | ||||
-rw-r--r-- | sm/import.c | 2 | ||||
-rw-r--r-- | sm/misc.c | 36 |
5 files changed, 46 insertions, 2 deletions
diff --git a/sm/ChangeLog b/sm/ChangeLog index eac744b08..02f627a4d 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,9 @@ +2004-04-13 Werner Koch <[email protected]> + + * misc.c (setup_pinentry_env): New. + * import.c (popen_protect_tool): Call it. + * export.c (popen_protect_tool): Call it. + 2004-04-08 Werner Koch <[email protected]> * decrypt.c (gpgsm_decrypt): Return GPG_ERR_NO_DATA if it is not a diff --git a/sm/export.c b/sm/export.c index 66dd46d25..8a89110de 100644 --- a/sm/export.c +++ b/sm/export.c @@ -581,6 +581,8 @@ popen_protect_tool (const char *pgmname, close(i); errno = 0; + setup_pinentry_env (); + execlp (pgmname, arg0, "--homedir", opt.homedir, "--p12-export", diff --git a/sm/gpgsm.h b/sm/gpgsm.h index d3fbc03ef..a06bfa482 100644 --- a/sm/gpgsm.h +++ b/sm/gpgsm.h @@ -299,6 +299,8 @@ int gpgsm_dirmngr_run_command (ctrl_t ctrl, const char *command, int argc, char **argv); +/*-- misc.c --*/ +void setup_pinentry_env (void); diff --git a/sm/import.c b/sm/import.c index c54579b7d..df080da9e 100644 --- a/sm/import.c +++ b/sm/import.c @@ -498,6 +498,8 @@ popen_protect_tool (const char *pgmname, close(i); errno = 0; + setup_pinentry_env (); + execlp (pgmname, arg0, "--homedir", opt.homedir, "--p12-import", @@ -1,5 +1,5 @@ /* misc.c - Miscellaneous fucntions - * Copyright (C) 2001 Free Software Foundation, Inc. + * Copyright (C) 2004 Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -25,9 +25,41 @@ #include <string.h> #include <ctype.h> #include <unistd.h> +#ifdef HAVE_LOCALE_H +#include <locale.h> +#endif #include "gpgsm.h" -#include <ksba.h> +/* Setup the environment so that the pinentry is able to get all + required information. This is used prior to an exec of the + protect-tool. */ +void +setup_pinentry_env (void) +{ + char *lc; + + if (opt.display) + setenv ("DISPLAY", opt.display, 1); + if (opt.ttyname) + setenv ("GPG_TTY", opt.ttyname, 1); + if (opt.ttytype) + setenv ("TERM", opt.ttytype, 1); + + if (opt.lc_ctype) + setenv ("LC_CTYPE", opt.lc_ctype, 1); +#if defined(HAVE_SETLOCALE) && defined(LC_CTYPE) + else if ( (lc = setlocale (LC_CTYPE, "")) ) + setenv ("LC_CTYPE", lc, 1); +#endif + + if (opt.lc_messages) + setenv ("LC_MESSAGES", opt.lc_messages, 1); +#if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES) + else if ( (lc = setlocale (LC_MESSAGES, "")) ) + setenv ("LC_MESSAGES", lc, 1); +#endif + +} |