Bump S-nail v14.8.13.ar, 2016-10-19
[s-mailx.git] / NEWS
blobc81e2d90827804bf2c470ca3f5434dc32c2dd463
1 S - n a i l  N e w s
2 ====================
4 v14.8.13 ("Cyrustrupidae"), 2016-10-19
5 --------------------------------------
7 We are happy to present you an Entomologic sensation, which
8 counteracts the decline of life that can be seen all around us.
9 Inspection of environments that mankind hasn't seen since ancient
10 times reveiled a sofar undiscovered species of dung beetle: the
11 Cyrustrupidae.
13 Thanks to Stephen Isard, Ralph Corderoy, Jürgen (Juergen) Daubert,
14 Lyndon Nerenberg and David Levine
15 We welcome Lyndon Nerenberg and David Levine in THANKS.
17 Apologies to Jürgen Daubert (false spelling of name in commit message).
19   S-nail will become S-mailx after v14.9, and all project resources
20   will move to www.sdaoden.eu with v14.9; only the ML remains hosted
21   at Sourceforge.net as of this writing.
22   We thank Sourceforge.net for hosting this project so many years!
24   In the following numbers in [] reference a commit hash or a topic
25   branch name.  mdocmx(7) anchors are denoted by a number-sign #:
26   typing "^A ANCHOR" while reading the man(1)ual in a capable less(1)
27   will scroll to the manual's Point-Of-Interest, and pointing a web-
28   browser to the "#ANCHOR" of the online manual will do so, too.
29   An "|#ANCHOR" (or "|#_ANCHOR") that follows the normal anchor is for
30   the web manual only: it was manually adjusted since using grohtml
31   requires two days of fixup work.  Thanks for your understanding.
32   Commits can be browsed by appending the commit hash to
33     https://git.sdaoden.eu/cgit/s-nail.git/commit/?id=
35 NOTES, ChangeLog (packager-affine)
36 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
38 - We now support IMAP internationalized names, to be "simulated" via the
39   new user command `imapcodec'#135|#_135:
41     ?0[tmail ]? imapc enc Trübe/Wölkchen
42      in: Trübe/Wölkchen (16 bytes)
43     out: Tr&APw-be/W&APY-lkchen (22 bytes)
44     ?0[tmail ]? imapcodec decode Tr&APw-be/W&APY-lkchen
45      in: Tr&APw-be/W&APY-lkchen (22 bytes)
46     out: Trübe/Wölkchen (16 bytes)
47     ?0[tmail ]? copy 1 +Trübe/Wölkchen
48     "imap://user1@localhost/Trübe/Wölkchen" [New file] 6850 bytes
50   Those who were used to get around the missing support by using
51   readily-encoded names have to update their resources because passing
52   in such a name will result in re-encoding.  [Quite a lot, see below]
54 - The special handling of *folder*#382|#376 for IMAP boxes has been
55   deprecated after introduction of the new *inbox*#396|#_396 variable,
56   which will henceforth be regulary used for expansions of "%"
57   filenames.  If it is set to the empty string then _only_ that
58   special-casing of *folder* is bypassed, and the usual $MAIL /
59   compile-time mailspool search is applied. [c220e90,a324bf3]
60   (Stephen Isard, Jürgen Daubert)
62 - Cyrus IMAP servers with their dot hierarchy delimiter should now be
63   supported.  The variable *imap-delim*#393|#_393 (and [-USER]@HOST
64   variants) will be used to normalize if set, otherwise the first seen
65   possible delimiter is used. [a65afca,9e23878,21568f8]
66   (Stephen Isard, Jürgen Daubert)
68     ?0[tmail ]? Fi+Trübe.............Wölkchen
69     IMAP error: Mailbox doesn't exist: Trübe.Wölkchen (0.000 + 0.000 secs).
70     #ERR#?1[tmail +Trübe.Wölkchen]? set imap-delim-user1@localhost=/.
71   Oh.  Mailbox changed.  Not before v15, sorry.
72     ?0[tmail +Trübe.Wölkchen]? Fi+Trübe.............Wölkchen
73     "+Trübe/Wölkchen": 1 message [Read only]
74     ?0[tmail +Trübe.Wölkchen]? unset imap-delim-user1@localhost
75     ?0[tmail +Trübe.Wölkchen]? Fi+Trübe/.............Wölkchen
76     "+Trübe/Wölkchen": 1 message [Read only]
78 git(1) shortlog (edited)
79 ^^^^^^^^^^^^^^^^^^^^^^^^
81   44087f3 `z': add ^: goes to first screen; fix max calc for 0 modulos
82   1657626 Simplify *folder* (implicit trail solidus) (Stephen Isard, Ralph
83           Corderoy)
84   7a09af6 `write'++: !interactive: urlxenc() attachment paths (Ralph Corderoy)..
86 If non-interactive batch mode would be commonly in use i would claim
87 this to be a security fix, but not yet..  If messages are `write'n out
88 in non-interactive mode then it is now ensured that attachments end in
89 the current directory, that they don't overwrite yet existing files, and
90 that shell pipes won't be executed (after the now applied name
91 conversion the pipe command ends up as a normal filename).
93   c220e90 Add *inbox* (Stephen Isard, and Jürgen Daubert)..
94   a65afca Add *imap-delim{,-{{,USER@}HOST}}* (Stephen Isard, Jürgen Daubert)
95   8f0f225 IMAP: [a65afca] (Add *imap-delim{,-{{,USER@}HOST}}*) for real now
97 All as above.
99   ba4f26f n_utf32_to_utf8(): fix upper limit (should be 0x10FFFF)
100   dfea333 page_or_print(): never use $PAGER unless startup complete
101   49fb63f `write'++: !interactive:.. But now, really (Lyndon Nerenberg, David
102           Levine)..
104 As above.
106   fcd376f THANKS: David Levine and Lyndon Nerenberg
107   57c4ee3 cmd_tab.h: allow history for `unset', `unsetenv' (i.e.: tweak
108           [ec81a41])
109   9e23878 *imap-delim* if not set, use first delim user gave
110   a324bf3 *inbox*: if empty, only bypass *folder* to $MAIL or builtin default
111   202b1a6 Add `urlcodec', obsolete `url{en,de}code'
112   21568f8 *imap-delim*: aeh, just fix this even for mailbox==NULL
113   830f948 IMAP: add support for international mailbox names..
114   d015c46 IMAP: fix and tweak previous [830f948]
115   583a5bd IMAP cache: tweak previous two, i have forgotten an imap_path_decode()
116           call
117   2feab02 imap_path_decode(): better approach for [6121ff9]
118   36f06cc imap_path_decode(): fix corner case; `imapcodec': makeprint() when
119           decoding
120   b3803d5 `urlcodec': makeprint() when decoding
121   35506b0 imap_path_encode(): sigh.  Finally: do not simply include & in shifted
122           walk
123   f146b54 imap_path_{en,de}code(): fix iconv_open() to/from charset order
124   d94a0d2 imap_path_decode(): err: do not "savestrbuf(,buflen * 2)"
125   d7d7108 imap_path_decode(): fix UTF-16 arithmetic
127 Ts, ts, looks like Freud had his Freude interpreting this staggering.
128 But should be correct and working now.
130 Appendix
131 ^^^^^^^^
133 The complete changelog of commits in between two versions can be
134 inspected by using the git(1) `log' command as shown below, where "OLD"
135 and "NEW" are the two versions to be compared.
137   # All commits:
138   $ git log --reverse --topo-order --abbrev-commit OLD..NEW
139   # Only topic branch headers (--no-merges for content commits only):
140   $ git log --oneline --reverse --topo-order --merges OLD..NEW
141   # Same, but truly accessible:
142   $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW |
143     while read c1 c2 c3 c4 c5 c6; do
144       printf "%-24s: \$ git log --oneline --no-merges ${c1} ^${c2}\n" "${c6}";
145     done
147 NEWS entries for the S-nail releases before v14.8.0 have been cut off
148 before release v14.8.5 and can be found in the git(1) repository:
150   v14.8.0 - v14.8.13: $ git show v14.8.13:NEWS
151   v13     - v14.8.5 : $ git show v14.8.5:NEWS
152   9.0     - 12.5    : $ git show heirloom:ChangeLog
154 Also accessible via the following URL, just replace X.Y.Z accordingly:
155   https://git.sdaoden.eu/cgit/s-nail.git/tree/NEWS?h=vX.Y.Y
156 For even older releases you need to look into the [timeline] branch, but
157 no changelog has been administrated for them.
159 Note that in anything which follows the mdocmx(7) anchor was "@".
161 v14.8.12 ("Bubas"), 2016-10-05  (v14.8.11 as of 2016-10-03 broken)
162 ------------------------------------------------------------------
164 A cumulated bugfix release.
165 It also brings in some corrections to no-brainers of the past.
167 Thanks to Antonio Radici, Stephen Isard and Predrag Punosevac.
168 We welcome Antonio Radici and Predrag Punosevac in THANKS.
170 Apologies to Stephen Isard, and John Dodson.
172   S-nail will become S-mailx after v14.9, and all project resources
173   will move to www.sdaoden.eu with v14.9; only the ML remains hosted
174   at Sourceforge.net as of this writing.
175   We thank Sourceforge.net for hosting this project so many years!
177 NOTES, ChangeLog (packager-affine)
178 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
180 - The repository layout has been changed / extended!
181   Please see README on interest.
183 git(1) shortlog (edited)
184 ^^^^^^^^^^^^^^^^^^^^^^^^
186   f01291d extract_date_from_from_(): dig more invalid MBOXes (Antonio Radici)..
187   98050a7 THANKS: Antonio Radici
189 freedesktop.org obfuscates MBOX From_ lines, and S-nail was much too
190 strict for quite some time.  This strict behaviour was introduced as
191 part of the fixes which finally allowed roundtripping messages in
192 between different mailbox types, but it didn't really work out.
194 In the future we only warn if we see invalid MBOX files, and will print
195 the invalid lines with *debug* or *verbose* set, but anyway accept what
196 we get.
198   096809e popen.c:_file_save(): FIX false cherry-pick [41250b1] for IMAP..
200 v14.8.10 couldn't do "copy * IMAP-SPEC" due to this.
202   788aad0 url_parse(): better take better care for path parts (Stephen Isard)..
203   fb32f8f IMAP: honour readonly via -R, not only via `File' (Stephen Isard)
205 Please see below.
207   bd6090d sendout.c: fix HAVE_DEBUG From_ quoting..
208   e716a9c Many: drop support for *mbox-rfc4155* - a no-brainer..
210 More on MBOX, as above.
212   603a3dd sendmp(), setfile(): FIX: ensure time_current is actualized
214 Oh!  Yes, there were actually two code paths which suffered a lot from
215 the "optimize date and time systemcalls" from years ago!  Now fixed. ._.
217   63e7ade is_head(): change compat argument to check_rfc4155..
219 More on MBOX, as above.
221   c5b40e4 okeys.h: regenerate (Apologies: Stephen Isard)
223 Sorry, Stephen!
225   3838ffd setptr(): tweak [63e7ade], log more invalid From_'s if verbose
227 More on MBOX, as above.
229   2eb6ca1 mime_types.c:_mt_by_filename(): basename() path (fix/tweak relative
230           paths)
231   b9599b0 make.rc, mk-conf.sh: WANT_DEVEL includes WANT_DEBUG, but not vice
232           versa
233   ec81a41 cmd_tab.h: allow history for `set', `setenv', `varshow'
235 Much better to see them in the `history'.
237   a715162 Add a RFC 6068 url_mailto_to_address() hack for List-Post:
239 We will now strip off any hfield additions after a "?", and we will
240 perform URL percent decoding before using the value given.
241 (Is only used for "automatic mailing-list detection".)
243   e774dfb imap.c: do not hard error out if FEDIT_SYSBOX|FEDIT_NEWMAIL
244   39a7571 FIX "," message specification (since [1c4b8c9], v14.8.4)..
246 Yes, you can say "f," again, and it should find the parent message.
248   171f111 FIX [44cec1f] (Fix "address" message specifications (John Dodson))..
250 Sorry, Mr. John Dodson of Australia.  They now really work as
251 standardized with our extensions, and there is nothing anyone can do
252 to prevent it.
254   256da01 *folder*: IMAP: add /INBOX when there is a trailing slash (Stephen
255           Isard)
256   2afd5c8 Previous, IMAP now for much better (Stephen Isard)
257   e5eb5fe Fix + expansion for IMAP, broken since [edb2dcd], 2013-06!!
258   ce40a87 imap.c: do not print update message on readonly boxes
259   52fcb7e Oops, restore proper *folder* behaviour for non-IMAP
260   111f80a FixFix IMAP "+" expansion and more (Predrag Punosevac)
262 More IMAP fixes.  Should really work now as good as never before.
264 v14.8.10 ("Anachalcos"), 2016-08-20
265 -----------------------------------
267 A cumulated bugfix release.
268 And because v14.9 still takes time.
270 Credits to trondd.
272 Apologies to Sergey and those members of the Roff community which would
273 like to see progress!
275   S-nail will become S-mailx after v14.9, and all project resources
276   will move to www.sdaoden.eu with v14.9; only the ML remains hosted
277   at Sourceforge.net as of this writing.
278   We thank Sourceforge.net for hosting this project so many years!
280 git(1) shortlog
281 ^^^^^^^^^^^^^^^
283 Yes, "quick and dirty" only for Anachalcos.
285   7f7bae1 Fix `z' (Tim)
287 Fixes page-wise movement if the argument is greater than 9.
289   43ad441 THANKS: update mail address of Tim (trondd)
290   8b85b96 Fix compiler warning of [7f7bae1] (Fix `z' (Tim))
291   6afff81 FIX possible intwrap caused delays (for mailboxes with size == 1)
292   530e81f FIX n_utf8_to_utf32() sequence length checks (since [558d8b8],
293           2015-03!)
294   78083c0 HTML filter: filter out some characters
295   407a705 Actively filter out U+00AD characters (Vincent Lefevre)..
296   e5591f2 THANKS: Vincent Lefevre
297   5c458cc FIX MBOX append (since ever (nail 11.16, 2004-11-18])!)..
299 This only fixes invalid non-empty MBOX mailboxes, so "FIX" is possibly
300 a bit overstated.
302   75982b9 bidi_info_needed(): no variation selectors etc. -- CText, where are
303           you!
304   e65db06 FIX n_verr(): cannot reuse va_list..
306 Only for error messages > ~2 KB, which we usually don't produce.
308   23e8697 Fix *quote-fold* (on GNU/Linux iswspace() does not return boolean!)
309   98cf903 FIX: really_rewind() for pre POSIX Issue 7
311 Hardly affects anyone, i had to look into old v5 FreeBSD: maybe.
313   41250b1 FIX: no O_APPEND for .bz2/.xz/*file-hook-load*!  Use lseek(2)!!..
315 This is the reason for this release, and applies to all C libraries
316 which optimize fseek(3) and do not adjust the file descriptor via
317 lseek(2) if the resulting offset is in the I/O buffer.
318 It seems to enable me to say
320     set file-hook-load-xz_pgp='gpg -d | xz -dc' \
321           file-hook-save-xz_pgp='xz -zc | gpg -e'
323 on a GNU/Linux system without ending up with corrupted boxes,
324 i.e., a complaining gpg(1) that says that says so.
326   224d858 popen.c:_file_save(): adjust partial [41250b1] cherry-pick
327   87c902a sendmp(): fix possible false insertion of colour reset seq.
329 v14.8.9 ("Dung Beetle"), 2016-06-21
330 -----------------------------------
332 A cumulated bugfix release.
334 Credits Ralph Corderoy.
335 Apologies, Dirk-Wilhelm Peters.
337   S-nail will become S-mailx after v14.9, and all project resources
338   will move to www.sdaoden.eu with v14.9; only the ML remains hosted
339   at Sourceforge.net as of this writing.
340   We thank Sourceforge.net for hosting this project so many years!
342 ChangeLog
343 ^^^^^^^^^
345 - *signature* and tail injections now work correctly even in combination
346   with -t. [d4237ac]  (Dirk-Wilhelm Peters)
348 - Fix faulty (by-one) buffer overflow calculation in the NCL line editor
349   that could sometimes be seen when using ^W for backward deleting
350   a word when using this at a freshly created rightmost columns.
351   Bug was introduced in [d33bd89] (tty.c, NCL: reduce realloc counts,
352   2013-08-23).  (Ralph Corderoy)
354 git(1) shortlog
355 ^^^^^^^^^^^^^^^
357 b0b974e mk-conf.sh: disable -b for tcc(1) [mob]
358 a415c58 makefile:_update-release: symlinks do not work with lighttpd, use hard
359         ones
360 2fefb1f collect(): fit ~? output in 25 lines (fixes [5dea8a4,4e61d5c] ;)
361 7c7c888 mime.types: oops, fix x-xz tbz->txz extension!
362 c40c206 collect(): hint for `~.' if *ignoreeof* is set, not ".": needs *dot*
363 d4237ac Fix *signature* / tail injection in conjunction with -t..
364 ef6a9c2 mk-conf.sh: pcc(1) as of CVS works without stack protectors!
365 d5cec10 FIX HTML filter: swallow lone ampersands in parameters (SIGH!)..
366 08eb902 FIX: avoid duplicate output for HTML filter..
367 524adf4 makeprint(): filter some iswprint()==true, but which really aren't..
368 552b2b8 `set': fix quoting when printing all variables
369 aa8df72 mk-conf.sh: fix DEVEL<->DEBUG interdependency; terminate printf(1)
370         args
371 f84b0cd mk-conf.sh: check for the needed environ(3)
372 b5af710 mk-conf.sh: fix [f84b0cd]: NULL needs stdio.h
373 fdcbf59 Again "improve" ~? listing
374 ba29651 FIX: cntrlchar() was broken since [4e49924] from 2012-10-15!!
375 08ab13f tty.c, NCL fix possible off-by-one (Ralph Corderoy)
376 815e99f makefile:_update-release: rm TODO in [timeline] _shipout release_ ball
378 v14.8.8 ("The Vulture 38"), 2016-03-26 (v14.8.7 as of 2016-03-25 broken)
379 ------------------------------------------------------------------------
381 A cumulated bugfix release.
383 Credits Gaetan Bisson, Sergey Matveev, Dirk-Wilhelm Peters, Allan McRae
384 and Ralph Corderoy.
385 All the mentioned persons deserve special thanks indeed.
387 We welcome Sergey Matveev, Allan McRae and Ralph Corderoy in THANKS.
389   S-nail will become S-mailx after v14.9, and all project resources
390   will move to www.sdaoden.eu with v14.9; only the ML remains hosted
391   at Sourceforge.net as of this writing.
392   We thank Sourceforge.net for hosting this project so many years!
394 NOTES, ChangeLog (packager-affine)
395 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
397 - Thanks to Sergey Matveev the Maildir code is now compatible to *BSD.
398   Interested persons may read the commit log. [0c30b14] (Sergey Matveev)
400 - The (much to restricted) test target should now work if $SHELL is set
401   to something "nologin". [7876f3a]  (Gaetan Bisson)
403 - If *sendmail-no-default-arguments* is set we will NOT (!) terminate
404   MTA options with "--", assuming the user does.  This allows, e.g.,
405   very sick things like (ouch) [8b0bdbe]
407     set sendmail="/bin/ssh" \
408       sendmail-arguments="steffen@sdaoden.eu /usr/sbin/sendmail -t" \
409       sendmail-no-default-arguments \
410       sendmail-progname="ssh"
412 ChangeLog
413 ^^^^^^^^^
415 - The primitive builtin HTML filter should now correctly parse HTML
416   parameters.  It seems to become necessary ;) [e227a78,65df701]
418 - *signature* will now undergo MIME encoding. [fe209f7]
419   (Dirk-Wilhelm Peters)
421 - Operating systems without getaddrinfo(3) but only with gethostname(3)
422   should be able to resolve DNS (port numbers) correctly again.
423   [7dd3a71]  (Allan McRae)
425 - The builtin NCL no longer counts gabby history limits against the
426   given maximum persistent history size unless gabbiness is desired.
427   [76780e4,f06ccb6]
429 - The builtin NCL couldn't paste more than one line since October 2015.
430   [ff5d914]  (Ralph Corderoy)
432 ChangeLog (purely technical)
433 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
435 - WANT_READLINE environments should possibly have a better experience
436   hen interactively editing the attachment list. [ede2800]
437   (In general interactive situation has to improve a lot.)
439 - Fix a bit of weird buffer handling. [536d3a7,0f2cc31,e9a5c22]
440   (Ralph Corderoy)
442 - Fix the fixed buffer handling which broke v14.8.7. [3e4831a]
443   (Gaetan Bisson)
445 v14.8.6 ("Hen Harrier II"), 2015-12-28
446 --------------------------------------
448 A cumulated bugfix release.
450 Credits Hilko Bengen, Salvatore Bonaccorso, Martin Sebor,
451 Aharon Robbins and Philip Guenther.
453 We welcome all credited persons in THANKS.
455 NOTES, ChangeLog (packager-affine)
456 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
458 - WANT_AMALGAMATION dependency tracking has been fixed.
459   [0ed139d,8c126a9]
461 - "INSTALL": clarification: "make" OR "make install", NOT "[make &&]
462   make install".  More to come in v14.9.  Also INSTALL now says that the
463   default configuration includes all non-experimental features, whereas
464   the otherwise identical CONFIG=MAXIMAL does include them.
465   (Hilko Bengen)
467 - SENDMAIL will now fallback to /usr/sbin/sendmail if we don't find any
468   executable sendmail(1).  We had some similar issue on ArchLinux, but
469   i failed to deal with the no-sendmail-available case.  sendmail(1) is
470   expected in /usr/sbin on *BSD and according to Debian Policy 11.6.
471   [0e09d5e]  (Salvatore Bonaccorso)
473 - SYSCONFRC no longer includes SYSCONFDIR.  I.e., S-nail now does
474     load(SYSCONFDIR "/" SYSCONFRC);
475   instead of
476     load(SYSCONFRC);
477   It seems only CRUX-Linux is affected, and i've sent a patch. [807f64e]
479 - We now support the TinyCCompiler. [topic/tcc]
481 - And -- ouch! -- fix S-nail on Solaris, again.  It was broken since
482   [3e863c6] (2015-06-23) since necessary linker flags had been
483   overwritten. [fd40d5a,6fe5448]
484   (We also deal with NAME_MAX being the minimum possible now, see below.)
486 ChangeLog
487 ^^^^^^^^^
489 - When `Lreply'ing to multiple messages and using the `~:' tilde command
490   the argument list of the `Lreply' itself would have been overwritten,
491   resulting in crashs. [9f5c403 (+ 1162af5,5f08362)]
493 - Temporarily forbid `mbox' but in a system mailbox.  I hope v14.9 can
494   perform the action gracefully. [781ee34]
496 - On systems with "unsigned char" "char"s S-nail was broken for about
497   two and a half year since an E(nd)O(f)F(ile) condition would never
498   have been satisfied, resulting endless loops.  Detected by the Debian
499   package build bot who hung endlessly when running "$ make test".
500   [f43e04e]
502 - Fixes to false signal handler restoration, partially false forever.
503   [0948199,364bc48]
505 - Fix crashes in the error path of Zopen().  If a de-/compressor fails
506   Heirloom mailx would crash, and S-nail would have crashed in the debug
507   path and print "Alert: Invalid file pointer" in optimized code.  Since
508   S-nail allows *file-hook-{load,save}-EXTENSION* the situation is much
509   worse, however. [8e7f0f4]
511 - Don't crash in `varedit' when $EDITOR doesn't start up. [5a5350b]
513 - The build system now sorts source files in order to honour
514   <https://reproducible-builds.org/>. [a939517]
516 - The build script has seen improvements.  The (mysterious) hangs in VMs
517   are gone now that i have switched configuration evaluation to awk(1)
518   thanks to a suggestion by Aharon Robbins.  In fact doing "$ make
519   CC=tcc devel" now takes the same time all-in-all that the mentioned
520   evalution took alone. [fa2e248]  (Aharon Robbins)
522   This is true even if we know do a lot more of run tests instead of
523   plain link tests for native environment detection since the GNU
524   C library monster uses empty ENOSYS stubs for system calls it doesn't
525   provide.  This is the reason why the Debian kFreeBSD S-nail package
526   doesn't work out by now.  We are not aware of booting different
527   kernels with different feature sets than what we detected upon compile
528   time, though.  I don't think we ever will. [3ee2d4c]
530 ChangeLog (purely technical)
531 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
533 - Dotlock file locking now ignores lock file creation failures on
534   readonly filesystems.  Since the mailbox will be degraded to read-only
535   no dotlock file is needed. [40785bc]
537   And that really hurts: [3517800]!  On Solaris NAME_MAX is set to the
538   minimum that POSIX allows (14), and we were not really prepared for
539   that.  I.e., the lock for /var/mail/sdaoden would be
540   /var/mail/sdaoden.lock, we require at least one more byte for safe
541   lock file creation and yet included the terminating NUL in the
542   calculation, and whoops, dotlocking failed because of ENAMETOOLONG!
543   So do use pathconf(2) _exclusively_ if that succeeds to give an
544   answer.  And we still have room for improvements that i as a C++
545   programmer with speedy dynamic Str objects would never thought i have
546   to deal with.
548 - Fix pathconf(2) usage. [31ce3e1]  (Not wrong: Martin Sebor)
550 - First step to use the new *at() series of system-calls if available,
551   inspired by (Philip Guenther). [topic/time]
553 v14.8.5 ("Hen Harrier"), 2015-09-05
554 -----------------------------------
556 Credits John Dodson, Claudio Cappelli.
558 We welcome Claudio Cappelli in THANKS.
560 NOTES, ChangeLog (packager-affine)
561 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
563 - I've forgotten to add obsoletion warning messages in v14.8.4, so
564   running with enabled -d/*debug* -vv/2x*verbose* may be useful.
565   Sorry! [b3e34db]
567 - A series of bug FIXes (which caused the "Hen Harrier" in the end):
569   . v14.8.4 bug: macro content will be added to the history. [28672e5]
571   . Fallout of massive not-yet-dead style and control flow change series
572     in February 2014, I.: the close-on-exec bit of temporary file
573     descriptors wasn't set. [8f58404]
575   . Fallout of massive not-yet-dead style and control flow change series
576     in February 2014, II.: temporary files were always created in the
577     current directory.  Aloha, heh. [edc12c8]
579   . v14.8.4 bug: when `resend'ing messages a crash would happen when
580     generating the Message-Id: (control flow messed up when hastily
581     implementing extended -t parsing). [9e63ae6]
582     (Hello, Bob Tennent: i finally have added at least a simple `resend'
583     test.  Don't your worry.)
585   . v14.8.4 bug: plugged a file descriptor leak in the dotlock code (one
586     side of the control pipe was leaked upon success; there you see how
587     large ulimit(3) limits are by default today). [ed5c8cf]
589 - When using -t and a template message recipients given on the command
590   line will now be joined into the message instead of being discarded.
591   [9eb4cbf]
593 ChangeLog
594 ^^^^^^^^^
596 - The `set' command will now mark out assembled variables if *debug* or
597   2x*verbose* is set. [2b6e64a]
599 - Added *smime-cipher* @433 option (i.e., generic variant of
600   *smime-cipher-USER@HOST*). [58804ea]
602 - Messages will now _only_ be saved in *DEAD* if *save* is set (POSIX).
603   [3fefac9]
605 - The (pretty useless for now) `pipe' command will now also print the
606   overall message info (it printed MIME part infos already). [e0a8196]
608 - NAIL_FILENAME_GENERATED is now nothing but a random string. [36097df]
610 - *debug* now implies no*record* and no*save*. [ca9f512]
612 - After almost three years i've finally heard what John Dodson said and
613   changed/restored behaviour of plain "address" message specifications
614   to reflect the original intent (and a bit POSIX) so we now have
615     A case-insensitive “any substring matches” search against the
616     ‘From:’ header, which will match addresses (too) even if
617     showname[339] is set [things are different if *allnet* is set]
618   [44cec1f]  (John Dodson)
620 - ..and therefore we need the possibility to somehow perform "exact
621   boundary" matches: for this i've extended the "@" message
622   specification with a header-name "~" prefix and header abbreviations:
623     ‘f’, ‘t’, ‘c’, ‘b’ and ‘s’ will match ‘From’, ‘To’, ‘Cc’, ‘Bcc’ and
624     ‘Subject’, respectively and case-insensitively.
625   And:
626     This message specification performs full text comparison, but even
627     with regular expression support it is almost impossible to write a
628     search expression that savely matches only a specific address
629     domain.  To request that the content of the header is treated as a
630     list of addresses, and to strip those down to the plain email
631     address which the search expression is to be matched against, pre‐
632     fix the header name (abbreviation) with a tilde ‘~’:
633       '@~f@@a\.safe\.domain\.match$'
634   [50c2816]
636 - New option: *sendmail-no-default-arguments* @426 [d983036]
637   (Claudio Cappelli)
639 - Do no longer make a difference in "no mail for user" and "missing
640   system mailbox".  The latter caused yet an annoying error message even
641   with *emptystart*. [7abff87]
643 - New command `source_if' @187 is like `source' but don't fails if the
644   file cannot be loaded.  That is to say, we do not yet support
645   "-f FILE@ tests nor `test -f FILE` shell commands for `if', sigh.
646   [893bd5f]
648 ChangeLog (purely technical)
649 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
651 - Unless Gunnar Ritter is directly affected the fourth clause of the BSD
652   copyright has been dropped, as has been done for NetBSD Mail.
653   [b9ea247]
655 - Quoted-printable encoding will avoid printing a soft newline if only
656   a single character is about to follow. [6b31542]
658 - The configuration script now shows what it is doing at the beginning,
659   to overcome those hangs that can be seen especially in VMs. [4c29cea]
661 - The configuration will do an automatic "make clean" when the
662   configuration had been updated. [9706734]
664 - We no longer generate a MIME message unless that is necessary.  I.e.,
665   a plain 7-bit (US-ASCII) message without attachments send from
666   a system daemon is a plain RFC 822/2822/5322 message and doesn't
667   require any MIME header. [824257a]
669 - To avoid that DNS resolver becomes unusable due to ^C interruption.
670   Also fixes a possible leak in non-getaddrinfo(3) codepath (old boxes).
671   [767897a]
673 v14.8.4 ("Nameless bird (shot by Hemingway)", 2015-08-04
674 --------------------------------------------------------
676 Thanks for Jérémie Courrèges-Anglas for beating me to it.
678 NOTES, ChangeLog (packager-affine)
679 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
681 - Added support for the (BSD-licensed) idnkit[1] IDNA library which is
682   now in the base system of DragonFly BSD.  We still only support
683   encoding, though.  (And assume the hostname is in locale encoding.)
684   [cbded82,22ac479]
686     [1] <https://www.nic.ad.jp/ja/idn/idnkit/download/>
688 - I have rewritten the privilege-separated dotlock helper program,
689   because among others a SETGID one is of no use in todays world.
690   So it is now SETUID to the new PRIVSEP_USER.
692   . WANT_PRIVSEP and PRIVSEP_GROUP have been dropped.
694   . New option: WANT_DOTLOCK, by default enabled.
695     It is henceforth possible to strip any dotlock code off S-nail.
696     So either S-nail has complete dotlock support, including the
697     privilege-separated dotlock helper, or none at all.
699   . New variable: PRIVSEP_USER, by default "root".
700     It must be a privileged user that can be used to implement the new
701     strategy: we create the dotlock file and then fchown(2) it to the
702     UID and GID of the mailbox that we created it for.  Like this the
703     owner of the mailbox (remember %USER, $USER, -u USER ..) will be
704     capable to remove the lock file herself.  Or himself.
706   . No dotlocking was performed for reading, only for writing.  I've
707     changed this.  We also didn't perform any (file) locking at all when
708     updating non system-mailboxes, which i have changed, too.
710   . Fixed horrific bug: on systems without realpath(3), e.g., Solaris 9,
711     S-nail would not resolve symbolic links on the mailbox to lock,
712     potentially creating the lock file in the wrong directory.
714   . We now compare the inode/device/etc. of the mailbox file with the
715     information we collected a lot earlier from the open mailbox file
716     descriptor, and bail if they are not identical, to reduce attach
717     surface.
719   . The privsep helper now re-checks that it is capable to read (or
720     read/write) the mailbox it is creating a dotlock for, to reduce the
721     chance of being misused (by itself).  I.e., it does so before
722     raising its privileges, say.
724   [d5ec3cb,b29e2c8]
726 - The predefined CONFIG=urations have been changed a bit and now
727   "require" more options than they did before.
729 - Renamed WANT_ALL_SSL_ALGORITHMS to WANT_SSL_ALL_ALGORITHMS.
730   That was a no-brainer, default of "yes" remains, but it now can also
731   be "require"d. [910849e]
733 - The GitLab project repository URL has been changed and now is
734   <https://gitlab.com/sdaoden/s-nail.git> (leave off ".git" for browsing
735   purposes).
737 ChangeLog
738 ^^^^^^^^^
740 - It has become possible to fixate the input character set of
741   attachments from the command line (without going over ~@):
742   when the -a @39 option cannot access(2) the file to be attached it
743   searches the filename for an equals-sign "=" and splits into filename
744   and character set shall it find one.  A character set defined like
745   this is "fixated" and therefore no character set conversion occurs.
747     $ echo body |
748     ./s-nail -d -s subject du@auch \
749       -aversion.h -aversion.h=KoI8-r -aversion.h=LaTin1 -aversion.h
751   >>> Content-Type: text/x-chdr; charset=US-ASCII
752   >>> Content-Type: text/x-chdr; charset=KoI8-r
753   >>> Content-Type: text/x-chdr; charset=LaTin1
754   >>> Content-Type: text/x-chdr; charset=US-ASCII
756   [1f07d9e,804e561]
758 - In *debug* mode the content of the message that would have been sent
759   is printed on standard error not only in *smtp*, but also MTA mode.
760   E.g., as in the example above. [c106f35]
762 - S/MIME oops: S-nail yet didn't test for the "application/pkcs7-mime"
763   MIME type at all, but only for "/x-pkcs7-mime" (pre-standardized
764   variant), so that S/MIME messages generated by more modern MUAs (e.g.
765   Alpine) wouldn't have been understood!
766   And we do now use that MIME type ourself, as standardized by RFC
767   5751.  However, we are still stupid and don't handle a signed message
768   inside a multipart/mixed message, neither do we support fully
769   encrypted messages (nothing but rfc822 member) etc. [10c2b16]
771 - *smime-cipher-USER@HOST* @431 values changed to versions without
772   hyphen, as that is what OpenSSL uses: e.g., AES256 not AES-256; the
773   latter versions are no longer documented and will be dropped with
774   v15.0. [f2c6eec]
776 - New variable *smime-sign-message-digest* [-USER@HOST] @437 can be used
777   to define the message digest for S/MIME signing.  RFC 5751 mandates
778   a default of SHA1, by default available are also SHA256, SHA512,
779   SHA384 and SHA224, MD5 may be available, dependent on OpenSSL.
780   With WANT_SSL_ALL_ALGORITHMS more digests may be available. [2f6dac3]
782 - Using NAIL_FILENAME_GENERATED was prevented since some time since it
783   ended up longer than NAME_MAX (ENAMETOOLONG). [3bcbbfc,f632b5b]
785 - Heavily rewritten manual section "Signed and encrypted messages with
786   S/MIME" @35, giving a ready-to-go example for CAcert.org.
788 - Nicer output for `help' @126 / `?' @74 when given an argument:
789   if that is a command ghost we search for the expansion and do print
790   the (further expansion and) help for that if possible [cea8c20]:
792     ?0[]? ?save
793     save: Append <message-list> to <file>
794     ?0[]? ?s
795     s (save): Append <message-list> to <file>
796     ?0[]? gh s s
797     ?0[]? ?s
798     s -> s (save): Append <message-list> to <file>
800 - No longer allowing recursive commands in macros to avoid that the
801   following can crash us (check can be bypassed):
803       ? define ouch {
804         echo ouch
805         reply 2
806       }
807       ? reply
808       ~:call ouch
810   This is a pity because "? call ouch" does no longer cause a reply,
811   but the real healing will take time.
812   Also the `source' command is now actively disabled during macro
813   evaluation -- this only works(/ed) by accidence and anyway non-
814   synchronously (the `source'd file will be loaded after the macro
815   evaluation has finished).  The real healing for this is heavy stuff
816   and will remove a smart and fantastic idea from before 1979, but it
817   won't work out with macro support (see commit message for more upon
818   interest). [5461a30]
820 - And `source' will be actively forbidden in compose mode, too.  It
821   never worked the way it should. [abd388c]
823 - Did -t @60 ever work for real?  Now it does.
824   Even better it now "supports" some more header fields (References:,
825   In-Reply-To:, Message-ID:, and Mail-Followup-To:, but the latter will
826   be subject of a nice followup content massage) -- S-nail can
827   henceforth be used for git(1)s send-email command.
828   We also improved the interdependency of -t (with[out] From:, Sender:),
829   -r, *from* and *sender*, but i don't say it is perfect yet.
830   [6842f12,631d402,a86ca2d]
832 - Completely reworked *expandaddr* @373 handling, and you can now define
833   *exactly* what you want, e.g., "fail,-all,+addr,+file" will only allow
834   mail address or file recipients and hard error out otherwise.
835   Note that in order to make that work "restrict" has been changed to be
836   effectively "restrict,-all,+name,+addr", which matters in, e.g.,
837   "fail,-all,+file,restrict" which therefore truly is "restrict,fail"!
839   Even in conjunction with -t you should now see proper (-d / *debug*,
840   -v / *verbose*) messages for *expandaddr* caused address stripping,
841   or, with "fail", hard errors. [8668be3]
843 ChangeLog (purely technical)
844 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
846 - We again allow Message-Id:s to start with a leading slash, as in
847   "/p/forge/site-support/10.../...". [143372a]
849 - We now support multiline values in make.rc: to do so, escape the
850   newlines with a backslash "\", e.g. [621cbed,9cf4e7b]
852     MAILSPOOL=`\
853        if [ -d /var/spool/mail ]; then \
854           echo /var/spool/mail;\
855        else \
856           echo /var/mail;\
857        fi`
859 - Lowered the memory pressure caused by malicious spam messages that
860   place hundreds of references into the References: header body.
861   And we don't use alloca(3) no more for such things, in order to lower
862   stack usage. [1c4b8c9,47a1a5c]
864 v14.8.3 ("Startled chicken"), 2015-07-05
865 ----------------------------------------
867 Credits go to Martin Neitzel!
869 NOTES, ChangeLog (packager-affine)
870 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
872 - Prefilling INCS and LIBS is finally honoured by the build system, just
873   as documented. [9a34822]
875 - In place of "packager-install" "doinstall" will also do.
877 - New `make.rc' option: WANT_ERRORS, by default enabled.
878   Will enable the new command `errors' @105 (#_105) and an error message
879   queue ring: error messages will no longer get lost but duplicated into
880   the queue, to be displayed in interactive mode via `errors'.  This is
881   a finite ring which rotates oldest messages if it full.
882   [topic/errors]
884 - S-nail no longer offers hooks for group identity switching: it no
885   longer makes sense to install it SETGID to a mail group (shall anyone
886   has done so). [ac42d24]
888 - New `make.rc' option: WANT_PRIVSEP, by default enabled.
889   The dotlock'ing has been completely rewritten (see `make.rc' for
890   a longer explanation of traditional Unix mailspool locking, please).
892   In order to be able to create lock files in *any* SETGID mailspool
893   directory in which user system mailboxes may reside S-nail now ships
894   with a privilege-separated mini dotlock program (source in
895   `privsep.c'), which will be installed in the new also LIBEXECDIR (as
896   YOUR_MUA_NAME-privsep) SETGID to the group given by the also new
897   PRIVSEP_GROUP (default "mail").
899   This dotlock program will be used whenever a mailbox has to be
900   dotlocked which is owned by group that is not the group of the user
901   who is running S-nail, assuming that the file in question resides in
902   a SETGID mailspool directory.
904   The new variable *dotlock-ignore-error* @294 (#_294) now controls
905   wether it is a failure if creation of a dotlock file is not possible.
906   This variable is by default enabled if WANT_PRIVSEP is false.
907   [topic/dotlock]
909 ChangeLog
910 ^^^^^^^^^
912 - Fix file locking, which was broken since v14.8. [7f8ebc0]
913   (Martin Neitzel)
915 - -e now works with given boxes; -e is mutual exclusive with -H and -L;
916   and then any of -e, -H and -L causes the mailbox opened in readonly
917   mode. [3bb05a2, 2cf15c1]
919 - In *debug* mode no process will be started for a set *smtp*, but
920   instead the message will be directly generated (on the error channel).
921   Also GSS-API authentication will no longer be performed even with
922   enabled debug, oops. [3333d71]
924 ChangeLog (purely technical)
925 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
927 - A readonly IMAP box is opened via EXAMINE not SELECT. [2d5259c]
929 - snprintf(3) and vsnprintf(3) are now required preconditions. [c58c7e9]
931 v14.8.2 ("Wandering albatross"), 2015-06-17
932 -------------------------------------------
934 Many thanks Bob Tennent, for reporting and testing!
936 NOTES, ChangeLog (packager-affine)
937 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
939 - Configuration will now find clock_gettime(2) in -lrt and
940   gettimeofday(2) as such on Linux. [47c9ea7,5e248d2,df7d77f]
941   (Bob Tennent)
943 - MANDIR now defaults to ${PREFIX}/share/man (not ${PREFIX}/man)
944   [6371740]
946 ChangeLog
947 ^^^^^^^^^
949 -  Added missing condition clause in `if' expression parsing
950    [74c7cac,5da6d4d]:
952     ?0[ +mbox]? if $du @@ hey
953     ?0[ +mbox]? endif
954     -->
955     ?0[ +mbox]? if $du @@ hey
956     `if' conditional: unrecognized condition -- near "du"
957        Expression: $du @@ hey
958        Left to parse: $du @@ hey
959     ?1[ +mbox]? endif
961 - Ooops, fix pipe-TYPE/SUBTYPE @403 with value "@" (a.k.a. treat as
962   plain text and display "as is"): i've broken that once i've introduced
963   the extended type markers for the `mimetype' command.  Must have been
964   a Freudian error, sorry! [ea655de]
966 - Fix a bug introduced in nail 9.29, 2001-12-10: a temporary buffer is
967   closed with fclose() even though it is a registered file that instead
968   needs to be closed via Fclose().  This effectively results in
969   a double-fclose(3) of the underlaying file descriptor once the
970   registered files are cleaned up next, which happens either after
971   signal interruption and, since [65e0510] as of 2015-05-21, whenever
972   the command loop ticks. [97fcb97]  (Bob Tennent)
974 v14.8.1 ("Tristan albatross"), 2015-06-11
975 -----------------------------------------
977 Kudos!
978 Ypnose, Tarqi Kazan, Dagobert Michelsen and OpenCSW.org, Gianluca
979 Ramunno, Bob Tennent.
981 We welcome Dagobert Michelsen in THANKS.
983 NOTES, ChangeLog (packager-affine)
984 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
986 $ In all the following noticable changes to the release candidate are
987 $ marked with a $ in the first column
989 - We have been ported to Sun Solaris!
990   Thanks to Dagobert Michelsen for giving me an account on OpenCSW.org!
992 - The build system will now really find strip(1). [54e91c4]
994 - WANT_TERMCAP fix: we simply passed tputs(3) a pointer to putchar(3)
995   though that may be a macro etc. [cc65bc3]
997 - The following variables can be used to overwrite utilities needed
998   during configuration and build:
1000     MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=, cksum=, grep=, mkdir=,
1001     mv=, tee=, rm=, sed=, tr=
1003   Note that rm(1), sed(1) and tr(1) are needed before `make.rc' is read.
1004   Fix: these will now also affect "make test".
1006 - WANT_AUTOCC now no longer sets compiler flags as of experience, but
1007   compiles a test program to actually detect wether the compiler will
1008   swallow the flag.  This increases configuration time quite a bit.
1009   Users who really did use "make devel" possibly want to use "make
1010   CONFIG=DEVEL" followed by "make build" now.
1011   Note we now also test for -fPIE as well as relro,now,noexecstack.
1013 - WANT_SPAM_SPAMD is now decoupled from WANT_SOCKETS. [d247d86]
1015 - The configuration now also detects any changes on PATH, C_INCLUDE_PATH
1016   and LD_LIBRARY. [1038028]
1018 ChangeLog
1019 ^^^^^^^^^
1021 - Fixed importing of SHELL/LISTER/PAGER variables from the program
1022   environment. [940c7f1]  (Ypnose)
1024 - Moved -X @64 command line option handling before attachment
1025   evaluation, so that, e.g., `mimetype's registered via it will already
1026   be seen when classifying attachments. [5d9742f]
1028 - Honour *asksign* @274 again, even if *askatend* @270 or *bsdcompat* @281
1029   are not set.  This also changes *askattach* @271 as we'll only ask for
1030   addition of attachments if there are none yet. [e054d6a]  (Tarqi Kazan)
1032 - Support OpenSSL 1.1.0 and above: it obsoletes the more-than-a-decade
1033   old SSLv23_client_method() in favour of a new TLS_client_method()
1034   (instead of using some "magical" constant like, say, "SSL_METHOD_ANY",
1035   but who am i). [c35b567]
1037 - Generic file (mailbox) load and save hooks have been introduced:
1038   *file-hook-(load|save)-EXTENSION* @374,@375, e.g.:
1040     set file-hook-load-xy='echo >&2 XY-LOAD; gzip -cd' \
1041         file-hook-save-xy='echo >&2 XY-SAVE; gzip -c' \
1042         record=+null-sent.xy
1044   One could think about using all-encrypted mailboxes, or the like.
1045   Note that before v15.0 these variables may not be changed while
1046   a mailbox handled by these hooks is open. [b4c2c37]  (Tarqi Kazan)
1048 - When DNS resolving fails we now print error messages.
1049   And then, if it fails because of an unknown service (protocol), we
1050   check for the protocol and retry shall we have a well-known port
1051   number builtin (smtp, submission, smtps, pop3, pop3s, imap, imaps).
1052   [5f52370, (3f189f9)]  It is not wrong to credit (Gianluca Ramunno)
1054 - One may now force treatment of addresses as files with the new "./"
1055   or "/" prefixes -- until now it wasn't possible to address files if
1056   the addressee includes an at sign, now "./me@here.com" will do, just
1057   as will "/me@here.com". [2cf5890,0da473f]  (Bob Tennent)
1059 - Fix *record-resent* @329, which never made it to *record* @414 since
1060   [a11935b], but instead save the message in a file named after the
1061   addressee! [a82af9f]  (Bob Tennent)
1063 - Fixed signal handler uninstallation in sopen() (DNS lookup and socket
1064   creation): v14.8.0 could be forced in endless loop after failed DNS
1065   lookups due to this. [3cca23b]
1067 - Fixed possible double-free (causing a crash) after failed SSL
1068   certificate verification (*ssl-verify*=strict etc.) with OpenSSL
1069   versions that support SSL_CONF_CTX (1.0.2+). [c691726]
1071 - Assorted changes:
1073   . The builtin HTML filter will now silently discard carriage-return
1074     characters (looks better in e.g. less(1)). [cf4d800]
1075   . When reopening the same box we now recognize if changes had been
1076     written, forcing a reread of the box in order to display the actual
1077     real content. [7dfbd38,0835212,a15dfed]
1078   . `netrc' output changed, so that the output could (in theory) be fed
1079     back into S-nail again in order to gain the same settings. [a9a2722]
1080   . *pop3-keepalive* @410 gained (@USER)?-HOST forms [69cae68]
1081   . *imap-keepalive* @387 gained (@USER)?-HOST forms [9a8c929]
1082   . Do not use the builtin random generator if we find a suitable one in
1083     the host environment. [0e01aeb,6bcb430,fc846c6]  (Bob Tennent)
1084   . The builtin HTML filter will now also expand entities in parameter
1085     names. [8d16dc0]
1086 $ . *crt* will now only be checked when attached to a terminal device;
1087 $   and no*crt* will now be honoured. [2508c32]
1089 ChangeLog (purely technical)
1090 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1092 - Solaris port resulted in a lot of changesets for the build system.
1093 - I didn't use git(1) rebasing and the [crawl] branch but only [master].
1094   And see where that ended: S-nail would have 10000 fossil commits!
1095 - Plugged some memory leaks.
1097 v14.8.0 ("Albatros"), 2015-04-30
1098 --------------------------------
1100 Puuuh!
1101 I'm glad and happy to announce "Albatros" after about seven months of
1102 development.  Development that brought many new features, bugfixes,
1103 technical overhauling and behaviour tweaking.  Shall you ever have been
1104 interested in BSD Mail or its deriviatives you might want to give it
1105 a try.
1107 "Albatros" is indeed the first version of the codebase as such that
1108 should allow IMAP->Maildir->MBOX->Maildir->IMAP message roundtripping
1109 without causing possible message splitting due to faulty From_
1110 detection / encoding.  It also generates compliant MIME parameters.
1112 Note there are incompatible changes, documented below.  And it is also
1113 advisable to try out existing configurations with enabled *debug* and/or
1114 *verbose* (-d, -vv) in order to check for "obsoletion" warnings.
1115 (Here "obsolete" would refer to v15, of course.)
1117 Credits and Thanks go to Ypnose, Jérémie Courrèges-Anglas, Josef Jurek,
1118 Gavin Troy, Rich Salz, Martin Brandenburg, Bob Tennent, Dominic Meskys
1119 and Peter Bray.
1121 We welcome Jérémie Courrèges-Anglas, Josef Jurek, Rich Salz,
1122 Dominic Meskys, Peter Bray, Dirk-Wilhelm Peters and Martin Brandenburg
1123 in THANKS.
1124 Apologies to Dirk-Wilhelm Peters and Martin Brandenburg whom i had
1125 forgotten to add to THANKS at first glance once i've added this file; it
1126 was nothing but an oversight.
1128 I also say «Thank you» to GitLab.com – i've mirrored the S-nail git(1)
1129 repository (alongside others) to this free service.
1131 Credits finally also have to go to Coverity.com [1] which helped to find
1132 some bugs; the claim of a 0.00 defect density after a Friday 13th test
1133 must have been an error from their side, though, as well as that the
1134 page [1] still remains at a test with a defect density of 0.01, since
1135 i've posted yet another run that must have ended with 0.00.  (Note the
1136 codebase was tested without IMAP code, i.e. my _next_ developer branch.)
1138   [1] https://scan.coverity.com/projects/444
1140 NOTES, ChangeLog (packager-affine)
1141 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1143 $ In all the following noticable changes to the release candidate are
1144 $ marked with a $ in the first column
1146 + Crawling along the path of CVE [topic/cve-2014-7844.2]: to enable MTA
1147   arguments after -- the new *expandargv* @372 must be set.  More below.
1149 + Even more crawling along the path of the CVE i decided to replace the
1150   wordexp(3) based shell word expansion mechanism with an entirely new,
1151   internally implemented restricted one, but complete mitigation will
1152   take time.  This has consequences in respect to backslash escaping in
1153   file names (shall you ever have used such a filename with S-nail and
1154   its predecessors, of course, and only ...).
1155   Please see [topic/fexpand.2] below.
1157 + A new member for the *attrlist* @351 variable (for unsure spam status).
1158   Since a user setting with a false length will be ignored yet causes an
1159   error message this is a backward incompatible change. [topic/spam.2]
1161 - New make.rc option: WANT_ALL_SSL_ALGORITHMS (enabled).
1162   See make.rc and *smime-cipher-USER@host* @427 below. [topic/ssl.1]
1164 - The make.rc option WANT_IPV6 is gone; we use the respective standard
1165   library facilities automatically whenever possible. [999e79a]
1167 - New make.rc option: WANT_TERMCAP (disabled).
1168   See *term-ca-mode* @345 below.  [topic/termcap]
1170 - The make.rc option WANT_SPAM has been dropped.  Instead we have (see
1171   [topic/spam.2] below for more):
1173   . WANT_SPAM_SPAMC (default off):
1174     Rather identical to the former WANT_SPAM (interaction with spamc(1)
1175     from spamassassin(1)), but internally improved.
1176   . WANT_SPAM_SPAMD (default off):
1177     Direct interaction with spamd(1) from spamassassin(1) via a local
1178     unix(4) domain socket.
1179   . WANT_SPAM_FILTER (default on):
1180     Freely configurable hook programs, e.g., bogofilter(1).
1182 - It turned out that the manual wasn't mandb(1) compatible. [f5ab838]
1184 - New make.rc option: WANT_FILTER_HTML_TAGSOUP (enabled).
1185   S-nail now ships with a very primitive HTML-to-text converter.
1186   It'll be used for HTML parts automatically if no pipe handler is
1187   installed (and the builtin mime.types haven't been changed).
1188   This works because of the new TYPEMARKER extension to mime.types(5) as
1189   documented for [topic/mime.types.2] below.
1190   (It is quite experimental but i think it rocks except it can be fooled
1191   since it doesn't know about double quoted strings, e.g., <a href=""
1192   onmouseover='javascript:alert("> This is plain text you see, oops");'>.
1193 $ Yet it is ment for displaying HTML mails, and it works really well.
1194 $ It doesn't support non-standard type="quote" attributes nor even-more
1195 $ non-standard CSS classes "gmail_quote" or whatever it's name was --
1196 $ these are used in the wild to generate automatic mail quoting, which
1197 $ has resulted in an immense amount of top-posting; but maybe there will
1198 $ be a S-nail v14.8.1 which will implement those, to ease the pain.
1199   [topic/html-tagsoup]
1201 $- List output of `alias' @78, `ghost' @123 and `shortcut' @181
1202 $ uses a new syntax that should (in theory) make it possible to feed
1203 $ the output back into S-nail. [2913df3]
1204 $ Ditto `set' @178 unless *bsdcompat* or *bsdset* are set. [373cc8a]
1206 $- *keep* @308 will also affect secondary mailboxes (because *emptybox*
1207 $ has been obsoleted, see below). [5fa5f8b]
1209 $- New make.rc option: WANT_FORCED_STACKPROT (enabled with WANT_DEVEL or
1210 $ WANT_DEBUG).
1211 $ In conjunction with WANT_AUTOCC this will trigger stack protectors
1212 $ if the detected compiler does support them.  (Before they were only
1213 $ enabled if WANT_DEBUG was set, automatically.)
1215 + v14.8 is the last release with IMAP support, which has been removed
1216   from the developer's [crawl] branch for quite some time already.
1217   He really hopes he can affort to readd support sometime after v15.0.
1219 ChangeLog
1220 ^^^^^^^^^
1222 - S-nail now knows about named booleans (e.g., `localopts' @133 or
1223   interactive approval prompts can now be given any of 1/yes/true/on or
1224   0/no/false/off, case-insensitively; note this is true for the make.rc
1225 $ system, too) and so-called "quad" options (either normal boolean or
1226 $ "ask-BOOLEAN", which, in interactive context, will be prompted with
1227 $ default values; the default value is chosen in non-interactive mode).
1228 $ (on/off support not in the RC.)
1229   [topic/xify]
1231 - The `if' @128 combo:
1233   . gained <, >, <= and >= tests;
1234     ==, !=, <, <=, >=, > will try to convert their arguments to numbers
1235     and perform their test numerically, if possible, [143d409]
1236   . `if' supports boolean (as above) arguments, [topic/ifpimp]
1237   . `if 1'+ return value fixed, [topic/ifpimp]
1238   . `if'+: on syntax error, NOOP anything 'till `endif', [topic/ifpimp]
1239   . `if'+ now support bracket groups, AND-OR lists and unary ! (not),
1240     note that the separating spaces are required: [topic/ifpimp]
1242       if [ [ true ] && [ [ $debug ] || [ $verbose ] ] ]
1243         echo Noisy, noisy
1244       endif
1245       if true && $debug || $verbose
1246         echo Left associativity, as is known from the shell
1247       endif
1248       if ! ! true && ! [ ! $debug && ! $verbose ]
1249         echo Unary operator support
1250       endif
1252   . `if'+ now support new case-insensitive (ASCII) substring operators
1253     =@ and !@: [topic/ifpimp]
1255       if $features =@ "regex"
1256         if $TERM =~ "^xterm.*"
1257           echo ..in an X terminal
1258         endif
1259       endif
1261 $ . `if'+: the three argument forms can now be given variables also on
1262 $   the right hand side: [topic/ifpimp]
1264 $     set xtest='^xterm.*'
1265 $     if $TERM =~ $xtest
1266 $       echo Variables as right hand value
1267 $     endif
1269 - `unalias' @198 learned that * means "all aliases".
1270   Fixed: faulty list-head relinking caused "dead" aliases (since ever)
1271   [topic/names]
1273 - `unshortcut' @219 learned that * means "all shortcuts".
1274   `shortcut' @181 in turn can now define multiple shortcuts in one go
1275   [topic/names]:
1277     ?0[ /var/mail/steffen]? sho you 'any one' me 'no "one"'
1278     ?0[ /var/mail/steffen]? sho
1279     shortcut me "no \"one\""
1280     shortcut you "any one"
1281     ?0[ /var/mail/steffen]? unsho*
1282     ?0[ /var/mail/steffen]? sho
1283     ?0[ /var/mail/steffen]?
1285 - S-nail learned how to deal with mailing-lists in respect to
1286   Mail-Followup-To headers etc. (manual: "Mailing lists" @21):
1288   . new commands `(un)?ml(list|subscribe)' to let S-nail decide which
1289     addresses are mailing-lists, [topic/names]
1290   . *headline* learned %T format to display message recipient flags:
1291     "L" for a mailing-list, "S" for a subscribed one, [topic/names]
1292   . new variable *followup-to-honour*, [topic/mft]
1293   . new variable *reply-to-honour*, [topic/mft]
1294   . new command `Lreply', forcing a list-only `reply' if possible.
1295     When `Lreply'ing to messages which seem to originate from
1296     mailing-lists (contain a "List-Post:" header), then S-nail will
1297     treat the list address as a known mailing list (as via `mlist').
1299     (It is advisable to try out several different combinations of non-/
1300     subscribed mailing-lists in conjunction with `reply', `Reply' and
1301     `Lreply' with *debug* set in order to get used to how S-nail will
1302     modify the address lists; the results should be quite logical
1303     though.) [topic/mft]
1304   . For convenience `reply' and `Lreply' can now be used to reply to
1305     multiple messages in one go (each message will still be handled by
1306     itself, we simply start over internally). [topic/mft]
1308 - `unset' @217 no longer "fails" for unset variables, but only prints
1309   a message in *debug* or *verbose* mode.  This changes traditional,
1310   decade-old behaviour, but shells don't even say something in (*debug*
1311   or) *verbose* mode, and it really simplifies things. [topic/okeys-attr]
1313 - SSL/TLS changes: [topic/ssl.1]
1315   . new variables: *ssl-cert-HOST* @451, *ssl-key-HOST* @456,
1316     *ssl-method-HOST* @457, *ssl-verify-HOST* @461,
1317   . *ssl-v2-allow* has been dropped,
1318   . *ssl-verify* @461 and *smime-cipher-USER@HOST* @427 use
1319     case-insensitive matching for value checks,
1320   . new variable-chain: *ssl-protocol* @458 (the introduction of which
1321     obsoletes *ssl-method* @457, see below),
1322   . new variants of *ssl-cipher-list* @452: *ssl-cipher-list-USER@HOST*,
1323     *ssl-cipher-list-HOST*,
1324   . new variable: *ssl-config-file* @453,
1325   . *smime-cipher-USER@HOST* @427 dropped builtin support for the
1326     obsolete RC2-40 and RC2-64 ciphers -- use the make.rc option
1327     WANT_ALL_SSL_ALGORITHMS to readd support,
1328   . with SSL_CONF_CTX support (OpenSSL v1.0.2+) the values of the
1329     following variables (and variants) will be parsed by OpenSSL instead
1330     of S-nail, offering more user and packager flexibility:
1331     *ssl-cert* @451, *ssl-cipher-list* @452, *ssl-key* @456,
1332     *ssl-protocol* @458.
1334     E.g., shall a new OpenSSL ship with TLS v1.3 S-nail doesn't need to
1335     be adjusted in order to support TLS v1.3, all there is to do is that
1336     the user has to adjust her *ssl-protocol* setting.
1337     This is at least the theory. :)
1338     And maybe OpenSSL (will) offer(s) symbolic constants like "NEWEST"
1339     or "SAFEST".
1341 - Folder hooks have been extended:
1343   . if there was no *folder-hook-FULLNAME* @376 we'll try
1344     *folder-hook-+NAME* if the mailbox NAME resides in *folder*, e.g.,
1345     the author has "folder-hook-+sent=MACRO" and all his *record*
1346     variables are "record=+sent", therefore MACRO can be shared in
1347     between all accounts with a single hook definition. [a5a4d89]
1348   . `localopts' @133 can now be used in folder hooks: the covered
1349     settings will be reverted once the folder is left again.
1350 $   (I know for sure someone asked for this long ago, directly after
1351 $   `localopts' came up first, but i couldn't find the corresponding
1352 $   message.  Sorry!) [2c67091]
1354 - More security control à la CVE 2014-7844, possibly for the first time
1355   enabling safe usage of S-nail via CGI: [topic/cve-2014-7844.2]
1357   . fixed *sendmail-arguments* @420 parsing:
1358     *sendmail-arguments*='-F "Dubi Da"' will now result in <"-F" "Dubi
1359     Da"> not <"-F" ""Dubi Da"">,
1360   . new command line argument "-." @67 forcefully terminates options
1361     and enters send mode.  I.e., using this option avoids possible
1362     misinterpretation of the following arguments.
1364     This operation is usually reserved for --, but since S-nail passes
1365     anything after -- to the MTA (but read on) i had to invent something
1366 $   else.  Also, -. forcefully enters send mode, which -- couldn't have
1367 $   been overloaded to do.
1368   . New variable: *expandargv* @372: in equal spirit to *expandaddr* @371
1369     this one is required in order to pass arguments after -- to the MTA.
1370     If set to "fail" existence of such arguments is a hard error,
1371     "restrict" likewise except in interactive mode or in conjunction
1372     with the -~ or -# options.
1373   . *expandaddr* @371: new special value "fail" causes presence of
1374     extended recipient addresses to be treated as a hard error.
1375 $   In fact this is now interpreted as a comma separated list and may
1376 $   also include the string "noalias", disallowing non-network-addresses
1377 $   in the remaining (non-"extended") recipient addresses -- note this
1378 $   applies to system global aliases only, not to those of `alias'
1379 $   (except for their content, of course); "noalias" is a hard error in
1380 $   combination with "fail".
1382 - `unaccount' @197 and `undefine' @201 learned that * means "all
1383   accounts" and "all macros", respectively. [4c09114]
1385 - Spam handling has been rewritten completely, revealing a very old
1386   misbehaviour in nail's subprocess handling (malloc in signal handler).
1387   Please reread the manual section "Handling spam" @37 for more.
1388   The motivation was also that bogofilter(1), sylfilter(1) etc. can
1389   export their databases, so should the author ever find time to
1390   implement spam handling in C like his predecessor it will be possible
1391   to continue to use those databases: [topic/spam.2]
1393   . *headline* @380 format %$ has been fixed,
1394   . when working on multiple messages the operation is cancelled if an
1395     error occurs,
1396   . new variables: *spam-interface* @436 chooses the, well, ...
1397     This one has extensive documentation.  Plus the interface dependent
1398     *spamc-command* @438, *spamc-arguments* @439, *spamc-user* @440,
1399     *spamd-socket* @441, *spamd-user* @442,
1400     *spamfilter-ham* @443, *spamfilter-noham* @444,
1401     *spamfilter-nospam* @445, *spamfilter-rate* @446,
1402     *spamfilter-spam* @447 and *spamfilter-rate-spamscore* @448.
1403   . The *attrlist* @351 variable gained a new slot for an unsure-spam
1404     status (default character is ~).
1405     Messages with that flag can be specified via the :S colon modifier.
1407 - Fix: even though -# @66 implies *sendwait* @335 a user should have the
1408   option to turn *sendwait* off again. [4274bed]
1410 - Completely reworked mime.types(5) handling, note the backward
1411   incompatible drop of `mimetypes': [topic/mime.types.2]
1413   . dropped the `mimetypes' command,
1414   . new commands: `mimetype' @138 and `unmimetype' @209,
1415   . *encoding* @369 is now parsed case-insensitively,
1416   . *mime-counter-evidence* @390 gained new bit 3 to indicate the desire
1417     to forcefully overwrite MIME types if we think we know it better,
1418   . *mimetypes-load-control* @391 gained an extension that can be used to
1419     load more and specific files, which in addition may make use of
1420     a new non-portable S-nail-specific TYPEMARKER extension.  The manual
1421     section "The mime.types files" @32 has been rewritten accordingly.
1422     (In short: mime.types(5) lines can be prefixed by @, @h@ or @H@, for
1423     plain text, builtin HTML filter (plain text fallback), ditto
1424     (without fallback).)
1425 $ . The builtin MIME types now make a lot of use of the @ and @h@
1426 $   TYPEMARKER extensions, so that you possibly can get rid of a lot of
1427 $   pipe-TYPE/SUBTYPE=@ plain-text type hooks, shall you have used them.
1429 - Support for RFC 2231 has been added.  This means that S-nail generates
1430   truly MIME compliant messages and no longer requires help from other
1431   MUAs!  In fact MIME parameter handling has been rewritten completely.
1432   [topic/rfc2231]
1434 - On the long run shell word expansion (via wordexp(3)) will be replaced
1435   by a new, restricted (and thus (hopefully) safer), internally
1436   implemented path expansion mechanism that only supports ~/ -> HOMEDIR
1437   and $SHELLVAR / ${SHELLVAR}.
1438   Since the original expansion is *so* hardwired that'll take time, for
1439   now it is used for attachments only, but here all through the way.
1441   But where it is used already it has consequences regarding backslash
1442   escaping; to improve user experience a bit `~@' @239 will display the
1443   escaped filename so that users only have to hit ENTER to accept paths:
1444   e.g., "diet\ is \curd.txt" will show up as "diet\\ is \\curd.txt".
1445   And, e.g., the test script does the following for RFC 2231 (excerpt):
1447     MAILRC=/dev/null "${SNAIL}" ${ARGS} -Snodot \
1448       -a "ma'ger.txt" -a "mä'ger.txt" \
1449       -a 'diet\\\ is\ \\curd.txt' -a diet \"is\" curd.txt \
1450                                          ^      ^ NOTE: 0x00A0, NBSP
1451       -a ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
1453   The introduction of the manual section "COMMANDS" @5 has been updated
1454   accordingly.  Also see -a @39.  [topic/fexpand.2]
1456 - Assorted changes:
1458   . Multiple crash-causing bugs regarding `source' @185, also if used
1459     via `~:source', have been fixed. [aafb688,6979c73,4c6dfc2]
1460   . The NAILRC environment variable is no longer supported. [104c254]
1461   . The *Replyall* variable has been dropped as it was only an alias
1462     for the POSIX standard *flipr* @296 variable. [topic/mft]
1463   . New variables: *version*, *version-(major|minor|update)*,
1464     *features*. [topic/okeys-attr]
1465   . `varedit' @224 can be used to create variables. [topic/okeys-attr]
1466   . New variable: *charset-unknown-8bit* @357. [9b672f6]
1467   . *smtp-auth* @434 now defaults to "plain" (if *v15-compat* is set).
1468     (Josef Jurek, Gavin Troy) [dcbb31a]
1469   . All obsoleted: *autothread*, `thread' and `unthread'.
1470     Use *autosort*=thread, `sort thread' etc. instead. [ef16f43]
1471   . *showlast* @336 should have gained meaning. [4213d52]  (Gavin Troy)
1472   . If the -r @57 option is given a full name specification (rather
1473     than only an address), pass the MTA the respective address parts
1474     via -F and -f. [dd90c14]
1475 $   Also try to pass -F _and_ -f if an empty argument was given to -r
1476 $   but *from* @378 (or, say, "From:") includes a full name. [5f68921]
1477   . New variable: *term-ca-mode* @345 (for WANT_TERMCAP).  In
1478     interactive mode S-nail can now be forced to use ti and te termcap
1479     entries; in conjunction with a PAGER that does too ... [topic/termcap]
1480   . `ghost' @123 gained a new mode and tweaks (see manual). [8a49b12]
1481   . -r @57 option: fixed -h output and manual. [9a1a303]
1482     (Martin Brandenburg)
1483   . With *debug* or 2x *verbose* command lines (including those read
1484     from files) are now traced. [06042c4]  (Bob Tennent)
1485   . NAIL_TMPDIR (new) and TMPDIR environment variables are now
1486     (guaranteed to be) set in pipe hooks. [a1cfb02]
1487   . "Subject:" Re: trimming: MIME decoding is now performed. [ede7c7d]
1488   . New variants of *pop3-bulk-load* @320: *-[USER@]HOST*. [5f5ae10]
1489   . *crt*=0 @366 now really works. [22f1477]
1490   . Maildir code now uses string relaxation which drastically reduced
1491     memory usage for large mailboxes. [d1c945f]
1492     And for the first time it performs real memory cleanup. [e549110]
1493   . Improved error message on MTA exec failure.  (Dominic Meskys)
1494   . Fix: "setenv noVAR" would have set noVAR. [3c1f886]
1495   . When `setenv' is used to set any of HOME, USER, TMPDIR it'll be
1496     reflected by our internal variables.  (Still hacky as special code
1497     is needed to do so; also "set HOME=x" shadows HOME for "varshow
1498     HOME" instead of being rejected.  Future cleanup work.) [3f03b80]
1499   . Colon modifiers can now be joined, as in "f :uas". [8b6c259]
1500 $ . Maildir code did faulty From_ line detection, resulting in any
1501 $   non-quoted "From " line to start a new message (e.g., when doing
1502 $   things like "copy * MAILDIR" we could have f...ed up completely).
1503 $   Seems to have been added with Heirloom mailx 11.6 ([faf4b65],
1504 $   2004-09-07).  Neither goes credit to Jacob Gelbman nor to Robin
1505 $   Stjerndorff for messages to nail-devel@ on 2015-01-21 and
1506 $   2015-02-20, respectively.  :-)) [ae539c9]
1507 $ . *emptybox* has been obsoleted.  *keep* @308 will also affect
1508 $   secondary mailboxes, and then both only deal with local regular
1509 $   MBOXes anyway, not to e.g., maildir files nor IMAP boxes. [d747c0a]
1510 $ . `unghost' @207 learned that * has to drop all ghosts. [34a92a5]
1511 $ . NAIL_TMPDIR (new) and TMPDIR environment variables are now
1512 $   (guaranteed to be) set for *agent-shell-lookup* @350. [5c3d7b5]
1513 $ . Things like "copy * MAILDIR" from within an IMAP (or POP3?) mailbox
1514 $   to a Maildir mailbox should now work again. [d747c0a]
1515 $ . IMAP code did faulty From_ line detection, resulting in some
1516 $   non-quoted "From " line to start a new message (e.g., when doing
1517 $   things like "copy * MAILDIR" we could have f...ed up completely).
1518 $   Present in Heirloom mailx since ever ([^b4ad9f2]). [66e3c93]
1519 $ . New variable: *mbox-rfc4155* @312: because of all the bugs in From_
1520 $   quoting etc., err, no.  "Albatros" will last.  I've just touched
1521 $   a lot of stuff regarding MBOX writing: From_ quoting (which may
1522 $   happen whenever we save already existent data in a MBOX, shall
1523 $   the original generator not have taken appropriate steps to ensure
1524 $   "false" From_ lines can't happen (S-nail does)) is now definitely
1525 $   POSIX compliant, meaning that we may quote much too much lines.
1526 $   So set *mbox-rfc4155* and we generate RFC 4155 compliant MBOX files,
1527 $   possibly leaving behind backward POSIX-only software. [70ba3ef]
1528 $ . New command line option: "-X cmd" @64 will execute "cmd" right
1529 $   before normal operation starts.  The only option to execute commands
1530 $   in non-interactive mode when reading of resource files has been
1531 $   actively suppressed.  This is an experimental feature. [d202869]
1533 ChangeLog (purely technical)
1534 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1536 . Improved output flushing, avoidance of printing of useless
1537   output (especially smoothens *editalong*). [topic/stdout-fflush]
1538 . String relaxation is now everywhere (but IMAP), the builtin buffer
1539   sizes were reduced to 1/3.
1540 . Again a manual review.  The manual now supports mdocmx(7).
1541 . Using builtin ARC4 pseudo-random for random generation.
1542 . Better signal handling here and there.
1543 . Fixed most "unpluggable memory leaks" by plugging them via chains of
1544   signal handlers and longjmps.  Terrible.  But no more leaks.
1545 . A lot of this and that.  (Really.)
1546 $. Slightly more tolerance for faulty Base64 encoding in message text
1547 $ parts.  No real healing possible today, but requires v15.0 environment.
1548 $ This, however, only affects invalid data that, e.g., OpenSSL doesn't
1549 $ even give any output for! [54137fd,4d59cca]
1551 I didn't make it to improved message selection.
1552 And i also can't seem to find the necessary peace of mind to do a real
1553 review with this codebase, it's always that i start off doing something
1554 non-reviewish; but i'll see the day (what i hope).
1556 Note:
1557 The content has been vaporised.  Ways to access the leakage are
1558 documented in the newest announcement at the top of this file.
1560 # s-ts-mode