From: Colin Leroy Date: Wed, 25 Aug 2004 07:18:58 +0000 (+0000) Subject: 2004-08-25 [colin] 0.9.12cvs81.1 X-Git-Tag: gtk2_win32_last_merge~197 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=14438c741c5c7122a35d61b0a9268c73263ccac1 2004-08-25 [colin] 0.9.12cvs81.1 * src/plugins/pgpmime/pgpmime.c * src/plugins/pgpmime/sgpgme.c * src/plugins/pgpmime/sgpgme.h Sync with HEAD. --- diff --git a/ChangeLog-gtk2.claws b/ChangeLog-gtk2.claws index 0c19d1248..0e93ec9fa 100644 --- a/ChangeLog-gtk2.claws +++ b/ChangeLog-gtk2.claws @@ -1,3 +1,10 @@ +2004-08-25 [colin] 0.9.12cvs81.1 + + * src/plugins/pgpmime/pgpmime.c + * src/plugins/pgpmime/sgpgme.c + * src/plugins/pgpmime/sgpgme.h + Sync with HEAD. + 2004-08-24 [colin] 0.9.12cvs80.3 * src/wizard.c diff --git a/PATCHSETS b/PATCHSETS index 6bef76d7c..36b1d4735 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -139,3 +139,4 @@ ( cvs diff -u -r 1.213.2.13 -r 1.213.2.14 src/folder.c; ) > 0.9.12cvs80.1.patchset ( cvs diff -u -r 1.155.2.10 -r 1.155.2.11 src/Makefile.am; cvs diff -u -r 1.115.2.15 -r 1.115.2.16 src/main.c; cvs diff -u -r 1.5.2.1 -r 1.5.2.2 src/setup.c; cvs diff -u -r 1.1.1.1 -r 1.1.1.2 src/setup.h; cvs diff -u -r 1.25.2.5 -r 1.25.2.6 src/stock_pixmap.c; cvs diff -u -r 1.18.2.3 -r 1.18.2.4 src/stock_pixmap.h; cvs diff -u -r 0 -r 1 src/wizard.c; cvs diff -u -r 0 -r 1 src/wizard.h; cvs diff -u -r 0 -r 1 src/pixmaps/sylpheed_icon.xpm; ) > 0.9.12cvs80.2.patchset ( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/wizard.c; ) > 0.9.12cvs80.3.patchset +( cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpmime/pgpmime.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpmime/sgpgme.c; cvs diff -u -r 1.1.2.1 -r 1.1.2.2 src/plugins/pgpmime/sgpgme.h; ) > 0.9.12cvs81.1.patchset diff --git a/configure.ac b/configure.ac index f4e38fae6..2f40daa40 100644 --- a/configure.ac +++ b/configure.ac @@ -11,9 +11,9 @@ MINOR_VERSION=9 MICRO_VERSION=12 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=80 +EXTRA_VERSION=81 EXTRA_RELEASE= -EXTRA_GTK2_VERSION=.3 +EXTRA_GTK2_VERSION=.1 if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}${EXTRA_RELEASE}${EXTRA_GTK2_VERSION} diff --git a/src/plugins/pgpmime/pgpmime.c b/src/plugins/pgpmime/pgpmime.c index fe0793daa..b45b0e027 100644 --- a/src/plugins/pgpmime/pgpmime.c +++ b/src/plugins/pgpmime/pgpmime.c @@ -144,6 +144,9 @@ static gint pgpmime_check_signature(MimeInfo *mimeinfo) g_return_val_if_fail(fp != NULL, SIGNATURE_INVALID); boundary = g_hash_table_lookup(parent->parameters, "boundary"); + if (!boundary) + return 0; + boundary_len = strlen(boundary); while (fgets(buf, sizeof(buf), fp) != NULL) if (IS_BOUNDARY(buf, boundary, boundary_len)) @@ -243,13 +246,21 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo) gint nread; gchar *fname; gchar buf[BUFFSIZE]; + GpgmeSigStat sigstat = 0; + PrivacyDataPGP *data = NULL; + GpgmeCtx ctx; + + if (gpgme_new(&ctx) != GPGME_No_Error) + return NULL; + g_return_val_if_fail(pgpmime_is_encrypted(mimeinfo), NULL); encinfo = (MimeInfo *) g_node_nth_child(mimeinfo->node, 1)->data; cipher = sgpgme_data_from_mimeinfo(encinfo); - plain = sgpgme_decrypt(cipher); + plain = sgpgme_decrypt_verify(cipher, &sigstat, ctx); + gpgme_data_release(cipher); if (plain == NULL) return NULL; @@ -286,6 +297,22 @@ static MimeInfo *pgpmime_decrypt(MimeInfo *mimeinfo) procmime_mimeinfo_free_all(parseinfo); decinfo->tmpfile = TRUE; + + if (sigstat != GPGME_SIG_STAT_NONE) { + if (decinfo->privacy != NULL) { + data = (PrivacyDataPGP *) decinfo->privacy; + } else { + data = pgpmime_new_privacydata(); + decinfo->privacy = (PrivacyData *) data; + } + data->done_sigtest = TRUE; + data->is_signed = TRUE; + data->sigstatus = sigstat; + if (data->ctx) + gpgme_release(data->ctx); + data->ctx = ctx; + } + return decinfo; } diff --git a/src/plugins/pgpmime/sgpgme.c b/src/plugins/pgpmime/sgpgme.c index 7c9551032..8e0eca648 100644 --- a/src/plugins/pgpmime/sgpgme.c +++ b/src/plugins/pgpmime/sgpgme.c @@ -239,18 +239,15 @@ GpgmeData sgpgme_data_from_mimeinfo(MimeInfo *mimeinfo) return data; } -GpgmeData sgpgme_decrypt(GpgmeData cipher) +GpgmeData sgpgme_decrypt_verify(GpgmeData cipher, GpgmeSigStat *status, GpgmeCtx ctx) { - GpgmeCtx ctx; struct passphrase_cb_info_s info; GpgmeData plain; GpgmeError err; + GpgmeSigStat sigstat; memset (&info, 0, sizeof info); - if (gpgme_new(&ctx) != GPGME_No_Error) - return NULL; - if (gpgme_data_new(&plain) != GPGME_No_Error) { gpgme_release(ctx); return NULL; @@ -261,8 +258,7 @@ GpgmeData sgpgme_decrypt(GpgmeData cipher) gpgme_set_passphrase_cb (ctx, gpgmegtk_passphrase_cb, &info); } - err = gpgme_op_decrypt(ctx, cipher, plain); - gpgme_release(ctx); + err = gpgme_op_decrypt_verify(ctx, cipher, plain, status); if (err != GPGME_No_Error) { gpgmegtk_free_passphrase(); diff --git a/src/plugins/pgpmime/sgpgme.h b/src/plugins/pgpmime/sgpgme.h index ddcf1a84e..c380ef4ac 100644 --- a/src/plugins/pgpmime/sgpgme.h +++ b/src/plugins/pgpmime/sgpgme.h @@ -38,6 +38,7 @@ gchar *sgpgme_sigstat_info_short (GpgmeCtx ctx, gchar *sgpgme_sigstat_info_full (GpgmeCtx ctx, GpgmeSigStat status); GpgmeData sgpgme_data_from_mimeinfo (MimeInfo *mimeinfo); -GpgmeData sgpgme_decrypt (GpgmeData cipher); +GpgmeData sgpgme_decrypt_verify (GpgmeData cipher, GpgmeSigStat *status, + GpgmeCtx ctx); #endif /* SGPGME_H */