Make recipients command work.
authorWerner Koch <wk@gnupg.org>
Tue, 10 Nov 2009 16:32:11 +0000 (16:32 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 10 Nov 2009 16:32:11 +0000 (16:32 +0000)
src/ChangeLog
src/engine-gpgsm.c
src/engine-uiserver.c
src/op-support.c

index 9c9fffaa29a258215f1c021799a2074d2fbda8ab..31cd1b0f9d2fddfe8fba800da9f6ad09d22e67b5 100644 (file)
@@ -1,7 +1,14 @@
 2009-11-10  Werner Koch  <wk@g10code.com>
 
+       * op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED
+       while setting the sub protocol.
+
        * engine-uiserver.c (uiserver_new): Pass fdpassing flag to
        assuan_socket_connect.
+       (set_recipients): Replace fingerprint by user id.
+
+       * engine-gpgsm.c (set_recipients): Fix non-terminating loop in
+       case of a missing key.
 
 2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
 
index d2670d6f1a22ed72c5e175f30e2ada26aa8bc19f..32294b0b4b3da283c9263c683992ae6247215f7f 100644 (file)
@@ -1161,14 +1161,14 @@ set_recipients (engine_gpgsm_t gpgsm, gpgme_key_t recp[])
   char *line;
   int linelen;
   int invalid_recipients = 0;
-  int i = 0;
+  int i;
 
   linelen = 10 + 40 + 1;       /* "RECIPIENT " + guess + '\0'.  */
   line = malloc (10 + 40 + 1);
   if (!line)
     return gpg_error_from_errno (errno);
   strcpy (line, "RECIPIENT ");
-  while (!err && recp[i])
+  for (i =0; !err && recp[i]; i++)
     {
       char *fpr;
       int newlen;
@@ -1205,7 +1205,6 @@ set_recipients (engine_gpgsm_t gpgsm, gpgme_key_t recp[])
          free (line);
          return err;
        }
-      i++;
     }
   free (line);
   return gpg_error (invalid_recipients
index cdcf683e99a129a4c18458b407bdf60bbc2f7821..623dd59361ac1b857489aaf380d1cb62c6a847ff 100644 (file)
@@ -1011,26 +1011,26 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])
   char *line;
   int linelen;
   int invalid_recipients = 0;
-  int i = 0;
+  int i;
 
   linelen = 10 + 40 + 1;       /* "RECIPIENT " + guess + '\0'.  */
   line = malloc (10 + 40 + 1);
   if (!line)
     return gpg_error_from_errno (errno);
   strcpy (line, "RECIPIENT ");
-  while (!err && recp[i])
+  for (i=0; !err && recp[i]; i++)
     {
-      char *fpr;
+      char *uid;
       int newlen;
 
-      if (!recp[i]->subkeys || !recp[i]->subkeys->fpr)
+      /* We use only the first user ID of the key.  */
+      if (!recp[i]->uids || !(uid=recp[i]->uids->uid) || !*uid)
        {
          invalid_recipients++;
          continue;
        }
-      fpr = recp[i]->subkeys->fpr;
 
-      newlen = 11 + strlen (fpr);
+      newlen = 11 + strlen (uid);
       if (linelen < newlen)
        {
          char *newline = realloc (line, newlen);
@@ -1043,11 +1043,12 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])
          line = newline;
          linelen = newlen;
        }
-      strcpy (&line[10], fpr);
+      /* FIXME: need to do proper escaping  */
+      strcpy (&line[10], uid);
 
       err = uiserver_assuan_simple_command (ctx, line, uiserver->status.fnc,
-                                        uiserver->status.fnc_value);
-      /* FIXME: This requires more work.  */
+                                            uiserver->status.fnc_value);
+      /* FIXME: This might requires more work.  */
       if (gpg_err_code (err) == GPG_ERR_NO_PUBKEY)
        invalid_recipients++;
       else if (err)
@@ -1055,7 +1056,6 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])
          free (line);
          return err;
        }
-      i++;
     }
   free (line);
   return gpg_error (invalid_recipients
index 8dfe15d7d6aeef6284f43500a5c848f2b21ca6fd..df54fc4d5757d4b3761fcdbc8222cde1e3af7c3d 100644 (file)
@@ -131,6 +131,8 @@ _gpgme_op_reset (gpgme_ctx_t ctx, int type)
     }
 
   err = _gpgme_engine_set_protocol (ctx->engine, ctx->sub_protocol);
+  if (gpg_err_code (err) == GPG_ERR_NOT_IMPLEMENTED)
+    err = 0;
   if (err)
     return err;