2002-02-25 Marcus Brinkmann <marcus@g10code.de>
authorMarcus Brinkmann <mb@g10code.com>
Mon, 25 Feb 2002 19:08:51 +0000 (19:08 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Mon, 25 Feb 2002 19:08:51 +0000 (19:08 +0000)
* verify.c (_gpgme_verify_status_handler): Parse the args line to
see if the problem is due to a missing key, and report that back
to the user.

trunk/gpgme/ChangeLog
trunk/gpgme/verify.c

index 16b91887fc206eb49794cb3e296c0bea6e41ee3f..ebecd26446697901a6e26da91d1917a4e6281ac2 100644 (file)
@@ -1,3 +1,9 @@
+2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
+
+       * verify.c (_gpgme_verify_status_handler): Parse the args line to
+       see if the problem is due to a missing key, and report that back
+       to the user.
+
 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
 
        * context.h (struct gpgme_context_s): New member include_certs.
index 768a6743618ddf7c495857be964250bd872db0be..ae6357903f1e28ec315168b7210a76c7f3c3124f 100644 (file)
@@ -191,9 +191,14 @@ _gpgme_verify_status_handler (GpgmeCtx ctx, GpgStatusCode code, char *args)
       break;
 
     case STATUS_ERRSIG:
-      ctx->result.verify->status = GPGME_SIG_STAT_ERROR;
-      /* FIXME: Distinguish between a regular error and a missing key.
-        This is encoded in the args.  */
+      /* The return code is the 6th argument, if it is 9, the problem
+        is a missing key.  */
+      for (p = args, i = 0; p && i < 5; i++)
+       p = strchr (p, ' ');
+      if (p && *(++p) == '9' && *(++p) == '\0')
+       ctx->result.verify->status = GPGME_SIG_STAT_NOKEY;
+      else
+       ctx->result.verify->status = GPGME_SIG_STAT_ERROR;
       /* Store the keyID in the fpr field.  */
       p = ctx->result.verify->fpr;
       for (i = 0; i < DIM(ctx->result.verify->fpr)