[gmime] Removed g_mime_signature_validity_get_status()
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Removed g_mime_signature_validity_get_status()
- Date: Mon, 29 Nov 2010 15:43:47 +0000 (UTC)
commit 0ac9806ca93348310fba93952378c9de25fb5a2b
Author: Jeffrey Stedfast <fejj gnome org>
Date: Mon Nov 29 10:43:01 2010 -0500
Removed g_mime_signature_validity_get_status()
2010-11-29 Jeffrey Stedfast <fejj novell com>
Fixes bug #635409.
* gmime/gmime-pkcs7-context.c (pkcs7_get_validity): Reworked the
logic to calculate the signer status. Also dropped
GMimeSignatureStatus logic.
* gmime/gmime-gpg-context.c (gpg_verify): Removed the (broken)
logic of calculating a GMimeSignatureStatus.
(gpg_decrypt): Same.
(gpg_ctx_parse_signer_info): Updated for the g_mime_signer_new()
API change.
* gmime/gmime-crypto-context.c (g_mime_signature_validity_new):
* No
longer initializes a GMimeSignatureStatus member.
(g_mime_signature_validity_get_status): Removed.
(g_mime_signature_validity_set_status): Removed.
(g_mime_signer_new): Now takes a GMimeSignerStatus so that I
could
get rid of the default NONE status.
* gmime/gmime-crypto-context.h (GMimeSignatureStatus): Removed.
ChangeLog | 25 ++++++++++++++-
examples/basic-example.c | 29 +++++++++++++----
gmime/gmime-crypto-context.c | 64 +++++++++-----------------------------
gmime/gmime-crypto-context.h | 31 ++----------------
gmime/gmime-gpg-context.c | 65 +++----------------------------------
gmime/gmime-pkcs7-context.c | 71 +++++++++++++++++++-----------------------
tests/test-pgp.c | 23 ++++++++++++--
tests/test-pgpmime.c | 42 ++++++++++++++++---------
tests/test-pkcs7.c | 23 ++++++++++++--
tests/test-smime.c | 42 ++++++++++++++++---------
10 files changed, 197 insertions(+), 218 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 56e626f..2e2b831 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2010-11-29 Jeffrey Stedfast <fejj novell com>
+
+ Fixes bug #635409.
+
+ * gmime/gmime-pkcs7-context.c (pkcs7_get_validity): Reworked the
+ logic to calculate the signer status. Also dropped
+ GMimeSignatureStatus logic.
+
+ * gmime/gmime-gpg-context.c (gpg_verify): Removed the (broken)
+ logic of calculating a GMimeSignatureStatus.
+ (gpg_decrypt): Same.
+ (gpg_ctx_parse_signer_info): Updated for the g_mime_signer_new()
+ API change.
+
+ * gmime/gmime-crypto-context.c (g_mime_signature_validity_new): No
+ longer initializes a GMimeSignatureStatus member.
+ (g_mime_signature_validity_get_status): Removed.
+ (g_mime_signature_validity_set_status): Removed.
+ (g_mime_signer_new): Now takes a GMimeSignerStatus so that I could
+ get rid of the default NONE status.
+
+ * gmime/gmime-crypto-context.h (GMimeSignatureStatus): Removed.
+
2010-11-24 Jeffrey Stedfast <fejj novell com>
Fixes bug #635661.
@@ -5,7 +28,7 @@
* gmime/gmime-crypto-context.c (g_mime_signer_new): Initialize
pubkey_algo and hash_algo.
(g_mime_signer_[g,s]et_pubkey_algo): Implemented.
- (g_mime_signer_[g,s]et_hash_algo): Renamed from [g,s]_hash().
+ (g_mime_signer_[g,s]et_hash_algo): Renamed from [g,s]et_hash().
* gmime/gmime-crypto-context.h (GMimeCryptoPubKeyAlgo): Defined
enum.
diff --git a/examples/basic-example.c b/examples/basic-example.c
index b68e43e..6f83e68 100644
--- a/examples/basic-example.c
+++ b/examples/basic-example.c
@@ -136,6 +136,23 @@ count_parts_in_message (GMimeMessage *message)
}
#ifndef G_OS_WIN32
+static GMimeSignerStatus
+sig_status (GMimeSignatureValidity *validity)
+{
+ GMimeSignerStatus status = GMIME_SIGNER_STATUS_GOOD;
+ GMimeSigner *signer = validity->signers;
+
+ if (signer == NULL)
+ return GMIME_SIGNER_STATUS_ERROR;
+
+ while (signer != NULL) {
+ status = MAX (status, signer->status);
+ signer = signer->next;
+ }
+
+ return status;
+}
+
static void
verify_foreach_callback (GMimeObject *parent, GMimeObject *part, gpointer user_data)
{
@@ -145,7 +162,6 @@ verify_foreach_callback (GMimeObject *parent, GMimeObject *part, gpointer user_d
/* this is a multipart/signed part, so we can verify the pgp signature */
GMimeMultipartSigned *mps = (GMimeMultipartSigned *) part;
GMimeSignatureValidity *validity;
- GMimeSignatureStatus status;
GError *err = NULL;
const char *str;
@@ -160,16 +176,15 @@ verify_foreach_callback (GMimeObject *parent, GMimeObject *part, gpointer user_d
g_error_free (err);
} else {
/* print out validity info - GOOD vs BAD and "why" */
- status = g_mime_signature_validity_get_status (validity);
- switch (status) {
- case GMIME_SIGNATURE_STATUS_GOOD:
+ switch (sig_status (validity)) {
+ case GMIME_SIGNER_STATUS_GOOD:
str = "Good";
break;
- case GMIME_SIGNATURE_STATUS_BAD:
+ case GMIME_SIGNER_STATUS_BAD:
str = "Bad";
break;
- case GMIME_SIGNATURE_STATUS_UNKNOWN:
- str = "Unknown";
+ case GMIME_SIGNER_STATUS_ERROR:
+ str = "Error";
break;
default:
str = NULL;
diff --git a/gmime/gmime-crypto-context.c b/gmime/gmime-crypto-context.c
index e2f7223..1f14b68 100644
--- a/gmime/gmime-crypto-context.c
+++ b/gmime/gmime-crypto-context.c
@@ -354,13 +354,11 @@ crypto_decrypt (GMimeCryptoContext *ctx, GMimeStream *istream,
* cleartext to the output stream.
*
* If the encrypted input stream was also signed, the returned
- * #GMimeSignatureValidity will have signer information included and
- * the signature status will be one of #GMIME_SIGNATURE_STATUS_GOOD,
- * #GMIME_SIGNATURE_STATUS_BAD, or #GMIME_SIGNATURE_STATUS_UNKNOWN.
+ * #GMimeSignatureValidity will contain a list of signers, each with a
+ * #GMimeSignerStatus (among other details).
*
- * If the encrypted input text was not signed, then the signature
- * status of the returned #GMimeSignatureValidity will be
- * #GMIME_SIGNATURE_STATUS_NONE.
+ * If the encrypted input text was not signed, then the
+ * #GMimeSignatureValidity will not contain any signers.
*
* Returns: a #GMimeSignatureValidity on success or %NULL on error.
**/
@@ -444,22 +442,23 @@ g_mime_crypto_context_export_keys (GMimeCryptoContext *ctx, GPtrArray *keys,
/**
* g_mime_signer_new:
+ * @status: A #GMimeSignerStatus
*
- * Allocates an new #GMimeSigner. This function is meant to be used in
- * #GMimeCryptoContext subclasses when allocating signers to add to a
- * #GMimeSignatureValidity.
+ * Allocates an new #GMimeSigner with the designated @status. This
+ * function is meant to be used in #GMimeCryptoContext subclasses when
+ * allocating signers to add to a #GMimeSignatureValidity.
*
- * Returns: a new #GMimeSigner.
+ * Returns: a new #GMimeSigner with the designated @status.
**/
GMimeSigner *
-g_mime_signer_new (void)
+g_mime_signer_new (GMimeSignerStatus status)
{
GMimeSigner *signer;
signer = g_slice_new (GMimeSigner);
signer->pubkey_algo = GMIME_CRYPTO_PUBKEY_ALGO_DEFAULT;
signer->hash_algo = GMIME_CRYPTO_HASH_DEFAULT;
- signer->status = GMIME_SIGNER_STATUS_NONE;
+ signer->status = status;
signer->errors = GMIME_SIGNER_ERROR_NONE;
signer->trust = GMIME_SIGNER_TRUST_NONE;
signer->sig_created = (time_t) -1;
@@ -543,7 +542,7 @@ g_mime_signer_set_status (GMimeSigner *signer, GMimeSignerStatus status)
GMimeSignerStatus
g_mime_signer_get_status (const GMimeSigner *signer)
{
- g_return_val_if_fail (signer != NULL, GMIME_SIGNER_STATUS_NONE);
+ g_return_val_if_fail (signer != NULL, GMIME_SIGNER_STATUS_BAD);
return signer->status;
}
@@ -569,7 +568,9 @@ g_mime_signer_set_errors (GMimeSigner *signer, GMimeSignerError errors)
* g_mime_signer_get_errors:
* @signer: a #GMimeSigner
*
- * Get the signer errors.
+ * Get the signer errors. If the #GMimeSignerStatus returned from
+ * g_mime_signer_get_status() is not #GMIME_SIGNER_STATUS_GOOD, then
+ * the errors may provide a clue as to why.
*
* Returns: the signer errors.
**/
@@ -1032,7 +1033,6 @@ g_mime_signature_validity_new (void)
GMimeSignatureValidity *validity;
validity = g_slice_new (GMimeSignatureValidity);
- validity->status = GMIME_SIGNATURE_STATUS_NONE;
validity->signers = NULL;
validity->details = NULL;
@@ -1068,40 +1068,6 @@ g_mime_signature_validity_free (GMimeSignatureValidity *validity)
/**
- * g_mime_signature_validity_get_status:
- * @validity: signature validity
- *
- * Gets the signature status (GOOD, BAD, UNKNOWN).
- *
- * Returns: a #GMimeSignatureStatus value.
- **/
-GMimeSignatureStatus
-g_mime_signature_validity_get_status (const GMimeSignatureValidity *validity)
-{
- g_return_val_if_fail (validity != NULL, GMIME_SIGNATURE_STATUS_NONE);
-
- return validity->status;
-}
-
-
-/**
- * g_mime_signature_validity_set_status:
- * @validity: signature validity
- * @status: GOOD, BAD or UNKNOWN
- *
- * Sets the status of the signature on @validity.
- **/
-void
-g_mime_signature_validity_set_status (GMimeSignatureValidity *validity, GMimeSignatureStatus status)
-{
- g_return_if_fail (status != GMIME_SIGNATURE_STATUS_NONE);
- g_return_if_fail (validity != NULL);
-
- validity->status = status;
-}
-
-
-/**
* g_mime_signature_validity_get_details:
* @validity: signature validity
*
diff --git a/gmime/gmime-crypto-context.h b/gmime/gmime-crypto-context.h
index 26d49b7..b6d57ad 100644
--- a/gmime/gmime-crypto-context.h
+++ b/gmime/gmime-crypto-context.h
@@ -231,19 +231,17 @@ typedef enum {
/**
* GMimeSignerStatus:
- * @GMIME_SIGNER_STATUS_NONE: No status.
* @GMIME_SIGNER_STATUS_GOOD: Good signature.
- * @GMIME_SIGNER_STATUS_BAD: Bad signature.
* @GMIME_SIGNER_STATUS_ERROR: An error occurred.
+ * @GMIME_SIGNER_STATUS_BAD: Bad signature.
*
* A value representing the signature status for a particular
* #GMimeSigner.
**/
typedef enum {
- GMIME_SIGNER_STATUS_NONE,
GMIME_SIGNER_STATUS_GOOD,
- GMIME_SIGNER_STATUS_BAD,
- GMIME_SIGNER_STATUS_ERROR
+ GMIME_SIGNER_STATUS_ERROR,
+ GMIME_SIGNER_STATUS_BAD
} GMimeSignerStatus;
@@ -309,7 +307,7 @@ struct _GMimeSigner {
};
-GMimeSigner *g_mime_signer_new (void);
+GMimeSigner *g_mime_signer_new (GMimeSignerStatus status);
void g_mime_signer_free (GMimeSigner *signer);
GMimeSigner *g_mime_signer_next (GMimeSigner *signer);
@@ -361,23 +359,6 @@ time_t g_mime_signer_get_key_expires (const GMimeSigner *signer);
/**
- * GMimeSignatureStatus:
- * @GMIME_SIGNATURE_STATUS_NONE: No status.
- * @GMIME_SIGNATURE_STATUS_GOOD: Good signature.
- * @GMIME_SIGNATURE_STATUS_BAD: Bad signature.
- * @GMIME_SIGNATURE_STATUS_UNKNOWN: Unknown signature status.
- *
- * The status of a message signature.
- **/
-typedef enum {
- GMIME_SIGNATURE_STATUS_NONE,
- GMIME_SIGNATURE_STATUS_GOOD,
- GMIME_SIGNATURE_STATUS_BAD,
- GMIME_SIGNATURE_STATUS_UNKNOWN
-} GMimeSignatureStatus;
-
-
-/**
* GMimeSignatureValidity:
* @status: The overall signature status.
* @signers: A list of #GMimeSigner structures.
@@ -387,7 +368,6 @@ typedef enum {
* a signed stream.
**/
struct _GMimeSignatureValidity {
- GMimeSignatureStatus status;
GMimeSigner *signers;
char *details;
};
@@ -396,9 +376,6 @@ struct _GMimeSignatureValidity {
GMimeSignatureValidity *g_mime_signature_validity_new (void);
void g_mime_signature_validity_free (GMimeSignatureValidity *validity);
-GMimeSignatureStatus g_mime_signature_validity_get_status (const GMimeSignatureValidity *validity);
-void g_mime_signature_validity_set_status (GMimeSignatureValidity *validity, GMimeSignatureStatus status);
-
const char *g_mime_signature_validity_get_details (const GMimeSignatureValidity *validity);
void g_mime_signature_validity_set_details (GMimeSignatureValidity *validity, const char *details);
diff --git a/gmime/gmime-gpg-context.c b/gmime/gmime-gpg-context.c
index e010ec5..82dba35 100644
--- a/gmime/gmime-gpg-context.c
+++ b/gmime/gmime-gpg-context.c
@@ -292,17 +292,9 @@ struct _GpgCtx {
unsigned int always_trust:1;
unsigned int armor:1;
unsigned int need_passwd:1;
-
unsigned int bad_passwds:2;
- unsigned int badsig:1;
- unsigned int errsig:1;
- unsigned int goodsig:1;
- unsigned int validsig:1;
- unsigned int nopubkey:1;
- unsigned int nodata:1;
-
- unsigned int padding:15;
+ unsigned int padding:21;
};
static struct _GpgCtx *
@@ -344,13 +336,6 @@ gpg_ctx_new (GMimeGpgContext *ctx)
gpg->need_passwd = FALSE;
gpg->need_id = NULL;
- gpg->nodata = FALSE;
- gpg->badsig = FALSE;
- gpg->errsig = FALSE;
- gpg->goodsig = FALSE;
- gpg->validsig = FALSE;
- gpg->nopubkey = FALSE;
-
gpg->signers = NULL;
gpg->signer = (GMimeSigner *) &gpg->signers;
@@ -846,11 +831,9 @@ gpg_ctx_parse_signer_info (struct _GpgCtx *gpg, char *status)
if (!strncmp (status, "SIG_ID ", 7)) {
/* not sure if this contains anything we care about... */
} else if (!strncmp (status, "GOODSIG ", 8)) {
- gpg->goodsig = TRUE;
status += 8;
- signer = g_mime_signer_new ();
- signer->status = GMIME_SIGNER_STATUS_GOOD;
+ signer = g_mime_signer_new (GMIME_SIGNER_STATUS_GOOD);
gpg->signer->next = signer;
gpg->signer = signer;
@@ -860,11 +843,9 @@ gpg_ctx_parse_signer_info (struct _GpgCtx *gpg, char *status)
/* the rest of the string is the signer's name */
signer->name = g_strdup (status);
} else if (!strncmp (status, "BADSIG ", 7)) {
- gpg->badsig = TRUE;
status += 7;
- signer = g_mime_signer_new ();
- signer->status = GMIME_SIGNER_STATUS_BAD;
+ signer = g_mime_signer_new (GMIME_SIGNER_STATUS_BAD);
gpg->signer->next = signer;
gpg->signer = signer;
@@ -875,11 +856,9 @@ gpg_ctx_parse_signer_info (struct _GpgCtx *gpg, char *status)
signer->name = g_strdup (status);
} else if (!strncmp (status, "ERRSIG ", 7)) {
/* Note: NO_PUBKEY often comes after an ERRSIG */
- gpg->errsig = TRUE;
status += 7;
- signer = g_mime_signer_new ();
- signer->status = GMIME_SIGNER_STATUS_ERROR;
+ signer = g_mime_signer_new (GMIME_SIGNER_STATUS_ERROR);
gpg->signer->next = signer;
gpg->signer = signer;
@@ -903,7 +882,6 @@ gpg_ctx_parse_signer_info (struct _GpgCtx *gpg, char *status)
} else if (!strncmp (status, "NO_PUBKEY ", 10)) {
/* the only token is the keyid, but we've already got it */
gpg->signer->errors |= GMIME_SIGNER_ERROR_NO_PUBKEY;
- gpg->nopubkey = TRUE;
} else if (!strncmp (status, "EXPSIG", 6)) {
/* FIXME: see what else we can glean from this... */
gpg->signer->errors |= GMIME_SIGNER_ERROR_EXPSIG;
@@ -914,7 +892,6 @@ gpg_ctx_parse_signer_info (struct _GpgCtx *gpg, char *status)
} else if (!strncmp (status, "VALIDSIG ", 9)) {
char *inend;
- gpg->validsig = TRUE;
status += 9;
signer = gpg->signer;
@@ -1181,8 +1158,6 @@ gpg_ctx_parse_status (struct _GpgCtx *gpg, GError **err)
else
g_set_error_literal (err, GMIME_ERROR, GMIME_ERROR_GENERAL, _("No data provided"));
- gpg->nodata = TRUE;
-
return -1;
} else {
switch (gpg->mode) {
@@ -1799,19 +1774,6 @@ gpg_verify (GMimeCryptoContext *context, GMimeCryptoHash hash,
validity = g_mime_signature_validity_new ();
g_mime_signature_validity_set_details (validity, diagnostics);
-
- if (gpg->goodsig && !(gpg->badsig || gpg->errsig || gpg->nodata)) {
- /* all signatures were good */
- validity->status = GMIME_SIGNATURE_STATUS_GOOD;
- } else if (gpg->badsig && !(gpg->goodsig && !gpg->errsig)) {
- /* all signatures were bad */
- validity->status = GMIME_SIGNATURE_STATUS_BAD;
- } else if (!gpg->nodata) {
- validity->status = GMIME_SIGNATURE_STATUS_UNKNOWN;
- } else {
- validity->status = GMIME_SIGNATURE_STATUS_BAD;
- }
-
validity->signers = gpg->signers;
gpg->signers = NULL;
@@ -1931,23 +1893,8 @@ gpg_decrypt (GMimeCryptoContext *context, GMimeStream *istream,
validity = g_mime_signature_validity_new ();
g_mime_signature_validity_set_details (validity, diagnostics);
-
- if (gpg->signers) {
- if (gpg->goodsig && !(gpg->badsig || gpg->errsig || gpg->nodata)) {
- /* all signatures were good */
- validity->status = GMIME_SIGNATURE_STATUS_GOOD;
- } else if (gpg->badsig && !(gpg->goodsig && !gpg->errsig)) {
- /* all signatures were bad */
- validity->status = GMIME_SIGNATURE_STATUS_BAD;
- } else if (!gpg->nodata) {
- validity->status = GMIME_SIGNATURE_STATUS_UNKNOWN;
- } else {
- validity->status = GMIME_SIGNATURE_STATUS_BAD;
- }
-
- validity->signers = gpg->signers;
- gpg->signers = NULL;
- }
+ validity->signers = gpg->signers;
+ gpg->signers = NULL;
gpg_ctx_free (gpg);
diff --git a/gmime/gmime-pkcs7-context.c b/gmime/gmime-pkcs7-context.c
index 249f295..22a02b5 100644
--- a/gmime/gmime-pkcs7-context.c
+++ b/gmime/gmime-pkcs7-context.c
@@ -503,11 +503,9 @@ pkcs7_hash_algo (gpgme_hash_algo_t id)
static GMimeSignatureValidity *
pkcs7_get_validity (Pkcs7Ctx *pkcs7, gboolean verify)
{
- GMimeSignatureStatus status = GMIME_SIGNATURE_STATUS_GOOD;
GMimeSignatureValidity *validity;
GMimeSigner *signers, *signer;
gpgme_verify_result_t result;
- GMimeSignerError errors;
gpgme_subkey_t subkey;
gpgme_signature_t sig;
gpgme_user_id_t uid;
@@ -517,19 +515,18 @@ pkcs7_get_validity (Pkcs7Ctx *pkcs7, gboolean verify)
validity = g_mime_signature_validity_new ();
/* get the signature verification results from GpgMe */
- if (!(result = gpgme_op_verify_result (pkcs7->ctx)) || !result->signatures) {
- if (verify)
- g_mime_signature_validity_set_status (validity, GMIME_SIGNATURE_STATUS_UNKNOWN);
-
+ if (!(result = gpgme_op_verify_result (pkcs7->ctx)) || !result->signatures)
return validity;
- }
/* collect the signers for this signature */
signers = (GMimeSigner *) &validity->signers;
sig = result->signatures;
while (sig != NULL) {
- signer = g_mime_signer_new ();
+ if (sig->status != GPG_ERR_NO_ERROR)
+ signer = g_mime_signer_new (GMIME_SIGNER_STATUS_ERROR);
+ else
+ signer = g_mime_signer_new (GMIME_SIGNER_STATUS_GOOD);
signers->next = signer;
signers = signer;
@@ -539,10 +536,11 @@ pkcs7_get_validity (Pkcs7Ctx *pkcs7, gboolean verify)
g_mime_signer_set_sig_created (signer, sig->timestamp);
g_mime_signer_set_fingerprint (signer, sig->fpr);
- errors = GMIME_SIGNER_ERROR_NONE;
-
- if (sig->exp_timestamp != 0 && sig->exp_timestamp <= time (NULL))
- errors |= GMIME_SIGNER_ERROR_EXPSIG;
+ if (sig->exp_timestamp != 0 && sig->exp_timestamp <= time (NULL)) {
+ /* signature expired, automatically results in a BAD signature */
+ signer->errors |= GMIME_SIGNER_ERROR_EXPSIG;
+ signer->status = GMIME_SIGNER_STATUS_BAD;
+ }
if (gpgme_get_key (pkcs7->ctx, sig->fpr, &key, 0) == GPG_ERR_NO_ERROR && key) {
/* get more signer info from their signing key */
@@ -577,45 +575,40 @@ pkcs7_get_validity (Pkcs7Ctx *pkcs7, gboolean verify)
g_mime_signer_set_key_created (signer, subkey->timestamp);
g_mime_signer_set_key_expires (signer, subkey->expires);
- if (subkey->revoked)
- errors |= GMIME_SIGNER_ERROR_REVKEYSIG;
+ if (subkey->revoked) {
+ /* signer's key has been revoked, automatic BAD status */
+ signer->errors |= GMIME_SIGNER_ERROR_REVKEYSIG;
+ signer->status = GMIME_SIGNER_STATUS_BAD;
+ }
- if (subkey->expired)
- errors |= GMIME_SIGNER_ERROR_EXPKEYSIG;
+ if (subkey->expired) {
+ /* signer's key has expired, automatic BAD status */
+ signer->errors |= GMIME_SIGNER_ERROR_EXPKEYSIG;
+ signer->status = GMIME_SIGNER_STATUS_BAD;
+ }
} else {
- errors |= GMIME_SIGNER_ERROR_NO_PUBKEY;
+ /* If we don't have the subkey used by the signer, then we can't
+ * tell what the status is, so set to ERROR if it hasn't already
+ * been designated as BAD. */
+ if (signer->status != GMIME_SIGNER_STATUS_BAD)
+ signer->status = GMIME_SIGNER_STATUS_ERROR;
+ signer->errors |= GMIME_SIGNER_ERROR_NO_PUBKEY;
}
gpgme_key_unref (key);
} else {
- /* don't have any key information available... */
+ /* If we don't have the signer's public key, then we can't tell what
+ * the status is, so set it to ERROR if it hasn't already been
+ * designated as BAD. */
g_mime_signer_set_trust (signer, GMIME_SIGNER_TRUST_UNDEFINED);
- errors |= GMIME_SIGNER_ERROR_NO_PUBKEY;
- }
-
- /* set the accumulated signer errors */
- g_mime_signer_set_errors (signer, errors);
-
- /* get the signer's status and update overall status */
- if (sig->status != GPG_ERR_NO_ERROR) {
- if (signer->errors && signer->errors != GMIME_SIGNER_ERROR_NO_PUBKEY) {
- g_mime_signer_set_status (signer, GMIME_SIGNER_STATUS_ERROR);
- if (status != GMIME_SIGNATURE_STATUS_BAD)
- status = GMIME_SIGNATURE_STATUS_UNKNOWN;
- } else {
- g_mime_signer_set_status (signer, GMIME_SIGNER_STATUS_BAD);
- status = GMIME_SIGNATURE_STATUS_BAD;
- }
- } else {
- g_mime_signer_set_status (signer, GMIME_SIGNER_STATUS_GOOD);
+ if (signer->status != GMIME_SIGNER_STATUS_BAD)
+ signer->status = GMIME_SIGNER_STATUS_ERROR;
+ signer->errors |= GMIME_SIGNER_ERROR_NO_PUBKEY;
}
sig = sig->next;
}
- /* set the resulting overall signature status */
- g_mime_signature_validity_set_status (validity, status);
-
return validity;
}
#endif /* ENABLE_SMIME */
diff --git a/tests/test-pgp.c b/tests/test-pgp.c
index 7e63693..f66fa99 100644
--- a/tests/test-pgp.c
+++ b/tests/test-pgp.c
@@ -46,6 +46,23 @@ request_passwd (GMimeCryptoContext *ctx, const char *user_id, const char *prompt
return TRUE;
}
+static GMimeSignerStatus
+get_sig_status (GMimeSigner *signers)
+{
+ GMimeSignerStatus status = GMIME_SIGNER_STATUS_GOOD;
+ GMimeSigner *signer = signers;
+
+ if (signers == NULL)
+ return GMIME_SIGNER_STATUS_ERROR;
+
+ while (signer != NULL) {
+ status = MAX (status, signer->status);
+ signer = signer->next;
+ }
+
+ return status;
+}
+
static void
test_sign (GMimeCryptoContext *ctx, GMimeStream *cleartext, GMimeStream *ciphertext)
{
@@ -85,7 +102,7 @@ test_verify (GMimeCryptoContext *ctx, GMimeStream *cleartext, GMimeStream *ciphe
throw (ex);
}
- if (validity->status != GMIME_SIGNATURE_STATUS_GOOD) {
+ if (get_sig_status (validity->signers) != GMIME_SIGNER_STATUS_GOOD) {
g_mime_signature_validity_free (validity);
throw (exception_new ("signature BAD"));
}
@@ -138,10 +155,10 @@ test_decrypt (GMimeCryptoContext *ctx, gboolean sign, GMimeStream *cleartext, GM
}
if (sign) {
- if (sv->status != GMIME_SIGNATURE_STATUS_GOOD)
+ if (get_sig_status (sv->signers) != GMIME_SIGNER_STATUS_GOOD)
ex = exception_new ("expected GOOD signature");
} else {
- if (sv->status != GMIME_SIGNATURE_STATUS_NONE)
+ if (sv->signers != NULL)
ex = exception_new ("unexpected signature");
}
diff --git a/tests/test-pgpmime.c b/tests/test-pgpmime.c
index 4cbf8b1..cb00547 100644
--- a/tests/test-pgpmime.c
+++ b/tests/test-pgpmime.c
@@ -47,23 +47,37 @@ request_passwd (GMimeCryptoContext *ctx, const char *user_id, const char *prompt
return TRUE;
}
+static GMimeSignerStatus
+get_sig_status (GMimeSigner *signers)
+{
+ GMimeSignerStatus status = GMIME_SIGNER_STATUS_GOOD;
+ GMimeSigner *signer = signers;
+
+ if (signers == NULL)
+ return GMIME_SIGNER_STATUS_ERROR;
+
+ while (signer != NULL) {
+ status = MAX (status, signer->status);
+ signer = signer->next;
+ }
+
+ return status;
+}
+
static void
print_verify_results (const GMimeSignatureValidity *validity)
{
GMimeSigner *signer;
- switch (validity->status) {
- case GMIME_SIGNATURE_STATUS_NONE:
- fputs ("NONE\n", stdout);
- break;
- case GMIME_SIGNATURE_STATUS_GOOD:
+ switch (get_sig_status (validity->signers)) {
+ case GMIME_SIGNER_STATUS_GOOD:
fputs ("GOOD\n", stdout);
break;
- case GMIME_SIGNATURE_STATUS_BAD:
+ case GMIME_SIGNER_STATUS_BAD:
fputs ("BAD\n", stdout);
break;
- case GMIME_SIGNATURE_STATUS_UNKNOWN:
- fputs ("Unknown status\n", stdout);
+ case GMIME_SIGNER_STATUS_ERROR:
+ fputs ("ERROR status\n", stdout);
break;
default:
fputs ("Unknown enum value\n", stdout);
@@ -84,6 +98,7 @@ print_verify_results (const GMimeSignatureValidity *validity)
break;
case GMIME_SIGNER_TRUST_NEVER:
fputs ("Never\n", stdout);
+ break;
case GMIME_SIGNER_TRUST_UNDEFINED:
fputs ("Undefined\n", stdout);
break;
@@ -100,9 +115,6 @@ print_verify_results (const GMimeSignatureValidity *validity)
fprintf (stdout, "\tStatus: ");
switch (signer->status) {
- case GMIME_SIGNER_STATUS_NONE:
- fputs ("None\n", stdout);
- break;
case GMIME_SIGNER_STATUS_GOOD:
fputs ("GOOD\n", stdout);
break;
@@ -342,11 +354,11 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
v(print_verify_results (sv));
if (sign) {
- if (sv->status != GMIME_SIGNATURE_STATUS_GOOD)
- ex = exception_new ("signature validity status expected to be GOOD");
+ if (get_sig_status (sv->signers) != GMIME_SIGNER_STATUS_GOOD)
+ ex = exception_new ("signature status expected to be GOOD");
} else {
- if (sv->status != GMIME_SIGNATURE_STATUS_NONE)
- ex = exception_new ("signature validity status expected to be NONE");
+ if (sv->signers != NULL)
+ ex = exception_new ("signature status expected to be NONE");
}
if (ex != NULL) {
diff --git a/tests/test-pkcs7.c b/tests/test-pkcs7.c
index e4e47a9..21fcb9a 100644
--- a/tests/test-pkcs7.c
+++ b/tests/test-pkcs7.c
@@ -47,6 +47,23 @@ request_passwd (GMimeCryptoContext *ctx, const char *user_id, const char *prompt
return TRUE;
}
+static GMimeSignerStatus
+get_sig_status (GMimeSigner *signers)
+{
+ GMimeSignerStatus status = GMIME_SIGNER_STATUS_GOOD;
+ GMimeSigner *signer = signers;
+
+ if (signers == NULL)
+ return GMIME_SIGNER_STATUS_ERROR;
+
+ while (signer != NULL) {
+ status = MAX (status, signer->status);
+ signer = signer->next;
+ }
+
+ return status;
+}
+
static void
test_sign (GMimeCryptoContext *ctx, GMimeStream *cleartext, GMimeStream *ciphertext)
{
@@ -86,7 +103,7 @@ test_verify (GMimeCryptoContext *ctx, GMimeStream *cleartext, GMimeStream *ciphe
throw (ex);
}
- if (validity->status != GMIME_SIGNATURE_STATUS_GOOD) {
+ if (get_sig_status (validity->signers) != GMIME_SIGNER_STATUS_GOOD) {
g_mime_signature_validity_free (validity);
throw (exception_new ("signature BAD"));
}
@@ -140,10 +157,10 @@ test_decrypt (GMimeCryptoContext *ctx, gboolean sign, GMimeStream *cleartext, GM
}
if (sign) {
- if (sv->status != GMIME_SIGNATURE_STATUS_GOOD)
+ if (get_sig_status (sv->signers) != GMIME_SIGNER_STATUS_GOOD)
ex = exception_new ("expected GOOD signature");
} else {
- if (sv->status != GMIME_SIGNATURE_STATUS_NONE)
+ if (sv->signers != NULL)
ex = exception_new ("unexpected signature");
}
diff --git a/tests/test-smime.c b/tests/test-smime.c
index a3ef830..2cb2a0c 100644
--- a/tests/test-smime.c
+++ b/tests/test-smime.c
@@ -48,23 +48,37 @@ request_passwd (GMimeCryptoContext *ctx, const char *user_id, const char *prompt
return TRUE;
}
+static GMimeSignerStatus
+get_sig_status (GMimeSigner *signers)
+{
+ GMimeSignerStatus status = GMIME_SIGNER_STATUS_GOOD;
+ GMimeSigner *signer = signers;
+
+ if (signers == NULL)
+ return GMIME_SIGNER_STATUS_ERROR;
+
+ while (signer != NULL) {
+ status = MAX (status, signer->status);
+ signer = signer->next;
+ }
+
+ return status;
+}
+
static void
print_verify_results (const GMimeSignatureValidity *validity)
{
GMimeSigner *signer;
- switch (validity->status) {
- case GMIME_SIGNATURE_STATUS_NONE:
- fputs ("NONE\n", stdout);
- break;
- case GMIME_SIGNATURE_STATUS_GOOD:
+ switch (get_sig_status (validity->signers)) {
+ case GMIME_SIGNER_STATUS_GOOD:
fputs ("GOOD\n", stdout);
break;
- case GMIME_SIGNATURE_STATUS_BAD:
+ case GMIME_SIGNER_STATUS_BAD:
fputs ("BAD\n", stdout);
break;
- case GMIME_SIGNATURE_STATUS_UNKNOWN:
- fputs ("Unknown status\n", stdout);
+ case GMIME_SIGNER_STATUS_ERROR:
+ fputs ("ERROR status\n", stdout);
break;
default:
fputs ("Unknown enum value\n", stdout);
@@ -85,6 +99,7 @@ print_verify_results (const GMimeSignatureValidity *validity)
break;
case GMIME_SIGNER_TRUST_NEVER:
fputs ("Never\n", stdout);
+ break;
case GMIME_SIGNER_TRUST_UNDEFINED:
fputs ("Undefined\n", stdout);
break;
@@ -101,9 +116,6 @@ print_verify_results (const GMimeSignatureValidity *validity)
fprintf (stdout, "\tStatus: ");
switch (signer->status) {
- case GMIME_SIGNER_STATUS_NONE:
- fputs ("None\n", stdout);
- break;
case GMIME_SIGNER_STATUS_GOOD:
fputs ("GOOD\n", stdout);
break;
@@ -343,11 +355,11 @@ test_multipart_encrypted (GMimeCryptoContext *ctx, gboolean sign)
v(print_verify_results (sv));
if (sign) {
- if (sv->status != GMIME_SIGNATURE_STATUS_GOOD)
- ex = exception_new ("signature validity status expected to be GOOD");
+ if (get_sig_status (sv->signers) != GMIME_SIGNER_STATUS_GOOD)
+ ex = exception_new ("signature status expected to be GOOD");
} else {
- if (sv->status != GMIME_SIGNATURE_STATUS_NONE)
- ex = exception_new ("signature validity status expected to be NONE");
+ if (sv->signers != NULL)
+ ex = exception_new ("signature status expected to be NONE");
}
if (ex != NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]