aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2009-08-06 19:09:10 +0000
committerWerner Koch <[email protected]>2009-08-06 19:09:10 +0000
commit35b25decde64447eb220961c92eabf7c50d9fc96 (patch)
tree0f8cd6f7ece4261c7beb43960dfb8b2e688c747e /src
parentFix detection of invalid signer keys. (diff)
downloadgpgme-35b25decde64447eb220961c92eabf7c50d9fc96.tar.gz
gpgme-35b25decde64447eb220961c92eabf7c50d9fc96.zip
Better detection for signature creation failure.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog1
-rw-r--r--src/sign.c7
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 33019498..df973ef5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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 <[email protected]>
diff --git a/src/sign.c b/src/sign.c
index 1d3716fd..8dfccf06 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -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;
}