Hello list, i'm happily announcing feature freeze of S-nail v14.8, the "Albatros". It is available on the [next] branch. Since i've mirrored the repository to GitLab.com it can also be downloaded easily via, e.g.,
$ curl -o rc.tar.bz2 \ https://gitlab.com/s-nail/s-nail/repository/archive.tar.bz2?ref=next A lot of things happened, also recently, but don't expect the release any later than 1st of May 2015. I think it's worth giving a try already today, what is missing is time for review, and more work on the manual. It follows the (preliminary) NEWS entry. Puuuh! I'm glad and happy to announce "Albatros" after about six months of development. Development that brought many new features, bugfixes, technical overhauling and behaviour tweaking. Shall you ever have been interested in BSD Mail or its deriviatives you might want to give it a try. Note there are incompatible changes, documented below. And it is also advisable to try out existing configurations with enabled *debug* and/or *verbose* (-d, -v -v) in order to check for "obsoletion" warnings. (Here "obsolete" would refer to v15, of course.) Credits and Thanks go to Ypnose, Jérémie Courrèges-Anglas, Josef Jurek, Gavin Troy, Rich Salz, Martin Brandenburg, Bob Tennent and Dominic Meskys. We welcome Jérémie Courrèges-Anglas, Josef Jurek, Rich Salz, Dominic Meskys and Dirk Peters in THANKS. Apologies to Dirk Peters whom i had forgotten to add to THANKS at first glance once i've added this file; it was nothing but an oversight. I also say «Thank you» to GitLab.com – i've mirrored the S-nail git(1) repository (alongside others) to this free service. NOTES, ChangeLog (packager-affine) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + Crawling along the path of CVE [topic/cve-2014-7844.2]: to enable MTA arguments after -- the new *expandargv* must be set. Please see below. + Even more crawling along the path of the CVE i decided to replace the wordexp(3) based shell word expansion mechanism with a completely internally implemented restricted mechanism, but complete mitigation will take time. This has consequences in respect to backslash escaping in file names (shall you ever have used such a filename with S-nail and its predecessors, of course, and only ...). Please see [topic/fexpand.2] below. + The *attrlist* variable gained a new member (for unsure spam status). Since a user setting with a false length will be ignored yet causes an error message this is a backward incompatible change. [topic/spam.2] - New make.rc option: WANT_ALL_SSL_ALGORITHMS (enabled). See *smime-cipher* @ below. [topic/ssl.1] - The make.rc option WANT_IPV6 is gone; we use the respective standard library facilities automatically whenever possible. [] - New make.rc option: WANT_TERMCAP (disabled). See *term-ca-mode* @ below. [topic/termcap] - The make.rc option WANT_SPAM has been dropped. Instead we have (see [topic/spam.2] below for more): . WANT_SPAM_SPAMC (default off): Rather identical to the former WANT_SPAM (interaction with spamc(1) from spamassassin(1)), but internally improved. . WANT_SPAM_SPAMD (default off): Direct interaction with spamd(1) from spamassassin(1) via a local unix(4) domain socket. . WANT_SPAM_FILTER (default on): Freely configurable hook programs, e.g., bogofilter(1). - It turned out that the manual wasn't mandb(1) compatible. [] - New make.rc option: WANT_FILTER_HTML_TAGSOUP (enabled). S-nail now ships with a very primitive HTML-to-text converter. It'll be used for HTML parts automatically if no pipe handler is installed (and the builtin mime.types haven't been changed). This works because of the new TYPEMARKER extension to mime.types(5) as documented for [topic/mime.types.2] below. (It is quite experimental but i think it rocks except it can be fooled since it doesn't know about double quoted strings, e.g., <a href="" onmouseover='javascript:alert("> This is plain text you see, oops");'>. Yet it is ment for displaying HTML mails, and it works really well even for weird things like >700 KB Docbook manuals, > 400 KB Wikipedia pages and Change.org pages (which use CSS 2000.0).) + v14.8 is the last release with IMAP support, which has been removed from the developer's [crawl] branch for quite some time already. He really hopes he can affort to readd support sometime after v15.0. ChangeLog ^^^^^^^^^ - S-nail now knows about named booleans (e.g., `localopts' or interactive approval prompts can now be given any of 1/yes/true or 0/no/false, case-insensitively; note this is true for the make(1).rc system, too) and ternary options (ask-[1/yes/true/0/no/false]). [topic/xify] - The `if' @ combo: . gained <, >, <= and >= tests; ==, !=, <, <=, >=, > will try to convert their arguments to numbers and perform their test numerically, if possible, [] . `if' supports boolean (as above) arguments, [topic/ifpimp] . `if 1'+ return value fixed, [topic/ifpimp] . `if'+: on syntax error, NOOP anything 'till `endif', [topic/ifpimp] . `if'+ now support bracket groups, AND-OR lists and unary ! (not), note that the separating spaces are required: [topic/ifpimp] if [ [ true ] && [ [ $debug ] || [ $verbose ] ] ] echo noisy, noisy endif if true && [ $debug || $verbose ] echo left associativity, as is known from the shell endif if ! ! true && ! [ ! $debug && ! $verbose ] echo unary support endif . `if'+ now support new case-insensitive (ASCII) substring operators =@ and !@: [topic/ifpimp] if $features =@ "regex" if $TERM =~ "^xterm.*" echo ..in an X terminal endif endif - `unalias' @ learned that * means "all aliases". Fixed: faulty list-head relinking caused "dead" aliases (since ever) [topic/names] - `unshortcut' @ learned that * means "all shortcuts". `shortcut' @ in turn can now define multiple shortcuts in one go: [topic/names] ?0[ /var/mail/steffen]? sho you 'any one' me 'no one' ?0[ /var/mail/steffen]? sho me=no one you=any one ?0[ /var/mail/steffen]? unsho* ?0[ /var/mail/steffen]? sho ?0[ /var/mail/steffen]? - S-nail learned how to deal with mailing-lists in respect to Mail-Followup-To headers etc. (manual: "Mailing lists" @): . new commands `(un)?ml(list|subscribe)' to let S-nail decide which addresses are mailing-lists, [topic/names] @ . *headline* @ learned %T format to display message recipient flags: "L" for a mailing-list, "S" for a subscribed one, [topic/names] . new variable *followup-to-honour* @, [topic/mft] . new variable *reply-to-honour* @, [topic/mft] . new command `Lreply' @, forcing a list-only `reply' if possible. When `Lreply'ing to messages which seem to originate from mailing-lists (contain a `List-Post:' header), then S-nail will treat the list address as a known mailing list (as via `mlist'). (It is advisable to try out several different combinations of non-/ subscribed mailing-lists in conjunction with `reply', `Reply' and `Lreply' with *debug* set in order to get used to how S-nail will modify the address lists; the results should be quite logical though.) [topic/mft] . For convenience `reply' and `Lreply' can now be used to reply to multiple messages in one go (each message will still be handled by itself, we simply start over internally). [topic/mft] - `unset' @ no longer "fails" for unset variables, but only prints a message in *debug* or *verbose* mode. This changes traditional, decade-old behaviour, but shells don't even say something in (*debug* or) *verbose* mode, and it really simplifies things. [topic/okeys-attr] - SSL/TLS changes: [topic/ssl.1] . new variables: *ssl-cert-HOST* @, *ssl-key-HOST* @, *ssl-method-HOST* @, *ssl-verify-HOST* @, . *ssl-v2-allow* has been dropped, . *ssl-verify* @ and *smime-cipher-USER@HOST* @ use case-insensitive matching for value checks, . new variable: *ssl-protocol* @ (obsoletes *ssl-method* @), . new variants of *ssl-cipher-list* @: *ssl-cipher-list-USER@HOST*, *ssl-cipher-list-HOST*, . new variable: *ssl-config-file* @, . *smime-cipher* @ (and variants) dropped builtin support for the obsolete RC2-40 and RC2-64 ciphers -- use the make.rc option WANT_ALL_SSL_ALGORITHMS to readd support, . With SSL_CONF_CTX support (OpenSSL v1.0.2+) the values of the following variables (and variants) will be parsed by OpenSSL instead of S-nail, offering more user and packager flexibility: *ssl-cert* @, *ssl-cipher-list* @, *ssl-key* @, *ssl-protocol* @. E.g., shall a new OpenSSL ship with TLS v1.3 S-nail doesn't need to be adjusted in order to support TLS v1.3, all there is to do is that the user has to adjust her *ssl-protocol* setting. This is at least the theory. :) And maybe OpenSSL (will) offer(s) symbolic constants like "NEWEST" or "SAFEST". - Folder hooks have been extended: . if there was no *folder-hook-FULLNAME* @ we'll try *folder-hook-+NAME* if the mailbox NAME resides in *folder*, e.g., the author has "folder-hook-+sent=MACRO" and all his *record* variables are "record=+sent", therefore MACRO can be shared in between all accounts with a single hook definition. [] . `localopts' can now be used in folder hooks: the covered settings will be reverted once the folder is left again. [] - More security control à la CVE 2014-7844, possibly for the first time enabling safe usage of S-nail via CGI: [topic/cve-2014-7844.2] . fixed *sendmail-arguments* @ parsing: *sendmail-arguments*='-F "Dubi Da"' will now result in <"-F" "Dubi Da"> not <"-F" ""Dubi Da"">, . new command line argument "-." forcefully terminates options and enters send mode. I.e., using this option avoids possible misinterpretation of the following arguments. This operation is usually reserved for --, but since S-nail passes anything after -- to the MTA (but read on) i had to invent something else. . New variable: *expandargv* @: in equal spirit to *expandaddr* this one is required in order to pass arguments after -- to the MTA. If set to "fail" existence of such arguments is a hard error, "restrict" likewise except in interactive mode or in conjunction with the -~ or -# options. . *expandaddr* @: new special value "fail" causes presence of extended recipient addresses to be treated as a hard error. - `unaccount' @ and `undefine' @ learned that * means "all accounts" and "all macros", respectively. [] - Spam handling has been rewritten completely, also fixing a very old misbehaviour in subprocess handling (malloc in signal handler). Please reread the manual section "Handling spam" @ for more. The motivation was also that bogofilter(1), sylfilter(1) etc. can export their databases, so should the author ever find time to implement spam handling in C like his predecessor it will be possible to continue to use those databases: [topic/spam.2] . *headline* @ format %$ has been fixed, . when working on multiple messages the operation is cancelled if an error occurs, . new variables: *spam-interface* @ chooses the, well, ... This one has extensive documentation. Plus the interface dependent *spamc-command* @, *spamc-arguments* @, *spamc-user* @, *spamd-socket* @, *spamd-user* @, *spamfilter-ham* @, *spamfilter-noham* @, *spamfilter-nospam* @, *spamfilter-rate* @, *spamfilter-spam* @ and *spamfilter-rate-spamscore* @, . the *attrlist* variable gained a new slot for an unsure-spam status (default character is ~). Messages with that flag can be addressed via the :S colon modifier. - Fix: even though -# implies *sendwait* a user should have the option to turn *sendwait* off again. [] - Completely reworked mime.types(5) handling, note the backward incompatible drop of `mimetypes': [topic/mime.types.2] . dropped the `mimetypes' command, . new commands: `mimetype' @ and `unmimetype' @, . *encoding* is now parsed case-insensitively, . *mime-counter-evidence* @ gained new bit 3 to indicate the desire to forcefully overwrite MIME types if we think we know it better, . *mimetypes-load-control* gained an extension that can be used to load more and specific files, which in addition may make use of a new non-portable S-nail-specific TYPEMARKER extension. The manual section "THE mime.types FILES" @ has been rewritten accordingly. (In short: mime.types(5) lines can be prefixed by @, @h@ or @H@, for plain text, builtin HTML filter (plain text fallback), ditto (without fallback).) - Support for RFC 2231 has been added. This means that S-nail generates truly MIME compliant messages and no longer requires help from other MUAs! In fact MIME parameter handling has been rewritten completely. [topic/rfc2231] - On the long run shell word expansion (via wordexp(3)) will be replaced by a new, restricted (and thus (hopefully) safer), internally implemented path expansion mechanism that only supports ~/ -> HOMEDIR and $SHELLVAR / ${SHELLVAR}. Since the original expansion is *so* hardwired that'll take time, for now it is used for attachments only, but here all through the way. But where it is used already it has consequences regarding backslash escaping; to improve user experience a bit ~@ will display the escaped filename so that users only have to hit ENTER to accept paths: e.g., "diet\ is \curd.txt" will be displayed as "diet\\ is \\curd.txt". And, e.g., the test script does the following for RFC 2231 (excerpt): MAILRC=/dev/null "${SNAIL}" ${ARGS} -Snodot \ -a "ma'ger.txt" -a "mä'ger.txt" \ -a 'diet\\\ is\ \\curd.txt' -a diet \"is\" curd.txt \ ^ ^ NOTE: 0x00A0, NBSP -a ✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆✆.txt The introduction of the manual section "COMMANDS" @ has been updated accordingly. Also see -a @. [topic/fexpand.2] - Assorted changes: . Multiple crash-causing bugs regarding `source', also if used via `~:source', have been fixed. [aafb688,6979c73,4c6dfc2] . The NAILRC environment variable is no longer supported. [] . The *Replyall* variable has been dropped as it was only an alias for the POSIX standard *flipr* variable. [topic/mft] . New variables: *version*, *version-(major|minor|update)*, *features*. [topic/okeys-attr] . `varedit' @ can be used to create variables. [topic/okeys-attr] . New variable: *charset-unknown-8bit* @. [] . *smtp-auth* @ now defaults to "plain" (if *v15-compat* is set). (Josef Jurek, Gavin Troy) [] . All obsoleted: *autothread* @, `thread' @ and `unthread' @. [] . *showlast* @ should have gained meaning. (Gavin Troy) [] . If the -r option @ is given a full name specification (rather than only an address, pass the MTA the respective address parts via -F and -f. [] . New variable: *term-ca-mode* @ (for WANT_TERMCAP). [] . `ghost' @ gained a new mode and tweaks (see manual). [] . -r option: fixed -h output and manual. (Martin Brandenburg) [] . With *debug* or 2x *verbose* command lines (including those read from files) are now traced. (Bob Tennent) [] . NAIL_TMPDIR (new) and TMPDIR environment variables are now (guaranteed to be) set in pipe hooks. [] . Improved Subject: Re: trim: MIME decoding is now performed. [] . New variants of *pop3-bulk-load* @: *-[USER@]HOST*. [] . *crt*=0 @ now really works. [] . Maildir code now uses string relaxation which drastically dropped memory usage on large mailboxes. [] And for the first time it performs real memory cleanup. [] . Improved error message on MTA exec failure. (Dominic Meskys) . Fix: "setenv noVAR" would have set noVAR. [] . When `setenv' is used to set any of $HOME, $USER, $TMPDIR it'll be reflected by our internal variables. (Still hacky as special code is needed; also "set HOME=x" shadows HOME for "varshow HOME" instead of being rejected.) [] . Colon modifiers can now be joined, as :uas. [] ChangeLog (purely technical) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ . Improved output flushing, avoidance of printing of useless output (especially smoothens *editalong*). [topic/stdout-fflush] . String relaxation is now everywhere (but IMAP), the builtin buffer sizes were reduced to 1/3. . Again a manual review. The manual now supports mdocmx(7). . Implemented ARC4 pseudo-random for random generation. . Better signal handling here and there. . Fixed most "unpluggable memory leaks" by plugging them via chains of signal handlers and longjmps. Terrible. But no more leaks. . A lot of this and that. (Really.) I didn't make it to improved message selection. --steffen ------------------------------------------------------------------------------ Dive into the World of Parallel Programming The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ S-nail-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/s-nail-users
