move the last crypt-* things into lib-crypt, adapt configure.ac
[apps/madmutt.git] / recvattach.c
index 885c528..2a03049 100644 (file)
 #include <lib-lib/macros.h>
 #include <lib-lib/ascii.h>
 #include <lib-lib/file.h>
+#include <lib-lib/mapping.h>
+
+#include <lib-mime/mime.h>
+
+#include <lib-ui/curses.h>
+#include <lib-ui/enter.h>
 
 #include "mutt.h"
-#include "enter.h"
 #include "handler.h"
 #include "recvattach.h"
-#include "mutt_curses.h"
 #include "mutt_menu.h"
 #include "rfc1524.h"
-#include "mime.h"
 #include "attach.h"
-#include "mapping.h"
 #include "mx.h"
 #include "copy.h"
-#include "mutt_crypt.h"
+#include <lib-crypt/crypt.h>
 
 
 #include <ctype.h>
@@ -90,7 +92,7 @@ void mutt_update_tree (ATTACHPTR ** idx, short idxlen)
 
   for (x = 0; x < idxlen; x++) {
     idx[x]->num = x;
-    if (2 * (idx[x]->level + 2) < sizeof (buf)) {
+    if (2 * (idx[x]->level + 2) < ssizeof (buf)) {
       if (idx[x]->level) {
         s = buf + 2 * (idx[x]->level - 1);
         *s++ = (idx[x]->content->next) ? M_TREE_LTEE : M_TREE_LLCORNER;
@@ -104,12 +106,12 @@ void mutt_update_tree (ATTACHPTR ** idx, short idxlen)
 
     if (idx[x]->tree) {
       if (m_strcmp(idx[x]->tree, buf) != 0)
-        str_replace (&idx[x]->tree, buf);
+        m_strreplace(&idx[x]->tree, buf);
     }
     else
       idx[x]->tree = m_strdup(buf);
 
-    if (2 * (idx[x]->level + 2) < sizeof (buf) && idx[x]->level) {
+    if (2 * (idx[x]->level + 2) < ssizeof (buf) && idx[x]->level) {
       s = buf + 2 * (idx[x]->level - 1);
       *s++ = (idx[x]->content->next) ? '\005' : '\006';
       *s++ = '\006';
@@ -137,8 +139,7 @@ ATTACHPTR **mutt_gen_attach_list (BODY * m,
         && (compose
             || (parent_type == -1
                 && ascii_strcasecmp ("alternative", m->subtype)))
-        && (!(WithCrypto & APPLICATION_PGP)
-            || !mutt_is_multipart_encrypted (m))
+        && (!mutt_is_multipart_encrypted (m))
       ) {
       idx =
         mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax, level,
@@ -155,14 +156,12 @@ ATTACHPTR **mutt_gen_attach_list (BODY * m,
       new->level = level;
 
       /* We don't support multipart messages in the compose menu yet */
-      if (!compose && !m->collapsed &&
-          ((m->type == TYPEMULTIPART && (!(WithCrypto & APPLICATION_PGP)
-                                         || !mutt_is_multipart_encrypted (m))
-           )
-           || mutt_is_message_type (m->type, m->subtype))) {
-        idx =
-          mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax,
-                                level + 1, compose);
+      if (!compose && !m->collapsed
+      &&  ((m->type == TYPEMULTIPART && !mutt_is_multipart_encrypted(m))
+      ||  mutt_is_message_type (m->type, m->subtype)))
+      {
+        idx = mutt_gen_attach_list (m->parts, m->type, idx, idxlen, idxmax,
+                                    level + 1, compose);
       }
     }
   }
@@ -262,7 +261,7 @@ const char *mutt_attach_fmt (char *dest,
       if (aptr->content->filename && *aptr->content->filename == '/') {
         char path[_POSIX_PATH_MAX];
 
-        strfcpy (path, aptr->content->filename, sizeof (path));
+        m_strcpy(path, sizeof(path), aptr->content->filename);
         mutt_pretty_mailbox (path);
         mutt_format_s (dest, destlen, prefix, path);
       }
@@ -369,7 +368,7 @@ const char *mutt_attach_fmt (char *dest,
   return (src);
 }
 
-static void attach_entry (char *b, size_t blen, MUTTMENU * menu, int num)
+static void attach_entry (char *b, ssize_t blen, MUTTMENU * menu, int num)
 {
   int w=(COLS-SW)>blen?blen:(COLS-SW);
   mutt_FormatString (b, w, NONULL (AttachFormat), mutt_attach_fmt,
@@ -412,7 +411,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
       mutt_concat_path(buf, sizeof(buf), *directory,
                        mutt_basename(body->filename));
     else
-      strfcpy (buf, body->filename, sizeof (buf));
+      m_strcpy(buf, sizeof(buf), body->filename);
   }
   else if (body->hdr &&
            body->encoding != ENCBASE64 &&
@@ -434,7 +433,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
       char tmpbuf[_POSIX_PATH_MAX];
 
       snprintf (tmpbuf, sizeof (tmpbuf), "%s%s", LastSaveFolder, buf);
-      strfcpy (buf, tmpbuf, sizeof (buf));
+      m_strcpy(buf, sizeof(buf), tmpbuf);
       ret = mutt_get_field (_("Save to file: ")
                             , buf, sizeof (buf), M_FILE);
       if ((ret != 0) || (!buf[0]))
@@ -442,7 +441,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
     }
     else {
       mutt_extract_path (buf, path);
-      strfcpy (LastSaveFolder, path, sizeof (LastSaveFolder));
+      m_strcpy(LastSaveFolder, sizeof(LastSaveFolder), path);
     }
 
     prompt = NULL;
@@ -464,7 +463,7 @@ static int mutt_query_save_attachment (FILE * fp, BODY * body, HEADER * hdr,
       }
       else if (rc == -1)
         return -1;
-      strfcpy (tfile, buf, sizeof (tfile));
+      m_strcpy(tfile, sizeof(tfile), buf);
     }
     else {
       if ((rc =
@@ -511,7 +510,7 @@ void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr,
         if (!buf[0]) {
           int append = 0;
 
-          strfcpy (buf, NONULL (top->filename), sizeof (buf));
+          m_strcpy(buf, sizeof(buf), NONULL(top->filename));
           if (mutt_get_field (_("Save to file: "), buf, sizeof (buf),
                               M_FILE | M_CLEAR) != 0 || !buf[0])
             return;
@@ -566,12 +565,12 @@ void mutt_save_attachment_list (FILE * fp, int tag, BODY * top, HEADER * hdr,
 }
 
 static void
-mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int filter)
+mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int afilter)
 {
   char tfile[_POSIX_PATH_MAX];
   char warning[STRING + _POSIX_PATH_MAX];
 
-  if (filter) {
+  if (afilter) {
     snprintf (warning, sizeof (warning),
               _("WARNING!  You are about to overwrite %s, continue?"),
               body->filename);
@@ -585,7 +584,7 @@ mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int filter)
     tfile[0] = 0;
 
   if (mutt_pipe_attachment (fp, body, command, tfile)) {
-    if (filter) {
+    if (afilter) {
       mutt_unlink (body->filename);
       mutt_rename_file (tfile, body->filename);
       mutt_update_encoding (body);
@@ -593,7 +592,7 @@ mutt_query_pipe_attachment (char *command, FILE * fp, BODY * body, int filter)
     }
   }
   else {
-    if (filter && tfile[0])
+    if (afilter && tfile[0])
       mutt_unlink (tfile);
   }
 }
@@ -622,50 +621,50 @@ static void pipe_attachment (FILE * fp, BODY * b, STATE * state)
 
 static void
 pipe_attachment_list (char *command, FILE * fp, int tag, BODY * top,
-                      int filter, STATE * state)
+                      int afilter, STATE * state)
 {
   for (; top; top = top->next) {
     if (!tag || top->tagged) {
-      if (!filter && !option (OPTATTACHSPLIT))
+      if (!afilter && !option (OPTATTACHSPLIT))
         pipe_attachment (fp, top, state);
       else
-        mutt_query_pipe_attachment (command, fp, top, filter);
+        mutt_query_pipe_attachment (command, fp, top, afilter);
     }
     else if (top->parts)
-      pipe_attachment_list (command, fp, tag, top->parts, filter, state);
+      pipe_attachment_list (command, fp, tag, top->parts, afilter, state);
     if (!tag)
       break;
   }
 }
 
-void mutt_pipe_attachment_list (FILE * fp, int tag, BODY * top, int filter)
+void mutt_pipe_attachment_list (FILE * fp, int tag, BODY * top, int afilter)
 {
   STATE state;
   char buf[SHORT_STRING];
   pid_t thepid;
 
   if (fp)
-    filter = 0;                 /* sanity check: we can't filter in the recv case yet */
+    afilter = 0;                 /* sanity check: we can't filter in the recv case yet */
 
   buf[0] = 0;
   p_clear(&state, 1);
 
-  if (mutt_get_field ((filter ? _("Filter through: ") : _("Pipe to: ")),
+  if (mutt_get_field ((afilter ? _("Filter through: ") : _("Pipe to: ")),
                       buf, sizeof (buf), M_CMD) != 0 || !buf[0])
     return;
 
   mutt_expand_path (buf, sizeof (buf));
 
-  if (!filter && !option (OPTATTACHSPLIT)) {
+  if (!afilter && !option (OPTATTACHSPLIT)) {
     mutt_endwin (NULL);
     thepid = mutt_create_filter (buf, &state.fpout, NULL, NULL);
-    pipe_attachment_list (buf, fp, tag, top, filter, &state);
+    pipe_attachment_list (buf, fp, tag, top, afilter, &state);
     fclose (state.fpout);
     if (mutt_wait_filter (thepid) != 0 || option (OPTWAITKEY))
       mutt_any_key_to_continue (NULL);
   }
   else
-    pipe_attachment_list (buf, fp, tag, top, filter, &state);
+    pipe_attachment_list (buf, fp, tag, top, afilter, &state);
 }
 
 static int can_print (BODY * top, int tag)
@@ -840,8 +839,7 @@ mutt_attach_display_loop (MUTTMENU * menu, int op, FILE * fp, HEADER * hdr,
       break;
       /* functions which are passed through from the pager */
     case OP_CHECK_TRADITIONAL:
-      if (!(WithCrypto & APPLICATION_PGP)
-          || (hdr && hdr->security & PGP_TRADITIONAL_CHECKED)) {
+      if (hdr && hdr->security & PGP_TRADITIONAL_CHECKED) {
         op = OP_NULL;
         break;
       }
@@ -929,17 +927,16 @@ void mutt_view_attachments (HEADER * hdr)
     return;
 
 
-  if (WithCrypto && ((hdr->security & ENCRYPT) ||
-                     (mutt_is_application_smime (hdr->content) &
-                      SMIMEOPAQUE))) {
+  if ((hdr->security & ENCRYPT) ||
+      (mutt_is_application_smime (hdr->content) & SMIMEOPAQUE))
+  {
     need_secured = 1;
 
     if ((hdr->security & ENCRYPT) && !crypt_valid_passphrase (hdr->security)) {
       mx_close_message (&msg);
       return;
     }
-    if ((WithCrypto & APPLICATION_SMIME)
-        && (hdr->security & APPLICATION_SMIME)) {
+    if (hdr->security & APPLICATION_SMIME) {
       if (hdr->env)
         crypt_smime_getkeys (hdr->env);
 
@@ -963,7 +960,7 @@ void mutt_view_attachments (HEADER * hdr)
       else
         need_secured = 0;
     }
-    if ((WithCrypto & APPLICATION_PGP) && (hdr->security & APPLICATION_PGP)) {
+    if (hdr->security & APPLICATION_PGP) {
       if (mutt_is_multipart_encrypted (hdr->content))
         secured = !crypt_pgp_decrypt_mime (msg->fp, &fp, hdr->content, &cur);
       else
@@ -978,7 +975,7 @@ void mutt_view_attachments (HEADER * hdr)
     }
   }
 
-  if (!WithCrypto || !need_secured) {
+  if (!need_secured) {
     fp = msg->fp;
     cur = hdr->content;
   }
@@ -1037,21 +1034,19 @@ void mutt_view_attachments (HEADER * hdr)
       break;
 
     case OP_EXTRACT_KEYS:
-      if ((WithCrypto & APPLICATION_PGP)) {
-        crypt_pgp_extract_keys_from_attachment_list (fp, menu->tagprefix,
-                                                     menu->
-                                                     tagprefix ? cur :
-                                                     idx[menu->current]->
-                                                     content);
-        menu->redraw = REDRAW_FULL;
-      }
+      crypt_pgp_extract_keys_from_attachment_list (fp, menu->tagprefix,
+                                                   menu->
+                                                   tagprefix ? cur :
+                                                   idx[menu->current]->
+                                                   content);
+      menu->redraw = REDRAW_FULL;
       break;
 
     case OP_CHECK_TRADITIONAL:
-      if ((WithCrypto & APPLICATION_PGP)
-          && crypt_pgp_check_traditional (fp, menu->tagprefix ? cur
+      if (crypt_pgp_check_traditional (fp, menu->tagprefix ? cur
                                           : idx[menu->current]->content,
-                                          menu->tagprefix)) {
+                                          menu->tagprefix))
+      {
         hdr->security = crypt_query (cur);
         menu->redraw = REDRAW_FULL;
       }
@@ -1084,14 +1079,12 @@ void mutt_view_attachments (HEADER * hdr)
     case OP_DELETE:
       CHECK_READONLY;
 
-#ifdef USE_POP
       if (Context->magic == M_POP) {
         mutt_flushinp ();
         mutt_error _("Can't delete attachment from POP server.");
 
         break;
       }
-#endif
 
 #ifdef USE_NNTP
       if (Context->magic == M_NNTP) {
@@ -1102,10 +1095,9 @@ void mutt_view_attachments (HEADER * hdr)
       }
 #endif
 
-      if (WithCrypto && (hdr->security & (~PGP_TRADITIONAL_CHECKED))) {
+      if (hdr->security & (~PGP_TRADITIONAL_CHECKED)) {
         mutt_message
-          _
-          ("Deletion of attachments from encrypted messages is unsupported.");
+          _("Deletion of attachments from encrypted messages is unsupported.");
       }
       else {
         if (!menu->tagprefix) {
@@ -1200,7 +1192,7 @@ void mutt_view_attachments (HEADER * hdr)
       CHECK_ATTACH;
 
       if (!idx[menu->current]->content->hdr->env->followup_to ||
-          str_casecmp (idx[menu->current]->content->hdr->env->followup_to,
+          m_strcasecmp(idx[menu->current]->content->hdr->env->followup_to,
                            "poster")
           || query_quadoption (OPT_FOLLOWUPTOPOSTER,
                                _("Reply by mail as poster prefers?")) !=
@@ -1251,7 +1243,7 @@ void mutt_view_attachments (HEADER * hdr)
       p_delete(&idx);
       idxmax = 0;
 
-      if (WithCrypto && need_secured && secured) {
+      if (need_secured && secured) {
         fclose (fp);
         mutt_free_body (&cur);
       }