X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-crypt%2Fcrypt-gpgme.c;h=c0d4b7f7bb90010851dc1754a83652344da18179;hp=5be0147054917dc18500ca2e9b88fabf42a39baf;hb=558b0bd9de90a9dc28f409d8f46679bf48c72ded;hpb=108f3c7ab59844591f7540347914ea57be5245e2 diff --git a/lib-crypt/crypt-gpgme.c b/lib-crypt/crypt-gpgme.c index 5be0147..c0d4b7f 100644 --- a/lib-crypt/crypt-gpgme.c +++ b/lib-crypt/crypt-gpgme.c @@ -12,18 +12,21 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif +#include #ifdef CRYPT_BACKEND_GPGME -#include -#include -#include -#include -#include -#include +#ifdef HAVE_LOCALE_H +# include +#endif +#ifdef HAVE_LANGINFO_D_T_FMT +# include +#endif +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif + +#include #include @@ -31,39 +34,15 @@ #include #include -#include "mutt.h" +#include "lib.h" +#include "alias.h" #include #include "handler.h" #include "copy.h" #include "pager.h" #include "recvattach.h" #include "sort.h" - - -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifdef HAVE_LOCALE_H -#include -#endif -#ifdef HAVE_LANGINFO_D_T_FMT -#include -#endif - -#ifdef HAVE_SYS_TIME_H -# include -#endif - -#ifdef HAVE_SYS_RESOURCE_H -# include -#endif +#include "crypt-gpgme.h" /* * Helper macros. @@ -109,7 +88,7 @@ typedef struct crypt_keyinfo { } crypt_key_t; typedef struct crypt_entry { - size_t num; + ssize_t num; crypt_key_t *key; } crypt_entry_t; @@ -132,7 +111,7 @@ static int digit_or_letter (const unsigned char *s) /* Print the utf-8 encoded string BUF of length LEN bytes to stream FP. Convert the character set. */ -static void print_utf8 (FILE * fp, const char *buf, size_t len) +static void print_utf8 (FILE * fp, const char *buf, ssize_t len) { char *tstr; @@ -253,8 +232,8 @@ static int crypt_id_is_strong (crypt_key_t * key) { gpgme_validity_t val = GPGME_VALIDITY_UNKNOWN; gpgme_user_id_t uid = NULL; - unsigned int is_strong = 0; - unsigned int i = 0; + int is_strong = 0; + int i = 0; if ((key->flags & KEYFLAG_ISX509)) return 1; @@ -369,10 +348,9 @@ static gpgme_data_t body_to_data_object (BODY * a, int convert) int err = 0; gpgme_data_t data; - mutt_mktemp (tempfile); - fptmp = safe_fopen (tempfile, "w+"); + fptmp = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); if (!fptmp) { - mutt_perror (tempfile); + mutt_perror (_("Can't create temporary file")); return NULL; } @@ -401,13 +379,11 @@ static gpgme_data_t body_to_data_object (BODY * a, int convert) buf[0] = c; gpgme_data_write (data, buf, 1); } - fclose (fptmp); gpgme_data_seek (data, 0, SEEK_SET); - } - else { - fclose (fptmp); + } else { err = gpgme_data_new_from_file (&data, tempfile, 1); } + m_fclose(&fptmp); unlink (tempfile); if (err) { mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err)); @@ -476,12 +452,11 @@ static char *data_object_to_tempfile (gpgme_data_t data, FILE ** ret_fp) int err; char tempfile[_POSIX_PATH_MAX]; FILE *fp; - size_t nread = 0; + ssize_t nread = 0; - mutt_mktemp (tempfile); - fp = safe_fopen (tempfile, "w+"); + fp = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); if (!fp) { - mutt_perror (tempfile); + mutt_perror (_("Can't create temporary file")); return NULL; } @@ -492,8 +467,8 @@ static char *data_object_to_tempfile (gpgme_data_t data, FILE ** ret_fp) while ((nread = gpgme_data_read (data, buf, sizeof (buf)))) { if (fwrite (buf, nread, 1, fp) != 1) { - mutt_perror (tempfile); - fclose (fp); + mutt_perror (_("Can't create temporary file")); + m_fclose(&fp); unlink (tempfile); return NULL; } @@ -502,11 +477,11 @@ static char *data_object_to_tempfile (gpgme_data_t data, FILE ** ret_fp) if (ret_fp) rewind (fp); else - fclose (fp); + m_fclose(&fp); if (nread == -1) { mutt_error (_("error reading data object: %s\n"), gpgme_strerror (err)); unlink (tempfile); - fclose (fp); + m_fclose(&fp); return NULL; } if (ret_fp) @@ -538,7 +513,7 @@ static gpgme_key_t *create_recipient_set (const char *keylist, do { while (*s == ' ') s++; - for (i = 0; *s && *s != ' ' && i < sizeof (buf) - 1;) + for (i = 0; *s && *s != ' ' && i < ssizeof(buf) - 1;) buf[i++] = *s++; buf[i] = 0; if (*buf) { @@ -676,7 +651,7 @@ static char *encrypt_gpgme_object (gpgme_data_t plaintext, gpgme_key_t * rset, which must have been allocated by the caller with size BUFLEN. Returns 0 on success or -1 in case of an error. The return string is truncted to BUFLEN - 1. */ -static int get_micalg (gpgme_ctx_t ctx, char *buf, size_t buflen) +static int get_micalg (gpgme_ctx_t ctx, char *buf, ssize_t buflen) { gpgme_sign_result_t result = NULL; const char *algorithm_name = NULL; @@ -760,34 +735,34 @@ static BODY *sign_message (BODY * a, int use_smime) return NULL; } - t = mutt_new_body (); + t = body_new(); t->type = TYPEMULTIPART; t->subtype = m_strdup("signed"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; - mutt_generate_boundary (&t->parameter); - mutt_set_parameter ("protocol", - use_smime ? "application/pkcs7-signature" - : "application/pgp-signature", &t->parameter); + parameter_set_boundary(&t->parameter); + parameter_setval(&t->parameter, "protocol", + use_smime ? "application/pkcs7-signature" + : "application/pgp-signature"); /* Get the micalg from gpgme. Old gpgme versions don't support this for S/MIME so we assume sha-1 in this case. */ if (!get_micalg (ctx, buf, sizeof buf)) - mutt_set_parameter ("micalg", buf, &t->parameter); + parameter_setval(&t->parameter, "micalg", buf); else if (use_smime) - mutt_set_parameter ("micalg", "sha1", &t->parameter); + parameter_setval(&t->parameter, "micalg", "sha1"); gpgme_release (ctx); t->parts = a; a = t; - t->parts->next = mutt_new_body (); + t->parts->next = body_new(); t = t->parts->next; t->type = TYPEAPPLICATION; if (use_smime) { t->subtype = m_strdup("pkcs7-signature"); - mutt_set_parameter ("name", "smime.p7s", &t->parameter); + parameter_setval(&t->parameter, "name", "smime.p7s"); t->encoding = ENCBASE64; t->use_disp = 1; t->disposition = DISPATTACH; @@ -847,22 +822,22 @@ BODY *pgp_gpgme_encrypt_message (BODY * a, char *keylist, int sign) if (!outfile) return NULL; - t = mutt_new_body (); + t = body_new(); t->type = TYPEMULTIPART; t->subtype = m_strdup("encrypted"); t->encoding = ENC7BIT; t->use_disp = 0; t->disposition = DISPINLINE; - mutt_generate_boundary (&t->parameter); - mutt_set_parameter ("protocol", "application/pgp-encrypted", &t->parameter); + parameter_set_boundary(&t->parameter); + parameter_setval(&t->parameter, "protocol", "application/pgp-encrypted"); - t->parts = mutt_new_body (); + t->parts = body_new(); t->parts->type = TYPEAPPLICATION; t->parts->subtype = m_strdup("pgp-encrypted"); t->parts->encoding = ENC7BIT; - t->parts->next = mutt_new_body (); + t->parts->next = body_new(); t->parts->next->type = TYPEAPPLICATION; t->parts->next->subtype = m_strdup("octet-stream"); t->parts->next->encoding = ENC7BIT; @@ -905,11 +880,11 @@ BODY *smime_gpgme_build_smime_entity (BODY * a, char *keylist) if (!outfile) return NULL; - t = mutt_new_body (); + t = body_new(); t->type = TYPEAPPLICATION; t->subtype = m_strdup("pkcs7-mime"); - mutt_set_parameter ("name", "smime.p7m", &t->parameter); - mutt_set_parameter ("smime-type", "enveloped-data", &t->parameter); + parameter_setval(&t->parameter, "name", "smime.p7m"); + parameter_setval(&t->parameter, "smime-type", "enveloped-data"); t->encoding = ENCBASE64; /* The output of OpenSSL SHOULD be binary */ t->use_disp = 1; t->disposition = DISPATTACH; @@ -958,7 +933,7 @@ static int show_sig_summary (unsigned long sum, if ((sum & GPGME_SIGSUM_SIG_EXPIRED)) { gpgme_verify_result_t result; gpgme_signature_t sig; - unsigned int i; + int i; result = gpgme_op_verify_result (ctx); @@ -991,7 +966,7 @@ static int show_sig_summary (unsigned long sum, const char *t0 = NULL, *t1 = NULL; gpgme_verify_result_t result; gpgme_signature_t sig; - unsigned int i; + int i; state_attach_puts (_("A system error occurred"), s); @@ -1027,6 +1002,7 @@ static void show_fingerprint (gpgme_key_t key, STATE * state) int i, is_pgp; char *buf, *p; const char *prefix = _("Fingerprint: "); + ssize_t bufsize; if (!key) return; @@ -1035,8 +1011,9 @@ static void show_fingerprint (gpgme_key_t key, STATE * state) return; is_pgp = (key->protocol == GPGME_PROTOCOL_OpenPGP); - buf = xmalloc(m_strlen(prefix) + m_strlen(s) * 4 + 2); - strcpy (buf, prefix); /* __STRCPY_CHECKED__ */ + bufsize = m_strlen(prefix) + m_strlen(s) * 4 + 2; + buf = p_new(char, bufsize); + m_strcpy(buf, bufsize, prefix); 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++) { @@ -1284,18 +1261,17 @@ static int verify_one (BODY * sigbdy, STATE * s, if (!badsig) { gpgme_verify_result_t result; gpgme_sig_notation_t notation; - gpgme_signature_t signature; + gpgme_signature_t sig; result = gpgme_op_verify_result (ctx); if (result) { - for (signature = result->signatures; signature; - signature = signature->next) { - if (signature->notations) { + for (sig = result->signatures; sig; sig = sig->next) { + if (sig->notations) { state_attach_puts ("*** Begin Notation (signature by: ", s); - state_attach_puts (signature->fpr, s); + state_attach_puts (sig->fpr, s); state_attach_puts (") ***\n", s); - for (notation = signature->notations; notation; - notation = notation->next) { + for (notation = sig->notations; notation; notation = notation->next) + { if (notation->name) { state_attach_puts (notation->name, s); state_attach_puts ("=", s); @@ -1317,7 +1293,6 @@ static int verify_one (BODY * sigbdy, STATE * s, gpgme_release (ctx); state_attach_puts (_("[-- End signature information --]\n\n"), s); - debug_print (1, ("returning %d.\n", badsig)); return badsig ? 1 : anywarn ? 2 : 0; } @@ -1347,7 +1322,7 @@ static BODY *decrypt_part (BODY * a, STATE * s, FILE * fpout, int is_smime, { struct stat info; BODY *tattach; - int err; + int err = 0; gpgme_ctx_t ctx; gpgme_data_t ciphertext, plaintext; int maybe_signed = 0; @@ -1492,9 +1467,9 @@ int pgp_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, BODY ** cur) p_clear(&s, 1); s.fpin = fpin; - mutt_mktemp (tempfile); - if (!(*fpout = safe_fopen (tempfile, "w+"))) { - mutt_perror (tempfile); + *fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!*fpout) { + mutt_perror (_("Can't create temporary file")); return -1; } unlink (tempfile); @@ -1518,7 +1493,7 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, FILE *tmpfp = NULL; int is_signed; long saved_b_offset; - size_t saved_b_length; + ssize_t saved_b_length; int saved_b_type; if (!mutt_is_application_smime (b)) @@ -1537,9 +1512,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, p_clear(&s, 1); s.fpin = fpin; fseeko (s.fpin, b->offset, 0); - mutt_mktemp (tempfile); - if (!(tmpfp = safe_fopen (tempfile, "w+"))) { - mutt_perror (tempfile); + tmpfp = m_tempfile (tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!tmpfp) { + mutt_perror (_("Can't create temporary file")); return -1; } mutt_unlink (tempfile); @@ -1554,9 +1529,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, p_clear(&s, 1); s.fpin = tmpfp; s.fpout = 0; - mutt_mktemp (tempfile); - if (!(*fpout = safe_fopen (tempfile, "w+"))) { - mutt_perror (tempfile); + *fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!*fpout) { + mutt_perror (_("Can't create temporary file")); return -1; } mutt_unlink (tempfile); @@ -1567,7 +1542,7 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, b->type = saved_b_type; b->length = saved_b_length; b->offset = saved_b_offset; - fclose (tmpfp); + m_fclose(&tmpfp); rewind (*fpout); if (*cur && !is_signed && !(*cur)->parts && mutt_is_application_smime (*cur)) { @@ -1589,9 +1564,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, p_clear(&s, 1); s.fpin = *fpout; fseeko (s.fpin, bb->offset, 0); - mutt_mktemp (tempfile); - if (!(tmpfp = safe_fopen (tempfile, "w+"))) { - mutt_perror (tempfile); + tmpfp = m_tempfile (tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!tmpfp) { + mutt_perror (_("Can't create temporary file")); return -1; } mutt_unlink (tempfile); @@ -1602,14 +1577,14 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, bb->length = ftello (s.fpout); bb->offset = 0; rewind (tmpfp); - fclose (*fpout); + m_fclose(&*fpout); p_clear(&s, 1); s.fpin = tmpfp; s.fpout = 0; - mutt_mktemp (tempfile); - if (!(*fpout = safe_fopen (tempfile, "w+"))) { - mutt_perror (tempfile); + *fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!*fpout) { + mutt_perror (_("Can't create temporary file")); return -1; } mutt_unlink (tempfile); @@ -1620,9 +1595,9 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, bb->type = saved_b_type; bb->length = saved_b_length; bb->offset = saved_b_offset; - fclose (tmpfp); + m_fclose(&tmpfp); rewind (*fpout); - mutt_free_body (cur); + body_list_wipe(cur); *cur = tmp_b; } return *cur ? 0 : -1; @@ -1639,6 +1614,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, char tempfile[_POSIX_PATH_MAX]; char buf[HUGE_STRING]; FILE *tfp; + int tempfd; short sgn = 0; short enc = 0; @@ -1649,13 +1625,13 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, if (tagged_only && !b->tagged) return 0; - mutt_mktemp (tempfile); - if (mutt_decode_save_attachment (fp, b, tempfile, 0, 0) != 0) { + tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) { unlink (tempfile); return 0; } - if ((tfp = fopen (tempfile, "r")) == NULL) { + if ((tfp = fopen(tempfile, "r")) == NULL) { unlink (tempfile); return 0; } @@ -1668,7 +1644,7 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, sgn = 1; } } - safe_fclose (&tfp); + m_fclose(&tfp); unlink (tempfile); if (!enc && !sgn) @@ -1676,10 +1652,9 @@ static int pgp_check_traditional_one_body (FILE * fp, BODY * b, /* fix the content type */ - mutt_set_parameter ("format", "fixed", &b->parameter); - mutt_set_parameter ("x-action", enc ? "pgp-encrypted" : "pgp-signed", - &b->parameter); - + parameter_setval(&b->parameter, "format", "fixed"); + parameter_setval(&b->parameter, "x-action", + enc ? "pgp-encrypted" : "pgp-signed"); return 1; } @@ -1722,7 +1697,7 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) { char buf[HUGE_STRING]; short complete, armor_header; - FGETCONV *fc; + fgetconv_t *fc; char *fname; FILE *fp; @@ -1762,7 +1737,7 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) } fgetconv_close (&fc); - fclose (fp); + m_fclose(&fp); } @@ -1785,8 +1760,6 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) char body_charset[STRING]; /* Only used for clearsigned messages. */ - 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. */ @@ -1948,7 +1921,7 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) copy_clearsigned (armored_data, s, body_charset); } else if (pgpout) { - FGETCONV *fc; + fgetconv_t *fc; int c; rewind (pgpout); @@ -1972,7 +1945,7 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) } if (pgpout) { - safe_fclose (&pgpout); + m_fclose(&pgpout); } } else { @@ -1990,7 +1963,6 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) " of PGP message! --]\n\n"), s); return (-1); } - debug_print (2, ("Leaving pgp_application_pgp handler\n")); return (err); } @@ -2008,7 +1980,6 @@ int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) int is_signed; int rc = 0; - debug_print (2, ("Entering pgp_encrypted handler\n")); a = a->parts; if (!a || a->type != TYPEAPPLICATION || !a->subtype || ascii_strcasecmp ("pgp-encrypted", a->subtype) @@ -2023,8 +1994,8 @@ int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) /* Move forward to the application/pgp-encrypted body. */ a = a->next; - mutt_mktemp (tempfile); - if (!(fpout = safe_fopen (tempfile, "w+"))) { + fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!fpout) { if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); @@ -2065,12 +2036,11 @@ int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) : _("[-- End of PGP/MIME encrypted data --]\n"), s); } - mutt_free_body (&tattach); + body_list_wipe(&tattach); } - fclose (fpout); + m_fclose(&fpout); mutt_unlink (tempfile); - debug_print (2, ("Leaving pgp_encrypted handler\n")); return (rc); } @@ -2083,11 +2053,9 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) int is_signed; int rc = 0; - debug_print (2, ("Entering smime_encrypted handler\n")); - a->warnsig = 0; - mutt_mktemp (tempfile); - if (!(fpout = safe_fopen (tempfile, "w+"))) { + fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!fpout) { if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); @@ -2132,12 +2100,11 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) _("[-- End of S/MIME encrypted data --]\n"), s); } - mutt_free_body (&tattach); + body_list_wipe(&tattach); } - fclose (fpout); + m_fclose(&fpout); mutt_unlink (tempfile); - debug_print (2, ("Leaving smime_encrypted handler\n")); return (rc); } @@ -2157,14 +2124,11 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) * %[...] date of key using strftime(3) */ -static const char *crypt_entry_fmt (char *dest, - size_t destlen, - char op, - const char *src, - const char *prefix, - const char *ifstring, - const char *elsestring, - unsigned long data, format_flag flags) +static const char * +crypt_entry_fmt (char *dest, ssize_t destlen, char op, + const char *src, const char *prefix, + const char *ifstr, const char *elstr, + anytype data, format_flag flags) { char fmt[16]; crypt_entry_t *entry; @@ -2174,7 +2138,7 @@ static const char *crypt_entry_fmt (char *dest, const char *s = NULL; unsigned long val; - entry = (crypt_entry_t *) data; + entry = data.ptr; key = entry->key; /* if (isupper ((unsigned char) op)) */ @@ -2187,10 +2151,10 @@ static const char *crypt_entry_fmt (char *dest, case '[': { const char *cp; - char buf2[SHORT_STRING], *p; + char buf2[STRING], *p; int do_locales; struct tm *tm; - size_t len; + ssize_t len; p = dest; @@ -2305,7 +2269,7 @@ static const char *crypt_entry_fmt (char *dest, s = "x"; else { gpgme_user_id_t uid = NULL; - unsigned int i = 0; + int i = 0; for (i = 0, uid = key->kobj->uids; uid && (i < key->idx); i++, uid = uid->next); @@ -2345,15 +2309,14 @@ static const char *crypt_entry_fmt (char *dest, *dest = '\0'; } - if (optional) - mutt_FormatString (dest, destlen, ifstring, mutt_attach_fmt, data, 0); - else if (flags & M_FORMAT_OPTIONAL) - mutt_FormatString (dest, destlen, elsestring, mutt_attach_fmt, data, 0); - return (src); + if (flags & M_FORMAT_OPTIONAL) + m_strformat(dest, destlen, 0, optional ? ifstr: elstr, + mutt_attach_fmt, data, 0); + return src; } /* Used by the display fucntion to format a line. */ -static void crypt_entry (char *s, size_t l, MUTTMENU * menu, int num) +static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num) { crypt_key_t **key_table = (crypt_key_t **) menu->data; crypt_entry_t entry; @@ -2361,8 +2324,8 @@ static void crypt_entry (char *s, size_t l, MUTTMENU * menu, int num) entry.key = key_table[num]; entry.num = num + 1; - mutt_FormatString (s, l, NONULL (PgpEntryFormat), crypt_entry_fmt, - (unsigned long) &entry, M_FORMAT_ARROWCURSOR); + m_strformat(s, l, COLS - SW, PgpEntryFormat, crypt_entry_fmt, &entry, + option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0); } /* Compare two addresses and the keyid to be used for sorting. */ @@ -2532,7 +2495,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, const unsigned char *string) { const unsigned char *s, *s1; - size_t n; + ssize_t n; unsigned char *p; /* parse attributeType */ @@ -2554,7 +2517,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 = xmalloc(n + 1); + p = p_new(unsigned char, n + 1); array->value = (char *) p; for (s1 = string; n; s1 += 2, n--) *p++ = xtoi_2 (s1); @@ -2584,7 +2547,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, n++; } - p = xmalloc(n + 1); + p = p_new(unsigned char, n + 1); array->value = (char *) p; for (s = string; n; s++, n--) { if (*s == '\\') { @@ -2611,7 +2574,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, static struct dn_array_s *parse_dn (const unsigned char *string) { struct dn_array_s *array; - size_t arrayidx, arraysize; + ssize_t arrayidx, arraysize; int i; arraysize = 7; /* C,ST,L,O,OU,CN,email */ @@ -2738,7 +2701,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp) const char *s = NULL, *s2 = NULL; time_t tt = 0; struct tm *tm; - char shortbuf[SHORT_STRING]; + char shortbuf[STRING]; unsigned long aval = 0; const char *delim; int is_pgp = 0; @@ -2962,10 +2925,9 @@ static void verify_key (crypt_key_t * key) gpgme_key_t k = NULL; int maxdepth = 100; - mutt_mktemp (tempfile); - if (!(fp = safe_fopen (tempfile, "w"))) { + fp = m_tempfile (tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL); + if (!fp) { mutt_perror (_("Can't create temporary file")); - return; } mutt_message _("Collecting data..."); @@ -3007,7 +2969,7 @@ static void verify_key (crypt_key_t * key) leave: gpgme_key_release (k); gpgme_release (listctx); - fclose (fp); + m_fclose(&fp); mutt_clear_error (); snprintf (cmd, sizeof (cmd), _("Key ID: 0x%s"), crypt_keyid (key)); mutt_do_pager (cmd, tempfile, 0, NULL); @@ -3026,7 +2988,7 @@ static char *list_to_pattern (string_list_t * list) string_list_t *l; char *pattern, *p; const char *s; - size_t n; + ssize_t n; n = 0; for (l = list; l; l = l->next) { @@ -3099,7 +3061,7 @@ static crypt_key_t *get_candidates (string_list_t * hints, unsigned int app, escaped pappert but simple strings passed in an array to the keylist_ext_start function. */ string_list_t *l; - size_t n; + ssize_t n; char **patarr; for (l = hints, n = 0; l; l = l->next) { @@ -3241,7 +3203,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, crypt_key_t **key_table; MUTTMENU *menu; int i, done = 0; - char helpstr[SHORT_STRING], buf[LONG_STRING]; + char helpstr[STRING], buf[LONG_STRING]; crypt_key_t *k; int (*f) (const void *, const void *); int menu_to_use = 0; @@ -3297,15 +3259,15 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, helpstr[0] = 0; mutt_make_help (buf, sizeof (buf), _("Exit "), menu_to_use, OP_EXIT); - strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + m_strcat(helpstr, sizeof(helpstr), buf); mutt_make_help (buf, sizeof (buf), _("Select "), menu_to_use, OP_GENERIC_SELECT_ENTRY); - strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + m_strcat(helpstr, sizeof(helpstr), buf); mutt_make_help (buf, sizeof (buf), _("Check key "), menu_to_use, OP_VERIFY_KEY); - strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + m_strcat(helpstr, sizeof(helpstr), buf); mutt_make_help (buf, sizeof (buf), _("Help"), menu_to_use, OP_HELP); - strcat (helpstr, buf); /* __STRCAT_CHECKED__ */ + m_strcat(helpstr, sizeof(helpstr), buf); menu = mutt_new_menu (); menu->max = i; @@ -3369,7 +3331,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, else { gpgme_validity_t val = GPGME_VALIDITY_UNKNOWN; gpgme_user_id_t uid = NULL; - unsigned int j = 0; + int j = 0; warn_s = "??"; @@ -3459,13 +3421,8 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, if (!keys) return NULL; - debug_print (5, ("looking for %s <%s>.\n", a->personal, a->mailbox)); - for (k = keys; k; k = k->next) { - debug_print (5, (" looking at key: %s `%.15s'\n", crypt_keyid (k), k->uid)); - if (abilities && !(k->flags & abilities)) { - debug_print (5, (" insufficient abilities: Has %x, want %x\n", k->flags, abilities)); continue; } @@ -3543,7 +3500,7 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, } -static crypt_key_t *crypt_getkeybystr (char *p, short abilities, +static crypt_key_t *crypt_getkeybystr (const char *p, short abilities, unsigned int app, int *forced_valid) { string_list_t *hints = NULL; @@ -3569,7 +3526,6 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, continue; match = 0; - debug_print (5, ("matching \"%s\" against " "key %s, \"%s\":\n", p, crypt_keyid (k), k->uid)); if (!*p || !m_strcasecmp(p, crypt_keyid (k)) || (!m_strncasecmp(p, "0x", 2) @@ -3580,8 +3536,6 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, || m_stristr(k->uid, p)) { crypt_key_t *tmp; - debug_print (5, ("match.\n")); - *matches_endp = tmp = crypt_copy_key (k); matches_endp = &tmp->next; } @@ -3609,7 +3563,7 @@ static crypt_key_t *crypt_ask_for_key (char *tag, unsigned int app, int *forced_valid) { crypt_key_t *key; - char resp[SHORT_STRING]; + char resp[STRING]; struct crypt_cache *l = NULL; int dummy; @@ -3660,9 +3614,10 @@ static crypt_key_t *crypt_ask_for_key (char *tag, static char *find_keys (address_t * to, address_t * cc, address_t * bcc, unsigned int app) { - char *keyID, *keylist = NULL, *t; - size_t keylist_size = 0; - size_t keylist_used = 0; + char *keylist = NULL, *t; + const char *keyID; + ssize_t keylist_size = 0; + ssize_t keylist_used = 0; address_t *tmp = NULL, *addr = NULL; address_t **last = &tmp; address_t *p, *q; @@ -3694,10 +3649,8 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, last = &((*last)->next); } - if (fqdn) - rfc822_qualify (tmp, fqdn); - - tmp = mutt_remove_duplicates (tmp); + rfc822_qualify(tmp, fqdn); + address_list_uniq(tmp); for (p = tmp; p; p = p->next) { char buf[LONG_STRING]; @@ -3715,18 +3668,12 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, /* check for e-mail address */ if ((t = strchr (keyID, '@')) && (addr = rfc822_parse_adrlist (NULL, keyID))) { - if (fqdn) - rfc822_qualify (addr, fqdn); + rfc822_qualify(addr, fqdn); q = addr; } else { -#if 0 - k_info = crypt_getkeybystr (keyID, KEYFLAG_CANENCRYPT, - *r_application, &forced_valid); -#else k_info = crypt_getkeybystr (keyID, KEYFLAG_CANENCRYPT, app, &forced_valid); -#endif } } else if (r == -1) { @@ -3743,11 +3690,7 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox); if ((key = crypt_ask_for_key (buf, q->mailbox, KEYFLAG_CANENCRYPT, -#if 0 - *r_application, -#else app, -#endif &forced_valid)) == NULL) { p_delete(&keylist); address_list_wipe(&tmp); @@ -3761,16 +3704,9 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, { const char *s = crypt_fpr (key); -#if 0 - if (key->flags & KEYFLAG_ISX509) - *r_application &= ~APPLICATION_PGP; - if (!(key->flags & KEYFLAG_ISX509)) - *r_application &= ~APPLICATION_SMIME; -#endif - keylist_size += m_strlen(s) + 4 + 1; p_realloc(&keylist, keylist_size); - sprintf (keylist + keylist_used, "%s0x%s%s", /* __SPRINTF_CHECKED__ */ + sprintf (keylist + keylist_used, "%s0x%s%s", keylist_used ? " " : "", s, forced_valid ? "!" : ""); } keylist_used = m_strlen(keylist); @@ -3819,7 +3755,7 @@ void smime_gpgme_init (void) static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) { crypt_key_t *p; - char input_signas[SHORT_STRING]; + char input_signas[STRING]; int choice; if (msg->security & APPLICATION_PGP) @@ -3861,11 +3797,6 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) msg->security |= (is_smime ? SMIMESIGN : PGPSIGN); } -#if 0 - else { - msg->security &= (is_smime ? ~SMIMESIGN : ~PGPSIGN); - } -#endif *redraw = REDRAW_FULL; break; @@ -3906,7 +3837,7 @@ int smime_gpgme_send_menu (HEADER * msg, int *redraw) return gpgme_send_menu (msg, redraw, 1); } -static int verify_sender (HEADER * h, gpgme_protocol_t protocol) +static int verify_sender (HEADER * h, gpgme_protocol_t protocol __attribute__((unused))) { address_t *sender = NULL; unsigned int ret = 1; @@ -3933,7 +3864,7 @@ static int verify_sender (HEADER * h, gpgme_protocol_t protocol) if (1 && (uid->email[0] == '<') && (uid->email[uid_length - 1] == '>') && (uid_length == sender_length + 2) - && (!strncmp (uid->email + 1, sender->mailbox, sender_length))) + && (!m_strncmp (uid->email + 1, sender->mailbox, sender_length))) ret = 0; } }