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.25-- ! Fixed adding of extra headers when DROPPED_ADD_HEADERS is defined. Reported by Todd Lyons. ! Removed strict-date-syntax as it only applied to the older versions that used convertDateGMT prior to the switch to libsnert's convertDate. ! Updated license. --0.24-- + Requires LibSnert 1.70.3 ! Fixed regression in convertDate, which neglected to allow seconds to be optional. Reported by Christopher P. Lindsey. ! sample.mc.in: Removed from define(`_FFR_MILTER', `1')dnl --0.23-- + Requires LibSnert 1.66 ! convertDate() in libsnert did not take into account RFC 2822 header comments like the previous convertDateToGMT(). --0.22-- - Removed convertDateToGMT() in favour of the libsnert convertDate() version. --0.21-- + 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.20-- !! 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.19-- ! filterClose(): remove reporting of "null workspace error", which can occur when a client connection is rejected before or by filterOpen(). ! Minor corrections for gcc -Wall warnings. - "reject-and-deliver" patch and code dropped. It has not been maintained in a long while. + Added new policy types choices: tag, quarantine, later. This is consistent with other Snert milters. Note that policy=later is probably not very useful. + When using policy none, tag, or quarantine, add X-Date-Report: header containing the reason. --0.18-- ! 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.17-- + Requires LibSnert 1.57 + Added support for milter-length-auth:auth_authen RHS milter-length-auth: --0.16-- + 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.15-- + Requires LibSnert 1.54 ! Moved the convertDateToGMT() code into its own file suitable for creating a CLI testing tool. ! Have weakened RFC 2822 section 3.3 requirement where day-of- week must be three letter english abbreviation. It can now be missing or non-english. The remainder of the date string must parse accordingly. In response to feedback from Marc Dirix. + Added -S option to enforce strict RFC 2822 date & time parsing. This option is off by default given the past history discussed below. --0.14-- + Requires LibSnert 1.53 ! filterRcpt() minor change to account for LibSnert smfAccessRcpt() change to keep the old skipMessage behaviour. --0.13-- + 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 annouce/pass/fail output 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. !! Updated LICENSE.TXT. --0.12-- + 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.11-- + Requires LibSnert 1.38 + Bumped version to clearly indicate a new version after some people got hold of pre-release work in progress. --0.10-- + Requires LibSnert 1.37 + Add VERSION.TXT to configuration for use by sendmail.shtml. ! 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.9-- + Requires LibSnert 1.36. + Added contrib/milter-lives.sh cron script check that my milters remain running. ! Fix install.sh to assert the file permissions of the milter in sbin. + Added -t option to set the sendmail/milter socket timeout ! 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. + Add -f option and sendmail access database support for white listing. ! Replaced hostname and hostaddr variables by ${if_name} and ${if_addr} macros. ! 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.8-- + Add named socket unlink code to atExitCleanup() to work around the fact the libmilter doesn't do it itself. + milter-date.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-date/pid. Yes, I know I should save it in /var/run/milter-date.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-date 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. ! Replaced X-Spam-* header overloading with X-Milter-Date-Pass. Recommended by Derek Balling. Leave X-Spam- headers for milters that work with SpamAssassin or similar. ! 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-Date-Pass should be added or modified by the last hop to reflect final delivery policy. c) a separate header like X-Milter-Date-Pass can be more easily tested by simple mail client rules that don't support regular expressions. * As someone pointed out to me, my milters could be simply specified within your sendmail.mc file with: include(`milter-sender.mc')dnl include(`milter-date.mc')dnl include(`milter-7bit.mc')dnl include(`milter-spamc.mc')dnl Assumes that *.mc are found in /etc/mail along side the sendmail.mc script. If you use milter-sender, then you don't need milter-ahead, otherwise, milter-ahead comes before milter-date. The milters are ordered in this way because: milter-sender and milter-ahead work on everything BEFORE the DATA (message content) command. milter-date, milter-7bit, milter-spamc work with the message content AFTER the DATA command '.' milter-date looks only at message headers. milter-7bit looks at message headers and MIME parts over the entire message body. milter-spamc looks at message headers and only the first 64K of the message body. Scanning for spam is considered to be an intensive task that I think it shoulc come last. Like wise for anti-virus filters. --0.7-- * Thank you to Jeffery A Grooves for a DVD from the wishlist. + Requires LibSnert 1.31. ! main(): fix gethostbyname() error handling to refer to h_errno. ! Replaced time stamp format code with TimeStampAdd(), because some implementations of strftime() do not support the GNU extension %z for the numerical time zone. This function is similar to how Sendmail formats the timestamp. - Moved getIp4Octets(), ip4ToString(), and inet_top() cover function to Socket.c in LibSnert. ! milter-date.sh.in: fixed getpid() to be more precise about which field the PPID is to be found for all platforms. ! The following headers now replace previous occurrences: X-Spam-Flag X-Spam-Level X-Spam-Status X-Spam-Report After a request from Derek Balling and some discussion I've been convinced that keeping X-Spam-* headers from other servers is confusing to non-technical users, and the scores and rules from other sites will be site specific. + install.sh.in added to correspond with similar build procedures from my other milters. + signal QUIT support added for clean and immediate termination. + milter-data.sh.in: updated to use QUIT signal first. ! configure.in: fix inclusion of -lpthread for Solaris machines. Appears that there is a stub in the standard library that confuses the configure script into thinking it has the correct library already in its list. ! configure.in: changed some of the --with options to be --enable options in line with their intended documented use in autoconf. ! nullWorkspaceError(): disabled the smfi_setreply() call, which wants to allocated memory, but if we arrived at this point, then there is probably a memory space issue and we can't rely on functions that use malloc(). + Added support for IPv6. --0.6-- ! configue.in: fixes libmilter search for Debian systems. ! Added exception for QuickMail Pro Server for Mac 2.0 which uses an incorrect date format month name in all-caps: 23 OCT 03 10:41:33 UT So now there is the correct form "Oct", and two incorrect variants "oct" and "OCT", which are now allowed exceptions. If you think "oCt", "OcT", "ocT", etc. are going to be allowed, then I laugh in you general direction. ! Fixed parsing time zones to assert that whole tag is matched. This was particularly a problem with single letter miltary- style time zones. --0.5-- + Added missing error response to documentation. ! Fixed copy/paste error in milter-*sh.in scripts. + Add test for missing Date: and From: headers. RFC 2822 requires Date: and From: headers, see section 3.6 table of limits. I know From: is not date related, but it was a cheap easy test. ! Modified several error responses to suggest that the sender check their computer date, time, and time-zone. + There is some legit server software that I haven't identified by name yet play fast and loose with the Received: header format, for example: Received: by fw.theseus.fr; id NAA27040; Fri, 10 Oct 2003 13:10:31 +0200 (CEST) This uses two (2) semi-colons instead of one. The grammar in RFC 2822 section 3.6.7. Trace fields for the Received: header clearly indicates one and the removal of this stupid semi- colon would leave the software conformant. HELLO! WAKE UP! Standards exist for a reason! Twats. OK. Since I don't know the server software being used and even if I did probably couldn't get the world to upgrade (unless I found a security error) just to fix this little issue, so I've implemented a work around for this case. + Added support for non-conforming date format that appears to be used by stupid Lotus Notes: Fri Oct 17 13:51:37 2003 +0200 which is WRONG! What is it with lip service to standards efforts, yet failure to adhere. + Looks like qmail-scanner-1.16 is too stupid to read an RFC and realise that the RFC 2822 specifies the abbreviated month names with a leading capital letter. Add support for all lower case month and week-day names. --0.4-- + Add more syslog debug code. ! Fix passing wrong value to skipUntilPastSemiColon() in filterHeader() that would cause the milter threads to die on some systems. + Add hostname, IP, and RFC 2822 timestamp to X-Scanned-By line. Useful for seeing the order of insertions from multiple scanners. It appears that Sendmail prepends headers before similar headers in the same manner that Received headers are handled. ! milter-date.sh.in: The startup script would fail for Linux systems that have ps version 3, because it changed the default output for some processes (stripped the command line arguments and wrapped the command name in squre brackets), which is not entirely clear or useful. However, I found that the BSD options -acxj work equally well on Linux whether using ps version 2 or 3. --0.3-- + Requires LibSnert 1.21 for vfprint() fixes. ! Fix argument passed to vsnprintf() to be a va_list. It always was, just that some compilers complian about going from va_list to void * to va_list again. ! Increased recommended default timeouts in milter-date.mc. In particular the R: value should be adjusted upwards based on the number of milters + Based on a Sendmail patch developed for milter-spamc/0.8, added new -R option that supports SMFIS_REJECT_AND_DELIVER. ! Changed comment characters in milter-date.mc from # to m4's dnl macro. ! configure.in: Added test for inet_aton() in libresolv for SunOS 5.8, required by libmilter and socket applications. --0.2-- + Impose strict conformance to RFC 2822 section 3.3 when parsing the date-time strings. There is no excuse for legitmate mail clients and servers not to conform to RFC 822 or 2822. + Add support for Resent-Date headers. + Add by-pass for localhost interface. + Fixed how build numbers are applied and incorporated into the source. Before the configure script would insert the build number into milter-date.h, but that could not be updated easily with each recompile. Now the build number is passed on the command line to gcc from the makefile. --0.1-- + Requires LibSnert 1.20.