[Midnightbsd-cvs] mports [22458] trunk/mail/mutt/files: add missing patchset
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun May 14 15:57:38 EDT 2017
Revision: 22458
http://svnweb.midnightbsd.org/mports/?rev=22458
Author: laffer1
Date: 2017-05-14 15:57:38 -0400 (Sun, 14 May 2017)
Log Message:
-----------
add missing patchset
Added Paths:
-----------
trunk/mail/mutt/files/extra-patch-aspell
trunk/mail/mutt/files/extra-patch-forcebase64
trunk/mail/mutt/files/extra-patch-forcebase64-nntp
trunk/mail/mutt/files/extra-patch-ifdef
trunk/mail/mutt/files/extra-patch-maildir-mtime
trunk/mail/mutt/files/extra-patch-maildir-mtime-nntp
trunk/mail/mutt/files/extra-patch-parent-child-match
trunk/mail/mutt/files/extra-patch-pgp-dw
trunk/mail/mutt/files/extra-patch-reverse_reply
trunk/mail/mutt/files/extra-patch-smartdate
trunk/mail/mutt/files/extra-patch-smime-outlook
trunk/mail/mutt/files/mailcap.5
trunk/mail/mutt/files/patch-Makefile.am
trunk/mail/mutt/files/patch-browser.c
trunk/mail/mutt/files/patch-contrib_Makefile.am
trunk/mail/mutt/files/patch-doc_Makefile.am
trunk/mail/mutt/files/patch-doc_Muttrc
trunk/mail/mutt/files/patch-doc_manual.xml.head
trunk/mail/mutt/files/patch-m4_gssapi.m4
trunk/mail/mutt/files/patch-muttlib.c
trunk/mail/mutt/files/patch-smime-self
trunk/mail/mutt/files/patch-smime-sender
trunk/mail/mutt/files/pkg-message.slang
Added: trunk/mail/mutt/files/extra-patch-aspell
===================================================================
--- trunk/mail/mutt/files/extra-patch-aspell (rev 0)
+++ trunk/mail/mutt/files/extra-patch-aspell 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,11 @@
+--- doc/Muttrc.head.orig Thu Jan 24 13:10:47 2002
++++ doc/Muttrc.head Tue Nov 9 08:53:14 2004
+@@ -19,6 +19,8 @@
+ macro index <f1> "!less @docdir@/manual.txt\n" "Show Mutt documentation"
+ macro pager <f1> "!less @docdir@/manual.txt\n" "Show Mutt documentation"
+
++set ispell="/usr/local/bin/aspell --mode=email check"
++
+ # If Mutt is unable to determine your site's domain name correctly, you can
+ # set the default here.
+ #
Property changes on: trunk/mail/mutt/files/extra-patch-aspell
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-forcebase64
===================================================================
--- trunk/mail/mutt/files/extra-patch-forcebase64 (rev 0)
+++ trunk/mail/mutt/files/extra-patch-forcebase64 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,37 @@
+--- mutt-1.5.24/init.h.orig 2016-03-31 22:09:51.864031000 +0200
++++ mutt-1.5.24/init.h 2016-03-31 22:12:01.242952000 +0200
+@@ -838,6 +838,11 @@
+ ** sent to both the list and your address, resulting in two copies
+ ** of the same email for you.
+ */
++ { "force_base64", DT_BOOL, R_NONE, OPTFORCEBASE64, 0 },
++ /*
++ ** .pp
++ ** If you need to encode all text parts to base64, set this option.
++ */
+ { "force_name", DT_BOOL, R_NONE, OPTFORCENAME, 0 },
+ /*
+ ** .pp
+--- mutt-1.5.24-orig/mutt.h 2015-08-30 19:06:38.000000000 +0200
++++ mutt-1.5.24/mutt.h 2016-02-09 13:48:24.758051324 +0100
+@@ -339,6 +339,7 @@ enum
+ OPTFASTREPLY,
+ OPTFCCCLEAR,
+ OPTFOLLOWUPTO,
++ OPTFORCEBASE64,
+ OPTFORCENAME,
+ OPTFORWDECODE,
+ OPTFORWQUOTE,
+--- mutt-1.5.24-orig/sendlib.c 2015-08-30 19:06:38.000000000 +0200
++++ mutt-1.5.24/sendlib.c 2016-02-09 13:48:24.759051309 +0100
+@@ -1168,7 +1168,9 @@ static void mutt_set_encoding (BODY *b,
+ if (b->type == TYPETEXT)
+ {
+ char *chsname = mutt_get_body_charset (send_charset, sizeof (send_charset), b);
+- if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM)))
++ if (option (OPTFORCEBASE64))
++ b->encoding = ENCBASE64;
++ else if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM)))
+ b->encoding = ENCQUOTEDPRINTABLE;
+ else if (info->hibin)
+ b->encoding = option (OPTALLOW8BIT) ? ENC8BIT : ENCQUOTEDPRINTABLE;
Property changes on: trunk/mail/mutt/files/extra-patch-forcebase64
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-forcebase64-nntp
===================================================================
--- trunk/mail/mutt/files/extra-patch-forcebase64-nntp (rev 0)
+++ trunk/mail/mutt/files/extra-patch-forcebase64-nntp 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,37 @@
+--- mutt/init.h.orig 2016-04-09 11:37:12.650818818 +0200
++++ mutt/init.h 2016-04-09 11:57:47.378726695 +0200
+@@ -873,6 +873,11 @@
+ ** message via mail.
+ */
+ #endif
++ { "force_base64", DT_BOOL, R_NONE, OPTFORCEBASE64, 0 },
++ /*
++ ** .pp
++ ** If you need to encode all text parts to base64, set this option.
++ */
+ { "force_name", DT_BOOL, R_NONE, OPTFORCENAME, 0 },
+ /*
+ ** .pp
+--- mutt-1.5.24-orig/mutt.h 2015-08-30 19:06:38.000000000 +0200
++++ mutt-1.5.24/mutt.h 2016-02-09 13:48:24.758051324 +0100
+@@ -339,6 +339,7 @@ enum
+ OPTFASTREPLY,
+ OPTFCCCLEAR,
+ OPTFOLLOWUPTO,
++ OPTFORCEBASE64,
+ OPTFORCENAME,
+ OPTFORWDECODE,
+ OPTFORWQUOTE,
+--- mutt-1.5.24-orig/sendlib.c 2015-08-30 19:06:38.000000000 +0200
++++ mutt-1.5.24/sendlib.c 2016-02-09 13:48:24.759051309 +0100
+@@ -1168,7 +1168,9 @@ static void mutt_set_encoding (BODY *b,
+ if (b->type == TYPETEXT)
+ {
+ char *chsname = mutt_get_body_charset (send_charset, sizeof (send_charset), b);
+- if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM)))
++ if (option (OPTFORCEBASE64))
++ b->encoding = ENCBASE64;
++ else if ((info->lobin && ascii_strncasecmp (chsname, "iso-2022", 8)) || info->linemax > 990 || (info->from && option (OPTENCODEFROM)))
+ b->encoding = ENCQUOTEDPRINTABLE;
+ else if (info->hibin)
+ b->encoding = option (OPTALLOW8BIT) ? ENC8BIT : ENCQUOTEDPRINTABLE;
Property changes on: trunk/mail/mutt/files/extra-patch-forcebase64-nntp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-ifdef
===================================================================
--- trunk/mail/mutt/files/extra-patch-ifdef (rev 0)
+++ trunk/mail/mutt/files/extra-patch-ifdef 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,79 @@
+--- mutt-1.5.4.orig/init.c 2003-03-04 08:49:48.000000000 +0100
++++ mutt-1.5.4/init.c 2003-07-22 20:14:47.000000000 +0200
+@@ -349,6 +349,52 @@ static void remove_from_list (LIST **l,
+ }
+ }
+
++static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
++{
++ int i, j, res = 0;
++ BUFFER token;
++
++ memset (&token, 0, sizeof (token));
++ mutt_extract_token (tmp, s, 0);
++
++ /* is the item defined as a variable or a function? */
++ if (!(res = (mutt_option_index (tmp->data) != -1)))
++ for (i = 0; !res && i < MENU_MAX; i++)
++ {
++ struct binding_t *b = km_get_table (Menus[i].value);
++
++ if (!b)
++ continue;
++
++ for (j = 0; b[j].name; j++)
++ if (!ascii_strncasecmp (tmp->data, b[j].name, mutt_strlen (tmp->data))
++ && (mutt_strlen (b[j].name) == mutt_strlen (tmp->data)))
++ {
++ res = 1;
++ break;
++ }
++ }
++
++ if (!MoreArgs (s))
++ {
++ snprintf (err->data, err->dsize, _("ifdef: too few arguments"));
++ return (-1);
++ }
++ mutt_extract_token (tmp, s, MUTT_TOKEN_SPACE);
++
++ if (res)
++ {
++ if (mutt_parse_rc_line (tmp->data, &token, err) == -1)
++ {
++ mutt_error ("Erreur: %s", err->data);
++ FREE (&token.data);
++ return (-1);
++ }
++ FREE (&token.data);
++ }
++ return 0;
++}
++
+ static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
+ {
+ do
+diff -pruN mutt-1.5.4.orig/init.h mutt-1.5.4/init.h
+--- mutt-1.5.4.orig/init.h.orig 2009-06-22 15:48:16.000000000 +0200
++++ mutt-1.5.4/init.h 2009-06-22 15:49:28.000000000 +0200
+@@ -3658,6 +3658,7 @@
+ static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
++static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+@@ -3715,6 +3716,7 @@
+ { "hdr_order", parse_list, UL &HeaderOrderList },
+ #ifdef HAVE_ICONV
+ { "iconv-hook", mutt_parse_hook, MUTT_ICONVHOOK },
++ { "ifdef", parse_ifdef, 0 },
+ #endif
+ { "ignore", parse_ignore, 0 },
+ { "lists", parse_lists, 0 },
+diff -pruN mutt-1.5.4.orig/PATCHES mutt-1.5.4/PATCHES
+--- mutt-1.5.4.orig/PATCHES 2003-03-19 22:33:37.000000000 +0100
++++ mutt-1.5.4/PATCHES 2003-07-22 20:14:47.000000000 +0200
+@@ -0,0 +1 @@
++patch-1.5.4.cd.ifdef.1
Property changes on: trunk/mail/mutt/files/extra-patch-ifdef
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-maildir-mtime
===================================================================
--- trunk/mail/mutt/files/extra-patch-maildir-mtime (rev 0)
+++ trunk/mail/mutt/files/extra-patch-maildir-mtime 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,52 @@
+--- PATCHES Dec 2002 17:44:54 -0000 3.6
++++ PATCHES Feb 2004 13:19:42 -0000
+@@ -0,0 +1 @@
++patch-1.5.7.ust.maildir-mtime.2
+--- browser.c.orig Wed Jan 26 13:41:04 2005
++++ browser.c Wed Feb 9 09:20:14 2005
+@@ -27,6 +27,7 @@
+ #ifdef USE_IMAP
+ #include "imap.h"
+ #endif
++#include "mx.h"
+
+ #include <stdlib.h>
+ #include <dirent.h>
+@@ -346,6 +347,21 @@
+ menu->data = state->entry;
+ }
+
++static void check_maildir_times (BUFFY *buf, struct stat *st)
++{
++ char buffer[_POSIX_PATH_MAX + SHORT_STRING];
++ struct stat s;
++
++ if(!buf || buf->magic != MUTT_MAILDIR)
++ return;
++
++ snprintf (buffer, sizeof (buffer), "%s/tmp", buf->path);
++ if (lstat (buffer, &s) != 0)
++ return;
++
++ st->st_mtime = s.st_mtime;
++}
++
+ static int examine_directory (MUTTMENU *menu, struct browser_state *state,
+ char *d, const char *prefix)
+ {
+@@ -409,6 +425,7 @@
+ tmp = Incoming;
+ while (tmp && mutt_strcmp (buffer, tmp->path))
+ tmp = tmp->next;
++ check_maildir_times (tmp, &s);
+ if (tmp && Context &&
+ !mutt_strcmp (tmp->realpath, Context->realpath))
+ {
+@@ -454,6 +471,7 @@
+ strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
+ mutt_pretty_mailbox (buffer, sizeof (buffer));
+
++ check_maildir_times (tmp, &s);
+ add_folder (menu, state, buffer, &s, tmp);
+ }
+ while ((tmp = tmp->next));
Property changes on: trunk/mail/mutt/files/extra-patch-maildir-mtime
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-maildir-mtime-nntp
===================================================================
--- trunk/mail/mutt/files/extra-patch-maildir-mtime-nntp (rev 0)
+++ trunk/mail/mutt/files/extra-patch-maildir-mtime-nntp 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,44 @@
+--- PATCHES Dec 2002 17:44:54 -0000 3.6
++++ PATCHES Feb 2004 13:19:42 -0000
+@@ -0,0 +1 @@
++patch-1.5.7.ust.maildir-mtime.2
+--- browser.c.orig Tue Feb 8 10:29:57 2005
++++ browser.c Tue Feb 8 10:29:58 2005
+@@ -31,4 +31,5 @@
+ #include "nntp.h"
+ #endif
++#include "mx.h"
+
+ #include <stdlib.h>
+@@ -473,4 +474,19 @@
+ }
+
++static void check_maildir_times (BUFFY *buf, struct stat *st)
++{
++ char buffer[_POSIX_PATH_MAX + SHORT_STRING];
++ struct stat s;
++
++ if(!buf || buf->magic != MUTT_MAILDIR)
++ return;
++
++ snprintf (buffer, sizeof (buffer), "%s/tmp", buf->path);
++ if (lstat (buffer, &s) != 0)
++ return;
++
++ st->st_mtime = s.st_mtime;
++}
++
+ /* get list of all files/newsgroups with mask */
+ static int examine_directory (MUTTMENU *menu, struct browser_state *state,
+@@ -562,4 +578,5 @@
+ while (tmp && mutt_strcmp (buffer, tmp->path))
+ tmp = tmp->next;
++ check_maildir_times (tmp, &s);
+ add_folder (menu, state, de->d_name, &s, NULL, (tmp) ? tmp->new : 0);
+ }
+@@ -637,4 +654,5 @@
+ mutt_pretty_mailbox (buffer);
+
++ check_maildir_times (tmp, &s);
+ add_folder (menu, state, buffer, &s, NULL, tmp->new);
+ }
Property changes on: trunk/mail/mutt/files/extra-patch-maildir-mtime-nntp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-parent-child-match
===================================================================
--- trunk/mail/mutt/files/extra-patch-parent-child-match (rev 0)
+++ trunk/mail/mutt/files/extra-patch-parent-child-match 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,171 @@
+--- doc/manual.xml.head.orig 2017-02-24 18:29:36 UTC
++++ doc/manual.xml.head
+@@ -4259,6 +4259,22 @@ variable <quote>all</quote>, which allow
+ their system defaults.
+ </para>
+
++<para>
++<emphasis role="bold">Parent and child match</emphasis>.
++You can tell mutt that the following pattern has to be matched against
++the parent message with < or one of its childs with >.
++This example matches all mails which have at least an unread duplicate
++message:
++</para>
++
++<para>
++
++<screen>
++>(~= ~N)
++</screen>
++
++</para>
++
+ </sect2>
+
+ <sect2 id="set-myvar">
+--- mutt.h.orig 2017-02-24 18:29:36 UTC
++++ mutt.h
+@@ -863,6 +863,8 @@ typedef struct pattern_t
+ unsigned int alladdr : 1;
+ unsigned int stringmatch : 1;
+ unsigned int groupmatch : 1;
++ unsigned int parentmatch : 1;
++ unsigned int childsmatch : 1;
+ unsigned int ign_case : 1; /* ignore case for local stringmatch searches */
+ unsigned int isalias : 1;
+ int min;
+--- pattern.c.orig 2017-02-24 18:29:37 UTC
++++ pattern.c
+@@ -46,6 +46,7 @@ static int eat_regexp (pattern_t *pat, B
+ static int eat_date (pattern_t *pat, BUFFER *, BUFFER *);
+ static int eat_range (pattern_t *pat, BUFFER *, BUFFER *);
+ static int patmatch (const pattern_t *pat, const char *buf);
++static int pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h, pattern_cache_t *cache);
+
+ static const struct pattern_flags
+ {
+@@ -781,6 +782,8 @@ pattern_t *mutt_pattern_comp (/* const *
+ pattern_t *last = NULL;
+ int not = 0;
+ int alladdr = 0;
++ int parentmatch = 0;
++ int childsmatch = 0;
+ int or = 0;
+ int implicit = 1; /* used to detect logical AND operator */
+ int isalias = 0;
+@@ -810,6 +813,24 @@ pattern_t *mutt_pattern_comp (/* const *
+ ps.dptr++;
+ isalias = !isalias;
+ break;
++ case '<':
++ ps.dptr++;
++ if (childsmatch) {
++ snprintf (err->data, err->dsize, _("cannot use both < and > as a pattern modifier"));
++ mutt_pattern_free (&curlist);
++ return NULL;
++ }
++ parentmatch = 1;
++ break;
++ case '>':
++ ps.dptr++;
++ if (parentmatch) {
++ snprintf (err->data, err->dsize, _("cannot use both < and > as a pattern modifier"));
++ mutt_pattern_free (&curlist);
++ return NULL;
++ }
++ childsmatch = 1;
++ break;
+ case '|':
+ if (!or)
+ {
+@@ -835,6 +856,8 @@ pattern_t *mutt_pattern_comp (/* const *
+ implicit = 0;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ isalias = 0;
+ break;
+ case '%':
+@@ -865,9 +888,13 @@ pattern_t *mutt_pattern_comp (/* const *
+ last = tmp;
+ tmp->not ^= not;
+ tmp->alladdr |= alladdr;
++ tmp->parentmatch |= parentmatch;
++ tmp->childsmatch |= childsmatch;
+ tmp->isalias |= isalias;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ isalias = 0;
+ /* compile the sub-expression */
+ buf = mutt_substrdup (ps.dptr + 1, p);
+@@ -896,11 +923,15 @@ pattern_t *mutt_pattern_comp (/* const *
+ tmp = new_pattern ();
+ tmp->not = not;
+ tmp->alladdr = alladdr;
++ tmp->parentmatch = parentmatch;
++ tmp->childsmatch = childsmatch;
+ tmp->isalias = isalias;
+ tmp->stringmatch = (*ps.dptr == '=') ? 1 : 0;
+ tmp->groupmatch = (*ps.dptr == '%') ? 1 : 0;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ isalias = 0;
+
+ if (last)
+@@ -967,9 +998,13 @@ pattern_t *mutt_pattern_comp (/* const *
+ last = tmp;
+ tmp->not ^= not;
+ tmp->alladdr |= alladdr;
++ tmp->parentmatch |= parentmatch;
++ tmp->childsmatch |= childsmatch;
+ tmp->isalias |= isalias;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ isalias = 0;
+ ps.dptr = p + 1; /* restore location */
+ break;
+@@ -1137,6 +1172,37 @@ int
+ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h,
+ pattern_cache_t *cache)
+ {
++ THREAD *t;
++
++ if (pat->parentmatch) {
++ if (h->thread && h->thread->parent && h->thread->parent->message)
++ return pattern_exec (pat, flags, ctx, h->thread->parent->message, cache);
++ else
++ return pat->not;
++ }
++ if (pat->childsmatch) {
++ if (!h->thread)
++ return pat->not;
++ if (!h->thread->child)
++ return pat->not;
++ t = h->thread->child;
++ while (t->prev)
++ t = t->prev;
++ for (; t; t = t->next) {
++ if (!t->message)
++ continue;
++ if (pattern_exec (pat, flags, ctx, t->message, cache))
++ return !pat->not;
++ }
++ return pat->not;
++ }
++ return pattern_exec (pat, flags, ctx, h, cache);
++}
++
++static int
++pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h,
++ pattern_cache_t *cache)
++{
+ int result;
+ int *cache_entry;
+
Property changes on: trunk/mail/mutt/files/extra-patch-parent-child-match
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-pgp-dw
===================================================================
--- trunk/mail/mutt/files/extra-patch-pgp-dw (rev 0)
+++ trunk/mail/mutt/files/extra-patch-pgp-dw 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,1039 @@
+--- PATCHES Dec 2002 17:44:54 -0000 3.6
++++ PATCHES Feb 2004 06:07:13 -0000
+@@ -0,0 +1,4 @@
++patch-1.5.6.dw.multiple-crypt-hook.2
++patch-1.5.6.dw.confirm-crypt-hook.1
++patch-1.5.6.dw.crypt-autoselectkey.1
++patch-1.5.6.dw.pgp-menu-traditional.2
+--- compose.c Oct 2003 20:34:59 -0000 3.14
++++ compose.c Feb 2004 06:07:13 -0000
+@@ -133,2 +133,9 @@ static void redraw_crypt_lines (HEADER *
+ addstr (_("Clear"));
++
++ if ((WithCrypto & APPLICATION_PGP))
++ if ((msg->security & (ENCRYPT | SIGN)))
++ if ((msg->security & INLINE))
++ addstr (_(" (inline)"));
++ else
++ addstr (_(" (PGP/MIME)"));
+ clrtoeol ();
+@@ -158,2 +165,3 @@ static int pgp_send_menu (HEADER *msg, i
+ {
++ int use_autoinline = 0;
+ pgp_key_t p;
+@@ -164,7 +172,10 @@ static int pgp_send_menu (HEADER *msg, i
+
+- switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "),
+- N_("esabf")))
++ if (!(msg->security & (SIGN | ENCRYPT)))
++ use_autoinline = 1;
++
++ switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "),
++ N_("esabif")))
+ {
+ case 1: /* (e)ncrypt */
+- msg->security |= ENCRYPT;
++ msg->security ^= ENCRYPT;
+ break;
+@@ -172,3 +183,3 @@ static int pgp_send_menu (HEADER *msg, i
+ case 2: /* (s)ign */
+- msg->security |= SIGN;
++ msg->security ^= SIGN;
+ break;
+@@ -199,6 +210,16 @@ static int pgp_send_menu (HEADER *msg, i
+ case 4: /* (b)oth */
+- msg->security = ENCRYPT | SIGN;
++ if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN))
++ msg->security = 0;
++ else
++ msg->security |= (ENCRYPT | SIGN);
+ break;
+
+- case 5: /* (f)orget it */
++ case 5: /* (i)nline */
++ if ((msg->security & (ENCRYPT | SIGN)))
++ msg->security ^= INLINE;
++ else
++ msg->security &= ~INLINE;
++ break;
++
++ case 6: /* (f)orget it */
+ msg->security = 0;
+@@ -207,6 +228,16 @@ static int pgp_send_menu (HEADER *msg, i
+
+- if (msg->security && msg->security != APPLICATION_PGP)
+- msg->security |= APPLICATION_PGP;
+- else
+- msg->security = 0;
++ if (msg->security)
++ {
++ if (!(msg->security & (ENCRYPT | SIGN)))
++ {
++ msg->security = 0;
++ }
++ else
++ {
++ msg->security |= APPLICATION_PGP;
++
++ if (use_autoinline && option (OPTPGPAUTOINLINE))
++ msg->security |= INLINE;
++ }
++ }
+
+--- crypt.c Jan 2004 19:59:38 -0000 3.22
++++ crypt.c Feb 2004 06:07:13 -0000
+@@ -161,3 +161,3 @@ int crypt_valid_passphrase(int flags)
+
+-int mutt_protect (HEADER *msg, HEADER *cur, char *keylist)
++int mutt_protect (HEADER *msg, char *keylist)
+ {
+@@ -166,3 +166,2 @@ int mutt_protect (HEADER *msg, HEADER *c
+ BODY *tmp_pgp_pbody = NULL;
+- int traditional = 0;
+ int flags = (WithCrypto & APPLICATION_PGP)? msg->security: 0;
+@@ -176,29 +175,9 @@ int mutt_protect (HEADER *msg, HEADER *c
+
+- if ((WithCrypto & APPLICATION_PGP) && (msg->security & APPLICATION_PGP))
++ if ((WithCrypto & APPLICATION_PGP) && ((msg->security & PGPINLINE) == PGPINLINE))
+ {
+- if ((msg->content->type == TYPETEXT) &&
+- !ascii_strcasecmp (msg->content->subtype, "plain"))
+- {
+- if (cur && cur->security && option (OPTPGPAUTOTRAD)
+- && (option (OPTCRYPTREPLYENCRYPT)
+- || option (OPTCRYPTREPLYSIGN)
+- || option (OPTCRYPTREPLYSIGNENCRYPTED)))
+- {
+- if(mutt_is_application_pgp(cur->content))
+- traditional = 1;
+- }
+- else
+- {
+- if ((i = query_quadoption (OPT_PGPTRADITIONAL, _("Create a traditional (inline) PGP message?"))) == -1)
+- return -1;
+- else if (i == M_YES)
+- traditional = 1;
+- }
+- }
+- if (traditional)
++ /* they really want to send it inline... go for it */
++ if (!isendwin ()) mutt_endwin _("Invoking PGP...");
++ pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist);
++ if (pbody)
+ {
+- if (!isendwin ()) mutt_endwin _("Invoking PGP...");
+- if (!(pbody = crypt_pgp_traditional_encryptsign (msg->content, flags, keylist)))
+- return -1;
+-
+ msg->content = pbody;
+@@ -206,2 +185,8 @@ int mutt_protect (HEADER *msg, HEADER *c
+ }
++
++ /* otherwise inline won't work...ask for revert */
++ if ((i = query_quadoption (OPT_PGPMIMEASK, _("Message can't be sent inline. Revert to using PGP/MIME?"))) != MUTT_YES)
++ return -1;
++
++ /* go ahead with PGP/MIME */
+ }
+@@ -393,2 +378,5 @@ int mutt_is_application_pgp (BODY *m)
+ }
++ if (t)
++ t |= PGPINLINE;
++
+ return t;
+--- hook.c Jan 2004 09:52:55 -0000 3.8
++++ hook.c Feb 2004 06:07:13 -0000
+@@ -119,3 +119,7 @@ int mutt_parse_hook (BUFFER *buf, BUFFER
+ {
++#ifdef MUTT_CRYPTHOOK
++ if (data & (MUTT_FOLDERHOOK | MUTT_SENDHOOK | MUTT_MESSAGEHOOK | MUTT_ACCOUNTHOOK | MUTT_REPLYHOOK | MUTT_CRYPTHOOK))
++#else
+ if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK))
++#endif
+ {
+@@ -445,5 +449,21 @@ char *mutt_iconv_hook (const char *chs)
+
+-char *mutt_crypt_hook (ADDRESS *adr)
++LIST *mutt_crypt_hook (ADDRESS *adr)
+ {
+- return _mutt_string_hook (adr->mailbox, M_CRYPTHOOK);
++ HOOK *hook;
++ LIST *key_list = NULL;
++
++ if (!adr && !adr->mailbox)
++ return (NULL);
++
++ for (hook = Hooks; hook; hook = hook->next)
++ {
++ if (!hook->command)
++ continue;
++ if (!(hook->type & MUTT_CRYPTHOOK))
++ continue;
++
++ if ((regexec (hook->rx.rx, adr->mailbox, 0, NULL, 0) == 0) ^ hook->rx.not)
++ key_list = mutt_add_list (key_list, hook->command);
++ }
++ return (key_list);
+ }
+--- init.h Feb 2004 17:10:43 -0000 3.43
++++ init.h Feb 2004 06:07:14 -0000
+@@ -1205,2 +1205,12 @@ struct option_t MuttVars[] = {
+ */
++
++
++ { "pgp_autoselectkey", DT_SYN, R_NONE, UL "crypt_autoselectkey", 0 },
++ { "crypt_autoselectkey", DT_BOOL, R_NONE, OPTCRYPTAUTOSELECT, 0 },
++ /*
++ ** .pp
++ ** If set, then a list of keys is not presented for selection when only
++ ** one matching key is available. This may be useful in conjunction with
++ ** the \fIcrypt-hook\fP command.
++ */
+ { "pgp_autosign", DT_SYN, R_NONE, UL "crypt_autosign", 0 },
+@@ -1230,2 +1240,11 @@ struct option_t MuttVars[] = {
+ */
++ { "pgp_confirmhook", DT_SYN, R_NONE, UL "crypt_confirmhook", 1 },
++ { "crypt_confirmhook", DT_BOOL, R_NONE, OPTCRYPTCONFIRMHOOK, 1 },
++ /*
++ ** .pp
++ ** If set, then you will be prompted for confirmation of keys when using
++ ** the \fIcrypt-hook\fP command. If unset, no such confirmation prompt will
++ ** be presented. This is generally considered unsafe, especially where
++ ** typos are concerned.
++ */
+ { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1},
+@@ -1374,2 +1393,44 @@ struct option_t MuttVars[] = {
+ */
++ { "pgp_create_traditional", DT_SYN, R_NONE, UL "pgp_autoinline", 0 },
++ { "pgp_autoinline", DT_BOOL, R_NONE, OPTPGPAUTOINLINE, 0 },
++ /*
++ ** .pp
++ ** This option controls whether Mutt generates old-style inline
++ ** (traditional) PGP encrypted or signed messages under certain
++ ** circumstances. This can be overridden by use of the \fIpgp-menu\fP,
++ ** when inline is not required.
++ ** .pp
++ ** Note that Mutt might automatically use PGP/MIME for messages
++ ** which consist of more than a single MIME part. Mutt can be
++ ** configured to ask before sending PGP/MIME messages when inline
++ ** (traditional) would not work.
++ ** See also: ``$$pgp_mime_ask''.
++ ** .pp
++ ** Also note that using the old-style PGP message format is \fBstrongly\fP
++ ** \fBdeprecated\fP.
++ ** (PGP only)
++ */
++ { "pgp_auto_traditional", DT_SYN, R_NONE, UL "pgp_replyinline", 0 },
++ { "pgp_replyinline", DT_BOOL, R_NONE, OPTPGPREPLYINLINE, 0 },
++ /*
++ ** .pp
++ ** Setting this variable will cause Mutt to always attempt to
++ ** create an inline (traditional) message when replying to a
++ ** message which is PGP encrypted/signed inline. This can be
++ ** overridden by use of the \fIpgp-menu\fP, when inline is not
++ ** required. This option does not automatically detect if the
++ ** (replied-to) message is inline; instead it relies on Mutt
++ ** internals for previously checked/flagged messages.
++ ** .pp
++ ** Note that Mutt might automatically use PGP/MIME for messages
++ ** which consist of more than a single MIME part. Mutt can be
++ ** configured to ask before sending PGP/MIME messages when inline
++ ** (traditional) would not work.
++ ** See also: ``$$pgp_mime_ask''.
++ ** .pp
++ ** Also note that using the old-style PGP message format is \fBstrongly\fP
++ ** \fBdeprecated\fP.
++ ** (PGP only)
++ **
++ */
+ { "pgp_show_unusable", DT_BOOL, R_NONE, OPTPGPSHOWUNUSABLE, 1 },
+@@ -1423,11 +1484,8 @@ struct option_t MuttVars[] = {
+ */
+- { "pgp_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO },
++ { "pgp_mime_ask", DT_QUAD, R_NONE, OPT_PGPMIMEASK, MUTT_NO },
+ /*
+ ** .pp
+- ** This option controls whether Mutt generates old-style inline PGP
+- ** encrypted or signed messages.
+- ** .pp
+- ** Note that PGP/MIME will be used automatically for messages which have
+- ** a character set different from us-ascii, or which consist of more than
+- ** a single MIME part.
++ ** This option controls whether Mutt will prompt you for
++ ** automatically sending a (signed/encrypted) message using
++ ** PGP/MIME when inline (traditional) fails (for any reason).
+ ** .pp
+@@ -1435,19 +1493,2 @@ struct option_t MuttVars[] = {
+ ** \fBdeprecated\fP.
+- ** (PGP only)
+- */
+- { "pgp_auto_traditional", DT_BOOL, R_NONE, OPTPGPAUTOTRAD, 0 },
+- /*
+- ** .pp
+- ** This option causes Mutt to generate an old-style inline PGP
+- ** encrypted or signed message when replying to an old-style
+- ** message, and a PGP/MIME message when replying to a PGP/MIME
+- ** message. Note that this option is only meaningful when using
+- ** ``$$crypt_replyencrypt'', ``$$crypt_replysign'', or
+- ** ``$$crypt_replysignencrypted''.
+- ** .pp
+- ** Also note that PGP/MIME will be used automatically for messages
+- ** which have a character set different from us-ascii, or which
+- ** consist of more than a single MIME part.
+- ** .pp
+- ** This option overrides ``$$pgp_create_traditional''
+ ** (PGP only)
+--- mutt.h Feb 2004 17:10:43 -0000 3.23
++++ mutt.h Feb 2004 06:07:14 -0000
+@@ -278,3 +278,2 @@ enum
+ OPT_MOVE,
+- OPT_PGPTRADITIONAL, /* create old-style PGP messages */
+ #ifdef USE_POP
+@@ -284,2 +283,3 @@ enum
+ OPT_POSTPONE,
++ OPT_PGPMIMEASK, /* ask to revert to PGP/MIME when inline fails */
+ OPT_PRINT,
+@@ -431,2 +431,3 @@ enum
+
++ OPTCRYPTAUTOSELECT,
+ OPTCRYPTAUTOSIGN,
+@@ -442,2 +443,3 @@ enum
+ OPTSDEFAULTDECRYPTKEY,
++ OPTCRYPTCONFIRMHOOK,
+ OPTPGPIGNORESUB,
+@@ -445,3 +447,2 @@ enum
+ OPTPGPLONGIDS,
+- OPTPGPAUTOTRAD,
+ #if 0
+@@ -453,2 +454,4 @@ enum
+ OPTPGPSHOWUNUSABLE,
++ OPTPGPAUTOINLINE,
++ OPTPGPREPLYINLINE,
+
+@@ -642,4 +645,4 @@ typedef struct header
+ {
+- unsigned int security : 9; /* bit 0-6: flags, bit 7,8: application.
+- see: crypt.h pgplib.h, smime.h */
++ unsigned int security : 10; /* bit 0-7: flags, bit 8,9: application.
++ see: mutt_crypt.h */
+
+--- mutt_crypt.h Dec 2003 13:04:20 -0000 3.5
++++ mutt_crypt.h Feb 2004 06:07:14 -0000
+@@ -38,6 +38,7 @@
+ #define SIGNOPAQUE (1 << 5)
+-/* (1 << 6) is used by PGPKEY below. */
++#define KEYBLOCK (1 << 6) /* KEY too generic? */
++#define INLINE (1 << 7)
+
+-#define APPLICATION_PGP (1 << 7)
+-#define APPLICATION_SMIME (1 << 8)
++#define APPLICATION_PGP (1 << 8)
++#define APPLICATION_SMIME (1 << 9)
+
+@@ -46,3 +47,4 @@
+ #define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN)
+-#define PGPKEY (APPLICATION_PGP | (1 << 6))
++#define PGPKEY (APPLICATION_PGP | KEYBLOCK)
++#define PGPINLINE (APPLICATION_PGP | INLINE)
+
+@@ -105,3 +107,3 @@ typedef struct pgp_keyinfo *pgp_key_t;
+
+-int mutt_protect (HEADER *, HEADER *, char *);
++int mutt_protect (HEADER *, char *);
+
+--- pgp.c Sep 2003 13:03:26 -0000 3.26
++++ pgp.c Feb 2004 06:07:14 -0000
+@@ -1018,2 +1018,4 @@ char *pgp_findKeys (ADDRESS *to, ADDRESS
+ size_t keylist_used = 0;
++ LIST *hook_list = NULL;
++ LIST *hook = NULL;
+ ADDRESS *tmp = NULL, *addr = NULL;
+@@ -1051,66 +1053,93 @@ char *pgp_findKeys (ADDRESS *to, ADDRESS
+ q = p;
+- k_info = NULL;
+
+- if ((keyID = mutt_crypt_hook (p)) != NULL)
++ /*
++ * grab the list of matching hooks (matching on recipient address)
++ * process each entry singly so that auto key selection still works
++ */
++ hook_list = mutt_crypt_hook (p);
++ hook = hook_list;
++ while (1)
+ {
+ int r;
+- snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
+- if ((r = mutt_yesorno (buf, M_YES)) == M_YES)
++
++ k_info = NULL;
++ key = NULL;
++
++ if (hook)
+ {
+- if (is_numerical_keyid (keyID))
++ keyID = (char *)hook->data;
++ snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox);
++ if (!option(OPTCRYPTCONFIRMHOOK) || (r = mutt_yesorno (buf, MUTT_YES)) == MUTT_YES)
+ {
+- if (strncmp (keyID, "0x", 2) == 0)
+- keyID += 2;
+- goto bypass_selection; /* you don't see this. */
++ if (is_numerical_keyid (keyID))
++ {
++ if (strncmp (keyID, "0x", 2) == 0)
++ keyID += 2;
++ goto bypass_selection; /* you don't see this. */
++ }
++
++ /* check for e-mail address */
++ if ((t = strchr (keyID, '@')) &&
++ (addr = rfc822_parse_adrlist (NULL, keyID)))
++ {
++ if (fqdn) rfc822_qualify (addr, fqdn);
++ q = addr;
++ }
++ else
++ k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING);
+ }
+-
+- /* check for e-mail address */
+- if ((t = strchr (keyID, '@')) &&
+- (addr = rfc822_parse_adrlist (NULL, keyID)))
++ else if (r == -1)
+ {
+- if (fqdn) rfc822_qualify (addr, fqdn);
+- q = addr;
++ /*
++ * yes, this implies that if one key fails they all do
++ */
++ FREE (&keylist);
++ rfc822_free_address (&tmp);
++ rfc822_free_address (&addr);
++ mutt_free_list (&hook_list);
++ return NULL;
+ }
+- else
+- k_info = pgp_getkeybystr (keyID, KEYFLAG_CANENCRYPT, PGP_PUBRING);
+ }
+- else if (r == -1)
+- {
+- FREE (&keylist);
+- rfc822_free_address (&tmp);
+- rfc822_free_address (&addr);
+- return NULL;
+- }
+- }
+
+- if (k_info == NULL)
+- pgp_invoke_getkeys (q);
+-
+- if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
+- {
+- snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox);
++ if (k_info == NULL)
++ pgp_invoke_getkeys (q);
+
+- if ((key = pgp_ask_for_key (buf, q->mailbox,
+- KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
++ if (k_info == NULL && (k_info = pgp_getkeybyaddr (q, KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
+ {
+- FREE (&keylist);
+- rfc822_free_address (&tmp);
+- rfc822_free_address (&addr);
+- return NULL;
++ snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox);
++
++ if ((key = pgp_ask_for_key (buf, q->mailbox,
++ KEYFLAG_CANENCRYPT, PGP_PUBRING)) == NULL)
++ {
++ FREE (&keylist);
++ rfc822_free_address (&tmp);
++ rfc822_free_address (&addr);
++ mutt_free_list (&hook_list);
++ return NULL;
++ }
+ }
+- }
+- else
+- key = k_info;
++ else
++ key = k_info;
+
+- keyID = pgp_keyid (key);
++ keyID = pgp_keyid (key);
+
+ bypass_selection:
+- keylist_size += mutt_strlen (keyID) + 4;
+- safe_realloc (&keylist, keylist_size);
+- sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "", /* __SPRINTF_CHECKED__ */
+- keyID);
+- keylist_used = mutt_strlen (keylist);
++ keylist_size += mutt_strlen (keyID) + 4;
++ safe_realloc (&keylist, keylist_size);
++ sprintf (keylist + keylist_used, "%s0x%s", keylist_used ? " " : "", /* __SPRINTF_CHECKED__ */
++ keyID);
++ keylist_used = mutt_strlen (keylist);
+
+- pgp_free_key (&key);
+- rfc822_free_address (&addr);
++ pgp_free_key (&key);
++ rfc822_free_address (&addr);
++
++ if (!hook_list)
++ break;
++
++ hook = hook->next;
++ if (!hook)
++ break;
++
++ }
++ mutt_free_list (&hook_list);
+
+--- pgpkey.c Oct 2003 19:55:39 -0000 3.8
++++ pgpkey.c Feb 2004 06:07:14 -0000
+@@ -437,4 +437,9 @@ static int pgp_id_matches_addr (ADDRESS
+
++
++#define pgp_trusted_id(uid) (!option(OPTPGPCHECKTRUST) \
++ || (pgp_id_is_valid((uid)) \
++ && pgp_id_is_strong((uid))))
++
+ static pgp_key_t pgp_select_key (pgp_key_t keys,
+- ADDRESS * p, const char *s)
++ ADDRESS * p, const char *s)
+ {
+@@ -452,2 +457,3 @@ static pgp_key_t pgp_select_key (pgp_key
+
++ int keymatch = 0; /* count matching keys */
+ int unusable = 0;
+@@ -481,2 +487,3 @@ static pgp_key_t pgp_select_key (pgp_key
+ }
++ keymatch++;
+ }
+@@ -489,2 +496,17 @@ static pgp_key_t pgp_select_key (pgp_key
+ }
++ else if (keymatch == 1 && option(OPTCRYPTAUTOSELECT))
++ {
++ /*
++ * Only one matching key...see if there's an id with enough trust to auto-select
++ */
++ kp = KeyTable[0]->parent;
++ for (a = kp->address; a; a = a->next)
++ {
++ if (pgp_trusted_id(a))
++ {
++ safe_free ((void **) &KeyTable);
++ return (kp);
++ }
++ }
++ }
+
+@@ -599,5 +621,3 @@ static pgp_key_t pgp_select_key (pgp_key
+
+- if (option (OPTPGPCHECKTRUST) &&
+- (!pgp_id_is_valid (KeyTable[menu->current])
+- || !pgp_id_is_strong (KeyTable[menu->current])))
++ if (!pgp_trusted_id(KeyTable[menu->current]))
+ {
+--- postpone.c Sep 2003 17:22:09 -0000 3.9
++++ postpone.c Feb 2004 06:07:14 -0000
+@@ -486,2 +486,7 @@ int mutt_parse_crypt_hdr (char *p, int s
+
++ case 'i':
++ case 'I':
++ pgp |= INLINE;
++ break;
++
+ default:
+--- protos.h Feb 2004 17:10:43 -0000 3.19
++++ protos.h Feb 2004 06:07:14 -0000
+@@ -131,3 +131,3 @@ const char *mutt_get_name (ADDRESS *);
+ char *mutt_get_parameter (const char *, PARAMETER *);
+-char *mutt_crypt_hook (ADDRESS *);
++LIST *mutt_crypt_hook (ADDRESS *);
+ char *mutt_make_date (char *, size_t);
+--- send.c Jan 2004 10:03:46 -0000 3.29
++++ send.c Feb 2004 06:07:14 -0000
+@@ -1258,2 +1258,9 @@ ci_send_message (int flags, /* send mod
+ msg->security |= SIGN;
++ if ((WithCrypto & APPLICATION_PGP) && (msg->security & (ENCRYPT | SIGN)))
++ {
++ if (option (OPTPGPAUTOINLINE))
++ msg->security |= INLINE;
++ if (option (OPTPGPREPLYINLINE) && cur && (cur->security & INLINE))
++ msg->security |= INLINE;
++ }
+ }
+@@ -1496,3 +1503,3 @@ main_loop:
+ if ((crypt_get_keys (msg, &pgpkeylist) == -1) ||
+- mutt_protect (msg, cur, pgpkeylist) == -1)
++ mutt_protect (msg, pgpkeylist) == -1)
+ {
+@@ -1576,3 +1583,3 @@ main_loop:
+
+- if (mutt_protect (msg, cur, pgpkeylist) == -1)
++ if (mutt_protect (msg, pgpkeylist) == -1)
+ {
+--- sendlib.c Sep 2003 13:03:26 -0000 3.24
++++ sendlib.c Feb 2004 06:07:14 -0000
+@@ -2407,2 +2407,4 @@ int mutt_write_fcc (const char *path, HE
+ }
++ if (hdr->security & INLINE)
++ fputc ('I', msg->fp);
+ fputc ('\n', msg->fp);
+--- doc/manual.sgml.head Feb 2004 17:45:33 -0000 3.26
++++ doc/manual.sgml.head Feb 2004 06:07:15 -0000
+@@ -1450,3 +1450,5 @@ normally use. The crypt-hook command pr
+ specify the ID of the public key to be used when encrypting messages to
+-a certain recipient.
++a certain recipient. You may use multiple pgp-hook's with the same
++pattern; multiple matching pgp-hook's result in the use of multiple
++keyids for recipient.
+
+--- doc/muttrc.man.head Feb 2004 17:10:43 -0000 3.10
++++ doc/muttrc.man.head Feb 2004 06:07:15 -0000
+@@ -297,3 +297,6 @@ to a certain recipient. The meaning of
+ broadly: This can be a different e-mail address, a numerical key ID,
+-or even just an arbitrary search string.
++or even just an arbitrary search string. You may use multiple
++\fBpgp-hook\fPs with the same \fIpattern\fP; multiple matching
++\fBpgp-hook\fPs result in the use of multiple \fIkey-id\fPs for
++recipient.
+ .TP
+--- po/ca.po Feb 2004 18:26:11 -0000 3.13
++++ po/ca.po Feb 2004 06:07:15 -0000
+@@ -603,10 +603,10 @@ msgstr "Xifra amb: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP: (x)ifra, (s)igna, si(g)na com a, (a)mbd\xF3s, o en (c)lar? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP: (x)ifra, (s)igna, s(i)gna com a, (a)mbd\xF3s, en (l)\xEDnia, o en (c)lar? "
+
+ # ivb (2003/03/26)
+-# ivb (x)ifra, (s)igna, si(g)na com a, (a)mbd\xF3s, (c)lar
++# ivb (x)ifra, (s)igna, s(i)gna com a, (a)mbd\xF3s, en (l)\xEDnia, o en (c)lar
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "xsgac"
++msgid "esabif"
++msgstr "xsialc"
+
+--- po/cs.po Feb 2004 18:26:11 -0000 3.12
++++ po/cs.po Feb 2004 06:07:16 -0000
+@@ -683,4 +683,4 @@ msgstr "Za\xB9ifrovat pomoc\xED:"
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP - (\xB9)ifrovat, (p)odepsat, podepsat (j)ako, (o)boj\xED, \xE8i (n)ic?"
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP - (\xB9)ifrovat, (p)odepsat, podepsat (j)ako, (o)boj\xED, p\xF8\xED(m)\xFD, \xE8i (n)ic?"
+
+@@ -688,4 +688,4 @@ msgstr "PGP - (\xB9)ifrovat, (p)odepsat, po
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "\xB9pjon"
++msgid "esabif"
++msgstr "\xB9pjomn"
+
+--- po/da.po Feb 2004 18:26:11 -0000 3.11
++++ po/da.po Feb 2004 06:07:16 -0000
+@@ -578,8 +578,8 @@ msgstr "Krypt\xE9r"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "(k)rypt\xE9r, (u)nderskriv, underskriv (s)om, (b)egge, (i)ngen PGP"
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "(k)rypt\xE9r, (u)nderskriv, underskriv (s)om, (b)egge, i(n)tegreret, (i)ngen PGP"
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "kusbi"
++msgid "esabif"
++msgstr "kusbni"
+
+--- po/de.po Feb 2004 18:26:11 -0000 3.15
++++ po/de.po Feb 2004 06:07:16 -0000
+@@ -569,8 +569,8 @@ msgstr "Verschl\xFCsseln mit: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (v)erschl., (s)ign., sign. (a)ls, (b)eides, (k)ein PGP? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (v)erschl., (s)ign., sign. (a)ls, (b)eides, (i)nline, (k)ein PGP? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "vsabk"
++msgid "esabif"
++msgstr "vsabik"
+
+--- po/el.po Feb 2004 18:26:11 -0000 3.12
++++ po/el.po Feb 2004 06:07:17 -0000
+@@ -700,4 +700,4 @@ msgstr "\xCA\xF1\xF5\xF0\xF4\xEF\xE3\xF1\xDC\xF6\xE7\xF3\xE7 \xEC\xE5: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, \xDE (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)\xEA\xE5\xDF\xEC\xE5\xED\xEF, \xDE (f)orget it? "
+
+@@ -706,4 +706,4 @@ msgstr "PGP (e)ncrypt, (s)ign, sign (a)s
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "esabf"
++msgid "esabif"
++msgstr "esabif"
+
+--- po/eo.po Feb 2004 18:26:11 -0000 3.13
++++ po/eo.po Feb 2004 06:07:17 -0000
+@@ -571,8 +571,8 @@ msgstr "\xC6ifri per: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP \xE6(i)fri, (s)ubskribi, subskribi (k)iel, (a)mba\xFD, a\xFD (f)orgesi? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP \xE6(i)fri, (s)ubskribi, subskribi (k)iel, (a)mba\xFD, \"i(n)line\", a\xFD (f)orgesi? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "iskaf"
++msgid "esabif"
++msgstr "iskanf"
+
+--- po/es.po Feb 2004 18:26:11 -0000 3.14
++++ po/es.po Feb 2004 06:07:17 -0000
+@@ -576,4 +576,4 @@ msgstr "Cifrar"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "\xBFco(d)ificar, f(i)rmar (c)omo, amb(o)s o ca(n)celar? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "\xBFco(d)ificar, f(i)rmar (c)omo, amb(o)s, inc(l)uido, o ca(n)celar? "
+
+@@ -581,4 +581,4 @@ msgstr "\xBFco(d)ificar, f(i)rmar (c)omo, a
+ #, fuzzy
+-msgid "esabf"
+-msgstr "dicon"
++msgid "esabif"
++msgstr "dicoln"
+
+--- po/et.po Feb 2004 18:26:11 -0000 3.13
++++ po/et.po Feb 2004 06:07:18 -0000
+@@ -571,8 +571,8 @@ msgstr "Kr\xFCpti kasutades: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (k)r\xFCpti, (a)llkiri, allk. ku(i), (m)\xF5lemad v\xF5i (u)nusta? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (k)r\xFCpti, (a)llkiri, allk. ku(i), (m)\xF5lemad, k(e)hasse, v\xF5i (u)nusta? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "kaimu"
++msgid "esabif"
++msgstr "kaimeu"
+
+--- po/fr.po Feb 2004 18:26:11 -0000 3.23
++++ po/fr.po Feb 2004 06:07:18 -0000
+@@ -596,8 +596,8 @@ msgstr "Chiffrer avec : "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, ou (o)ublier ? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "(c)hiffrer PGP, (s)igner, (e)n tant que, les (d)eux, en (l)igne, ou (o)ublier ? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "csedo"
++msgid "esabif"
++msgstr "csedlo"
+
+--- po/gl.po Feb 2004 18:26:11 -0000 3.11
++++ po/gl.po Feb 2004 06:07:18 -0000
+@@ -580,8 +580,8 @@ msgstr "Encriptar"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "\xBF(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas ou (o)lvidar? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "\xBF(e)ncriptar, (f)irmar, firmar (c)omo, (a)mbas, (i)nterior, ou (o)lvidar? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "efcao"
++msgid "esabif"
++msgstr "efcaio"
+
+--- po/hu.po Feb 2004 18:26:11 -0000 3.12
++++ po/hu.po Feb 2004 06:07:19 -0000
+@@ -571,8 +571,8 @@ msgstr "Titkos\xEDt\xE1s: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (t)itkos\xEDt, (a)l\xE1\xEDr, al\xE1\xEDr (m)int, titkos\xEDt \xE9(s) al\xE1\xEDr, m\xE9(g)se? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (t)itkos\xEDt, (a)l\xE1\xEDr, al\xE1\xEDr (m)int, titkos\xEDt \xE9(s) al\xE1\xEDr, (b)e\xE1gyazott, m\xE9(g)se? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "tamsg"
++msgid "esabif"
++msgstr "tamsbg"
+
+--- po/id.po Feb 2004 18:26:12 -0000 3.14
++++ po/id.po Feb 2004 06:07:19 -0000
+@@ -572,8 +572,8 @@ msgstr "Enkrip dengan: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (e)nkrip, (t)andatangan, tandatangan (s)bg, ke(d)uanya, (b)atal? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (e)nkrip, (t)andatangan, tandatangan (s)bg, ke(d)uanya, (i)nline, (b)atal? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "etsdb"
++msgid "esabif"
++msgstr "etsdib"
+
+--- po/it.po Feb 2004 18:26:12 -0000 3.11
++++ po/it.po Feb 2004 06:07:19 -0000
+@@ -582,8 +582,8 @@ msgstr "Crittografa"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "cifra(e), firma(s), firma come(a), entrambi(b), annulla(f) "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "cifra(e), firma(s), firma come(a), entrambi(b), in l(i)nea , annulla(f) "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "esabf"
++msgid "esabif"
++msgstr "esabif"
+
+--- po/ja.po Feb 2004 18:26:12 -0000 3.21
++++ po/ja.po Feb 2004 06:07:20 -0000
+@@ -569,8 +569,8 @@ msgstr " \xB0Ź沽\xCA\xFD\xBC\xB0: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (e)\xB0Ź沽,(s)\xBD\xF0̾,(a)..\xA4Ȥ\xB7\xA4ƽ\xF0̾,(b)ξ\xBC\xD4,(f)\xB2\xF2\xBD\xFC?"
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (e)\xB0Ź沽,(s)\xBD\xF0̾,(a)..\xA4Ȥ\xB7\xA4ƽ\xF0̾,(b)ξ\xBC\xD4,(i)nline,(f)\xB2\xF2\xBD\xFC?"
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "esabf"
++msgid "esabif"
++msgstr "esabif"
+
+--- po/ko.po Feb 2004 18:26:12 -0000 3.15
++++ po/ko.po Feb 2004 06:07:20 -0000
+@@ -570,8 +570,8 @@ msgstr "\xBE\xCFȣȭ \xB9\xE6\xBD\xC4: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP \xBE\xCFȣȭ(e), \xBC\xAD\xB8\xED(s), \xBB\xE7\xBF\xEB \xBC\xAD\xB8\xED(a), \xB5\xD1 \xB4\xD9(b), \xC3\xEB\xBC\xD2(f)? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP \xBE\xCFȣȭ(e), \xBC\xAD\xB8\xED(s), \xBB\xE7\xBF\xEB \xBC\xAD\xB8\xED(a), \xB5\xD1 \xB4\xD9(b), (i)nline, \xC3\xEB\xBC\xD2(f)? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "esabf"
++msgid "esabif"
++msgstr "esabif"
+
+--- po/lt.po Feb 2004 18:26:12 -0000 3.11
++++ po/lt.po Feb 2004 06:07:20 -0000
+@@ -578,5 +578,5 @@ msgstr "U\xFE\xF0ifruoti"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr ""
+-"(u)\xFE\xF0ifruot, pa(s)ira\xF0yt, pasira\xF0yt k(a)ip, a(b)u, rinktis (m)ic algoritm\xE0, "
++"(u)\xFE\xF0ifruot, pa(s)ira\xF0yt, pasira\xF0yt k(a)ip, a(b)u, (l)ai\xF0ke, "
+ "ar (p)amir\xF0ti?"
+@@ -585,4 +585,4 @@ msgstr ""
+ #, fuzzy
+-msgid "esabf"
+-msgstr "usabmp"
++msgid "esabif"
++msgstr "usablp"
+
+@@ -598,4 +598,3 @@ msgid ""
+ msgstr ""
+-"(u)\xFE\xF0ifruot, pa(s)ira\xF0yt, pasira\xF0yt k(a)ip, a(b)u, rinktis (m)ic algoritm\xE0, "
+-"ar (p)amir\xF0ti?"
++"(u)\xFE\xF0ifruot, pa(s)ira\xF0yt, u\xFE\xF0ifruo(t) su, pasira\xF0yt k(a)ip, a(b)u, ar (p)amir\xF0ti?"
+
+@@ -604,3 +603,3 @@ msgstr ""
+ msgid "eswabf"
+-msgstr "usabmp"
++msgstr "ustabp"
+
+--- po/nl.po Feb 2004 18:26:12 -0000 3.16
++++ po/nl.po Feb 2004 06:07:21 -0000
+@@ -568,8 +568,8 @@ msgstr "Versleutelen met: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (v)ersleutel, (o)ndertekenen, ondert. (a)ls, (b)eiden, (g)een? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (v)ersleutel, (o)ndertekenen, ondert. (a)ls, (b)eiden, ber(i)cht, (g)een? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "voabg"
++msgid "esabif"
++msgstr "voabig"
+
+--- po/pl.po Feb 2004 18:26:12 -0000 3.17
++++ po/pl.po Feb 2004 06:07:21 -0000
+@@ -571,8 +571,8 @@ msgstr "Zaszyfruj u\xBFywaj\xB1c: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP: (z)aszyfruj, podpi(s)z, podpisz j(a)ko, o(b)a, b(e)z PGP? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP: (z)aszyfruj, podpi(s)z, podpisz j(a)ko, o(b)a, (i)nline, b(e)z PGP? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "zsabe"
++msgid "esabif"
++msgstr "zsabie"
+
+--- po/pt_BR.po Feb 2004 18:26:13 -0000 3.12
++++ po/pt_BR.po Feb 2004 06:07:21 -0000
+@@ -581,5 +581,5 @@ msgstr "Encriptar"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr ""
+-"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
++"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, em l(i)nha, ou es(q)uece? "
+
+@@ -587,4 +587,4 @@ msgstr ""
+ #, fuzzy
+-msgid "esabf"
+-msgstr "escamq"
++msgid "esabif"
++msgstr "escaiq"
+
+@@ -600,3 +600,3 @@ msgid ""
+ msgstr ""
+-"(e)ncripa, a(s)sina, assina (c)omo, (a)mbos, escolhe (m)ic, ou es(q)uece? "
++"(e)ncripa, a(s)sina, e(n)cripa com, assina (c)omo, (a)mbos, ou es(q)uece? "
+
+@@ -605,3 +605,3 @@ msgstr ""
+ msgid "eswabf"
+-msgstr "escamq"
++msgstr "esncaq"
+
+--- po/ru.po Feb 2004 18:26:13 -0000 3.19
++++ po/ru.po Feb 2004 06:07:22 -0000
+@@ -577,8 +577,8 @@ msgstr "\xFA\xC1\xDB\xC9\xC6\xD2\xCF\xD7\xC1\xD4\xD8: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP (e)\xDB\xC9\xC6\xD2, (s)\xD0\xCF\xC4\xD0\xC9\xD3\xD8, (a)\xD0\xCF\xC4\xD0\xC9\xD3\xD8 \xCB\xC1\xCB, (b)\xCF\xC2\xC1, (f)\xCF\xD4\xCB\xC1\xDA\xC1\xD4\xD8\xD3\xD1? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP (e)\xDB\xC9\xC6\xD2, (s)\xD0\xCF\xC4\xD0\xC9\xD3\xD8, (a)\xD0\xCF\xC4\xD0\xC9\xD3\xD8 \xCB\xC1\xCB, (b)\xCF\xC2\xC1, (i)nline, (f)\xCF\xD4\xCB\xC1\xDA\xC1\xD4\xD8\xD3\xD1? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "esabf"
++msgid "esabif"
++msgstr "esabif"
+
+--- po/sk.po Feb 2004 18:26:13 -0000 3.11
++++ po/sk.po Feb 2004 06:07:22 -0000
+@@ -586,5 +586,5 @@ msgstr "Za\xB9ifruj"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr ""
+-"(e)-\xB9ifr, (s)-podp, podp (a)ko, o(b)e, ozna\xE8 alg. mi(c), alebo (f)-zabudn\xFA\xBB "
++"(e)-\xB9ifr, (s)-podp, podp (a)ko, o(b)e, (i)nline, alebo (f)-zabudn\xFA\xBB "
+ "na to? "
+@@ -593,4 +593,4 @@ msgstr ""
+ #, fuzzy
+-msgid "esabf"
+-msgstr "esabmf"
++msgid "esabif"
++msgstr "esabif"
+
+@@ -606,4 +606,3 @@ msgid ""
+ msgstr ""
+-"(e)-\xB9ifr, (s)-podp, podp (a)ko, o(b)e, ozna\xE8 alg. mi(c), alebo (f)-zabudn\xFA\xBB "
+-"na to? "
++"(e)-\xB9ifr, (s)-podp, (w)-\xB9ifr s, podp (a)ko, o(b)e, alebo (f)-zabudn\xFA\xBB na to? "
+
+@@ -612,3 +611,3 @@ msgstr ""
+ msgid "eswabf"
+-msgstr "esabmf"
++msgstr "eswabf"
+
+--- po/sv.po Feb 2004 18:26:13 -0000 3.12
++++ po/sv.po Feb 2004 06:07:22 -0000
+@@ -568,8 +568,8 @@ msgstr "Kryptera med: "
+ #: compose.c:165
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "PGP: (k)ryptera, (s)ignera, signera s(o)m, (b)\xE5da, eller sk(i)ppa det?"
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "PGP: (k)ryptera, (s)ignera, signera s(o)m, (b)\xE5da, i(n)fogat, eller sk(i)ppa det?"
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "ksobi"
++msgid "esabif"
++msgstr "ksobni"
+
+--- po/tr.po Feb 2004 18:26:13 -0000 3.11
++++ po/tr.po Feb 2004 06:07:22 -0000
+@@ -577,5 +577,5 @@ msgstr "\xDEifrele"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr ""
+-"\xFE(i)frele, i(m)zala, (f)arkl\xFD imzala, i(k)isi de, mi(c) algoritmini se\xE7 "
++"\xFE(i)frele, i(m)zala, (f)arkl\xFD imzala, i(k)isi de, (i)nline, "
+ "yoksa i(p)talm\xFD? "
+@@ -583,4 +583,4 @@ msgstr ""
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "imfkcp"
++msgid "esabif"
++msgstr "imfkip"
+
+--- po/uk.po Feb 2004 18:26:13 -0000 3.12
++++ po/uk.po Feb 2004 06:07:23 -0000
+@@ -572,8 +572,8 @@ msgstr "\xFB\xC9\xC6\xD2\xD5\xD7\xC1\xCE\xCE\xD1"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
+-msgstr "\xDB\xC9\xC6\xD2.(e), Ц\xC4\xD0.(s), Ц\xC4\xD0. \xD1\xCB(a), \xD5\xD3\xC5(b) \xDE\xC9 צ\xC4ͦ\xCE\xC1(f)? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
++msgstr "\xDB\xC9\xC6\xD2.(e), Ц\xC4\xD0.(s), Ц\xC4\xD0. \xD1\xCB(a), \xD5\xD3\xC5(b), (i)nline \xDE\xC9 צ\xC4ͦ\xCE\xC1(f)? "
+
+ #: compose.c:166
+-msgid "esabf"
+-msgstr ""
++msgid "esabif"
++msgstr "esabif"
+
+--- po/zh_CN.po Feb 2004 18:26:13 -0000 3.11
++++ po/zh_CN.po Feb 2004 06:07:23 -0000
+@@ -585,5 +585,5 @@ msgstr "\xBC\xD3\xC3\xDC"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr ""
+-"(e)\xBC\xD3\xC3\xDC, (s)ǩ\xC3\xFB, (a)\xD3ñ\xF0\xB5\xC4\xC9\xED\xB7\xDDǩ, (b)\xC1\xBD\xD5߽\xD4Ҫ, ѡ\xD4\xF1 (m)ic \xD1\xDD\xCB㷨 \xBB\xF2 (f)\xB7\xC5"
++"(e)\xBC\xD3\xC3\xDC, (s)ǩ\xC3\xFB, (a)\xD3ñ\xF0\xB5\xC4\xC9\xED\xB7\xDDǩ, (b)\xC1\xBD\xD5߽\xD4Ҫ, (i)nline, \xBB\xF2 (f)\xB7\xC5"
+ "\xC6\xFA\xA3\xBF"
+@@ -591,4 +591,4 @@ msgstr ""
+ #: compose.c:166
+-msgid "esabf"
+-msgstr ""
++msgid "esabif"
++msgstr "esabif"
+
+--- po/zh_TW.po Feb 2004 18:26:13 -0000 3.11
++++ po/zh_TW.po Feb 2004 06:07:24 -0000
+@@ -577,3 +577,3 @@ msgstr "加密"
+ #, fuzzy
+-msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? "
++msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "
+ msgstr "(1)加密, (2)簽名, (3)用別的身份簽, (4)兩者皆要, 或 (5)放棄?"
+@@ -581,4 +581,4 @@ msgstr "(1)加密, (2)簽名, (3)用別\xE7
+ #: compose.c:166
+-msgid "esabf"
+-msgstr "12345"
++msgid "esabif"
++msgstr "1234i5"
+
Property changes on: trunk/mail/mutt/files/extra-patch-pgp-dw
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-reverse_reply
===================================================================
--- trunk/mail/mutt/files/extra-patch-reverse_reply (rev 0)
+++ trunk/mail/mutt/files/extra-patch-reverse_reply 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,92 @@
+diff -u PATCHES PATCHES
+--- PATCHES
++++ PATCHES
+@@ -0,0 +1 @@
++patch-1.5.6.cb.reverse_reply.2
+--- init.h.orig 2005-03-01 16:56:02.000000000 +0100
++++ init.h 2005-05-25 18:20:57.000000000 +0200
+@@ -2257,6 +2257,13 @@
+ ** possibly including eventual real names. When it is unset, mutt will
+ ** override any such real names with the setting of the $realname variable.
+ */
++ { "reverse_reply", DT_BOOL, R_NONE, OPTREVREPLY, 0 },
++ /*
++ ** .pp
++ ** When set, this variable uses the name from your aliases in the To and Cc
++ ** headers of reply mails you send, like $reverse_alias does in the index.
++ ** When unset, the headers taken from the original mail are left unchanged.
++ */
+ { "rfc2047_parameters", DT_BOOL, R_NONE, OPTRFC2047PARAMS, 0 },
+ /*
+ ** .pp
+--- mutt.h.orig 2005-02-28 16:13:57.000000000 +0100
++++ mutt.h 2005-05-25 18:20:57.000000000 +0200
+@@ -410,6 +410,7 @@
+ OPTREVALIAS,
+ OPTREVNAME,
+ OPTREVREAL,
++ OPTREVREPLY,
+ OPTRFC2047PARAMS,
+ OPTSAVEADDRESS,
+ OPTSAVEEMPTY,
+--- protos.h.orig Wed Jul 12 01:32:28 2006
++++ protos.h Mon Jul 17 16:14:16 2006
+@@ -92,6 +92,7 @@
+ ADDRESS *mutt_lookup_alias (const char *s);
+ ADDRESS *mutt_remove_duplicates (ADDRESS *);
+ ADDRESS *mutt_remove_xrefs (ADDRESS *, ADDRESS *);
++ADDRESS *mutt_reverse_address (ADDRESS *);
+ ADDRESS *mutt_expand_aliases (ADDRESS *);
+ ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
+
+--- send.c.orig 2005-02-03 19:47:53.000000000 +0100
++++ send.c 2005-05-25 18:20:57.000000000 +0200
+@@ -588,6 +588,10 @@
+ /* the CC field can get cluttered, especially with lists */
+ env->to = mutt_remove_duplicates (env->to);
+ env->cc = mutt_remove_duplicates (env->cc);
++ if (option (OPTREVREPLY)){
++ env->to = mutt_reverse_address (env->to);
++ env->cc = mutt_reverse_address (env->cc);
++ }
+ env->cc = mutt_remove_xrefs (env->to, env->cc);
+ }
+
+--- sendlib.c.orig 2005-02-21 05:45:57.000000000 +0100
++++ sendlib.c 2005-05-25 18:20:57.000000000 +0200
+@@ -2341,6 +2341,35 @@
+ }
+ }
+
++/* given a list of addresses, return a list of reverse_alias'ed addresses */
++ADDRESS *mutt_reverse_address (ADDRESS *addr)
++{
++ ADDRESS *top,*tmp,*alias;
++
++ if (addr == NULL)
++ return NULL;
++
++ if ((alias = alias_reverse_lookup (addr)) && alias->personal) {
++ tmp = rfc822_cpy_adr_real(alias);
++ tmp->next = addr->next;
++ addr->next = NULL;
++ rfc822_free_address(&addr);
++ addr = tmp;
++ }
++
++ for (top = addr; top->next != NULL; top = tmp) {
++ tmp = top->next;
++ if ((alias = alias_reverse_lookup (tmp)) && alias->personal) {
++ top->next = rfc822_cpy_adr_real(alias);
++ top->next->next = tmp->next;
++ tmp->next = NULL;
++ rfc822_free_address(&tmp);
++ tmp = top->next;
++ }
++ }
++ return addr;
++}
++
+ int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post, char *fcc)
+ {
+ CONTEXT f;
Property changes on: trunk/mail/mutt/files/extra-patch-reverse_reply
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-smartdate
===================================================================
--- trunk/mail/mutt/files/extra-patch-smartdate (rev 0)
+++ trunk/mail/mutt/files/extra-patch-smartdate 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,126 @@
+--- hdrline.c.orig 2017-02-24 18:29:36 UTC
++++ hdrline.c
+@@ -248,6 +248,89 @@ static char *apply_subject_mods (ENVELOP
+ * %Y = `x-label:' field (if present, tree unfolded, and != parent's x-label)
+ * %Z = status flags */
+
++static void
++format_smartdate( char *buf, size_t max, struct tm *tm, smartdate_type type )
++{
++ char *strftime_fmt = NULL;
++
++ switch( type ) {
++ case FUTURE: /* Date in the future */
++ strftime_fmt = "%d%h%y!";
++ break;
++ case SMARTTIME: /* Today */
++ strftime_fmt = "%I:%M %p";
++ break;
++ case YESTERDAY: /* Yesterday */
++ strncpy( buf, "Yesterday", max );
++ break;
++ case WEEKDAY: /* Within the last 7 days */
++ strftime_fmt = "%A";
++ break;
++ case STANDARD: /* Within the last six months */
++ strftime_fmt = "%h %d";
++ break;
++ case ANCIENT: /* Older than 6 months */
++ strftime_fmt = "%h %Y";
++ break;
++ }
++
++ if( strftime_fmt != NULL ) {
++ strftime( buf, max, strftime_fmt, tm );
++ }
++}
++
++static void
++smartdate( char *buf, size_t max, struct tm *tm )
++{
++ smartdate_type type = 0;
++
++ struct tm now;
++
++ time_t sse = mktime( tm ); /* Seconds since epoch */
++ time_t sse_now = time(NULL); /* Seconds since epoch until now */
++
++ int dse = 0; /* Days since epoch */
++ int dse_now = 0; /* Days since epoch until today */
++
++ /* Calculate the number of days since epoch */
++ dse = sse / (60*60*24);
++ dse_now = sse_now / (60*60*24);
++
++ /* Default display type */
++ type = STANDARD;
++
++ /* Check if the date is in the future */
++ if( dse > dse_now ) {
++ type = FUTURE;
++ }
++ else {
++ int diff = dse_now - dse;
++ if( diff == 0 ) type = SMARTTIME;
++ else if( diff == 1 ) type = YESTERDAY;
++ else if( diff < 7 ) type = WEEKDAY;
++ else if( diff > 215 ) type = ANCIENT; /* Surely older than six
++ months */
++ else if( diff > 180 ) {
++ /*
++ * Slightly heavy calculation to check if the date is more
++ * than six months in the past. This calculation uses
++ * calendar months and not the exact number of days. So,
++ * January 31, 2003 would be considered more than six months
++ * old whether today's date is August 1 or August 31, 2003
++ */
++ int monthdiff;
++ localtime_r( &sse_now, &now );
++ monthdiff = ( now.tm_mon - tm->tm_mon )
++ + ( ( now.tm_year - tm->tm_year ) * 12 );
++ if( monthdiff > 6 ) {
++ type = ANCIENT;
++ }
++ }
++ }
++
++ format_smartdate( buf, max, tm, type );
++}
++
+ static const char *
+ hdr_format_str (char *dest,
+ size_t destlen,
+@@ -421,7 +504,13 @@ hdr_format_str (char *dest,
+
+ if (!do_locales)
+ setlocale (LC_TIME, "C");
+- strftime (buf2, sizeof (buf2), dest, tm);
++ /* Identify the non-strftime smartdate pattern (%@) */
++ if( strncmp( dest, "%@", 2 ) == 0 ) {
++ smartdate( buf2, sizeof( buf2 ), tm );
++ }
++ else {
++ strftime (buf2, sizeof (buf2), dest, tm);
++ }
+ if (!do_locales)
+ setlocale (LC_TIME, "");
+
+--- mutt.h.orig 2017-02-24 18:29:36 UTC
++++ mutt.h
+@@ -134,6 +134,16 @@ typedef enum
+ MUTT_FORMAT_NOFILTER = (1<<7) /* do not allow filtering on this pass */
+ } format_flag;
+
++/* flags for SmartDate */
++typedef enum {
++ FUTURE = 1,
++ SMARTTIME = 2,
++ YESTERDAY = 3,
++ WEEKDAY = 4,
++ STANDARD = 5,
++ ANCIENT = 6
++} smartdate_type;
++
+ /* types for mutt_add_hook() */
+ #define MUTT_FOLDERHOOK 1
+ #define MUTT_MBOXHOOK (1<<1)
Property changes on: trunk/mail/mutt/files/extra-patch-smartdate
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/extra-patch-smime-outlook
===================================================================
--- trunk/mail/mutt/files/extra-patch-smime-outlook (rev 0)
+++ trunk/mail/mutt/files/extra-patch-smime-outlook 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,11 @@
+--- crypt.c.orig Fri Mar 7 09:23:44 2003
++++ crypt.c Fri Mar 21 00:06:48 2003
+@@ -440,7 +440,7 @@
+ {
+ len++;
+ if (!ascii_strcasecmp ((t+len), "p7m"))
+-#if 0
++#if 1
+ return SMIMEENCRYPT;
+ #else
+ /* Not sure if this is the correct thing to do, but
Property changes on: trunk/mail/mutt/files/extra-patch-smime-outlook
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/mailcap.5
===================================================================
--- trunk/mail/mutt/files/mailcap.5 (rev 0)
+++ trunk/mail/mutt/files/mailcap.5 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,143 @@
+.\"/* Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)
+.\" *
+.\" * Permission to use, copy, modify, and distribute this material
+.\" * for any purpose and without fee is hereby granted, provided
+.\" * that the above copyright notice and this permission notice
+.\" * appear in all copies, and that the name of Bellcore not be
+.\" * used in advertising or publicity pertaining to this
+.\" * material without the specific, prior written permission
+.\" * of an authorized representative of Bellcore. BELLCORE
+.\" * MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
+.\" * OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
+.\" * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
+.\" *
+.\" * Copyright (c) 2016 Udo Schweigert
+.\" */
+.Dd March 16, 2016
+.Dt MAILCAP 5
+.Sh NAME
+.Nm mailcap
+.Nd mail capabilities file
+.Sh DESCRIPTION
+The
+.Nm
+file is read by the
+.Xr mutt 1
+program to determine how to display non-text content.
+.Pp
+The syntax of a
+.Nm
+file is quite simple. Any line that starts with "#" is a comment. Blank lines are ignored. Otherwise, each line defines a single mailcap entry for a single content type. Long lines may be continued by ending them with a backslash character, \\.
+.Pp
+Each individual mailcap entry consists of a content-type specification, a command to execute, and (possibly) a set of optional "flag" values. For example, a very simple mailcap entry would look like this:
+.Bd -literal
+ text/plain; cat %s
+.Ed
+.Pp
+The optional flags can be used to specify additional information about the mail-handling command. For example:
+.Bd -literal
+ text/plain; cat %s; copiousoutput
+.Ed
+.Pp
+can be used to indicate that the output of the
+.Xr cat 1
+command may be voluminous, requiring either a scrolling window, a pager, or some other appropriate coping mechanism.
+.Pp
+The
+.Em type
+field ("text/plain", in the above example) is simply any legal content type name, as defined by RFC 822.
+In practice, this is almost any string.
+It is the string that will be matched against the
+.Em Content-type
+header to decide if this is the mailcap entry that matches the current message.
+Additionally, the type field may specify a subtype (e.g. "text/ISO-8859-1") or a wildcard to match all subtypes (e.g. "image/*").
+.Pp
+The
+.Em command
+field is any UNIX command ("cat %s" in the above example), and is used to specify the interpreter for the given type of message.
+Semicolons and backslashes within the command must be quoted with backslashes.
+If the command contains "%s", those two characters will be replaced by the name of a file that contains the body of the message.
+If it contains "%t', those two characters will be replaced by the content-type field, including the subtype, if any.
+(That is, if the content-type was "image/pbm; opt1=something-else", then "%t" would be replaced by "image/pbm".)
+If the command field contains "%{" followed by a parameter name and a closing "}", then all those characters will be replaced by the value of the named parameter, if any, from the Content-type header.
+Thus, in the previous example, "%{opt1}" will be replaced by "something-else".
+Finally, if the command contains "\%", those two characters will be replaced by a single % character.
+(In fact, the backslash can be used to quote any character, including itself.)
+.Pp
+If no "%s" appears in the command field, then instead of placing the message body in a temporary file, mutt will pass the body to the command on the standard input.
+.Pp
+The
+.Em test=xxx
+field is a command that is executed to determine whether or not the mailcap line actually applies.
+That is, if the content-type field matches the content-type on the message, but a
+.Em test=
+field is present, then the test must succeed before the mailcap line is considered to "match" the message being viewed.
+The command may be any UNIX command, using the same syntax and the same %-escapes as for the viewing command, as described above.
+A command is considered to succeed if it exits with a zero exit status, and to fail otherwise.
+.Pp
+The
+.Em print=xxx
+field is a command that is executed to print the data instead of display it interactively.
+.Pp
+The
+.Em compose
+field may be used to specify a program that can be used to compose a new body or body part in the given format.
+Its intended use is to support mail composing agents that support the composition of multiple types of mail using external composing agents.
+As with the view-command, the compose command will be executed after replacing certain escape sequences starting with "%".
+In particular, %s should be replaced by the name of a file to which the composed data is to be written by the specified composing program, thus allowing the calling program (mutt) to tell the called program where to store the composed data.
+If %s does not appear, then the composed data will be assumed to be written by the composing programs to standard output.
+The result of the composing program may be data that is NOT yet suitable for mail transport -- that is, a Content-Transfer-Encoding may still need to be applied to the data.
+.Pp
+The
+.Em composetyped
+field is similar to the
+.Em compose
+field, but is to be used when the composing program needs to specify the Content-type header field to be applied to the composed data.
+The
+.Em compose
+field is simpler, and is preferred for use with existing (non-mail-oriented) programs for composing data in a given format.
+The
+.Em composetyped
+field is necessary when the Content-type information must include auxilliary parameters, and the composition program must then know enough about mail formats to produce output that includes the mail type information, and to apply any necessary Content-Transfer-Encoding.
+Conceptually,
+.Em compose
+specifies a program that simply outputs the specified type of data in its raw form, while
+.Em composetyped
+specifies a program that outputs the data as a MIME object, with all necessary Content-* headers already in place.
+.Pp
+The
+.Em edit
+field may be used to specify a program that can be used to edit a body or body part in the given format.
+In many cases, it may be identical in content to the
+.Em compose
+field, and shares the operating-system dependent semantics for program execution.
+.Pp
+The
+.Em nametemplate
+field gives a file name format, in which %s will be replaced by a short unique string to give the name of the temporary file to be passed to the viewing command.
+This is only expected to be relevant in environments where filename extensions are meaningful, e.g., one coulld specify that a GIF file being passed to a gif viewer should have a name eding in ".gif" by using "nametemplate=%s.gif".
+.Pp
+.Em needsterminal
+If this flag is given, the named interpreter needs to interact with the user on a terminal.
+In some environments this will require the creation of a new terminal emulation window, while in most environments it will not.
+.Pp
+.Em copiousoutput
+This flag should be given whenever the interpreter is capable of producing more than a few lines of output on stdout, and does no interaction with the user.
+If the mailcap entry specifies copiousoutput then the output of the command being executed will be piped through the pagination program as specified in the .muttrc file by the
+.Ev pager
+variable.
+.Pp
+.Sh SEE ALSO
+.Xr mutt 1 ,
+.Xr muttrc 5
+.Sh AUTHORS
+This
+.Xr mailcap 5
+manpage is based on the manpage provided by
+.Xr metamail 1
+and the corresponding RFC 1524. Both were written by
+Nathaniel S. Borenstein
+at Bell Communications Research, Inc. (Bellcore).
+.Pp
+mutt specific changes have been applied by
+Udo Schweigert.
Property changes on: trunk/mail/mutt/files/mailcap.5
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-Makefile.am
===================================================================
--- trunk/mail/mutt/files/patch-Makefile.am (rev 0)
+++ trunk/mail/mutt/files/patch-Makefile.am 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,30 @@
+--- Makefile.am.orig 2017-02-27 01:12:49 UTC
++++ Makefile.am
+@@ -14,7 +14,7 @@ IMAP_SUBDIR = imap
+ IMAP_INCLUDES = -I$(top_srcdir)/imap
+ endif
+
+-SUBDIRS = m4 po intl $(DOC_SUBDIR) contrib $(IMAP_SUBDIR)
++SUBDIRS = m4 po intl contrib $(IMAP_SUBDIR) . $(DOC_SUBDIR)
+
+ bin_SCRIPTS = muttbug flea $(SMIMEAUX_TARGET)
+
+@@ -161,18 +161,9 @@ install-exec-hook:
+ rm -f $(DESTDIR)$(bindir)/mutt.dotlock ; \
+ ln -sf $(DESTDIR)$(bindir)/mutt_dotlock $(DESTDIR)$(bindir)/mutt.dotlock ; \
+ fi
+- if test -f $(DESTDIR)$(bindir)/mutt_dotlock && test x$(DOTLOCK_GROUP) != x ; then \
+- chgrp $(DOTLOCK_GROUP) $(DESTDIR)$(bindir)/mutt_dotlock && \
+- chmod $(DOTLOCK_PERMISSION) $(DESTDIR)$(bindir)/mutt_dotlock || \
+- { echo "Can't fix mutt_dotlock's permissions! This is required to lock mailboxes in the mail spool directory." >&2 ; exit 1 ; } \
+- fi
+
+ install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(sysconfdir)
+- $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir)/mime.types.dist
+- -if [ ! -f $(DESTDIR)$(sysconfdir)/mime.types ]; then \
+- $(INSTALL) -m 644 $(srcdir)/mime.types $(DESTDIR)$(sysconfdir); \
+- fi
+
+ uninstall-local:
+ for i in mime.types ; do \
Property changes on: trunk/mail/mutt/files/patch-Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-browser.c
===================================================================
--- trunk/mail/mutt/files/patch-browser.c (rev 0)
+++ trunk/mail/mutt/files/patch-browser.c 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,41 @@
+--- browser.c.orig 2016-10-08 19:35:50 UTC
++++ browser.c
+@@ -80,6 +80,12 @@ static int browser_compare_subject (cons
+ struct folder_file *pa = (struct folder_file *) a;
+ struct folder_file *pb = (struct folder_file *) b;
+
++ /* Always keep '..' in first menu position */
++ if (!strncmp(pa->name, "..", 2))
++ return(-1);
++ if (!strncmp(pb->name, "..", 2))
++ return(1);
++
+ int r = mutt_strcoll (pa->name, pb->name);
+
+ return ((BrowserSort & SORT_REVERSE) ? -r : r);
+@@ -90,6 +96,12 @@ static int browser_compare_date (const v
+ struct folder_file *pa = (struct folder_file *) a;
+ struct folder_file *pb = (struct folder_file *) b;
+
++ /* Always keep '..' in first menu position */
++ if (!strncmp(pa->name, "..", 2))
++ return(-1);
++ if (!strncmp(pb->name, "..", 2))
++ return(1);
++
+ int r = pa->mtime - pb->mtime;
+
+ return ((BrowserSort & SORT_REVERSE) ? -r : r);
+@@ -100,6 +112,12 @@ static int browser_compare_size (const v
+ struct folder_file *pa = (struct folder_file *) a;
+ struct folder_file *pb = (struct folder_file *) b;
+
++ /* Always keep '..' in first menu position */
++ if (!strncmp(pa->name, "..", 2))
++ return(-1);
++ if (!strncmp(pb->name, "..", 2))
++ return(1);
++
+ int r = pa->size - pb->size;
+
+ return ((BrowserSort & SORT_REVERSE) ? -r : r);
Property changes on: trunk/mail/mutt/files/patch-browser.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-contrib_Makefile.am
===================================================================
--- trunk/mail/mutt/files/patch-contrib_Makefile.am (rev 0)
+++ trunk/mail/mutt/files/patch-contrib_Makefile.am 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,11 @@
+--- contrib/Makefile.am.orig 2016-10-08 19:30:21 UTC
++++ contrib/Makefile.am
+@@ -2,7 +2,7 @@
+
+ subdir = contrib
+
+-SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp5.rc pgp6.rc Tin.rc \
++SAMPLES = Mush.rc Pine.rc gpg.rc pgp2.rc pgp6.rc Tin.rc \
+ sample.mailcap sample.muttrc sample.muttrc-sidebar sample.muttrc-tlr \
+ sample.vimrc-sidebar colors.default colors.linux smime.rc \
+ ca-bundle.crt smime_keys_test.pl mutt_xtitle
Property changes on: trunk/mail/mutt/files/patch-contrib_Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-doc_Makefile.am
===================================================================
--- trunk/mail/mutt/files/patch-doc_Makefile.am (rev 0)
+++ trunk/mail/mutt/files/patch-doc_Makefile.am 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,29 @@
+--- doc/Makefile.am.orig 2016-10-08 19:30:21 UTC
++++ doc/Makefile.am
+@@ -79,14 +79,7 @@ install-data-local: makedoc-all instdoc
+ -for f in $(HTML_DOCFILES) ; do \
+ $(INSTALL) -m 644 $$f $(DESTDIR)$(docdir) ; \
+ done
+- $(INSTALL) -m 644 Muttrc $(DESTDIR)$(sysconfdir)/Muttrc.dist
+- -if [ -f $(DESTDIR)$(pkgdatadir)/Muttrc ] ; then \
+- mv $(DESTDIR)$(pkgdatadir)/Muttrc* $(DESTDIR)$(sysconfdir) ; \
+- elif [ -f $(DESTDIR)$(pkgdatadir)/../Muttrc ] ; then \
+- mv $(DESTDIR)$(pkgdatadir)/../Muttrc* $(DESTDIR)$(sysconfdir) ; \
+- elif [ ! -f $(DESTDIR)$(sysconfdir)/Muttrc ] ; then \
+- $(INSTALL) -m 644 Muttrc $(DESTDIR)$(sysconfdir) ; \
+- fi
++ $(INSTALL) -m 644 Muttrc $(DESTDIR)$(sysconfdir)/Muttrc.sample
+
+ uninstall-local:
+ for f in mutt.1 mutt_dotlock.1 flea.1 muttbug.1 smime_keys.1 pgpewrap.1 pgpring.1; do \
+@@ -109,9 +102,7 @@ uninstall-local:
+
+ check:
+ manual.txt: manual.html
+- -LC_ALL=C lynx -dump -nolist -with_backspaces -display_charset=us-ascii manual.html > $@ || \
+- LC_ALL=C w3m -dump manual.html > $@ || \
+- LC_ALL=C elinks -dump -no-numbering -no-references manual.html | sed -e 's,\\001, ,g' > $@
++ -LC_ALL=C lynx -dump -nolist -with_backspaces -display_charset=us-ascii manual.html > $@
+
+ Muttrc: stamp-doc-rc
+
Property changes on: trunk/mail/mutt/files/patch-doc_Makefile.am
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-doc_Muttrc
===================================================================
--- trunk/mail/mutt/files/patch-doc_Muttrc (rev 0)
+++ trunk/mail/mutt/files/patch-doc_Muttrc 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,10 @@
+--- doc/Muttrc.orig 2016-10-08 19:48:13 UTC
++++ doc/Muttrc
+@@ -626,6 +626,7 @@ attachments -I message/external-body
+ # will be saved for later references. Also see $record,
+ # $save_name, $force_name and ``fcc-hook''.
+ #
++set followup_to=no
+ #
+ # set crypt_autoencrypt=no
+ #
Property changes on: trunk/mail/mutt/files/patch-doc_Muttrc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-doc_manual.xml.head
===================================================================
--- trunk/mail/mutt/files/patch-doc_manual.xml.head (rev 0)
+++ trunk/mail/mutt/files/patch-doc_manual.xml.head 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,10 @@
+--- doc/manual.xml.head.orig 2016-10-08 19:35:50 UTC
++++ doc/manual.xml.head
+@@ -1,6 +1,6 @@
+ <?xml version="1.0" standalone="no"?>
+ <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
++ "/usr/local/share/xml/docbook/4.2/docbookx.dtd">
+ <book>
+
+ <bookinfo>
Property changes on: trunk/mail/mutt/files/patch-doc_manual.xml.head
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-m4_gssapi.m4
===================================================================
--- trunk/mail/mutt/files/patch-m4_gssapi.m4 (rev 0)
+++ trunk/mail/mutt/files/patch-m4_gssapi.m4 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,10 @@
+--- m4/gssapi.m4.orig 2016-10-08 19:30:21 UTC
++++ m4/gssapi.m4
+@@ -27,6 +27,7 @@ AC_DEFUN([MUTT_AM_PATH_GSSAPI],
+ GSSAPI_LIBS="`$KRB5CFGPATH --libs gssapi`"
+ case "`$KRB5CFGPATH --version`" in
+ "Kerberos 5 "*) GSSAPI_IMPL="MIT";;
++ "FreeBSD heimdal"*) GSSAPI_IMPL="Heimdal";;
+ ?eimdal*) GSSAPI_IMPL="Heimdal";;
+ *) GSSAPI_IMPL="Unknown";;
+ esac
Property changes on: trunk/mail/mutt/files/patch-m4_gssapi.m4
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-muttlib.c
===================================================================
--- trunk/mail/mutt/files/patch-muttlib.c (rev 0)
+++ trunk/mail/mutt/files/patch-muttlib.c 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,25 @@
+--- muttlib.c.orig 2016-10-08 19:35:50 UTC
++++ muttlib.c
+@@ -779,16 +779,15 @@ void mutt_merge_envelopes(ENVELOPE* base
+ void _mutt_mktemp (char *s, size_t slen, const char *prefix, const char *suffix,
+ const char *src, int line)
+ {
+- size_t n = snprintf (s, slen, "%s/%s-%s-%d-%d-%ld%ld%s%s",
+- NONULL (Tempdir), NONULL (prefix), NONULL (Hostname),
+- (int) getuid (), (int) getpid (), random (), random (),
+- suffix ? "." : "", NONULL (suffix));
++ size_t n = snprintf (s, slen, "%s/mutt-%s-XXXXXXXX", NONULL (Tempdir), NONULL (Hostname));
+ if (n >= slen)
+ dprint (1, (debugfile, "%s:%d: ERROR: insufficient buffer space to hold temporary filename! slen=%zu but need %zu\n",
+ src, line, slen, n));
+- dprint (3, (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
+- if (unlink (s) && errno != ENOENT)
+- dprint (1, (debugfile, "%s:%d: ERROR: unlink(\"%s\"): %s (errno %d)\n", src, line, s, strerror (errno), errno));
++ if (mktemp (s)) {
++ dprint (3, (debugfile, "%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s));
++ } else {
++ dprint (1, (debugfile, "%s:%d: ERROR: mktemp(\"%s\"): %s (errno %d)\n", src, line, s, strerror (errno), errno));
++ }
+ }
+
+ void mutt_free_alias (ALIAS **p)
Property changes on: trunk/mail/mutt/files/patch-muttlib.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-smime-self
===================================================================
--- trunk/mail/mutt/files/patch-smime-self (rev 0)
+++ trunk/mail/mutt/files/patch-smime-self 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,63 @@
+--- contrib/smime.rc.orig 2016-10-08 19:30:21 UTC
++++ contrib/smime.rc
+@@ -23,8 +23,12 @@ set crypt_verify_sig = yes
+
+ # The (default) keyfile for signing/decrypting. Uncomment the following
+ # line and replace the keyid with your own.
+-set smime_default_key="12345678.0"
++# set smime_default_key="12345678.0"
+
++# Uncomment the following line in addition to the one above, if you want that
++# all encrypted messages are also encrypted with your default key.
++# set smime_encrypt_self = yes
++
+ # Uncomment to make mutt ask what key to use when trying to decrypt a message.
+ # It will use the default key above (if that was set) else.
+ # unset smime_decrypt_use_default_key
+--- crypt.c.orig 2016-10-08 19:35:50 UTC
++++ crypt.c
+@@ -231,8 +231,18 @@ int mutt_protect (HEADER *msg, char *key
+ if ((WithCrypto & APPLICATION_SMIME)
+ && (msg->security & APPLICATION_SMIME))
+ {
+- if (!(tmp_pbody = crypt_smime_build_smime_entity (tmp_smime_pbody,
+- keylist)))
++ char *new_keylist = keylist;
++
++ if (SmimeDefaultKey && query_quadoption(OPT_SMIMEENCRYPTSELF, _("Encrypt message to S/MIME Default Key also?")) == MUTT_YES)
++ {
++ int size = mutt_strlen(keylist) + mutt_strlen (SmimeDefaultKey) + 2; /* +1 for NULL, +1 for \n */
++ new_keylist = safe_malloc(size);
++ snprintf(new_keylist, size, "%s%s\n", keylist, SmimeDefaultKey);
++ }
++
++ tmp_pbody = crypt_smime_build_smime_entity (tmp_smime_pbody, new_keylist);
++ safe_free((void **)&new_keylist);
++ if (!tmp_pbody)
+ {
+ /* signed ? free it! */
+ return (-1);
+--- init.h.orig 2016-10-08 19:35:50 UTC
++++ init.h
+@@ -2971,6 +2971,11 @@ struct option_t MuttVars[] = {
+ ** possible \fCprintf(3)\fP-like sequences.
+ ** (S/MIME only)
+ */
++ { "smime_encrypt_self", DT_QUAD, R_NONE, OPT_SMIMEENCRYPTSELF, 1 },
++ /*
++ ** .pp
++ ** Encrypt the message to smime_default_key too.
++ */
+ { "smime_encrypt_with", DT_STR, R_NONE, UL &SmimeCryptAlg, UL "aes256" },
+ /*
+ ** .pp
+--- mutt.h.orig 2016-10-08 19:30:21 UTC
++++ mutt.h
+@@ -263,6 +263,7 @@ enum
+ OPT_FORWEDIT,
+ OPT_FCCATTACH,
+ OPT_INCLUDE,
++ OPT_SMIMEENCRYPTSELF,
+ OPT_MFUPTO,
+ OPT_MIMEFWD,
+ OPT_MIMEFWDREST,
Property changes on: trunk/mail/mutt/files/patch-smime-self
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/patch-smime-sender
===================================================================
--- trunk/mail/mutt/files/patch-smime-sender (rev 0)
+++ trunk/mail/mutt/files/patch-smime-sender 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,53 @@
+--- commands.c.orig 2016-10-08 19:30:21 UTC
++++ commands.c
+@@ -185,7 +185,7 @@ int mutt_display_message (HEADER *cur)
+ {
+ if (cur->security & GOODSIGN)
+ {
+- if (!crypt_smime_verify_sender(cur))
++ if (option(OPTSMIMENOSENDER) || !crypt_smime_verify_sender(cur))
+ mutt_message ( _("S/MIME signature successfully verified."));
+ else
+ mutt_error ( _("S/MIME certificate owner does not match sender."));
+--- contrib/smime.rc.orig 2016-10-08 19:30:21 UTC
++++ contrib/smime.rc
+@@ -8,7 +8,10 @@ set smime_is_default
+
+ # Uncomment this if you don't want to set labels for certificates you add.
+ # unset smime_ask_cert_label
+-
++
++# Uncomment this if you don't want to check for sender's email address
++# set smime_dont_check_sender = yes
++
+ # Passphrase expiration
+ set smime_timeout=300
+
+--- init.h.orig 2016-10-08 19:35:50 UTC
++++ init.h
+@@ -2946,6 +2946,15 @@ struct option_t MuttVars[] = {
+ ** alongside the documentation.
+ ** (S/MIME only)
+ */
++ { "smime_dont_check_sender", DT_BOOL, R_NONE, OPTSMIMENOSENDER, 0 },
++ /*
++ ** .pp
++ ** This flag controls wether you want the skip the check for the sender's
++ ** email address against the email address stored in the certificate.
++ ** This can be useful if most of your email senders use SMIMEv3 which no
++ ** longer needs email-addresses as part of the certificates.
++ ** It is not set by default.
++ */
+ { "smime_decrypt_use_default_key", DT_BOOL, R_NONE, OPTSDEFAULTDECRYPTKEY, 1 },
+ /*
+ ** .pp
+--- mutt.h.orig 2016-10-08 19:30:21 UTC
++++ mutt.h
+@@ -486,6 +486,7 @@ enum
+ OPTCRYPTTIMESTAMP,
+ OPTSMIMEISDEFAULT,
+ OPTASKCERTLABEL,
++ OPTSMIMENOSENDER,
+ OPTSDEFAULTDECRYPTKEY,
+ OPTPGPIGNORESUB,
+ OPTPGPCHECKEXIT,
Property changes on: trunk/mail/mutt/files/patch-smime-sender
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/mail/mutt/files/pkg-message.slang
===================================================================
--- trunk/mail/mutt/files/pkg-message.slang (rev 0)
+++ trunk/mail/mutt/files/pkg-message.slang 2017-05-14 19:57:38 UTC (rev 22458)
@@ -0,0 +1,6 @@
+=====================================================
+You have installed mutt with SLANG support.
+This may work for a color terminal only when defining
+COLORTERM=yes and COLORFGBG=\"color1;color2\" in your
+environment.
+=====================================================
Property changes on: trunk/mail/mutt/files/pkg-message.slang
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list