Fixes for the UI server engine .
authorWerner Koch <wk@gnupg.org>
Tue, 17 Nov 2009 13:06:05 +0000 (13:06 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 17 Nov 2009 13:06:05 +0000 (13:06 +0000)
src/ChangeLog
src/engine-uiserver.c
src/sign.c

index d7af1d6c0d4d59cb4b95f6d4dcc1665ad2e3efe0..1117bc4c757675b534b585210a7c9ca6959ee8f4 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-13    <wk@g10code.com>
+
+       * sign.c (_gpgme_sign_status_handler): Handle SIG_CREATED_SEEN.
+       * engine-uiserver.c (uiserver_sign): Make sending SENDER optional.
+
 2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
 
        * op-support.c (_gpgme_op_reset): Instead of last change, only set
index 623dd59361ac1b857489aaf380d1cb62c6a847ff..9e910b6f5fe840bdac6eef6ec0c2f994a901c9f6 100644 (file)
@@ -1153,6 +1153,7 @@ uiserver_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
   gpgme_error_t err = 0;
   const char *protocol;
   char *cmd;
+  gpgme_key_t key;
 
   if (!uiserver || !in || !out)
     return gpg_error (GPG_ERR_INV_VALUE);
@@ -1169,26 +1170,27 @@ uiserver_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
                (mode == GPGME_SIG_MODE_DETACH) ? " --detached" : "") < 0)
     return gpg_error_from_errno (errno);
 
-  {
-    gpgme_key_t key = gpgme_signers_enum (ctx, 0);
-    const char *s = NULL;
-
-    if (key && key->uids)
-      s = key->uids->email;
-    
-    if (s && strlen (s) < 80)
-      {
-       char buf[100];
-       
-       strcpy (stpcpy (buf, "SENDER --info "), s);
-       err = uiserver_assuan_simple_command (uiserver->assuan_ctx, buf,
-                                             uiserver->status.fnc,
-                                             uiserver->status.fnc_value);
-      }
-    else
-      err = gpg_error (GPG_ERR_INV_VALUE);
-    gpgme_key_unref (key);
-    if (err) 
+  key = gpgme_signers_enum (ctx, 0);
+  if (key)
+    {
+      const char *s = NULL;
+      
+      if (key && key->uids)
+        s = key->uids->email;
+      
+      if (s && strlen (s) < 80)
+        {
+          char buf[100];
+          
+          strcpy (stpcpy (buf, "SENDER --info "), s);
+          err = uiserver_assuan_simple_command (uiserver->assuan_ctx, buf,
+                                                uiserver->status.fnc,
+                                                uiserver->status.fnc_value);
+        }
+      else
+        err = gpg_error (GPG_ERR_INV_VALUE);
+      gpgme_key_unref (key);
+      if (err) 
       {
        free (cmd);
        return err;
index c66f06a0f695fb9539209bb86ebcfc37d410894a..3d860da4647d6ec1c4e305ff4103634bc30c0971 100644 (file)
@@ -286,9 +286,13 @@ _gpgme_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
       break;
 
     case GPGME_STATUS_EOF:
+      /* The UI server does not send information about the created
+         signature.  This is irrelevant for this protocol and thus we
+         should not check for that.  */
       if (opd->result.invalid_signers)
        err = gpg_error (GPG_ERR_UNUSABLE_SECKEY);
-      else if (!opd->sig_created_seen)
+      else if (!opd->sig_created_seen
+               && ctx->protocol != GPGME_PROTOCOL_UISERVER)
        err = gpg_error (GPG_ERR_GENERAL);
       break;