X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=crypt-gpgme.c;h=dfd26458a0cc7b6a0b7c0521c7fa089c5b436127;hp=f7343bc7fa742c67871196c1dcae390858eab884;hb=ab12fea9d01b3b9bc53081ae4ccc046243f1cb9f;hpb=841934011451205d8295ac955486f06c317fdf15 diff --git a/crypt-gpgme.c b/crypt-gpgme.c index f7343bc..dfd2645 100644 --- a/crypt-gpgme.c +++ b/crypt-gpgme.c @@ -18,15 +18,27 @@ #ifdef CRYPT_BACKEND_GPGME +#include +#include +#include +#include +#include + +#include + #include "mutt.h" #include "mutt_crypt.h" #include "mutt_menu.h" #include "mutt_curses.h" -#include "mime.h" +#include "handler.h" +#include "enter.h" #include "copy.h" #include "pager.h" +#include "recvattach.h" #include "sort.h" +#include "lib/debug.h" + #include #include #include @@ -108,10 +120,10 @@ static gpgme_key_t signature_key = NULL; * General helper functions. */ -/* return true when S pints to a didgit or letter. */ +/* return true when S points to a didgit or letter. */ static int digit_or_letter (const unsigned char *s) { - return ((*s >= '0' && *s < '9') + return ((*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z')); } @@ -123,12 +135,10 @@ static void print_utf8 (FILE * fp, const char *buf, size_t len) { char *tstr; - tstr = safe_malloc (len + 1); - memcpy (tstr, buf, len); - tstr[len] = 0; + tstr = p_dupstr(buf, len); mutt_convert_string (&tstr, "utf-8", Charset, M_ICONV_HOOK_FROM); fputs (tstr, fp); - FREE (&tstr); + p_delete(&tstr); } @@ -144,7 +154,7 @@ static const char *crypt_keyid (crypt_key_t * k) if (k->kobj && k->kobj->subkeys) { s = k->kobj->subkeys->keyid; - if ((!option (OPTPGPLONGIDS)) && (mutt_strlen (s) == 16)) + if ((!option (OPTPGPLONGIDS)) && (m_strlen(s) == 16)) /* Return only the short keyID. */ s += 8; } @@ -203,11 +213,11 @@ static char crypt_flags (int flags) } /* Return a copy of KEY. */ -static crypt_key_t *crypt_copy_key (crypt_key_t * key) +static crypt_key_t *crypt_copy_key (crypt_key_t *key) { crypt_key_t *k; - k = safe_calloc (1, sizeof *k); + k = p_new(crypt_key_t, 1); k->kobj = key->kobj; gpgme_key_ref (key->kobj); k->idx = key->idx; @@ -224,7 +234,7 @@ static void crypt_free_key (crypt_key_t ** keylist) while (*keylist) { crypt_key_t *k = (*keylist)->next; - FREE (&k); + p_delete(&k); *keylist = k; } } @@ -290,11 +300,11 @@ static int crypt_id_matches_addr (ADDRESS * addr, ADDRESS * u_addr, rv |= CRYPT_KV_STRONGID; if (addr->mailbox && u_addr->mailbox - && mutt_strcasecmp (addr->mailbox, u_addr->mailbox) == 0) + && m_strcasecmp(addr->mailbox, u_addr->mailbox) == 0) rv |= CRYPT_KV_ADDR; if (addr->personal && u_addr->personal - && mutt_strcasecmp (addr->personal, u_addr->personal) == 0) + && m_strcasecmp(addr->personal, u_addr->personal) == 0) rv |= CRYPT_KV_STRING; return rv; @@ -314,7 +324,7 @@ static gpgme_ctx_t create_gpgme_context (int for_smime) err = gpgme_new (&ctx); if (err) { - mutt_error ("error creating gpgme context: %s\n", gpgme_strerror (err)); + mutt_error (_("error creating gpgme context: %s\n"), gpgme_strerror (err)); sleep (2); mutt_exit (1); } @@ -322,7 +332,7 @@ static gpgme_ctx_t create_gpgme_context (int for_smime) if (for_smime) { err = gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS); if (err) { - mutt_error ("error enabling CMS protocol: %s\n", gpgme_strerror (err)); + mutt_error (_("error enabling CMS protocol: %s\n"), gpgme_strerror (err)); sleep (2); mutt_exit (1); } @@ -340,7 +350,7 @@ static gpgme_data_t create_gpgme_data (void) err = gpgme_data_new (&data); if (err) { - mutt_error ("error creating gpgme data object: %s\n", + mutt_error (_("error creating gpgme data object: %s\n"), gpgme_strerror (err)); sleep (2); mutt_exit (1); @@ -399,7 +409,7 @@ static gpgme_data_t body_to_data_object (BODY * a, int convert) } unlink (tempfile); if (err) { - mutt_error ("error allocating data object: %s\n", gpgme_strerror (err)); + mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err)); return NULL; } @@ -416,7 +426,7 @@ static gpgme_data_t file_to_data_object (FILE * fp, long offset, long length) err = gpgme_data_new_from_filepart (&data, NULL, fp, offset, length); if (err) { - mutt_error ("error allocating data object: %s\n", gpgme_strerror (err)); + mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err)); return NULL; } @@ -433,7 +443,7 @@ static int data_object_to_stream (gpgme_data_t data, FILE * fp) err = ((gpgme_data_seek (data, 0, SEEK_SET) == -1) ? gpgme_error_from_errno (errno) : 0); if (err) { - mutt_error ("error rewinding data object: %s\n", gpgme_strerror (err)); + mutt_error (_("error rewinding data object: %s\n"), gpgme_strerror (err)); return -1; } @@ -451,7 +461,7 @@ static int data_object_to_stream (gpgme_data_t data, FILE * fp) } } if (nread == -1) { - mutt_error ("error reading data object: %s\n", strerror (errno)); + mutt_error (_("error reading data object: %s\n"), strerror (errno)); return -1; } return 0; @@ -493,14 +503,14 @@ static char *data_object_to_tempfile (gpgme_data_t data, FILE ** ret_fp) else fclose (fp); if (nread == -1) { - mutt_error ("error reading data object: %s\n", gpgme_strerror (err)); + mutt_error (_("error reading data object: %s\n"), gpgme_strerror (err)); unlink (tempfile); fclose (fp); return NULL; } if (ret_fp) *ret_fp = fp; - return safe_strdup (tempfile); + return m_strdup(tempfile); } @@ -545,13 +555,13 @@ static gpgme_key_t *create_recipient_set (const char *keylist, err = gpgme_get_key (context, buf, &key, 0); if (!err) { - safe_realloc (&rset, sizeof (*rset) * (rset_n + 1)); + p_realloc(&rset, rset_n + 1); rset[rset_n++] = key; } else { - mutt_error ("error adding recipient `%s': %s\n", + mutt_error (_("error adding recipient `%s': %s\n"), buf, gpgme_strerror (err)); - FREE (&rset); + p_delete(&rset); return NULL; } } @@ -559,7 +569,7 @@ static gpgme_key_t *create_recipient_set (const char *keylist, } /* NULL terminate. */ - safe_realloc (&rset, sizeof (*rset) * (rset_n + 1)); + p_realloc(&rset, rset_n + 1); rset[rset_n++] = NULL; if (context) @@ -595,7 +605,7 @@ static int set_signer (gpgme_ctx_t ctx, int for_smime) gpgme_key_release (key); gpgme_key_release (key2); gpgme_release (listctx); - mutt_error (_("ambiguous specfication of secret key `%s'\n"), signid); + mutt_error (_("ambiguous specification of secret key `%s'\n"), signid); return -1; } gpgme_op_keylist_end (listctx); @@ -646,7 +656,7 @@ static char *encrypt_gpgme_object (gpgme_data_t plaintext, gpgme_key_t * rset, plaintext, ciphertext); mutt_need_hard_redraw (); if (err) { - mutt_error ("error encrypting data: %s\n", gpgme_strerror (err)); + mutt_error (_("error encrypting data: %s\n"), gpgme_strerror (err)); gpgme_data_release (ciphertext); gpgme_release (ctx); return NULL; @@ -678,8 +688,7 @@ static int get_micalg (gpgme_ctx_t ctx, char *buf, size_t buflen) if (result) { algorithm_name = gpgme_hash_algo_name (result->signatures->hash_algo); if (algorithm_name) { - strncpy (buf, algorithm_name, buflen - 1); - buf[buflen - 1] = 0; + m_strcpy(buf, buflen, algorithm_name); } } @@ -739,7 +748,7 @@ static BODY *sign_message (BODY * a, int use_smime) if (err) { gpgme_data_release (signature); gpgme_release (ctx); - mutt_error ("error signing data: %s\n", gpgme_strerror (err)); + mutt_error (_("error signing data: %s\n"), gpgme_strerror (err)); return NULL; } @@ -752,7 +761,7 @@ static BODY *sign_message (BODY * a, int use_smime) t = mutt_new_body (); t->type = TYPEMULTIPART; - t->subtype = safe_strdup ("signed"); + t->subtype = m_strdup("signed"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; @@ -776,15 +785,15 @@ static BODY *sign_message (BODY * a, int use_smime) t = t->parts->next; t->type = TYPEAPPLICATION; if (use_smime) { - t->subtype = safe_strdup ("pkcs7-signature"); + t->subtype = m_strdup("pkcs7-signature"); mutt_set_parameter ("name", "smime.p7s", &t->parameter); t->encoding = ENCBASE64; t->use_disp = 1; t->disposition = DISPATTACH; - t->d_filename = safe_strdup ("smime.p7s"); + t->d_filename = m_strdup("smime.p7s"); } else { - t->subtype = safe_strdup ("pgp-signature"); + t->subtype = m_strdup("pgp-signature"); t->use_disp = 0; t->disposition = DISPINLINE; t->encoding = ENC7BIT; @@ -827,19 +836,19 @@ BODY *pgp_gpgme_encrypt_message (BODY * a, char *keylist, int sign) convert_to_7bit (a); plaintext = body_to_data_object (a, 0); if (!plaintext) { - FREE (&rset); + p_delete(&rset); return NULL; } outfile = encrypt_gpgme_object (plaintext, rset, 0, sign); gpgme_data_release (plaintext); - FREE (&rset); + p_delete(&rset); if (!outfile) return NULL; t = mutt_new_body (); t->type = TYPEMULTIPART; - t->subtype = safe_strdup ("encrypted"); + t->subtype = m_strdup("encrypted"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; @@ -849,18 +858,18 @@ BODY *pgp_gpgme_encrypt_message (BODY * a, char *keylist, int sign) t->parts = mutt_new_body (); t->parts->type = TYPEAPPLICATION; - t->parts->subtype = safe_strdup ("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 = safe_strdup ("octet-stream"); + t->parts->next->subtype = m_strdup("octet-stream"); t->parts->next->encoding = ENC7BIT; t->parts->next->filename = outfile; 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 = safe_strdup ("msg.asc"); /* non pgp/mime + t->parts->next->d_filename = m_strdup("msg.asc"); /* non pgp/mime can save */ return t; @@ -885,25 +894,25 @@ BODY *smime_gpgme_build_smime_entity (BODY * a, char *keylist) plaintext = body_to_data_object (a, 0); if (!plaintext) { - FREE (&rset); + p_delete(&rset); return NULL; } outfile = encrypt_gpgme_object (plaintext, rset, 1, 0); gpgme_data_release (plaintext); - FREE (&rset); + p_delete(&rset); if (!outfile) return NULL; t = mutt_new_body (); t->type = TYPEAPPLICATION; - t->subtype = safe_strdup ("pkcs7-mime"); + t->subtype = m_strdup("pkcs7-mime"); mutt_set_parameter ("name", "smime.p7m", &t->parameter); mutt_set_parameter ("smime-type", "enveloped-data", &t->parameter); t->encoding = ENCBASE64; /* The output of OpenSSL SHOULD be binary */ t->use_disp = 1; t->disposition = DISPATTACH; - t->d_filename = safe_strdup ("smime.p7m"); + t->d_filename = m_strdup("smime.p7m"); t->filename = outfile; t->unlink = 1; /*delete after sending the message */ t->parts = 0; @@ -983,7 +992,7 @@ static int show_sig_summary (unsigned long sum, gpgme_signature_t sig; unsigned int i; - state_attach_puts (_("A system error occured"), s); + state_attach_puts (_("A system error occurred"), s); /* Try to figure out some more detailed system error information. */ result = gpgme_op_verify_result (ctx); @@ -998,7 +1007,7 @@ static int show_sig_summary (unsigned long sum, state_attach_puts (": ", s); if (t0) state_attach_puts (t0, s); - if (t1 && !(t0 && !strcmp (t0, t1))) { + if (t1 && !(t0 && !m_strcmp(t0, t1))) { if (t0) state_attach_puts (",", s); state_attach_puts (t1, s); @@ -1025,10 +1034,10 @@ static void show_fingerprint (gpgme_key_t key, STATE * state) return; is_pgp = (key->protocol == GPGME_PROTOCOL_OpenPGP); - buf = safe_malloc (mutt_strlen (prefix) + mutt_strlen (s) * 4 + 2); + buf = xmalloc(m_strlen(prefix) + m_strlen(s) * 4 + 2); strcpy (buf, prefix); /* __STRCPY_CHECKED__ */ - p = buf + mutt_strlen (buf); - if (is_pgp && mutt_strlen (s) == 40) { /* PGP v4 style formatted. */ + p = buf + m_strlen(buf); + if (is_pgp && m_strlen(s) == 40) { /* PGP v4 style formatted. */ for (i = 0; *s && s[1] && s[2] && s[3] && s[4]; s += 4, i++) { *p++ = s[0]; *p++ = s[1]; @@ -1055,7 +1064,7 @@ static void show_fingerprint (gpgme_key_t key, STATE * state) *p++ = '\n'; *p = 0; state_attach_puts (buf, state); - FREE (&buf); + p_delete(&buf); } /* Show the valididy of a key used for one signature. */ @@ -1233,7 +1242,7 @@ static int verify_one (BODY * sigbdy, STATE * s, err = gpgme_data_new_from_file (&message, tempfile, 1); if (err) { gpgme_data_release (signature); - mutt_error ("error allocating data object: %s\n", gpgme_strerror (err)); + mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err)); return -1; } ctx = create_gpgme_context (is_smime); @@ -1293,7 +1302,7 @@ static int verify_one (BODY * sigbdy, STATE * s, if (notation->value) { state_attach_puts (notation->value, s); if (!(*notation->value - && (notation->value[mutt_strlen (notation->value) - 1] == + && (notation->value[m_strlen(notation->value) - 1] == '\n'))) state_attach_puts ("\n", s); } @@ -1307,7 +1316,7 @@ static int verify_one (BODY * sigbdy, STATE * s, gpgme_release (ctx); state_attach_puts (_("[-- End signature information --]\n\n"), s); - dprint (1, (debugfile, "verify_one: returning %d.\n", badsig)); + debug_print (1, ("returning %d.\n", badsig)); return badsig ? 1 : anywarn ? 2 : 0; } @@ -1480,7 +1489,7 @@ int pgp_gpgme_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+"))) { @@ -1524,9 +1533,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, saved_b_type = b->type; saved_b_offset = b->offset; saved_b_length = b->length; - memset (&s, 0, sizeof (s)); + p_clear(&s, 1); s.fpin = fpin; - fseek (s.fpin, b->offset, 0); + fseeko (s.fpin, b->offset, 0); mutt_mktemp (tempfile); if (!(tmpfp = safe_fopen (tempfile, "w+"))) { mutt_perror (tempfile); @@ -1537,11 +1546,11 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, s.fpout = tmpfp; mutt_decode_attachment (b, &s); fflush (tmpfp); - b->length = ftell (s.fpout); + b->length = ftello (s.fpout); b->offset = 0; rewind (tmpfp); - memset (&s, 0, sizeof (s)); + p_clear(&s, 1); s.fpin = tmpfp; s.fpout = 0; mutt_mktemp (tempfile); @@ -1576,9 +1585,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, saved_b_type = bb->type; saved_b_offset = bb->offset; saved_b_length = bb->length; - memset (&s, 0, sizeof (s)); + p_clear(&s, 1); s.fpin = *fpout; - fseek (s.fpin, bb->offset, 0); + fseeko (s.fpin, bb->offset, 0); mutt_mktemp (tempfile); if (!(tmpfp = safe_fopen (tempfile, "w+"))) { mutt_perror (tempfile); @@ -1589,12 +1598,12 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, s.fpout = tmpfp; mutt_decode_attachment (bb, &s); fflush (tmpfp); - bb->length = ftell (s.fpout); + bb->length = ftello (s.fpout); bb->offset = 0; rewind (tmpfp); fclose (*fpout); - memset (&s, 0, sizeof (s)); + p_clear(&s, 1); s.fpin = tmpfp; s.fpout = 0; mutt_mktemp (tempfile); @@ -1651,10 +1660,10 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, } while (fgets (buf, sizeof (buf), tfp)) { - if (!mutt_strncmp ("-----BEGIN PGP ", buf, 15)) { - if (!mutt_strcmp ("MESSAGE-----\n", buf + 15)) + if (!m_strncmp("-----BEGIN PGP ", buf, 15)) { + if (!m_strcmp("MESSAGE-----\n", buf + 15)) enc = 1; - else if (!mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15)) + else if (!m_strcmp("SIGNED MESSAGE-----\n", buf + 15)) sgn = 1; } } @@ -1720,7 +1729,7 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) if (!fname) return; unlink (fname); - FREE (&fname); + p_delete(&fname); fc = fgetconv_open (fp, charset, Charset, M_ICONV_HOOK_FROM); @@ -1733,7 +1742,7 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) continue; } - if (!mutt_strcmp (buf, "-----BEGIN PGP SIGNATURE-----\n")) + if (!m_strcmp(buf, "-----BEGIN PGP SIGNATURE-----\n")) break; if (armor_header) { @@ -1757,16 +1766,17 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) /* Support for classic_application/pgp */ -void pgp_gpgme_application_handler (BODY * m, STATE * s) +int pgp_gpgme_application_handler (BODY * m, STATE * s) { int needpass = -1, pgp_keyblock = 0; int clearsign = 0; long start_pos = 0; - long bytes, last_pos, offset; + long bytes; + off_t last_pos, offset; char buf[HUGE_STRING]; FILE *pgpout = NULL; - gpgme_error_t err; + gpgme_error_t err = 0; gpgme_data_t armored_data = NULL; short maybe_goodsig = 1; @@ -1774,37 +1784,37 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s) char body_charset[STRING]; /* Only used for clearsigned messages. */ - dprint (2, (debugfile, "Entering pgp_application_pgp handler\n")); + debug_print (2, ("Entering pgp_application_pgp handler\n")); /* For clearsigned messages we won't be able to get a character set but we know that this may only be text thus we assume Latin-1 here. */ if (!mutt_get_body_charset (body_charset, sizeof (body_charset), m)) - strfcpy (body_charset, "iso-8859-1", sizeof body_charset); + m_strcpy(body_charset, sizeof(body_charset), "iso-8859-1"); - fseek (s->fpin, m->offset, 0); + fseeko (s->fpin, m->offset, 0); last_pos = m->offset; for (bytes = m->length; bytes > 0;) { if (fgets (buf, sizeof (buf), s->fpin) == NULL) break; - offset = ftell (s->fpin); - bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */ + offset = ftello (s->fpin); + bytes -= (offset - last_pos); /* don't rely on m_strlen(buf) */ last_pos = offset; - if (!mutt_strncmp ("-----BEGIN PGP ", buf, 15)) { + if (!m_strncmp("-----BEGIN PGP ", buf, 15)) { clearsign = 0; start_pos = last_pos; - if (!mutt_strcmp ("MESSAGE-----\n", buf + 15)) + if (!m_strcmp("MESSAGE-----\n", buf + 15)) needpass = 1; - else if (!mutt_strcmp ("SIGNED MESSAGE-----\n", buf + 15)) { + else if (!m_strcmp("SIGNED MESSAGE-----\n", buf + 15)) { clearsign = 1; needpass = 0; } else if (!option (OPTDONTHANDLEPGPKEYS) && - !mutt_strcmp ("PUBLIC KEY BLOCK-----\n", buf + 15)) { + !m_strcmp("PUBLIC KEY BLOCK-----\n", buf + 15)) { needpass = 0; pgp_keyblock = 1; } @@ -1820,18 +1830,18 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s) /* Copy PGP material to an data container */ armored_data = create_gpgme_data (); - gpgme_data_write (armored_data, buf, mutt_strlen (buf)); + gpgme_data_write (armored_data, buf, m_strlen(buf)); while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL) { - offset = ftell (s->fpin); - bytes -= (offset - last_pos); /* don't rely on mutt_strlen(buf) */ + offset = ftello (s->fpin); + bytes -= (offset - last_pos); /* don't rely on m_strlen(buf) */ last_pos = offset; - gpgme_data_write (armored_data, buf, mutt_strlen (buf)); + gpgme_data_write (armored_data, buf, m_strlen(buf)); - if ((needpass && !mutt_strcmp ("-----END PGP MESSAGE-----\n", buf)) + if ((needpass && !m_strcmp("-----END PGP MESSAGE-----\n", buf)) || (!needpass - && (!mutt_strcmp ("-----END PGP SIGNATURE-----\n", buf) - || !mutt_strcmp ("-----END PGP PUBLIC KEY BLOCK-----\n", + && (!m_strcmp("-----END PGP SIGNATURE-----\n", buf) + || !m_strcmp("-----END PGP PUBLIC KEY BLOCK-----\n", buf)))) break; } @@ -1912,7 +1922,7 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s) } else { unlink (tmpfname); - FREE (&tmpfname); + p_delete(&tmpfname); } } gpgme_release (ctx); @@ -1977,9 +1987,10 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s) if (needpass == -1) { state_attach_puts (_("[-- Error: could not find beginning" " of PGP message! --]\n\n"), s); - return; + return (-1); } - dprint (2, (debugfile, "Leaving pgp_application_pgp handler\n")); + debug_print (2, ("Leaving pgp_application_pgp handler\n")); + return (err); } /* @@ -1987,15 +1998,16 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s) */ /* MIME handler for pgp/mime encrypted messages. */ -void pgp_gpgme_encrypted_handler (BODY * a, STATE * s) +int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) { char tempfile[_POSIX_PATH_MAX]; FILE *fpout; BODY *tattach; BODY *orig_body = a; int is_signed; + int rc = 0; - dprint (2, (debugfile, "Entering pgp_encrypted handler\n")); + debug_print (2, ("Entering pgp_encrypted handler\n")); a = a->parts; if (!a || a->type != TYPEAPPLICATION || !a->subtype || ascii_strcasecmp ("pgp-encrypted", a->subtype) @@ -2004,7 +2016,7 @@ void pgp_gpgme_encrypted_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: malformed PGP/MIME message! --]\n\n"), s); - return; + return (-1); } /* Move forward to the application/pgp-encrypted body. */ @@ -2015,7 +2027,7 @@ void pgp_gpgme_encrypted_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); - return; + return (-1); } tattach = decrypt_part (a, s, fpout, 0, &is_signed); @@ -2025,17 +2037,14 @@ void pgp_gpgme_encrypted_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (is_signed ? _ - ("[-- The following data is PGP/MIME signed and encrypted --]\n\n") - : - _ - ("[-- The following data is PGP/MIME encrypted --]\n\n"), - s); + ("[-- The following data is PGP/MIME signed and encrypted --]\n\n") : + _("[-- The following data is PGP/MIME encrypted --]\n\n"), s); { FILE *savefp = s->fpin; s->fpin = fpout; - mutt_body_handler (tattach, s); + rc = mutt_body_handler (tattach, s); s->fpin = savefp; } @@ -2060,19 +2069,20 @@ void pgp_gpgme_encrypted_handler (BODY * a, STATE * s) fclose (fpout); mutt_unlink (tempfile); - dprint (2, (debugfile, "Leaving pgp_encrypted handler\n")); + debug_print (2, ("Leaving pgp_encrypted handler\n")); + return (rc); } /* Support for application/smime */ -void smime_gpgme_application_handler (BODY * a, STATE * s) +int smime_gpgme_application_handler (BODY * a, STATE * s) { char tempfile[_POSIX_PATH_MAX]; FILE *fpout; BODY *tattach; int is_signed; + int rc = 0; - - dprint (2, (debugfile, "Entering smime_encrypted handler\n")); + debug_print (2, ("Entering smime_encrypted handler\n")); a->warnsig = 0; mutt_mktemp (tempfile); @@ -2080,7 +2090,7 @@ void smime_gpgme_application_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); - return; + return (-1); } tattach = decrypt_part (a, s, fpout, 1, &is_signed); @@ -2089,17 +2099,14 @@ void smime_gpgme_application_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (is_signed ? - _("[-- The following data is S/MIME signed --]\n\n") - : - _ - ("[-- The following data is S/MIME encrypted --]\n\n"), - s); + _("[-- The following data is S/MIME signed --]\n\n") : + _("[-- The following data is S/MIME encrypted --]\n\n"), s); { FILE *savefp = s->fpin; s->fpin = fpout; - mutt_body_handler (tattach, s); + rc = mutt_body_handler (tattach, s); s->fpin = savefp; } @@ -2129,7 +2136,8 @@ void smime_gpgme_application_handler (BODY * a, STATE * s) fclose (fpout); mutt_unlink (tempfile); - dprint (2, (debugfile, "Leaving smime_encrypted handler\n")); + debug_print (2, ("Leaving smime_encrypted handler\n")); + return (rc); } @@ -2363,10 +2371,10 @@ static int _crypt_compare_address (const void *a, const void *b) crypt_key_t **t = (crypt_key_t **) b; int r; - if ((r = mutt_strcasecmp ((*s)->uid, (*t)->uid))) + if ((r = m_strcasecmp((*s)->uid, (*t)->uid))) return r > 0; else - return mutt_strcasecmp (crypt_keyid (*s), crypt_keyid (*t)) > 0; + return m_strcasecmp(crypt_keyid (*s), crypt_keyid (*t)) > 0; } static int crypt_compare_address (const void *a, const void *b) @@ -2383,10 +2391,10 @@ static int _crypt_compare_keyid (const void *a, const void *b) crypt_key_t **t = (crypt_key_t **) b; int r; - if ((r = mutt_strcasecmp (crypt_keyid (*s), crypt_keyid (*t)))) + if ((r = m_strcasecmp(crypt_keyid (*s), crypt_keyid (*t)))) return r > 0; else - return mutt_strcasecmp ((*s)->uid, (*t)->uid) > 0; + return m_strcasecmp((*s)->uid, (*t)->uid) > 0; } static int crypt_compare_keyid (const void *a, const void *b) @@ -2412,7 +2420,7 @@ static int _crypt_compare_date (const void *a, const void *b) if (ts < tt) return 0; - return mutt_strcasecmp ((*s)->uid, (*t)->uid) > 0; + return m_strcasecmp((*s)->uid, (*t)->uid) > 0; } static int crypt_compare_date (const void *a, const void *b) @@ -2457,9 +2465,9 @@ static int _crypt_compare_trust (const void *a, const void *b) if (ts < tt) return 0; - if ((r = mutt_strcasecmp ((*s)->uid, (*t)->uid))) + if ((r = m_strcasecmp((*s)->uid, (*t)->uid))) return r > 0; - return (mutt_strcasecmp (crypt_keyid ((*s)), crypt_keyid ((*t)))) > 0; + return (m_strcasecmp(crypt_keyid ((*s)), crypt_keyid ((*t)))) > 0; } static int crypt_compare_trust (const void *a, const void *b) @@ -2475,10 +2483,10 @@ static int print_dn_part (FILE * fp, struct dn_array_s *dn, const char *key) int any = 0; for (; dn->key; dn++) { - if (!strcmp (dn->key, key)) { + if (!m_strcmp(dn->key, key)) { if (any) fputs (" + ", fp); - print_utf8 (fp, dn->value, mutt_strlen (dn->value)); + print_utf8 (fp, dn->value, m_strlen(dn->value)); any = 1; } } @@ -2501,7 +2509,7 @@ static void print_dn_parts (FILE * fp, struct dn_array_s *dn) /* now print the rest without any specific ordering */ for (; dn->key; dn++) { for (i = 0; stdpart[i]; i++) { - if (!strcmp (dn->key, stdpart[i])) + if (!m_strcmp(dn->key, stdpart[i])) break; } if (!stdpart[i]) { @@ -2533,10 +2541,8 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, n = s - string; if (!n) return NULL; /* empty key */ - array->key = safe_malloc (n + 1); + array->key = p_dupstr(string, n ); p = (unsigned char *) array->key; - memcpy (p, string, n); /* fixme: trim trailing spaces */ - p[n] = 0; string = s + 1; if (*string == '#') { /* hexstring */ @@ -2547,7 +2553,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, if (!n || (n & 1)) return NULL; /* empty or odd number of digits */ n /= 2; - p = safe_malloc (n + 1); + p = xmalloc(n + 1); array->value = (char *) p; for (s1 = string; n; s1 += 2, n--) *p++ = xtoi_2 (s1); @@ -2577,7 +2583,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, n++; } - p = safe_malloc (n + 1); + p = xmalloc(n + 1); array->value = (char *) p; for (s = string; n; s++, n--) { if (*s == '\\') { @@ -2608,7 +2614,7 @@ static struct dn_array_s *parse_dn (const unsigned char *string) int i; arraysize = 7; /* C,ST,L,O,OU,CN,email */ - array = safe_malloc ((arraysize + 1) * sizeof *array); + array = p_new(struct dn_array_s, arraysize + 1); arrayidx = 0; while (*string) { while (*string == ' ') @@ -2619,12 +2625,12 @@ static struct dn_array_s *parse_dn (const unsigned char *string) struct dn_array_s *a2; arraysize += 5; - a2 = safe_malloc ((arraysize + 1) * sizeof *array); + a2 = p_new(struct dn_array_s, arraysize + 1); for (i = 0; i < arrayidx; i++) { a2[i].key = array[i].key; a2[i].value = array[i].value; } - FREE (&array); + p_delete(&array); array = a2; } array[arrayidx].key = NULL; @@ -2646,10 +2652,10 @@ static struct dn_array_s *parse_dn (const unsigned char *string) failure: for (i = 0; i < arrayidx; i++) { - FREE (&array[i].key); - FREE (&array[i].value); + p_delete(&array[i].key); + p_delete(&array[i].value); } - FREE (&array); + p_delete(&array); return NULL; } @@ -2680,10 +2686,10 @@ static void parse_and_print_user_id (FILE * fp, const char *userid) else { print_dn_parts (fp, dn); for (i = 0; dn[i].key; i++) { - FREE (&dn[i].key); - FREE (&dn[i].value); + p_delete(&dn[i].key); + p_delete(&dn[i].value); } - FREE (&dn); + p_delete(&dn); } } } @@ -2748,13 +2754,14 @@ static void print_key_info (gpgme_key_t key, FILE * fp) continue; s = uid->uid; - fprintf (fp, "%s ......: ", idx ? _(" aka") : _("Name")); + fputs (idx ? _(" aka ......: ") :_("Name ......: "), fp); + if (uid->invalid) { fputs (_("[Invalid]"), fp); putc (' ', fp); } if (is_pgp) - print_utf8 (fp, s, mutt_strlen (s)); + print_utf8 (fp, s, m_strlen(s)); else parse_and_print_user_id (fp, s); putc ('\n', fp); @@ -2769,7 +2776,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp) #else strftime (shortbuf, sizeof shortbuf, "%c", tm); #endif - fprintf (fp, "Valid From : %s\n", shortbuf); + fprintf (fp, _("Valid From : %s\n"), shortbuf); } if (key->subkeys && (key->subkeys->expires > 0)) { @@ -2781,7 +2788,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp) #else strftime (shortbuf, sizeof shortbuf, "%c", tm); #endif - fprintf (fp, "Valid To ..: %s\n", shortbuf); + fprintf (fp, _("Valid To ..: %s\n"), shortbuf); } if (key->subkeys) @@ -2794,29 +2801,29 @@ static void print_key_info (gpgme_key_t key, FILE * fp) if (key->subkeys) aval = key->subkeys->length; - fprintf (fp, "Key Type ..: %s, %lu bit %s\n", s2, aval, s); + fprintf (fp, _("Key Type ..: %s, %lu bit %s\n"), s2, aval, s); - fprintf (fp, "Key Usage .: "); + fprintf (fp, _("Key Usage .: ")); delim = ""; if (key_check_cap (key, KEY_CAP_CAN_ENCRYPT)) { fprintf (fp, "%s%s", delim, _("encryption")); - delim = ", "; + delim = _(", "); } if (key_check_cap (key, KEY_CAP_CAN_SIGN)) { fprintf (fp, "%s%s", delim, _("signing")); - delim = ", "; + delim = _(", "); } if (key_check_cap (key, KEY_CAP_CAN_CERTIFY)) { fprintf (fp, "%s%s", delim, _("certification")); - delim = ", "; + delim = _(", "); } putc ('\n', fp); if (key->subkeys) { s = key->subkeys->fpr; fputs (_("Fingerprint: "), fp); - if (is_pgp && mutt_strlen (s) == 40) { + if (is_pgp && m_strlen(s) == 40) { for (i = 0; *s && s[1] && s[2] && s[3] && s[4]; s += 4, i++) { putc (*s, fp); putc (s[1], fp); @@ -2842,13 +2849,13 @@ static void print_key_info (gpgme_key_t key, FILE * fp) if (key->issuer_serial) { s = key->issuer_serial; if (s) - fprintf (fp, "Serial-No .: 0x%s\n", s); + fprintf (fp, _("Serial-No .: 0x%s\n"), s); } if (key->issuer_name) { s = key->issuer_name; if (s) { - fprintf (fp, "Issued By .: "); + fprintf (fp, _("Issued By .: ")); parse_and_print_user_id (fp, s); putc ('\n', fp); } @@ -2862,9 +2869,9 @@ static void print_key_info (gpgme_key_t key, FILE * fp) s = subkey->keyid; putc ('\n', fp); - if (mutt_strlen (s) == 16) + if (m_strlen(s) == 16) s += 8; /* display only the short keyID */ - fprintf (fp, "Subkey ....: 0x%s", s); + fprintf (fp, _("Subkey ....: 0x%s"), s); if (subkey->revoked) { putc (' ', fp); fputs (_("[Revoked]"), fp); @@ -2892,7 +2899,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp) #else strftime (shortbuf, sizeof shortbuf, "%c", tm); #endif - fprintf (fp, "Valid From : %s\n", shortbuf); + fprintf (fp, _("Valid From : %s\n"), shortbuf); } if (subkey->expires > 0) { @@ -2904,7 +2911,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp) #else strftime (shortbuf, sizeof shortbuf, "%c", tm); #endif - fprintf (fp, "Valid To ..: %s\n", shortbuf); + fprintf (fp, _("Valid To ..: %s\n"), shortbuf); } if (subkey) @@ -2917,22 +2924,22 @@ static void print_key_info (gpgme_key_t key, FILE * fp) else aval = 0; - fprintf (fp, "Key Type ..: %s, %lu bit %s\n", "PGP", aval, s); + fprintf (fp, _("Key Type ..: %s, %lu bit %s\n"), "PGP", aval, s); - fprintf (fp, "Key Usage .: "); + fprintf (fp, _("Key Usage .: ")); delim = ""; if (subkey->can_encrypt) { fprintf (fp, "%s%s", delim, _("encryption")); - delim = ", "; + delim = _(", "); } if (subkey->can_sign) { fprintf (fp, "%s%s", delim, _("signing")); - delim = ", "; + delim = _(", "); } if (subkey->can_certify) { fprintf (fp, "%s%s", delim, _("certification")); - delim = ", "; + delim = _(", "); } putc ('\n', fp); } @@ -2956,7 +2963,7 @@ static void verify_key (crypt_key_t * key) mutt_mktemp (tempfile); if (!(fp = safe_fopen (tempfile, "w"))) { - mutt_perror _("Can't create temporary file"); + mutt_perror (_("Can't create temporary file")); return; } @@ -2975,7 +2982,7 @@ static void verify_key (crypt_key_t * key) k = key->kobj; gpgme_key_ref (k); - while ((s = k->chain_id) && k->subkeys && strcmp (s, k->subkeys->fpr)) { + while ((s = k->chain_id) && k->subkeys && m_strcmp(s, k->subkeys->fpr)) { putc ('\n', fp); err = gpgme_op_keylist_start (listctx, s, 0); gpgme_key_release (k); @@ -3030,7 +3037,7 @@ static char *list_to_pattern (LIST * list) n++; /* delimiter or end of string */ } n++; /* make sure to allocate at least one byte */ - pattern = p = safe_calloc (1, n); + pattern = p = p_new(char, n); for (l = list; l; l = l->next) { s = l->data; if (*s) { @@ -3077,8 +3084,8 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, err = gpgme_new (&ctx); if (err) { - mutt_error ("gpgme_new failed: %s", gpgme_strerror (err)); - FREE (&pattern); + mutt_error (_("gpgme_new failed: %s"), gpgme_strerror (err)); + p_delete(&pattern); return NULL; } @@ -3101,20 +3108,20 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, if (!n) goto no_pgphints; - patarr = safe_calloc (n + 1, sizeof *patarr); + patarr = p_new(char *, n + 1); for (l = hints, n = 0; l; l = l->next) { if (l->data && *l->data) - patarr[n++] = safe_strdup (l->data); + patarr[n++] = m_strdup(l->data); } patarr[n] = NULL; err = gpgme_op_keylist_ext_start (ctx, (const char **) patarr, secret, 0); for (n = 0; patarr[n]; n++) - FREE (&patarr[n]); - FREE (&patarr); + p_delete(&patarr[n]); + p_delete(&patarr); if (err) { - mutt_error ("gpgme_op_keylist_start failed: %s", gpgme_strerror (err)); + mutt_error (_("gpgme_op_keylist_start failed: %s"), gpgme_strerror (err)); gpgme_release (ctx); - FREE (&pattern); + p_delete(&pattern); return NULL; } @@ -3147,7 +3154,7 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, #endif /* DISABLED code */ for (idx = 0, uid = key->uids; uid; idx++, uid = uid->next) { - k = safe_calloc (1, sizeof *k); + k = p_new(crypt_key_t, 1); k->kobj = key; k->idx = idx; k->uid = uid->uid; @@ -3157,7 +3164,7 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, } } if (gpg_err_code (err) != GPG_ERR_EOF) - mutt_error ("gpgme_op_keylist_next failed: %s", gpgme_strerror (err)); + mutt_error (_("gpgme_op_keylist_next failed: %s"), gpgme_strerror (err)); gpgme_op_keylist_end (ctx); no_pgphints: ; @@ -3168,9 +3175,9 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS); err = gpgme_op_keylist_start (ctx, pattern, 0); if (err) { - mutt_error ("gpgme_op_keylist_start failed: %s", gpgme_strerror (err)); + mutt_error (_("gpgme_op_keylist_start failed: %s"), gpgme_strerror (err)); gpgme_release (ctx); - FREE (&pattern); + p_delete(&pattern); return NULL; } @@ -3183,7 +3190,7 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, flags |= KEYFLAG_CANSIGN; for (idx = 0, uid = key->uids; uid; idx++, uid = uid->next) { - k = safe_calloc (1, sizeof *k); + k = p_new(crypt_key_t, 1); k->kobj = key; k->idx = idx; k->uid = uid->uid; @@ -3193,12 +3200,12 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, } } if (gpg_err_code (err) != GPG_ERR_EOF) - mutt_error ("gpgme_op_keylist_next failed: %s", gpgme_strerror (err)); + mutt_error (_("gpgme_op_keylist_next failed: %s"), gpgme_strerror (err)); gpgme_op_keylist_end (ctx); } gpgme_release (ctx); - FREE (&pattern); + p_delete(&pattern); return db; } @@ -3209,16 +3216,16 @@ static LIST *crypt_add_string_to_hints (LIST * hints, const char *str) char *scratch; char *t; - if ((scratch = safe_strdup (str)) == NULL) + if ((scratch = m_strdup(str)) == NULL) return hints; for (t = strtok (scratch, " ,.:\"()<>\n"); t; t = strtok (NULL, " ,.:\"()<>\n")) { - if (mutt_strlen (t) > 3) - hints = mutt_add_list (hints, t); + if (m_strlen(t) > 3) + hints = mutt_add_list(hints, t); } - FREE (&scratch); + p_delete(&scratch); return hints; } @@ -3252,7 +3259,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, if (i == keymax) { keymax += 20; - safe_realloc (&key_table, sizeof (crypt_key_t *) * keymax); + p_realloc(&key_table, keymax); } key_table[i++] = k; @@ -3410,7 +3417,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, } mutt_menuDestroy (&menu); - FREE (&key_table); + p_delete(&key_table); set_option (OPTNEEDREDRAW); @@ -3451,16 +3458,13 @@ static crypt_key_t *crypt_getkeybyaddr (ADDRESS * a, short abilities, if (!keys) return NULL; - dprint (5, (debugfile, "crypt_getkeybyaddr: looking for %s <%s>.", - a->personal, a->mailbox)); + debug_print (5, ("looking for %s <%s>.\n", a->personal, a->mailbox)); for (k = keys; k; k = k->next) { - dprint (5, (debugfile, " looking at key: %s `%.15s'\n", - crypt_keyid (k), k->uid)); + debug_print (5, (" looking at key: %s `%.15s'\n", crypt_keyid (k), k->uid)); if (abilities && !(k->flags & abilities)) { - dprint (5, (debugfile, " insufficient abilities: Has %x, want %x\n", - k->flags, abilities)); + debug_print (5, (" insufficient abilities: Has %x, want %x\n", k->flags, abilities)); continue; } @@ -3564,19 +3568,18 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, continue; match = 0; - dprint (5, (debugfile, "crypt_getkeybystr: matching \"%s\" against " - "key %s, \"%s\": ", p, crypt_keyid (k), k->uid)); + debug_print (5, ("matching \"%s\" against " "key %s, \"%s\":\n", p, crypt_keyid (k), k->uid)); - if (!*p || !mutt_strcasecmp (p, crypt_keyid (k)) - || (!mutt_strncasecmp (p, "0x", 2) - && !mutt_strcasecmp (p + 2, crypt_keyid (k))) + if (!*p || !m_strcasecmp(p, crypt_keyid (k)) + || (!m_strncasecmp(p, "0x", 2) + && !m_strcasecmp(p + 2, crypt_keyid (k))) || (option (OPTPGPLONGIDS) - && !mutt_strncasecmp (p, "0x", 2) - && !mutt_strcasecmp (p + 2, crypt_keyid (k) + 8)) - || mutt_stristr (k->uid, p)) { + && !m_strncasecmp(p, "0x", 2) + && !m_strcasecmp(p + 2, crypt_keyid (k) + 8)) + || str_isstr (k->uid, p)) { crypt_key_t *tmp; - dprint (5, (debugfile, "match.\n")); + debug_print (5, ("match.\n")); *matches_endp = tmp = crypt_copy_key (k); matches_endp = &tmp->next; @@ -3619,8 +3622,8 @@ static crypt_key_t *crypt_ask_for_key (char *tag, if (whatfor) { for (l = id_defaults; l; l = l->next) - if (!mutt_strcasecmp (whatfor, l->what)) { - strfcpy (resp, NONULL (l->dflt), sizeof (resp)); + if (!m_strcasecmp(whatfor, l->what)) { + m_strcpy(resp, sizeof(resp), NONULL(l->dflt)); break; } } @@ -3633,13 +3636,13 @@ static crypt_key_t *crypt_ask_for_key (char *tag, if (whatfor) { if (l) - mutt_str_replace (&l->dflt, resp); + str_replace (&l->dflt, resp); else { - l = safe_malloc (sizeof (struct crypt_cache)); + l = p_new(struct crypt_cache, 1); l->next = id_defaults; id_defaults = l; - l->what = safe_strdup (whatfor); - l->dflt = safe_strdup (resp); + l->what = m_strdup(whatfor); + l->dflt = m_strdup(resp); } } @@ -3726,7 +3729,7 @@ static char *find_keys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc, } } else if (r == -1) { - FREE (&keylist); + p_delete(&keylist); rfc822_free_address (&tmp); rfc822_free_address (&addr); return NULL; @@ -3745,7 +3748,7 @@ static char *find_keys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc, app, #endif &forced_valid)) == NULL) { - FREE (&keylist); + p_delete(&keylist); rfc822_free_address (&tmp); rfc822_free_address (&addr); return NULL; @@ -3764,12 +3767,12 @@ static char *find_keys (ADDRESS * to, ADDRESS * cc, ADDRESS * bcc, *r_application &= ~APPLICATION_SMIME; #endif - keylist_size += mutt_strlen (s) + 4 + 1; - safe_realloc (&keylist, keylist_size); + keylist_size += m_strlen(s) + 4 + 1; + p_realloc(&keylist, keylist_size); sprintf (keylist + keylist_used, "%s0x%s%s", /* __SPRINTF_CHECKED__ */ keylist_used ? " " : "", s, forced_valid ? "!" : ""); } - keylist_used = mutt_strlen (keylist); + keylist_used = m_strlen(keylist); crypt_free_key (&key); rfc822_free_address (&addr); @@ -3826,21 +3829,23 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) if (is_smime) choice = mutt_multi_choice (_ - ("S/MIME (e)ncrypt, (s)ign, sign (a)s, (b)oth, (t)oggle or (f)orget it?"), - _("esabtf")); + ("S/MIME (e)ncrypt, (s)ign, sign (a)s, (b)oth, (p)gp or (c)lear?"), + _("esabpfc")); else choice = mutt_multi_choice (_ - ("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (t)oggle or (f)orget it?"), - _("esabtf")); + ("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, s/(m)ime or (c)lear?"), + _("esabmfc")); switch (choice) { case 1: /* (e)ncrypt */ msg->security |= (is_smime ? SMIMEENCRYPT : PGPENCRYPT); + msg->security &= ~(is_smime ? SMIMESIGN : PGPSIGN); break; case 2: /* (s)ign */ msg->security |= (is_smime ? SMIMESIGN : PGPSIGN); + msg->security &= ~(is_smime ? SMIMEENCRYPT : PGPENCRYPT); break; case 3: /* sign (a)s */ @@ -3849,15 +3854,17 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) is_smime ? APPLICATION_SMIME : APPLICATION_PGP, NULL))) { snprintf (input_signas, sizeof (input_signas), "0x%s", crypt_keyid (p)); - mutt_str_replace (is_smime ? &SmimeDefaultKey : &PgpSignAs, + str_replace (is_smime ? &SmimeDefaultKey : &PgpSignAs, input_signas); crypt_free_key (&p); msg->security |= (is_smime ? SMIMESIGN : PGPSIGN); } +#if 0 else { msg->security &= (is_smime ? ~SMIMESIGN : ~PGPSIGN); } +#endif *redraw = REDRAW_FULL; break; @@ -3866,16 +3873,16 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) (is_smime ? (SMIMEENCRYPT | SMIMESIGN) : (PGPENCRYPT | PGPSIGN)); break; - case 5: /* (t)oggle */ + case 5: /* (p)gp or s/(m)ime */ is_smime = !is_smime; break; - case 6: /* (f)orget it */ + case 6: /* (c)lear */ msg->security = 0; break; } - if (choice == 6); + if (choice == 6 || choice == 7); else if (is_smime) { msg->security &= ~APPLICATION_PGP; msg->security |= APPLICATION_SMIME; @@ -3919,9 +3926,9 @@ static int verify_sender (HEADER * h, gpgme_protocol_t protocol) int sender_length = 0; int uid_length = 0; - sender_length = mutt_strlen (sender->mailbox); + sender_length = m_strlen(sender->mailbox); for (uid = key->uids; uid && ret; uid = uid->next) { - uid_length = mutt_strlen (uid->email); + uid_length = m_strlen(uid->email); if (1 && (uid->email[0] == '<') && (uid->email[uid_length - 1] == '>') && (uid_length == sender_length + 2)