#include <lib-lib/lib-lib.h>
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#ifdef HAVE_LANGINFO_D_T_FMT
-# include <langinfo.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-# include <sys/resource.h>
-#endif
-
#include <gpgme.h>
#include <lib-mime/mime.h>
return ret;
}
-static void invoke_import(const char *fname, int smime)
+void crypt_invoke_import(FILE *stream, int smime)
{
gpgme_ctx_t ctx = create_gpgme_context(smime);
gpgme_data_t data;
gpgme_error_t err;
- err = gpgme_data_new_from_file(&data, fname, 1);
+ err = gpgme_data_new_from_stream(&data, stream);
if (err) {
mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err));
gpgme_release(ctx);
return;
}
-void crypt_pgp_invoke_import(const char *fname)
-{
- invoke_import(fname, 0);
-}
-
-void crypt_smime_invoke_import(const char *fname)
-{
- invoke_import(fname, 1);
-}
-
-static void pgp_extract_keys_from_attachment (FILE * fp, BODY * top)
+static void pgp_extract_keys_from_attachment(FILE * fp, BODY * top)
{
- STATE s;
- FILE *tempfp;
- char tempfname[_POSIX_PATH_MAX];
+ STATE s;
+ FILE *tmpfp = tmpfile();
- tempfp = m_tempfile(tempfname, sizeof(tempfname), NONULL(MCore.tmpdir), NULL);
- if (tempfp == NULL) {
- mutt_perror (_("Can't create temporary file"));
- return;
- }
-
- p_clear(&s, 1);
-
- s.fpin = fp;
- s.fpout = tempfp;
+ if (tmpfp == NULL) {
+ mutt_perror (_("Can't create temporary file"));
+ return;
+ }
- mutt_body_handler (top, &s);
+ p_clear(&s, 1);
+ s.fpin = fp;
+ s.fpout = tmpfp;
+ mutt_body_handler(top, &s);
- m_fclose(&tempfp);
- crypt_pgp_invoke_import(tempfname);
- mutt_unlink (tempfname);
+ rewind(tmpfp);
+ crypt_invoke_import(tmpfp, 0);
+ m_fclose(&tmpfp);
}
void crypt_pgp_extract_keys_from_attachment_list(FILE * fp, int tag, BODY * top)