refactor import_keys to take directly an open file.
[apps/madmutt.git] / lib-crypt / crypt-gpgme.c
index aac1f10..d17abb8 100644 (file)
 
 #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>
@@ -3871,13 +3861,13 @@ int crypt_smime_verify_sender (HEADER * 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);
@@ -3897,38 +3887,24 @@ static void invoke_import(const char *fname, int smime)
     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)