useless blanking
[apps/madmutt.git] / crypt.cpkg
index 1350166..5326fda 100644 (file)
      ** to find out whether an encrypted message is also signed.
      ** (Crypto only)
      */
+    bool smime_is_default = 0;
+    /*
+     ** .pp
+     ** The default behaviour of Madmutt is to use PGP on all auto-sign/encryption
+     ** operations. To override and to use OpenSSL instead this must be \fIset\fP.
+     ** .pp
+     ** However, this has no effect while replying, since Madmutt will automatically
+     ** select the same application that was used to sign/encrypt the original
+     ** message.
+     ** .pp
+     ** (Note that this variable can be overridden by unsetting $$crypt_autosmime.)
+     ** (S/MIME only)
+     */
     quadopt_t verify_sig = M_YES;
     /*
      ** .pp
      ** If ``\fIno\fP'', never attempt to verify cryptographic signatures.
      ** (Crypto only)
      */
+
+    string_t pgp_entry_format = m_strdup("%4n %t%f %4l/0x%k %-4a %2c %u");
+    /*
+     ** .pp
+     ** This variable allows you to customize the PGP key selection menu to
+     ** your personal taste. This string is similar to ``$$index_format'', but
+     ** has its own set of \fTprintf(3)\fP-like sequences:
+     ** .pp
+     ** .dl
+     ** .dt %n     .dd number
+     ** .dt %k     .dd key id
+     ** .dt %u     .dd user id
+     ** .dt %a     .dd algorithm
+     ** .dt %l     .dd key length
+     ** .dt %f     .dd flags
+     ** .dt %c     .dd capabilities
+     ** .dt %t     .dd trust/validity of the key-uid association
+     ** .dt %[<s>] .dd date of the key where <s> is an \fTstrftime(3)\fP expression
+     ** .de
+     ** .pp
+     ** (PGP only)
+     */
 };
 
 /* Values used for comparing addresses. */
@@ -162,7 +197,7 @@ static void convert_to_7bit (BODY * a)
         if (a->type == TYPEMULTIPART) {
             a->encoding = ENC7BIT;
             convert_to_7bit(a->parts);
-        } else if (a->type == TYPEMESSAGE && tok == MIME_DELIVERY_STATUS) {
+        } else if (a->type == TYPEMESSAGE && tok != MIME_DELIVERY_STATUS) {
             if (a->encoding != ENC7BIT)
                 mutt_message_to_7bit(a, NULL);
         } else if (a->encoding == ENC8BIT) {
@@ -184,7 +219,7 @@ static void print_utf8 (FILE * fp, const char *buf, ssize_t len)
     char *tstr;
 
     tstr = p_dupstr(buf, len);
-    mutt_convert_string(&tstr, "utf-8", MCharset.charset, M_ICONV_HOOK_FROM);
+    mutt_convert_string(&tstr, "utf-8", mod_cset.charset, M_ICONV_HOOK_FROM);
     fputs(tstr, fp);
     p_delete(&tstr);
 }
@@ -440,7 +475,7 @@ static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp)
     FILE *fp;
     ssize_t nread = 0;
 
-    fp = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+    fp = m_tempfile(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
     if (!fp) {
         mutt_perror (_("Can't create temporary file"));
         return NULL;
@@ -655,7 +690,7 @@ static void print_time(time_t t, STATE *s)
     char p[STRING];
 
     setlocale(LC_TIME, "");
-#ifdef HAVE_LANGINFO_D_T_FMT
+#ifdef D_T_FMT
     strftime(p, sizeof(p), nl_langinfo(D_T_FMT), localtime(&t));
 #else
     strftime(p, sizeof(p), "%c", localtime(&t));
@@ -1182,7 +1217,6 @@ static int crypt_verify_one(BODY *sigbdy, STATE *s, FILE *fp, int is_smime)
   state_attach_puts (_("[-- Begin signature information --]\n"), s);
 
   err = gpgme_op_verify (ctx, signature, message, NULL);
-  mutt_need_hard_redraw ();
   if (err) {
     char buf[200];
 
@@ -1545,7 +1579,7 @@ pgp_check_traditional_one_body(FILE *fp, BODY *b, int tagged_only)
   if (tagged_only && !b->tagged)
     return 0;
 
-  tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+  tempfd = m_tempfd(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
   if (mutt_decode_save_attachment (fp, b, tempfd, 0) != 0) {
     unlink (tempfile);
     return 0;
@@ -1623,7 +1657,7 @@ static void copy_clearsigned(gpgme_data_t data, STATE * s, char *charset)
   unlink (fname);
   p_delete(&fname);
 
-  fc = fgetconv_open (fp, charset, MCharset.charset, M_ICONV_HOOK_FROM);
+  fc = fgetconv_open (fp, charset, mod_cset.charset, M_ICONV_HOOK_FROM);
 
   for (complete = 1, armor_header = 1;
        fgetconvs (buf, sizeof (buf), fc) != NULL;
@@ -1839,7 +1873,7 @@ int crypt_pgp_application_pgp_handler(BODY *m, STATE *s)
         int c;
 
         rewind (pgpout);
-        fc = fgetconv_open (pgpout, "utf-8", MCharset.charset, 0);
+        fc = fgetconv_open (pgpout, "utf-8", mod_cset.charset, 0);
         while ((c = fgetconv (fc)) != EOF) {
           state_putc (c, s);
           if (c == '\n' && s->prefix)
@@ -1904,7 +1938,7 @@ int crypt_pgp_encrypted_handler (BODY * a, STATE * s)
   /* Move forward to the application/pgp-encrypted body. */
   a = a->next;
 
-  fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+  fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
   if (!fpout) {
     if (s->flags & M_DISPLAY)
       state_attach_puts (_("[-- Error: could not create temporary file! "
@@ -1964,7 +1998,7 @@ int crypt_smime_application_smime_handler (BODY * a, STATE * s)
   int rc = 0;
 
   a->warnsig = 0;
-  fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+  fpout = m_tempfile(tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
   if (!fpout) {
     if (s->flags & M_DISPLAY)
       state_attach_puts (_("[-- Error: could not create temporary file! "
@@ -2234,8 +2268,8 @@ static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num)
   entry.key = cryptkey_table[num];
   entry.num = num + 1;
 
-  m_strformat(s, l, COLS - SW, PgpEntryFormat, crypt_entry_fmt, &entry,
-              option(OPTARROWCURSOR) ? M_FORMAT_ARROWCURSOR : 0);
+  m_strformat(s, l, COLS - SW, mod_crypt.pgp_entry_format, crypt_entry_fmt,
+              &entry, 0);
 }
 
 /* Compare two addresses and the keyid to be used for sorting. */
@@ -2645,7 +2679,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
     tt = key->subkeys->timestamp;
 
     tm = localtime (&tt);
-#ifdef HAVE_LANGINFO_D_T_FMT
+#ifdef D_T_FMT
     strftime (shortbuf, sizeof shortbuf, nl_langinfo (D_T_FMT), tm);
 #else
     strftime (shortbuf, sizeof shortbuf, "%c", tm);
@@ -2657,7 +2691,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
     tt = key->subkeys->expires;
 
     tm = localtime (&tt);
-#ifdef HAVE_LANGINFO_D_T_FMT
+#ifdef D_T_FMT
     strftime (shortbuf, sizeof shortbuf, nl_langinfo (D_T_FMT), tm);
 #else
     strftime (shortbuf, sizeof shortbuf, "%c", tm);
@@ -2768,7 +2802,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
         tt = subkey->timestamp;
 
         tm = localtime (&tt);
-#ifdef HAVE_LANGINFO_D_T_FMT
+#ifdef D_T_FMT
         strftime (shortbuf, sizeof shortbuf, nl_langinfo (D_T_FMT), tm);
 #else
         strftime (shortbuf, sizeof shortbuf, "%c", tm);
@@ -2780,7 +2814,7 @@ static void print_key_info (gpgme_key_t key, FILE * fp)
         tt = subkey->expires;
 
         tm = localtime (&tt);
-#ifdef HAVE_LANGINFO_D_T_FMT
+#ifdef D_T_FMT
         strftime (shortbuf, sizeof shortbuf, nl_langinfo (D_T_FMT), tm);
 #else
         strftime (shortbuf, sizeof shortbuf, "%c", tm);
@@ -2835,7 +2869,7 @@ static void verify_key (cryptkey_t * key)
   gpgme_key_t k = NULL;
   int maxdepth = 100;
 
-  fp = m_tempfile (tempfile, sizeof(tempfile), NONULL(MCore.tmpdir), NULL);
+  fp = m_tempfile (tempfile, sizeof(tempfile), NONULL(mod_core.tmpdir), NULL);
   if (!fp) {
     mutt_perror (_("Can't create temporary file"));
     return;
@@ -3001,7 +3035,7 @@ static cryptkey_t *crypt_select_key (cryptkey_t * keys,
   cryptkey_t **cryptkey_table;
   MUTTMENU *menu;
   int i, done = 0;
-  char helpstr[STRING], buf[LONG_STRING];
+  char buf[LONG_STRING];
   cryptkey_t *k;
   int (*f) (const void *, const void *);
   int menu_to_use = 0;
@@ -3055,23 +3089,10 @@ static cryptkey_t *crypt_select_key (cryptkey_t * keys,
   else if (app & APPLICATION_SMIME)
       menu_to_use = MENU_KEY_SELECT_SMIME;
 
-  helpstr[0] = 0;
-  mutt_make_help (buf, sizeof (buf), _("Exit  "), menu_to_use, OP_EXIT);
-  m_strcat(helpstr, sizeof(helpstr), buf);
-  mutt_make_help (buf, sizeof (buf), _("Select  "), menu_to_use,
-                  OP_GENERIC_SELECT_ENTRY);
-  m_strcat(helpstr, sizeof(helpstr), buf);
-  mutt_make_help (buf, sizeof (buf), _("Check key  "),
-                  menu_to_use, OP_VERIFY_KEY);
-  m_strcat(helpstr, sizeof(helpstr), buf);
-  mutt_make_help (buf, sizeof (buf), _("Help"), menu_to_use, OP_HELP);
-  m_strcat(helpstr, sizeof(helpstr), buf);
-
   menu = mutt_new_menu ();
   menu->max = i;
   menu->make_entry = crypt_entry;
   menu->menu = menu_to_use;
-  menu->help = helpstr;
   menu->data = cryptkey_table;
 
   {
@@ -4007,4 +4028,44 @@ int mutt_signed_handler(BODY *a, STATE *s)
   return (rc);
 }
 
+static int _mutt_check_traditional_pgp (HEADER * h, int *redraw)
+{
+  MESSAGE *msg;
+  int rv = 0;
+
+  h->security |= PGP_TRADITIONAL_CHECKED;
+
+  mutt_parse_mime_message (Context, h);
+  if ((msg = mx_open_message (Context, h->msgno)) == NULL)
+    return 0;
+  if (crypt_pgp_check_traditional (msg->fp, h->content, 0)) {
+    h->security = crypt_query (h->content);
+    *redraw |= REDRAW_FULL;
+    rv = 1;
+  }
+
+  h->security |= PGP_TRADITIONAL_CHECKED;
+  mx_close_message (&msg);
+  return rv;
+}
+
+int mutt_check_traditional_pgp (HEADER * h, int *redraw)
+{
+  int i;
+  int rv = 0;
+
+  if (h && !(h->security & PGP_TRADITIONAL_CHECKED))
+    rv = _mutt_check_traditional_pgp (h, redraw);
+  else {
+    for (i = 0; i < Context->vcount; i++)
+      if (Context->hdrs[Context->v2r[i]]->tagged &&
+          !(Context->hdrs[Context->v2r[i]]->
+            security & PGP_TRADITIONAL_CHECKED))
+        rv =
+          _mutt_check_traditional_pgp (Context->hdrs[Context->v2r[i]], redraw)
+          || rv;
+  }
+  return rv;
+}
+
 /* vim:set ft=c: */