diff --git a/sm/ChangeLog b/sm/ChangeLog index 36390c344..feef043ef 100644 --- a/sm/ChangeLog +++ b/sm/ChangeLog @@ -1,3 +1,7 @@ +2004-10-04 Werner Koch + + * misc.c (setup_pinentry_env): Try hard to set a default for GPG_TTY. + 2004-09-30 Werner Koch * gpgsm.c (i18n_init): Always use LC_ALL. diff --git a/sm/misc.c b/sm/misc.c index 281056177..bfe8191fd 100644 --- a/sm/misc.c +++ b/sm/misc.c @@ -30,7 +30,7 @@ #endif #include "gpgsm.h" - +#include "i18n.h" /* Setup the environment so that the pinentry is able to get all required information. This is used prior to an exec of the @@ -42,8 +42,23 @@ setup_pinentry_env (void) if (opt.display) setenv ("DISPLAY", opt.display, 1); + + /* Try to make sure that GPG_TTY has been set. This is needed if we + call for example the protect-tools with redirected stdin and thus + it won't be able to ge a default by itself. Try to do it here + but print a warning. */ if (opt.ttyname) setenv ("GPG_TTY", opt.ttyname, 1); + else if (!(lc=getenv ("GPG_TTY")) || !*lc) + { + log_error (_("GPG_TTY has not been set - " + "using maybe bogus default\n")); + lc = ttyname (0); + if (!lc) + lc = "/dev/tty"; + setenv ("GPG_TTY", lc, 1); + } + if (opt.ttytype) setenv ("TERM", opt.ttytype, 1);