Rocco Rutte:
[apps/madmutt.git] / crypt-gpgme.c
index ed84713..e16bffa 100644 (file)
 #include "mutt_crypt.h"
 #include "mutt_menu.h"
 #include "mutt_curses.h"
+#include "ascii.h"
+#include "handler.h"
+#include "enter.h"
 #include "mime.h"
 #include "copy.h"
 #include "pager.h"
+#include "recvattach.h"
 #include "sort.h"
 
 #include "lib/mem.h"
@@ -1531,7 +1535,7 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b,
   saved_b_length = b->length;
   memset (&s, 0, sizeof (s));
   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);
@@ -1542,7 +1546,7 @@ 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);
 
@@ -1583,7 +1587,7 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b,
     saved_b_length = bb->length;
     memset (&s, 0, sizeof (s));
     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);
@@ -1594,7 +1598,7 @@ 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);
@@ -1762,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;
+  LOFF_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;
@@ -1787,14 +1792,14 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s)
   if (!mutt_get_body_charset (body_charset, sizeof (body_charset), m))
     strfcpy (body_charset, "iso-8859-1", sizeof body_charset);
 
-  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);
+    offset = ftello (s->fpin);
     bytes -= (offset - last_pos);       /* don't rely on str_len(buf) */
     last_pos = offset;
 
@@ -1827,7 +1832,7 @@ void pgp_gpgme_application_handler (BODY * m, STATE * s)
       armored_data = create_gpgme_data ();
       gpgme_data_write (armored_data, buf, str_len (buf));
       while (bytes > 0 && fgets (buf, sizeof (buf) - 1, s->fpin) != NULL) {
-        offset = ftell (s->fpin);
+        offset = ftello (s->fpin);
         bytes -= (offset - last_pos);   /* don't rely on str_len(buf) */
         last_pos = offset;
 
@@ -1982,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);
   }
   debug_print (2, ("Leaving pgp_application_pgp handler\n"));
+  return (err);
 }
 
 /* 
@@ -1992,13 +1998,14 @@ 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;
 
   debug_print (2, ("Entering pgp_encrypted handler\n"));
   a = a->parts;
@@ -2009,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. */
@@ -2020,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);
@@ -2030,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;
     }
 
@@ -2066,16 +2070,17 @@ void pgp_gpgme_encrypted_handler (BODY * a, STATE * s)
   fclose (fpout);
   mutt_unlink (tempfile);
   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;
 
   debug_print (2, ("Entering smime_encrypted handler\n"));
 
@@ -2085,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);
@@ -2094,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;
     }
 
@@ -2135,6 +2137,7 @@ void smime_gpgme_application_handler (BODY * a, STATE * s)
   fclose (fpout);
   mutt_unlink (tempfile);
   debug_print (2, ("Leaving smime_encrypted handler\n"));
+  return (rc);
 }
 
 
@@ -2753,7 +2756,8 @@ 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);
@@ -2774,7 +2778,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)) {
@@ -2786,7 +2790,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)
@@ -2799,22 +2803,22 @@ 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);
 
@@ -2847,13 +2851,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);
     }
@@ -2869,7 +2873,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
       putc ('\n', fp);
       if (str_len (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);
@@ -2897,7 +2901,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) {
@@ -2909,7 +2913,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)
@@ -2922,22 +2926,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);
     }