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-- + Suggested by Grant Taylor: mail to a specified admin account using plus-detail address, like admin+user@admin.domain or admin+user_domain@admin.domain. --0.12-- ! Fixed some compiler warnings with gcc 4. ! Address problem with the two pass send and remove report strategy. Christian 'CBE' Benner reports that some or all the reports are not being removed. Suspect that the mechanism of marking the value as an empty string is relying on the BDB cache of the record in memory when there only a small number of records. When there are a large number of records, then record updates are lost. Changed update strategy to be a single pass. --0.11-- + Requires LibSnert 1.63 ! Corrected documentation error concerning two cache-type options when it should have been cache-file and cache-type. --0.10-- ! mailReport(): use smtpGetError() due to recent change in smtp API to use error code instead of error strings in libsnert. !! 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.9-- + From http://www.milter.org/milter_api/xxfi_abort.html * xxfi_abort is only called if the message is aborted outside the filter's control and the filter has not completed its message-oriented processing. For example, if a filter has already returned SMFIS_ACCEPT, SMFIS_REJECT, or SMFIS_DISCARD from a message-oriented routine, xxfi_abort will not be called even if the message is later aborted outside its control. Added a stub filterEndMessage() handler in order to signal to sendmail/libmilter that it needs to call xxfi_abort when some other milters rejects a message during the end of message processing. This requires that milter-report be the LAST in the milter execution sequence. This allows recording of message failures in milters like milter-link, milter-spamc, or milter-clamc. Reported by Grant Taylor. ! 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. !! 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. ! Replaced smtpSendMail() function with new smtp API, that removes any limitations on the size of reports. --0.8-- + Added #define _POSIX_PTHREAD_SEMANTICS to solve Solaris' differences in ctime_r() related to different iterations of POSIX.1 drafts vs final cut. ! Fixed report buffer overflow, where not enough space was left for the mail headers and lead-in message. Reported by Grant Taylor. ! 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.7-- + Requires LibSnert 1.57 ! sendReportNow(): if sending the report to the recipients fails for anything other than a recipient error, continue to send a report to the postmaster. --0.6-- + Requires LibSnert 1.56 ! Changed install.sh.in to create /var/run/milter/ 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.5-- ! Check if virtusertable is NOT used to avoid NULL pointer reference. --0.4-- + Requires LibSnert 1.52. + The virtusertable.db is consulted, if in use, to determine if there is a catch-all for a domain, ie. @example.com or an error: entry so as to avoid many different reports being sent to the same user, because of a dictionary attack. Suggested by Derek Balling. ! Changed -p option to take a word argument as to what level of reporting should receive (none, unknown, copy, redirect). Suggested by Derek Balling. ! Modified the report Subject: line to contain the recipient's address so that can identify different reports. ! Fold recipient address used for cache lookupt to lower case. This avoids two or more reports to addresses with mixed case. --0.3-- ! Fixed bug when -a specifies only one daily time. Reported by Victor A. Prylipko. ! Fixed bug concerning drift in report scheduling. Essentially the sending of the reports can take a few seconds to a minute or more depending on number of entries, so the current time has to be reread before perfoming the sleep calculation for the next report. --0.2-- + Requires LibSnert 1.49. ! LibSnert smtp.c API changes introduced in LibSnert 1.48. --0.1-- + Requires LibSnert 1.46.