2010-05-06 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / src / sign.c
index 0c85d0a..8aff542 100644 (file)
@@ -149,7 +149,7 @@ parse_sig_created (char *args, gpgme_new_signature_t *sigp)
 
   sig = malloc (sizeof (*sig));
   if (!sig)
-    return gpg_error_from_errno (errno);
+    return gpg_error_from_syserror ();
 
   sig->next = NULL;
   switch (*args)
@@ -179,7 +179,7 @@ parse_sig_created (char *args, gpgme_new_signature_t *sigp)
       return gpg_error (GPG_ERR_INV_ENGINE);
     }
 
-  errno = 0;
+  gpg_err_set_errno (0);
   sig->pubkey_algo = strtol (args, &tail, 0);
   if (errno || args == tail || *tail != ' ')
     {
@@ -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;
 
@@ -386,9 +390,11 @@ gpgme_error_t
 gpgme_op_sign_start (gpgme_ctx_t ctx, gpgme_data_t plain, gpgme_data_t sig,
                     gpgme_sig_mode_t mode)
 {
+  gpg_error_t err;
   TRACE_BEG3 (DEBUG_CTX, "gpgme_op_sign_start", ctx,
              "plain=%p, sig=%p, mode=%i", plain, sig, mode);
-  return TRACE_ERR (sign_start (ctx, 0, plain, sig, mode));
+  err = sign_start (ctx, 0, plain, sig, mode);
+  return TRACE_ERR (err);
 }