diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-12-23 12:47:53 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-12-23 12:47:53 +0200 |
commit | a0f39d8121a900672a29761a6366568892b99563 (patch) | |
tree | 3e453d8bfaac6b90557139e152e2797908b171e2 /src | |
parent | d44a5b0b3818601311c6cde02a5ffe65b1a47554 (diff) | |
download | wydawca-a0f39d8121a900672a29761a6366568892b99563.tar.gz wydawca-a0f39d8121a900672a29761a6366568892b99563.tar.bz2 |
Minor bug fixes.
* src/mail.c (gpg_sign): Verify sign result.
(sign_message): Likewise. Free temporary
message on errors.
* src/null.c (null_move_file): Do not remove
file in dry-run mode.
* doc/wydawca.texi: Update.
Diffstat (limited to 'src')
-rw-r--r-- | src/mail.c | 62 | ||||
-rw-r--r-- | src/null.c | 2 |
2 files changed, 54 insertions, 10 deletions
@@ -74,2 +74,33 @@ mu_stream_data_read_cb (void *handle, void *buffer, size_t size) static int +check_sign_result (gpgme_sign_result_t result, gpgme_sig_mode_t type) +{ + gpgme_new_signature_t sign; + + if (result->invalid_signers) + { + logmsg (LOG_ERR, _("GPGME: invalid signer found: %s"), + result->invalid_signers->fpr); + return 1; + } + + if (!result->signatures) + { + logmsg (LOG_ERR, _("GPGME: no signatures created")); + return 1; + } + + for (sign = result->signatures; sign; sign = sign->next) + { + if (sign->type != type) + { + logmsg (LOG_ERR, _("GPGME: wrong type of signature created")); + return 1; + } + } + /* FIXME: fingerprint? */ + return 0; +} + + +static int gpg_sign (gpgme_data_t *output, gpgme_data_t input, const char *sign_keys) @@ -79,3 +110,4 @@ gpg_sign (gpgme_data_t *output, gpgme_data_t input, const char *sign_keys) gpgme_key_t key; - + int ret; + err = gpgme_new (&ctx); @@ -122,13 +154,21 @@ gpg_sign (gpgme_data_t *output, gpgme_data_t input, const char *sign_keys) if (err) - logmsg (LOG_ERR, _("%s: GPGME error: %s"), - "gpgme_op_sign", - gpgme_strerror (err)); + { + logmsg (LOG_ERR, _("%s: GPGME error: %s"), + "gpgme_op_sign", + gpgme_strerror (err)); + ret = 1; + } + else + { + ret = check_sign_result (gpgme_op_sign_result (ctx), + GPGME_SIG_MODE_CLEAR); #if 0 /* FIXME: */ - else if (debug_level > 1) - gpgme_debug_info (ctx); + if (debug_level > 1) + gpgme_debug_info (ctx); #endif - + } + gpgme_release (ctx); - return err != 0; + return ret; } @@ -190,3 +230,5 @@ sign_message (mu_message_t *pmsg, const char *key) rc = gpg_sign (&output, input, key); - + if (rc) + return 1; + if (gpgme_data_seek (output, 0, SEEK_SET) == -1) @@ -236,2 +278,4 @@ sign_message (mu_message_t *pmsg, const char *key) + if (rc) + mu_message_destroy (&newmsg, mu_message_get_owner (msg)); gpgme_data_release (output); @@ -27,3 +27,3 @@ null_move_file (struct file_triplet *trp, const struct spool *spool, UPDATE_STATS (STAT_UPLOADS); - if (unlink (file_name)) + if (!dry_run_mode && unlink (file_name)) { |