X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=pgp.c;h=6bd70f296cdd038f7c345f18517aa9a0ac443811;hp=4b586e94991aadc738684d942c865ea03989a493;hb=9274cbe8e6410ddb95ddc667faa678a29da85420;hpb=c8ceef3ed6424dcb5a6ec835e7d8d9cc00595372 diff --git a/pgp.c b/pgp.c index 4b586e9..6bd70f2 100644 --- a/pgp.c +++ b/pgp.c @@ -21,9 +21,13 @@ # include "config.h" #endif +#include +#include +#include +#include + #include "mutt.h" #include "enter.h" -#include "ascii.h" #include "handler.h" #include "mutt_curses.h" #include "pgp.h" @@ -31,9 +35,6 @@ #include "copy.h" #include "attach.h" -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" #include "lib/debug.h" #include @@ -67,7 +68,7 @@ time_t PgpExptime = 0; /* when does the cached passphrase expire? */ void pgp_void_passphrase (void) { - memset (PgpPass, 0, sizeof (PgpPass)); + p_clear(PgpPass, sizeof(PgpPass)); PgpExptime = 0; } @@ -161,7 +162,7 @@ static int pgp_copy_checksig (FILE * fpin, FILE * fpout) fputs (line, fpout); fputc ('\n', fpout); } - mem_free (&line); + p_delete(&line); } else { debug_print (2, ("No pattern.\n")); @@ -233,12 +234,13 @@ static void pgp_copy_clearsigned (FILE * fpin, STATE * s, char *charset) int pgp_application_pgp_handler (BODY * m, STATE * s) { + int could_not_decrypt = 0; int needpass = -1, pgp_keyblock = 0; int c = 1; int clearsign = 0, rv, rc; long start_pos = 0; long bytes; - LOFF_T last_pos, offset; + off_t last_pos, offset; char buf[HUGE_STRING]; char outfile[_POSIX_PATH_MAX]; char tmpfname[_POSIX_PATH_MAX]; @@ -263,7 +265,7 @@ int pgp_application_pgp_handler (BODY * m, STATE * s) break; offset = ftello (s->fpin); - bytes -= (offset - last_pos); /* don't rely on str_len(buf) */ + bytes -= (offset - last_pos); /* don't rely on m_strlen(buf) */ last_pos = offset; if (str_ncmp ("-----BEGIN PGP ", buf, 15) == 0) { @@ -301,7 +303,7 @@ int pgp_application_pgp_handler (BODY * m, STATE * s) fputs (buf, tmpfp); while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL) { offset = ftello (s->fpin); - bytes -= (offset - last_pos); /* don't rely on str_len(buf) */ + bytes -= (offset - last_pos); /* don't rely on m_strlen(buf) */ last_pos = offset; fputs (buf, tmpfp); @@ -383,13 +385,15 @@ int pgp_application_pgp_handler (BODY * m, STATE * s) ungetc (c, pgpout); } if (!clearsign && (!pgpout || c == EOF)) { - mutt_error _("Could not decrypt PGP message"); - mutt_sleep (1); - pgp_void_passphrase (); - if (!(s->flags & M_DISPLAY)) { - rc = -1; - goto out; - } + could_not_decrypt = 1; + pgp_void_passphrase (); + } + + if (could_not_decrypt && !(s->flags & M_DISPLAY)) { + mutt_error _("Could not decrypt PGP message"); + mutt_sleep (1); + rc = -1; + goto out; } } @@ -429,7 +433,10 @@ int pgp_application_pgp_handler (BODY * m, STATE * s) state_putc ('\n', s); if (needpass) { state_attach_puts (_("[-- END PGP MESSAGE --]\n"), s); - mutt_message _("PGP message successfully decrypted."); + if (could_not_decrypt) + mutt_error _("Could not decrypt PGP message."); + else + mutt_message _("PGP message successfully decrypted."); } else if (pgp_keyblock) state_attach_puts (_("[-- END PGP PUBLIC KEY BLOCK --]\n"), s); @@ -680,7 +687,7 @@ static void pgp_extract_keys_from_attachment (FILE * fp, BODY * top) return; } - memset (&s, 0, sizeof (STATE)); + p_clear(&s, 1); s.fpin = fp; s.fpout = tempfp; @@ -774,7 +781,7 @@ BODY *pgp_decrypt_part (BODY * a, STATE * s, FILE * fpout, BODY * p) * read_mime_header has a hard time parsing the message. */ while (fgets (buf, sizeof (buf) - 1, pgpout) != NULL) { - len = str_len (buf); + len = m_strlen(buf); if (len > 1 && buf[len - 2] == '\r') strcpy (buf + len - 2, "\n"); /* __STRCPY_CHECKED__ */ fputs (buf, fpout); @@ -835,7 +842,7 @@ int pgp_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, BODY ** cur) b = b->parts->next; - memset (&s, 0, sizeof (s)); + p_clear(&s, 1); s.fpin = fpin; mutt_mktemp (tempfile); if ((*fpout = safe_fopen (tempfile, "w+")) == NULL) { @@ -1027,7 +1034,7 @@ BODY *pgp_sign_message (BODY * a) t = mutt_new_body (); t->type = TYPEMULTIPART; - t->subtype = str_dup ("signed"); + t->subtype = m_strdup("signed"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; @@ -1042,8 +1049,8 @@ BODY *pgp_sign_message (BODY * a) t->parts->next = mutt_new_body (); t = t->parts->next; t->type = TYPEAPPLICATION; - t->subtype = str_dup ("pgp-signature"); - t->filename = str_dup (sigfile); + t->subtype = m_strdup("pgp-signature"); + t->filename = m_strdup(sigfile); t->use_disp = 0; t->disposition = DISPINLINE; t->encoding = ENC7BIT; @@ -1057,7 +1064,7 @@ static short is_numerical_keyid (const char *s) /* or should we require the "0x"? */ if (strncmp (s, "0x", 2) == 0) s += 2; - if (str_len (s) % 8) + if (m_strlen(s) % 8) return 0; while (*s) if (strchr ("0123456789ABCDEFabcdef", *s++) == NULL) @@ -1136,7 +1143,7 @@ char *pgp_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc) k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING); } else if (r == -1) { - mem_free (&keylist); + p_delete(&keylist); rfc822_free_address (&tmp); rfc822_free_address (&addr); return NULL; @@ -1153,7 +1160,7 @@ char *pgp_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc) if ((key = pgp_ask_for_key (buf, q->mailbox, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL) { - mem_free (&keylist); + p_delete(&keylist); rfc822_free_address (&tmp); rfc822_free_address (&addr); return NULL; @@ -1165,11 +1172,11 @@ char *pgp_findKeys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc) keyID = pgp_keyid (key); bypass_selection: - keylist_size += str_len (keyID) + 4; - mem_realloc (&keylist, keylist_size); + keylist_size += m_strlen(keyID) + 4; + p_realloc(&keylist, keylist_size); sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "", /* __SPRINTF_CHECKED__ */ keyID); - keylist_used = str_len (keylist); + keylist_used = m_strlen(keylist); pgp_free_key (&key); rfc822_free_address (&addr); @@ -1273,7 +1280,7 @@ BODY *pgp_encrypt_message (BODY * a, char *keylist, int sign) t = mutt_new_body (); t->type = TYPEMULTIPART; - t->subtype = str_dup ("encrypted"); + t->subtype = m_strdup("encrypted"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; @@ -1283,18 +1290,18 @@ BODY *pgp_encrypt_message (BODY * a, char *keylist, int sign) t->parts = mutt_new_body (); t->parts->type = TYPEAPPLICATION; - t->parts->subtype = str_dup ("pgp-encrypted"); + t->parts->subtype = m_strdup("pgp-encrypted"); t->parts->encoding = ENC7BIT; t->parts->next = mutt_new_body (); t->parts->next->type = TYPEAPPLICATION; - t->parts->next->subtype = str_dup ("octet-stream"); + t->parts->next->subtype = m_strdup("octet-stream"); t->parts->next->encoding = ENC7BIT; - t->parts->next->filename = str_dup (tempfile); + t->parts->next->filename = m_strdup(tempfile); t->parts->next->use_disp = 1; t->parts->next->disposition = DISPINLINE; t->parts->next->unlink = 1; /* delete after sending the message */ - t->parts->next->d_filename = str_dup ("msg.asc"); /* non pgp/mime can save */ + t->parts->next->d_filename = m_strdup("msg.asc"); /* non pgp/mime can save */ return (t); } @@ -1444,21 +1451,21 @@ BODY *pgp_traditional_encryptsign (BODY * a, int flags, char *keylist) b->encoding = ENC7BIT; b->type = TYPETEXT; - b->subtype = str_dup ("plain"); + b->subtype = m_strdup("plain"); mutt_set_parameter ("x-action", flags & ENCRYPT ? "pgp-encrypted" : "pgp-signed", &b->parameter); mutt_set_parameter ("charset", send_charset, &b->parameter); - b->filename = str_dup (pgpoutfile); + b->filename = m_strdup(pgpoutfile); #if 0 /* The following is intended to give a clue to some completely brain-dead * "mail environments" which are typically used by large corporations. */ - b->d_filename = str_dup ("msg.pgp"); + b->d_filename = m_strdup("msg.pgp"); b->use_disp = 1; #endif