E-MailRelay Change Log
======================

2.3 -> 2.4
----------
* Multiple "--filter" and "--client-filter" options allowed.
* TLS key and certificate files can be specified separately.
* Finer control when using "--anonymous" (eg. "--anonymous=server").
* The "auth-config" options can distinguish between TLS and non-TLS authentication.
* Hourly log file rotation using "%h" (eg. "--log-file=log.%d.%h").
* Listening file descriptors can be inherited from the parent process (see "--interface").
* Listening ports on Windows use exclusive binding.
* The Linux event loop uses "epoll" by default rather than "select".
* Some support for message routing (see NEWS).
* Fix of error handling in network client filters ("--client-filter=net:...") [bug-id #50].

2.2 -> 2.3
----------
* Unix domain sockets supported (eg. "--interface=/tmp/smtp.s").
* Windows event log not used for verbose logging (prefer "--log-file").
* New admin "forward" command to trigger forwarding without waiting.
* Optional base64 encoding of passwords in secrets files ("plain:b").
* Support for MbedTLS version 3.

2.1 -> 2.2
----------
* Connections from IPv4 'private use' addresses are allowed by default (see "--remote-clients").
* Interface names can be used with "--interface" (eg. "--interface=eth0").
* New "--server-tls-connection" option for server-side implicit TLS.
* New "--forward-to-some" option to permit some message recipients to be rejected.
* New "--log-address" option to aid adaptive firewalling.
* Dynamic log file rolling when using "--log-file=%d".
* Choice of syslog 'facility' on Linux with "--syslog=local0" etc.
* Pipelined SMTP QUIT commands sent by broken clients are tolerated.
* Better handling of overly-verbose or unkillable "--filter" scripts.
* Optional epoll event loop on Linux ("configure --enable-epoll").
* Some internationalisation support (see NEWS file).
* Support for Windows XP restored when built with mingw-w64.
* C++ 2011 compiler is required.

2.0.1 -> 2.1
------------
* Backwards compatibility features for 1.9-to-2.0 transition removed.
* Better handling of too-many-connections on Windows.
* New "--idle-timeout" option for server-side connections.
* Support for RFC-5782 DNSBL blocking ("--dnsbl").
* Filter scripts are given the path of the envelope file in argv2.
* Message files can be edited by "--client-filter" scripts.
* Better support for CRAM-SHAx authentication.
* New "--client-auth-config" and "--server-auth-config" options.
* New "--show" option on windows to better control the user interface style.
* The "--pop" option always requires "--pop-auth".
* No message is spooled if all its envelope recipients are local-mailboxes.
* TLS cipher name added to "Received" line as per RFC-8314 4.3.
* Certificate contents are not logged.
* Timestamp parts of spool filenames no longer limited to six digits.

2.0 -> 2.0.1
------------
* Make PLAIN client authentication work against servers with broken 334 responses.

1.9.2 -> 2.0
------------
* Improved IPv6 support, with IPv4 and IPv6 used independently at run-time (see "--interface").
* Server process is not blocked during "--filter" or "--address-verifier" execution, if multi-threaded.
* Support for the "mbedTLS" TLS library as an alternative to OpenSSL ("configure --with-mbedtls").
* TLS server certificates specified with new "--server-tls-certificate" option, not "--server-tls".
* TLS servers enable client certificate verification with "--server-tls-verify", not "--tls-config".
* TLS clients can verify server certificates with "--client-tls-verify" and "--client-tls-verify-name".
* The "--tls-config" option works differently (see NEWS file).
* New "--client-tls-server-name" option for server name identification (SNI).
* New "--client-tls-required" option to force client connections to use TLS.
* New "--server-tls-required" option to force remote SMTP clients to use STARTTLS.
* New "--forward-on-disconnect" option replaces "--poll=0".
* The "--anonymous" option now suppresses the "Received" line, whatever the "--domain".
* The second field in the secrets file indicates the password encoding, not AUTH mechanism.
* The "--verifier" option is now "--address-verifier", with simplified command-line parameters.
* Command-line file paths can use "@app" as a prefix to be relative to the executable directory.
* Command-line file paths can be relative to the startup cwd even when daemonised.
* Filter exit codes between 104 and 107 are interpreted differently (see NEWS file).
* Message rejection reasons passed back to the submitting SMTP client are much less verbose.
* Forwarding events are queued up if the forwarding client is still busy from last time.
* The bind address for outgoing connections is no longer taken from first unqualified "--interface" address [bug-id #27].
* The SMTP client protocol tries more than one authentication mechanism.
* Some support for XOAUTH2 client-side authentication.
* Client protocol sends QUIT with a socket shutdown().
* The Windows commdlg list-view widget is used for the server status pages.
* The Windows connection-lookup feature is withdrawn ("--peer-lookup").
* Several build-time configure options like "--disable-pop" are withdrawn.
* C++ 2011 is preferred, and required for multi-threading.
* Support for very old versions of Windows is dropped.

1.9.1 -> 1.9.2
--------------
* Fixed a leak in the event-loop garbage collection.
* A local hostname that fails to resolve is not an error.
* A warning is emitted if there is more than one client authentication secret.
* Multiple "--interface" options are allowed separately on the command-line.
* Added a new "--client-interface" option.
* The "Received" line is formatted as per RFC-3848 ("with ESMTPSA").
* The LOGIN and PLAIN mechanisms in the secrets file are now equivalent.
* The Windows service wrapper can use a configuration file to locate the startup batch file.
* Simplified the implementation of the GUI installation program.
* Reworded the "read error: disconnected" log message.
* Less verbose logging of "no more messages to send".
* Qt4 or Qt5 selected by the "configure" script.
* Improved the RPM spec file.

1.9 -> 1.9.1
------------
* Updated OpenSSL from 1.0.1e to 1.0.1g in the Windows build.

1.8.2 -> 1.9
------------
* Added negotiated TLS/SSL for POP (ie. "STLS").
* The first two fields in the secrets files are reordered (with backwards compatibility).
* Added Linux PAM authentication ("configure --with-pam" and then "--server-auth=/pam").
* Optional protocol-specific "--interface" qualifiers, eg. "--interface smtp=127.0.0.1,pop=192.168.1.1".
* Outgoing client connection bound with the first "--interface" or "--interface client=..." address.
* Support for SMTP-over-TLS on outgoing client connection ("--client-tls-connection") (cf. "STARTTLS")
* Support for SOCKS 4a on outgoing client connection, eg. "--forward-to example.com:25@127.0.0.1:9050".
* TLS configuration options ("--tls-config=...") for SSLv2/3 fallback etc.
* No "Received" line added if "--anonymous" and an empty "--domain" name.
* Error text for "all recipients rejected" is now more accurately "one or more recipients rejected".
* New behaviour for "--client-filter" exit values of 100 and over.
* New commands on the admin interface, "failures" and "unfail-all".
* Shorter descriptions in the usage help unless "--verbose".
* New default spool directory location on windows, now under "system32".
* Windows project files for MSVC 2012 included.
* Removed support for Windows NT and Windows 9x.
* Better support for Windows Vista and Windows 7.
* Removed Windows "--icon" option.
* Removed "--enable-fhs" option for "configure" (see INSTALL document for equivalent usage).
* Added "--log-file" option to redirect stderr.
* Added Windows "--peer-lookup" option.
* Fix for MD5 code in 64-bit builds.

1.8.1 -> 1.8.2
--------------
* Fix namespaces for gcc 3.4.

1.8 -> 1.8.1
------------
* Changed the definition of "--as-proxy" to use "--poll 0" rather than "--immediate" [bug-id 1961652].
* Fixed stalling bug when using server-side TLS/SSL ("--server-tls") [bug-id 1961655].
* Improved Debian packaging for Linux ("make deb").

1.7 -> 1.8
----------
* Speed optimisations (as identified by KCachegrind/valgrind in KDevelop).
* Build-time size optimisations (eg. "./configure --disable-exec --enable-small-exceptions ...").
* Build-time options to reduce runtime library dependencies (eg. "./configure --disable-dns --disable-identity").
* New switch to limit the size of submitted messages ("--size").
* New semantics for "--poll 0", providing a good alternative to "--immediate" when proxying.
* SMTP client protocol emits a RSET after a rejected recipient as a workround for broken server protocols.
* SMTP client protocol continues if the server advertises AUTH but the client has no authentication secrets.
* When a message cannot be forwarded the offending SMTP protocol response number, if any, is put in the envelope file.
* A warning is printed if logging is requested but both stderr and syslog are disabled.
* A cross-compiling toolchain builder script added for running on mips-based routers ("extra/mips").
* New example scripts for SMTP multicasting and editing envelope files.
* Improved native support for Mac OS X (10.5) with graphical installation from disk image.
* Compatibility with gcc 2.95 restored.

1.6 -> 1.7
----------
* TLS/SSL support for SMTP using OpenSSL ("./configure --with-openssl" with "--client-tls" and "--server-tls").
* Authentication mechanism "PLAIN" added.
* Some tightening up of the SMTP server protocol.
* Windows service wrapper has an "--uninstall" option.
* Windows installation GUI uninstalls the service before reinstalling it.

1.5 -> 1.6
----------
* GPLv3 licence (see "http://gplv3.fsf.org").
* New "--prompt-timeout" switch for the timeout when waiting for the initial 220 prompt from the SMTP server.
* Fix for flow-control assertion error when the POP server sends a very long list of spooled messages.
* Wildcard matching for trusted IP addresses in the authentication secrets file can now use CIDR notation.
* More fine-grained switching of effective user-id to read files and directories when running as root.
* Fewer new client connections when proxying.
* The server drops the connection if a remote SMTP client causes too many protocol errors.
* More complete implementation of "--hidden" on Windows.
* Scanner switch ("--scanner") replaced by a more general "--filter" and "--client-filter" switch syntax.
* Support for address verification ("--verifier") over the network.
* Better support for running as a Windows service ("emailrelay-service --install").
* Utility filter program "emailrelay-filter-copy" exits with 100 if it deletes the envelope file.
* Windows "cscript.exe" wrapper is added automatically to non-bat/exe "--filter" command-lines.
* Installation GUI makes backups of the files it edits and preserves authentication secrets.
* Installation GUI can install "init.d" links.
* Experimental SpamAssassin spamc/spamd protocol support.
* Acceptance tests added to the distribution.

1.4 -> 1.5
----------
* New installation and configuration GUI using TrollTech Qt 4.x ("./configure --enable-gui")
* Default address verifier accepts all addresses as valid and never treats them as local mailboxes.
* Fix for server exit bug when failing to send data down a newly accepted connection.
* Spooled content files can be left in the parent directory to save diskspace when using "--pop-by-name".
* Client protocol improved for the case where there are no valid recipients.
* New "--syslog" switch to override "--no-syslog".
* New "--filter-timeout" switch added.
* Support for "--foo=bar" switch syntax (ie. with "=").
* Multiple listening interfaces allowed with a comma-separated "--interface" list.
* New "--filter" utility called "emailrelay-filter-copy" to support "--pop-by-name".
* Documentation also created in docbook format (requires xmlto).
* Windows installation document revised.

1.3.3 -> 1.4
------------
* POP3 server (enable with "--pop", disable at build-time with "./configure --disable-pop").
* Fix for logging reentrancy bug (affects "./configure --enable-debug" with "--debug").
* Fix to ensure sockets are always non-blocking (affects "--scanner").
* Allow "--verifier" scripts to reject addresses with a temporary "4xx" error code.
* Automatic re-reading of secrets files.
* Write to the Windows event log even if no write access to the registry.
* Modification of set-group-id policy if not started as root.
* Better checking of spool directory access on startup.
* New "emailrelay-submit.sh" example script for submitting messages for "--pop-by-name".
* The "--dont-listen" switch is now "--no-smtp".
* Better IPv6 support (Linux only).

1.3.2 -> 1.3.3
--------------
* No bind() for outgoing connections [bug-id 1051689].
* Updated rpm spec file [bug-id 1224850].
* Fix for gcc3.4 compilation error in "md5.cpp".
* Fix for glob()/size_t compilation warning.
* Documentation of "auth" switches corrected.
* State-machine template type declaration modernised, possibly breaking older compilers.

1.3.1 -> 1.3.2
--------------
* Fix for core dump when "--client-filter" pre-processing fails.
* Revised code structure to prepare for asynchronous pre-processing.
* Better diagnostics when pre-processor exec() fails.
* Better cleanup of empty and orphaned files.

1.3 -> 1.3.1
------------
* Windows resource leak from CreateProcess() fixed.
* Windows dialog box double-close fix.
* Some documentation for the "--scanner" switch.
* New usage patterns section in the user guide.

1.2 -> 1.3
----------
* Client protocol waits for a greeting from the server on startup [bug-id 842156].
* Fix for incorrect backslash normalisation on "--verifier" command-lines containing spaces [bug-id 890646].
* Verifier programs can now summarily abort a connection using an exit value of 100.
* New "--anonymous" switch that reduces information leakage to the SMTP client and disables "VRFY".
* Better validation of "MAIL-FROM" and "RCPT-TO" formatting.
* Rewrite of low-level MD5 code.
* Performance tuning.
* Template "emailrelay.conf" gets installed in "/etc".
* New switches for the "configure" script.
* More JavaScript example scripts.

1.1.2 -> 1.2
------------
* The "--filter" and "--verifier" arguments interpreted as command-lines; spaces in executable paths now need escaping.
* The "--interface" switch applies to outgoing connections too.
* New "--client-filter" switch to do synchronous message processing before sending.
* Keeps authentication after a "rset" command.
* Fix for dangling reference bug, seen after "quit" command on Windows.
* JavaScript examples in the documentation.

1.1.1 -> 1.1.2
--------------
* Earlier check for un-bindable ports on startup, and later fork()ing [bug-id 776972].
* Resolved the file-descriptor kludge for "--verifier" on Windows.
* Less strict about failing eight bit messages sent to servers with no "8BITMIME" extension.
* Supplementary group memberships revoked at startup if root or suid.
* Pre-processor ("--filter") program's standard output searched for a failure reason string.
* Undocumented "--scanner" switch added for asynchronous processing by a separate network server.

1.1.0 -> 1.1.1
--------------
* Restored the fix for building with gcc2.96.
* Support for MinGW builds on Windows.
* More reasonable size of the "--help --verbose" message box on Windows.
* Windows "--icon" switch changed from "-i" to "-c" to avoid conflicting with "--interface".
* Shows "next server address" correctly in the configuration report when using "--forward-to".
* Fix for "make install" when "man2html" is not available.
* Updated init script.

1.0.2 -> 1.1.0
--------------
* In proxy mode unexpected client-side disconnects and timeouts do not leave ".bad" files [see also bug-id 659039].
* By default proxy mode does not interpret addresses for local delivery ("--postmaster").
* Polling option added ("--poll") to rescan the spool directory periodically.
* New special exit code (103) for the pre-processor to trigger immediate polling; 100 to 107 now reserved.
* Orphaned zero-length content files are deleted properly if the server-side dialogue is cut short.
* The "--interface" switch applies to the "--admin" interface too.
* Improved internal event architecture using slot/signal design pattern, and fewer singleton classes.
* Event notification available through the administration interface.
* New "--hidden" switch for Windows.
* Syslog output includes process-id.
* Support for Sun WorkShop 5.0 added.
* Documentation overhaul.

1.0.0 -> 1.0.2
--------------
* Support for trusted IP addresses, allowing certain clients to avoid authentication.
* Address verifier interface extended to include authentication information.
* New public mail relay section added to the user guide.
* Example verifier scripts etc. added to the reference guide.

1.0.0 -> 1.0.1
--------------
* In proxy mode unexpected client-side disconnects and timeouts result in ".bad" files [bug-id 659039].
* Require successful "AUTH" before "MAIL FROM" when using "--server-auth".
* Better word-wrap on "--help" output.
* Use of RedHat's "functions" code, and support for "chkconfig", added to the "init.d" script.
* Builds with gcc3.2 (1.0.0-pl5).
* Fix for files left as "busy" after a connection failure in proxy mode [bug-id 631032] (1.0.0-pl3/4/5).
* Trivial documentation fixes (1.0.0-pl3).
* Fix for the double-dot escape bug in the client protocol [bug-id 611624] (1.0.0-pl2).
* Fix build when using gcc2.96 rather than gcc2.95 (1.0.0-pl1).
* Fix default spool directory in example scripts (1.0.0-pl1).

0.9.9 -> 1.0.0
--------------
* Briefer "--help" output; works with "--verbose".
* Option to listen on a specific network interface ("--interface").
* Option for an external address verifier program ("--verifier").
* Some Linux Standard Base stuff added to the "init.d" script.
* Pid files world-readable and deleted on abnormal termination.
* Compiles with gcc 3.0 and intel 6.0.
* Autoconf tweak for MacOS X.
* Corrected the "Received:" typo [bug-id 572236].
* EHLO response parsing is now case-insensitive [bug-id 561522].
* Fewer missing-secrets warnings [bug-id 564987].

0.9.8 -> 0.9.9
--------------
* More flexible logging options ("--verbose" and "--debug" work better).
* File Hierarchy Standard (FHS) option for "configure" ("--enable-fhs").
* FHS-compatible RPMs.
* Spool files writeable by pre-processor when server started as root.
* Default directories in executables and scripts come from "configure".
* The "init.d" script is renamed "emailrelay" (was "emailrelay.sh").
* Man pages are gzipped when installed.
* Fix for access violation under Windows NT when client disconnects.
* Use of event log when compiled on Windows NT.
* Fix for info-after-flush bug when using the administration interface. [rc2]
* New "resubmit" script. [rc2]
* Submit utility works under Windows. [rc2]
* Improved Windows project files. [rc2]

0.9.7 -> 0.9.8
--------------
* Fix for running pre-processor ("--filter") as root.
* Ignore bogus "AUTH=LOGIN" lines in EHLO response.
* Submit utility improved to work with mutt.
* Installation of submit man page.

0.9.6 -> 0.9.7
--------------
* CRAM-MD5 authentication mechanism added.
* Revoke root permissions at start up, and reclaim them when needed.
* Allow mail pre-processing ("--filter") when started as root.
* Domain-override switch ("--domain") added.
* Non-privileged user switch ("--user") added.
* Better handling of NarrowPipe exception (ie. 8-bit message to 7-bit server).
* Allow null return path in MAIL-FROM.
* Reject recipients which look like "<user>@localhost" (as used by fetchmail for local delivery).
* Treat recipients which look like "postmaster@localhost" or "postmaster@<fqdn>" as local postmaster.
* Optional timestamps on log output ("--log-time").
* Fix EHLO to HELO fallback for 501/502 responses in client protocol.
* Submission utility "emailrelay-submit" added.
* HTML4.0 compliant HTML documentation, using CSS.

0.9.5 -> 0.9.6
--------------
* SMTP AUTHentication extension -- LOGIN mechanism only.
* Client-side protocol timeout.
* Client-side connection timeout.
* Preprocessor can cancel further message processing.
* Client's IP address recorded in envelope files.
* Multiple hard-coded listening addresses supported at compile-time.
* Fix for automatic reopening of stderr stream.

0.9.4 -> 0.9.5
--------------
Windows fixes and improvements...
* system-tray + dialog-box user interface
* fix for dropped connections
* fix for content file deletion
* fix for directory iterator

0.9.3 -> 0.9.4
--------------
* Fixed memory leak when no "--log" switch.
* Windows build is more "gui" and less "command-line".
* "Info" command added to the administration interface.
* Doxygen files removed from binary RPM.

0.9.2 -> 0.9.3
--------------
* Proxy mode ("--immediate" and "--as-proxy").
* Message pre-processing ("--filter").
* Message store classes better separated using abstract interfaces.
* Improved notification script, with MIME encoding.
* Builds with old 2.91 version of gcc.

0.9.1 -> 0.9.2
--------------
* Better autoconf detection.
* Workround for FreeBSD uname() feature.
* Added missing ".sh_" files to the distribution.
* Fixed a benign directory iterator bug.
* Use of gcc's "exception" header.

0.9 -> 0.9.1
------------
* Improved documentation from doxygen.
* More complete use of namespaces.
* Experimental compile-time support for IPv6.

