2002-04-04 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Thu, 4 Apr 2002 19:44:55 +0000 (19:44 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 4 Apr 2002 19:44:55 +0000 (19:44 +0000)
* pinentry/pinentry.h (struct pinentry): New members DISPLAY,
TTYNAME and TTYTYPE.
* pinentry/pinentry.c (pinentry): Likewise.
* pinentry/pinentry.c: Include <string.h>.
(usage): Add new options --display,
--ttyname and --ttytype.
(option_handler): Likewise.
(pinentry_parse_opts): Likewise.

* curses/pinentry-curses.c (dialog_cmd_handler): Use
PINENTRY->ttyname and PINENTRY->ttytype.

ChangeLog
curses/pinentry-curses.c
kde/Makefile.am
pinentry/pinentry.c
pinentry/pinentry.h

index f778dff..026cd3d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2002-04-04  Marcus Brinkmann  <marcus@g10code.de>
+
+       * pinentry/pinentry.h (struct pinentry): New members DISPLAY,
+       TTYNAME and TTYTYPE.
+       * pinentry/pinentry.c (pinentry): Likewise.
+       * pinentry/pinentry.c: Include <string.h>.
+       (usage): Add new options --display,
+       --ttyname and --ttytype.
+       (option_handler): Likewise.
+       (pinentry_parse_opts): Likewise.
+
+       * curses/pinentry-curses.c (dialog_cmd_handler): Use
+       PINENTRY->ttyname and PINENTRY->ttytype.
+
 2002-03-30  Marcus Brinkmann  <marcus@g10code.de>
 
        * acinclude.m4: Add AM_PATH_GLIB and AM_PATH_GTK.
index c7947aa..523cdc9 100644 (file)
@@ -496,7 +496,7 @@ dialog_run (pinentry_t pinentry, const char *tty_name, const char *tty_type)
 static int
 dialog_cmd_handler (pinentry_t pinentry)
 {
-  return dialog_run (pinentry, 0, 0);
+  return dialog_run (pinentry, pinentry->ttyname, pinentry->ttytype);
 }
 
 pinentry_cmd_handler_t pinentry_cmd_handler = dialog_cmd_handler;
@@ -519,4 +519,3 @@ main (int argc, char *argv[])
 
   return 0;
 }
-
index 028b6a4..1058fce 100644 (file)
@@ -24,7 +24,7 @@
 CXXFLAGS = -O2 -fno-exceptions -fno-check-new -fexceptions
 
 # XXX The prefix KDE was installed with
-XXX_PREFIX = /usr/local
+XXX_PREFIX = /cdrom/marcus/install
 
 # XXX The defines that will make it compile, link and run if you have a reasonable system.
 XXX_KDE_DEFINES = -I$(XXX_PREFIX)/include -I/usr/X11R6/include -DQT_THREAD_SUPPORT  -D_REENTRANT
index 9926fe3..62a2a1a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <errno.h>
 #include <stdlib.h>
+#include <string.h>
 #include <getopt.h>
 
 #include "assuan.h"
@@ -39,6 +40,9 @@ struct pinentry pinentry =
     NULL,      /* Prompt.  */
     NULL,      /* PIN.  */
     2048,      /* PIN length.  */
+    0,         /* Display.  */
+    0,         /* TTY name.  */
+    0,         /* TTY type.  */
     0,         /* Debug mode.  */
     0,         /* Enhanced mode.  */
     1,         /* Global grab.  */
@@ -89,6 +93,9 @@ usage (void)
   fprintf (stderr, "Usage: %s [OPTION]...\n\
 Ask securely for a secret and print it to stdout.\n\
 \n\
+      --display DISPLAY Set the X display\n\
+      --ttyname PATH    Set the tty terminal node name\n\
+      --ttytype NAME    Set the tty terminal type\n\
   -e, --enhanced        Ask for timeout and insurance, too\n\
   -g, --no-global-grab  Grab keyboard only while window is focused\n\
   -d, --debug           Turn on debugging output\n\
@@ -108,6 +115,9 @@ pinentry_parse_opts (int argc, char *argv[])
   int opt_version = 0;
   struct option opts[] =
     {{ "debug", no_argument, &pinentry.debug, 1 },
+     { "display", required_argument, 0, 'D' },
+     { "ttyname", required_argument, 0, 'T' },
+     { "ttytype", required_argument, 0, 'N' },
      { "enhanced", no_argument, &pinentry.enhanced, 1 },
      { "no-global-grab", no_argument, &pinentry.grab, 0 },
      { "help", no_argument, &opt_help, 1 },
@@ -121,6 +131,33 @@ pinentry_parse_opts (int argc, char *argv[])
         case 0:
         case '?':
           break;
+       case 'D':
+         pinentry.display = strdup (optarg);
+         if (!pinentry.display)
+           {
+             /* XXX Program name.  */
+             fprintf (stderr, "pinentry: %s\n", strerror (errno));
+             exit (EXIT_FAILURE);
+           }
+         break;
+       case 'T':
+         pinentry.ttyname = strdup (optarg);
+         if (!pinentry.ttyname)
+           {
+             /* XXX Program name.  */
+             fprintf (stderr, "pinentry: %s\n", strerror (errno));
+             exit (EXIT_FAILURE);
+           }
+         break;
+       case 'N':
+         pinentry.ttytype = strdup (optarg);
+         if (!pinentry.ttytype)
+           {
+             /* XXX Program name.  */
+             fprintf (stderr, "pinentry: %s\n", strerror (errno));
+             exit (EXIT_FAILURE);
+           }
+         break;
         default:
           /* XXX Should never happen.  */
         }
@@ -145,12 +182,36 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
     pinentry.grab = 1;
   else if (!strcmp (key, "debug-wait"))
     {
-      /* Program name.  */
+      /* XXX Program name.  */
       fprintf (stderr, "pinentry: waiting for debugger - my pid is %u ...\n",
               (unsigned int) getpid());
       sleep (*value?atoi (value):5);
       fprintf (stderr, "pinentry: ... okay\n");
     }
+  else if (!strcmp (key, "display"))
+    {
+      if (pinentry.display)
+       free (pinentry.display);
+      pinentry.display = strdup (value);
+      if (!pinentry.display)
+       return ASSUAN_Out_Of_Core;
+    }
+  else if (!strcmp (key, "ttyname"))
+    {
+      if (pinentry.ttyname)
+       free (pinentry.ttyname);
+      pinentry.ttyname = strdup (value);
+      if (!pinentry.ttyname)
+       return ASSUAN_Out_Of_Core;
+    }
+  else if (!strcmp (key, "ttytype"))
+    {
+      if (pinentry.ttytype)
+       free (pinentry.ttytype);
+      pinentry.ttytype = strdup (value);
+      if (!pinentry.ttytype)
+       return ASSUAN_Out_Of_Core;
+    }
   else
     return ASSUAN_Invalid_Option;
   return 0;
index d5e7645..eb991ec 100644 (file)
@@ -31,6 +31,13 @@ struct pinentry
   /* The length of the buffer.  */
   int pin_len;
 
+  /* The name of the X display to use if X is available and supported.  */
+  char *display;
+  /* The name of the terminal node to open if X not available or supported.  */
+  char *ttyname;
+  /* The type of the terminal.  */
+  char *ttytype;
+
   /* True if debug mode is requested.  */
   int debug;
   /* True if enhanced mode is requested.  */