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 + + * 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 * 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", diff --git a/sm/misc.c b/sm/misc.c index 4ffa7153e..281056177 100644 --- a/sm/misc.c +++ b/sm/misc.c @@ -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 #include #include +#ifdef HAVE_LOCALE_H +#include +#endif #include "gpgsm.h" -#include +/* 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 + +}