From: pdmef Date: Fri, 6 May 2005 18:09:22 +0000 (+0000) Subject: Rocco Rutte: X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=e16543ec43d80694edd9d727ccbd36079198a82b Rocco Rutte: fix Crypto isues for NNTP (patch #420) git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@285 e385b8ad-14ed-0310-8656-cc95a2468c6d --- diff --git a/commands.c b/commands.c index da3bc50..13adbfa 100644 --- a/commands.c +++ b/commands.c @@ -61,8 +61,9 @@ int mutt_display_message (HEADER * cur) int cmflags = M_CM_DECODE | M_CM_DISPLAY | M_CM_CHARCONV; FILE *fpout = NULL; FILE *fpfilterout = NULL; + MESSAGE *msg = NULL; pid_t filterpid = -1; - int res; + int res = 0; snprintf (buf, sizeof (buf), "%s/%s", TYPE (cur->content), cur->content->subtype); @@ -70,38 +71,6 @@ int mutt_display_message (HEADER * cur) mutt_parse_mime_message (Context, cur); mutt_message_hook (Context, cur, M_MESSAGEHOOK); - /* see if crytpo is needed for this message. if so, we should exit curses */ - if (WithCrypto && cur->security) { - if (cur->security & ENCRYPT) { - if (cur->security & APPLICATION_SMIME) - crypt_smime_getkeys (cur->env); - if (!crypt_valid_passphrase (cur->security)) - return 0; - - cmflags |= M_CM_VERIFY; - } - else if (cur->security & SIGN) { - /* find out whether or not the verify signature */ - if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == - M_YES) { - cmflags |= M_CM_VERIFY; - } - } - } - - if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT) { - if (cur->security & APPLICATION_PGP) { - if (cur->env->from) - crypt_pgp_invoke_getkeys (cur->env->from); - - crypt_invoke_message (APPLICATION_PGP); - } - - if (cur->security & APPLICATION_SMIME) - crypt_invoke_message (APPLICATION_SMIME); - } - - mutt_mktemp (tempfile); if ((fpout = safe_fopen (tempfile, "w")) == NULL) { mutt_error _("Could not create temporary file!"); @@ -131,9 +100,52 @@ int mutt_display_message (HEADER * cur) fputs ("\n\n", fpout); } - res = mutt_copy_message (fpout, Context, cur, cmflags, - (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | - CH_DECODE | CH_FROM); + msg = mx_open_message (Context, cur->msgno); + if (msg == NULL) res = -1; + + if (res != -1) { + /* see if crytpo is needed for this message. if so, we should exit curses */ + if (WithCrypto && cur->security) { + if (cur->security & ENCRYPT) { + if (cur->security & APPLICATION_SMIME) + crypt_smime_getkeys (cur->env); + if (!crypt_valid_passphrase (cur->security)) + return 0; + + cmflags |= M_CM_VERIFY; + } + else if (cur->security & SIGN) { + /* find out whether or not the verify signature */ + if (query_quadoption (OPT_VERIFYSIG, _("Verify PGP signature?")) == + M_YES) { + cmflags |= M_CM_VERIFY; + } + } + } + + if (cmflags & M_CM_VERIFY || cur->security & ENCRYPT) { + if (cur->security & APPLICATION_PGP) { + if (cur->env->from) + crypt_pgp_invoke_getkeys (cur->env->from); + + crypt_invoke_message (APPLICATION_PGP); + } + + if (cur->security & APPLICATION_SMIME) + crypt_invoke_message (APPLICATION_SMIME); + } + + res = _mutt_copy_message (fpout, msg->fp, cur, cur->content, cmflags, + (option (OPTWEED) ? (CH_WEED | CH_REORDER) : 0) | + CH_DECODE | CH_FROM); + if (res == 0 && (ferror(fpout) || feof(fpout))) { + debug_print (1, ("_mutt_copy_message failed to detect EOF!\n")); + res = -1; + } + + mx_close_message (&msg); + } + if ((safe_fclose (&fpout) != 0 && errno != EPIPE) || res == -1) { mutt_error (_("Could not copy message")); if (fpfilterout != NULL) { diff --git a/nntp/nntp.c b/nntp/nntp.c index 11bfea0..d21f30d 100644 --- a/nntp/nntp.c +++ b/nntp/nntp.c @@ -23,13 +23,7 @@ #include "rfc2047.h" #include "nntp.h" -#ifdef HAVE_PGP -#include "pgp.h" -#endif - -#ifdef HAVE_SMIME -#include "smime.h" -#endif +#include "mutt_crypt.h" #include "lib/mem.h" #include "lib/str.h" @@ -959,9 +953,7 @@ int nntp_fetch_message (MESSAGE * msg, CONTEXT * ctx, int msgno) * full headers aren't parsed with XOVER, so the information wasn't * available then. */ -#if defined(HAVE_PGP) || defined(HAVE_SMIME) ctx->hdrs[msgno]->security = crypt_query (ctx->hdrs[msgno]->content); -#endif /* HAVE_PGP || HAVE_SMIME */ mutt_clear_error (); rewind (msg->fp);