Better detection for signature creation failure.
authorWerner Koch <wk@gnupg.org>
Thu, 6 Aug 2009 19:09:10 +0000 (19:09 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 6 Aug 2009 19:09:10 +0000 (19:09 +0000)
src/ChangeLog
src/sign.c

index 330194988cd12090e47dc64c71ce48d2531c393a..df973ef5b1f192a8855d804bdb7fae9bfcf0bb2a 100644 (file)
@@ -10,6 +10,7 @@
        (sign_init_result): .. new.  Init new fields.
        (sign_start): Use sign_init_result.
        (_gpgme_sign_status_handler): Take care of the new INV_SGNR.
+       Return an error if no signature has been created.
 
 2009-07-07  Werner Koch  <wk@g10code.com>
 
index 1d3716fdf5b03a8b2596669309ab5fe5ad44cde0..8dfccf0629164c290f647ff53def83a363b445e8 100644 (file)
@@ -50,6 +50,7 @@ typedef struct
   /* Flags used while processing the status lines.  */
   unsigned int ignore_inv_recp:1;
   unsigned int inv_sgnr_seen:1;
+  unsigned int sig_created_seen:1;
 } *op_data_t;
 
 
@@ -262,6 +263,7 @@ _gpgme_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
   switch (code)
     {
     case GPGME_STATUS_SIG_CREATED:
+      opd->sig_created_seen = 1;
       err = parse_sig_created (args, opd->last_sig_p);
       if (err)
        return err;
@@ -285,7 +287,9 @@ _gpgme_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
 
     case GPGME_STATUS_EOF:
       if (opd->result.invalid_signers)
-       return gpg_error (GPG_ERR_UNUSABLE_SECKEY);
+       err = gpg_error (GPG_ERR_UNUSABLE_SECKEY);
+      else if (!opd->sig_created_seen)
+       err = gpg_error (GPG_ERR_GENERAL);
       break;
 
     default:
@@ -323,6 +327,7 @@ sign_init_result (gpgme_ctx_t ctx, int ignore_inv_recp)
   opd->last_sig_p = &opd->result.signatures;
   opd->ignore_inv_recp = !!ignore_inv_recp;
   opd->inv_sgnr_seen = 0;
+  opd->sig_created_seen = 0;
   return 0;
 }