aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sm/ChangeLog6
-rw-r--r--sm/export.c2
-rw-r--r--sm/gpgsm.h2
-rw-r--r--sm/import.c2
-rw-r--r--sm/misc.c36
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",
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 <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
+
+}