mk-conf.sh: add manual section number for realpath(3)
[s-mailx.git] / NEWS
blob2eb05cfab8c56b845985513857e383cd98392bda
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.5 ("Hen Harrier"), 2015-09-05
24 -----------------------------------
26 Credits John Dodson, Claudio Cappelli.
28 We welcome Claudio Cappelli in THANKS.
30 NOTES, ChangeLog (packager-affine)
31 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
33 - I've forgotten to add obsoletion warning messages in v14.8.4, so
34   running with enabled -d/*debug* -vv/2x*verbose* may be useful.
35   Sorry! [b3e34db]
37 - A series of bug FIXes (which caused the "Hen Harrier" in the end):
39   . v14.8.4 bug: macro content will be added to the history. [28672e5]
41   . Fallout of massive not-yet-dead style and control flow change series
42     in February 2014, I.: the close-on-exec bit of temporary file
43     descriptors wasn't set. [8f58404]
45   . Fallout of massive not-yet-dead style and control flow change series
46     in February 2014, II.: temporary files were always created in the
47     current directory.  Aloha, heh. [edc12c8]
49   . v14.8.4 bug: when `resend'ing messages a crash would happen when
50     generating the Message-Id: (control flow messed up when hastily
51     implementing extended -t parsing). [9e63ae6]
52     (Hello, Bob Tennent: i finally have added at least a simple `resend'
53     test.  Don't your worry.)
55   . v14.8.4 bug: plugged a file descriptor leak in the dotlock code (one
56     side of the control pipe was leaked upon success; there you see how
57     large ulimit(3) limits are by default today). [ed5c8cf]
59 - When using -t and a template message recipients given on the command
60   line will now be joined into the message instead of being discarded.
61   [9eb4cbf]
63 ChangeLog
64 ^^^^^^^^^
66 - The `set' command will now mark out assembled variables if *debug* or
67   2x*verbose* is set. [2b6e64a]
69 - Added *smime-cipher* @433 option (i.e., generic variant of
70   *smime-cipher-USER@HOST*). [58804ea]
72 - Messages will now _only_ be saved in *DEAD* if *save* is set (POSIX).
73   [3fefac9]
75 - The (pretty useless for now) `pipe' command will now also print the
76   overall message info (it printed MIME part infos already). [e0a8196]
78 - NAIL_FILENAME_GENERATED is now nothing but a random string. [36097df]
80 - *debug* now implies no*record* and no*save*. [ca9f512]
82 - After almost three years i've finally heard what John Dodson said and
83   changed/restored behaviour of plain "address" message specifications
84   to reflect the original intent (and a bit POSIX) so we now have
85     A case-insensitive “any substring matches” search against the
86     ‘From:’ header, which will match addresses (too) even if
87     showname[339] is set [things are different if *allnet* is set]
88   [44cec1f]  (John Dodson)
90 - ..and therefore we need the possibility to somehow perform "exact
91   boundary" matches: for this i've extended the "@" message
92   specification with a header-name "~" prefix and header abbreviations:
93     ‘f’, ‘t’, ‘c’, ‘b’ and ‘s’ will match ‘From’, ‘To’, ‘Cc’, ‘Bcc’ and
94     ‘Subject’, respectively and case-insensitively.
95   And:
96     This message specification performs full text comparison, but even
97     with regular expression support it is almost impossible to write a
98     search expression that savely matches only a specific address
99     domain.  To request that the content of the header is treated as a
100     list of addresses, and to strip those down to the plain email
101     address which the search expression is to be matched against, pre‐
102     fix the header name (abbreviation) with a tilde ‘~’:
103       '@~f@@a\.safe\.domain\.match$'
104   [50c2816]
106 - New option: *sendmail-no-default-arguments* @426 [d983036]
107   (Claudio Cappelli)
109 - Do no longer make a difference in "no mail for user" and "missing
110   system mailbox".  The latter caused yet an annoying error message even
111   with *emptystart*. [7abff87]
113 - New command `source_if' @187 is like `source' but don't fails if the
114   file cannot be loaded.  That is to say, we do not yet support
115   "-f FILE@ tests nor `test -f FILE` shell commands for `if', sigh.
116   [893bd5f]
118 ChangeLog (purely technical)
119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
121 - Unless Gunnar Ritter is directly affected the fourth clause of the BSD
122   copyright has been dropped, as has been done for NetBSD Mail.
123   [b9ea247]
125 - Quoted-printable encoding will avoid printing a soft newline if only
126   a single character is about to follow. [6b31542]
128 - The configuration script now shows what it is doing at the beginning,
129   to overcome those hangs that can be seen especially in VMs. [4c29cea]
131 - The configuration will do an automatic "make clean" when the
132   configuration had been updated. [9706734]
134 - We no longer generate a MIME message unless that is necessary.  I.e.,
135   a plain 7-bit (US-ASCII) message without attachments send from
136   a system daemon is a plain RFC 822/2822/5322 message and doesn't
137   require any MIME header. [824257a]
139 - To avoid that DNS resolver becomes unusable due to ^C interruption.
140   Also fixes a possible leak in non-getaddrinfo(3) codepath (old boxes).
141   [767897a]
143 v14.8.4 ("Nameless bird (shot by Hemingway)", 2015-08-04
144 --------------------------------------------------------
146 Thanks for Jérémie Courrèges-Anglas for beating me to it.
148 NOTES, ChangeLog (packager-affine)
149 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
151 - Added support for the (BSD-licensed) idnkit[1] IDNA library which is
152   now in the base system of DragonFly BSD.  We still only support
153   encoding, though.  (And assume the hostname is in locale encoding.)
154   [cbded82,22ac479]
156     [1] <https://www.nic.ad.jp/ja/idn/idnkit/download/>
158 - I have rewritten the privilege-separated dotlock helper program,
159   because among others a SETGID one is of no use in todays world.
160   So it is now SETUID to the new PRIVSEP_USER.
162   . WANT_PRIVSEP and PRIVSEP_GROUP have been dropped.
164   . New option: WANT_DOTLOCK, by default enabled.
165     It is henceforth possible to strip any dotlock code off S-nail.
166     So either S-nail has complete dotlock support, including the
167     privilege-separated dotlock helper, or none at all.
169   . New variable: PRIVSEP_USER, by default "root".
170     It must be a privileged user that can be used to implement the new
171     strategy: we create the dotlock file and then fchown(2) it to the
172     UID and GID of the mailbox that we created it for.  Like this the
173     owner of the mailbox (remember %USER, $USER, -u USER ..) will be
174     capable to remove the lock file herself.  Or himself.
176   . No dotlocking was performed for reading, only for writing.  I've
177     changed this.  We also didn't perform any (file) locking at all when
178     updating non system-mailboxes, which i have changed, too.
180   . Fixed horrific bug: on systems without realpath(3), e.g., Solaris 9,
181     S-nail would not resolve symbolic links on the mailbox to lock,
182     potentially creating the lock file in the wrong directory.
184   . We now compare the inode/device/etc. of the mailbox file with the
185     information we collected a lot earlier from the open mailbox file
186     descriptor, and bail if they are not identical, to reduce attach
187     surface.
189   . The privsep helper now re-checks that it is capable to read (or
190     read/write) the mailbox it is creating a dotlock for, to reduce the
191     chance of being misused (by itself).  I.e., it does so before
192     raising its privileges, say.
194   [d5ec3cb,b29e2c8]
196 - The predefined CONFIG=urations have been changed a bit and now
197   "require" more options than they did before.
199 - Renamed WANT_ALL_SSL_ALGORITHMS to WANT_SSL_ALL_ALGORITHMS.
200   That was a no-brainer, default of "yes" remains, but it now can also
201   be "require"d. [910849e]
203 - The GitLab project repository URL has been changed and now is
204   <https://gitlab.com/sdaoden/s-nail.git> (leave off ".git" for browsing
205   purposes).
207 ChangeLog
208 ^^^^^^^^^
210 - It has become possible to fixate the input character set of
211   attachments from the command line (without going over ~@):
212   when the -a @39 option cannot access(2) the file to be attached it
213   searches the filename for an equals-sign "=" and splits into filename
214   and character set shall it find one.  A character set defined like
215   this is "fixated" and therefore no character set conversion occurs.
217     $ echo body |
218     ./s-nail -d -s subject du@auch \
219       -aversion.h -aversion.h=KoI8-r -aversion.h=LaTin1 -aversion.h
221   >>> Content-Type: text/x-chdr; charset=US-ASCII
222   >>> Content-Type: text/x-chdr; charset=KoI8-r
223   >>> Content-Type: text/x-chdr; charset=LaTin1
224   >>> Content-Type: text/x-chdr; charset=US-ASCII
226   [1f07d9e,804e561]
228 - In *debug* mode the content of the message that would have been sent
229   is printed on standard error not only in *smtp*, but also MTA mode.
230   E.g., as in the example above. [c106f35]
232 - S/MIME oops: S-nail yet didn't test for the "application/pkcs7-mime"
233   MIME type at all, but only for "/x-pkcs7-mime" (pre-standardized
234   variant), so that S/MIME messages generated by more modern MUAs (e.g.
235   Alpine) wouldn't have been understood!
236   And we do now use that MIME type ourself, as standardized by RFC
237   5751.  However, we are still stupid and don't handle a signed message
238   inside a multipart/mixed message, neither do we support fully
239   encrypted messages (nothing but rfc822 member) etc. [10c2b16]
241 - *smime-cipher-USER@HOST* @431 values changed to versions without
242   hyphen, as that is what OpenSSL uses: e.g., AES256 not AES-256; the
243   latter versions are no longer documented and will be dropped with
244   v15.0. [f2c6eec]
246 - New variable *smime-sign-message-digest* [-USER@HOST] @437 can be used
247   to define the message digest for S/MIME signing.  RFC 5751 mandates
248   a default of SHA1, by default available are also SHA256, SHA512,
249   SHA384 and SHA224, MD5 may be available, dependent on OpenSSL.
250   With WANT_SSL_ALL_ALGORITHMS more digests may be available. [2f6dac3]
252 - Using NAIL_FILENAME_GENERATED was prevented since some time since it
253   ended up longer than NAME_MAX (ENAMETOOLONG). [3bcbbfc,f632b5b]
255 - Heavily rewritten manual section "Signed and encrypted messages with
256   S/MIME" @35, giving a ready-to-go example for CAcert.org.
258 - Nicer output for `help' @126 / `?' @74 when given an argument:
259   if that is a command ghost we search for the expansion and do print
260   the (further expansion and) help for that if possible [cea8c20]:
262     ?0[]? ?save
263     save: Append <message-list> to <file>
264     ?0[]? ?s
265     s (save): Append <message-list> to <file>
266     ?0[]? gh s s
267     ?0[]? ?s
268     s -> s (save): Append <message-list> to <file>
270 - No longer allowing recursive commands in macros to avoid that the
271   following can crash us (check can be bypassed):
273       ? define ouch {
274         echo ouch
275         reply 2
276       }
277       ? reply
278       ~:call ouch
280   This is a pity because "? call ouch" does no longer cause a reply,
281   but the real healing will take time.
282   Also the `source' command is now actively disabled during macro
283   evaluation -- this only works(/ed) by accidence and anyway non-
284   synchronously (the `source'd file will be loaded after the macro
285   evaluation has finished).  The real healing for this is heavy stuff
286   and will remove a smart and fantastic idea from before 1979, but it
287   won't work out with macro support (see commit message for more upon
288   interest). [5461a30]
290 - And `source' will be actively forbidden in compose mode, too.  It
291   never worked the way it should. [abd388c]
293 - Did -t @60 ever work for real?  Now it does.
294   Even better it now "supports" some more header fields (References:,
295   In-Reply-To:, Message-ID:, and Mail-Followup-To:, but the latter will
296   be subject of a nice followup content massage) -- S-nail can
297   henceforth be used for git(1)s send-email command.
298   We also improved the interdependency of -t (with[out] From:, Sender:),
299   -r, *from* and *sender*, but i don't say it is perfect yet.
300   [6842f12,631d402,a86ca2d]
302 - Completely reworked *expandaddr* @373 handling, and you can now define
303   *exactly* what you want, e.g., "fail,-all,+addr,+file" will only allow
304   mail address or file recipients and hard error out otherwise.
305   Note that in order to make that work "restrict" has been changed to be
306   effectively "restrict,-all,+name,+addr", which matters in, e.g.,
307   "fail,-all,+file,restrict" which therefore truly is "restrict,fail"!
309   Even in conjunction with -t you should now see proper (-d / *debug*,
310   -v / *verbose*) messages for *expandaddr* caused address stripping,
311   or, with "fail", hard errors. [8668be3]
313 ChangeLog (purely technical)
314 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
316 - We again allow Message-Id:s to start with a leading slash, as in
317   "/p/forge/site-support/10.../...". [143372a]
319 - We now support multiline values in make.rc: to do so, escape the
320   newlines with a backslash "\", e.g. [621cbed,9cf4e7b]
322     MAILSPOOL=`\
323        if [ -d /var/spool/mail ]; then \
324           echo /var/spool/mail;\
325        else \
326           echo /var/mail;\
327        fi`
329 - Lowered the memory pressure caused by malicious spam messages that
330   place hundreds of references into the References: header body.
331   And we don't use alloca(3) no more for such things, in order to lower
332   stack usage. [1c4b8c9,47a1a5c]
334 v14.8.3 ("Startled chicken"), 2015-07-05
335 ----------------------------------------
337 Credits go to Martin Neitzel!
339 NOTES, ChangeLog (packager-affine)
340 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
342 - Prefilling INCS and LIBS is finally honoured by the build system, just
343   as documented. [9a34822]
345 - In place of "packager-install" "doinstall" will also do.
347 - New `make.rc' option: WANT_ERRORS, by default enabled.
348   Will enable the new command `errors' @105 (#_105) and an error message
349   queue ring: error messages will no longer get lost but duplicated into
350   the queue, to be displayed in interactive mode via `errors'.  This is
351   a finite ring which rotates oldest messages if it full.
352   [topic/errors]
354 - S-nail no longer offers hooks for group identity switching: it no
355   longer makes sense to install it SETGID to a mail group (shall anyone
356   has done so). [ac42d24]
358 - New `make.rc' option: WANT_PRIVSEP, by default enabled.
359   The dotlock'ing has been completely rewritten (see `make.rc' for
360   a longer explanation of traditional Unix mailspool locking, please).
362   In order to be able to create lock files in *any* SETGID mailspool
363   directory in which user system mailboxes may reside S-nail now ships
364   with a privilege-separated mini dotlock program (source in
365   `privsep.c'), which will be installed in the new also LIBEXECDIR (as
366   YOUR_MUA_NAME-privsep) SETGID to the group given by the also new
367   PRIVSEP_GROUP (default "mail").
369   This dotlock program will be used whenever a mailbox has to be
370   dotlocked which is owned by group that is not the group of the user
371   who is running S-nail, assuming that the file in question resides in
372   a SETGID mailspool directory.
374   The new variable *dotlock-ignore-error* @294 (#_294) now controls
375   wether it is a failure if creation of a dotlock file is not possible.
376   This variable is by default enabled if WANT_PRIVSEP is false.
377   [topic/dotlock]
379 ChangeLog
380 ^^^^^^^^^
382 - Fix file locking, which was broken since v14.8. [7f8ebc0]
383   (Martin Neitzel)
385 - -e now works with given boxes; -e is mutual exclusive with -H and -L;
386   and then any of -e, -H and -L causes the mailbox opened in readonly
387   mode. [3bb05a2, 2cf15c1]
389 - In *debug* mode no process will be started for a set *smtp*, but
390   instead the message will be directly generated (on the error channel).
391   Also GSS-API authentication will no longer be performed even with
392   enabled debug, oops. [3333d71]
394 ChangeLog (purely technical)
395 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
397 - A readonly IMAP box is opened via EXAMINE not SELECT. [2d5259c]
399 - snprintf(3) and vsnprintf(3) are now required preconditions. [c58c7e9]
401 v14.8.2 ("Wandering albatross"), 2015-06-17
402 -------------------------------------------
404 Many thanks Bob Tennent, for reporting and testing!
406 NOTES, ChangeLog (packager-affine)
407 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
409 - Configuration will now find clock_gettime(2) in -lrt and
410   gettimeofday(2) as such on Linux. [47c9ea7,5e248d2,df7d77f]
411   (Bob Tennent)
413 - MANDIR now defaults to ${PREFIX}/share/man (not ${PREFIX}/man)
414   [6371740]
416 ChangeLog
417 ^^^^^^^^^
419 -  Added missing condition clause in `if' expression parsing
420    [74c7cac,5da6d4d]:
422     ?0[ +mbox]? if $du @@ hey
423     ?0[ +mbox]? endif
424     -->
425     ?0[ +mbox]? if $du @@ hey
426     `if' conditional: unrecognized condition -- near "du"
427        Expression: $du @@ hey
428        Left to parse: $du @@ hey
429     ?1[ +mbox]? endif
431 - Ooops, fix pipe-TYPE/SUBTYPE @403 with value "@" (a.k.a. treat as
432   plain text and display "as is"): i've broken that once i've introduced
433   the extended type markers for the `mimetype' command.  Must have been
434   a Freudian error, sorry! [ea655de]
436 - Fix a bug introduced in nail 9.29, 2001-12-10: a temporary buffer is
437   closed with fclose() even though it is a registered file that instead
438   needs to be closed via Fclose().  This effectively results in
439   a double-fclose(3) of the underlaying file descriptor once the
440   registered files are cleaned up next, which happens either after
441   signal interruption and, since [65e0510] as of 2015-05-21, whenever
442   the command loop ticks. [97fcb97]  (Bob Tennent)
444 v14.8.1 ("Tristan albatross"), 2015-06-11
445 -----------------------------------------
447 Kudos!
448 Ypnose, Tarqi Kazan, Dagobert Michelsen and OpenCSW.org, Gianluca
449 Ramunno, Bob Tennent.
451 We welcome Dagobert Michelsen in THANKS.
453 NOTES, ChangeLog (packager-affine)
454 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
456 $ In all the following noticable changes to the release candidate are
457 $ marked with a $ in the first column
459 - We have been ported to Sun Solaris!
460   Thanks to Dagobert Michelsen for giving me an account on OpenCSW.org!
462 - The build system will now really find strip(1). [54e91c4]
464 - WANT_TERMCAP fix: we simply passed tputs(3) a pointer to putchar(3)
465   though that may be a macro etc. [cc65bc3]
467 - The following variables can be used to overwrite utilities needed
468   during configuration and build:
470     MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=, cksum=, grep=, mkdir=,
471     mv=, tee=, rm=, sed=, tr=
473   Note that rm(1), sed(1) and tr(1) are needed before `make.rc' is read.
474   Fix: these will now also affect "make test".
476 - WANT_AUTOCC now no longer sets compiler flags as of experience, but
477   compiles a test program to actually detect wether the compiler will
478   swallow the flag.  This increases configuration time quite a bit.
479   Users who really did use "make devel" possibly want to use "make
480   CONFIG=DEVEL" followed by "make build" now.
481   Note we now also test for -fPIE as well as relro,now,noexecstack.
483 - WANT_SPAM_SPAMD is now decoupled from WANT_SOCKETS. [d247d86]
485 - The configuration now also detects any changes on PATH, C_INCLUDE_PATH
486   and LD_LIBRARY. [1038028]
488 ChangeLog
489 ^^^^^^^^^
491 - Fixed importing of SHELL/LISTER/PAGER variables from the program
492   environment. [940c7f1]  (Ypnose)
494 - Moved -X @64 command line option handling before attachment
495   evaluation, so that, e.g., `mimetype's registered via it will already
496   be seen when classifying attachments. [5d9742f]
498 - Honour *asksign* @274 again, even if *askatend* @270 or *bsdcompat* @281
499   are not set.  This also changes *askattach* @271 as we'll only ask for
500   addition of attachments if there are none yet. [e054d6a]  (Tarqi Kazan)
502 - Support OpenSSL 1.1.0 and above: it obsoletes the more-than-a-decade
503   old SSLv23_client_method() in favour of a new TLS_client_method()
504   (instead of using some "magical" constant like, say, "SSL_METHOD_ANY",
505   but who am i). [c35b567]
507 - Generic file (mailbox) load and save hooks have been introduced:
508   *file-hook-(load|save)-EXTENSION* @374,@375, e.g.:
510     set file-hook-load-xy='echo >&2 XY-LOAD; gzip -cd' \
511         file-hook-save-xy='echo >&2 XY-SAVE; gzip -c' \
512         record=+null-sent.xy
514   One could think about using all-encrypted mailboxes, or the like.
515   Note that before v15.0 these variables may not be changed while
516   a mailbox handled by these hooks is open. [b4c2c37]  (Tarqi Kazan)
518 - When DNS resolving fails we now print error messages.
519   And then, if it fails because of an unknown service (protocol), we
520   check for the protocol and retry shall we have a well-known port
521   number builtin (smtp, submission, smtps, pop3, pop3s, imap, imaps).
522   [5f52370, (3f189f9)]  It is not wrong to credit (Gianluca Ramunno)
524 - One may now force treatment of addresses as files with the new "./"
525   or "/" prefixes -- until now it wasn't possible to address files if
526   the addressee includes an at sign, now "./me@here.com" will do, just
527   as will "/me@here.com". [2cf5890,0da473f]  (Bob Tennent)
529 - Fix *record-resent* @329, which never made it to *record* @414 since
530   [a11935b], but instead save the message in a file named after the
531   addressee! [a82af9f]  (Bob Tennent)
533 - Fixed signal handler uninstallation in sopen() (DNS lookup and socket
534   creation): v14.8.0 could be forced in endless loop after failed DNS
535   lookups due to this. [3cca23b]
537 - Fixed possible double-free (causing a crash) after failed SSL
538   certificate verification (*ssl-verify*=strict etc.) with OpenSSL
539   versions that support SSL_CONF_CTX (1.0.2+). [c691726]
541 - Assorted changes:
543   . The builtin HTML filter will now silently discard carriage-return
544     characters (looks better in e.g. less(1)). [cf4d800]
545   . When reopening the same box we now recognize if changes had been
546     written, forcing a reread of the box in order to display the actual
547     real content. [7dfbd38,0835212,a15dfed]
548   . `netrc' output changed, so that the output could (in theory) be fed
549     back into S-nail again in order to gain the same settings. [a9a2722]
550   . *pop3-keepalive* @410 gained (@USER)?-HOST forms [69cae68]
551   . *imap-keepalive* @387 gained (@USER)?-HOST forms [9a8c929]
552   . Do not use the builtin random generator if we find a suitable one in
553     the host environment. [0e01aeb,6bcb430,fc846c6]  (Bob Tennent)
554   . The builtin HTML filter will now also expand entities in parameter
555     names. [8d16dc0]
556 $ . *crt* will now only be checked when attached to a terminal device;
557 $   and no*crt* will now be honoured. [2508c32]
559 ChangeLog (purely technical)
560 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
562 - Solaris port resulted in a lot of changesets for the build system.
563 - I didn't use git(1) rebasing and the [crawl] branch but only [master].
564   And see where that ended: S-nail would have 10000 fossil commits!
565 - Plugged some memory leaks.
567 v14.8.0 ("Albatros"), 2015-04-30
568 --------------------------------
570 Puuuh!
571 I'm glad and happy to announce "Albatros" after about seven months of
572 development.  Development that brought many new features, bugfixes,
573 technical overhauling and behaviour tweaking.  Shall you ever have been
574 interested in BSD Mail or its deriviatives you might want to give it
575 a try.
577 "Albatros" is indeed the first version of the codebase as such that
578 should allow IMAP->Maildir->MBOX->Maildir->IMAP message roundtripping
579 without causing possible message splitting due to faulty From_
580 detection / encoding.  It also generates compliant MIME parameters.
582 Note there are incompatible changes, documented below.  And it is also
583 advisable to try out existing configurations with enabled *debug* and/or
584 *verbose* (-d, -vv) in order to check for "obsoletion" warnings.
585 (Here "obsolete" would refer to v15, of course.)
587 Credits and Thanks go to Ypnose, Jérémie Courrèges-Anglas, Josef Jurek,
588 Gavin Troy, Rich Salz, Martin Brandenburg, Bob Tennent, Dominic Meskys
589 and Peter Bray.
591 We welcome Jérémie Courrèges-Anglas, Josef Jurek, Rich Salz,
592 Dominic Meskys, Peter Bray, Dirk-Wilhelm Peters and Martin Brandenburg
593 in THANKS.
594 Apologies to Dirk-Wilhelm Peters and Martin Brandenburg whom i had
595 forgotten to add to THANKS at first glance once i've added this file; it
596 was nothing but an oversight.
598 I also say «Thank you» to GitLab.com – i've mirrored the S-nail git(1)
599 repository (alongside others) to this free service.
601 Credits finally also have to go to Coverity.com [1] which helped to find
602 some bugs; the claim of a 0.00 defect density after a Friday 13th test
603 must have been an error from their side, though, as well as that the
604 page [1] still remains at a test with a defect density of 0.01, since
605 i've posted yet another run that must have ended with 0.00.  (Note the
606 codebase was tested without IMAP code, i.e. my _next_ developer branch.)
608   [1] https://scan.coverity.com/projects/444
610 NOTES, ChangeLog (packager-affine)
611 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
613 $ In all the following noticable changes to the release candidate are
614 $ marked with a $ in the first column
616 + Crawling along the path of CVE [topic/cve-2014-7844.2]: to enable MTA
617   arguments after -- the new *expandargv* @372 must be set.  More below.
619 + Even more crawling along the path of the CVE i decided to replace the
620   wordexp(3) based shell word expansion mechanism with an entirely new,
621   internally implemented restricted one, but complete mitigation will
622   take time.  This has consequences in respect to backslash escaping in
623   file names (shall you ever have used such a filename with S-nail and
624   its predecessors, of course, and only ...).
625   Please see [topic/fexpand.2] below.
627 + A new member for the *attrlist* @351 variable (for unsure spam status).
628   Since a user setting with a false length will be ignored yet causes an
629   error message this is a backward incompatible change. [topic/spam.2]
631 - New make.rc option: WANT_ALL_SSL_ALGORITHMS (enabled).
632   See make.rc and *smime-cipher-USER@host* @427 below. [topic/ssl.1]
634 - The make.rc option WANT_IPV6 is gone; we use the respective standard
635   library facilities automatically whenever possible. [999e79a]
637 - New make.rc option: WANT_TERMCAP (disabled).
638   See *term-ca-mode* @345 below.  [topic/termcap]
640 - The make.rc option WANT_SPAM has been dropped.  Instead we have (see
641   [topic/spam.2] below for more):
643   . WANT_SPAM_SPAMC (default off):
644     Rather identical to the former WANT_SPAM (interaction with spamc(1)
645     from spamassassin(1)), but internally improved.
646   . WANT_SPAM_SPAMD (default off):
647     Direct interaction with spamd(1) from spamassassin(1) via a local
648     unix(4) domain socket.
649   . WANT_SPAM_FILTER (default on):
650     Freely configurable hook programs, e.g., bogofilter(1).
652 - It turned out that the manual wasn't mandb(1) compatible. [f5ab838]
654 - New make.rc option: WANT_FILTER_HTML_TAGSOUP (enabled).
655   S-nail now ships with a very primitive HTML-to-text converter.
656   It'll be used for HTML parts automatically if no pipe handler is
657   installed (and the builtin mime.types haven't been changed).
658   This works because of the new TYPEMARKER extension to mime.types(5) as
659   documented for [topic/mime.types.2] below.
660   (It is quite experimental but i think it rocks except it can be fooled
661   since it doesn't know about double quoted strings, e.g., <a href=""
662   onmouseover='javascript:alert("> This is plain text you see, oops");'>.
663 $ Yet it is ment for displaying HTML mails, and it works really well.
664 $ It doesn't support non-standard type="quote" attributes nor even-more
665 $ non-standard CSS classes "gmail_quote" or whatever it's name was --
666 $ these are used in the wild to generate automatic mail quoting, which
667 $ has resulted in an immense amount of top-posting; but maybe there will
668 $ be a S-nail v14.8.1 which will implement those, to ease the pain.
669   [topic/html-tagsoup]
671 $- List output of `alias' @78, `ghost' @123 and `shortcut' @181
672 $ uses a new syntax that should (in theory) make it possible to feed
673 $ the output back into S-nail. [2913df3]
674 $ Ditto `set' @178 unless *bsdcompat* or *bsdset* are set. [373cc8a]
676 $- *keep* @308 will also affect secondary mailboxes (because *emptybox*
677 $ has been obsoleted, see below). [5fa5f8b]
679 $- New make.rc option: WANT_FORCED_STACKPROT (enabled with WANT_DEVEL or
680 $ WANT_DEBUG).
681 $ In conjunction with WANT_AUTOCC this will trigger stack protectors
682 $ if the detected compiler does support them.  (Before they were only
683 $ enabled if WANT_DEBUG was set, automatically.)
685 + v14.8 is the last release with IMAP support, which has been removed
686   from the developer's [crawl] branch for quite some time already.
687   He really hopes he can affort to readd support sometime after v15.0.
689 ChangeLog
690 ^^^^^^^^^
692 - S-nail now knows about named booleans (e.g., `localopts' @133 or
693   interactive approval prompts can now be given any of 1/yes/true/on or
694   0/no/false/off, case-insensitively; note this is true for the make.rc
695 $ system, too) and so-called "quad" options (either normal boolean or
696 $ "ask-BOOLEAN", which, in interactive context, will be prompted with
697 $ default values; the default value is chosen in non-interactive mode).
698 $ (on/off support not in the RC.)
699   [topic/xify]
701 - The `if' @128 combo:
703   . gained <, >, <= and >= tests;
704     ==, !=, <, <=, >=, > will try to convert their arguments to numbers
705     and perform their test numerically, if possible, [143d409]
706   . `if' supports boolean (as above) arguments, [topic/ifpimp]
707   . `if 1'+ return value fixed, [topic/ifpimp]
708   . `if'+: on syntax error, NOOP anything 'till `endif', [topic/ifpimp]
709   . `if'+ now support bracket groups, AND-OR lists and unary ! (not),
710     note that the separating spaces are required: [topic/ifpimp]
712       if [ [ true ] && [ [ $debug ] || [ $verbose ] ] ]
713         echo Noisy, noisy
714       endif
715       if true && $debug || $verbose
716         echo Left associativity, as is known from the shell
717       endif
718       if ! ! true && ! [ ! $debug && ! $verbose ]
719         echo Unary operator support
720       endif
722   . `if'+ now support new case-insensitive (ASCII) substring operators
723     =@ and !@: [topic/ifpimp]
725       if $features =@ "regex"
726         if $TERM =~ "^xterm.*"
727           echo ..in an X terminal
728         endif
729       endif
731 $ . `if'+: the three argument forms can now be given variables also on
732 $   the right hand side: [topic/ifpimp]
734 $     set xtest='^xterm.*'
735 $     if $TERM =~ $xtest
736 $       echo Variables as right hand value
737 $     endif
739 - `unalias' @198 learned that * means "all aliases".
740   Fixed: faulty list-head relinking caused "dead" aliases (since ever)
741   [topic/names]
743 - `unshortcut' @219 learned that * means "all shortcuts".
744   `shortcut' @181 in turn can now define multiple shortcuts in one go
745   [topic/names]:
747     ?0[ /var/mail/steffen]? sho you 'any one' me 'no "one"'
748     ?0[ /var/mail/steffen]? sho
749     shortcut me "no \"one\""
750     shortcut you "any one"
751     ?0[ /var/mail/steffen]? unsho*
752     ?0[ /var/mail/steffen]? sho
753     ?0[ /var/mail/steffen]?
755 - S-nail learned how to deal with mailing-lists in respect to
756   Mail-Followup-To headers etc. (manual: "Mailing lists" @21):
758   . new commands `(un)?ml(list|subscribe)' to let S-nail decide which
759     addresses are mailing-lists, [topic/names]
760   . *headline* learned %T format to display message recipient flags:
761     "L" for a mailing-list, "S" for a subscribed one, [topic/names]
762   . new variable *followup-to-honour*, [topic/mft]
763   . new variable *reply-to-honour*, [topic/mft]
764   . new command `Lreply', forcing a list-only `reply' if possible.
765     When `Lreply'ing to messages which seem to originate from
766     mailing-lists (contain a "List-Post:" header), then S-nail will
767     treat the list address as a known mailing list (as via `mlist').
769     (It is advisable to try out several different combinations of non-/
770     subscribed mailing-lists in conjunction with `reply', `Reply' and
771     `Lreply' with *debug* set in order to get used to how S-nail will
772     modify the address lists; the results should be quite logical
773     though.) [topic/mft]
774   . For convenience `reply' and `Lreply' can now be used to reply to
775     multiple messages in one go (each message will still be handled by
776     itself, we simply start over internally). [topic/mft]
778 - `unset' @217 no longer "fails" for unset variables, but only prints
779   a message in *debug* or *verbose* mode.  This changes traditional,
780   decade-old behaviour, but shells don't even say something in (*debug*
781   or) *verbose* mode, and it really simplifies things. [topic/okeys-attr]
783 - SSL/TLS changes: [topic/ssl.1]
785   . new variables: *ssl-cert-HOST* @451, *ssl-key-HOST* @456,
786     *ssl-method-HOST* @457, *ssl-verify-HOST* @461,
787   . *ssl-v2-allow* has been dropped,
788   . *ssl-verify* @461 and *smime-cipher-USER@HOST* @427 use
789     case-insensitive matching for value checks,
790   . new variable-chain: *ssl-protocol* @458 (the introduction of which
791     obsoletes *ssl-method* @457, see below),
792   . new variants of *ssl-cipher-list* @452: *ssl-cipher-list-USER@HOST*,
793     *ssl-cipher-list-HOST*,
794   . new variable: *ssl-config-file* @453,
795   . *smime-cipher-USER@HOST* @427 dropped builtin support for the
796     obsolete RC2-40 and RC2-64 ciphers -- use the make.rc option
797     WANT_ALL_SSL_ALGORITHMS to readd support,
798   . with SSL_CONF_CTX support (OpenSSL v1.0.2+) the values of the
799     following variables (and variants) will be parsed by OpenSSL instead
800     of S-nail, offering more user and packager flexibility:
801     *ssl-cert* @451, *ssl-cipher-list* @452, *ssl-key* @456,
802     *ssl-protocol* @458.
804     E.g., shall a new OpenSSL ship with TLS v1.3 S-nail doesn't need to
805     be adjusted in order to support TLS v1.3, all there is to do is that
806     the user has to adjust her *ssl-protocol* setting.
807     This is at least the theory. :)
808     And maybe OpenSSL (will) offer(s) symbolic constants like "NEWEST"
809     or "SAFEST".
811 - Folder hooks have been extended:
813   . if there was no *folder-hook-FULLNAME* @376 we'll try
814     *folder-hook-+NAME* if the mailbox NAME resides in *folder*, e.g.,
815     the author has "folder-hook-+sent=MACRO" and all his *record*
816     variables are "record=+sent", therefore MACRO can be shared in
817     between all accounts with a single hook definition. [a5a4d89]
818   . `localopts' @133 can now be used in folder hooks: the covered
819     settings will be reverted once the folder is left again.
820 $   (I know for sure someone asked for this long ago, directly after
821 $   `localopts' came up first, but i couldn't find the corresponding
822 $   message.  Sorry!) [2c67091]
824 - More security control à la CVE 2014-7844, possibly for the first time
825   enabling safe usage of S-nail via CGI: [topic/cve-2014-7844.2]
827   . fixed *sendmail-arguments* @420 parsing:
828     *sendmail-arguments*='-F "Dubi Da"' will now result in <"-F" "Dubi
829     Da"> not <"-F" ""Dubi Da"">,
830   . new command line argument "-." @67 forcefully terminates options
831     and enters send mode.  I.e., using this option avoids possible
832     misinterpretation of the following arguments.
834     This operation is usually reserved for --, but since S-nail passes
835     anything after -- to the MTA (but read on) i had to invent something
836 $   else.  Also, -. forcefully enters send mode, which -- couldn't have
837 $   been overloaded to do.
838   . New variable: *expandargv* @372: in equal spirit to *expandaddr* @371
839     this one is required in order to pass arguments after -- to the MTA.
840     If set to "fail" existence of such arguments is a hard error,
841     "restrict" likewise except in interactive mode or in conjunction
842     with the -~ or -# options.
843   . *expandaddr* @371: new special value "fail" causes presence of
844     extended recipient addresses to be treated as a hard error.
845 $   In fact this is now interpreted as a comma separated list and may
846 $   also include the string "noalias", disallowing non-network-addresses
847 $   in the remaining (non-"extended") recipient addresses -- note this
848 $   applies to system global aliases only, not to those of `alias'
849 $   (except for their content, of course); "noalias" is a hard error in
850 $   combination with "fail".
852 - `unaccount' @197 and `undefine' @201 learned that * means "all
853   accounts" and "all macros", respectively. [4c09114]
855 - Spam handling has been rewritten completely, revealing a very old
856   misbehaviour in nail's subprocess handling (malloc in signal handler).
857   Please reread the manual section "Handling spam" @37 for more.
858   The motivation was also that bogofilter(1), sylfilter(1) etc. can
859   export their databases, so should the author ever find time to
860   implement spam handling in C like his predecessor it will be possible
861   to continue to use those databases: [topic/spam.2]
863   . *headline* @380 format %$ has been fixed,
864   . when working on multiple messages the operation is cancelled if an
865     error occurs,
866   . new variables: *spam-interface* @436 chooses the, well, ...
867     This one has extensive documentation.  Plus the interface dependent
868     *spamc-command* @438, *spamc-arguments* @439, *spamc-user* @440,
869     *spamd-socket* @441, *spamd-user* @442,
870     *spamfilter-ham* @443, *spamfilter-noham* @444,
871     *spamfilter-nospam* @445, *spamfilter-rate* @446,
872     *spamfilter-spam* @447 and *spamfilter-rate-spamscore* @448.
873   . The *attrlist* @351 variable gained a new slot for an unsure-spam
874     status (default character is ~).
875     Messages with that flag can be specified via the :S colon modifier.
877 - Fix: even though -# @66 implies *sendwait* @335 a user should have the
878   option to turn *sendwait* off again. [4274bed]
880 - Completely reworked mime.types(5) handling, note the backward
881   incompatible drop of `mimetypes': [topic/mime.types.2]
883   . dropped the `mimetypes' command,
884   . new commands: `mimetype' @138 and `unmimetype' @209,
885   . *encoding* @369 is now parsed case-insensitively,
886   . *mime-counter-evidence* @390 gained new bit 3 to indicate the desire
887     to forcefully overwrite MIME types if we think we know it better,
888   . *mimetypes-load-control* @391 gained an extension that can be used to
889     load more and specific files, which in addition may make use of
890     a new non-portable S-nail-specific TYPEMARKER extension.  The manual
891     section "The mime.types files" @32 has been rewritten accordingly.
892     (In short: mime.types(5) lines can be prefixed by @, @h@ or @H@, for
893     plain text, builtin HTML filter (plain text fallback), ditto
894     (without fallback).)
895 $ . The builtin MIME types now make a lot of use of the @ and @h@
896 $   TYPEMARKER extensions, so that you possibly can get rid of a lot of
897 $   pipe-TYPE/SUBTYPE=@ plain-text type hooks, shall you have used them.
899 - Support for RFC 2231 has been added.  This means that S-nail generates
900   truly MIME compliant messages and no longer requires help from other
901   MUAs!  In fact MIME parameter handling has been rewritten completely.
902   [topic/rfc2231]
904 - On the long run shell word expansion (via wordexp(3)) will be replaced
905   by a new, restricted (and thus (hopefully) safer), internally
906   implemented path expansion mechanism that only supports ~/ -> HOMEDIR
907   and $SHELLVAR / ${SHELLVAR}.
908   Since the original expansion is *so* hardwired that'll take time, for
909   now it is used for attachments only, but here all through the way.
911   But where it is used already it has consequences regarding backslash
912   escaping; to improve user experience a bit `~@' @239 will display the
913   escaped filename so that users only have to hit ENTER to accept paths:
914   e.g., "diet\ is \curd.txt" will show up as "diet\\ is \\curd.txt".
915   And, e.g., the test script does the following for RFC 2231 (excerpt):
917     MAILRC=/dev/null "${SNAIL}" ${ARGS} -Snodot \
918       -a "ma'ger.txt" -a "mä'ger.txt" \
919       -a 'diet\\\ is\ \\curd.txt' -a diet \"is\" curd.txt \
920                                          ^      ^ NOTE: 0x00A0, NBSP
921       -a ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt
923   The introduction of the manual section "COMMANDS" @5 has been updated
924   accordingly.  Also see -a @39.  [topic/fexpand.2]
926 - Assorted changes:
928   . Multiple crash-causing bugs regarding `source' @185, also if used
929     via `~:source', have been fixed. [aafb688,6979c73,4c6dfc2]
930   . The NAILRC environment variable is no longer supported. [104c254]
931   . The *Replyall* variable has been dropped as it was only an alias
932     for the POSIX standard *flipr* @296 variable. [topic/mft]
933   . New variables: *version*, *version-(major|minor|update)*,
934     *features*. [topic/okeys-attr]
935   . `varedit' @224 can be used to create variables. [topic/okeys-attr]
936   . New variable: *charset-unknown-8bit* @357. [9b672f6]
937   . *smtp-auth* @434 now defaults to "plain" (if *v15-compat* is set).
938     (Josef Jurek, Gavin Troy) [dcbb31a]
939   . All obsoleted: *autothread*, `thread' and `unthread'.
940     Use *autosort*=thread, `sort thread' etc. instead. [ef16f43]
941   . *showlast* @336 should have gained meaning. [4213d52]  (Gavin Troy)
942   . If the -r @57 option is given a full name specification (rather
943     than only an address), pass the MTA the respective address parts
944     via -F and -f. [dd90c14]
945 $   Also try to pass -F _and_ -f if an empty argument was given to -r
946 $   but *from* @378 (or, say, "From:") includes a full name. [5f68921]
947   . New variable: *term-ca-mode* @345 (for WANT_TERMCAP).  In
948     interactive mode S-nail can now be forced to use ti and te termcap
949     entries; in conjunction with a PAGER that does too ... [topic/termcap]
950   . `ghost' @123 gained a new mode and tweaks (see manual). [8a49b12]
951   . -r @57 option: fixed -h output and manual. [9a1a303]
952     (Martin Brandenburg)
953   . With *debug* or 2x *verbose* command lines (including those read
954     from files) are now traced. [06042c4]  (Bob Tennent)
955   . NAIL_TMPDIR (new) and TMPDIR environment variables are now
956     (guaranteed to be) set in pipe hooks. [a1cfb02]
957   . "Subject:" Re: trimming: MIME decoding is now performed. [ede7c7d]
958   . New variants of *pop3-bulk-load* @320: *-[USER@]HOST*. [5f5ae10]
959   . *crt*=0 @366 now really works. [22f1477]
960   . Maildir code now uses string relaxation which drastically reduced
961     memory usage for large mailboxes. [d1c945f]
962     And for the first time it performs real memory cleanup. [e549110]
963   . Improved error message on MTA exec failure.  (Dominic Meskys)
964   . Fix: "setenv noVAR" would have set noVAR. [3c1f886]
965   . When `setenv' is used to set any of HOME, USER, TMPDIR it'll be
966     reflected by our internal variables.  (Still hacky as special code
967     is needed to do so; also "set HOME=x" shadows HOME for "varshow
968     HOME" instead of being rejected.  Future cleanup work.) [3f03b80]
969   . Colon modifiers can now be joined, as in "f :uas". [8b6c259]
970 $ . Maildir code did faulty From_ line detection, resulting in any
971 $   non-quoted "From " line to start a new message (e.g., when doing
972 $   things like "copy * MAILDIR" we could have f...ed up completely).
973 $   Seems to have been added with Heirloom mailx 11.6 ([faf4b65],
974 $   2004-09-07).  Neither goes credit to Jacob Gelbman nor to Robin
975 $   Stjerndorff for messages to nail-devel@ on 2015-01-21 and
976 $   2015-02-20, respectively.  :-)) [ae539c9]
977 $ . *emptybox* has been obsoleted.  *keep* @308 will also affect
978 $   secondary mailboxes, and then both only deal with local regular
979 $   MBOXes anyway, not to e.g., maildir files nor IMAP boxes. [d747c0a]
980 $ . `unghost' @207 learned that * has to drop all ghosts. [34a92a5]
981 $ . NAIL_TMPDIR (new) and TMPDIR environment variables are now
982 $   (guaranteed to be) set for *agent-shell-lookup* @350. [5c3d7b5]
983 $ . Things like "copy * MAILDIR" from within an IMAP (or POP3?) mailbox
984 $   to a Maildir mailbox should now work again. [d747c0a]
985 $ . IMAP code did faulty From_ line detection, resulting in some
986 $   non-quoted "From " line to start a new message (e.g., when doing
987 $   things like "copy * MAILDIR" we could have f...ed up completely).
988 $   Present in Heirloom mailx since ever ([^b4ad9f2]). [66e3c93]
989 $ . New variable: *mbox-rfc4155* @312: because of all the bugs in From_
990 $   quoting etc., err, no.  "Albatros" will last.  I've just touched
991 $   a lot of stuff regarding MBOX writing: From_ quoting (which may
992 $   happen whenever we save already existent data in a MBOX, shall
993 $   the original generator not have taken appropriate steps to ensure
994 $   "false" From_ lines can't happen (S-nail does)) is now definitely
995 $   POSIX compliant, meaning that we may quote much too much lines.
996 $   So set *mbox-rfc4155* and we generate RFC 4155 compliant MBOX files,
997 $   possibly leaving behind backward POSIX-only software. [70ba3ef]
998 $ . New command line option: "-X cmd" @64 will execute "cmd" right
999 $   before normal operation starts.  The only option to execute commands
1000 $   in non-interactive mode when reading of resource files has been
1001 $   actively suppressed.  This is an experimental feature. [d202869]
1003 ChangeLog (purely technical)
1004 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1006 . Improved output flushing, avoidance of printing of useless
1007   output (especially smoothens *editalong*). [topic/stdout-fflush]
1008 . String relaxation is now everywhere (but IMAP), the builtin buffer
1009   sizes were reduced to 1/3.
1010 . Again a manual review.  The manual now supports mdocmx(7).
1011 . Using builtin ARC4 pseudo-random for random generation.
1012 . Better signal handling here and there.
1013 . Fixed most "unpluggable memory leaks" by plugging them via chains of
1014   signal handlers and longjmps.  Terrible.  But no more leaks.
1015 . A lot of this and that.  (Really.)
1016 $. Slightly more tolerance for faulty Base64 encoding in message text
1017 $ parts.  No real healing possible today, but requires v15.0 environment.
1018 $ This, however, only affects invalid data that, e.g., OpenSSL doesn't
1019 $ even give any output for! [54137fd,4d59cca]
1021 I didn't make it to improved message selection.
1022 And i also can't seem to find the necessary peace of mind to do a real
1023 review with this codebase, it's always that i start off doing something
1024 non-reviewish; but i'll see the day (what i hope).
1026 v14.7.11, 2015-01-04
1027 --------------------
1029 A cumulative bugfix update release.
1031 Credits to Marius Nestor, Tim and Johannes Löthberg.
1032 Apologies to Ypnose, Mantas Mikulėnas for not really listening.  Thanks!
1033 Special apologies to Mantas: i forgot to credit him in commit [fda7acd].
1034 We welcome Marius Nestor and Tim in THANKS.
1036 NOTES, ChangeLog (packager-affine)
1037 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1039 - Our nail.rc now sets *keepsave* by default. [38fdacb]
1041 ChangeLog
1042 ^^^^^^^^^
1044 - ~t will no longer loop infinitely.
1045   Bug introduced nail "[9.27] released 5/13/01". [a105121]
1047 - We now support -h and --help command line options. [7409040]
1048   (Marius Nestor)
1050 - Fix autosort crash in non-thread mode.
1051   Bug introduced together with threaded display in
1052   nail "[11.2] released 8/15/04". [4064771]
1054 - Two fixes for IMAP credential lookup without a set *v15-compat*:
1055   1. Faulty password reuse. [fda7acd]
1056   2. Missing duplication of a string could crash S-nail. [21c05f8]
1057   3. The latter was not detected during my (anyway too shallow) testing
1058      because a long time back i didn't implement memory trashing for our
1059      HAVE_DEBUG memory wrapper: caught up. [6ef2c13]
1060   (Tim, Ypnose, Mantas Mikulėnas)
1062 v14.7.10, 2014-12-18
1063 --------------------
1065 A bugfix release of v14.7.9 which fixes `ghost' processing
1066 and reenables further command line arguments of ghosts, as in
1068   ? gh ll !ls -Flar
1069   ? ll | grep nail
1071 In v14.7.9 the " | grep nail" part would not be recognized since
1072 a terminating NUL character would be placed before it (which in
1073 the C programming language means "end of string").
1074 It is a one line patch, commit [f86f7aa].
1076 v14.7.9, 2014-12-17
1077 -------------------
1079 This is a subminor release to address CVEs 2004-2771 and 2014-7844 [1].
1081 These CVEs address decade old documented behaviour that was supposed to
1082 be classifieable under "feature" rather than "bug": it is possible to
1083 use file and pipe addresses, as in "./out.mbox" or "|cat > out.mbox" and
1084 have the mail delivered accordingly.
1085 They enforce a new option *expandaddr*, unset by default, which
1086 specifies wether such special addresses shall be supported or not.
1088 Thanks to Jürgen Daubert and Peter Hofmann.
1090   [1] http://seclists.org/oss-sec/2014/q4/1066
1092 ChangeLog
1093 ^^^^^^^^^
1095 - In -v / *verbose* mode SSL/TLS certificate date and time information
1096   will be printed; until now we only supported UTC times which could
1097   result in false messages stating that the datetime is bogus. [16ef155]
1099 - *netrc-lookup* could have matched ambiguous entries. [debbf98]
1101 - *sendmail-arguments* works without "allocating" more destination space
1102   by adding space characters to the string. [1c7daaf]
1104 - Always terminate MTA option processing with "--".
1105   Part of addressing the CVEs as above: prevent system-wide aliases that
1106   start with a hyphen to be interpreted as arguments to the MTA. [597249b]
1108 - New value: *expandaddr*, as above.
1109   Extending the CVE S-nail's *expandaddr* can be set to the value
1110   "restrict" in which case even a set *expandaddr* doesn't enable file
1111   and pipe addresses in non-interactive mode unless -~ or -# command
1112   line options were given. [ba8c596]
1114 - fio.c:_globname(): use WRDE_NOCMD if available.
1115   Part of addressing the CVEs as above: prevent command substitutions
1116   when expand() strings (mailbox names). [7c7134b]
1118 - Drop the "line" statistics counter that could be seen when `copy'ing
1119   or `save'ing messages, only keep the "byte" counter.  The former was
1120   a lie since it counted the lines of the source- rather than of the
1121   destination message.  Bug introduced on 2007-07-16 (in [670ea1c]).
1122   We'll reintroduce correct statistics once we can generate them.
1123   Could crash S-nail because it assumed false (readonly) buffer sizes.
1125   I give the credit to Peter Hofmann since i think this is why he
1126   insisted on very long, soft-newline continued quoted-printable lines
1127   back in the day.  Wasn't seen since the stdio buffer sizes on
1128   practically all operating systems are pretty large, and the access in
1129   the buffers was read-only (so no canary cheep). [effb676]
1131 - Until now blocks inside of `if' etc. were evaluated (as noops) even if
1132   the conditional block was as such a noop.  Therefore non-existing
1133   commands etc. would have been recognized as errors.  From now on this
1134   is no longer true. [c41d564, dc15be6]
1136 - `ghost's can now defined without quoting. [f183818] E.g.:
1138     -? ghost ls '!ls -latro'
1139     +? ghost ls !ls -Flatr
1141 v14.7.8, 2014-09-29
1142 -------------------
1144 I would like to give prominence to Gaetan Bisson.
1146 - Fix: "make test" works when no "s-nail" binary is produced, as via
1147   "make SID= NAIL=mail all".  (Gaetan Bisson) [d704599]
1149 - Fix: on NetBSD and FreeBSD snprintf(3) follows POSIX and fails to work
1150   if the "size_t n" argument is larger than INT_MAX.  Linux systems
1151   don't have this problem (presumably the function fails if buffer runs
1152   out, but who knows, this is GNU software ;), and OpenBSD reduces any
1153   "n" >INT_MAX to INT_MAX.
1154   But anyhow, what S-nail did is not standard conforming, and since this
1155   version is hopefully used for many months i think this -- actually
1156   a bug -- is worth fixing with a subminor release. [3b19639, cb674bd]
1158 v14.7.7, 2014-09-27
1159 -------------------
1161 Thanks to Jan Chaloupka, Frantisek Holop, Matthias Kilian and
1162 Peter Hofmann.  We welcome Frantisek, Matthias and Peter in THANKS.
1164 NOTES, ChangeLog (packager-affine)
1165 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1167 - 1. No need to change anything.
1169   2.1. The build system has been reworked a bit, `conf.rc' has been
1170        renamed to `make.rc'.
1171   2.2. It is now possible to say 1/yes/true 0/no/false,
1172        case-insensitive, e.g., "WANT_ICONV=yes".
1173   2.3. Some options can be "require"d: a failure to fulfill the request
1174        causes the configuration step to fail, e.g.,
1176         $ make WANT_ICONV=require WANT_SMTP=require WANT_SSL=require all
1178        Should fail unless all of iconv(3), BSD sockets and OpenSSL
1179        are available.
1180   2.4. This can be improved.  (E.g., there should be warnings if an
1181        option is required that doesn't support this mode.  Or -- all
1182        options should be requireable.  Hm.)
1183   [topic/mandconf]
1185 - The build system should now correctly auto-detect $MAILSPOOL and
1186   $SENDMAIL!?! [c1a51bb]
1188   P.S.: why are you guys setting those explicitly?
1189   It is a BUG if that doesn't work automatically!
1191   P.P.S.: Packager heroes! Packager heroes!! Packager heroes!!!
1193   P.P.P.S.: .. and a nice weekend ;)
1195 - "make test" will now regulary test S/MIME when available.
1196   (A few tests have been added, to test the QP issue and to test the RFC
1197   2047 MIME rewrite; which is still intermediate though.)
1199 - 2014-09-27: add-on:
1200   you may see more warnings for format strings which use the
1201   "size_t" integer type, and in the future even more of these will
1202   happen -- please read `INSTALL' again for more on that, but be
1203   ensured that we still compile-time-assert that the format
1204   strings fits the type size.  (Enable ISO C99 mode for your
1205   compiler will cause any warnings to vanish.)
1207 ChangeLog
1208 ^^^^^^^^^
1210 - FIXES: Maildir folders will now display correct content even after
1211   `newmail'.  (Matthias Kilian; Frantisek Holop for nudging!) [158cfb6]
1213   Also *newmail* was somewhat broken since introduction of `File'
1214   command (missed updating a function argument back then). [58017a8]
1216   And unfortunately the readonly state of a folder could be forgotten
1217   after `newmail', too. [0cd5c9e, 0679ee4]
1219 - *quote-fold*: fix faulty line length calculation when a line started
1220   with a lot of leading whitespace. [731b8c9]
1222 - Fix: calculation of required memory for quoted-printable encoding was
1223   faulty for very long input that forces soft newline insertions.
1224   (Peter Hofmann) [c299c45, b043cfc, d105d80]
1226 - `headers' was falsely documented. (Jan Chaloupka) [ee76a42]
1228 - Complete rewrite of RFC 2047 header encoding.
1229   (Credit to Peter Hofmann because he peeked shitty MIME handling)
1230   [0add96e]
1232   Remark:
1233   S-nail doesn't yet support RFC 2231 and thus our RFC 2047 support is
1234   incomplete; also stateful character encodings, like ISO-2022-JP, are
1235   still not supported and thus we're in fact non-compliant.
1236   The same that it ever was.
1237   Well, we're not alone, and e.g. mutt(1) offers
1238   a "rfc2047_parameters=yes" option to deal..., also with us.
1239   I really hate to say that.
1240   But of course we all know that the mail standards are inherently
1241   braindead anyway, right?  O-ho, yes, they are like that.
1242   I hope S-nail isn't part of the problem no more in 2016.
1244 - Oh, the [topic/retrim] in v14.7.6 actually missed a single occurance
1245   of fixed Re: checking! [ed1c865]
1247 - Allow $USER to be set to the empty string and no longer abort(3) if
1248   the user is not known, but instead exit(3) with value 67 (BSD
1249   EX_NOUSER constant from /usr/include/sysexits.h).
1251     $ USER= LC_ALL=C s-nail ...
1253   [a846fdb]
1255 v14.7.6, 2014-08-15
1256 -------------------
1258 Thanks to Georg Schlisio.
1260 Several bugfixes: it's definitely more than enough now, v14.7.8 in mid
1261 2015 will have to and will definetely ship with a test series.
1263 NOTES, ChangeLog (packager-affine)
1264 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1266 - The global default nail.rc file now sets *sendcharsets* to
1267   'utf-8,iso-8859-1', i.e., the order has been reversed.
1268   (Georg Schlisio)
1270   Also *bsdflags* is no longer set by default. [e39679b]
1272 ChangeLog
1273 ^^^^^^^^^
1275 - Fix: in some configurations a `resend' message would end up with two
1276   'Resend-Date:', instead of one such and a 'Resend-Message-Id:' field.
1277   [21b9218]
1279 - The internal exit status of a `mail' command will now be 0 upon
1280   success and 1 on failure, not vice versa. [1112375]
1282 - FIX: dependend on the set of retained / ignored etc. headers a MIME
1283   part with a *pipe-CONTENT/SUBTYPE* set to the special '@' plain-text
1284   command would try to execute a command equal to the name of the last
1285   header of the MIME part, most often 'Content-Disposition:'.
1286   [dee1fed,686a383]
1288 - Detected that the `fwd' / `forward' command(s) used the false (imho)
1289   mode to strip the address from the command line, now it's possible to:
1291     ? fwd MSG-SPEC "my friend <his@addr>"
1292   [1c4e164]
1294 - New variable *reply-strings*.  It's more unlikely now to end up with
1295   threads which read 'Re: Aw: Re: Aw:' etc. [topic/retrim]
1297 - Because of user inconvenience, introduce a temporary hack not to mince
1298   user input lines in history entries, even if this means that each and
1299   every line is first duplicated before it is used.  So now the `fwd'
1300   command as above will enter history in the given form. [f1ded4c]
1302 ChangeLog (purely technical)
1303 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1305 - Fixed one missing IMAP / IMAP-cache string relaxation restore.  (In
1306   about six weeks or so this condition hit me once). [66ef04f]
1308 P.S.: I still see an occasional IMAP-cache crash that occasionally
1309   happens after several connects and diconnects without intervening
1310   folder changes; after being bitten once by that even after commit
1311   [cf7f63d] it seems this is a deeper structural problem, but i'll try
1312   to track that down for v14.8.
1314 v14.7.5, 2014-08-01
1315 -------------------
1317 Jan Chaloupka (jchaloup AT redhat DOT com) reported on nail-devel@ that
1318 Heirloom mailx can be crashed by setting *smtp* in combination with with
1319 *from* effectively set to a NULL string.  I first was optimistic, but it
1320 turns out S-nail can, too.
1322 v14.7.4, 2014-07-15
1323 -------------------
1325 Fixes maildir code which was broken in May (too).
1326 Readds auto-detection of compressed boxes (i.e., if `$ Fi mybox' is
1327 executed and `mybox' doesn't exist, but `mybox.bz2' does, then the name
1328 is automatically expanded and `mybox.bz2' is used instead).
1329 Sorry for the inconvience.
1331 v14.7.3, 2014-07-14
1332 -------------------
1334 Thanks to Mantas Mikulėnas (grawity AT gmail DOT com).
1336 This is a bugfix release which fixes a regression in the handling of
1337 user credentials when *v15-compat* is not set, introduced in v14.7.1,
1338 quoting Mantas:
1340   In other words, $folder *requires* the @ to be percent-encoded, but
1341   $password requires the *opposite*.
1343 And that is not valid when *v15-compat* is not set.
1345 v14.7.2, 2014-07-12
1346 -------------------
1348 Thank you: Gavin Troy, Bob Tennent (rdt AT cs DOT queensu DOT ca),
1349 Tarqi Kazan.
1351 NOTES:
1352 ^^^^^^
1354 v14.7.2 brings incompatible credential lookup changes when *v15-compat*
1355 is set; the lookup order now is:
1357 - *user-HOST*, *user*, [.netrc] ...
1359 - *password-USER@HOST*, *password-HOST*, *password*, [.netrc] ..
1361 Changelog in reverse order, oldest first.
1363 ChangeLog (packager-affine)
1364 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1366 - New configuration option WANT_AGENT to support *agent-shell-lookup*
1367   (, -HOST, -USER@HOST) lookups of potentially encrypted password
1368   storage (inspired by Gavin Troy) [b2d41d3,516a7f0]
1370 - MAILSPOOL is now automatically set to /var/spool/mail if that
1371   directory exists, only otherwise we use /var/mail [4a83018]
1373 - WANT_GSSAPI is again enabled by default - Tarqi Kazan has correctly
1374   pointed out that the system environment at compilation time is likely
1375   to reflect the politics and/or preferred configuration of packagers,
1376   and self-compilers have always the chance to configure themselves
1377   (Tarqi Kazan) [398eb29]
1379 ChangeLog
1380 ^^^^^^^^^
1382 - `un{,save,fwd}{ignore,retain}': let '*' mean 'all fields' [a1f1da9]
1384 - Bugfix: `setenv' takes 1-1000 arguments, not exactly 2 [daf2ea8]
1386 - New command: `varedit' edits the value of an existing variable in
1387   $EDITOR [93070d2]
1389 - New commands: `File' (and `Folder') explicitly open a mailbox in
1390   readonly mode, thus finally offering the possibility to avoid flag
1391   updates etc. whenever so desired [b1f5f2d]
1393 - Bugfix: since May the header display would display tabulators in an
1394   UTF-8 environment as replacement characters [870b314]
1396 - *mime-counter-evidence* now is a valued option.  Set bit two (value
1397   two) and the detected real MIME type is carried along with the MIME
1398   part so that it is used instead of `application/octet-stream' to
1399   lookup possibly registered *pipe-CONTENT/SUBCONTENT* handlers.
1400   (Bob Tennent) [81473f8]
1402   Also pipe handlers will now be passed several MIME informations via
1403   environment variables, please see the manual for more.
1404   (inspired by Bob Tennent)
1406 - Resource file loading now prints a diagnostic when loading was stopped
1407   due to a processing error.  This behaviour is also required by POSIX.
1408   (Bob Tennent) [fd42684]
1410 - Incompatible changes in credential handling, as above.
1411   [25d7735,3cdb6a3]
1413 - *netrc-lookup* is now a real chain and has -HOST and -USER@HOST
1414   variants (though the latter only for password lookups) [59fc226]
1416 - .netrc machine names are now lowercased before use [28c6fee]
1418 - The manual has seen some reorderings, a TOC will be shown if you
1419   '-dWANT_TOC=1' when using *roff(1) (as has been done for the online
1420   manual)
1422 - There is a new file `THANKS' [6b5cb3e]
1424 ChangeLog (purely technical)
1425 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1427 - IMAP and IMAP cache now use string relaxation which *drastically*
1428   reduces memory usage on large mailboxes [e5598ce]
1430 - Fixed compilation on old OpenBSD installations without wordexp(3) as
1431   well as with GSS-API and WANT_AMALGAMATION and now using #pragma's to
1432   get rid of some warnings [topic/ccstuff]
1434 v14.7.1, 2014-06-24
1435 -------------------
1437 Thanks to Georg Schlisio (g DOT schlisio AT dukun DOT de),
1438 Wiesław Magusiak (wiemag AT poczta DOT onet DOT pl), Tarqi Kazan and
1439 Karol Blazewicz.
1441 Very special thanks: Gavin ".. .. Speeding kills. .." Troy from Ireland
1442 and Ypnose "Gloria?? C'est une mouton!" from France.
1444 Changelog in reverse order, oldest first.
1446 ChangeLog (packager-affine)
1447 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1449 - WANT_NOGETOPT is gone. [73f0605]
1451 - WANT_NETRC: new option (on by default; see below). [topic/netrc]
1453 ChangeLog
1454 ^^^^^^^^^
1456 - Manual slightly improved in respect to LC_ALL etc. settings.
1457   The knowledge treshold value is much too high for a normal user;
1458   i hope that at some later time we can offer much more (at least
1459   optional) automation on the protocol level (e.g., timeout values,
1460   protocol features supported by servers etc.), at which time we will be
1461   able to make the manual more user friendly. (Georg Schlisio)
1462   [56fab16,bd1e11f; ArchLinux Wiki]
1464 - The `@' search command has new "header" keyword, which searches in all
1465   headers.  Shortcuts: "<" = "header", ">" = "body", "=" = "text".
1466   ("body" and "text" still perform full text searches _including_ MIME
1467   part header content.)
1468   [b0138a7]
1470 - The -O command line option is legacy and will vanish in v15.0.
1471   Arguments to the MTA can henceforth be passed after a `--' separator
1472   on the command line, as in
1473     echo bla|s-nail -vvd -s sub some@where -- MTA ARGS MADE EASIER
1474   [topic/mtaarg]
1476 - New *sendmail-arguments* option; content will be (converted to list
1477   and) joined onto other MTA command line arguments (Wiesław Magusiak)
1478   [topic/mtaarg]
1480 - *colour-pagers* is gone -- instead we have *colour-pager*, which is
1481   a boolean and off by default.  We again set LESS (and LV) environment
1482   variable(s) to automatic turn on colour support in $PAGERs, but only
1483   if the variable in question is not yet set.  (That is -- in order to
1484   get coloured $PAGER you at least have to set *colour-pager* now.)
1485   (Tarqi Kazan) [b794f5e]
1487 - Terminals no longer need to be added to *colour-terms* if their name
1488   (in $TERM) includes the string "color". (Gavin Troy) [ce2c7f6]
1490 - Karol Blazewicz opened a discussion in the ArchLinux Forum (s-nail
1491   14.7-1 doesn't work [1]) but i didn't realize his actual problem --
1492   luckily Gavin Troy wrapped his head around the real problem, and that
1493   finally opened my eyes against a whole can of worms in the new URL
1494   and credential handling!
1496   Then Ypnose also came along and reported an issue with IMAP handling
1497   that was related to the compatibility credential handling of the new
1498   URL and credential layer.
1500   (Gavin Troy, Ypnose, Karol Blazewicz) [a5c40ba]
1501   [1] <https://bbs.archlinux.org/viewtopic.php?id=182653>
1503 - We now also have -HOST and -USER@HOST *smtp-use-starttls*. [bfb186a]
1505 - Gabby history entries will now be saved and restored as such, in case
1506   *history-gabby-persists* is set.  (For this to work properly
1507   a possibly existing history file needs to be reset.) [b5502cc]
1509 - We now have optional .netrc support (*v15-compat* set).
1510   Set *netrc-lookup* and we'll look in $NETRC / ~/.netrc for user
1511   credentials.  The `netrc' command will show or clear the entry cache.
1512   E.g., this is my new account macro:
1514    set v15-compat ssl-method=auto
1515    set netrc-lookup
1516    set smtp=smtps://smtp.yandex.ru:466 smtp-auth=plain smtp-hostname= \
1517          hostname=yandex.com
1518    ghost xp 'fi %:pop3s://pop.yandex.ru'
1519    ghost xi 'fi %:imaps://imap.yandex.ru'
1521   As an extension to the .netrc syntax we support a single
1522   introductional subdomain wildcard, e.g., my relevant ~/.netrc entry:
1524     machine *.yandex.ru login NAME password PASS
1526   Following a suggestion of Gavin Troy we have multi account support,
1527   i'm not quite sure wether this is portable across .netrc using
1528   applications, e.g., i could have written the above like
1530     machine *.yandex.ru login NAME
1531     machine *.yandex.ru password PASS
1532     machine *.yandex.ru login NAME2
1534   (I hope i don't lie and this really works.)
1535   (Suggested by Gavin Troy and Ypnose, testing and feedback Gavin Troy)
1536   [topic/netrc]
1538 - Add primitive support for RFC 3798 via the new
1539   *disposition-notification-send* variable.  This is not yet
1540   a truly conforming implementation (it simply injects the necessary
1541   header) and it requires the *from* variable to be set.
1542   More in the far future, sorry. (Wiesław Magusiak) [ca31d32]
1544 ChangeLog (purely technical)
1545 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1547 - Interrupt protection during (recursive) macro calls with `localopts'
1548   on should now no longer be crashable at all.  Quote [a4e85c0]
1549     It is of course all pretty intermediate until we have a signal
1550     manager and we can actually poll signal states at those places where
1551     we are capable of and desire to handle them.  But it should work
1552     today and look nicer than it did.
1553   [25caeb9,592499f,a4e85c0]
1555 - `ghost' handling performs more strict name checking on ghost names in
1556   order not to allow names which would later not be parsed as a whole.
1557   [1523a6d]
1559 - Dropped catopen(3) support (we never really had it)!  We will have
1560   a new S-nail-specific gettext(3)-alike thing in v14.8.
1561   [topic/i-wanna-have-a-dog]
1563 v14.7, 2014-06-07
1564 -----------------
1566 Thanks go to Tarqi Kazan (tarqi AT cfs DOT or DOT gs) and Johannes
1567 Löthberg (johannes AT kyriasis DOT com), as well as Martin Neitzel.
1568 (And the winner is... Gavin Troy for his role in "Silence from Ireland".
1569 Yay!)
1571 Notes
1572 ^^^^^
1574 - Since S-nail now performs more-or-less proper percent-encoding as per
1575   RFC 3986 users of *imap-cache* have to (either throw away and recreate
1576   or) adjust their local cache, e.g. as follows (adjust CACHEDIR and
1577   echo(1) to mv(1) as necessary; won't work with paths with whitespace):
1579   $ CACHEDIR=${HOME}/traffic/.mail-cache; \
1580   find ${CACHEDIR}/ -depth -type d |
1581   while read d; do
1582     b=`basename ${d}`
1583     r=`echo ${b} | sed -e s/:/%3A/g -e s/@/%40/g`
1584     if [ ${b} != ${r} ]; then
1585       d=`dirname ${d}`
1586       echo ${d}/${b} ${d}/${r}
1587     fi
1588   done
1590 ChangeLog
1591 ^^^^^^^^^
1593 - New variable *history-gabby* can be set to add much, much entries into
1594   the history than is done normally.
1595   For the NCL only, setting *history-gabby-persist* will cause those
1596   entries to be saved into *NAIL_HISTFILE*, too, which they are not by
1597   default with it (the other command line editors should always save).
1598   [6026507]
1600 - The `online' alias for `connect' has been obsoleted. [d5cfde4]
1602 - New CONFIG=MAXIMAL make option. [c0d4087]
1604 - Support compilation on new OpenBSD with their reduced OpenSSL clone.
1605   This topic also includes the real solution for getting rid of
1606   a strcat(3) warning that i reintroduced with s-nail-14_5_2-smime.patch.
1607   [topic/obsd56]
1609 - Our -r command line option is now mapped to a `-f' MTA option -- the
1610   sendmail(1)-compatible `-r' is long obsoleted! (Johannes Löthberg)
1611   [d0ead39]
1613 - New `elif' command so that we now have if..elif..else..endif.
1614   If the optional regular expression support is available the new
1615   conditions `=~' and `!~' can be used to perform (case-insensitive)
1616   regex matching with `if' and `elif'. [topic/condsplus]
1618 - New `~R' tilde escape (like `~r', but indent lines). [fae1f29]
1620 - Improved multibyte-safety (e.g. for *prompt*) and a bit of
1621   compatibility ("support" would be a wording much too strong) for
1622   bidirectional text via the new *headline-bidi* variable.
1623   [topic/unibidi, topic/mbbidi]
1625 - Diversified behaviour of -v command line option as well as *verbose*
1626   to support multiple levels of verbosity; the latter is now ternary
1627   when set and boolean when unset.
1628   This was the ground on which SSL certificate validition verbosity was
1629   implemented (*verbose* level 1: certificates, level 2: network
1630   communication et cetera), though much is left to do.
1631   This has been suggested long ago by (Martin Neitzel). [topic/smverb]
1633 - ^C in compose mode with *ignore* set acts now POSIX compatible
1634   [0275d09]
1636 - If *encoding* is set to base64 then we don't ignore that user
1637   wish and use quoted-printable (when 7bit doesn't suffice) [2ca201f]
1639 - New `urldec' and `urlenc' commands. [63e869e, fbd95e8, 0af5b1b]
1641 - New `setenv' and `unsetenv' commands. [5e2ed79]
1643 - Support for GSS-API authentification has been added (request and
1644   testing by Tarqi Kazan).
1646   Note that the following implicit relation is gone:
1647     *smtp-auth*
1648       If set to `login', or if unset and smtp-auth-user is set, `AUTH
1649       LOGIN' is used
1651   This topic branch also added support for the SUBMISSION protocol of
1652   RFC 6409, so re-reading the *smtp* manual may bring benefits.
1653   [topic/smtp]
1655 - A new, backward-incompatible URL syntax and credential lookup scheme
1656   has been introduced that is accessible when the new *v15-compat*
1657   variable is set.  If used, credential lookup occurs before a network
1658   connection is made.
1660   The new manual section "URL syntax" describes the new credential
1661   variable chains, and documentation of *from* should be read again, as
1662   i now also refers to the new *smtp-hostname* variable.
1664   Note that the generated `Message-Id' has also changed.
1666   (Messy old way pointed out by Tarqi Kazan)
1667   [topic/url, topic/cred]
1669 - `resend' should be truly fixed and (fwiw) can also resend to pipe and
1670   file addressees. [topic/resend]
1672 - Support for empty lines in macro and account definition blocks (as
1673   required by POSIX for startup files in general) [43cdf92]
1675 - The nail command line editor gained the possibility to use PgUp /
1676   PgDown / Home / End instead of z[-+0$] commands on xterm-compatible
1677   terminals; and ^O equals a `dp' there, too. [8c57be2, 7c30e61, 95e672f]
1679 v14.6.4, 2014-04-07
1680 -------------------
1682 Many thanks to Gaetan Bisson.
1684 ChangeLog
1685 ^^^^^^^^^
1687 - Avoid segmentation faults with -L option if s-nail is opened on
1688   non-existent mailboxes, e.g. '$ MAIL= s-nail -Lx'.  (Gaetan Bisson)
1689   [e6c86da]
1691 v14.6.3, 2014-04-05
1692 -------------------
1694 Thanks and greetings to Gavin Troy, Gaetan Bisson and Tarqi Kazan (tarqi
1695 AT cfs DOT dyndns DOT biz).
1697 ChangeLog (packager-affine)
1698 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1700 - WANT_AUTOCC knows that clang(1) version 1 can dig -Wstrict-overflow=5.
1701   [2f77640]
1703 - '$ make test' should work even if you are not steffen.
1704   (Gaetan Bisson, Gaetan Bisson, Gaetan Bisson, Gaetan Bisson,
1705   Gavin Troy, Gavin Troy) [8b796ba]
1707 ChangeLog
1708 ^^^^^^^^^
1710 - *autoinc* is gone -- this is *newmail*. [07a8462]
1712 - Working with large(r) IMAP boxes should work again without causing
1713   segmentation violations. (Gavin Troy) [761dd87, b0ce180]
1715 - With our builtin getopt a.k.a. WANT_NOGETOPT=1 usage of the -L option
1716   caused segmentation violations. (Tarqi Kazan, Gaetan Bisson) [f2c2646]
1718 - The decision wether we need $PAGER or not now also incorporates the
1719   informational lines we inject for messages. [316b4cd]
1721 - Drop `defines', add `unaccount', rename `undefine'..
1722   The `defines' command has been united with `define' -- just like
1723   `account' will list all defined accounts when used without arguments
1724   `define' will now do so for macros.  And `undefine' is the new name of
1725   `undef'.  The new command `unaccount' can be used to delete all given
1726   accounts, in equal spirit to `undefine' and macros.
1727   All of this is still vulnerable against recursivity, e.g., deleting
1728   an executing macro still works, but don't that. [b0b3275]
1730 - Rename `var-inspect' to `varshow'; silly oversight that `var-inspect'
1731   will try to lookup a variable "-inspect".  Ouch. [afffd30]
1733 - Without HAVE_ICONV the character set iterator sofar used
1734   *charset-8bit* as the last resort, whereas it should have used
1735   *ttycharset*.  Fixed.
1736   P.S.: All this still preliminary, we await the MIME and send layer
1737   rewrite to calm down the stuff for real. [edc3226, df9aefd]
1739 - During `~@' editing it is possible to leave the possibly endless
1740   character set selection loop by interrupting via ^C.
1741   In the meanwhile this effectively drops the currently edited
1742   attachment and leaves the entire attachment selection session; it
1743   doesn't make sense to make it any better until we have our signal
1744   manager and stop jumping around.
1746   This changeset should also fix dangling Content-Xy MIME information of
1747   attachments which were in the same slot before, e.g., if #1 was
1748   a message attachment and that was changed on-the-fly to be a real file
1749   attachment then the Content-Description would still have stated that
1750   it is a message attachment.
1751   [07a8462]
1753 ChangeLog (purely technical)
1754 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1756 - Since it has been decided to remain compatible to ISO C89 we cannot
1757   use the ISO C99 `z' format string modifier (printf(3)).
1758   Since quite some time we make efforts to provide our own `ZFMT' macro
1759   (in `nail.h') which provides somethint compatible, but on 32-bit
1760   platforms compilers often complain nonetheless.
1761   Therefore we now also have a compile-time assertion that proves that
1762   our `ZFMT' macro is really correct. [397e4d1]
1764 v14.6.2, 2014-03-01
1765 -------------------
1767 Many thanks to the perpetual Gavin Troy.
1769 - Faulty notational change of system call return values from `<0' to
1770   `==-1' caused endless waitpid(2) loop. [d6f316a; test(!): 79fd761]
1771   (Gavin Troy)
1773 - (GLibC) STD I/O overoptimizes rewind(3) so that underlaying file
1774   descriptor offset is not reset to 0.  Generalize the already
1775   used `really_rewind()' hack and use it not only in
1776   `savedeadletter()' but also in `page_or_print()'.  It is likely
1777   that this not also fixes `history' listing but also some other
1778   things which go through the pager, dependend on the setting of
1779   *crt* etc., and on at least GNU/Linux systems. [463660f]
1781   Note: standard I/O does NOT offer a possibility to do this in
1782   a non-hackish way.  It is thus likely that S-nail will gain
1783   a completely new I/O layer in the future.  That'll also be faster.
1785   P.S., 2014-03-04:
1786   This note is false: POSIX Issue 7 overloaded the meaning of
1787   fflush(3): when used on readable streams the file offset of the
1788   underlaying file descriptor is adjusted to that of the stream.
1789   (nail.h: adjust really_rewind(): POSIX Issue 7 defined a way..)
1790   uses this official approach instead if _POSIX_VERSION>=200809L.
1792 - Old shells will now correctly execute an error-condition
1793   execution path in `mk-conf.sh'. [afef55f]
1795 v14.6.1, 2014-02-22
1796 -------------------
1798 Thanks to Andy Switala (andy DOT switala AT gmail DOT com).
1799 And thanks to all package maintainers for their stamina.
1801 At the first workday after the release i've run into a bug that was
1802 caused by an oversight, a double-Fclose() that would be harmless if we
1803 wouldn't forcefully panic() when we encounter it!
1805 So i've spent another week on a review, and despite fixing many
1806 additional notational oversights i haven't found more oversights of
1807 newly introduced problems.  On the other hand i've found and fixed some
1808 old problems during the review, and tweaked some other things:
1810 - The INSTALL file now has a `Current codebase state' section.
1812 - Commands invoked via `!' should now be interruptable.
1813   I'm afraid the exit status of such a command will not be reflected by
1814   the return value of the `!' command yet, but hey, at least `!sleep 10'
1815   can now be interrupted -- try this with another Berkeley Mail!
1816   [381ff46]
1818 - All credential prompts should now be interruptable.
1819   (Inspired from Andy Switala) [c3bb2a2]
1821 - 'make test' will now test a silly S/MIME case when WANT_DEBUG (or
1822   'make devel') was used. [8cff17f]
1824 - *batch-exit-on-error* should now look at the exit status of *every*
1825   command when the command loop ticks. [c7e7d53]
1827 - The new `[?name-list]?search-pattern' search expression has been
1828   changed to `[@name-list]@search-pattern' -- like this it doesn't clash
1829   with the `?' help command and can thus be used on a line by itself,
1830   causing the default command (`next') to be invoked on its' result,
1831   shall there be one.  Ok, yes, that was surely also an oversight.
1832   [8368f70]
1834 - *attrlist* must now be exactly 13 characters, just as it should
1835   be.  An error message is printed if not.  It was always komisch,
1836   but i'd buggified it somewhen in the past.  Now fixed.
1837   [part of 0d4e934]
1839 - The NCL WANT_TABEXPAND feature now also works if *newfolders* is
1840   set to `maildir'.  Yet, if a folder was assumed to be of maildir
1841   type, shell globbing would not occur. [part of f5c184c]
1843 - The `X-Decoding-Data' S/MIME header field was set to the epoch
1844   origin instead of NOW in v14.6.
1846   Also the `certsave' command now supports file globbing (i.e.,
1847   '~/.certs/' should end up in your $HOME now).
1848   [both part of 7e0aec7]
1850 v14.6, 2014-02-15
1851 -----------------
1853 + With this release the S-nail codebase has been converted to my usual
1854   style of function-code-flow and notation.
1856   ?0[]$ git diff --shortstat v14.5.2..HEAD
1857    55 files changed, 28065 insertions(+), 25356 deletions(-)
1858   ?0[]$ git diff --ignore-all-space --shortstat v14.5.2..HEAD
1859    55 files changed, 14664 insertions(+), 11955 deletions(-)
1861   Maildir and S/MIME support have been restored, and a MIME bug that
1862   could have led to missing data in header display+ has been fixed.
1863   Ah, and users of compressed boxes should now feel luckier, too --
1864   at least once they've realized that the compress extension is no
1865   longer appended automatically, but must be given explicitly.
1867   Thus: i hope that all those i-am-new-to-the-codebase bugs i've
1868   introduced over a year ago have been found and fixed, and that
1869   v14.6 is the true "sweet sixteen" (months of maintainership).
1871 ChangeLog (packager-affine)
1872 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
1874 - If WANT_AMALGAMATION is set, `-pipe' will be added to our CFLAGS
1875   (which are only honoured with WANT_AUTOCC, of course).  [1330411]
1877 - New configuration option: WANT_IMAP_SEARCH, enabled by default.
1879   The regular expression support for IMAP-style search expressions has
1880   been removed again: it changed the IMAP search semantic in that it
1881   couldn't be executed on the server, but only local, and the syntax
1882   sucked, too.  (And we have a new `?' search expression.)  [402b7c6]
1884 - CONFIG=MEDIUM and CONFIG=NETSEND now both WANT_REGEX.  [dee954e]
1886 - The `make test' target should *really* work gracefully, now that usage
1887   of the `-#' command line option also sets the folder to be opened to
1888   `/dev/null'.  (Still no `void' box in sight.)  [0119d514]
1890 - All published patches may also be found in a new [patches] branch.
1892 ChangeLog
1893 ^^^^^^^^^
1895 - Several fixes that saw published patches (with equivalent
1896   functionality), and are thus described in NEWS, are included:
1898   . s-nail-14.5.2-sort-alt.patch
1899     Fixes a hasty commit that introduced string relaxation in a faulty
1900     way.  [5e75529]
1902   . s-nail-14_5_2-mimeheader.patch
1903     Fixes data loss if multiple MIME encoded-words follow each other in
1904     header bodies.  [c81afce]
1906   . s-nail-14_5_2-maildir.patch
1907     Effectively restores proper maildir support.  [1c2563b, 13f325f]
1909   . s-nail-14_5_2-smime.patch
1910     Fixes an off-by-one error and, in effect, restores S/MIME sign and
1911     encryption etc. support.  [e759f75]
1913 - The `screen' terminal type is by default recognized as being
1914   colour-capable.  [e759f75]
1916 - With the NCL command line editor and WANT_TABEXPAND hitting <TAB>
1917   should now act as if an "implicit asterisk" had been given in case
1918   there was no expansion of the original user input; e.g., '? ls <TAB>'
1919   may exceed your line limit now ;).  [0910a8f]
1921 - The S/MIME cipher list was outdated, RFC 5751 requires AES-128 as
1922   the default, the RC2 ones are long obsoleted (etc.).  Also we now
1923   should handle that OpenSSL may not support individual algorithms.
1925   Note: we use the option value `des3' for `DES EDE3' from now on!
1926   (Maybe see *smime-cipher-user@host* manual entry.)
1928   *ssl-method* may now also be assigned the new (default) method `auto'
1929   explicitly.
1930   [2472670]
1932 - Messages will now be stored in a set *record* even if only file or
1933   pipe addressees were given.  [a11935b]
1935 - Support for xz(1) compressed mailboxes has been added.
1936   (The `Can't canonicalize' warning for compressed boxes had the same
1937   cause that made maildir usage impossible, but i don't feel _too_ bad
1938   because looking into the code a bit revealed that the *newmail*
1939   mechanism never worked for such boxes anyway.  And will for a while.)
1940   [7fd9979]
1942 - S-nail now supports nested if..else..endif conditionals.  [3c22c04]
1944 - The NCL command line editor now locks its' history file when it reads
1945   and writes it, so as to protect against concurrent usage.  [c3a39ce]
1947 - You can now say 'fi%', 'fi&', 'p&10' and `ghost ps '!ps axu'' followed
1948   by 'ps|grep nail'.  [c3266c6]
1950 - Invocation cleanup: usage of -f and -u is mutual, -H and -u is ok, -u
1951   in send mode not.  [fa0a0aa]
1953 - New message specification: `[?name-list]?search-string' will search
1954   in locally available messages.  If the optional `?name-list' part is
1955   given, that specifies the (comma-separated list of) header fields to
1956   search in.  The special names `body' and `text' can be used to search
1957   in message bodies alone and bodies including the headers fields,
1958   respectively.  Note that "message bodies" unfortunately still means
1959   "including headers of attachments and attachments themselves", and
1960   until some later time.  [61bb460]
1962 - The new command line option `-L spec-list' prints a header summary of
1963   only those messages that comply to the specification list `spec-list'.
1964   If -L and -H are used in combination, no summary is printed at all,
1965   but the exit status reports wether `spec-list' would have matched some
1966   messages or not.  [934e12c]
1968 ChangeLog (purely technical)
1969 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1971 - Most of the work was changing the code-flow of the entire codebase to
1972   my usual style of programming, with a single function entry and
1973   a single function exit, including the addition of N(ot) Y(et) D(ead)
1974   points of interest, which finally enabled me to get rid of (sic!)
1975   using a debugger for S-nail development.  Just compile via 'make
1976   devel', and in case of a crash you should get a nice backtrace
1977   listing.  (You use IMAP, do you?)
1979   However, because practically every line of code has been touched, this
1980   caused some other changes along the way, e.g., the handling of
1981   temporary files was changed completely (the formerly used Ftemp()
1982   function has been replaced with a new Ftmp(), which handles unlinking
1983   itself as necessary etc.), it was detected that the S/MIME support was
1984   no longer compliant to any RFC, some resource leaks have been
1985   eliminated...  It is likely that a change so large introduced some
1986   other flees and flaws, however.  But it looks good so far.
1987   Thank you.
1989 v14.5.3, 2014-02-15
1990 -------------------
1992 + No official release, only exists as git(1) tag.
1994 v14.5.2: fix 4: 2014-02-15 (2014-02-14)
1995 ---------------------------------------
1997 - s-nail-14_5_2-smime.patch
1998   Fix a very stupid off-by-one error that i've introduced
1999   in [7bdf330] (OpenBSD 5.3: sigh, address strcpy(),strcat()
2000   etc., 2013-06-01).
2001   Until we've changed the used data from string to something
2002   line-wise, use strcat(3) again.
2004 v14.5.2: fix 3: 2014-02-10
2005 --------------------------
2007 - s-nail-14_5_2-maildir.patch
2008   maildir folders would have caused problems in environments which
2009   provide the realpath(3) function: beside a "cannot canonicalize PATH"
2010   warning the finally used path would be wrong (`test3' would end up as
2011   `test3/test3'), so that any further access would try to use the wrong
2012   path.  Please read the description of this patch and/or the commit
2013   logs of the commits [1c2563b] and [13f325f].
2015 v14.5.2: fix 2: 2014-02-05
2016 --------------------------
2018 - s-nail-14_5_2-mimeheader.patch
2019   A header like
2021     Subject: ehm, .getElementById("blink") needs <span
2022      =?US-ASCII?Q?id=3D"blink">,?= not =?US-ASCII?Q?class=3D"id"?=
2024   would yet be displayed without the " not " in between the two encoded
2025   words because of faulty "encoded-word-continuation" detection (note
2026   the quotation marks).  The error path could also have been seen in
2027   mail forwarding and in faulty searching etc.
2028   This patch is in a row of fixes for my hasty [0f9ad93] from 2013-03-12
2029   that already caused the v14.2 minor release (because of [b608c6b] from
2030   2013-03-14).  Those with mercy may read the commit message of [c81afce].
2032 v14.5.2: fix 1: 2014-01-30
2033 --------------------------
2035 - s-nail-14_5_2-sort.patch
2036   Reverses (sort(),thread(): use srelax()!, 2014-01-18, [a9b67e9]),
2037   which was a hasty commit of an untested diff that i've added few
2038   minutes beforehand:
2040     As a rather careless last-minute change i've added string relaxation
2041     to threaded and sorted display, but it's really one more step towards
2042     lowering memory pressure -- i couldn't resist [a9b67e9] after seeing
2044   An alternative, forward-heading patch that keeps string relaxation has
2045   been pushed to [master] as [5e75529] and is also available as
2046   s-nail-14_5_2-sort-alt.patch.
2048 v14.5.2, 2014-01-18
2049 -------------------
2051 Thanks to Ypnose, Sunil Nimmagadda and Gavin Troy.
2052 Gavin Troy *really* deserves special thanks for facing [next]!
2053 And i want to dedicate the new coloured message display functionality
2054 to John Dodson and Ypnose.  Thank you.
2055 (And best wishes to beautiful Australia!)
2057 ChangeLog (packager-affine)
2058 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2060 - All utilities can now be overwritten during configuration so that
2061   their values are fixated in the generated makefile (`mk.mk').
2062   I.e., talking about MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=,
2063   grep=, mkdir=, mv=, tee=.
2064   rm= and sed= have to be overwritten from the command line, they're
2065   needed before `conf.rc' is read.
2066   [5c03347, 072ec65, 39a00ab, 23a1245, ?]
2067   (Ypnose)
2069 - The release tarball is now also available in a xz(1) version.
2071 - New configuration option: WANT_COLOUR, by default enabled.
2073 - 'make test' should now really work, even if the running user has
2074   a mailbox with content. [f223a91]
2076 - WANT_AUTOCC is now by default enabled, so as for normal users which
2077   don't have the need to embed into a defined packaging environment.
2078   [d7e4e31]
2080 - Installation no longer strip(1)s away debug symbols if WANT_DEBUG was
2081   enabled. [6d075c6]
2082   (Gavin Troy)
2084 ChangeLog
2085 ^^^^^^^^^
2087 - Fixes to some bugs that are present since the first cvs(1) commit of
2088   Heirloom mailx(1); includes that *ssl-key-user@host* should now work.
2089   [4405a2cc, 9770c26f, 692976b9]
2091 - Some off-by-XY fixes, thanks to the debug memory canaries.
2092   [19b2b0d, 202506e, 43df6e4]
2094 - Fixes for (other) stupidisms (of mine): [1c2161f]
2096   This includes true implementation of in-memory history limit for the
2097   NCL, which was the final and real solution to a segmentation fault
2098   that Gavin Troy had to deal with on [next]. [1089f2b]
2099   (Gavin Troy)
2101 - For completeness: new command `var-inspect' shows information about
2102   all given options.  Mostly ment for implementing future tests.
2103   [topic/okeys]
2105 - The `pipe' command no longer embeds message information into the
2106   data passed through to the command (when *piperaw* is set).
2107   [ef5ecc6 (part of topic/colour)]
2109 - Simple coloured message (header) display is now possible.  Please
2110   read the new manual section "Coloured message display", use
2111   *colour-disable* to turn it off.  (It is enabled by default if it
2112   knows the terminal is capable and, if used, the pager can, too.  Note
2113   we now set LESS=FRXi when starting PAGER and no LESS= is in the
2114   environment.)
2116   Dedicated to John Dodson and Ypnose.
2117   [topic/colour, c6e84c7]
2119 - The `if', `else', `endif' syntax has been extended.
2120   You can now "if 0" (never), "if 1" (always), "if $OPTION" (boolean
2121   check for OPTION) and "if $OPTION == 'VALUE'" as well as "if $OPTION
2122   != 'VALUE'".  Unfortunately it is still not possible to use
2123   conditionals inside conditionals. [0fb2ae7]
2125 - -# now also sets MBOX=/dev/null. [4be2f1e]
2127 - The NCL command line editor now supports cursor keys when the terminal
2128   produces xterm(1)-compatible keycodes ('ESC' + '[' + [DACB] for left,
2129   up, right and down, respectively).  What a thrill, yay!!! [0cbf672]
2131 - New (optional) command: `history': show or clear command line history,
2132   or select a specific command line from in there.
2133   History works a bit different now, and should no longer include
2134   command lines which include specific message numbers; more to come.
2135   [59c6195, topic/hist2]
2137   I plan to join all the history management and use only the one that is
2138   part of NCL now, hooking it into editline(3) and readline(3).  That
2139   would shrink tty.c a bit and also introduce duplicate elimination for
2140   readline(3).
2142 - The new ~u and ~U tilde escapes work like ~f and ~m, respectively, but
2143   don't include any header lines.  Inspired by a patch from
2144   Sunil Nimmagadda on openbsd-tech@.  [c37b8b3]
2146 - The `|' command should work again -- it has stopped working on
2147   2013-09-09 when i've accidentally changed the command name from `|' to
2148   ` | '. [5a8378d]
2149   (Gavin Troy)
2151 - As a rather careless last-minute change i've added string relaxation
2152   to threaded and sorted display, but it's really one more step towards
2153   lowering memory pressure -- i couldn't resist [a9b67e9] after seeing
2154     ?0[ /Users/steffen/src/nail.git/t.mbox]? sst
2155       Buffer allocs ever/max simultan. : 14/14
2156       Overall alloc count/bytes        : 17165/881088
2157       Cycle maximums: alloc count/bytes: 16906/876984+0
2158     ?0[ /Users/steffen/src/nail.git/t.mbox]? sst
2159       Buffer allocs ever/max simultan. : 0/0
2160       Overall alloc count/bytes        : 16515/841816
2161       Cycle maximums: alloc count/bytes: 16256/837712+829560
2163 ChangeLog (purely technical)
2164 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2166 - We now have debug canaries for all memory sources now that [8419d44]
2167   added them to the "string dope".
2169 - The most work has been done on our value system, which manages the
2170   binary and value options, like *folder* etc.
2171   It is now based on enumerations, i.e., constant integers, not on
2172   strings.  This of course only relates to non-dynamic options.
2173   Anyway, this saves us key hashing and allows more compact data
2174   representation in general (see the new header `okeys.h' for more).
2175   [topic/okeys]
2177 v14.5.1, 2013-12-27
2178 -------------------
2180 ChangeLog (packager-affine)
2181 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2183 - The build system *only* uses the automatically detected $CFLAGS and
2184   $LDFLAGS if WANT_AUTOCC=1.  I.e., even unset or empty $CFLAGS and
2185   $LDFLAGS are not touched until then.
2186   (We do however still set $CC if that is unset or empty or set to the
2187   plain string "cc".) [856625f6]
2189 ChangeLog
2190 ^^^^^^^^^
2192 - Fixed segmentation faults / bus errors when setting *nofolder*
2193   / *line-editor-cursor-right* to the null string (only with WANT_NCL),
2194   respectively. [d1f1a19b, 21e5c285, 9f6ff25d]
2196 - *prompt* handling is now really POSIX compliant (thus no prompting
2197   occurs not only for 'set noprompt', but also for setting *prompt* to
2198   the null string).
2200   This was indeed a rather large changeset that also introduced the new
2201   *prompt* escape character \&, which expands to `?' by default and to
2202   `&' if *bsdcompat* is set.
2204   Like that we now can simply assign "\& " to *prompt* at program
2205   startup, which (a) allows to do 'set noprompt' without error (once)
2206   and (b) allows for POSIX compliance in respect to prompt handling
2207   without any complicated conditional code, but (c) gives us the
2208   opportunity to continue to support BSD prompts.
2209   [0dfe53db]
2211 - For completeness: new command: `features'.  (Rather useful for being
2212   able to implement more tests in the future, and act according to what
2213   is really compiled into the tested binary.
2215 - The `-#' command line option now also sets *quiet* by itself.
2216   [7b5a5c87]
2218 - nail.1: a newly introduced empty line in the manual produced error
2219   messages on some systems.  Fixed.
2221 - The return value of the `mimetypes' command has been reversed and
2222   should now be fixed. [acf56ac52]
2224 - In threaded display the Subject: followup suppression no longer
2225   takes into account invisible messages.
2226   Also, rudely hack in a messages-already-written-in-this-round counter,
2227   so that the followup suppression knows when "the top of the screen" is
2228   reached, which (seems to) help(s) against missing subjects up there as
2229   well as after a `newmail'. [topic/subject]
2231 - Added a WANT_REGEX=1 toggle in `conf.rc'.
2232   When we find regular expressions then a new regex-enabled IMAP-style
2233   search is available (see the manual for more) [1ec8fe68]
2235     ? f (/or subject ^\[S-nail (subject ^\[nail-devel))
2236     ? f (/subject ^\[S-nail) (/subject ^\[nail-devel)
2237     ? f (/subject "^\\[(S-nail|nail-devel)")
2239   I'm looking forward for being able to add another, simplified, syntax.
2241 ChangeLog (purely technical)
2242 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2244 - The cc-test.sh has seen some tweaks, for easier future extension, and
2245   for adding a test for [d1f1a19]. [several, mentioned: 21e5c285]
2247 - On systems without a real wordexp(3) implementations deadlocks could
2248   occur because we sometimes hold_all_sigs() to avoid longjmp(3)s away
2249   (and will do so for quite some time, still), and that resulted in the
2250   SIGCHLD that reported the exit of the started subshell to be blocked,
2251   too (e.g., after '? *.h<Tab>': endless hang).  Fixed.
2253 v14.5, 2013-12-19
2254 -----------------
2256 Many thanks: Gaetan Bisson, William Yodlowsky, Gavin Troy,
2257 Thomas (wasd AT gmx DOT net), Ypnose.
2258 And Gavin Troy definetely deserves a very special credit.
2259 But thank you all, and very much indeed!
2261 ChangeLog (packager-affine)
2262 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2264 - The `test' make target has been fixed. [f0991e14]
2265   (Gaetan Bisson)
2267 - It is possible to gain a different kind of make(1) verbosity by
2268   using a VERBOSE=1 command line argument (this knob is not taken into
2269   account when deciding wether a rebuild is needed). [498e4ad0]
2270   (William Yodlowsky)
2272 - On Crux 3 Linux and OpenBSD the readline(3) and editline(3),
2273   respectively, libraries will now be found when desired. [a7d1aa78]
2274   (William Yodlowsky)
2276 - WANT_LINE_EDITOR has been renamed to WANT_NCL, *plus*.
2277   So now there are WANT_READLINE, WANT_EDITLINE and WANT_NLC, each of
2278   them can be set individually, and they are tested in the shown order.
2279   Also, WANT_TABEXPAND and WANT_HISTORY have been introduced and can be
2280   used to fine-tune functionality. [ae4e01e1, b2635feb, 9742bf40]
2282   (While here, i've fixed WANT_TABEXPAND code so that it is more
2283   sensitive to line excess; on Linux etc., where MAX_INPUT is 255,
2284   strange behaviour could be seen because we didn't take into account
2285   the length of the prompt at all.  The NCL is assumed to have only
2286   one remaining, but unfixable problem: backspace often is incapable
2287   to cross visual line boundaries; use ^A/^E + ^L, then. [e832c04a]
2289   Also, cursor (now ^B and ^F) and history movement (now ^P and ^N) of
2290   the NCL have been changed. [d7d928da])
2292 - WANT_QUOTE_FOLD is now enabled by default.  And WANT_ASSERTS has been
2293   renamed to WANT_DEBUG. [1e10da1f]
2295 - The build system has seen yet another overhaul in general.  CC, CFLAGS
2296   and LDFLAGS plus are now tracked and changes will force rebuilds.
2297   The new WANT_AUTOCC option can be used to let the build system figure
2298   out a compiler and choose known-to-work flags.  Use the new ADDCFLAGS=
2299   and ADDLDFLAGS= command line arguments to add your specific flags on
2300   top of those -- the final CFLAGS etc. are what is change-tracked.
2302   This rather massive internal rework revealed that old Bourne shells
2303   were yet not supported by the new build system, and so did testing
2304   that UnixWare installation was yet impossible due to tool
2305   incompatibility. [75c4b74e]
2307 - The new WANT_AMALGAMATION option will force compilation of all the
2308   sources in a single compilation unit.  This requires a rather large
2309   amount of memory, but may produce a more compact, maybe more optimized
2310   binary.  (Implementing this revealed quite some bugs which could
2311   therefore be fixed.) [topic/amalgam]
2313 - `nail.rc' has been pimped a bit (mostly comments, but
2314   *mime-counter-evidence* is now always set). [e3094ba7]
2316    That changeset was however buggy. [f3dcb46]
2317    (Gavin Troy)
2319 - We no longer use install(1) for `install'ation make rules. [80b02cd9]
2321 ChangeLog
2322 ^^^^^^^^^
2324 - Even '$ s-nail & fg $!' will now work with the NCL. [2a8b5c55]
2326 - Several off-by-one (off-by-two) fixes. [32ce9836, 71e6d013, f139dc36]
2327   (Gavin Troy, Thomas)
2329 - Setting *noprompt* now prevents prompting, as per POSIX. [ecefaf63]
2331 - *prompt*: new \$ (exit status of last command) and \@ (name of
2332   currently active mailbox) escape sequences. [6f652046]
2334 - One may now omit the space in '? unc' ('?unc') [05fcb383]
2336 - New commands: `ghost' and `unghost' define command aliases (since
2337   `alias' is taken for a different purpose) [topic/commands]
2339     ? ghost ps '!ps axu'
2340     ? ps |grep nail
2342 - There is now a pseudo account `null' (case-insensitive).
2343   Also a new `localopts' command exists; when used from within an
2344   `account' block, options changed will be reverted back to its former
2345   value when the account is left (e.g. by switching to `null'):
2347     define sdn_ {
2348        alternates sdaoden@users.sf.net sdaoden@users.sourceforge.net \
2349           sdaoden@googlemail.com sdaoden@gmail.com
2350        set Sign="\n--steffen\nForza Figa!" sign="\n--steffen"
2351        set smtp=smtp.gmail.com smtp-auth=plain smtp-use-starttls
2352        #..
2353     }
2354     account sdn_gm {
2355        localopts 1
2356        call sdn_
2357        set from="Steffen \"Daode\" Nurpmeso <sdaoden@gmail.com>"
2358     }
2359     account sdn_sf {
2360        localopts 1
2361        call sdn_
2362        set from="Steffen \"Daode\" Nurpmeso <sdaoden@users.sf.net>"
2363     }
2365   E.g., after
2367     ? acc sdn_gm
2368     ? acc null
2370   neither of *Sign*, *sign*, *smtp** nor *from* should be set.
2371   Please see the manual for more.
2372   TODO - neither command-ghosts nor alternates etc. are yet tracked
2373   TODO - we should have a boolify() so as to say 'localopts yes' etc.
2374   [topic/acmava]
2376 - New command: `cwd' (print current working directory).
2377   Also fixing the `chdir' return value. [eff4397c]
2379 - The *ssl-method* now allows explicit setting of 'tls.1.1' and
2380   'tls1.2' values. [c66b4196]
2382 - When sending to display, be aware that filenames in MIME parts may of
2383   course be MIME-encoded! [1454be03]
2385 - *hostname* is now honoured even if *smtp* is not set.  (We always
2386   supported *from*, so why not *hostname*?)
2388 - The `-u user' option now acts identically to setting the $USER
2389   environment variable and both now tend to mean something like
2390   "impersonate as user in some aspects".  Note that we have always used
2391   the latter in one or the other way, and `-u user' always ment more
2392   than just "open mailbox of user", so i think this change sharpens the
2393   edge in the right direction. [09632731]
2395 - Filename argument quoting has been tweaked for (some) function(s which
2396   take a filename argument last).  The following snippet as reported by
2397   Gavin Troy should work now: [2bb9b80e]
2399     ? mv +inbox.Junk\ Mail
2401 - The GNU implementation of wordexp(3) is also (i've added a workaround
2402   for the very same bug for Mac OS X in S-nail v14.3 [63273772]) buggy,
2403    which causes segmentation faults when expansions failed (`fi &VOID').
2404   [470527b7]
2405   (Gavin Troy)
2407 - The `fi' command no longer uses the (possibly truncated) display
2408   version of a filename, but the full path. [5cd85b07]
2410 ChangeLog (purely technical)
2411 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2413 - Large rework of internal structure: bundle inclusion of most of the
2414   external and the content of most of the internal #include files in the
2415   new nail.h.  If that would have been done very first bugs like the
2416   infamous MAXPATHLEN bug as reported by Paul Vojta (see v14.4.2) would
2417   never have occurred. [21f3155b]
2419 - Support for -fstrict-overflow cc(1) flags. [topic/strict-overflow]
2421 - Fixed the quotation filter which yet allocated memory even if not
2422   used. [c98cdaf5]
2424 - String relaxation reduces memory pressure rather drastically when
2425   working with many (especially MIME) mails at a time, e.g., when
2426   writing a modified mailbox.  Before all messages of a mailbox had to
2427   be worked without releasing any memory in between, now we give back
2428   memory (to our pool, not the system) after each and every message.
2429   [topic/srelax]
2431 - The other memory source now uses bound canaries, which also found some
2432   errors. [3d9fe741]
2434 - We now use the EL_PROMPT_ESC editline(3) mode for prompting, which
2435   should offer the possibility to use coloured prompts etc. with
2436   (even those) editline(3) (versions which do offer it -- older versions
2437   should just do fine by themselves).
2438   S-nail uses the special trigger control character \1. [ea30d818]
2439   (Ypnose)
2441   Note however that all tested editline(3) versions are buggy and
2442   either don't get it right (`\1COLOR-ON\1stuff\1COLOR-OFF\1') or are
2443   incapable of proper repainting (`\1COLOR-ONstuffCOLOR-OFF\1').
2445 - We now use the MD5 digest code from the OpenSSL library if that is
2446   usable. [893b16c0]
2448 v14.4.5, 2013-10-19
2449 -------------------
2451 Many thanks: Gaetan Bisson, Stephen Isard, Jérémie Courrèges-Anglas,
2452 William Yodlowsky, and Adam Sjøgren from GMANE.org!
2454 ChangeLog (packager-affine)
2455 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
2457 - The packager-install: target has been fixed. [a8c1b0b]
2458   (Gaetan Bisson and William Yodlowsky)
2460 - As suggested by Gaetan Bisson the several build system tasks are now
2461   individually addressable, i.e., 'make [OPTIONS] config', 'make build',
2462   'make test', 'make packager-install'); nothing changes unless you want
2463   to, in which case: please see INSTALL. [4d3b799]
2465   The new target 'test' will call cc-test.sh with its new --check-only
2466   option which will only perform the (too few) function tests on the
2467   ready binary.
2468   And cc-test.sh will no longer create output files, but simply echoes
2469   to STDOUT and STDERR. [629e1ee, 786f219]
2470   (Gaetan Bisson)
2472 - The default configuration file now sets *bsdannounce* and *bsdflags*,
2473   all in one line, as suggested by William Yodlowsky.
2474   (If *header* is disabled, *bsdannounce* is ignored, but *header* must
2475   be enabled by default according to POSIX, and *bsdannounce* is just
2476   the same as *header*, but for the folder-switched event.  Thus setting
2477   *bsdannounce* is the more sane default, imho.) [6161f10]
2478   (William Yodlowsky)
2480 - Announcement messages are now tagged '[ANNOUNCE]'. [26e1b35]
2481   (Tagging suggested by Stephen Isard and Jérémie Courrèges-Anglas)
2483 - The manual NAME now includes the version (but it's somewhat ugly).
2484   [8adcca4]
2486 ChangeLog
2487 ^^^^^^^^^
2489 - When switching folders when in compose mode, message attachments
2490   become invalid.  For v14.4.5, at least warn when this happens.
2491   [47eb1ab]
2493 - When reading multipart/alternative messages which do not contain
2494   a text/plain part, the (most likely HTML) part is not displayed (even
2495   if S-nail is configured to display HTML).  The reason is a bug i've
2496   introduced with [0d43a999] (Change "Part X:" display message..,
2497   2012-12-20).  (Note that the committed fix i've posted to the list was
2498   not correct either and has been fixed itself.) [225c02b, ecfa149]
2500 v14.4.4, 2013-10-03
2501 -------------------
2503 Thanked, Gavin Troy, Gaetan Bisson.
2505 - Fix output buffer confusion that would have occurred when parts of
2506   a multipart mail had a pipe command set.  Longer story in [e75d16dd].
2507   (Gavin Troy)
2509 - The makefile now supports a `packager-install' target that bypasses
2510   the reevaluation of the configuration (after checking that there is
2511   one) and directly steps ahead to the install process.
2512   (Gaetan Bisson)
2514 - Notes in INSTALL that CFLAGS and LDFLAGS need to be overwritten from
2515   within (conf.rc or) the command line.
2516   (Gaetan Bisson)
2518 v14.4.3, 2013-10-02
2519 -------------------
2521 I convey special thanks to Karol Błażewicz and Gaetan Bisson.
2523 - The new build system didn't allow to overwrite CFLAGS= when used in
2524   conjunction with GNU make(1).  To make a long story short, removing
2525   a `.POSIX:' directive from the makefile fixed the problem.  Luckily.
2526   [e6b26526]
2528 - More INSTALL notes for UnixWare 7.1.4, which suffers from the same
2529   problem: here the fix is to use the -e option of make(1).
2531 - Karol Błażewicz reported a segmentation violation he got when using an
2532   Arch Linux S-nail test package, and Gaetan Bisson informed me about
2533   that.  The problem was that we didn't assign the resulting default
2534   address (which gets used when *from* is not set) to the result which
2535   gets used, effectively resulting in a NULL dereference. [cfd60479]
2537 v14.4.2, 2013-09-21
2538 -------------------
2540 Many thanks to Paul Vojta.
2542 - On GNU/Linux there is no MAXPATHLEN constant defined by default, as
2543   this is a non-standard legacy constant.  Mozilla ran into this some
2544   time ago, though a bit different [1].  It made it easier for S-nail.
2546     [1] <https://bugzilla.mozilla.org/show_bug.cgi?id=412610>
2548   We could include `sys/limits.h' to get at MAXPATHLEN, there it is
2549   defined to be PATH_MAX, but let's just include the standard `limits.h'
2550   and ensure MAXPATHLEN ends up >= PATH_MAX.  With this condition being
2551   true even FORTIFYd sources won't bail with reported buffer overflows
2552   because realpath(3) expects a buffer of PATH_MAX bytes. [bee5e57c]
2553   (Paul Vojta)
2555 - With the builtin LINE_EDITOR, ensure proper interaction with GNU
2556   rlogind(8), which is alone in its quest to set the ISTRIP termios(4)
2557   flag. [61e00f2d]
2559 - Bugfix a codepath that would have prevented compilation when
2560   HAVE_ICONV is not set.
2561   While there, allow to unselect message attachments when using the `~@'
2562   tilde command interactively, which i mysteriously had forgotten when
2563   allowing selection of 'em.  (oops?) [4f58ffea]
2565 - It's now easier for packagers to get at debug-enabled CFLAGS; simply
2566   use WANT_ASSERTS=1 (should not be enabled in shipouts, please).
2567   [d8663406]
2569 - Fixed a terrible bug that i've introduced in november 2012, that would
2570   have corrupted MBOX files when using the `resend' command.  (The
2571   so-called "From_ line" would have been quoted to ">From_ line" instead
2572   of simply being stripped.) [19d449e2]
2574 - Fixed a SIGSEGV for the builtin LINE_EDITOR, that would have occurred
2575   if a history traversal (^B or ^F) would have been continued by
2576   a reverse history completion (^R).
2577   While there, avoid some multiple-beeps-in-a-row that yet occurred due
2578   to code reuse, and document that ^G etc. reset the multibyte state
2579   machine. [003d9f6f]
2581   Also, the expand-on-tab code could have excessed line input maximums,
2582   e.g., after `? /usr/bin/*<Tab>'.  This was of course known, but
2583   i wanted to keep it because all tested (modern) terminals "mess up but
2584   won't break", and thus made it possible to use the data, even if it's
2585   visual representation was messed up.  The real solution will be much,
2586   *much* more complicated, i.e., show possible *completions*, page-wise,
2587   etc., i.e., just like is known by tab *completion*.  This will need
2588   far more time because it doesn't make sense to embed such complicated
2589   code into the current bed.
2590   Now i've chosen to simply don't display excess, but replace the
2591   content with a message that says that there was excess.  It simply
2592   looks better. [0320c8ba]
2594 - I've changed the use of `[?]' as a replacement sequence for invalid
2595   / non-displayable characters to `?' (again).  There are still code
2596   paths (from the original codebase) which use the real Unicode
2597   replacement character instead, so our display is still not unique.
2598   On the long term the codepath can anticipate in all levels wether
2599   use of Unicode is possible, so that, then, we will be unique again,
2600   using either only `?' or the Unicode replacement character. [faf6380]
2602 - I've anticipated in v15.0 and implemented *quote-fold* as a stream
2603   filter.  It is now multibyte safe and takes into account the visual
2604   width of characters, i.e., ideographs etc.  It is working almost as
2605   good as an algorithm can work that looks at data linewise, but is yet
2606   experimental and incomplete in that it will break lines even if only
2607   whitespace or a backslash escape follows.  It is code that is only
2608   a few hours old, which is why it is not enabled by default. [
2610 v14.4.1, 2013-09-14
2611 -------------------
2613 How terrible.
2615 - Fix some harmless stylos and typos in the manual and `conf.rc'.
2616   [1a6b880, 417b066]
2618 - Ensure *complete* proper cleanup on signal-caused configuration run
2619   aborts. [7a08bda]
2621 - Bugfix: reenable empty configuration variable overrides, as in
2623     $ make install SID= NAIL=mailx ...
2624   [171861d]
2626 - Bugfix: rename the `conf.rc' variables SHELL, LISTER and PAGER because
2627   they clash with the POSIX standard variables of the same names, which
2628   hurts now that the configuration is run through the shell itself.
2629   The configuration names are now XSHELL, XLISTER and XPAGER (ouch).
2630   [ef93c4e]
2632 - nail.rc: comment out some non-portable S-nail(1) specifics, for those
2633   who install this file as mailx.rc or so, somewhere. [3f14b01]
2635 - From now on S-nail will use simple version tags, as, e.g., `14.4.1',
2636   i.e., no more `s-nail-14.4.1'. [a75437d, 183d59c] (Jürgen Daubert)
2638   Also move UAGENT out of `version.h' [f7be5be]
2640 Uh! v14.4 must have originated in a bad dream; good it's vanished.
2642 v14.4, 2013-09-13
2643 -----------------
2645 Thanks to the entire vivid and virile S-nail(1) user community is
2646 proper, especially Stephen Isard, Gavin Troy, Martin Neitzel.
2647 Not to forget Ryan Kavanagh and Ayan George.
2649 Note this time the changes are in reverse order, i.e., oldest first.
2651 Topic Branches
2652 ^^^^^^^^^^^^^^
2654 15fbe09 ^bf9173f 'topic/varmac-unite'
2655   Simplification and unification of variable and macro handling
2656 40f6f58 ^15fbe09 'topic/cledit1'
2657   Command line editor; new manual section `Line editor'
2658 ad28a32 ^40f6f58 'topic/termsize'
2659   Honour POSIX mailx(1) and respect $COLUMNS and $LINES on startup
2660 dc3cd49 ^a446fd8 'topic/qf'
2661   You don't wanna know
2662 b8738f7 ^0651fd0 'topic/spam1'
2663   Interaction with SpamAssassin; new manual section `Handling spam'
2664 5419d6f ^b8738f7 'topic/make1'
2665   Reworked build system; please read `INSTALL' and `conf.rc'
2666 9ab4d6b ^5419d6f 'topic/list1'
2667   Slightly tweaked message thread display, fix `:u :r' to mean it
2669 ChangeLog
2670 ^^^^^^^^^
2672 - The default PAGER is now more(1).  (But read on.)
2674 - The `echo' command is now compliant, and fully supports XSI.
2676 - The `group' and `ungroup' command aliases have been removed, they are
2677   `alias' and `unalias'.
2679 - We now have the capability of line editing and history.
2680   One may choose from not less than three different implementations:
2681   a builtin editor as well as possible linkage against BSD editline(3)
2682   and also a GNU readline(3) compatible layer.
2683   Please read the new manual section `Line editor'.
2685   Input is now compliant in that an interactive line may be continued
2686   after escaping the newline character with a backslash.
2687   [topic/cledit1]  (all of them)
2689   The *prompt* variable may now contain shell escapes, just like the
2690   `echo' command. [0938d8a]
2691   As a special extension the new \? escape, when used within *prompt*,
2692   will expand to the exit status of the last command. [41076d2]
2694 - The POSIX standard environment variables $COLUMNS and $LINES are now
2695   honoured upon startup. [topic/termsize]
2697 - The `help' / `?' commands now support abbreviation, i.e.,
2698   ``$ ? unc'' should now find `uncollapse'. [7b86195]
2700 - The `~' abbreviation that has been introduced as an alias for `call'
2701   is now a real command, not a magic shortcut. [9987289]
2703 - The new variable *quote-as-attachment* can be used to additionally
2704   embed the quoted message as a `message/rfc822' MIME attachment.
2705   [topic/qf]
2707 - The compose-mode command `~@' will now attach messages from the
2708   current mailbox if given a filename of the style `#NUMBER'.
2709   Please read the corresponding manual section `Tilde escapes', though.
2711 - The `WANT_JUNK' and `WANT_SCORE', as well as Gunnar Ritters junk mail
2712   management have been removed.
2714   Instead S-nail(1) can now support interaction with SpamAssassin, but
2715   sofar only via the spamc(1) / spamd(1) client / server pair of
2716   programs that ships as part of SpamAssassin.  The new configuration
2717   directive `WANT_SPAM' controls wether this feature is desired.
2719   Please read the new manual section `Handling spam'.
2720   [topic/spam1] (Martin Neitzel)
2722   (S-nail(1) is now *definitely* floating-point free.)
2724 - The configuration and make system have been overhauled / reorganized.
2725   The configuration is now in `conf.rc', also contains directives like
2726   `PREFIX' etc, and is always read in.  However, only those directives
2727   which are not yet set (via environment or command line overwrites) are
2728   incorporated into the set of configuration options.  Therefore
2730     $ make WANT_IMAP=0
2731     $ make WANT_IMAP=1
2733   will now build S-nail(1) twice, because of the changed configuration.
2735   Note that `WANT_GSSAPI' is now by default disabled, which shrunk
2736   a freshly started s-nail image by more than 30 percent.
2738   We're not finished yet in that there is no dependency graph etc.
2739   Please do read `INSTALL' and `conf.rc'.
2740   [topic/make1]
2742 - Message selection has been slightly bugfixed in that `:u :r' really
2743   means `:u' AND `:r'.  Compared to NetBSD Mail(1) it's still a shame.
2745   Threaded message display has been slightly changed in that within
2746   a thread identical Subject: lines are not repeated.  It may not be
2747   perfect yet due to the general list / thread state. [topic/list1]
2749 - If, upon startup, the environment variable `NAIL_NO_SYSTEM_RC' is set,
2750   then the system wide initialization file isn't read, just as if the
2751   `-n' option had been given. [1b31535]
2753 - It is now possible to use CTRL-C during connection hangs.  (But in
2754   general error recovery capabilities of the socket related
2755   infrastructure is non-existent, practically speaking.) [45a9f36]
2757 - *quote-fold* has been temporarily disabled, as it is not multibyte
2758   safe.
2760 No review for v14.4.  And today is Friday, the 13th.  Ouuuh!
2762 v14.3.2, 2013-06-21
2763 -------------------
2765 I should *maybe* should have and want to give prominence to
2766 Martin Neitzel for this, i maybe have misunderstood.
2768 - Bugfix *synchronous* *pipe-** execution..
2770   Well, unfortunately yet another newly introduced bug slept in
2771   S-nail v14.3[.1] -- [a8d724b3, Add @ and @& shell command prefixes
2772   for pipe-MIMETYPE, 2013-05-03] falsely changed the waiting state
2773   for subprocesses, as has shown up by a HTML-only mail on the
2774   Unicode list today.
2775   'Seems i'm collecting one line fixes in this codebase; this needs
2776   to change in the future.
2778 v14.3.1, 2013-06-08
2779 -------------------
2781 I want to give prominence to Juergen Daubert (jue AT jue DOT li), who
2782 reported that i've broken plain-old unfancy send mode in 14.3.
2784 + Ok, i'll hope we're out of new errors for the v14.3 series with that.
2786 - New variable: *batch-exit-on-error*.
2787   Only works if the new -# command line option has been given, and will
2788   check the "current" exit status whenever one operation completes
2789   (S-nail returns to the command prompt).
2790   If the exit status implies error (e.g., sending the last message
2791   failed) then we exit forcefully with that error status.  (The normal
2792   behaviour is that the status is reset when the command loop ticks.)
2793   [4cddd55]
2795 - While here again, i've added the new -# command line option.
2796   This is the first step to implement a reliable batch mode;
2797   unfortunately it still selects the users system mailbox on startup,
2798   because we simply cannot go to "no" mailbox for quite some time -- at
2799   some future time we will be able to go to some VOID thing, and then
2800   this will end up as a rather efficient batch mode.
2801   For now it sets *dot*, *emptystart*, *noheader* and *sendwait*, and
2802   also implies the -~ command line option.  [7549569]
2804     (
2805       printf "m ${MBOX}\n~s subject1\nE-Mail Körper 1\n.\n" &&
2806       printf "m ${MBOX}\n~s subject2\nEmail body 2\n.\n" &&
2807       echo x
2808     ) | MAILRC=/dev/null "${NAIL}" -n -#
2810 - Also, -N set *header* instead of *noheader*.  [7b4a13f6]
2811   (Juergen Daubert.)
2813 - Plain old unfancy invocations like
2815     $ s-nail user@host
2816     $ echo bla|s-nail ./FILE1
2818   had been broken (by [522cb3ec]).  [260e19d]
2819   (Juergen Daubert.)
2821 v14.3, 2013-06-03
2822 -----------------
2824 Thanks to Gavin Troy (gavtroy AT gmail DOT com) who inspired the @ and
2825 @& pipe-command prefixes.
2827 Random notes
2828 ^^^^^^^^^^^^
2830 - S-nail has been registered at Coverity Scan, and the third build
2831   (after topic branches *coverity-444* and *coverity-444.2*) produced no
2832   more errors.  (<http://scan2.coverity.com/projects/444>.)
2833   (Then i used POP3 and IMAP and fixed some SIGSEGV. ;)  Still didn't
2834   look at S/MIME, Maildir, caches etc... o()
2836 - S-nail v14.3 doesn't produce any spurious linker warnings on
2837   OpenBSD 5.3; all (correct!) use cases of strcpy() and strcat() have
2838   been replaced.  [7bdf330, 2c8d7cb]
2840 - This is the first release with a (though very short) review -- i'm
2841   slowly getting comfortable with the code.  (But i'm too stupid to
2842   perform reviews on patches, 'always did reviews on C++/Perl/xy
2843   classes.  Aaah, how beautiful ... objects.)
2845 ChangeLog
2846 ^^^^^^^^^
2848 - It is now possible to "call" macros without using the `call' command
2849   by prefixing them with a tilde, as in
2851     ? define au {
2852       echo auau
2853     }
2854     ? ~au
2855     auau
2856   [93ea8acd]
2858 - Added the *pop3-bulk-load* option.
2859   Yes, there are mailing lists etc. which use plain text email, and,
2860   there, headers are often more data than the body, so it doesn't make
2861   sense to download the headers twice (unfortunately POP3 doesn't
2862   support a BODY command; if only it would support a RETRDELE command..)
2863   [978e13a7]
2865   And yep, from this changeset on i personally use S-nail even over the
2866   network, no longer my stale and incomplete S-Postman.  And i can tell
2867   you, this damn thing is so silent, i always set *verbose* not to go
2868   grazy ... but .. i hate to say it .. the healing will take time.
2870 - POP3 will now try to use APOP authentication automatically; thus the
2871   *use-apop* stuff has been replaced by *pop3-no-apop* options (just in
2872   case there are POP3 servers which advertise they support APOP but in
2873   fact fail to do so; anyone?)  [6c3c5575]
2875 - Some IMAP segmentation violations have been fixed:
2877     ? fi imaps://user1@localhost
2878     Password:Interrupt            <- CNTRL-C
2879     ? set imap-auth=cram-md5      <- hey, 'forgot to set correct auth
2880     ? fi imaps://user1@localhost
2881     IMAP write error: error:140D00CF:SSL routines:SSL_write:protocol is shutdown
2882     Segmentation fault
2884   And also, when *folder* was set to an IMAP account but hasn't been
2885   opened yet, and no IMAP account ever has been opened, a string
2886   comparison against a NULL pointer yet caused a SIGSEGV, too.
2887   [417c01f, 413c23d9]
2889 - `set folder=' now tolerates `%:' and expands PROTOs stuff etc.:
2891     ? short xp %:imaps://user1@localhost
2892     ? set folder=xp
2894   Pure convenience so that it doesn't need to be typed twice (still no
2895   completion in sight...).  Note that setting *folder* to a POP3 box
2896   will now be actively rejected.  [b12b17f5]
2898   NOTE: while implementing this i've detected another dead-end
2899   miscondition in S-nail -- you really should ensure that your target
2900   folder/box is connected before you leave your current POP3/network
2901   based folder, if there is data to be moved to the target (i.e.,
2902   mbox).  This problem will persist for a long time due to the way the
2903   entire codebase functions; i hope i can find a short/mid-term
2904   solution, but the real healing will take years.  The mentioned
2905   solution would at least make S-nail interruptable, currently we get
2906   stuck and interrupts are blocked...
2908 - If you're using S-nail on Mac OS X and have seen some segmentation
2909   faults when expanding shell stuff then you may be pleased to hear that
2910   S-nail now works around an Apple bug.  [63273772]
2912 - The builtin mime.types have been corrected and a lot of new ones have
2913   been added.  New data from
2914   <http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/resources/\
2915   org/apache/tika/mime/tika-mimetypes.xml>, thanks!  [8072fcb6]
2917 - BEWARE: handling of command line arguments has changed a bit!
2919   1. The -D, -d, -E, -i, -N and -v command line options are now
2920   implemented by means of setting the respective option, as via -S.
2921   (This means that from now on resource files can only *temporarily*
2922   overwrite command line arguments.)
2924   2. The -I and -T command line arguments have been dropped.
2925   It seems Gunnar Ritter stopped developing nail/Heirloom mailx once he
2926   started implementing Newsreader functionality.  It'll take a long time
2927   until we get there, so for now drop all the Newsreader stuff.
2929   3. Handling of -r has been changed.  E.g.:
2931     s-nail -A test -Snoeditalong -r 'La mort est <fem@me>' -d
2932     ? set from=bummer@m1.com
2933     ? m t1
2934     Subject: s1
2935     .
2936     Sendmail arguments: "sendmail" "-i" "-r" "fem@me" "t1"
2937     ? set from=bummer@m2.com
2938     ? m t2
2939     Subject: s2
2940     Sendmail arguments: "sendmail" "-i" "-r" "fem@me" "t2"
2942   ...
2944     s-nail -A test -Snoeditalong -r '' -d
2945     ? set from=bummer@m1.com
2946     ? m t1
2947     Subject: s1
2948     .
2949     Sendmail arguments: "sendmail" "-i" "-r" "bummer@m1.com" "t1"
2950     ? set from=bummer@m2.com
2951     ? m t2
2952     Subject: s2
2953     Sendmail arguments: "sendmail" "-i" "-r" "bummer@m2.com" "t2"
2955   [*main-fun-cleanup* topic branch]
2957 - *smime-sign-include-certs-** stuff works again, oops..  [9a8597c6]
2959 - A whole lot of smallest and small fixes due to registration at
2960   Coverity Scan, as project 444.  Error handling in S-nail is ridiculous.
2961   [*coverity-444* and *coverity-444.2* topic branches.  The sheer number
2962   of fixes was the reason to sit down and go for unplanned S-nail v14.3]
2964 - *idna-strict-checks* has been dropped.  It's silly to have in a MUA,
2965   especially given that GNU LibIDN doesn't ship with a lot of rules.
2966   We were able to drop quite some code (and a use-after-free, too :().
2967   [c81fd41d]
2969 - The ~p tilde command displays attachments more verbose.
2970   Until the big big MIME and send layer rewrite :) this is intermediate
2971   since until then we do not really know neither MIME type nor charset
2972   of an attachment at the time this is displayed (for sure).  Yet
2973   i think it's nicer to show what we have than keep it the way it was.
2974   [60e70463]
2976 - @ and @& shell command prefixes have been added for the pipe-MIMETYPE
2977   mechanism.  The former suppresses filters if multiple messages are
2978   displayed at once, the latter adds asynchronous program execution on
2979   top of that.  E.g., to display PDF documents, but only if you
2980   *explicitly* address the message *alone and by itself*, and without
2981   blocking S-nail and the $PAGER, do:
2983     set pipe-application/pdf="@&cat >"${TMPDIR}"/s-nail${$}.pdf;\
2984       mupdf "${TMPDIR}"/s-nail${$}.pdf; rm "${TMPDIR}"/s-nail${$}.pdf"
2986   (Inspired by Gavin Troy.)  [a8d724b3]
2988   Note: most of that had been posted to nail-devel@ already, but it was
2989   tweaked ([251b636]) so that you now *really* have to say `p MSGNO' to
2990   get there.
2992 - The NETLESS CONFIG= has been removed; it is almost identical to
2993   MINIMAL now (i.e., without WANT_JUNK and WANT_SCORE).
2995 - WANT_JUNK and WANT_SCORE have been disabled by default.
2996   They don't seem to be too useful; i hope i can implement
2997   a SpamAssassin hook for (downloaded) mail messages for v14.4.
2998   If so, expect these two "modules" to become removed completely.
3000 v14.2.2, 2013-05-01
3001 -------------------
3003 Another unplanned (minor) bugfix release after Gavin Troy (gavtroy AT
3004 gmail DOT com) pointed out that MIME CTE decoding was broken, who
3005 i therefore want to give a lot of prominence right here.
3007 - Fix MIME content decoding which has been broken by [01c0e135].
3008   [882caedd]
3009   (Gavin Troy.)
3011 v14.2.1, 2013-04-30
3012 -------------------
3014 An unplanned (minor) bugfix release after i've found two bugs today and
3015 heard from Jérémie Courrèges-Anglas (jca+nail AT wxcvbn DOT org) that
3016 there exists a S-nail OpenBSD package.
3018 I want to give prominence to the following people that helped to
3019 improve S-nail(1) during this development cycle, in order of
3020 appearance: Dirk Peters (peters AT schwertfisch DOT de).
3022 Thank you very much, and best from Germany!
3024 - Some warnings of newer clang(1) versions were silenced, including yet
3025   another alloca(3) problem (see *memtracer* topic branch in v14.0
3026   series).  [6f846efe]
3028 - Tweaking the MIME boundary detection left a little hole that could
3029   cause boundaries not to be detected, as has been shown by a Microsoft
3030   Word generated mail on the ICU list.  [11e5fb5b]
3032 - A format string could overflow bounds if unrealistic
3033   (18446744073709551615) line numbers or message sizes would have been
3034   produced.  [faa65c40]
3036 - An algorithmic error could cause overlong lines which wrapped around
3037   to the next display line.  [ade52660]
3038   (Dirk Peters.)
3040 v14.2, 2013-03-15 [v14.1, 2013-03-12]
3041 -------------------------------------
3043 I want to give prominence to the following people that helped to
3044 improve S-nail(1) during this development cycle, in order of
3045 appearance: Martin Neitzel, Christos Zoulas, Stephen Isard, jgw@txo.org
3046 and Gavin Troy.
3048 Thank you very much, and best from Germany!
3050 + v14.2 differs from v14.1 only by one commit, one that fixes
3051   (mime_fromhdr(): partial rewrite using n_iconv_str(), 2013-03-12),
3052   which i hastily implemented just hours before the release of v14.1,
3053   and simply shouldn't have made it (into there).
3054   The v14.1 tarball has been removed from the server.
3056 - A fix for the quoted-printable codec: "message truncation" occurred
3057   when a mail maliciously used a soft linebreak to escape the linebreak
3058   of a completely empty line.
3059   (That resulted in 0 written and 0 leftover bytes, a condition that was
3060   declared erroneous back in november 2012 when i started handling I/O
3061   errors.)
3063 - The "folders" command will work again when given an argument.
3064   A fault of mine introduced in (cmd1.c: expand() may fail, 2012-10-23).
3066 - The Base64 codec has been touched again, and we are finally capable to
3067   perform sequential decoding; this was targeted for the MIME/send layer
3068   rewrite, but it actually was possible today.
3069   The result as seen in ps(1), running on the Base64 encoded HTML5
3070   standard (4622545 bytes HTML, with a NUL appended to force Base64
3071   encoding, resulting in a 6244793 bytes email):
3073    7420 s006  S+    2:22pm 0:10.65 plain-nail -f HTML5
3074    1440 s006  S+    2:23pm 0:00.36 ./s-nail -f HTML5
3076   (So the only thing that is left for a good throughput is sequential
3077   decoding of quoted-printable encoded parts that maliciously use soft
3078   linebreaks to convert an entire part to a single line.  And i've seen
3079   that from Apple Mail.)
3081 - New option: *mime-allow-text-controls* (rather long manual entry).
3083 - *smtp-auth-password-user@host* and *smtp-auth-user-user@host* will
3084   finally work!
3085   (Reported by jgw@txo.org in November 2011, fixed by Gavin Troy in
3086   January 2012.)
3088 - Most *headline* formats now do support the '-' left-alignment flag.
3089   Note that you most likely have to change your *headline* accordingly.
3090   (The still missing %n format is one reason why there will be v14.2.)
3092 - *datefield* and *datefield-markout-older* can now be set to
3093   strftime(3) format strings (except %n).
3094   (From Stephen Isard's wishlist.)
3096 - A possible SEGV has been found and also fixed by Stephen Isard.
3097   (The "legendary" cross-world stereo fix!)
3099 - Wow!  S-nail will finally compile on GNU based Linux systems like
3100   Slackware 14 etc.  (Found while hunting bug reported by
3101   Stephen Isard.)
3103 - New option: *datefield-markout-older* can be used to choose
3104   a different date display for mails that are older than six months,
3105   in equal spirit to what POSIX describes for the -l option of the ls(1)
3106   command (Stephen Isard).
3108 - (Exotic) Years are (would) now (be) interpreted correctly according to
3109   RFC 5322, 4.3.
3111 - CRAM-MD5 usage has been fixed.
3113 - *folder* updates are now tracked when set, and we will show the
3114   realpath(3) name of it, showing PREFIX..SUFFIX if that wouldn't fit on
3115   the display.
3116   Tracking updates made it also possible to perform other more expensive
3117   tasks when setting *folder*, so that it is now possible to do
3118   something like:
3120     :set folder=$HOME
3121     :set folder=~
3123   et cetera (both ideas by Christos Zoulas).
3125 - Bugfix for the ~@ tilde-escape in non-interactive mode.
3126   (readtty(): quick shot: work in pipelines (on non-TTY).., 2013-01-25)
3127   introduced the possibility to "read data from the terminal" (STDIN
3128   that is) in non-interactive mode.
3129   The manual documents that attachment input must be terminated with an
3130   empty line, but if that had been omitted, as in the example below, we
3131   would have yet entered an endless loop.
3133      $ cat <<_EOT | /s-nail -~ -s boom ./OUT
3134     ~@
3135     test.c
3136     charset
3137     _EOT
3139 - Alias expansion will now be performed for members of Reply-To: fields
3140   (Martin Neitzel).
3142 - Decoding quoted-printable will now be more relaxed.
3143   (Even though the standard says that users should be given a hint when
3144   input is not absolutely clean; a possible warning will be added later,
3145   when we have an error message ring.)
3147 - New option: *mimetypes-load-control* can be used to control which of
3148   the mime.types resources will be loaded.
3150 - The builtin default mime.types have been extended a bit.
3152 v14.0, 2013-02-10
3153 -----------------
3155 I want to give prominence to the following people that helped to
3156 improve S-nail(1) during this development cycle, in order of
3157 appearance: John Dodson, Gianluca Ramunno, and Anon Ymous from the
3158 NetBSD project.
3160 Random notes
3161 ^^^^^^^^^^^^
3163 - Encoding defaults to *quoted-printable* not *8bit*.
3164   This has no technical background except that i think it's the better
3165   default.
3167 - Small progress for the "getting stuck due to the current folder
3168   becomes inaccessible due to whatever reasons"  problem.
3169   (schdir(): realpath() local files before leaving CWD.., 2013-01-08)
3171 - The names of temporary files have changed.  Whereas not all uses of
3172   temporary files already use really meaningful names, it has yet become
3173   possible to use the pattern "*mail-*"; or, to be compatible with
3174   NetBSD Mail(1) in one go, "*mail*".  (E.g., in my ~/.vimrc you'd read:
3175     :au   BufRead,BufNewFile *mutt*,*mail* setl fenc= | setf mail
3176   [the *mutt* is a leftover from times when i've used MUAs that suck].)
3178 ChangeLog
3179 ^^^^^^^^^
3181 - The Quoted-Printable MIME handling has been rewritten completely.
3182   We now correctly encode files with the MS-DOS newline sequence (CRLF).
3183   (Part of the *mime-cte* topic branch.)
3185   S-nail(1) continues to be able to handle text messages and text
3186   attachments without a trailing newline, but because these
3187   Content-Transfer-Encoding related things are now handled by the C-T-E
3188   layer instead of by sendout.c a text message body that comes in as
3189   part of a complete message via the -t command line option will loose
3190   the missing final newline (i.e., it'll gain one).
3191   This problem does *not* occur when *only* the message body comes in
3192   via STDIN, as in 'cat FILE | s-nail', but *only* when the -t option is
3193   used.
3194   (sendout.c: does no(t/ longer) know about CTE internals!, 2013-02-09)
3196 - Filename arguments for -a are now processed *after* all the resource
3197   files have been loaded etc., so that the usual "folder" specifics can
3198   be used (provided that proper care for shell quoting was taken).
3199   ((main(): delay -a processing.., 2013-01-10), as a part of the
3200   *mainaflags* topic branch.)
3202 - (d38c5bd, When the write command asks.., 2004-11-23) added support
3203   for pipes when saving attachments during a "write" command.
3204   It however used the wrong SIGPIPE signal handler; e.g.:
3206     Enter filename for part 2 (application/x-gzip): |exit
3207     Segmentation fault
3209   Of course, it still performs a jump and that most likely leaves memory
3210   chunks behind, thus causing some memory leaks.  This will be
3211   a long-term problem (you may want to read [mime.c:fwrite_td(): TODO
3212   notes on unfixable leaks, 2013-01-14] for more).
3213   (send.c:sendpart(): fix longjmp() SIGSEGV.., 2013-01-29)
3215 - Fixed a name quoting regression that i've introduced in
3216   (Rewrite *extract().., 2012-10-20), that would have caused
3217   "x \"y\" z" to become "x"y" z" instead of "x "y" z".
3218   (S-nail still does not really have RFC compliant parsers, just as
3219   NetBSD Mail(1) has, i.e., there are structured and unstructured fields
3220   etc...  I hope i can provide them in v15.0.)
3221   (names.c:yankname(): fix quote regression.., 2013-01-29)
3223 - The IDNA conversion now assumes domain names are specified in
3224   *ttycharset*, rather than in the LC_CTYPE locale charset.
3225   I.e., it integrates into the usual character set specifications.
3226   (IDNA: honour *ttycharset* for domain names, 2013-01-18)
3228 - The new *editalong* variable will automatically spawn an editor when
3229   composing a mail in interactive mode, just as if `~e' was given.
3230   (Add new *editalong* variable, 2012-01-07)
3232 - The manual has been converted to mdoc.
3233   (The manual has been converted to mdoc, 2012-12-28)
3235 - The ~@ tilde escape, when given filename arguments, will treat the
3236   arguments as a comma-separated instead of a whitespace-separated list.
3237   (collect: change separator of ~@ tilde escape.., 2012-12-28)
3239   The interactive mode of ~@ has also been changed, rather massively.
3240   Please do reread what the manual says.
3241   ((collect: support multiple attachment charsets.., 2013-01-23), as
3242   part of the *attach* topic branch.)
3244 - Thanks to Gianluca Ramunno (ramunno DOT gianluca AT gmail DOT com)
3245   S-Nail will no longer try to issue a STARTTLS command when it is about
3246   to establish a SMTPS connection, a task that logically fails since the
3247   connection is already secured.
3248   (Interestingly the nail codebase performs the necessary test for IMAP
3249   and POP3 already.)
3250   While here the undocumented nail v11.0 *smtp-use-tls* legacy option
3251   has been removed.
3252   (Fix SMPTS with a set *smtp-use-starttls*.., 2012-12-22)
3254 - The RFC 4155 compliant MBOX quoting is now exclusively used, the
3255   shitty *posix-mbox* variable has been removed again.
3256   (Shitty because i've implemented RFC 4155 compliant MBOX quoting and
3257   tested it, then added *posix-mbox* for those who liked the old
3258   behaviour and did not re-test -- the final code path was buggy.)
3260   In mails newly created and saved by S-nail(1) no From_ quoting at all
3261   will be used no more, but instead the rewritten MIME file classifier
3262   will detect unquoted From_ lines and enforce quoted-printable encoding.
3263   (This is an approach that is S/MIME compatible all through the way as
3264   the file data is not modified at all, but only encoded, so that the
3265   data checksum is not changed.)
3267   In yet existent mails that S-nail copies or moves around without
3268   reclassification an RFC 4155 compliant From_ line detector will apply
3269   MBOXO quoting (prepend a single '>') as necessary.
3270   Different to the old MBOXRD behaviour S-nail will neither quote yet
3271   quoted From_ lines ('>>From xy' -> '>>>From xy') nor will it unquote
3272   one quote level when reading etc. mails ('>> From xy' -> '>From xy').
3273   As a result the code could be simplified.
3275   This changeset also incorporates a fix for NetBSD PR bin/47453, as
3276   reported by Martin Brandenburg.  I.e., some mailers, noticeably
3277   UW-imap (with MBX format only?), use non-compliant From_ lines with
3278   RFC 822 date specifications.  Be aware of 'em.
3279   (RFC 4155 MBOX, and drop *posix-mbox* and foldergets().., 2013-01-06)
3281 - *rfc822-show-all* has been removed.
3282   It didn't work properly for more complex MIME structures, like
3283   message/rfc822 messages with attachments etc., just as i've seen today
3284   on the file(1) mailing list.
3285   So, instead of hacking it now i've dropped it and will come back with
3286   a better solution when the MIME and send layers have been overhauled.
3287   I.e., the real intent was to be able to specify that an embedded
3288   message/rfc822 is treated as a *unity*, and that's the goal.
3289   (Drop *rfc822-show-all*, 2013-01-23)
3290   [The manual will be adjusted in a different commit.]
3292 - *rfc822-no-body-from_* has been renamed to *rfc822-body-from_*.
3293   It thus must be set explicitly.
3294   On the other hand it now catches all cases...
3295   (*rfc822-no-body-from_* -> *rfc822-body-from_*, 2013-01-23)
3296   [The manual will be adjusted in a different commit.]
3298 - The new *charset-7bit* (defaults to US-ASCII) and *charset-8bit*
3299   (defaults to UTF-8) have been introduced.
3300   These are used if seven bit clean data is to be sent, and no
3301   *sendcharsets* are set or the convertion of all of them failed,
3302   respectively:
3304   - There is no functional change unless there is iconv(3) support.
3305   - There is no functional change unless you set them.
3306   (Introduce *charset-8bit* and *charset-7bit* variables.., 2013-01-18)
3307   [The manual will be adjusted in a different commit.]
3309   In addition the new *sendcharsets-else-ttycharset* variable can now
3310   be used to automatically use *ttycharset* as a *sendcharset(s)*,
3311   regardless of the new *charset-8bit* variable.
3312   (Add *sendcharsets-else-ttycharset* variable, 2013-01-24)
3313   [The manual will be adjusted in a different commit.]
3315   NOTE: before we apply charset conversion we now perform a string
3316   comparison to see wether character sets are identical.  If the strings
3317   match (case-insensitively), then *no* conversion is performed.
3318   This means that code like
3320     $ printf "LATIN1: \0376" | s-nail -Ssendcharsets= -s boom ./out.txt
3322   *succeeds* in an UTF-8 environment now, whereas older versions would
3323   fail with an "illegal byte sequence" error (unless the iconv(3)
3324   library of the system would not perform any conversion that seems
3325   superflous, of course).
3327   I thought about making this optional, but, in fact, if this would be
3328   done in an environment without iconv(3) support then the result would
3329   be equally corrupt.  And the way it is now we save the expensive and
3330   superflous conversions.  (See TODO for more.)
3332   Please *do* reread the manual section "Character sets".
3333   +++++++++++++++++++++++++++++++++++++++++++++++++++++++
3335 - An attempt was made to improve MIME Content-XY: detection.
3336   It should be more RFC compliant, and just overall better :);
3337   a simple one-pass classifier cannot match libmagic(3), of course.
3339   This changeset removes support of the long obsoleted (4fee1ef,
3340   2005-01-06) *charset* variable, as well as for the
3341   *maximum-unencoded-line-length* variable that has been introduced in
3342   (48a652bd, 2005-07-26).
3344   For S-nail v14.0 it'll be no longer necessary to do
3346     $ tr -d '\015' < input | s-nail ...
3348   to transport files which use the $-DOS (terminal) newline (sequence).
3349   We still depend upon *sendcharsets* for a while, though.
3350   (Rewrite file-content classification.., 2013-01-02)
3352 - The new *mime-counter-evidence* variable can be used to force
3353   a classification of non-text MIME parts (attachments) by their
3354   filename, i.e., a "reverse-classification" just as would be performed
3355   if S-nail(1) would itself *send* the file(name).  This can help
3356   against some stupid MUAs (Apple Mail?) that send .diff etc. files as
3357   `application/octet-stream' parts etc.
3359   At a later time this may become a valued option, causing a temporary
3360   save of unnamed attachments followed by a MIME classification of the
3361   file contents, followed by forced treatment as plain text if it seems
3362   to be human readable.  But not yet.  Just to warn you.
3363   (Add *mime-counter-evidence* variable.., 2012-12-29)
3365 - The special "pipe-" command "@" can be used to force treatment of
3366   a MIME message part as plain text (e.g.,
3367   'set pipe-application/pgp-signature=@' will henceforth print those
3368   signatures inline and as plain text).
3369   (Introduce the special "@" "pipe-" command, 2012-12-27)
3371 - The MIME types (as from mime.types(5)) will now be cached.  Before
3372   all possible sources would have been opened, read and parsed for each
3373   and every message part that required detection of the MIME
3374   Content-Type:.
3375   The new "mimetypes" command can be used to show or clear that cache.
3376   (Add mime.types(5) cache.., 2012-12-27)
3378 - A small set of MIME types (template: ./mime.types) will now become
3379   compiled into S-nail(1), and be used as a fallback if there are no
3380   ~/.mime.types and/or no /etc/mime.types, or those didn't contain
3381   a matching type.  E.g., NetBSD 6 doesn't ship a default database.
3382   Also, file extensions will be matched case-insensitively (case of
3383   attribute values is not specified afaik?).
3384   (Introduce compiled-in mime.types(5).., 2012-12-21)
3386 - The undocumented *charset7* variable was removed.
3388 - The "Message X:" display leader has been changed and will henceforth
3389   be matchable via "^[-- Message \d+ -- \d+ lines, \d+ bytes --]:$".
3390   These lines can no longer be suppressed by setting the *quiet*
3391   option (which was yet possible for print and top, though undocumented).
3392   (Change "Message X:" display message.., 2012-12-20)
3394 - When displaying multipart messages the "Part X:" introductional string
3395   has been changed; if the Content-type: header is not *retain*ed, then
3396   this string will include the part's type and size.  Ditto for
3397   Content-disposition: and a mentioned attachment filename.
3398   This is a first step only, for the final version the MIME and send
3399   layers will have to be adjusted.  But the string will be matchable via
3400   a "^[-- #.* --]$" regular expression from now on.
3401   (Change "Part X:" display message.., 2012-12-20)
3403 - MIME boundaries in multipart messages are now handled better in that
3404   no boundary string should get through to the display.
3405  (Tweak MIME boundary detection.., 2012-12-20)
3407 - A couple of long standing, even pre-Heirloom mailx(1) memory leaks and
3408   segmentation violations, most of them related to configurations
3409   without alloca(3) support, as well as one leak that i have introduced
3410   when i implemented RFC 4155 MBOX handling, have been fixed.
3411   But S-nail should now survive non-alloca(3) configurations.
3412   (*memtracer* topic branch.)
3414 - The Base64 MIME handling has been rewritten completely.
3415   This was an urgent topic, because the old implementation (a) read in
3416   all lines of a base64 encoded text part, repeatedly resizing a string
3417   storage and repeatedly decoding that string until all the lines have
3418   been swallowed (i.e., or by accident the last decoded byte was
3419   a newline character, and that in turn may of course have fucked up for
3420   multi-octet encodings, dependent on the actual byte-order), (b) used
3421   function local static data to keep state in between multiple
3422   invocations, which messed up multi-byte/-octet encodings like this
3424     �5��ɽ���Aɥ����́��٥��������[lots of data follows]
3426   and (c) did not perform any error checking at all.
3427   The new one does not run into the problem that (a) tried to circumvent
3428   since leftover decoded data (as opposed to leftover *encoded* data) is
3429   transported along the call-chain for later use.  It adds a minimal set
3430   of error handling ('may now see "[Invalid Base64 encoding ignored]"),
3431   with more to become possible in later S-nail versions when the entire
3432   layers are reworked.  (Until then DOS newline sequences [CRLF]
3433   embedded into base64 will no longer be decoded to Unix LF newlines.)
3434   Base64 encoded lines will now be 76 characters long, as stated (as
3435   a maximum value) in RFC 2045, not 72 as before.
3437   The Base64 code core has been shamelessly stolen from NetBSD's
3438   Mail(1), and i guess it was the second time that this happened :=).
3439   (*base64-rewrite* topic branch; and reworked later on the *mime-cte*
3440   topic branch.)
3442 - The string allocation strategy has been tweaked some more to, i think,
3443   a final version (regarding algorithm).
3444   In normal non-interactive send mode it should now no longer need any
3445   dynamic memory at all (unless some dozen recipients are specified).
3446   (Several other places still use normal dynamic memory, of course.)
3447   (*dope-stringdope-again* topic branch.)
3449 - Support for NSS (Network Security Services) has been removed.
3450   I've never worked with it and are, regarding the complexity of
3451   network security, not willing to spend any time on it.
3452   SSL is installed on all systems i'm using and/or testing on by
3453   default, and so i've choosen to go this way.
3454   (It may be that sometime in the future S-nail will add support for
3455   libcurl(3) connectivity, and then it may happen that not only NSS
3456   support is reintroduced again, but also GNU TLS.  All of that applies
3457   to network connectivity only, however, not to S/MIME afaik.)
3458   (*drop-nss-support* topic branch.)
3460 - I finally got a glue and understood that Sourceforge does (a) not
3461   support symbolic links and (b) doesn't like dots as regular parts of
3462   filenames.  This means that all this time the promised s-nail.tar.gz
3463   symbolic link did not work, and that s-nailv13.3.tar.gz wasn't
3464   accessible either (via the web interface).
3465   In the future S-nail(1) will not provide any more symbolic links (the
3466   Sourceforge website offers a "download latest" thing which seems to
3467   work), and use underscores in filenames -- s-nailv13.3.tar.gz has been
3468   renamed to s-nailv13_3.tar.gz.  The tags continue to use dot notation.
3469   Thanks.
3471 - The *heirloom-plus* support branch has been removed.
3472   The code bases diverged a lot and even more to come.
3473   It doesn't make sense to put any effort in that.
3475 v13.3, 2012-11-11
3476 -----------------
3478 - Configuration on UnixWare 7.1.4 will succeed (shell issue fixed).
3480 - Even on DragonFly BSD the IMAP GSSAPI is now found
3481   (in /usr/pkg/include/krb5/gssapi/gssapi.h).
3483 - Support for pkgsrc(7) systems and automatic integration of
3484   C_INCLUDE_PATH and LD_LIBRARY_PATH path configurations.
3485   Please see INSTALL.
3487 - Fixes a mortally embarassing regression that the current maintainer
3488   introduced before i really knew what i was doing, in (If *record* is
3489   set, avoid writing dead content twice.., 2012-09-14).
3490   It hit users that send through a MTA and have *record* set; in this
3491   combination data would not have reached the MTA.
3492   Interested parties may read the comment in savedeadletter() (part of
3493   the changeset) or the (Fix MTA/*record* descriptor clash..,
3494   2012-11-10) commit log.
3496   Deepest apologies to tortured users from the current maintainer!
3498 - RFC 4155 compatible MBOX file handling has been introduced, and so
3499   S-nail is now on par with (at least) NetBSD Mail in respect to this.
3500   It can be turned off with the new *posix-mbox* variable, which you may
3501   need to use since not all MUAs are capable to dig those MBOX files.
3502   E.g., less cutting-edge (.-) MUAs fail for this:
3504    |From - Thu May 10 20:40:54 2012
3505    |Date: Wed, 07 Nov 2012 11:48:30 +0100
3506    |To: super@duper.com
3507    |Subject: super1
3508    |
3509    |From me.
3510    |
3511    |From - Thu May 10 20:40:54 2012
3512    |Date: Wed, 07 Nov 2012 11:48:30 +0100
3513    |To: super@duper.com
3514    |Subject: super2
3515    |
3516    |>From - Thu May 10 20:40:54 2012
3517    |From - Thu May 10 20:40:54 2012
3519   I'm not completely happy since S-nail *does* still quote those lines,
3520   how rare they may be -- it *does* modify message content.  mutt(1)
3521   implements something more clever and that is quoted-printable encoding
3522   of the "F" from "From", when seen at the beginning of a line.
3523   This, when applied to just *any* "^From", will be a non-modifying and
3524   all-compatible solution.
3526 - SEND_MBOX handling has been changed to discard any Content-Length: and
3527   Lines: headers when it rewrites a message by default.
3528   I know that mutt(1) generates them (why, after
3529   http://www.jwz.org/doc/content-length.html?).
3530   Anyway, S-nail does neither use nor manage them, so that any
3531   modification renders those fields invalid, and then it seems best to
3532   discard them anyway.
3533   You may turn the new behaviour off with *keep-content-length*.
3535 v13.2, 2012-11-03
3536 -----------------
3538 The problem was that i really wanted to release on a 25th.
3539 But i have been able to improve S-nail(1) some more, so that this is
3540 possibly the first real release of it.  So i'll add only things that
3541 have changed since v13 -- please see below for the complete picture.
3543 - A new CONFIG=CUSTOM make directive was added, and the new user.conf
3544   variables WANT_SCORE and WANT_DOCSTRINGS have been added.  It is
3545   possible to create a floating-point free S-nail(1) now.
3546   Please see INSTALL.
3548 - If a feature is disabled not even functions stubs should remain now.
3550 - Many places which will work only with local filenames do now actually
3551   check that the target is a local filename.
3553 - Space-separated lists should work again, at a few places at least.
3555 - Tilde commands will be possible, even with -r.
3557 - The *sendmail-progname* has been added after NetBSD 6 dropped the
3558   send-mail entry in mailer.conf(5), which broke S-nail(1).  Now users
3559   have an option.
3561 - When editing messages via ~e or ~v file and pipe addressees will no
3562   longer be lost.
3564 - If recipients occur multiple times spread over lists, i.e., To:, Cc:,
3565   Bcc:, then only one occurrence remains, and in the "highest-order"
3566   list.
3568 - The "list" command prints the list alphabetically sorted (somewhat).
3570 - The "help" and "?" commands take an optional argument that shows
3571   a synopsis string for the given command (unless WANT_DOCSTRINGS was
3572   false).
3574 - String allocations are now more efficient.  The situation can still be
3575   improved.  However, for the first time Berkeley Mail(1) integrates
3576   harmonically into the system allocator, which may madvise(2) unused
3577   memory to the operating system as necessary and/or possible!
3579 v13.1, 2012-10-25
3580 -----------------
3582 Well, a version number 13 is anyway an ugly thing...
3584   commit 4f534bb33b7c911272cc66a0e3a9e47b73ad8deb
3585   Date:   2012-10-25 20:46:07 +0200
3587       FIX MIME quoted-printable encoding (char cast)..
3589       (;-{
3590       Auauauauau!!
3592       Well, one of the things that have already been started in v13 is
3593       the turn from using "int" when working with 8-bit characters to
3594       "unsigned char" (and as long as we do not support wide
3595       characters).
3597       Unfortunately one very important piece of code, that is handling
3598       encoding to quoted-printable, still used integer instead of
3599       unsigned char, which caused an automatic extension cast to take
3600       place, and that resulted in a messed up output.
3601       Sorry!
3603 v13, 2012-10-25
3604 ---------------
3606 I want to give prominence to the following people that helped to improve
3607 S-nail(1) during this development cycle, in order of appearance: Martin
3608 Neitzel, Ezequiel Garzón, Björn Persson, Paul Vojta, and, especially,
3609 John Dodson for warm words from beautiful Australia!  Many thanks also
3610 to Christos Zoulas.
3612 After i've officially forked nail(1) aka Heirloom mailx(1) as S-nail(1)
3613 on 2012-09-18 i have been able to work five weeks almost fulltime on
3614 S-nail(1) development.  The first three weeks can be characterized as
3615 hectic fireworks here and there, but then it got better and i was able
3616 to work more or less topic-centric.  In the meanwhile S-nail(1) is more
3617 than 230 commits away from the Heirloom base--and drifting further apart.
3619 S-nail(1) v13 is the first release of S-nail(1), but it was forked from
3620 Heirloom mailx(1) 12.5 7/5/10 that arose from Berkeley Mail 8. unless
3621 i'm mistaken.  What characterizes S-nail(1) v13?
3623 - The build system has been reworked almost completely.
3624   It is possible to fine-tune which features should be present in the
3625   binary and which don't.  The name of the binary can be chosen, and
3626   that choice is reflected all through the manual and the template
3627   resource file.  The manual is always complete and thus may document
3628   features that are not supported by the actual binary, though.
3629   Please see INSTALL for more.
3631 - Compiler warnings can now be used.  Please see the example WARN= flags
3632   in the Makefile, but '-Wall -Wextra -pedantic' should be silent though
3633   certainly insufficient to reflect the complex work of modern compilers.
3635 - The following recipient address list combines some of the major
3636   improvements that have been made:
3638     <addr1@cdröm.de>  (bier) , ./file1,
3639     Steffen Smöregäs (Humbabä) <sauer@bäüer.de> (Hummpäa)    ,
3640          sabberlot@träbbel.de  ,  (bier2) <a2@bür2.de> ,
3641        a3@b3.de (bier3)  , <a4@b4.de> (bier4, und \"bier5\")  ,
3642     |cat > pipe1 ,   (bier 6) <a6@bür6.de>  ,   ./file2        ,
3643     (co\$mm1) abc1@düf.de (cö,bmm,2)   (co\"m\"m.3) ,
3644     co\$bmm1 \"c,ömm2\" co\"m\"m.3 <abc2@däf2.de>  ,  |cat > pipe2 ,
3645     moppel@höppel.org
3647   That, on a single line, may be given to ":m" or (quoted) on the
3648   command line, or to "~c" or whatever, and it will work as expected
3649   (well, everything else would be a bug..) and result in the following
3650   sendmail(1) invocation:
3652   SENDMAIL.SH
3653   <-i a2@xn--br2-hoa.de a3@b3.de a4@b4.de a6@xn--br6-hoa.de abc1@xn--df-xka.de abc2@xn--df2-qla.de addr1@xn--cdrm-7qa.de moppel@xn--hppel-jua.org sabberlot@xn--trbbel-cua.de sauer@xn--ber-qla4j.de>
3654   >>>>>>>>>>>>>>>>>
3655   Date: Thu, 25 Oct 2012 17:12:15 +0200
3656   To:
3657   Cc: Steffen =?utf-8?Q?Sm=C3=B6reg=C3=A4s?=
3658     =?utf-8?Q?_(Humbab=C3=A4)?= <sauer@xn--ber-qla4j.de> (=?utf-8?Q?Hummp=C3=A4a?=),
3659     sabberlot@xn--trbbel-cua.de, moppel@xn--hppel-jua.org,
3660     <addr1@xn--cdrm-7qa.de> (bier),
3661     co$bmm1 =?utf-8?Q?"c,=C3=B6mm2"?= co"m"m.3 <abc2@xn--df2-qla.de>,
3662     (co$mm1) abc1@xn--df-xka.de (=?utf-8?Q?c=C3=B6,bmm,2?=) (co"m"m.3),
3663     (bier 6) <a6@xn--br6-hoa.de>, <a4@b4.de> (bier4, und "bier5"),
3664     a3@b3.de (bier3), (bier2) <a2@xn--br2-hoa.de>
3665   Subject: Re: SubjectTest
3666   MIME-Version: 1.0
3667   Content-Type: text/plain; charset=us-ascii
3668   Content-Transfer-Encoding: 7bit
3670   body
3671   <<<<<<<<<<<<<<<<<
3673   So list parsing has been fixed, IDNA support has been added, and it is
3674   possible to mix pipe and file recipients *and* multiple thereof, and
3675   the result is still correct for *all* of them.
3676   I think this kind of list can be given wherever a user can directly
3677   enter such a list.  And i think all that is unique to S-nail(1).
3679 - When writing back edited messages the target MBOX mailbox can no
3680   longer become "corrupted" when the trailing newline was removed during
3681   the edit.  Also affected FreeBSD and NetBSD mail(1).
3683 - A security fix for CVE-2011-2895 was applied.
3685 - The generated Message-Id: is now more human-friendly.
3687 - The -h command line option has been dropped.  Use "-O -h XY" if your
3688   MTA really supports that.
3690 - The -O and -r command line options no longer enforce a one-shot send
3691   mode, and instead persist for the duration of the entire session.
3693 - Variables set via the -S command line option are now (un)set twice;
3694   immediately and after all the resource files have been loaded.
3696 - Other new or changed options/commands, in order of appearance:
3697   recipients-in-cc, smime-sign-include-certs, quote-fold, stealthmua,
3698   add-file-recipients, write, rfc822-no-body-from_, rfc822-show-all,
3699   mail/Mail, idna-disable, idna-strict-checks, ??
3701 - In the codebase itself an effort to reduce duplicate work and
3702   introduce caching, and to minimize the use of local variables, was
3703   started, but that is long term.  A lot of improvements here and there,
3704   too, like using the well MD5 optimization from Wei Dai, Chris Torek's
3705   hash algorithm for hash tables etc.
3707 - Incredibly important: an heraldic animal was found: snailmail.jpg!
3709 The full history can be inspected by issuing the git(1) command
3711   $ git log --reverse s-nail..s-nailv13
3713 A new TODO has been introduced, and it is getting longer and longer.
3714 Thanks.
3716 # s-ts-mode