On 06/27/2018 04:50 PM, Jacob Adams wrote:
> I've got another pinentry problem unfortunately.
> The tty is owned by the correct user this time and $GPG_TTY is set
> correctly.
> 
> I have two gpgme contexts, one for openpgp and another for assuan
> commands to the smartcard. Pinentry triggered by the openpgp context
> works perfectly, but any pinentry launched in service of the assuan
> context fails with the error in the subject. They're both using the same
> gpg-agent launched shortly after the creation of the openpgp context
> with gpgconf --launch gpg-agent.
> 
> The relevant logs are available at:
> https://salsa.debian.org/tookmund-guest/pgpcr/issues/10
> 

I've now done a bit of poking around into this.
Attached is the patch I used to try and get some information out of
pinentry-curses.

It appears that tty_name is not being set, despite the fact that GPG_TTY
is set and thus gpg-agent has this information from the previous Context.

> I'm really not sure what's going wrong here and any insight would be
> much appreciated.

The above is still definitely true.

Thanks,
Jacob


--- a/pinentry/pinentry-curses.c
+++ b/pinentry/pinentry-curses.c
@@ -26,6 +26,7 @@
 #include <signal.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <locale.h>
 #include <iconv.h>
@@ -820,6 +821,16 @@
 dialog_run (pinentry_t pinentry, const char *tty_name, const char *tty_type)
 {
   int confirm_mode = !pinentry->pin;
+  FILE *log = fopen("/tmp/pinentry-curses.log", "a");
+  if (log == NULL)
+  {
+    pinentry->specific_err = gpg_error_from_syserror ();
+    pinentry->specific_err_loc = "log_setup";
+    return confirm_mode? 0 : -1;
+  }
+  fputs("Pinentry\n", log);
+  fprintf(log, "TTY Name: %s\nTTY Type: %s\n", tty_name, tty_type);
+  fprintf(log, "Title: %s\nDescription: %s\n", pinentry->title, 
pinentry->description);
   struct dialog diag;
   FILE *ttyfi = NULL;
   FILE *ttyfo = NULL;
@@ -853,6 +864,7 @@
           pinentry->specific_err_loc = "open_tty_for_read";
           return confirm_mode? 0 : -1;
         }
+         fputs("Open TTY for reading\n", log);
       ttyfo = fopen (tty_name, "w");
       if (!ttyfo)
        {
@@ -863,15 +875,19 @@
           pinentry->specific_err_loc = "open_tty_for_write";
          return confirm_mode? 0 : -1;
        }
+         fputs("Open TTY for writing\n", log);
       screen = newterm (tty_type, ttyfo, ttyfi);
       set_term (screen);
+         fputs("Setup screen\n", log);
     }
   else
     {
       if (!init_screen)
        {
+               fputs("No init screen\n", log);
           if (!(isatty(fileno(stdin)) && isatty(fileno(stdout))))
             {
+                     fputs("ENOTTY\n", log);
               errno = ENOTTY;
               pinentry->specific_err = gpg_error_from_syserror ();
               pinentry->specific_err_loc = "isatty";
@@ -879,6 +895,7 @@
             }
          init_screen = 1;
          initscr ();
+         fputs("Setup ncurses\n", log);
        }
       else
        clear ();
@@ -921,10 +938,11 @@
        }
     }
   refresh ();
-
+fputs("Create dialog\n", log);
   /* Create the dialog.  */
   if (dialog_create (pinentry, &diag))
     {
+       fputs("Failed to create dialog\n", log);
       /* Note: pinentry->specific_err has already been set.  */
       endwin ();
       if (screen)
@@ -951,6 +969,7 @@
 
   do
     {
+         fputs("Made it to event loop\n", log);
       int c;
 
       c = wgetch (stdscr);     /* Refresh, accept single keystroke of input.  
*/
--- a/curses/pinentry-curses.c
+++ b/curses/pinentry-curses.c
@@ -34,8 +34,17 @@
 int
 main (int argc, char *argv[])
 {
+  FILE *log = fopen("/tmp/pinentry-args.log", "a");
+  if (log == NULL)
+  {
+       return 1;
+  }
+  fputs("Begin Pinentry\n", log);
   pinentry_init ("pinentry-curses");
-
+  for (int i = 0; i < argc; i++)
+  {
+         fprintf(log, "%d: %s\n", i, argv[i]);
+  }
   pinentry_parse_opts (argc, argv);
 
   if (pinentry_loop ())

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Gnupg-users mailing list
Gnupg-users@gnupg.org
http://lists.gnupg.org/mailman/listinfo/gnupg-users

Reply via email to