mirror of
git://slackware.nl/current.git
synced 2024-12-31 10:28:29 +01:00
8b5c0b991d
l/SDL2-2.0.10-x86_64-1.txz: Upgraded. l/gmime-3.2.3-x86_64-1.txz: Upgraded. Shared library .so-version bump. n/NetworkManager-1.18.2-x86_64-1.txz: Upgraded. n/dhcpcd-8.0.1-x86_64-1.txz: Upgraded. n/openldap-client-2.4.48-x86_64-1.txz: Upgraded. xap/pan-0.145-x86_64-2.txz: Rebuilt. Recompiled against gmime-3.2.3.
215 lines
7.3 KiB
Diff
215 lines
7.3 KiB
Diff
From e5be4d4a1d9d08796c1b5a5c763379383b8c119a Mon Sep 17 00:00:00 2001
|
|
From: Detlef Graef <detlef.graef@yahoo.de>
|
|
Date: Fri, 19 Apr 2019 15:12:27 +0200
|
|
Subject: [PATCH] Fix to build Pan with options --with-gmime30 and
|
|
--with-gmime-crypto
|
|
|
|
---
|
|
pan/usenet-utils/gpg.cc | 76 ++++++++++++++++++++++++++--------
|
|
pan/usenet-utils/mime-utils.cc | 35 ++++++++++++++++
|
|
2 files changed, 94 insertions(+), 17 deletions(-)
|
|
|
|
diff --git a/pan/usenet-utils/gpg.cc b/pan/usenet-utils/gpg.cc
|
|
index f24e723..4df4525 100644
|
|
--- a/pan/usenet-utils/gpg.cc
|
|
+++ b/pan/usenet-utils/gpg.cc
|
|
@@ -70,6 +70,45 @@ namespace pan
|
|
signer.key_id = sig->cert->keyid ? sig->cert->keyid : "(null)";
|
|
signer.fpr = sig->cert->fingerprint ? sig->cert->fingerprint : "(null)";
|
|
|
|
+#ifdef HAVE_GMIME_30
|
|
+ switch (sig->cert->trust) {
|
|
+ case GMIME_TRUST_UNKNOWN:
|
|
+ signer.trust = "None";
|
|
+ break;
|
|
+ case GMIME_TRUST_NEVER:
|
|
+ signer.trust = "Never";
|
|
+ break;
|
|
+ case GMIME_TRUST_UNDEFINED:
|
|
+ signer.trust = "Undefined";
|
|
+ break;
|
|
+ case GMIME_TRUST_MARGINAL:
|
|
+ signer.trust = "Marginal";
|
|
+ break;
|
|
+ case GMIME_TRUST_FULL:
|
|
+ signer.trust = "Fully";
|
|
+ break;
|
|
+ case GMIME_TRUST_ULTIMATE:
|
|
+ signer.trust = "Ultimate";
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ switch (sig->status) {
|
|
+ case GMIME_SIGNATURE_STATUS_GREEN:
|
|
+ signer.status = "GOOD";
|
|
+ break;
|
|
+ case GMIME_SIGNATURE_STATUS_RED:
|
|
+ signer.status = "BAD";
|
|
+ break;
|
|
+ case GMIME_SIGNATURE_STATUS_SYS_ERROR:
|
|
+ signer.status = "ERROR";
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ signer.created = sig->created;
|
|
+ signer.expires = sig->expires;
|
|
+ if (sig->expires == (time_t) 0)
|
|
+ signer.never_expires = true;
|
|
+#else
|
|
switch (sig->cert->trust) {
|
|
case GMIME_CERTIFICATE_TRUST_NONE:
|
|
signer.trust = "None";
|
|
@@ -102,25 +141,28 @@ namespace pan
|
|
signer.status = "ERROR";
|
|
break;
|
|
}
|
|
+#endif
|
|
|
|
signer.created = sig->created;
|
|
signer.expires = sig->expires;
|
|
if (sig->expires == (time_t) 0)
|
|
signer.never_expires = true;
|
|
|
|
- if (sig->errors) {
|
|
-
|
|
- if (sig->errors & GMIME_SIGNATURE_ERROR_EXPSIG)
|
|
- signer.error = "Expired";
|
|
- if (sig->errors & GMIME_SIGNATURE_ERROR_NO_PUBKEY)
|
|
- signer.error = "No Pub Key";
|
|
- if (sig->errors & GMIME_SIGNATURE_ERROR_EXPKEYSIG)
|
|
- signer.error = "Key Expired";
|
|
- if (sig->errors & GMIME_SIGNATURE_ERROR_REVKEYSIG)
|
|
- signer.error = "Key Revoked";
|
|
- } else {
|
|
- signer.error = "No errors for this signer";
|
|
- }
|
|
+// https://developer.gnome.org/gmime/stable/gmime-changes-3-0.html
|
|
+// GMimeSignatureStatus and GMimeSignatureErrors have been merged into a single bitfield (GMimeSignatureStatus) ...
|
|
+// if (sig->errors) {
|
|
+
|
|
+// if (sig->errors & GMIME_SIGNATURE_ERROR_EXPSIG)
|
|
+// signer.error = "Expired";
|
|
+// if (sig->errors & GMIME_SIGNATURE_ERROR_NO_PUBKEY)
|
|
+// signer.error = "No Pub Key";
|
|
+// if (sig->errors & GMIME_SIGNATURE_ERROR_EXPKEYSIG)
|
|
+// signer.error = "Key Expired";
|
|
+// if (sig->errors & GMIME_SIGNATURE_ERROR_REVKEYSIG)
|
|
+// signer.error = "Key Revoked";
|
|
+// } else {
|
|
+// signer.error = "No errors for this signer";
|
|
+// }
|
|
|
|
info.signers.push_back(signer);
|
|
}
|
|
@@ -128,11 +170,11 @@ namespace pan
|
|
|
|
void init_gpg()
|
|
{
|
|
- gpg_ctx = g_mime_gpg_context_new (request_passwd, "gpg2");
|
|
+// gpg_ctx = g_mime_gpg_context_new (request_passwd, "gpg2");
|
|
if (!gpg_ctx) gpg_inited = false; else gpg_inited = true;
|
|
- g_mime_gpg_context_set_auto_key_retrieve(GMIME_GPG_CONTEXT(gpg_ctx),true);
|
|
- g_mime_gpg_context_set_always_trust(GMIME_GPG_CONTEXT(gpg_ctx),false);
|
|
- g_mime_gpg_context_set_use_agent(GMIME_GPG_CONTEXT(gpg_ctx), false);
|
|
+// g_mime_gpg_context_set_auto_key_retrieve(GMIME_GPG_CONTEXT(gpg_ctx),true);
|
|
+// g_mime_gpg_context_set_always_trust(GMIME_GPG_CONTEXT(gpg_ctx),false);
|
|
+// g_mime_gpg_context_set_use_agent(GMIME_GPG_CONTEXT(gpg_ctx), false);
|
|
}
|
|
|
|
|
|
diff --git a/pan/usenet-utils/mime-utils.cc b/pan/usenet-utils/mime-utils.cc
|
|
index 135f469..881df7b 100644
|
|
--- a/pan/usenet-utils/mime-utils.cc
|
|
+++ b/pan/usenet-utils/mime-utils.cc
|
|
@@ -1634,12 +1634,20 @@ namespace pan
|
|
GMimeSignatureStatus
|
|
get_sig_status (GMimeSignatureList *signatures)
|
|
{
|
|
+#ifdef HAVE_GMIME_30
|
|
+ GMimeSignatureStatus status = GMIME_SIGNATURE_STATUS_VALID;
|
|
+#else
|
|
GMimeSignatureStatus status = GMIME_SIGNATURE_STATUS_GOOD;
|
|
+#endif
|
|
GMimeSignature *sig;
|
|
int i;
|
|
|
|
if (!signatures || signatures->array->len == 0)
|
|
+#ifdef HAVE_GMIME_30
|
|
+ return GMIME_SIGNATURE_STATUS_SYS_ERROR;
|
|
+#else
|
|
return GMIME_SIGNATURE_STATUS_ERROR;
|
|
+#endif
|
|
|
|
for (i = 0; i < g_mime_signature_list_length (signatures); i++) {
|
|
sig = g_mime_signature_list_get_signature (signatures, i);
|
|
@@ -1673,18 +1681,30 @@ namespace pan
|
|
|
|
if (info.type == GPG_VERIFY)
|
|
{
|
|
+#ifdef HAVE_GMIME_30
|
|
+ GMimeSignatureList * sigs = g_mime_multipart_signed_verify (mps, GMIME_VERIFY_NONE, &info.err);
|
|
+#else
|
|
GMimeSignatureList * sigs = g_mime_multipart_signed_verify (mps, gpg_ctx, &info.err);
|
|
+#endif
|
|
if (info.err || !sigs) return false;
|
|
if (sigs) info.no_sigs = false;
|
|
fill_signer_info(info.signers, sigs);
|
|
+#ifdef HAVE_GMIME_30
|
|
+ bool status = get_sig_status(sigs) == GMIME_SIGNATURE_STATUS_VALID;
|
|
+#else
|
|
bool status = get_sig_status(sigs) == GMIME_SIGNATURE_STATUS_GOOD;
|
|
+#endif
|
|
g_object_unref(sigs);
|
|
return status;
|
|
}
|
|
|
|
if (info.type == GPG_DECODE)
|
|
{
|
|
+#ifdef HAVE_GMIME_30
|
|
+ info.decrypted = g_mime_multipart_encrypted_decrypt (mpe, GMIME_DECRYPT_NONE, NULL, &info.result, &info.err);
|
|
+#else
|
|
info.decrypted = g_mime_multipart_encrypted_decrypt (mpe, gpg_ctx, &info.result, &info.err);
|
|
+#endif
|
|
if (!info.decrypted)
|
|
if (info.err) return false;
|
|
|
|
@@ -1693,7 +1713,11 @@ namespace pan
|
|
{
|
|
info.no_sigs = false;
|
|
fill_signer_info(info.signers, sigs);
|
|
+#ifdef HAVE_GMIME_30
|
|
+ bool status = get_sig_status(info.result->signatures) == GMIME_SIGNATURE_STATUS_VALID;
|
|
+#else
|
|
bool status = get_sig_status(info.result->signatures) == GMIME_SIGNATURE_STATUS_GOOD;
|
|
+#endif
|
|
g_object_unref(sigs);
|
|
return status;
|
|
}
|
|
@@ -1722,7 +1746,13 @@ namespace pan
|
|
mps = g_mime_multipart_signed_new ();
|
|
|
|
/* sign the part */
|
|
+#ifdef HAVE_GMIME_30
|
|
+ GMimeObject *gmo;
|
|
+ gmo = g_mime_message_get_mime_part (body);
|
|
+ if (g_mime_multipart_signed_sign (gpg_ctx, gmo, uid.c_str(), &err) <0)
|
|
+#else
|
|
if (g_mime_multipart_signed_sign (mps, GMIME_OBJECT (part), gpg_ctx, uid.c_str(), GMIME_DIGEST_ALGO_SHA1, &err) <0)
|
|
+#endif
|
|
{
|
|
g_object_unref(mps);
|
|
g_object_unref(G_OBJECT(part));
|
|
@@ -1752,8 +1782,13 @@ namespace pan
|
|
|
|
GMimeMultipartEncrypted * mpe = g_mime_multipart_encrypted_new();
|
|
|
|
+#ifdef HAVE_GMIME_30
|
|
+ if (g_mime_multipart_encrypted_encrypt(gpg_ctx, GMIME_OBJECT (part), sign, uid.c_str(),
|
|
+ GMIME_ENCRYPT_NONE, rcp, &err) < 0)
|
|
+#else
|
|
if (g_mime_multipart_encrypted_encrypt(mpe, GMIME_OBJECT (part), gpg_ctx, sign,
|
|
uid.c_str(), GMIME_DIGEST_ALGO_SHA1, rcp, &err) < 0)
|
|
+#endif
|
|
{
|
|
g_object_unref(mpe);
|
|
g_object_unref(G_OBJECT(part));
|