Do not terminate MTA args with -- if *sendmail-no-default-arguments* is used
[s-mailx.git] / NEWS
blobc1686deef4bb3046ce857b7122ada4a57ac0dfe2
1 S - n a i l  N e w s
2 ====================
4 In the following numbers in [] reference either the commit SHA1 hash or
5 the name of a topic branch which relate to the NEWS entry;
6 Likewise, numbers after an at-sign @ are mdocmx(7) manual anchor
7 references which allow directly jumping to the given anchor.
9 The complete changelog of commits in between two versions can be
10 inspected by using the git(1) `log' command as shown below, where "OLD"
11 and "NEW" are the two versions to be compared.
13   # All commits:
14   $ git log --reverse --topo-order --abbrev-commit OLD..NEW
15   # Only topic branch headers (--no-merges for content commits only):
16   $ git log --oneline --reverse --topo-order --merges OLD..NEW
17   # Same, but truly accessible:
18   $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW |
19     while read c1 c2 c3 c4 c5 c6; do
20       printf "%-24s: \$ git log --oneline --no-merges ${c1} ^${c2}\n" "${c6}";
21     done
23 v14.8.6 ("Hen Harrier II"), 2015-12-28
24 --------------------------------------
26 A cumulated bugfix release.
28 Credits Hilko Bengen, Salvatore Bonaccorso, Martin Sebor,
29 Aharon Robbins and Philip Guenther.
31 We welcome all credited persons in THANKS.
33 NOTES, ChangeLog (packager-affine)
34 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36 - WANT_AMALGAMATION dependency tracking has been fixed.
37   [0ed139d,8c126a9]
39 - "INSTALL": clarification: "make" OR "make install", NOT "[make &&]
40   make install".  More to come in v14.9.  Also INSTALL now says that the
41   default configuration includes all non-experimental features, whereas
42   the otherwise identical CONFIG=MAXIMAL does include them.
43   (Hilko Bengen)
45 - SENDMAIL will now fallback to /usr/sbin/sendmail if we don't find any
46   executable sendmail(1).  We had some similar issue on ArchLinux, but
47   i failed to deal with the no-sendmail-available case.  sendmail(1) is
48   expected in /usr/sbin on *BSD and according to Debian Policy 11.6.
49   [0e09d5e]  (Salvatore Bonaccorso)
51 - SYSCONFRC no longer includes SYSCONFDIR.  I.e., S-nail now does
52     load(SYSCONFDIR "/" SYSCONFRC);
53   instead of
54     load(SYSCONFRC);
55   It seems only CRUX-Linux is affected, and i've sent a patch. [807f64e]
57 - We now support the TinyCCompiler. [topic/tcc]
59 - And -- ouch! -- fix S-nail on Solaris, again.  It was broken since
60   [3e863c6] (2015-06-23) since necessary linker flags had been
61   overwritten. [fd40d5a,6fe5448]
62   (We also deal with NAME_MAX being the minimum possible now, see below.)
64 ChangeLog
65 ^^^^^^^^^
67 - When `Lreply'ing to multiple messages and using the `~:' tilde command
68   the argument list of the `Lreply' itself would have been overwritten,
69   resulting in crashs. [9f5c403 (+ 1162af5,5f08362)]
71 - Temporarily forbid `mbox' but in a system mailbox.  I hope v14.9 can
72   perform the action gracefully. [781ee34]
74 - On systems with "unsigned char" "char"s S-nail was broken for about
75   two and a half year since an E(nd)O(f)F(ile) condition would never
76   have been satisfied, resulting endless loops.  Detected by the Debian
77   package build bot who hung endlessly when running "$ make test".
78   [f43e04e]
80 - Fixes to false signal handler restoration, partially false forever.
81   [0948199,364bc48]
83 - Fix crashes in the error path of Zopen().  If a de-/compressor fails
84   Heirloom mailx would crash, and S-nail would have crashed in the debug
85   path and print "Alert: Invalid file pointer" in optimized code.  Since
86   S-nail allows *file-hook-{load,save}-EXTENSION* the situation is much
87   worse, however. [8e7f0f4]
89 - Don't crash in `varedit' when $EDITOR doesn't start up. [5a5350b]
91 - The build system now sorts source files in order to honour
92   <https://reproducible-builds.org/>. [a939517]
94 - The build script has seen improvements.  The (mysterious) hangs in VMs
95   are gone now that i have switched configuration evaluation to awk(1)
96   thanks to a suggestion by Aharon Robbins.  In fact doing "$ make
97   CC=tcc devel" now takes the same time all-in-all that the mentioned
98   evalution took alone. [fa2e248]  (Aharon Robbins)
100   This is true even if we know do a lot more of run tests instead of
101   plain link tests for native environment detection since the GNU
102   C library monster uses empty ENOSYS stubs for system calls it doesn't
103   provide.  This is the reason why the Debian kFreeBSD S-nail package
104   doesn't work out by now.  We are not aware of booting different
105   kernels with different feature sets than what we detected upon compile
106   time, though.  I don't think we ever will. [3ee2d4c]
108 ChangeLog (purely technical)
109 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111 - Dotlock file locking now ignores lock file creation failures on
112   readonly filesystems.  Since the mailbox will be degraded to read-only
113   no dotlock file is needed. [40785bc]
115   And that really hurts: [3517800]!  On Solaris NAME_MAX is set to the
116   minimum that POSIX allows (14), and we were not really prepared for
117   that.  I.e., the lock for /var/mail/sdaoden would be
118   /var/mail/sdaoden.lock, we require at least one more byte for safe
119   lock file creation and yet included the terminating NUL in the
120   calculation, and whoops, dotlocking failed because of ENAMETOOLONG!
121   So do use pathconf(2) _exclusively_ if that succeeds to give an
122   answer.  And we still have room for improvements that i as a C++
123   programmer with speedy dynamic Str objects would never thought i have
124   to deal with.
126 - Fix pathconf(2) usage. [31ce3e1]  (Not wrong: Martin Sebor)
128 - First step to use the new *at() series of system-calls if available,
129   inspired by (Philip Guenther). [topic/time]
131 v14.8.5 ("Hen Harrier"), 2015-09-05
132 -----------------------------------
134 Credits John Dodson, Claudio Cappelli.
136 We welcome Claudio Cappelli in THANKS.
138 NOTES, ChangeLog (packager-affine)
139 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
141 - I've forgotten to add obsoletion warning messages in v14.8.4, so
142   running with enabled -d/*debug* -vv/2x*verbose* may be useful.
143   Sorry! [b3e34db]
145 - A series of bug FIXes (which caused the "Hen Harrier" in the end):
147   . v14.8.4 bug: macro content will be added to the history. [28672e5]
149   . Fallout of massive not-yet-dead style and control flow change series
150     in February 2014, I.: the close-on-exec bit of temporary file
151     descriptors wasn't set. [8f58404]
153   . Fallout of massive not-yet-dead style and control flow change series
154     in February 2014, II.: temporary files were always created in the
155     current directory.  Aloha, heh. [edc12c8]
157   . v14.8.4 bug: when `resend'ing messages a crash would happen when
158     generating the Message-Id: (control flow messed up when hastily
159     implementing extended -t parsing). [9e63ae6]
160     (Hello, Bob Tennent: i finally have added at least a simple `resend'
161     test.  Don't your worry.)
163   . v14.8.4 bug: plugged a file descriptor leak in the dotlock code (one
164     side of the control pipe was leaked upon success; there you see how
165     large ulimit(3) limits are by default today). [ed5c8cf]
167 - When using -t and a template message recipients given on the command
168   line will now be joined into the message instead of being discarded.
169   [9eb4cbf]
171 ChangeLog
172 ^^^^^^^^^
174 - The `set' command will now mark out assembled variables if *debug* or
175   2x*verbose* is set. [2b6e64a]
177 - Added *smime-cipher* @433 option (i.e., generic variant of
178   *smime-cipher-USER@HOST*). [58804ea]
180 - Messages will now _only_ be saved in *DEAD* if *save* is set (POSIX).
181   [3fefac9]
183 - The (pretty useless for now) `pipe' command will now also print the
184   overall message info (it printed MIME part infos already). [e0a8196]
186 - NAIL_FILENAME_GENERATED is now nothing but a random string. [36097df]
188 - *debug* now implies no*record* and no*save*. [ca9f512]
190 - After almost three years i've finally heard what John Dodson said and
191   changed/restored behaviour of plain "address" message specifications
192   to reflect the original intent (and a bit POSIX) so we now have
193     A case-insensitive “any substring matches” search against the
194     ‘From:’ header, which will match addresses (too) even if
195     showname[339] is set [things are different if *allnet* is set]
196   [44cec1f]  (John Dodson)
198 - ..and therefore we need the possibility to somehow perform "exact
199   boundary" matches: for this i've extended the "@" message
200   specification with a header-name "~" prefix and header abbreviations:
201     ‘f’, ‘t’, ‘c’, ‘b’ and ‘s’ will match ‘From’, ‘To’, ‘Cc’, ‘Bcc’ and
202     ‘Subject’, respectively and case-insensitively.
203   And:
204     This message specification performs full text comparison, but even
205     with regular expression support it is almost impossible to write a
206     search expression that savely matches only a specific address
207     domain.  To request that the content of the header is treated as a
208     list of addresses, and to strip those down to the plain email
209     address which the search expression is to be matched against, pre‐
210     fix the header name (abbreviation) with a tilde ‘~’:
211       '@~f@@a\.safe\.domain\.match$'
212   [50c2816]
214 - New option: *sendmail-no-default-arguments* @426 [d983036]
215   (Claudio Cappelli)
217 - Do no longer make a difference in "no mail for user" and "missing
218   system mailbox".  The latter caused yet an annoying error message even
219   with *emptystart*. [7abff87]
221 - New command `source_if' @187 is like `source' but don't fails if the
222   file cannot be loaded.  That is to say, we do not yet support
223   "-f FILE@ tests nor `test -f FILE` shell commands for `if', sigh.
224   [893bd5f]
226 ChangeLog (purely technical)
227 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
229 - Unless Gunnar Ritter is directly affected the fourth clause of the BSD
230   copyright has been dropped, as has been done for NetBSD Mail.
231   [b9ea247]
233 - Quoted-printable encoding will avoid printing a soft newline if only
234   a single character is about to follow. [6b31542]
236 - The configuration script now shows what it is doing at the beginning,
237   to overcome those hangs that can be seen especially in VMs. [4c29cea]
239 - The configuration will do an automatic "make clean" when the
240   configuration had been updated. [9706734]
242 - We no longer generate a MIME message unless that is necessary.  I.e.,
243   a plain 7-bit (US-ASCII) message without attachments send from
244   a system daemon is a plain RFC 822/2822/5322 message and doesn't
245   require any MIME header. [824257a]
247 - To avoid that DNS resolver becomes unusable due to ^C interruption.
248   Also fixes a possible leak in non-getaddrinfo(3) codepath (old boxes).
249   [767897a]
251 v14.8.4 ("Nameless bird (shot by Hemingway)", 2015-08-04
252 --------------------------------------------------------
254 Thanks for Jérémie Courrèges-Anglas for beating me to it.
256 NOTES, ChangeLog (packager-affine)
257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
259 - Added support for the (BSD-licensed) idnkit[1] IDNA library which is
260   now in the base system of DragonFly BSD.  We still only support
261   encoding, though.  (And assume the hostname is in locale encoding.)
262   [cbded82,22ac479]
264     [1] <https://www.nic.ad.jp/ja/idn/idnkit/download/>
266 - I have rewritten the privilege-separated dotlock helper program,
267   because among others a SETGID one is of no use in todays world.
268   So it is now SETUID to the new PRIVSEP_USER.
270   . WANT_PRIVSEP and PRIVSEP_GROUP have been dropped.
272   . New option: WANT_DOTLOCK, by default enabled.
273     It is henceforth possible to strip any dotlock code off S-nail.
274     So either S-nail has complete dotlock support, including the
275     privilege-separated dotlock helper, or none at all.
277   . New variable: PRIVSEP_USER, by default "root".
278     It must be a privileged user that can be used to implement the new
279     strategy: we create the dotlock file and then fchown(2) it to the
280     UID and GID of the mailbox that we created it for.  Like this the
281     owner of the mailbox (remember %USER, $USER, -u USER ..) will be
282     capable to remove the lock file herself.  Or himself.
284   . No dotlocking was performed for reading, only for writing.  I've
285     changed this.  We also didn't perform any (file) locking at all when
286     updating non system-mailboxes, which i have changed, too.
288   . Fixed horrific bug: on systems without realpath(3), e.g., Solaris 9,
289     S-nail would not resolve symbolic links on the mailbox to lock,
290     potentially creating the lock file in the wrong directory.
292   . We now compare the inode/device/etc. of the mailbox file with the
293     information we collected a lot earlier from the open mailbox file
294     descriptor, and bail if they are not identical, to reduce attach
295     surface.
297   . The privsep helper now re-checks that it is capable to read (or
298     read/write) the mailbox it is creating a dotlock for, to reduce the
299     chance of being misused (by itself).  I.e., it does so before
300     raising its privileges, say.
302   [d5ec3cb,b29e2c8]
304 - The predefined CONFIG=urations have been changed a bit and now
305   "require" more options than they did before.
307 - Renamed WANT_ALL_SSL_ALGORITHMS to WANT_SSL_ALL_ALGORITHMS.
308   That was a no-brainer, default of "yes" remains, but it now can also
309   be "require"d. [910849e]
311 - The GitLab project repository URL has been changed and now is
312   <https://gitlab.com/sdaoden/s-nail.git> (leave off ".git" for browsing
313   purposes).
315 ChangeLog
316 ^^^^^^^^^
318 - It has become possible to fixate the input character set of
319   attachments from the command line (without going over ~@):
320   when the -a @39 option cannot access(2) the file to be attached it
321   searches the filename for an equals-sign "=" and splits into filename
322   and character set shall it find one.  A character set defined like
323   this is "fixated" and therefore no character set conversion occurs.
325     $ echo body |
326     ./s-nail -d -s subject du@auch \
327       -aversion.h -aversion.h=KoI8-r -aversion.h=LaTin1 -aversion.h
329   >>> Content-Type: text/x-chdr; charset=US-ASCII
330   >>> Content-Type: text/x-chdr; charset=KoI8-r
331   >>> Content-Type: text/x-chdr; charset=LaTin1
332   >>> Content-Type: text/x-chdr; charset=US-ASCII
334   [1f07d9e,804e561]
336 - In *debug* mode the content of the message that would have been sent
337   is printed on standard error not only in *smtp*, but also MTA mode.
338   E.g., as in the example above. [c106f35]
340 - S/MIME oops: S-nail yet didn't test for the "application/pkcs7-mime"
341   MIME type at all, but only for "/x-pkcs7-mime" (pre-standardized
342   variant), so that S/MIME messages generated by more modern MUAs (e.g.
343   Alpine) wouldn't have been understood!
344   And we do now use that MIME type ourself, as standardized by RFC
345   5751.  However, we are still stupid and don't handle a signed message
346   inside a multipart/mixed message, neither do we support fully
347   encrypted messages (nothing but rfc822 member) etc. [10c2b16]
349 - *smime-cipher-USER@HOST* @431 values changed to versions without
350   hyphen, as that is what OpenSSL uses: e.g., AES256 not AES-256; the
351   latter versions are no longer documented and will be dropped with
352   v15.0. [f2c6eec]
354 - New variable *smime-sign-message-digest* [-USER@HOST] @437 can be used
355   to define the message digest for S/MIME signing.  RFC 5751 mandates
356   a default of SHA1, by default available are also SHA256, SHA512,
357   SHA384 and SHA224, MD5 may be available, dependent on OpenSSL.
358   With WANT_SSL_ALL_ALGORITHMS more digests may be available. [2f6dac3]
360 - Using NAIL_FILENAME_GENERATED was prevented since some time since it
361   ended up longer than NAME_MAX (ENAMETOOLONG). [3bcbbfc,f632b5b]
363 - Heavily rewritten manual section "Signed and encrypted messages with
364   S/MIME" @35, giving a ready-to-go example for CAcert.org.
366 - Nicer output for `help' @126 / `?' @74 when given an argument:
367   if that is a command ghost we search for the expansion and do print
368   the (further expansion and) help for that if possible [cea8c20]:
370     ?0[]? ?save
371     save: Append <message-list> to <file>
372     ?0[]? ?s
373     s (save): Append <message-list> to <file>
374     ?0[]? gh s s
375     ?0[]? ?s
376     s -> s (save): Append <message-list> to <file>
378 - No longer allowing recursive commands in macros to avoid that the
379   following can crash us (check can be bypassed):
381       ? define ouch {
382         echo ouch
383         reply 2
384       }
385       ? reply
386       ~:call ouch
388   This is a pity because "? call ouch" does no longer cause a reply,
389   but the real healing will take time.
390   Also the `source' command is now actively disabled during macro
391   evaluation -- this only works(/ed) by accidence and anyway non-
392   synchronously (the `source'd file will be loaded after the macro
393   evaluation has finished).  The real healing for this is heavy stuff
394   and will remove a smart and fantastic idea from before 1979, but it
395   won't work out with macro support (see commit message for more upon
396   interest). [5461a30]
398 - And `source' will be actively forbidden in compose mode, too.  It
399   never worked the way it should. [abd388c]
401 - Did -t @60 ever work for real?  Now it does.
402   Even better it now "supports" some more header fields (References:,
403   In-Reply-To:, Message-ID:, and Mail-Followup-To:, but the latter will
404   be subject of a nice followup content massage) -- S-nail can
405   henceforth be used for git(1)s send-email command.
406   We also improved the interdependency of -t (with[out] From:, Sender:),
407   -r, *from* and *sender*, but i don't say it is perfect yet.
408   [6842f12,631d402,a86ca2d]
410 - Completely reworked *expandaddr* @373 handling, and you can now define
411   *exactly* what you want, e.g., "fail,-all,+addr,+file" will only allow
412   mail address or file recipients and hard error out otherwise.
413   Note that in order to make that work "restrict" has been changed to be
414   effectively "restrict,-all,+name,+addr", which matters in, e.g.,
415   "fail,-all,+file,restrict" which therefore truly is "restrict,fail"!
417   Even in conjunction with -t you should now see proper (-d / *debug*,
418   -v / *verbose*) messages for *expandaddr* caused address stripping,
419   or, with "fail", hard errors. [8668be3]
421 ChangeLog (purely technical)
422 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
424 - We again allow Message-Id:s to start with a leading slash, as in
425   "/p/forge/site-support/10.../...". [143372a]
427 - We now support multiline values in make.rc: to do so, escape the
428   newlines with a backslash "\", e.g. [621cbed,9cf4e7b]
430     MAILSPOOL=`\
431        if [ -d /var/spool/mail ]; then \
432           echo /var/spool/mail;\
433        else \
434           echo /var/mail;\
435        fi`
437 - Lowered the memory pressure caused by malicious spam messages that
438   place hundreds of references into the References: header body.
439   And we don't use alloca(3) no more for such things, in order to lower
440   stack usage. [1c4b8c9,47a1a5c]
442 v14.8.3 ("Startled chicken"), 2015-07-05
443 ----------------------------------------
445 Credits go to Martin Neitzel!
447 NOTES, ChangeLog (packager-affine)
448 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
450 - Prefilling INCS and LIBS is finally honoured by the build system, just
451   as documented. [9a34822]
453 - In place of "packager-install" "doinstall" will also do.
455 - New `make.rc' option: WANT_ERRORS, by default enabled.
456   Will enable the new command `errors' @105 (#_105) and an error message
457   queue ring: error messages will no longer get lost but duplicated into
458   the queue, to be displayed in interactive mode via `errors'.  This is
459   a finite ring which rotates oldest messages if it full.
460   [topic/errors]
462 - S-nail no longer offers hooks for group identity switching: it no
463   longer makes sense to install it SETGID to a mail group (shall anyone
464   has done so). [ac42d24]
466 - New `make.rc' option: WANT_PRIVSEP, by default enabled.
467   The dotlock'ing has been completely rewritten (see `make.rc' for
468   a longer explanation of traditional Unix mailspool locking, please).
470   In order to be able to create lock files in *any* SETGID mailspool
471   directory in which user system mailboxes may reside S-nail now ships
472   with a privilege-separated mini dotlock program (source in
473   `privsep.c'), which will be installed in the new also LIBEXECDIR (as
474   YOUR_MUA_NAME-privsep) SETGID to the group given by the also new
475   PRIVSEP_GROUP (default "mail").
477   This dotlock program will be used whenever a mailbox has to be
478   dotlocked which is owned by group that is not the group of the user
479   who is running S-nail, assuming that the file in question resides in
480   a SETGID mailspool directory.
482   The new variable *dotlock-ignore-error* @294 (#_294) now controls
483   wether it is a failure if creation of a dotlock file is not possible.
484   This variable is by default enabled if WANT_PRIVSEP is false.
485   [topic/dotlock]
487 ChangeLog
488 ^^^^^^^^^
490 - Fix file locking, which was broken since v14.8. [7f8ebc0]
491   (Martin Neitzel)
493 - -e now works with given boxes; -e is mutual exclusive with -H and -L;
494   and then any of -e, -H and -L causes the mailbox opened in readonly
495   mode. [3bb05a2, 2cf15c1]
497 - In *debug* mode no process will be started for a set *smtp*, but
498   instead the message will be directly generated (on the error channel).
499   Also GSS-API authentication will no longer be performed even with
500   enabled debug, oops. [3333d71]
502 ChangeLog (purely technical)
503 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
505 - A readonly IMAP box is opened via EXAMINE not SELECT. [2d5259c]
507 - snprintf(3) and vsnprintf(3) are now required preconditions. [c58c7e9]
509 v14.8.2 ("Wandering albatross"), 2015-06-17
510 -------------------------------------------
512 Many thanks Bob Tennent, for reporting and testing!
514 NOTES, ChangeLog (packager-affine)
515 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
517 - Configuration will now find clock_gettime(2) in -lrt and
518   gettimeofday(2) as such on Linux. [47c9ea7,5e248d2,df7d77f]
519   (Bob Tennent)
521 - MANDIR now defaults to ${PREFIX}/share/man (not ${PREFIX}/man)
522   [6371740]
524 ChangeLog
525 ^^^^^^^^^
527 -  Added missing condition clause in `if' expression parsing
528    [74c7cac,5da6d4d]:
530     ?0[ +mbox]? if $du @@ hey
531     ?0[ +mbox]? endif
532     -->
533     ?0[ +mbox]? if $du @@ hey
534     `if' conditional: unrecognized condition -- near "du"
535        Expression: $du @@ hey
536        Left to parse: $du @@ hey
537     ?1[ +mbox]? endif
539 - Ooops, fix pipe-TYPE/SUBTYPE @403 with value "@" (a.k.a. treat as
540   plain text and display "as is"): i've broken that once i've introduced
541   the extended type markers for the `mimetype' command.  Must have been
542   a Freudian error, sorry! [ea655de]
544 - Fix a bug introduced in nail 9.29, 2001-12-10: a temporary buffer is
545   closed with fclose() even though it is a registered file that instead
546   needs to be closed via Fclose().  This effectively results in
547   a double-fclose(3) of the underlaying file descriptor once the
548   registered files are cleaned up next, which happens either after
549   signal interruption and, since [65e0510] as of 2015-05-21, whenever
550   the command loop ticks. [97fcb97]  (Bob Tennent)
552 v14.8.1 ("Tristan albatross"), 2015-06-11
553 -----------------------------------------
555 Kudos!
556 Ypnose, Tarqi Kazan, Dagobert Michelsen and OpenCSW.org, Gianluca
557 Ramunno, Bob Tennent.
559 We welcome Dagobert Michelsen in THANKS.
561 NOTES, ChangeLog (packager-affine)
562 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
564 $ In all the following noticable changes to the release candidate are
565 $ marked with a $ in the first column
567 - We have been ported to Sun Solaris!
568   Thanks to Dagobert Michelsen for giving me an account on OpenCSW.org!
570 - The build system will now really find strip(1). [54e91c4]
572 - WANT_TERMCAP fix: we simply passed tputs(3) a pointer to putchar(3)
573   though that may be a macro etc. [cc65bc3]
575 - The following variables can be used to overwrite utilities needed
576   during configuration and build:
578     MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=, cksum=, grep=, mkdir=,
579     mv=, tee=, rm=, sed=, tr=
581   Note that rm(1), sed(1) and tr(1) are needed before `make.rc' is read.
582   Fix: these will now also affect "make test".
584 - WANT_AUTOCC now no longer sets compiler flags as of experience, but
585   compiles a test program to actually detect wether the compiler will
586   swallow the flag.  This increases configuration time quite a bit.
587   Users who really did use "make devel" possibly want to use "make
588   CONFIG=DEVEL" followed by "make build" now.
589   Note we now also test for -fPIE as well as relro,now,noexecstack.
591 - WANT_SPAM_SPAMD is now decoupled from WANT_SOCKETS. [d247d86]
593 - The configuration now also detects any changes on PATH, C_INCLUDE_PATH
594   and LD_LIBRARY. [1038028]
596 ChangeLog
597 ^^^^^^^^^
599 - Fixed importing of SHELL/LISTER/PAGER variables from the program
600   environment. [940c7f1]  (Ypnose)
602 - Moved -X @64 command line option handling before attachment
603   evaluation, so that, e.g., `mimetype's registered via it will already
604   be seen when classifying attachments. [5d9742f]
606 - Honour *asksign* @274 again, even if *askatend* @270 or *bsdcompat* @281
607   are not set.  This also changes *askattach* @271 as we'll only ask for
608   addition of attachments if there are none yet. [e054d6a]  (Tarqi Kazan)
610 - Support OpenSSL 1.1.0 and above: it obsoletes the more-than-a-decade
611   old SSLv23_client_method() in favour of a new TLS_client_method()
612   (instead of using some "magical" constant like, say, "SSL_METHOD_ANY",
613   but who am i). [c35b567]
615 - Generic file (mailbox) load and save hooks have been introduced:
616   *file-hook-(load|save)-EXTENSION* @374,@375, e.g.:
618     set file-hook-load-xy='echo >&2 XY-LOAD; gzip -cd' \
619         file-hook-save-xy='echo >&2 XY-SAVE; gzip -c' \
620         record=+null-sent.xy
622   One could think about using all-encrypted mailboxes, or the like.
623   Note that before v15.0 these variables may not be changed while
624   a mailbox handled by these hooks is open. [b4c2c37]  (Tarqi Kazan)
626 - When DNS resolving fails we now print error messages.
627   And then, if it fails because of an unknown service (protocol), we
628   check for the protocol and retry shall we have a well-known port
629   number builtin (smtp, submission, smtps, pop3, pop3s, imap, imaps).
630   [5f52370, (3f189f9)]  It is not wrong to credit (Gianluca Ramunno)
632 - One may now force treatment of addresses as files with the new "./"
633   or "/" prefixes -- until now it wasn't possible to address files if
634   the addressee includes an at sign, now "./me@here.com" will do, just
635   as will "/me@here.com". [2cf5890,0da473f]  (Bob Tennent)
637 - Fix *record-resent* @329, which never made it to *record* @414 since
638   [a11935b], but instead save the message in a file named after the
639   addressee! [a82af9f]  (Bob Tennent)
641 - Fixed signal handler uninstallation in sopen() (DNS lookup and socket
642   creation): v14.8.0 could be forced in endless loop after failed DNS
643   lookups due to this. [3cca23b]
645 - Fixed possible double-free (causing a crash) after failed SSL
646   certificate verification (*ssl-verify*=strict etc.) with OpenSSL
647   versions that support SSL_CONF_CTX (1.0.2+). [c691726]
649 - Assorted changes:
651   . The builtin HTML filter will now silently discard carriage-return
652     characters (looks better in e.g. less(1)). [cf4d800]
653   . When reopening the same box we now recognize if changes had been
654     written, forcing a reread of the box in order to display the actual
655     real content. [7dfbd38,0835212,a15dfed]
656   . `netrc' output changed, so that the output could (in theory) be fed
657     back into S-nail again in order to gain the same settings. [a9a2722]
658   . *pop3-keepalive* @410 gained (@USER)?-HOST forms [69cae68]
659   . *imap-keepalive* @387 gained (@USER)?-HOST forms [9a8c929]
660   . Do not use the builtin random generator if we find a suitable one in
661     the host environment. [0e01aeb,6bcb430,fc846c6]  (Bob Tennent)
662   . The builtin HTML filter will now also expand entities in parameter
663     names. [8d16dc0]
664 $ . *crt* will now only be checked when attached to a terminal device;
665 $   and no*crt* will now be honoured. [2508c32]
667 ChangeLog (purely technical)
668 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
670 - Solaris port resulted in a lot of changesets for the build system.
671 - I didn't use git(1) rebasing and the [crawl] branch but only [master].
672   And see where that ended: S-nail would have 10000 fossil commits!
673 - Plugged some memory leaks.
675 v14.8.0 ("Albatros"), 2015-04-30
676 --------------------------------
678 Puuuh!
679 I'm glad and happy to announce "Albatros" after about seven months of
680 development.  Development that brought many new features, bugfixes,
681 technical overhauling and behaviour tweaking.  Shall you ever have been
682 interested in BSD Mail or its deriviatives you might want to give it
683 a try.
685 "Albatros" is indeed the first version of the codebase as such that
686 should allow IMAP->Maildir->MBOX->Maildir->IMAP message roundtripping
687 without causing possible message splitting due to faulty From_
688 detection / encoding.  It also generates compliant MIME parameters.
690 Note there are incompatible changes, documented below.  And it is also
691 advisable to try out existing configurations with enabled *debug* and/or
692 *verbose* (-d, -vv) in order to check for "obsoletion" warnings.
693 (Here "obsolete" would refer to v15, of course.)
695 Credits and Thanks go to Ypnose, Jérémie Courrèges-Anglas, Josef Jurek,
696 Gavin Troy, Rich Salz, Martin Brandenburg, Bob Tennent, Dominic Meskys
697 and Peter Bray.
699 We welcome Jérémie Courrèges-Anglas, Josef Jurek, Rich Salz,
700 Dominic Meskys, Peter Bray, Dirk-Wilhelm Peters and Martin Brandenburg
701 in THANKS.
702 Apologies to Dirk-Wilhelm Peters and Martin Brandenburg whom i had
703 forgotten to add to THANKS at first glance once i've added this file; it
704 was nothing but an oversight.
706 I also say «Thank you» to GitLab.com – i've mirrored the S-nail git(1)
707 repository (alongside others) to this free service.
709 Credits finally also have to go to Coverity.com [1] which helped to find
710 some bugs; the claim of a 0.00 defect density after a Friday 13th test
711 must have been an error from their side, though, as well as that the
712 page [1] still remains at a test with a defect density of 0.01, since
713 i've posted yet another run that must have ended with 0.00.  (Note the
714 codebase was tested without IMAP code, i.e. my _next_ developer branch.)
716   [1] https://scan.coverity.com/projects/444
718 NOTES, ChangeLog (packager-affine)
719 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
721 $ In all the following noticable changes to the release candidate are
722 $ marked with a $ in the first column
724 + Crawling along the path of CVE [topic/cve-2014-7844.2]: to enable MTA
725   arguments after -- the new *expandargv* @372 must be set.  More below.
727 + Even more crawling along the path of the CVE i decided to replace the
728   wordexp(3) based shell word expansion mechanism with an entirely new,
729   internally implemented restricted one, but complete mitigation will
730   take time.  This has consequences in respect to backslash escaping in
731   file names (shall you ever have used such a filename with S-nail and
732   its predecessors, of course, and only ...).
733   Please see [topic/fexpand.2] below.
735 + A new member for the *attrlist* @351 variable (for unsure spam status).
736   Since a user setting with a false length will be ignored yet causes an
737   error message this is a backward incompatible change. [topic/spam.2]
739 - New make.rc option: WANT_ALL_SSL_ALGORITHMS (enabled).
740   See make.rc and *smime-cipher-USER@host* @427 below. [topic/ssl.1]
742 - The make.rc option WANT_IPV6 is gone; we use the respective standard
743   library facilities automatically whenever possible. [999e79a]
745 - New make.rc option: WANT_TERMCAP (disabled).
746   See *term-ca-mode* @345 below.  [topic/termcap]
748 - The make.rc option WANT_SPAM has been dropped.  Instead we have (see
749   [topic/spam.2] below for more):
751   . WANT_SPAM_SPAMC (default off):
752     Rather identical to the former WANT_SPAM (interaction with spamc(1)
753     from spamassassin(1)), but internally improved.
754   . WANT_SPAM_SPAMD (default off):
755     Direct interaction with spamd(1) from spamassassin(1) via a local
756     unix(4) domain socket.
757   . WANT_SPAM_FILTER (default on):
758     Freely configurable hook programs, e.g., bogofilter(1).
760 - It turned out that the manual wasn't mandb(1) compatible. [f5ab838]
762 - New make.rc option: WANT_FILTER_HTML_TAGSOUP (enabled).
763   S-nail now ships with a very primitive HTML-to-text converter.
764   It'll be used for HTML parts automatically if no pipe handler is
765   installed (and the builtin mime.types haven't been changed).
766   This works because of the new TYPEMARKER extension to mime.types(5) as
767   documented for [topic/mime.types.2] below.
768   (It is quite experimental but i think it rocks except it can be fooled
769   since it doesn't know about double quoted strings, e.g., <a href=""
770   onmouseover='javascript:alert("> This is plain text you see, oops");'>.
771 $ Yet it is ment for displaying HTML mails, and it works really well.
772 $ It doesn't support non-standard type="quote" attributes nor even-more
773 $ non-standard CSS classes "gmail_quote" or whatever it's name was --
774 $ these are used in the wild to generate automatic mail quoting, which
775 $ has resulted in an immense amount of top-posting; but maybe there will
776 $ be a S-nail v14.8.1 which will implement those, to ease the pain.
777   [topic/html-tagsoup]
779 $- List output of `alias' @78, `ghost' @123 and `shortcut' @181
780 $ uses a new syntax that should (in theory) make it possible to feed
781 $ the output back into S-nail. [2913df3]
782 $ Ditto `set' @178 unless *bsdcompat* or *bsdset* are set. [373cc8a]
784 $- *keep* @308 will also affect secondary mailboxes (because *emptybox*
785 $ has been obsoleted, see below). [5fa5f8b]
787 $- New make.rc option: WANT_FORCED_STACKPROT (enabled with WANT_DEVEL or
788 $ WANT_DEBUG).
789 $ In conjunction with WANT_AUTOCC this will trigger stack protectors
790 $ if the detected compiler does support them.  (Before they were only
791 $ enabled if WANT_DEBUG was set, automatically.)
793 + v14.8 is the last release with IMAP support, which has been removed
794   from the developer's [crawl] branch for quite some time already.
795   He really hopes he can affort to readd support sometime after v15.0.
797 ChangeLog
798 ^^^^^^^^^
800 - S-nail now knows about named booleans (e.g., `localopts' @133 or
801   interactive approval prompts can now be given any of 1/yes/true/on or
802   0/no/false/off, case-insensitively; note this is true for the make.rc
803 $ system, too) and so-called "quad" options (either normal boolean or
804 $ "ask-BOOLEAN", which, in interactive context, will be prompted with
805 $ default values; the default value is chosen in non-interactive mode).
806 $ (on/off support not in the RC.)
807   [topic/xify]
809 - The `if' @128 combo:
811   . gained <, >, <= and >= tests;
812     ==, !=, <, <=, >=, > will try to convert their arguments to numbers
813     and perform their test numerically, if possible, [143d409]
814   . `if' supports boolean (as above) arguments, [topic/ifpimp]
815   . `if 1'+ return value fixed, [topic/ifpimp]
816   . `if'+: on syntax error, NOOP anything 'till `endif', [topic/ifpimp]
817   . `if'+ now support bracket groups, AND-OR lists and unary ! (not),
818     note that the separating spaces are required: [topic/ifpimp]
820       if [ [ true ] && [ [ $debug ] || [ $verbose ] ] ]
821         echo Noisy, noisy
822       endif
823       if true && $debug || $verbose
824         echo Left associativity, as is known from the shell
825       endif
826       if ! ! true && ! [ ! $debug && ! $verbose ]
827         echo Unary operator support
828       endif
830   . `if'+ now support new case-insensitive (ASCII) substring operators
831     =@ and !@: [topic/ifpimp]
833       if $features =@ "regex"
834         if $TERM =~ "^xterm.*"
835           echo ..in an X terminal
836         endif
837       endif
839 $ . `if'+: the three argument forms can now be given variables also on
840 $   the right hand side: [topic/ifpimp]
842 $     set xtest='^xterm.*'
843 $     if $TERM =~ $xtest
844 $       echo Variables as right hand value
845 $     endif
847 - `unalias' @198 learned that * means "all aliases".
848   Fixed: faulty list-head relinking caused "dead" aliases (since ever)
849   [topic/names]
851 - `unshortcut' @219 learned that * means "all shortcuts".
852   `shortcut' @181 in turn can now define multiple shortcuts in one go
853   [topic/names]:
855     ?0[ /var/mail/steffen]? sho you 'any one' me 'no "one"'
856     ?0[ /var/mail/steffen]? sho
857     shortcut me "no \"one\""
858     shortcut you "any one"
859     ?0[ /var/mail/steffen]? unsho*
860     ?0[ /var/mail/steffen]? sho
861     ?0[ /var/mail/steffen]?
863 - S-nail learned how to deal with mailing-lists in respect to
864   Mail-Followup-To headers etc. (manual: "Mailing lists" @21):
866   . new commands `(un)?ml(list|subscribe)' to let S-nail decide which
867     addresses are mailing-lists, [topic/names]
868   . *headline* learned %T format to display message recipient flags:
869     "L" for a mailing-list, "S" for a subscribed one, [topic/names]
870   . new variable *followup-to-honour*, [topic/mft]
871   . new variable *reply-to-honour*, [topic/mft]
872   . new command `Lreply', forcing a list-only `reply' if possible.
873     When `Lreply'ing to messages which seem to originate from
874     mailing-lists (contain a "List-Post:" header), then S-nail will
875     treat the list address as a known mailing list (as via `mlist').
877     (It is advisable to try out several different combinations of non-/
878     subscribed mailing-lists in conjunction with `reply', `Reply' and
879     `Lreply' with *debug* set in order to get used to how S-nail will
880     modify the address lists; the results should be quite logical
881     though.) [topic/mft]
882   . For convenience `reply' and `Lreply' can now be used to reply to
883     multiple messages in one go (each message will still be handled by
884     itself, we simply start over internally). [topic/mft]
886 - `unset' @217 no longer "fails" for unset variables, but only prints
887   a message in *debug* or *verbose* mode.  This changes traditional,
888   decade-old behaviour, but shells don't even say something in (*debug*
889   or) *verbose* mode, and it really simplifies things. [topic/okeys-attr]
891 - SSL/TLS changes: [topic/ssl.1]
893   . new variables: *ssl-cert-HOST* @451, *ssl-key-HOST* @456,
894     *ssl-method-HOST* @457, *ssl-verify-HOST* @461,
895   . *ssl-v2-allow* has been dropped,
896   . *ssl-verify* @461 and *smime-cipher-USER@HOST* @427 use
897     case-insensitive matching for value checks,
898   . new variable-chain: *ssl-protocol* @458 (the introduction of which
899     obsoletes *ssl-method* @457, see below),
900   . new variants of *ssl-cipher-list* @452: *ssl-cipher-list-USER@HOST*,
901     *ssl-cipher-list-HOST*,
902   . new variable: *ssl-config-file* @453,
903   . *smime-cipher-USER@HOST* @427 dropped builtin support for the
904     obsolete RC2-40 and RC2-64 ciphers -- use the make.rc option
905     WANT_ALL_SSL_ALGORITHMS to readd support,
906   . with SSL_CONF_CTX support (OpenSSL v1.0.2+) the values of the
907     following variables (and variants) will be parsed by OpenSSL instead
908     of S-nail, offering more user and packager flexibility:
909     *ssl-cert* @451, *ssl-cipher-list* @452, *ssl-key* @456,
910     *ssl-protocol* @458.
912     E.g., shall a new OpenSSL ship with TLS v1.3 S-nail doesn't need to
913     be adjusted in order to support TLS v1.3, all there is to do is that
914     the user has to adjust her *ssl-protocol* setting.
915     This is at least the theory. :)
916     And maybe OpenSSL (will) offer(s) symbolic constants like "NEWEST"
917     or "SAFEST".
919 - Folder hooks have been extended:
921   . if there was no *folder-hook-FULLNAME* @376 we'll try
922     *folder-hook-+NAME* if the mailbox NAME resides in *folder*, e.g.,
923     the author has "folder-hook-+sent=MACRO" and all his *record*
924     variables are "record=+sent", therefore MACRO can be shared in
925     between all accounts with a single hook definition. [a5a4d89]
926   . `localopts' @133 can now be used in folder hooks: the covered
927     settings will be reverted once the folder is left again.
928 $   (I know for sure someone asked for this long ago, directly after
929 $   `localopts' came up first, but i couldn't find the corresponding
930 $   message.  Sorry!) [2c67091]
932 - More security control à la CVE 2014-7844, possibly for the first time
933   enabling safe usage of S-nail via CGI: [topic/cve-2014-7844.2]
935   . fixed *sendmail-arguments* @420 parsing:
936     *sendmail-arguments*='-F "Dubi Da"' will now result in <"-F" "Dubi
937     Da"> not <"-F" ""Dubi Da"">,
938   . new command line argument "-." @67 forcefully terminates options
939     and enters send mode.  I.e., using this option avoids possible
940     misinterpretation of the following arguments.
942     This operation is usually reserved for --, but since S-nail passes
943     anything after -- to the MTA (but read on) i had to invent something
944 $   else.  Also, -. forcefully enters send mode, which -- couldn't have
945 $   been overloaded to do.
946   . New variable: *expandargv* @372: in equal spirit to *expandaddr* @371
947     this one is required in order to pass arguments after -- to the MTA.
948     If set to "fail" existence of such arguments is a hard error,
949     "restrict" likewise except in interactive mode or in conjunction
950     with the -~ or -# options.
951   . *expandaddr* @371: new special value "fail" causes presence of
952     extended recipient addresses to be treated as a hard error.
953 $   In fact this is now interpreted as a comma separated list and may
954 $   also include the string "noalias", disallowing non-network-addresses
955 $   in the remaining (non-"extended") recipient addresses -- note this
956 $   applies to system global aliases only, not to those of `alias'
957 $   (except for their content, of course); "noalias" is a hard error in
958 $   combination with "fail".
960 - `unaccount' @197 and `undefine' @201 learned that * means "all
961   accounts" and "all macros", respectively. [4c09114]
963 - Spam handling has been rewritten completely, revealing a very old
964   misbehaviour in nail's subprocess handling (malloc in signal handler).
965   Please reread the manual section "Handling spam" @37 for more.
966   The motivation was also that bogofilter(1), sylfilter(1) etc. can
967   export their databases, so should the author ever find time to
968   implement spam handling in C like his predecessor it will be possible
969   to continue to use those databases: [topic/spam.2]
971   . *headline* @380 format %$ has been fixed,
972   . when working on multiple messages the operation is cancelled if an
973     error occurs,
974   . new variables: *spam-interface* @436 chooses the, well, ...
975     This one has extensive documentation.  Plus the interface dependent
976     *spamc-command* @438, *spamc-arguments* @439, *spamc-user* @440,
977     *spamd-socket* @441, *spamd-user* @442,
978     *spamfilter-ham* @443, *spamfilter-noham* @444,
979     *spamfilter-nospam* @445, *spamfilter-rate* @446,
980     *spamfilter-spam* @447 and *spamfilter-rate-spamscore* @448.
981   . The *attrlist* @351 variable gained a new slot for an unsure-spam
982     status (default character is ~).
983     Messages with that flag can be specified via the :S colon modifier.
985 - Fix: even though -# @66 implies *sendwait* @335 a user should have the
986   option to turn *sendwait* off again. [4274bed]
988 - Completely reworked mime.types(5) handling, note the backward
989   incompatible drop of `mimetypes': [topic/mime.types.2]
991   . dropped the `mimetypes' command,
992   . new commands: `mimetype' @138 and `unmimetype' @209,
993   . *encoding* @369 is now parsed case-insensitively,
994   . *mime-counter-evidence* @390 gained new bit 3 to indicate the desire
995     to forcefully overwrite MIME types if we think we know it better,
996   . *mimetypes-load-control* @391 gained an extension that can be used to
997     load more and specific files, which in addition may make use of
998     a new non-portable S-nail-specific TYPEMARKER extension.  The manual
999     section "The mime.types files" @32 has been rewritten accordingly.
1000     (In short: mime.types(5) lines can be prefixed by @, @h@ or @H@, for
1001     plain text, builtin HTML filter (plain text fallback), ditto
1002     (without fallback).)
1003 $ . The builtin MIME types now make a lot of use of the @ and @h@
1004 $   TYPEMARKER extensions, so that you possibly can get rid of a lot of
1005 $   pipe-TYPE/SUBTYPE=@ plain-text type hooks, shall you have used them.
1007 - Support for RFC 2231 has been added.  This means that S-nail generates
1008   truly MIME compliant messages and no longer requires help from other
1009   MUAs!  In fact MIME parameter handling has been rewritten completely.
1010   [topic/rfc2231]
1012 - On the long run shell word expansion (via wordexp(3)) will be replaced
1013   by a new, restricted (and thus (hopefully) safer), internally
1014   implemented path expansion mechanism that only supports ~/ -> HOMEDIR
1015   and $SHELLVAR / ${SHELLVAR}.
1016   Since the original expansion is *so* hardwired that'll take time, for
1017   now it is used for attachments only, but here all through the way.
1019   But where it is used already it has consequences regarding backslash
1020   escaping; to improve user experience a bit `~@' @239 will display the
1021   escaped filename so that users only have to hit ENTER to accept paths:
1022   e.g., "diet\ is \curd.txt" will show up as "diet\\ is \\curd.txt".
1023   And, e.g., the test script does the following for RFC 2231 (excerpt):
1025     MAILRC=/dev/null "${SNAIL}" ${ARGS} -Snodot \
1026       -a "ma'ger.txt" -a "mä'ger.txt" \
1027       -a 'diet\\\ is\ \\curd.txt' -a diet \"is\" curd.txt \
1028                                          ^      ^ NOTE: 0x00A0, NBSP
1029       -a ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
1031   The introduction of the manual section "COMMANDS" @5 has been updated
1032   accordingly.  Also see -a @39.  [topic/fexpand.2]
1034 - Assorted changes:
1036   . Multiple crash-causing bugs regarding `source' @185, also if used
1037     via `~:source', have been fixed. [aafb688,6979c73,4c6dfc2]
1038   . The NAILRC environment variable is no longer supported. [104c254]
1039   . The *Replyall* variable has been dropped as it was only an alias
1040     for the POSIX standard *flipr* @296 variable. [topic/mft]
1041   . New variables: *version*, *version-(major|minor|update)*,
1042     *features*. [topic/okeys-attr]
1043   . `varedit' @224 can be used to create variables. [topic/okeys-attr]
1044   . New variable: *charset-unknown-8bit* @357. [9b672f6]
1045   . *smtp-auth* @434 now defaults to "plain" (if *v15-compat* is set).
1046     (Josef Jurek, Gavin Troy) [dcbb31a]
1047   . All obsoleted: *autothread*, `thread' and `unthread'.
1048     Use *autosort*=thread, `sort thread' etc. instead. [ef16f43]
1049   . *showlast* @336 should have gained meaning. [4213d52]  (Gavin Troy)
1050   . If the -r @57 option is given a full name specification (rather
1051     than only an address), pass the MTA the respective address parts
1052     via -F and -f. [dd90c14]
1053 $   Also try to pass -F _and_ -f if an empty argument was given to -r
1054 $   but *from* @378 (or, say, "From:") includes a full name. [5f68921]
1055   . New variable: *term-ca-mode* @345 (for WANT_TERMCAP).  In
1056     interactive mode S-nail can now be forced to use ti and te termcap
1057     entries; in conjunction with a PAGER that does too ... [topic/termcap]
1058   . `ghost' @123 gained a new mode and tweaks (see manual). [8a49b12]
1059   . -r @57 option: fixed -h output and manual. [9a1a303]
1060     (Martin Brandenburg)
1061   . With *debug* or 2x *verbose* command lines (including those read
1062     from files) are now traced. [06042c4]  (Bob Tennent)
1063   . NAIL_TMPDIR (new) and TMPDIR environment variables are now
1064     (guaranteed to be) set in pipe hooks. [a1cfb02]
1065   . "Subject:" Re: trimming: MIME decoding is now performed. [ede7c7d]
1066   . New variants of *pop3-bulk-load* @320: *-[USER@]HOST*. [5f5ae10]
1067   . *crt*=0 @366 now really works. [22f1477]
1068   . Maildir code now uses string relaxation which drastically reduced
1069     memory usage for large mailboxes. [d1c945f]
1070     And for the first time it performs real memory cleanup. [e549110]
1071   . Improved error message on MTA exec failure.  (Dominic Meskys)
1072   . Fix: "setenv noVAR" would have set noVAR. [3c1f886]
1073   . When `setenv' is used to set any of HOME, USER, TMPDIR it'll be
1074     reflected by our internal variables.  (Still hacky as special code
1075     is needed to do so; also "set HOME=x" shadows HOME for "varshow
1076     HOME" instead of being rejected.  Future cleanup work.) [3f03b80]
1077   . Colon modifiers can now be joined, as in "f :uas". [8b6c259]
1078 $ . Maildir code did faulty From_ line detection, resulting in any
1079 $   non-quoted "From " line to start a new message (e.g., when doing
1080 $   things like "copy * MAILDIR" we could have f...ed up completely).
1081 $   Seems to have been added with Heirloom mailx 11.6 ([faf4b65],
1082 $   2004-09-07).  Neither goes credit to Jacob Gelbman nor to Robin
1083 $   Stjerndorff for messages to nail-devel@ on 2015-01-21 and
1084 $   2015-02-20, respectively.  :-)) [ae539c9]
1085 $ . *emptybox* has been obsoleted.  *keep* @308 will also affect
1086 $   secondary mailboxes, and then both only deal with local regular
1087 $   MBOXes anyway, not to e.g., maildir files nor IMAP boxes. [d747c0a]
1088 $ . `unghost' @207 learned that * has to drop all ghosts. [34a92a5]
1089 $ . NAIL_TMPDIR (new) and TMPDIR environment variables are now
1090 $   (guaranteed to be) set for *agent-shell-lookup* @350. [5c3d7b5]
1091 $ . Things like "copy * MAILDIR" from within an IMAP (or POP3?) mailbox
1092 $   to a Maildir mailbox should now work again. [d747c0a]
1093 $ . IMAP code did faulty From_ line detection, resulting in some
1094 $   non-quoted "From " line to start a new message (e.g., when doing
1095 $   things like "copy * MAILDIR" we could have f...ed up completely).
1096 $   Present in Heirloom mailx since ever ([^b4ad9f2]). [66e3c93]
1097 $ . New variable: *mbox-rfc4155* @312: because of all the bugs in From_
1098 $   quoting etc., err, no.  "Albatros" will last.  I've just touched
1099 $   a lot of stuff regarding MBOX writing: From_ quoting (which may
1100 $   happen whenever we save already existent data in a MBOX, shall
1101 $   the original generator not have taken appropriate steps to ensure
1102 $   "false" From_ lines can't happen (S-nail does)) is now definitely
1103 $   POSIX compliant, meaning that we may quote much too much lines.
1104 $   So set *mbox-rfc4155* and we generate RFC 4155 compliant MBOX files,
1105 $   possibly leaving behind backward POSIX-only software. [70ba3ef]
1106 $ . New command line option: "-X cmd" @64 will execute "cmd" right
1107 $   before normal operation starts.  The only option to execute commands
1108 $   in non-interactive mode when reading of resource files has been
1109 $   actively suppressed.  This is an experimental feature. [d202869]
1111 ChangeLog (purely technical)
1112 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1114 . Improved output flushing, avoidance of printing of useless
1115   output (especially smoothens *editalong*). [topic/stdout-fflush]
1116 . String relaxation is now everywhere (but IMAP), the builtin buffer
1117   sizes were reduced to 1/3.
1118 . Again a manual review.  The manual now supports mdocmx(7).
1119 . Using builtin ARC4 pseudo-random for random generation.
1120 . Better signal handling here and there.
1121 . Fixed most "unpluggable memory leaks" by plugging them via chains of
1122   signal handlers and longjmps.  Terrible.  But no more leaks.
1123 . A lot of this and that.  (Really.)
1124 $. Slightly more tolerance for faulty Base64 encoding in message text
1125 $ parts.  No real healing possible today, but requires v15.0 environment.
1126 $ This, however, only affects invalid data that, e.g., OpenSSL doesn't
1127 $ even give any output for! [54137fd,4d59cca]
1129 I didn't make it to improved message selection.
1130 And i also can't seem to find the necessary peace of mind to do a real
1131 review with this codebase, it's always that i start off doing something
1132 non-reviewish; but i'll see the day (what i hope).
1134 NEWS entries for the S-nail releases before v14.8.0 have been cut off
1135 after release v14.8.5 and can be found in the git(1) repository, e.g.,:
1136   $ git show v14.8.5:NEWS
1138 # s-ts-mode