slackware-current/source/xap/pan/patches/0001-e5be4d4a1d9d08796c1b5a5c763379383b8c119a.patch
Patrick J Volkerding 8b5c0b991d Thu Jul 25 22:48:09 UTC 2019
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.
2019-07-26 08:59:43 +02:00

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));