FreeBSD Bugzilla – Attachment 38098 Details for
Bug 60403
maintainer-update of mail/mutt-devel
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 62.77 KB, created by
Udo.Schweigert
on 2003-12-19 17:00:36 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2003-12-19 17:00:36 UTC
Size:
62.77 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt-devel/Makefile ./Makefile >--- /usr/ports/mail/mutt-devel/Makefile Thu Nov 6 21:10:56 2003 >+++ ./Makefile Fri Dec 19 17:21:29 2003 >@@ -41,6 +41,9 @@ > # WITH_MUTT_QUOTE_PATCH > # This is a default knob and can be disabled by WITHOUT_MUTT_QUOTE_PATCH > # >+# If you want to have the IMAP header cache define: >+# WITH_MUTT_IMAP_HEADER_CACHE >+# > # If you want to make SMIME outlook compatible define: > # WITH_MUTT_SMIME_OUTLOOK_COMPAT > # This is a default knob and can be disabled by >@@ -72,6 +75,7 @@ > > PORTNAME= mutt-devel > PORTVERSION= 1.5.5.1 >+PORTREVISION= 1 > CATEGORIES+= mail ipv6 > .if defined(WITH_MUTT_NNTP) > CATEGORIES+= news >@@ -86,7 +90,7 @@ > http://www2.mutt.org.ua/download/mutt-${VVV_PATCH_VERSION}/:vvv \ > ftp://ftp.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ > ftp://ftp2.mutt.org.ua/pub/mutt/mutt-${VVV_PATCH_VERSION}/:vvv \ >- http://cedricduval.free.fr/download/mutt/:cd \ >+ http://cedricduval.free.fr/mutt/patches/download/:cd \ > http://home.woolridge.ca/mutt/patches/:dw > > MAINTAINER?= udo.schweigert@siemens.com >@@ -117,8 +121,8 @@ > > .include <bsd.port.pre.mk> > >-CD_PATCH_VERSION= 1.5.4 >-DW_PATCH_VERSION= 1.5.x >+CD_IFDEF_PATCH_VERSION= 1.5.4 >+DW_PATCH_VERSION= 1.5.5 > DW_MBOX_PATCH_VERSION= 1.5.4 > .if !defined(VVV_PATCH_VERSION) > VVV_PATCH_VERSION= ${PORTVERSION} >@@ -126,11 +130,14 @@ > .if !defined(CD_PATCH_VERSION) > CD_PATCH_VERSION= ${PORTVERSION} > .endif >+.if !defined(CD_IFDEF_PATCH_VERSION) >+CD_IFDEF_PATCH_VERSION= ${CD_PATCH_VERSION} >+.endif > .if !defined(DW_PATCH_VERSION) > DW_PATCH_VERSION= ${PORTVERSION} > .endif > .if !defined(DW_MBOX_PATCH_VERSION) >-DW_MBOX_PATCH_VERSION= ${PORTVERSION} >+DW_MBOX_PATCH_VERSION= ${DW_PATCH_VERSION} > .endif > > # XXX >@@ -187,6 +194,10 @@ > pre-configure:: > @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-smime-outlook > .endif >+.if defined(WITH_MUTT_IMAP_HEADER_CACHE) >+pre-configure:: >+ @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-imap-header-cache >+.endif > > .if ! defined(WITHOUT_MUTT_PGP_PATCH) > SGML_NEEDED= yes >@@ -215,6 +226,7 @@ > .endif > .if defined(WITH_MUTT_NNTP) > PATCHFILES+= patch-${VVV_PATCH_VERSION}.vvv.nntp.gz:vvv >+PATCHFILES+= patch-${VVV_PATCH_VERSION}.vvv.compose.gz:vvv > CONFIGURE_ARGS+= --enable-nntp > SGML_NEEDED= yes > .endif >@@ -233,7 +245,7 @@ > SGML_NEEDED= yes > .endif > .if defined(WITH_MUTT_IFDEF_PATCH) >-PATCHFILES+= patch-${CD_PATCH_VERSION}.cd.ifdef.1:cd >+PATCHFILES+= patch-${CD_IFDEF_PATCH_VERSION}.cd.ifdef.1:cd > SGML_NEEDED= yes > .endif > .if defined(WITH_MUTT_MBOX_HOOK_PATCH) >@@ -262,6 +274,9 @@ > .if ! defined(WITHOUT_MUTT_QUOTE_PATCH) > SCRIPTS_ENV+= MUTT_QUOTE_PATCH="yes" > .endif >+.if defined(WITH_MUTT_IMAP_HEADER_CACHE) >+SCRIPTS_ENV+= MUTT_IMAP_HEADER_CACHE="yes" >+.endif > .if defined(WITH_MUTT_EDIT_THREADS) > SCRIPTS_ENV+= MUTT_EDIT_THREADS="yes" > .endif >@@ -336,6 +351,14 @@ > @${ECHO} "This may work for a color terminal only when defining" >> ${PKGMESSAGE} > @${ECHO} "COLORTERM=yes and COLORFGBG=color,color in your" >> ${PKGMESSAGE} > @${ECHO} "environment." >> ${PKGMESSAGE} >+ @${ECHO} "====================================================" >> ${PKGMESSAGE} >+.endif >+.if defined(WITH_MUTT_IMAP_HEADER_CACHE) >+ @${ECHO} "====================================================" >> ${PKGMESSAGE} >+ @${ECHO} "You have installed ${PORTNAME} with the IMAP header cache enabled." >> ${PKGMESSAGE} >+ @${ECHO} "Please be aware that this - at the moment - could result in" >> ${PKGMESSAGE} >+ @${ECHO} "incorrect display of message flags if there is another client" >> ${PKGMESSAGE} >+ @${ECHO} "simultaneously using the same mailbox." >> ${PKGMESSAGE} > @${ECHO} "====================================================" >> ${PKGMESSAGE} > .endif > .if !defined(BATCH) >diff -ru /usr/ports/mail/mutt-devel/distinfo ./distinfo >--- /usr/ports/mail/mutt-devel/distinfo Thu Nov 6 21:10:56 2003 >+++ ./distinfo Fri Dec 19 17:21:29 2003 >@@ -1,9 +1,10 @@ > MD5 (mutt/mutt-1.5.5.1i.tar.gz) = 9729ee2a2024b57e2a903ec7753970a5 > MD5 (mutt/patch-1.5.5.1.rr.compressed.gz) = 12bf7e03af3a0d7529dfbdec5dd0f63a > MD5 (mutt/patch-1.5.5.1.vvv.nntp.gz) = a655b6b5ceb582640172d5476093705d >+MD5 (mutt/patch-1.5.5.1.vvv.compose.gz) = 69e946fe70735d37b9f8e6f6ef6376d1 > MD5 (mutt/patch-1.5.5.1.vvv.initials.gz) = 5abdf15c3f76b5c24f29767e65e0fc32 > MD5 (mutt/patch-1.5.5.1.vvv.quote.gz) = abb2ba5829110cba4be323d6b6f303dc >-MD5 (mutt/patch-1.5.4.cd.edit_threads.9.5) = f8d7fe6ea1a6a1b92c942f4446918433 >-MD5 (mutt/patch-1.5.4.cd.signatures_menu.2.1) = 5b2298335071c46ee1f3ed8c689066b1 >+MD5 (mutt/patch-1.5.5.1.cd.edit_threads.9.5) = a8a3a973d8693f8af526cecf7edbd71f >+MD5 (mutt/patch-1.5.5.1.cd.signatures_menu.2.1) = 22caeffb4a612f5fa6e1f585b40c51a6 > MD5 (mutt/patch-1.5.4.cd.ifdef.1) = a545036cdb55519154d0b35465f52daa > MD5 (mutt/p0-patch-1.5.4.dw.mbox-hook.1) = 326f415380cc377c99d2232f16267ffe >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-imap-header-cache ./files/extra-patch-imap-header-cache >--- /usr/ports/mail/mutt-devel/files/extra-patch-imap-header-cache Thu Jan 1 01:00:00 1970 >+++ ./files/extra-patch-imap-header-cache Tue Dec 2 11:48:19 2003 >@@ -0,0 +1,873 @@ >+diff -ru old/globals.h work/mutt-1.5.5.1/globals.h >+--- old/globals.h Wed Nov 5 10:41:31 2003 >++++ globals.h Fri Nov 28 18:30:37 2003 >+@@ -57,6 +57,7 @@ >+ WHERE char *ImapHomeNamespace INITVAL (NULL); >+ WHERE char *ImapPass INITVAL (NULL); >+ WHERE char *ImapUser INITVAL (NULL); >++WHERE char *ImapHeadercache INITVAL (NULL); >+ #endif >+ WHERE char *Inbox; >+ WHERE char *Ispell; >+diff -ru old/imap/Makefile.am work/mutt-1.5.5.1/imap/Makefile.am >+--- old/imap/Makefile.am Thu Jan 24 14:35:57 2002 >++++ imap/Makefile.am Fri Nov 28 18:30:37 2003 >+@@ -22,4 +22,5 @@ >+ noinst_HEADERS = auth.h imap_private.h message.h >+ >+ libimap_a_SOURCES = auth.c auth_login.c browse.c command.c imap.c imap.h \ >+- message.c utf7.c util.c $(AUTHENTICATORS) $(GSSSOURCES) >++ imap_headercache.c imap_headercache.h message.c utf7.c util.c \ >++ $(AUTHENTICATORS) $(GSSSOURCES) >+diff -ru old/imap/imap.c work/mutt-1.5.5.1/imap/imap.c >+--- old/imap/imap.c Wed Nov 5 10:41:36 2003 >++++ imap/imap.c Fri Nov 28 18:30:37 2003 >+@@ -29,6 +29,7 @@ >+ #include "browser.h" >+ #include "message.h" >+ #include "imap_private.h" >++#include "imap_headercache.h" >+ #ifdef USE_SSL >+ # include "mutt_ssl.h" >+ #endif >+@@ -546,6 +547,13 @@ >+ >+ /* Clean up path and replace the one in the ctx */ >+ imap_fix_path (idata, mx.mbox, buf, sizeof (buf)); >++ >++ if (idata->hcache) >++ { >++ imap_headercache_close(idata->hcache); >++ idata->hcache = NULL; >++ } >++ >+ FREE(&(idata->mailbox)); >+ idata->mailbox = safe_strdup (buf); >+ imap_qualify_path (buf, sizeof (buf), &mx, idata->mailbox); >+@@ -556,6 +564,7 @@ >+ idata->ctx = ctx; >+ >+ /* clear mailbox status */ >++ idata->uidvalidity = 0; >+ idata->status = 0; >+ memset (idata->rights, 0, (RIGHTSMAX+7)/8); >+ idata->newMailCount = 0; >+@@ -601,6 +610,15 @@ >+ if ((pc = imap_get_flags (&(idata->flags), pc)) == NULL) >+ goto fail; >+ } >++ /* save UIDVALIDITY for the header cache */ >++ else if (ascii_strncasecmp("OK [UIDVALIDITY", pc, 14) == 0) >++ { >++ dprint(2, (debugfile, "Getting mailbox UIDVALIDITY\n")); >++ pc += 3; >++ pc = imap_next_word(pc); >++ >++ sscanf(pc, "%u", &(idata->uidvalidity)); >++ } >+ else >+ { >+ pc = imap_next_word (pc); >+@@ -684,6 +702,9 @@ >+ ctx->hdrs = safe_calloc (count, sizeof (HEADER *)); >+ ctx->v2r = safe_calloc (count, sizeof (int)); >+ ctx->msgcount = 0; >++ >++ idata->hcache = imap_headercache_open(idata); >++ >+ if (count && (imap_read_headers (idata, 0, count-1) < 0)) >+ { >+ mutt_error _("Error opening mailbox"); >+@@ -693,6 +714,7 @@ >+ >+ dprint (2, (debugfile, "imap_open_mailbox: msgcount is %d\n", ctx->msgcount)); >+ FREE (&mx.mbox); >++ >+ return 0; >+ >+ fail: >+@@ -914,6 +936,7 @@ >+ int n; >+ int err_continue = M_NO; /* continue on error? */ >+ int rc; >++ IMAP_HEADER h; >+ >+ idata = (IMAP_DATA*) ctx->data; >+ >+@@ -953,8 +976,20 @@ >+ /* mark these messages as unchanged so second pass ignores them. Done >+ * here so BOGUS UW-IMAP 4.7 SILENT FLAGS updates are ignored. */ >+ for (n = 0; n < ctx->msgcount; n++) >+- if (ctx->hdrs[n]->deleted && ctx->hdrs[n]->changed) >+- ctx->hdrs[n]->active = 0; >++ { >++ if (ctx->hdrs[n]->deleted) >++ { >++ if (idata->hcache) >++ { >++ h.data = HEADER_DATA(ctx->hdrs[n]); >++ imap_headercache_delete(idata->hcache, &h); >++ } >++ >++ if (ctx->hdrs[n]->changed) >++ ctx->hdrs[n]->active = 0; >++ } >++ } >++ >+ if (imap_exec (idata, cmd.data, 0) != 0) >+ { >+ mutt_error (_("Expunge failed")); >+@@ -972,6 +1007,23 @@ >+ { >+ ctx->hdrs[n]->changed = 0; >+ >++ if (idata->hcache) >++ { >++ h.data = HEADER_DATA(ctx->hdrs[n]); >++ >++ h.read = ctx->hdrs[n]->read; >++ h.old = ctx->hdrs[n]->old; >++ h.deleted = ctx->hdrs[n]->deleted; >++ h.flagged = ctx->hdrs[n]->flagged; >++ h.replied = ctx->hdrs[n]->replied; >++ h.changed = ctx->hdrs[n]->changed; >++ h.sid = ctx->hdrs[n]->index + 1; >++ h.received = ctx->hdrs[n]->received; >++ h.content_length = ctx->hdrs[n]->content->length; >++ >++ imap_headercache_update(idata->hcache, &h); >++ } >++ >+ mutt_message (_("Saving message status flags... [%d/%d]"), n+1, >+ ctx->msgcount); >+ >+@@ -1099,6 +1151,11 @@ >+ >+ idata->reopen &= IMAP_REOPEN_ALLOW; >+ idata->state = IMAP_AUTHENTICATED; >++ if (idata->hcache) >++ { >++ imap_headercache_close(idata->hcache); >++ idata->hcache = NULL; >++ } >+ FREE (&(idata->mailbox)); >+ mutt_free_list (&idata->flags); >+ idata->ctx = NULL; >+diff -ru old/imap/imap_private.h work/mutt-1.5.5.1/imap/imap_private.h >+--- old/imap/imap_private.h Wed Nov 5 10:41:36 2003 >++++ imap/imap_private.h Fri Nov 28 18:30:37 2003 >+@@ -21,6 +21,7 @@ >+ #define _IMAP_PRIVATE_H 1 >+ >+ #include "imap.h" >++#include "imap_headercache.h" >+ #include "mutt_socket.h" >+ >+ /* -- symbols -- */ >+@@ -148,7 +149,7 @@ >+ int state; >+ } IMAP_COMMAND; >+ >+-typedef struct >++typedef struct IMAP_DATA >+ { >+ /* This data is specific to a CONNECTION to an IMAP server */ >+ CONNECTION *conn; >+@@ -175,6 +176,7 @@ >+ char *mailbox; >+ unsigned short check_status; >+ unsigned char reopen; >++ unsigned int uidvalidity; >+ unsigned char rights[(RIGHTSMAX + 7)/8]; >+ unsigned int newMailCount; >+ IMAP_CACHE cache[IMAP_CACHE_LEN]; >+@@ -182,6 +184,7 @@ >+ >+ /* all folder flags - system flags AND keywords */ >+ LIST *flags; >++ IMAP_HEADERCACHE *hcache; >+ } IMAP_DATA; >+ /* I wish that were called IMAP_CONTEXT :( */ >+ >+diff -ru old/imap/message.c work/mutt-1.5.5.1/imap/message.c >+--- old/imap/message.c Wed Nov 5 10:41:36 2003 >++++ imap/message.c Fri Nov 28 18:30:38 2003 >+@@ -25,6 +25,7 @@ >+ #include "mutt.h" >+ #include "mutt_curses.h" >+ #include "imap_private.h" >++#include "imap_headercache.h" >+ #include "message.h" >+ #include "mx.h" >+ >+@@ -54,9 +55,14 @@ >+ int msgno; >+ IMAP_HEADER h; >+ int rc, mfhrc, oldmsgcount; >++ IMAP_HEADERCACHE *hc = NULL; >++ int msgbegin_hc; >+ int fetchlast = 0; >++ >+ const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES CONTENT-TYPE IN-REPLY-TO REPLY-TO LINES X-LABEL"; >+ >++ msgno = msgbegin; >++ >+ ctx = idata->ctx; >+ >+ if (mutt_bit_isset (idata->capabilities,IMAP4REV1)) >+@@ -87,36 +93,150 @@ >+ } >+ unlink (tempfile); >+ >++ oldmsgcount = ctx->msgcount; >++ >++ msgbegin_hc = msgbegin; >++ >++ hc = idata->hcache; >++ >++restart: >+ /* make sure context has room to hold the mailbox */ >+ while ((msgend) >= idata->ctx->hdrmax) >+ mx_alloc_memory (idata->ctx); >+ >+- oldmsgcount = ctx->msgcount; >+ idata->reopen &= ~IMAP_NEWMAIL_PENDING; >+ idata->newMailCount = 0; >+ >++ if (hc) >++ { >++ snprintf(buf, sizeof(buf), "FETCH %d:%d (UID)", msgbegin_hc + 1, >++ msgend + 1); >++ imap_cmd_start(idata, buf); >++ >++ for (msgno = msgbegin_hc; msgno <= msgend; msgno++) >++ { >++ if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0))) >++ mutt_message (_("Fetching message UIDs... [%d/%d]"), msgno + 1, >++ msgend + 1); >++ >++ /* XXX */ >++ ctx->hdrs[msgno] = NULL; >++ >++ /* XXX leaking h.data on successful exit */ >++ memset (&h, 0, sizeof (h)); >++ h.data = safe_calloc (1, sizeof (IMAP_HEADER_DATA)); >++ >++ do >++ { >++ FILE *cache_fp; >++ >++ mfhrc = 0; >++ >++ rc = imap_cmd_step (idata); >++ if (rc != IMAP_CMD_CONTINUE) >++ break; >++ >++ if ((mfhrc = msg_fetch_header (idata->ctx, &h, idata->cmd.buf, NULL)) == -1) >++ continue; >++ else if (mfhrc < 0) >++ break; >++ >++ cache_fp = imap_headercache_find(hc, &h); >++ if (cache_fp) >++ { >++ /* update context with message header */ >++ ctx->hdrs[msgno] = mutt_new_header (); >++ >++ ctx->hdrs[msgno]->index = h.sid - 1; >++ >++ /* messages which have not been expunged are ACTIVE (borrowed from mh >++ * folders) */ >++ ctx->hdrs[msgno]->active = 1; >++ ctx->hdrs[msgno]->read = h.read; >++ ctx->hdrs[msgno]->old = h.old; >++ ctx->hdrs[msgno]->deleted = h.deleted; >++ ctx->hdrs[msgno]->flagged = h.flagged; >++ ctx->hdrs[msgno]->replied = h.replied; >++ ctx->hdrs[msgno]->changed = h.changed; >++ ctx->hdrs[msgno]->received = h.received; >++ ctx->hdrs[msgno]->data = (void *) (h.data); >++ >++ /* NOTE: if Date: header is missing, mutt_read_rfc822_header depends >++ * on h.received being set */ >++ ctx->hdrs[msgno]->env = mutt_read_rfc822_header (cache_fp, ctx->hdrs[msgno], >++ 0, 0); >++ /* content built as a side-effect of mutt_read_rfc822_header */ >++ ctx->hdrs[msgno]->content->length = h.content_length; >++ >++ imap_headercache_done(hc, cache_fp); >++ } >++ } >++ while (mfhrc == -1); >++ >++ /* in case we get new mail while fetching the headers */ >++ if (idata->reopen & IMAP_NEWMAIL_PENDING) >++ { >++ msgbegin_hc = msgno + 1; >++ msgend = idata->newMailCount - 1; >++ goto restart; >++ } >++ /* XXX freshen... etc */ >++ } >++ } >++ >++ /* Remember where we left if we get new mail while fetching actual headers */ >++ msgbegin_hc = msgno; >++ >++ /* Now, either one of the following is true: >++ * 1. We don't have a headercache (hc == 0) >++ * 2. All messages found in the cache have ctx->hdrs[msgno] != NULL, and >++ * filled up. >++ */ >++ >++ /* >++ * Make one request for everything. This makes fetching headers an >++ * order of magnitude faster if you have a large mailbox. >++ * >++ * If we get more messages while doing this, we make another >++ * request for all the new messages. >++ */ >++ if (!hc) >++ { >++ snprintf (buf, sizeof (buf), >++ "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgbegin + 1, >++ msgend + 1, hdrreq); >++ >++ imap_cmd_start (idata, buf); >++ } >++ >+ for (msgno = msgbegin; msgno <= msgend ; msgno++) >+ { >+ if (ReadInc && (!msgno || ((msgno+1) % ReadInc == 0))) >+ mutt_message (_("Fetching message headers... [%d/%d]"), msgno + 1, >+ msgend + 1); >+ >+- if (msgno + 1 > fetchlast) >++ /* If the message is in the cache, skip it */ >++ if (hc) >+ { >+- /* >+- * Make one request for everything. This makes fetching headers an >+- * order of magnitude faster if you have a large mailbox. >+- * >+- * If we get more messages while doing this, we make another >+- * request for all the new messages. >+- */ >+- snprintf (buf, sizeof (buf), >+- "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1, >+- msgend + 1, hdrreq); >+- >+- imap_cmd_start (idata, buf); >++ if (ctx->hdrs[msgno]) >++ { >++ ctx->msgcount++; >++ continue; >++ } >++ else if (msgno >= fetchlast) >++ { >++ /* Find the longest "run" of messages not in the cache and fetch it in >++ * one go >++ */ >++ for (fetchlast = msgno + 1; >++ fetchlast <= msgend && !ctx->hdrs[fetchlast]; fetchlast++); >++ >++ snprintf (buf, sizeof (buf), >++ "FETCH %d:%d (UID FLAGS INTERNALDATE RFC822.SIZE %s)", msgno + 1, >++ fetchlast, hdrreq); >+ >+- fetchlast = msgend + 1; >++ imap_cmd_start (idata, buf); >++ } >+ } >+ >+ /* freshen fp, h */ >+@@ -130,6 +250,8 @@ >+ */ >+ do >+ { >++ size_t hdrsz; >++ >+ mfhrc = 0; >+ >+ rc = imap_cmd_step (idata); >+@@ -144,12 +266,16 @@ >+ /* make sure we don't get remnants from older larger message headers */ >+ fputs ("\n\n", fp); >+ >++ hdrsz = (size_t)ftell(fp); >++ >+ /* update context with message header */ >+ ctx->hdrs[msgno] = mutt_new_header (); >+ >+ ctx->hdrs[msgno]->index = h.sid - 1; >++#if 0 >+ if (h.sid != ctx->msgcount + 1) >+ dprint (1, (debugfile, "imap_read_headers: msgcount and sequence ID are inconsistent!")); >++#endif >+ /* messages which have not been expunged are ACTIVE (borrowed from mh >+ * folders) */ >+ ctx->hdrs[msgno]->active = 1; >+@@ -163,6 +289,13 @@ >+ ctx->hdrs[msgno]->data = (void *) (h.data); >+ >+ rewind (fp); >++ >++ if (hc) >++ { >++ imap_headercache_add(hc, &h, fp, hdrsz); >++ rewind(fp); >++ } >++ >+ /* NOTE: if Date: header is missing, mutt_read_rfc822_header depends >+ * on h.received being set */ >+ ctx->hdrs[msgno]->env = mutt_read_rfc822_header (fp, ctx->hdrs[msgno], >+@@ -172,8 +305,7 @@ >+ >+ ctx->msgcount++; >+ } >+- while ((rc != IMAP_CMD_OK) && ((mfhrc == -1) || >+- ((msgno + 1) >= fetchlast))); >++ while (mfhrc == -1); >+ >+ if ((mfhrc < -1) || ((rc != IMAP_CMD_CONTINUE) && (rc != IMAP_CMD_OK))) >+ { >+@@ -186,11 +318,9 @@ >+ /* in case we get new mail while fetching the headers */ >+ if (idata->reopen & IMAP_NEWMAIL_PENDING) >+ { >++ msgbegin = msgno + 1; >+ msgend = idata->newMailCount - 1; >+- while ((msgend) >= ctx->hdrmax) >+- mx_alloc_memory (ctx); >+- idata->reopen &= ~IMAP_NEWMAIL_PENDING; >+- idata->newMailCount = 0; >++ goto restart; >+ } >+ } >+ >+@@ -735,6 +865,7 @@ >+ IMAP_DATA* idata; >+ long bytes; >+ int rc = -1; /* default now is that string isn't FETCH response*/ >++ int fetch_rc; >+ >+ idata = (IMAP_DATA*) ctx->data; >+ >+@@ -757,9 +888,15 @@ >+ >+ /* FIXME: current implementation - call msg_parse_fetch - if it returns -2, >+ * read header lines and call it again. Silly. */ >+- if (msg_parse_fetch (h, buf) != -2) >++ fetch_rc = msg_parse_fetch(h, buf); >++ if (fetch_rc == 0) >++ return 0; >++ else if (fetch_rc != -2) >+ return rc; >+- >++ >++ if (!fp) >++ return -2; >++ >+ if (imap_get_literal_count (buf, &bytes) < 0) >+ return rc; >+ imap_read_literal (fp, idata, bytes); >+diff -ru old/init.h work/mutt-1.5.5.1/init.h >+--- old/init.h Wed Nov 5 10:41:32 2003 >++++ init.h Fri Nov 28 18:30:37 2003 >+@@ -856,6 +856,11 @@ >+ ** .pp >+ ** This variable defaults to your user name on the local machine. >+ */ >++ { "imap_headercache", DT_STR, R_NONE, UL &ImapHeadercache, UL 0 }, >++ /* >++ ** .pp >++ ** The location of the IMAP headercache directory. >++ */ >+ #endif >+ { "implicit_autoview", DT_BOOL,R_NONE, OPTIMPLICITAUTOVIEW, 0}, >+ /* >+diff -ruN old/imap/imap_headercache.c work/mutt-1.5.5.1/imap/imap_headercache.c >+--- old/imap/imap_headercache.c Thu Jan 1 01:00:00 1970 >++++ imap/imap_headercache.c Fri Nov 28 18:30:55 2003 >+@@ -0,0 +1,330 @@ >++/* >++ * Copyright (C) 2002 Tudor Bosman <tudorb-mutt@dwyn.net> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++#include "mutt.h" >++#include "imap.h" >++#include "imap_private.h" >++#include "imap_headercache.h" >++#include "mx.h" >++#include <stdio.h> >++#include <sys/types.h> >++#include <sys/stat.h> >++#include <fcntl.h> >++#include <errno.h> >++#include <unistd.h> >++#include <dirent.h> >++#include <assert.h> >++ >++/* Delete all messages from headercache */ >++static int imap_headercache_purge(IMAP_HEADERCACHE *hc) >++{ >++ int rc = -1; >++ DIR *dir; >++ struct dirent *ent; >++ >++ dir = opendir(hc->name); >++ if (!dir) >++ { >++ mutt_error(_("IMAP headercache: can't purge directory %s: %s"), hc->name, >++ strerror(errno)); >++ mutt_sleep(2); >++ return -1; >++ } >++ >++ while ((ent = readdir(dir)) != NULL) >++ { >++ if (!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) >++ continue; >++ >++ sprintf(hc->tmpname, "%s/%s", hc->name, ent->d_name); >++ if (unlink(hc->tmpname) == -1) >++ { >++ mutt_error(_("IMAP headercache: can't unlink file %s: %s"), hc->tmpname, >++ strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ } >++ >++ rc = 0; >++ >++bail: >++ closedir(dir); >++ >++ return rc; >++} >++ >++/* Open headercache */ >++IMAP_HEADERCACHE *imap_headercache_open(IMAP_DATA *idata) >++{ >++ IMAP_HEADERCACHE *hc; >++ char hcdir[_POSIX_PATH_MAX + 1]; >++ FILE *f; >++ size_t len; >++ char *p; >++ >++ if (!ImapHeadercache || ImapHeadercache[0] == '\0') >++ return NULL; >++ >++ strfcpy(hcdir, ImapHeadercache, _POSIX_PATH_MAX); >++ mutt_expand_path(hcdir, _POSIX_PATH_MAX); >++ >++ hc = safe_malloc(sizeof(IMAP_HEADERCACHE)); >++ >++ len = strlen(hcdir) + strlen(idata->conn->account.host) + >++ strlen(idata->mailbox) + 5; >++ >++ hc->name = safe_malloc(len); >++ hc->tmpname = safe_malloc(len + NAME_MAX + 2); >++ >++ sprintf(hc->name, "%s/%s", hcdir, idata->conn->account.host); >++ >++ if (mkdir(hcdir, 0777) == -1 && errno != EEXIST) >++ { >++ mutt_error(_("Can't create IMAP headercache root directory %s: %s"), >++ hcdir, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ if (mkdir(hc->name, 0700) == -1 && errno != EEXIST) >++ { >++ mutt_error(_("Can't create IMAP headercache server directory %s: %s"), >++ hc->name, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ p = idata->mailbox; >++ while ((p = strchr(p, '/')) != NULL) >++ { >++ *p = '\0'; >++ sprintf(hc->name, "%s/%s/%s", hcdir, >++ idata->conn->account.host, idata->mailbox); >++ >++ if (mkdir(hc->name, 0700) == -1 && errno != EEXIST) >++ { >++ mutt_error(_("Can't create IMAP headercache mailbox directory %s: %s"), >++ hc->name, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ *p = '/'; >++ p++; >++ } >++ >++ sprintf(hc->name, "%s/%s/%s", hcdir, >++ idata->conn->account.host, idata->mailbox); >++ >++ if (mkdir(hc->name, 0700) == -1 && errno != EEXIST) >++ { >++ mutt_error(_("Can't create IMAP headercache mailbox directory %s: %s"), >++ hc->name, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ sprintf(hc->tmpname, "%s/uidvalidity", hc->name); >++ f = fopen(hc->tmpname, "r"); >++ >++ if (f) >++ { >++ fscanf(f, "%u", &hc->uidvalidity); >++ if (idata->uidvalidity != hc->uidvalidity) >++ { >++ fclose(f); >++ f = NULL; >++ } >++ } >++ >++ if (!f) >++ { >++ if (imap_headercache_purge(hc) == -1) >++ goto bail; >++ >++ sprintf(hc->tmpname, "%s/uidvalidity", hc->name); >++ f = fopen(hc->tmpname, "w"); >++ if (!f) >++ { >++ mutt_error(_("Can't create IMAP headercache uidvalidity file %s: %s"), >++ hc->tmpname, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ hc->uidvalidity = idata->uidvalidity; >++ >++ fprintf(f, "%u\n", hc->uidvalidity); >++ fclose(f); >++ } >++ >++ return hc; >++ >++bail: >++ safe_free((void **)&hc->tmpname); >++ safe_free((void **)&hc->name); >++ safe_free((void **)&hc); >++ >++ return NULL; >++} >++ >++/* Close headercache */ >++void imap_headercache_close(IMAP_HEADERCACHE *hc) >++{ >++ safe_free((void **)&hc->tmpname); >++ safe_free((void **)&hc->name); >++ safe_free((void **)&hc); >++} >++ >++static void imap_headercache_writehdr(FILE *f, IMAP_HEADER *h) >++{ >++ /* Write the stuff in the header. This must have a fixed length, as it is >++ * overwritten in case of imap_headercache_update >++ */ >++ fprintf(f, "%1x %1x %1x %1x %1x %1x %8x %16lx %16lx %8x\n", >++ h->read, h->old, h->deleted, h->flagged, h->replied, h->changed, >++ h->sid, h->received, h->content_length, HEADER_DATA(h)->uid); >++} >++ >++/* Add message to headercache */ >++int imap_headercache_add(IMAP_HEADERCACHE *hc, IMAP_HEADER *h, FILE *from, >++ size_t hdrsz) >++{ >++ FILE *f; >++#define BUFSIZE 4096 >++ char buf[BUFSIZE]; >++ size_t sz; >++ int rc = -1; >++ >++ sprintf(hc->tmpname, "%s/%u", hc->name, HEADER_DATA(h)->uid); >++ >++ f = fopen(hc->tmpname, "w"); >++ if (!f) >++ { >++ mutt_error(_("Can't create IMAP headercache message file %s: %s"), >++ hc->tmpname, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ imap_headercache_writehdr(f, h); >++ >++ while ((sz = fread(buf, 1, (hdrsz < BUFSIZE ? hdrsz : BUFSIZE), from)) != 0) >++ { >++ hdrsz -= sz; >++ fwrite(buf, 1, sz, f); >++ } >++ >++ fclose(f); >++ >++ rc = 0; >++ >++bail: >++ return rc; >++} >++ >++/* Update flags in headercache message */ >++int imap_headercache_update(IMAP_HEADERCACHE *hc, IMAP_HEADER *h) >++{ >++ FILE *f; >++ int rc = -1; >++ >++ sprintf(hc->tmpname, "%s/%u", hc->name, HEADER_DATA(h)->uid); >++ >++ f = fopen(hc->tmpname, "r+"); >++ if (!f) >++ goto bail; >++ >++ imap_headercache_writehdr(f, h); >++ >++ fclose(f); >++ >++ rc = 0; >++ >++bail: >++ return rc; >++} >++ >++/* Delete message from headercache */ >++int imap_headercache_delete(IMAP_HEADERCACHE *hc, IMAP_HEADER *h) >++{ >++ int rc = -1; >++ >++ sprintf(hc->tmpname, "%s/%u", hc->name, HEADER_DATA(h)->uid); >++ >++ if (unlink(hc->tmpname) == -1) >++ { >++ mutt_error(_("Can't delete IMAP headercache message %s: %s"), >++ hc->tmpname, strerror(errno)); >++ mutt_sleep(2); >++ goto bail; >++ } >++ >++ rc = 0; >++ >++bail: >++ return rc; >++} >++ >++/* Find message in headercache */ >++FILE *imap_headercache_find(IMAP_HEADERCACHE *hc, IMAP_HEADER *h) >++{ >++ FILE *f = NULL; >++ unsigned int flag_read, flag_old, flag_deleted, flag_flagged, flag_replied; >++ unsigned int flag_changed; >++ unsigned int uid; >++ unsigned long received; >++ unsigned long content_length; >++ >++ sprintf(hc->tmpname, "%s/%u", hc->name, HEADER_DATA(h)->uid); >++ >++ f = fopen(hc->tmpname, "r"); >++ if (!f) >++ goto bail; >++ >++ fscanf(f, "%x %x %x %x %x %x %x %lx %lx %x\n", >++ &flag_read, &flag_old, &flag_deleted, &flag_flagged, &flag_replied, >++ &flag_changed, &h->sid, &received, &content_length, &uid); >++ >++ if (uid != HEADER_DATA(h)->uid) >++ { >++ fclose(f); >++ f = NULL; >++ goto bail; >++ } >++ >++ h->received = received; >++ h->read = flag_read; >++ h->old = flag_old; >++ h->deleted = flag_deleted; >++ h->flagged = flag_flagged; >++ h->replied = flag_replied; >++ h->changed = flag_changed; >++ h->content_length = (long)content_length; >++ >++bail: >++ return f; >++} >++ >++/* Close file returned by imap_headercache_find */ >++void imap_headercache_done(IMAP_HEADERCACHE *hc, FILE *f) >++{ >++ fclose(f); >++} >++ >+diff -ruN old/imap/imap_headercache.h work/mutt-1.5.5.1/imap/imap_headercache.h >+--- old/imap/imap_headercache.h Thu Jan 1 01:00:00 1970 >++++ imap/imap_headercache.h Fri Nov 28 18:30:55 2003 >+@@ -0,0 +1,47 @@ >++/* >++ * Copyright (C) 2002 Tudor Bosman <tudorb-mutt@dwyn.net> >++ * >++ * This program is free software; you can redistribute it and/or modify >++ * it under the terms of the GNU General Public License as published by >++ * the Free Software Foundation; either version 2 of the License, or >++ * (at your option) any later version. >++ * >++ * This program is distributed in the hope that it will be useful, >++ * but WITHOUT ANY WARRANTY; without even the implied warranty of >++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >++ * GNU General Public License for more details. >++ * >++ * You should have received a copy of the GNU General Public License >++ * along with this program; if not, write to the Free Software >++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. >++ */ >++ >++#ifndef _IMAP_HEADERCACHE_H >++#define _IMAP_HEADERCACHE_H >++#include "imap_private.h" >++#include "message.h" >++ >++typedef struct IMAP_HEADERCACHE >++{ >++ char *name; >++ char *tmpname; >++ unsigned int uidvalidity; >++ int exists; >++} IMAP_HEADERCACHE; >++ >++struct IMAP_DATA; >++ >++IMAP_HEADERCACHE *imap_headercache_open(struct IMAP_DATA *idata); >++ >++void imap_headercache_close(IMAP_HEADERCACHE *hc); >++ >++int imap_headercache_add(IMAP_HEADERCACHE *hc, IMAP_HEADER *h, FILE *from, >++ size_t hdrsz); >++int imap_headercache_update(IMAP_HEADERCACHE *hc, IMAP_HEADER *h); >++int imap_headercache_delete(IMAP_HEADERCACHE *hc, IMAP_HEADER *h); >++ >++FILE *imap_headercache_find(IMAP_HEADERCACHE *hc, IMAP_HEADER *h); >++void imap_headercache_done(IMAP_HEADERCACHE *hc, FILE *f); >++ >++#endif >++ >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-pgp-dw ./files/extra-patch-pgp-dw >--- /usr/ports/mail/mutt-devel/files/extra-patch-pgp-dw Thu Nov 6 21:10:56 2003 >+++ ./files/extra-patch-pgp-dw Fri Dec 19 17:21:29 2003 >@@ -1,767 +1,220 @@ > http://www.woolridge.ca/mutt/patches/p0-patch-1.5.x.dw.pgp-menu-traditional.2 >---- PATCHES Dec 2002 17:44:54 -0000 3.6 >-+++ PATCHES Oct 2003 15:05:24 -0000 >-@@ -0,0 +1 @@ >-+patch-1.5.x.dw.pgp-menu-traditional.2 >---- compose.c.orig Thu Nov 6 08:28:10 2003 >-+++ compose.c Thu Nov 6 08:32:17 2003 >-@@ -131,6 +131,13 @@ >- addstr (_("Sign")); >- else >- addstr (_("Clear")); >-+ >-+ if ((WithCrypto & APPLICATION_PGP)) >-+ if ((msg->security & (ENCRYPT | SIGN))) >-+ if ((msg->security & INLINE)) >-+ addstr (_(" (inline)")); >-+ else >-+ addstr (_(" (PGP/MIME)")); >- clrtoeol (); >- >- move (HDR_CRYPTINFO, 0); >-@@ -156,21 +163,25 @@ >+--- PATCHES.old Tue Apr 15 15:18:34 2003 >++++ PATCHES Fri Dec 19 15:00:56 2003 >+@@ -0,0 +1,3 @@ >++patch-1.5.5.dw.multiple-crypt-hook.2 >++patch-1.5.5.dw.crypt-autoselectkey.1 >++patch-1.5.5.dw.confirm-crypt-hook.1 >+--- doc/manual.sgml.head.old Wed Nov 5 10:41:34 2003 >++++ doc/manual.sgml.head Fri Dec 19 15:00:56 2003 >+@@ -1421,7 +1421,9 @@ >+ or because, for some reasons, you need to override the key Mutt would >+ normally use. The crypt-hook command provides a method by which you can >+ 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. >+ >+ The meaning of "key id" is to be taken broadly in this context: You >+ can either put a numerical key ID here, an e-mail address, or even >+--- doc/muttrc.man.head.orig Fri Dec 19 15:14:55 2003 >++++ doc/muttrc.man.head Fri Dec 19 15:19:05 2003 >+@@ -290 +290,4 @@ >+-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. >+--- hook.c Tue Jan 21 13:25:21 2003 >++++ hook.c Fri Dec 19 15:00:56 2003 >+@@ -117,7 +117,11 @@ >+ ptr->rx.not == not && >+ !mutt_strcmp (pattern.data, ptr->rx.pattern)) >+ { >++#ifdef M_CRYPTHOOK >++ if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK | M_CRYPTHOOK)) >++#else >+ if (data & (M_FOLDERHOOK | M_SENDHOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) >++#endif >+ { >+ /* these hooks allow multiple commands with the same >+ * pattern, so if we've already seen this pattern/command pair, just >+@@ -443,9 +447,25 @@ >+ return _mutt_string_hook (chs, M_ICONVHOOK); >+ } > >- static int pgp_send_menu (HEADER *msg, int *redraw) >+-char *mutt_crypt_hook (ADDRESS *adr) >++LIST *mutt_crypt_hook (ADDRESS *adr) > { >-+ int use_autoinline = 0; >- pgp_key_t p; >- char input_signas[SHORT_STRING]; >- >- if (!(WithCrypto & APPLICATION_PGP)) >- return msg->security; >- >-- 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; >+- return _mutt_string_hook (adr->mailbox, M_CRYPTHOOK); >++ HOOK *hook; >++ LIST *key_list = NULL; > + >-+ switch (mutt_multi_choice (_("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? "), >-+ _("esabif"))) >- { >- case 1: /* (e)ncrypt */ >-- msg->security |= ENCRYPT; >-+ msg->security ^= ENCRYPT; >- break; >- >- case 2: /* (s)ign */ >-- msg->security |= SIGN; >-+ msg->security ^= SIGN; >- break; >- >- case 3: /* sign (a)s */ >-@@ -197,18 +208,38 @@ >- break; >- >- case 4: /* (b)oth */ >-- msg->security = ENCRYPT | SIGN; >-+ if ((msg->security & (ENCRYPT | SIGN)) == (ENCRYPT | SIGN)) >-+ msg->security = 0; >-+ else >-+ msg->security |= (ENCRYPT | SIGN); >-+ break; >++ if (!adr && !adr->mailbox) >++ return (NULL); > + >-+ case 5: /* (i)nline */ >-+ if ((msg->security & (ENCRYPT | SIGN))) >-+ msg->security ^= INLINE; >-+ else >-+ msg->security &= ~INLINE; >- break; >- >-- case 5: /* (f)orget it */ >-+ case 6: /* (f)orget it */ >- msg->security = 0; >- break; >- } >- >-- if (msg->security && msg->security != APPLICATION_PGP) >-- msg->security |= APPLICATION_PGP; >-- else >-- msg->security = 0; >-+ if (msg->security) >++ for (hook = Hooks; hook; hook = hook->next) > + { >-+ if (! (msg->security & (ENCRYPT | SIGN))) >-+ { >-+ msg->security = 0; >-+ } >-+ else >-+ { >-+ msg->security |= APPLICATION_PGP; >++ if (!hook->command) >++ continue; >++ if (!(hook->type & M_CRYPTHOOK)) >++ continue; > + >-+ if (use_autoinline && option (OPTPGPAUTOINLINE)) >-+ msg->security |= INLINE; >-+ } >++ 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); >+ } > >- if(*redraw) >- redraw_crypt_lines (msg); >---- crypt.c Sep 2003 13:03:25 -0000 3.19 >-+++ crypt.c Oct 2003 15:05:24 -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?"))) != M_YES) >-+ return -1; >-+ >-+ /* go ahead with PGP/MIME */ >- } >-@@ -391,2 +376,5 @@ int mutt_is_application_pgp (BODY *m) >- } >-+ if (t) >-+ t |= PGPINLINE; >-+ >- return t; >---- init.h Sep 2003 15:10:09 -0000 3.40 >-+++ init.h Oct 2003 15:05:25 -0000 >-@@ -1380,2 +1380,44 @@ struct option_t MuttVars[] = { >+ #ifdef USE_SOCKET >+--- init.h Wed Nov 5 10:41:32 2003 >++++ init.h Fri Dec 19 15:00:46 2003 >+@@ -1209,6 +1209,16 @@ >+ ** when you are at the end of a message and invoke the \fInext-page\fP >+ ** function. > */ >-+ { "pgp_create_traditional", DT_SYN, R_NONE, UL "pgp_autoinline", 0 }, >-+ { "pgp_autoinline", DT_BOOL, R_NONE, OPTPGPAUTOINLINE, 0 }, >++ >++ >++ { "pgp_autoselectkey", DT_SYN, R_NONE, UL "crypt_autoselectkey", 0 }, >++ { "crypt_autoselectkey", DT_BOOL, R_NONE, OPTCRYPTAUTOSELECT, 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) >++ ** 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_auto_traditional", DT_SYN, R_NONE, UL "pgp_replyinline", 0 }, >-+ { "pgp_replyinline", DT_BOOL, R_NONE, OPTPGPREPLYINLINE, 0 }, >+ { "pgp_autosign", DT_SYN, R_NONE, UL "crypt_autosign", 0 }, >+ { "crypt_autosign", DT_BOOL, R_NONE, OPTCRYPTAUTOSIGN, 0 }, >+ /* >+@@ -1233,6 +1243,15 @@ >+ ** then OpenSSL is used instead to create S/MIME messages and >+ ** settings can be overridden by use of the \fIsmime-menu\fP. >+ ** (Crypto only) >++ */ >++ { "pgp_confirmhook", DT_SYN, R_NONE, UL "crypt_confirmhook", 1 }, >++ { "crypt_confirmhook", DT_BOOL, R_NONE, OPTCRYPTCONFIRMHOOK, 1 }, > + /* > + ** .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 }, >-@@ -1429,11 +1471,8 @@ struct option_t MuttVars[] = { >++ ** 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_create_traditional", DT_QUAD, R_NONE, OPT_PGPTRADITIONAL, M_NO }, >-+ { "pgp_mime_ask", DT_QUAD, R_NONE, OPT_PGPMIMEASK, M_NO }, >+ { "pgp_ignore_subkeys", DT_BOOL, R_NONE, OPTPGPIGNORESUB, 1}, > /* >- ** .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 >-@@ -1441,19 +1480,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 Oct 2003 20:34:59 -0000 3.21 >-+++ mutt.h Oct 2003 15:05:25 -0000 >-@@ -276,2 +276,3 @@ enum >- OPT_MOVE, >-+ OPT_PGPMIMEASK, /* ask to revert to PGP/MIME when inline fails */ >- OPT_PGPTRADITIONAL, /* create old-style PGP messages */ >-@@ -443,3 +444,2 @@ enum >+--- mutt.h Wed Nov 5 10:41:32 2003 >++++ mutt.h Fri Dec 19 15:00:46 2003 >+@@ -427,6 +427,7 @@ >+ >+ /* PGP options */ >+ >++ OPTCRYPTAUTOSELECT, >+ OPTCRYPTAUTOSIGN, >+ OPTCRYPTAUTOENCRYPT, >+ OPTCRYPTAUTOPGP, >+@@ -438,6 +439,7 @@ >+ OPTSMIMEISDEFAULT, >+ OPTASKCERTLABEL, >+ OPTSDEFAULTDECRYPTKEY, >++ OPTCRYPTCONFIRMHOOK, >+ OPTPGPIGNORESUB, >+ OPTPGPCHECKEXIT, > OPTPGPLONGIDS, >-- OPTPGPAUTOTRAD, >- #if 0 >-@@ -451,2 +451,4 @@ enum >- OPTPGPSHOWUNUSABLE, >-+ OPTPGPAUTOINLINE, >-+ OPTPGPREPLYINLINE, >- >-@@ -632,4 +634,4 @@ typedef struct header >+--- pgp.c Wed Nov 5 10:41:33 2003 >++++ pgp.c Fri Dec 19 15:00:56 2003 >+@@ -1016,6 +1016,8 @@ >+ char *keyID, *keylist = NULL, *t; >+ size_t keylist_size = 0; >+ size_t keylist_used = 0; >++ LIST *hook_list = NULL; >++ LIST *hook = NULL; >+ ADDRESS *tmp = NULL, *addr = NULL; >+ ADDRESS **last = &tmp; >+ ADDRESS *p, *q; >+@@ -1055,7 +1057,7 @@ >+ { >+ int r; >+ snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"), keyID, p->mailbox); >+- if ((r = mutt_yesorno (buf, M_YES)) == M_YES) >++ if (!option(OPTCRYPTCONFIRMHOOK) || (r = mutt_yesorno (buf, M_YES)) == M_YES) >+ { >+ if (is_numerical_keyid (keyID)) >+ { >+--- pgpkey.c Wed Nov 5 10:41:33 2003 >++++ pgpkey.c Fri Dec 19 15:00:46 2003 >+@@ -435,8 +435,13 @@ >+ return rv; >+ } >+ >++ >++#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) > { >-- unsigned int security : 7; /* bit 0-4: flags, bit 5,6: application. >-- see: crypt.h pgplib.h, smime.h */ >-+ unsigned int security : 9; /* bit 0-6: flags, bit 7,8: application. >-+ see: mutt_crypt.h */ >- >---- mutt_crypt.h Jan 2003 23:54:30 -0000 3.4 >-+++ mutt_crypt.h Oct 2003 15:05:25 -0000 >-@@ -35,7 +35,9 @@ >- #define GOODSIGN (1 << 2) >--#define BADSIGN (1 << 3) /* FIXME: value also used below for PGPKEY */ >-+#define BADSIGN (1 << 3) >- #define SIGNOPAQUE (1 << 4) >-+#define KEYBLOCK (1 << 5) /* KEY too generic? */ >-+#define INLINE (1 << 6) >- >--#define APPLICATION_PGP (1 << 5) >--#define APPLICATION_SMIME (1 << 6) >-+#define APPLICATION_PGP (1 << 7) >-+#define APPLICATION_SMIME (1 << 8) >- >-@@ -44,3 +46,4 @@ >- #define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN) >--#define PGPKEY (APPLICATION_PGP | (1 << 3)) >-+#define PGPKEY (APPLICATION_PGP | KEYBLOCK) >-+#define PGPINLINE (APPLICATION_PGP | INLINE) >- >-@@ -103,3 +106,3 @@ typedef struct pgp_keyinfo *pgp_key_t; >- >--int mutt_protect (HEADER *, HEADER *, char *); >-+int mutt_protect (HEADER *, char *); >- >---- postpone.c Sep 2003 17:22:09 -0000 3.9 >-+++ postpone.c Oct 2003 15:05:25 -0000 >-@@ -486,2 +486,7 @@ int mutt_parse_crypt_hdr (char *p, int s >+ int keymax; >+ pgp_uid_t **KeyTable; >+@@ -450,6 +455,7 @@ >+ pgp_uid_t *a; >+ int (*f) (const void *, const void *); >+ >++ int keymatch = 0; /* count matching keys */ >+ int unusable = 0; >+ >+ keymax = 0; >+@@ -479,6 +485,7 @@ >+ >+ KeyTable[i++] = a; >+ } >++ keymatch++; >+ } > >-+ case 'i': >-+ case 'I': >-+ pgp |= INLINE; >-+ break; >-+ >- default: >---- send.c Sep 2003 12:56:49 -0000 3.26 >-+++ send.c Oct 2003 15:05:25 -0000 >-@@ -1256,3 +1256,10 @@ ci_send_message (int flags, /* send mod >- msg->security |= SIGN; >-- } >-+ if (WithCrypto & APPLICATION_PGP && (msg->security & (ENCRYPT | SIGN))) >+ if (!i && unusable) >+@@ -487,6 +494,21 @@ >+ mutt_sleep (1); >+ return NULL; >+ } >++ 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)) > + { >-+ if (option (OPTPGPAUTOINLINE)) >-+ msg->security |= INLINE; >-+ if (option (OPTPGPREPLYINLINE) && cur && (cur->security & INLINE)) >-+ msg->security |= INLINE; >++ safe_free ((void **) &KeyTable); >++ return (kp); > + } > + } >++ } > >-@@ -1494,3 +1501,3 @@ main_loop: >- if ((crypt_get_keys (msg, &pgpkeylist) == -1) || >-- mutt_protect (msg, cur, pgpkeylist) == -1) >-+ mutt_protect (msg, pgpkeylist) == -1) >+ switch (PgpSortKeys & SORT_MASK) >+ { >+@@ -597,9 +619,7 @@ >+ break; >+ } >+ >+- if (option (OPTPGPCHECKTRUST) && >+- (!pgp_id_is_valid (KeyTable[menu->current]) >+- || !pgp_id_is_strong (KeyTable[menu->current]))) >++ if (!pgp_trusted_id(KeyTable[menu->current])) > { >-@@ -1574,3 +1581,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 Oct 2003 15:05:25 -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); >---- po/ca.po Apr 2003 11:00:59 -0000 3.10 >-+++ po/ca.po Oct 2003 15:05:26 -0000 >-@@ -602,10 +602,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ós, 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, si(g)na com a, (a)mbdós, en (l)ínia, o en (c)lar? " >- >- # ivb (2003/03/26) >--# ivb (x)ifra, (s)igna, si(g)na com a, (a)mbdós, (c)lar >-+# ivb (x)ifra, (s)igna, si(g)na com a, (a)mbdós, en (l)ínia, o en (c)lar >- #: compose.c:166 >--msgid "esabf" >--msgstr "xsgac" >-+msgid "esabif" >-+msgstr "xsgalc" >- >---- po/cs.po Mar 2003 22:43:06 -0000 3.8 >-+++ po/cs.po Oct 2003 15:05:26 -0000 >-@@ -687,4 +687,4 @@ msgstr "Za¹ifrovat" >- #, fuzzy >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "(¹)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, èi (n)ic?" >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "(¹)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, pøí(m)ý, èi (n)ic?" >- >-@@ -692,4 +692,4 @@ msgstr "(¹)ifrovat, (p)odepsat, podepsat >- #: compose.c:166 >--msgid "esabf" >--msgstr "¹pjon" >-+msgid "esabif" >-+msgstr "¹pjomn" >- >---- po/da.po Mar 2003 22:43:06 -0000 3.8 >-+++ po/da.po Oct 2003 15:05:26 -0000 >-@@ -577,8 +577,8 @@ msgstr "Kryptér" >- #, fuzzy >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "(k)ryptér, (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ér, (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 Apr 2003 08:31:00 -0000 3.11 >-+++ po/de.po Oct 2003 15:05:27 -0000 >-@@ -568,8 +568,8 @@ msgstr "Verschlüsseln 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 Mar 2003 22:43:06 -0000 3.9 >-+++ po/el.po Oct 2003 15:05:27 -0000 >-@@ -700,4 +700,4 @@ msgstr "ÊñõðôïãñÜöçóç ìå: " >- #: 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, Þ (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)êåßìåíï, Þ (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 May 2003 17:48:28 -0000 3.9 >-+++ po/eo.po Oct 2003 15:05:27 -0000 >-@@ -570,8 +570,8 @@ msgstr "Æifri per: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP æ(i)fri, (s)ubskribi, subskribi (k)iel, (a)mbaý, aý (f)orgesi? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP æ(i)fri, (s)ubskribi, subskribi (k)iel, (a)mbaý, \"i(n)line\", aý (f)orgesi? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "iskaf" >-+msgid "esabif" >-+msgstr "iskanf" >- >---- po/es.po Apr 2003 10:18:15 -0000 3.11 >-+++ po/es.po Oct 2003 15:05:27 -0000 >-@@ -575,4 +575,5 @@ msgstr "Cifrar" >- #, fuzzy >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "¿co(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 "¿co(d)ificar, f(i)rmar (c)omo, amb(o)s, inc(l)uido, o ca(n)celar? " >-+ >- >-@@ -580,4 +581,4 @@ msgstr "¿co(d)ificar, f(i)rmar (c)omo, a >- #, fuzzy >--msgid "esabf" >--msgstr "dicon" >-+msgid "esabif" >-+msgstr "dicoln" >- >---- po/et.po Mar 2003 22:43:07 -0000 3.10 >-+++ po/et.po Oct 2003 15:05:28 -0000 >-@@ -570,8 +570,8 @@ msgstr "Krüpti kasutades: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad või (u)nusta? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP (k)rüpti, (a)llkiri, allk. ku(i), (m)õlemad, k(e)hasse, või (u)nusta? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "kaimu" >-+msgid "esabif" >-+msgstr "kaimeu" >- >---- po/fr.po Apr 2003 08:38:13 -0000 3.19 >-+++ po/fr.po Oct 2003 15:05:28 -0000 >-@@ -594,8 +594,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 Mar 2003 22:43:07 -0000 3.8 >-+++ po/gl.po Oct 2003 15:05:28 -0000 >-@@ -579,8 +579,8 @@ msgstr "Encriptar" >- #, fuzzy >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "¿(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 "¿(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 Aug 2003 11:01:09 -0000 3.9 >-+++ po/hu.po Oct 2003 15:05:29 -0000 >-@@ -563,8 +563,8 @@ msgstr "Titkosítás: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP (t)itkosít, (a)láír, aláír (m)int, titkosít é(s) aláír, mé(g)se? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP (t)itkosít, (a)láír, aláír (m)int, titkosít é(s) aláír, (b)eágyazott, mé(g)se? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "tamsg" >-+msgid "esabif" >-+msgstr "tamsbg" >- >---- po/id.po May 2003 17:48:28 -0000 3.10 >-+++ po/id.po Oct 2003 15:05:29 -0000 >-@@ -571,8 +571,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 Mar 2003 22:43:07 -0000 3.8 >-+++ po/it.po Oct 2003 15:05:29 -0000 >-@@ -581,8 +581,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 Sep 2003 17:15:20 -0000 3.17 >-+++ po/ja.po Oct 2003 15:05:30 -0000 >-@@ -568,8 +568,8 @@ msgstr " °Å¹æ²½Êý¼°: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP (e)°Å¹æ²½,(s)½ð̾,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(f)²ò½ü?" >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP (e)°Å¹æ²½,(s)½ð̾,(a)..¤È¤·¤Æ½ð̾,(b)ξ¼Ô,(i)nline,(f)²ò½ü?" >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "esabf" >-+msgid "esabif" >-+msgstr "esabif" >- >---- po/ko.po Sep 2003 10:11:49 -0000 3.12 >-+++ po/ko.po Oct 2003 15:05:30 -0000 >-@@ -569,8 +569,8 @@ msgstr "¾ÏÈ£È ¹æ½Ä: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP ¾ÏÈ£È(e), ¼¸í(s), »ç¿ë ¼¸í(a), µÑ ´Ù(b), Ãë¼Ò(f)? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP ¾ÏÈ£È(e), ¼¸í(s), »ç¿ë ¼¸í(a), µÑ ´Ù(b), (i)nline, Ãë¼Ò(f)? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "esabf" >-+msgid "esabif" >-+msgstr "esabif" >- >---- po/lt.po Mar 2003 22:43:07 -0000 3.8 >-+++ po/lt.po Oct 2003 15:05:30 -0000 >-@@ -577,5 +577,5 @@ msgstr "Uþðifruoti" >- #, 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)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, " >-+"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, (l)aiðke, " >- "ar (p)amirðti?" >-@@ -584,4 +584,4 @@ msgstr "" >- #, fuzzy >--msgid "esabf" >--msgstr "usabmp" >-+msgid "esabif" >-+msgstr "usablp" >- >-@@ -597,4 +597,3 @@ msgid "" >- msgstr "" >--"(u)þðifruot, pa(s)iraðyt, pasiraðyt k(a)ip, a(b)u, rinktis (m)ic algoritmà, " >--"ar (p)amirðti?" >-+"(u)þðifruot, pa(s)iraðyt, uþðifruo(t) su, pasiraðyt k(a)ip, a(b)u, ar (p)amirðti?" >- >-@@ -603,3 +602,3 @@ msgstr "" >- msgid "eswabf" >--msgstr "usabmp" >-+msgstr "ustabp" >- >---- po/nl.po Sep 2003 13:09:59 -0000 3.12 >-+++ po/nl.po Oct 2003 15:05:31 -0000 >-@@ -565,8 +565,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)eide, (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)eide, ber(i)cht, (g)een? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "voabg" >-+msgid "esabif" >-+msgstr "voabig" >- >---- po/pl.po Sep 2003 17:20:56 -0000 3.13 >-+++ po/pl.po Oct 2003 15:05:31 -0000 >-@@ -566,8 +566,8 @@ msgstr "Zaszyfruj u¿ywaj±c: " >- #: 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 Mar 2003 22:43:08 -0000 3.9 >-+++ po/pt_BR.po Oct 2003 15:05:31 -0000 >-@@ -580,5 +580,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? " >- >-@@ -586,4 +586,4 @@ msgstr "" >- #, fuzzy >--msgid "esabf" >--msgstr "escamq" >-+msgid "esabif" >-+msgstr "escaiq" >- >-@@ -599,3 +599,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? " >- >-@@ -604,3 +604,3 @@ msgstr "" >- msgid "eswabf" >--msgstr "escamq" >-+msgstr "esncaq" >- >---- po/ru.po Apr 2003 08:21:09 -0000 3.14 >-+++ po/ru.po Oct 2003 15:05:32 -0000 >-@@ -576,8 +576,8 @@ msgstr "úÁÛÉÆÒÏ×ÁÔØ: " >- #: compose.c:165 >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "PGP (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (f)ÏÔËÁÚÁÔØÓÑ? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "PGP (e)ÛÉÆÒ, (s)ÐÏÄÐÉÓØ, (a)ÐÏÄÐÉÓØ ËÁË, (b)ÏÂÁ, (i)nline, (f)ÏÔËÁÚÁÔØÓÑ? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "esabf" >-+msgid "esabif" >-+msgstr "esabif" >- >---- po/sk.po Mar 2003 22:43:08 -0000 3.8 >-+++ po/sk.po Oct 2003 15:05:32 -0000 >-@@ -585,5 +585,5 @@ msgstr "Za¹ifruj" >- #, 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)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» " >-+"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, (i)nline, alebo (f)-zabudnú» " >- "na to? " >-@@ -592,4 +592,4 @@ msgstr "" >- #, fuzzy >--msgid "esabf" >--msgstr "esabmf" >-+msgid "esabif" >-+msgstr "esabif" >- >-@@ -605,4 +605,3 @@ msgid "" >- msgstr "" >--"(e)-¹ifr, (s)-podp, podp (a)ko, o(b)e, oznaè alg. mi(c), alebo (f)-zabudnú» " >--"na to? " >-+"(e)-¹ifr, (s)-podp, (w)-¹ifr s, podp (a)ko, o(b)e, alebo (f)-zabudnú» na to? " >- >-@@ -611,3 +610,3 @@ msgstr "" >- msgid "eswabf" >--msgstr "esabmf" >-+msgstr "eswabf" >- >---- po/sv.po Mar 2003 22:43:08 -0000 3.9 >-+++ po/sv.po Oct 2003 15:05:32 -0000 >-@@ -567,8 +567,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)åda, 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)åda, i(n)fogat, eller sk(i)ppa det?" >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "ksobi" >-+msgid "esabif" >-+msgstr "ksobni" >- >---- po/tr.po Mar 2003 22:43:08 -0000 3.8 >-+++ po/tr.po Oct 2003 15:05:33 -0000 >-@@ -576,5 +576,5 @@ msgstr "Þifrele" >- #, 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 "" >--"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, mi(c) algoritmini seç " >-+"þ(i)frele, i(m)zala, (f)arklý imzala, i(k)isi de, (i)nline, " >- "yoksa i(p)talmý? " >-@@ -582,4 +582,4 @@ msgstr "" >- #: compose.c:166 >--msgid "esabf" >--msgstr "imfkcp" >-+msgid "esabif" >-+msgstr "imfkip" >- >---- po/uk.po Mar 2003 22:43:08 -0000 3.9 >-+++ po/uk.po Oct 2003 15:05:33 -0000 >-@@ -571,8 +571,8 @@ msgstr "ûÉÆÒÕ×ÁÎÎÑ" >- #, fuzzy >--msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, or (f)orget it? " >--msgstr "ÛÉÆÒ.(e), ЦÄÐ.(s), ЦÄÐ. ÑË(a), ÕÓÅ(b) ÞÉ ×¦ÄͦÎÁ(f)? " >-+msgid "PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, (i)nline, or (f)orget it? " >-+msgstr "ÛÉÆÒ.(e), ЦÄÐ.(s), ЦÄÐ. ÑË(a), ÕÓÅ(b), (i)nline ÞÉ ×¦ÄͦÎÁ(f)? " >- >- #: compose.c:166 >--msgid "esabf" >--msgstr "" >-+msgid "esabif" >-+msgstr "esabif" >- >---- po/zh_CN.po Mar 2003 22:43:08 -0000 3.8 >-+++ po/zh_CN.po Oct 2003 15:05:33 -0000 >-@@ -584,5 +584,5 @@ 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 "" >--"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, Ñ¡Ôñ (m)ic ÑÝËã·¨ »ò (f)·Å" >-+"(e)¼ÓÃÜ, (s)Ç©Ãû, (a)ÓñðµÄÉí·ÝÇ©, (b)Á½Õß½ÔÒª, (i)nline, »ò (f)·Å" >- "Æú£¿" >-@@ -590,4 +590,4 @@ msgstr "" >- #: compose.c:166 >--msgid "esabf" >--msgstr "" >-+msgid "esabif" >-+msgstr "esabif" >- >---- po/zh_TW.po Mar 2003 22:43:08 -0000 3.8 >-+++ po/zh_TW.po Oct 2003 15:05:34 -0000 >-@@ -576,3 +576,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)æ¾æ£ï¼" >-@@ -580,4 +580,4 @@ msgstr "(1)å å¯, (2)ç°½å, (3)ç¨å¥ç >- #: compose.c:166 >--msgid "esabf" >--msgstr "12345" >-+msgid "esabif" >-+msgstr "1234i5" >+ char *s = ""; >+ char buff[LONG_STRING]; >+--- protos.h Wed Nov 5 10:41:33 2003 >++++ protos.h Fri Dec 19 15:00:56 2003 >+@@ -129,7 +129,7 @@ >+ char *mutt_get_body_charset (char *, size_t, BODY *); >+ 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); > >+ const char *mutt_make_version (void); >diff -ru /usr/ports/mail/mutt-devel/scripts/generate-plist ./scripts/generate-plist >--- /usr/ports/mail/mutt-devel/scripts/generate-plist Thu Nov 6 21:10:56 2003 >+++ ./scripts/generate-plist Fri Dec 19 17:21:29 2003 >@@ -138,6 +138,9 @@ > if [ "$MUTT_EDIT_THREADS" = "yes" ]; then > html=$(($html + 3)) > fi >+ if [ "$MUTT_IMAP_HEADER_CACHE" = "yes" ]; then >+ html=$(($html + 1)) >+ fi > if [ "$MUTT_SIGNATURE_MENU" = "yes" ]; then > html=$(($html + 1)) > fi >@@ -145,7 +148,7 @@ > html=$(($html + 1)) > fi > if [ "$MUTT_PGP_PATCH" = "yes" ]; then >- html=$(($html + 1)) >+ html=$(($html + 2)) > fi > echo "%%DOCSDIR%%/html/manual.html" >> $tmp_first > echo "%%DOCSDIR%%/html/manual_toc.html" >> $tmp_first
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 60403
: 38098