2003-05-27 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / tests / gpg / t-edit.c
index a90ebff..fb2f62f 100644 (file)
@@ -24,6 +24,7 @@
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
+#include <unistd.h>
 
 #include <gpgme.h>
 
@@ -58,61 +59,67 @@ flush_data (gpgme_data_t dh)
 
 
 static gpgme_error_t
-passphrase_cb (void *opaque, const char *desc,
-              void **r_hd, const char **result)
+passphrase_cb (void *opaque, const char *uid_hint, const char *passphrase_info,
+              int last_was_bad, int fd)
 {
-  if (!desc)
-    /* Cleanup by looking at *r_hd.  */
-    return 0;
-
-  *result = "abc";
-  fprintf (stderr, "%% requesting passphrase for `%s': ", desc);
-  fprintf (stderr, "sending `%s'\n", *result);
-  
+  write (fd, "abc\n", 4);
   return 0;
 }
 
 
 gpgme_error_t
-edit_fnc (void *opaque, gpgme_status_code_t status, const char *args, const char **result)
+edit_fnc (void *opaque, gpgme_status_code_t status, const char *args, int fd)
 {
+  char *result = NULL;
   gpgme_data_t out = (gpgme_data_t) opaque;
 
   fputs ("[-- Response --]\n", stdout);
   flush_data (out); 
 
   fprintf (stdout, "[-- Code: %i, %s --]\n", status, args);
-  if (result)
+
+  if (fd >= 0)
     {
       if (!strcmp (args, "keyedit.prompt"))
        {
          static int step = 0;
-
+         
          switch (step)
            {
            case 0:
-             *result = "fpr";
+             result = "fpr";
              break;
            case 1:
-             *result = "expire";
+             result = "expire";
+             break;
+
+             /* Work around a bug in GPG 1.2.2, which causes the
+                primary UID to change when setting the expiration
+                date.  */
+           case 2:
+             result = "1";
+             break;
+           case 3:
+             result = "primary";
              break;
+
            default:
-             *result = "quit";
+             result = "quit";
              break;
            }
          step++;
        }
       else if (!strcmp (args, "keyedit.save.okay"))
-       {
-         *result = "Y";
-       }
+       result = "Y";
       else if (!strcmp (args, "keygen.valid"))
-       {
-         *result = "0";
-       }
+       result = "0";
     }
 
+  if (result)
+    {
+      write (fd, result, strlen (result));
+      write (fd, "\n", 1);
+    }
   return 0;
 }