Fixed aegypten bug 299
[gnupg.git] / sm / misc.c
index 2810561..86cb506 100644 (file)
--- a/sm/misc.c
+++ b/sm/misc.c
@@ -15,7 +15,8 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ * USA.
  */
 
 #include <config.h>
@@ -30,7 +31,8 @@
 #endif
 
 #include "gpgsm.h"
-
+#include "i18n.h"
+#include "setenv.h"
 
 /* Setup the environment so that the pinentry is able to get all
    required information.  This is used prior to an exec of the
 void
 setup_pinentry_env (void)
 {
+#ifndef HAVE_W32_SYSTEM
   char *lc;
 
   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);
 
@@ -60,6 +78,6 @@ setup_pinentry_env (void)
   else if ( (lc = setlocale (LC_MESSAGES, "")) )
     setenv ("LC_MESSAGES", lc, 1);
 #endif
-
+#endif /*!HAVE_W32_SYSTEM*/
 }