X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-crypt%2Fsmime.c;h=0080b6a737e60488a5b037f4c229ce44674c93c2;hp=5d773cd100b0d1c68e838f323728c19880ff3271;hb=b62cf5fb77a75e17b176141d232655e5bd8b7fe1;hpb=711f787502b6a1a1c150b948a5ed9156c8ef9ba1 diff --git a/lib-crypt/smime.c b/lib-crypt/smime.c index 5d773cd..0080b6a 100644 --- a/lib-crypt/smime.c +++ b/lib-crypt/smime.c @@ -9,46 +9,26 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include +#include -#ifdef HAVE_LOCALE_H -# include -#endif -#ifdef HAVE_SYS_TIME_H -# include -#endif #ifdef HAVE_SYS_RESOURCE_H # include #endif -#include -#include -#include -#include -#include - #include +#include #include #include #include -#include "mutt.h" #include "alias.h" #include "handler.h" #include "copy.h" #include "alias.h" + #include "crypt.h" +#include "smime.h" struct smime_command_context { const char *key; /* %k */ @@ -256,7 +236,6 @@ static void mutt_smime_command (char *d, ssize_t dlen, { mutt_FormatString (d, dlen, NONULL (fmt), _mutt_fmt_smime_command, (unsigned long) cctx, 0); - debug_print (2, ("%s\n", d)); } static pid_t smime_invoke (FILE ** smimein, FILE ** smimeout, @@ -590,7 +569,7 @@ char *smime_get_field_from_db (char *mailbox, char *query, short public, } } - safe_fclose (&fp); + m_fclose(&fp); if (ask) { if (public && *fields[4] == 'u') @@ -630,15 +609,11 @@ char *smime_get_field_from_db (char *mailbox, char *query, short public, return m_strdup(key); } - - - /* This sets the '*ToUse' variables for an upcoming decryption, where the reuquired key is different from SmimeDefaultKey. */ - -void _smime_getkeys (char *mailbox) +static void _smime_getkeys (char *mailbox) { char *k = NULL; char buf[STRING]; @@ -758,7 +733,7 @@ char *smime_findKeys (address_t * to, address_t * cc, address_t * bcc) if (fqdn) rfc822_qualify (tmp, fqdn); - tmp = mutt_remove_duplicates (tmp); + address_list_uniq(tmp); for (p = tmp; p; p = p->next) { char buf[LONG_STRING]; @@ -803,15 +778,15 @@ static int smime_handle_cert_email (char *certificate, char *mailbox, int ret = -1, count = 0; pid_t thepid; - mutt_mktemp (tmpfname); - if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) { + fperr = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fperr) { mutt_perror (tmpfname); return 1; } mutt_unlink (tmpfname); - mutt_mktemp (tmpfname); - if ((fpout = safe_fopen (tmpfname, "w+")) == NULL) { + fpout = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fpout) { fclose (fperr); mutt_perror (tmpfname); return 1; @@ -889,15 +864,15 @@ static char *smime_extract_certificate (char *infile) int empty; - mutt_mktemp (tmpfname); - if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) { + fperr = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fperr) { mutt_perror (tmpfname); return NULL; } mutt_unlink (tmpfname); - mutt_mktemp (pk7out); - if ((fpout = safe_fopen (pk7out, "w+")) == NULL) { + fpout = m_tempfile (pk7out, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fpout) { fclose (fperr); mutt_perror (pk7out); return NULL; @@ -925,21 +900,21 @@ static char *smime_extract_certificate (char *infile) rewind (fpout); rewind (fperr); fflush (fperr); + empty = (fgetc (fpout) == EOF); + + fclose (fpout); + if (empty) { mutt_perror (pk7out); mutt_copy_stream (fperr, stdout); - fclose (fpout); fclose (fperr); mutt_unlink (pk7out); return NULL; - } - - fclose (fpout); - mutt_mktemp (certfile); - if ((fpout = safe_fopen (certfile, "w+")) == NULL) { + fpout = m_tempfile (certfile, sizeof(certfile), NONULL(Tempdir), NULL); + if (!fpout) { fclose (fperr); mutt_unlink (pk7out); mutt_perror (certfile); @@ -992,17 +967,15 @@ static char *smime_extract_signer_certificate (char *infile) pid_t thepid; int empty; - - mutt_mktemp (tmpfname); - if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) { + fperr = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fperr) { mutt_perror (tmpfname); return NULL; } mutt_unlink (tmpfname); - - mutt_mktemp (certfile); - if ((fpout = safe_fopen (certfile, "w+")) == NULL) { + m_tempfile (certfile, sizeof(certfile), NONULL(Tempdir), NULL); + if (!fpout) { fclose (fperr); mutt_perror (certfile); return NULL; @@ -1046,9 +1019,6 @@ static char *smime_extract_signer_certificate (char *infile) return m_strdup(certfile); } - - - /* Add a certificate and update index file (externally). */ void smime_invoke_import (char *infile, char *mailbox __attribute__ ((unused))) @@ -1057,22 +1027,21 @@ void smime_invoke_import (char *infile, char *mailbox __attribute__ ((unused))) FILE *smimein = NULL, *fpout = NULL, *fperr = NULL; pid_t thepid = -1; - mutt_mktemp (tmpfname); - if ((fperr = safe_fopen (tmpfname, "w+")) == NULL) { + fperr = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fperr) { mutt_perror (tmpfname); return; } mutt_unlink (tmpfname); - mutt_mktemp (tmpfname); - if ((fpout = safe_fopen (tmpfname, "w+")) == NULL) { + fpout = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!fpout) { fclose (fperr); mutt_perror (tmpfname); return; } mutt_unlink (tmpfname); - buf[0] = '\0'; if (option (OPTASKCERTLABEL)) mutt_get_field ("Label for certificate:", buf, sizeof (buf), 0); @@ -1119,8 +1088,8 @@ int smime_verify_sender (HEADER * h) FILE *fpout; int retval = 1; - mutt_mktemp (tempfname); - if (!(fpout = safe_fopen (tempfname, "w"))) { + fpout = m_tempfile (tempfname, sizeof(tempfname), NONULL(Tempdir), NULL); + if (!fpout) { mutt_perror (tempfname); return 1; } @@ -1219,14 +1188,14 @@ BODY *smime_build_smime_entity (BODY * a, char *certlist) int err = 0, empty; pid_t thepid; - mutt_mktemp (tempfile); - if ((fpout = safe_fopen (tempfile, "w+")) == NULL) { + fpout = m_tempfile (tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (!fpout) { mutt_perror (tempfile); - return (NULL); + return NULL; } - mutt_mktemp (smimeerrfile); - if ((smimeerr = safe_fopen (smimeerrfile, "w+")) == NULL) { + smimeerr = m_tempfile (smimeerrfile, sizeof(smimeerrfile), NONULL(Tempdir), NULL); + if (!smimeerr) { mutt_perror (smimeerrfile); fclose (fpout); mutt_unlink (tempfile); @@ -1234,8 +1203,8 @@ BODY *smime_build_smime_entity (BODY * a, char *certlist) } mutt_unlink (smimeerrfile); - mutt_mktemp (smimeinfile); - if ((fptmp = safe_fopen (smimeinfile, "w+")) == NULL) { + fptmp = m_tempfile (smimeinfile, sizeof(smimeinfile), NONULL(Tempdir), NULL); + if (!fptmp) { mutt_perror (smimeinfile); mutt_unlink (tempfile); fclose (fpout); @@ -1306,11 +1275,11 @@ BODY *smime_build_smime_entity (BODY * a, char *certlist) return (NULL); } - t = mutt_new_body (); + t = body_new(); t->type = TYPEAPPLICATION; t->subtype = m_strdup("x-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; @@ -1344,14 +1313,14 @@ BODY *smime_sign_message (BODY * a) convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */ - mutt_mktemp (filetosign); - if ((sfp = safe_fopen (filetosign, "w+")) == NULL) { + sfp = m_tempfile (filetosign, sizeof(filetosign), NONULL(Tempdir), NULL); + if (!sfp) { mutt_perror (filetosign); return NULL; } - mutt_mktemp (signedfile); - if ((smimeout = safe_fopen (signedfile, "w+")) == NULL) { + smimeout = m_tempfile (signedfile, sizeof(signedfile), NONULL(Tempdir), NULL); + if (!smimeout) { mutt_perror (signedfile); fclose (sfp); mutt_unlink (filetosign); @@ -1422,23 +1391,23 @@ BODY *smime_sign_message (BODY * a) return (NULL); /* fatal error while signing */ } - 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); + parameter_set_boundary(&t->parameter); /* check if this can be extracted from private key somehow.... */ - mutt_set_parameter ("micalg", "sha1", &t->parameter); - mutt_set_parameter ("protocol", "application/x-pkcs7-signature", - &t->parameter); + parameter_setval(&t->parameter, "micalg", "sha1"); + parameter_setval(&t->parameter, "protocol", + "application/x-pkcs7-signature"); t->parts = a; a = t; - t->parts->next = mutt_new_body (); + t->parts->next = body_new(); t = t->parts->next; t->type = TYPEAPPLICATION; t->subtype = m_strdup("x-pkcs7-signature"); @@ -1454,19 +1423,11 @@ BODY *smime_sign_message (BODY * a) } - - - - /* * Handling S/MIME - bodies. */ - - - - static pid_t smime_invoke_verify (FILE ** smimein, FILE ** smimeout, FILE ** smimeerr, int smimeinfd, int smimeoutfd, @@ -1541,9 +1502,8 @@ int smime_verify_one (BODY * sigbdy, STATE * s, const char *tempfile) sigbdy->type = origType; - - mutt_mktemp (smimeerrfile); - if (!(smimeerr = safe_fopen (smimeerrfile, "w+"))) { + smimeerr = m_tempfile(smimeerrfile, sizeof(smimeerrfile), NONULL(Tempdir), NULL); + if (!smimeerr) { mutt_perror (smimeerrfile); mutt_unlink (signedfile); return -1; @@ -1624,29 +1584,25 @@ static BODY *smime_handle_entity (BODY * m, STATE * s, FILE * outFile) if (!(type & APPLICATION_SMIME)) return NULL; - mutt_mktemp (outfile); - if ((smimeout = safe_fopen (outfile, "w+")) == NULL) { + smimeout = m_tempfile (outfile, sizeof(outfile), NONULL(Tempdir), NULL); + if (!smimeout) { mutt_perror (outfile); return NULL; } - mutt_mktemp (errfile); - if ((smimeerr = safe_fopen (errfile, "w+")) == NULL) { + smimeerr = m_tempfile(errfile, sizeof(errfile), NONULL(Tempdir), NULL); + if (!smimeerr) { mutt_perror (errfile); fclose (smimeout); - smimeout = NULL; return NULL; } mutt_unlink (errfile); - - mutt_mktemp (tmpfname); - if ((tmpfp = safe_fopen (tmpfname, "w+")) == NULL) { + tmpfp = m_tempfile (tmpfname, sizeof(tmpfname), NONULL(Tempdir), NULL); + if (!tmpfp) { mutt_perror (tmpfname); fclose (smimeout); - smimeout = NULL; fclose (smimeerr); - smimeerr = NULL; return NULL; } @@ -1722,11 +1678,10 @@ static BODY *smime_handle_entity (BODY * m, STATE * s, FILE * outFile) if (outFile) fpout = outFile; else { - mutt_mktemp (tmptmpfname); - if ((fpout = safe_fopen (tmptmpfname, "w+")) == NULL) { + fpout = m_tempfile (tmptmpfname, sizeof(tmptmpfname), NONULL(Tempdir), NULL); + if (!fpout) { mutt_perror (tmptmpfname); fclose (smimeout); - smimeout = NULL; return NULL; } } @@ -1821,8 +1776,8 @@ int smime_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, BODY ** cur) s.fpin = fpin; fseeko (s.fpin, b->offset, 0); - mutt_mktemp (tempfile); - if ((tmpfp = safe_fopen (tempfile, "w+")) == NULL) { + tmpfp = m_tempfile (tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (!tmpfp) { mutt_perror (tempfile); return (-1); } @@ -1837,8 +1792,8 @@ int smime_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, BODY ** cur) s.fpin = tmpfp; s.fpout = 0; - mutt_mktemp (tempfile); - if ((*fpout = safe_fopen (tempfile, "w+")) == NULL) { + *fpout = m_tempfile (tempfile, sizeof(tempfile), NONULL(Tempdir), NULL); + if (!*fpout) { mutt_perror (tempfile); rv = -1; goto bail; @@ -1858,7 +1813,7 @@ bail: b->length = tmplength; b->offset = tmpoffset; - safe_fclose (&tmpfp); + m_fclose(&tmpfp); if (*fpout) rewind (*fpout); return (rv);