CHANGES ------- The major number changes for such things as code rewrites, changes in syntax, and/or dramatic changes in functionality. The minor number changes for corrections, enhancements, etc. made to the code. There is no set schedule for releases. --TODO-- --0.15-- + Requires LibSnert 1.63 + access-db now supports socket-map, flat-file, and SQLite3 lookups in addition to Berkeley DB. The SQLite3 behaviour can be disabled via LibSnert's ./configure script. - Dropped policy=later since RFC 2821 4.1.1.4 DATA paragraph 4 states that its not possible to return partial failure after receiving the message; either accept or reject. --0.14-- !! License 1.4 which provides additional details with regards to possible license controls used, the possibility of "phone home code" and its general contents, and related privacy statement. + Add check for filterOpen() got NULL socket address pointer passed to filterOpen() which inidicates an unsupported address type. The connection is simply accepted to bypass the milter. --0.13-- + Requires LibSnert 1.61. !! Complete replacement of option specification and no backwards. compatibility. The newer format allows for better integration of previously undocumented libsnert options and for the inclusion of future enhancements. ! filterClose(): remove reporting of "null workspace error", which can occur when a client connection is rejected before or by filterOpen(). ! -d and -r options merged into new policy= option along with new policy choices: tag, quarantine, later. This is consistent with other Snert milters. --0.12-- ! Reverted back to libmilter's default (7210s) timeout. This should silence many of the reported sendmail to milter timeout errors and/or broken connections caused by the milter timing out sooner than sendmail does with the current SMTP client. The sendmail defaults for each SMTP command and receiving the message content is 1h each and so libmilter allows for 2h 10s. But in theory you could be DoS for between 5 and 104 hours per connection. If you want to change this then set in sendmail.mc: define(`confTO_DATABLOCK', `30m') define(`confTO_COMMAND', `5m') --0.11-- + Requires LibSnert 1.57 + Added support for milter-length-auth:auth_authen RHS milter-length-auth: --0.10-- + Requires LibSnert 1.56 ! Changed install.sh.in to create /var/run/mitler/ directory owned by milter:milter and change the default PID_FILE and SOCKET_FILE paths. This provides better privelage/security separation since the milters run as milter:milter. --0.9-- + Requires LibSnert 1.53 ! filterRcpt() minor change to account for LibSnert smfAccessRcpt() change to keep the old skipMessage behaviour. --0.8-- + Requires LibSnert 1.41 ! Fixed configure.in script to better handle Berkeley DB library and header searches. All these cases should now work. ./configure ./configure --with-db ./configure --with-db=/usr/local/BerkeleyDB-4.2 ./configure --without-db ! Fixed the start-up script to unalias shell function names before defining the function. Reported by Francisco of Blackant dot Net. ! Encapsulated announce/pass/fail output the startup-script to support different OS favours; some like pretty output, some like it simple. - configure.in: Removed gcc option -fvolatile, which is no longer supported in as of gcc 3.4. + The milter now starts as a background process and can kill a previous instance of itself using the -x option. The -X option is undocumented, but starts the application as a foreground process for the purpose of debugging. + Added support for a /etc/mail/milter-name.cf file that can contain command-line options and an optional socket argument. ! The socket argument is now optional. ! The above three changes allow for a simplified startup script template for use by all my milters. - Removed -R in favour of always returning a detailed response. ! Fixed sign-extension bug in checkHeader7bit(). ! Offset into message content now accounts for headers too. ! Common code from milter-7bit.c and command-line 7bit.c now found in parser.c. ! Changed rejection message to include byte, offset, and error. ! Added hack to support stupid fucking broken Lotus Notes and eBay notices that misinterpret RFC 2046 section 5.1.1 Common Syntax: "The boundary may be followed by zero or more characters of linear whitespace. It is then terminated by either another CRLF and the header fields for the next part, or by two CRLFs, in which case there are no header fields for the next part." When there are no headers between two boundary tags lines there must still be at a CRLF for the end of headers!! Fuck wits! ! Fix bug concerning RFC 2045 6.4 "Interpretation and Use" paragraph 1 which states that a transfer encoding in the message headers applies to the entire message (excluding the MIME headers which are always 7-bits), unless altered by a specific MIME part. !! Updated LICENSE.TXT. --0.7-- + Requires LibSnert 1.39 ! Fixed the configuration file to recognise OpenBSD. Reported by Francisco of Blackant dot Net. ! Fixed the start-up script to unalias shell function names before defining the function. Reported by Francisco of Blackant dot Net. --0.6-- + Requires LibSnert 1.38 + Bumped version to clearly indicate a new version after some people got hold of pre-release work in progress. --0.5-- + Requires LibSnert 1.37. ! Fix makefile ownership target to assert correct state directory permissions. ! atExitCleanUp() now calls smdbClose() which mutex protects the call to db->close(). For the access database this is not so important, but it clearer code. --0.4-- + Add VERSION.TXT.IN to configuration for use by sendmail.shtml. + Added test for strict MIME syntax in Content-Type header. It has been observed that some spam attempts to play fast and loose with the RFC 2045 grammar for the boundary parameter by placing linear whitespace around the equals sign, example Content-Type: multipart/mixed;boundary= "----=_NextPart_000_00A4_7183A925.CCFCB11" Whether any legit mail clients do this remains to be seen, but they are non-conforming if they do. Since milter-7bit is all about RFC conformance, we reject mail that demonstrates this behaviour. --0.3-- + Requires LibSnert 1.36 for major smdb() update to solve threading issues and a possible memory corruption problem ! Fix install.sh to assert the file permissions of the milter in sbin. + Add -f cf for Sendmail access database B/W list support. Requested by Al Ross. + Added milter specific tags to correspond with similar facilities of my other milters: milter-7bit-connect: milter-7bit-from: milter-7bit-to: ! Assorted changes related to smdbAccess* changes in LibSnert. + Added X-Milter-7bit-Report header to provide location of failure. + Added line and position tracking for convenience. + The message headers are now checked for 7-bit compliance. + 7bit.c command line version provides line and position tracking. ! isHeader() fix bug in state machine where last MIME part header before empty line (CRLF CRLF) was not correctly identified. Therefore if that missed header happened to be a Content-Transfer-Encoding, a transition between encodings would not be identified. + Added contrib/milter-lives.sh cron script check that my milters remain running. + Added -t option to set the sendmail/milter socket timeout + Add an instanceCount for independent tagging of log message separate from the queue id. ! vSetReply() not checks for an MI_FAILURE from smfi_setreply(). + Set working directory to the state directory, where is can write a core file in the event of crash. ! nullWorkSpace() now takes a `where' string to report in what hook it failed. ! Removed requirement for ${client_name} and ${client_addr} macros. Now use parameters given to filterOpen(). ! DSN mail is no longer white-listed. Mail from <> should be RFC conforming and so it is content filtered like all other mail now. This should not affect error reports nor call-backs, but should catch any non-conforming spam that try to use the null address. ! Modified the nature of white-listing just a little to be a bit like FEATURE(`delay_checks'). This means that a white listed RCPT can override a black-listed MAIL or connection. And a white-listed MAIL can override a black listed connection. This behaviour only works 100% when FEATURE(`delay_checks') is used. When not used Sendmail will react to the black listings when it sees them. This is not a problem since this is probably what the postmaster wants. ! Replaced hostname and hostaddr variables by ${if_name} and ${if_addr} macros. - Removed Spam: OK tag variant. ! Enabled by default From: and To: support. ! Replaced some commom code shared by all my milters. See libsnert Sendmail Filter API (smf). ! Standardised the -v option across all my milters. Also support textual bit names. ! Modified license. --0.2-- + Requires LibSnert 1.32 for BufFromBytes() fix. + Check for Precedence header and if -r (reject) is given change for -d (discard) on list, bulk, or junk instead. Suggested by Andrey Chernov. + Add named socket unlink code to atExitCleanup() to work around the fact the libmilter doesn't do it itself. + milter-7bit.sh.in: add 2nd brute-force kill attempt to correspond with milter-sender and milter-spamc scripts. + Saves a pid file in /var/lib/milter-7bit/pid. Yes, I know I should save it in /var/run/milter-7bit.pid, but that assumes a process that runs as root all the time, since /var/run typically needs root to access and there is no guarantee that the milter starts as root. milter-7bit changes process ownership early in the process and I choose not to save the pid until just after all the setup code and before the version log lines. + install.sh.in: The milter-*.mc file is copied to /etc/mail. + Improved MIME boundary handling to only match Content-Type specified boundaries, instead of the looser technique that matched any lines that might have looked like a boundary, for example a signature separator '--' or "----cut here----" phrases. The looser technique might inadvertantly drop to 7bit from 8bit or binary encodings. ! Explicitly use ASCII character codes instead of the C compilers special character constants, which may have a different encoding on some platforms. + Add -p option to restrict MIME 7bit further to be only ASCII printable and whitespace characters. Exclude all control characters and 8bit values. Intended to catch some Asian characters sets that use special escape sequences and ASCII control codes to shift in/out to different character mappings while still remaining legally 7bits, for example ISO-2022-JP. + Added -R option for sites that prefer to return a more detailed reject response. ! Reverted back to keeping X-Scanned-By headers as a pure trace header with no result added. The old behaviour is a compile time option. Derek Balling suggested this for the following reasons: a) other milters authors will be tempted to remove the X- Scanned-By headers if they include results that might confuse users. b) a separate header like X-Milter-7bit-Pass should be added or modified by the last hop to reflect final delivery policy. c) a separate header like X-Milter-7bit-Pass can be more easily tested by simple mail client rules that don't support regular expressions. --0.1-- + Requires LibSnert 1.31.