* Fix bug in logic that coalesces multiparts to single-parts if
possible; the bug broke DKIM signing.
MIMEDefang 2.77 RELEASED
* Change old author's name to "Dianne Skoll" in many places.
MIMEDefang 2.76 RELEASED
* mimedefang.pl.in: Get rid of all Perl function prototypes.
Perl prototypes are badly-implemented and consensus among
modern Perl 5 programmers is they shouldn't be used.
https://www.securecoding.cert.org/confluence/display/perl/DCL00-PL.+Do+not+use+subroutine+prototypes
* Add support for filter_wrapup callback. This is called at the
very end and permits header modifications, but not body
modifications. Useful for DKIM-signing.
* mimedefang.pl.in: Fix typo: SOPHOS should have been SAVSCAN
* mimedefang.c: Don't add a MIME-Version header if there is already
one.
* Fix https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=646347
* Minor clarifications to mimedefang-filter man page.
* Add "All / Summary" button to watch-multiple-mimedefangs.tcl
* Many cosmetic improvements to watch-multiple-mimedefangs.tcl
* Fix md_get_bogus_mx_hosts so it checks A records iff a domain has
no MX records.
* Add a forward declaration of rebuild_entity to avoid warnings on
recent Perl versions.
* A new action_add_entity function has been added.
* Deprecated defined(@array) construct has been removed.
* New load1 md-mx-ctrl command summarizes load in a more useful format than load
* watch-multiple-mimedefangs.tcl has been overhauled.
* Various other bugfixes and documentation cleanups.
* A new -G option causes files created by mimedefang to
be group-readable and sockets to be group readable/writable.
* The multiplexor snoops in on communications and saves the
Sendmail queue-ID for logging purposes. It logs the queue ID when
logging a slave's STDERR.
* MIMEDefang passes along the client port number, server IP address
and server port number to all filter functions. This feature was
sponsored by Scayl.
* In mimedefang.c, truncate overlong responses from the multiplexor. Also sanitize replies so "\r" doesn't get fed to smfi_setmlreply.
* If a slave process replies with a very long reply, have the multiplexor consume (and discard) the excess input so the multiplexor-to-slave protocol does not become de-synchronized.
* When mimedefang becomes a daemon, have it wait for a "go/no-go" message from the child before exiting. This should eliminate race conditions whereby the MTA starts before the milter socket is present.
* Avoid run-time errors from Unix::Syslog on some platforms.
* Restores compatibility with Postfix (which was broken in 2.70).
* Properly fixes signal-handling in child processes. 2.70 included a partial fix,
but signal-handling would break if you ran md-mx-ctrl reread.
PERL_SET_CONTEXT after forking or Perl gets confused.
In particular, setting signal-handling dispositions using
$SIG{FOO} = sub { ... } breaks.
* Clarify wording of mimedefang-filter man page.
* Remove obsolete code that used to attempt to generate working
directory names. Deactivate the no-longer-needed "-M" mimedefang
option.
* Add new "-y" option to mimedefang-multiplexor. This limits
the number of concurrent "recipok" commands on a per-domain basis.
* Remove Anomy::HTMLCleaner support.
* use MIME::Parser::Filer's ignore_filename() call instead of
subclassing to override evil_filename(). Same effect, less code.
* refactor resend_message_one_recipient() to use
resend_message_specifying_mode() instead of reimplementing it.
* header_timezone() now generates a strictly RFC2822-compliant timezone
string without needing POSIX::strftime()
* Ensure that decode_mimewords() is called in scalar context.
* Detect Sys::Syslog vs. Unix::Syslog at run-time
rather than when running ./configure.
* Bug fix: Don't change Content-Disposition to "inline" by default.
This was causing weird bugs with Outlook iCalendar attachments.
* Various crash fixes.
* Make relay_is_blacklisted and relay_is_blacklisted_multi handle
IPv6 addresses.
* Make the C code call smfi_setmlreply if the milter library supports it
and the Perl code returns a multi-line reply.
(And take over maintainer)
Release 2.67 adds the following features since 2.65 (there was no public
2.66 release):
* The ability for mimedefang-multiplexor to use poll rather than select.
This removes the FD_SETSIZE limit on the number of file descriptors
the multiplexor can handle.
* Support for FPROTD version 6 daemonized virus scanner.
2.65
There is only one change since 2.64: An error in the way the embedded
perl interpreter was initialized has been fixed. This fixes problems
on the Debian HPPA architecture and possibly others.
2.64
This is a minor bugfix release;
* Add support for NOD32 command-line scanner
* Add support for Sophos "savscan" scanner
Changes since 2.62:
* mimedefang-multiplexor.c: Relax the umask when creating the unprivileged
socket ("-a" command-line option.)
* mimedefang.c(eom): If we do not have a queue ID yet, try to obtain one
in eom. This is designed to improve operation with Postfix, which does
not assign a queue ID until after the first successful RCPT. Based on a
patch from Henrik Krohns.
* examples/init-script.in: Added MD_SKIP_BAD_RCPTS init script option
(suggested by John Nemeth)
* Remove support for OpenAntivirus. It's a dead product.
* mimedefang.pl.in(spam_assassin_status): Call $mail->finish() to prevent
temporary files from accumulating.
* redhat/mimedefang-init.in: Add configtest routine to check filter
syntax.
Changes since 2.61:
* A new "change_sender" action lets you change the envelope sender. Only
works with Sendmail/Milter 8.14.0 and newer!
* Clam interface code has been fixed to work properly with ClamAV 0.90
and later.
* Other minor improvements and bugfixes.
includes patch to work with clamav 0.90 and newer.
Changes since 2.59:
* SECURITY FIX: Versions 2.59 and 2.60 contained a programming error
that could lead to a buffer overflow. This is definitely
exploitable as a denial-of-service attack, and potentially may
allow arbitrary code execution. The bug is fixed in 2.61.
* If a message is going to end up being rejected,
discarded or tempfailed, we don't bother carrying out requests
to add/delete/modify headers or recipients, change the message
body, etc.
* mimedefang.c: Fix filter registration so MIMEDefang works
correctly against libmilter from Sendmail 8.14
Changes since 2.58:
* A new "watch-multiple-mimedefangs.tcl" tool that lets you keep an eye
on a cluster of MIMEDefang scanners.
* Fixes to the build scripts that should eliminate build problems on
Intel/AMD 64-bit architectures.
* mimedefang generates the COMMANDS file more safely and more efficiently.
* Various other minor improvements and bug-fixes.
Changes since 2.57:
* Various minor bug-fixes, including a memory leak.
Changes since 2.56:
* Various minor bug-fixes
* New md-mx-ctrl hload command shows load over past 1, 4, 12 and 24 hours.
* New multiplexor scheduling algorithm tries to keep a given command on a
given set of slaves.
Changes 2.56:
An off-by-one error in the multiplexor that could restart slaves
unnecessarily was fixed. Compilation errors on some systems were fixed.
A handful of other minor bugs were fixed.
Changes 2.55:
A new option allows you to reserve some slaves for connections from
localhost; this helps clientmqueue runs to succeed on busy servers.
Modern Vexira anti-virus scanners are supported; versions older than
Spring 2005 are no longer supported. A new "filter_helo" callback lets
you take action in response to HELO/EHLO. A new "action_insert_header"
function lets you prepend headers (rather than just appending them).
A new function lets you reject mail from hosts with bogus MX records;
for example, MX records that resolve to private IP networks or the
loopback address.
Changes 2.54:
a few minor enhancements and fixes.
Changes 2.53:
mostly work around bugs and deficiencies in third-party packages
commonly used with MIMEDefang.
Changes in 2.52
* mimedefang.pl.in (item_contains_virus_fprotd): Remove all references
to $` and $', which can SIGNIFICANTLY slow down Perl regexp matching.
* mimedefang.c(mfconnect): Do not call set_dsn from mfconnect, because
the Milter API specifies that you can't call smfi_setreply from the
connect callback.
* mimedefang-filter.5.in: Document the fact that filter_relay
cannot set the text of the SMTP reply code.
* mimedefang.pl: We don't detect and load Perl modules until
the detect_and_load_perl_modules() function is called.
*** NOTE INCOMPATIBILITY ***
You *MUST* call detect_and_load_perl_modules() inside your filter
before you can rely on the %Features hash being set correctly,
and before you can rely on SpamAssassin being loaded!!!
Changes in 2.51
Note: There was no public 2.50 release; the 2.50 version was a
private release that was available only with CanIt.
* Added "-q" option to mimedefang. This permits the multiplexor
to queue new incoming connections. It may make higher utilization
of slaves and improve throughput.
* ESMTP arguments in MAIL FROM: and RCPT TO: are now available
to the Perl filter. See the mimedefang-filter(5) man page for
details.
* Documentation fixes: We don't refer to non-multiplexor mode
any more, because that mode hasn't been available for ages.
* The "tick" facility has been enhanced to permit multiple tick
types. At any given instance, only one tick of a given type
can be active, but ticks of different types can be active at
the same time.
* Log a warning if a message has more than one Subject: header.
Changes in 2.48:
This is a bugfix release for 2.46 and 2.47, which contained several
embarrassing bugs.
Changes in 2.46:
This release has a mechanism for Perl slaves to report back their status
to the multiplexor. This allows you to see exactly what each scanning
slave is doing at a given point in time. This release also features
support for the "csav" virus-scanner from Command Software, and better
support for Trend Micro's command line scanner. The algorithm that
reconstructs MIME messages after modification is greatly improved and
avoids creating useless multipart containers with only a single sub-part.
A few smaller changes fix minor bugs and tighten up security.
Changes in 2.45:
The multiplexor has a new "-a" option to allow non-privileged users to
run a restricted set of status commands. "watch-mimedefang" has been
completely revamped and gives a lot of useful information about email
server load. It can monitor a remote server over an SSH tunnel. The
notification facility has two new messages, indicating a busy timeout and
the unexpected death of a Perl slave. There is a new set of RBL functions
that perform parallel DNS lookups to reduce latency. In addition, many
minor features have been added, bugs have been fixed, and documentation
has been cleaned up.
Changes in 2.44:
This release features support for two new Sendmail 8.13 features: the
SOCKETMAP map type, and Sendmail's built-in quarantine mechanism. There are
also some minor bugfixes and documentation cleanups, as well as a fix for a
memory leak with the embedded Perl interpreter on some platforms.
Changes in 2.43:
Various Perl functions can request the C code to delay before returning;
this permits tarpitting without tying up a Perl slave. The multiplexor has
an additional option to run a "tick" function on a periodic basis. There
are minor bugfixes and documentation improvements.
Changes in 2.42:
The multiplexor causes closelog() to avoid problems with embedded Perl
slaves. Support for SpamAssassin's upcoming 3.0.0 Perl API was added. A few
other small bugs were fixed.
Changes in 2.41:
This is a bugfix release only. The most important change is to stop the
action_quarantine_entire_message from sending out notifications each time
it is invoked. A few other minor bugs were fixed.
pkgsrc changes - add rc scripts and runtime checks for virus checkers
from Eric Schnoebelen in PR pkg/24295
- require native pthread library as pth doesnt work
Major changes from 2.39 to 2.40:
If multiple virus scanners are installed, they are all used.
Default action for viruses is now discard.
Added a new "notification" facility to allow external software to react
to changes in multiplexor state.
We now pass both the raw input message and the unpacked, decoded parts to
the virus scanner. This makes virus detection much more reliable.
Major changes from 2.38 to 2.39:
The multiplexor can be compiled with an embedded Perl interpreter to
significantly reduce the cost of starting a new slave
A memory leak in the status command was fixed.
A histo command was added so you can see how busy your installation
Major changes from 2.37 to 2.38:
The internal SMALLBUF constant was increased to handle larger SpamAssassin
reports produced by SpamAssassin version 2.60.
If a virus is found, action_notify_sender is disabled.
Major changes from 2.36 to 2.37:
Pure bug-fix release: A file descriptor leak was fixed, and we set the
close-on-exec flag on most file descriptors.
Major changes from 2.35 to 2.36:
Scalability enhancements for very busy servers.
Support for BitDefender's "bdc" virus scanner.
Other minor bug fixes.
Major changes from 2.33 to 2.34:
* The multiplexor can queue requests, which might help throughput on a very busy
server.
* filter_{relay,sender,recipient} can return "DISCARD" to discard mail.
* Added new filter_unknown_cmd hook so filters can extend the MIMEDefang protocol.
* More fixes to the SpamAssassin interface.
* RAV AntiVirus is no longer supported.
* Non-multiplexor mode is no longer supported.
* Many other minor enhancements and bug fixes.
Major Changes from 2.34 to 2.35
* Bug Fixes
Major changes from 2.32 to 2.33:
The syslog facility can be changed easily.
MIMEDefang deletes all but the first of multiple Content-Type: headers.
MIMEDefang adds a Received: header when resending messages.
Major changes from 2.31 to 2.32:
Support for Central Command's Vexira virus-scanner.
Support for Sendmail's rcpt_mailer, rcpt_host and rcpt_addr macros.
Other minor bug fixes
Major changes from 2.30 to 2.31:
support for FPROTD scanner.
support for Symantec CarrierScan Server virus scanner.
Added remove_redundant_html_parts() to delete HTML parts if a
corresponding text/plain part is present in the message.
Speed ups
Changes:
* mimedefang-multiplexor.c: On systems that support wait3 and fill
in the usage structure, we log the slave's system and user CPU
usage when it exits. The autoconf test is not too reliable on
Solaris; sorry...
* Create the temporary spool directory before calling filter_relay;
store it in $CWD for filter_relay, filter_sender, filter_recipient,
and the other filter functions, so we can pass state around.
* Officially deprecated non-use of the multiplexor. I plan
on dropping support for non-multiplexor operation by 31 July 2003.
* mimedefang.c: Added -M option to protect work directory
creation with a mutex.
* mimedefang.pl.in: resend_message returns a meaningful value
(true on success; false on failure.)
* mimedefang.c (envfrom): Fix potential descriptor leak. Problem
noted by Nik Clayton.
* mimedefang.c (envfrom): Fixed some incorrect syslog messages.
Problem noted by Nik Clayton.
* mimedefang-multiplexor.c: Add handling for filter_cleanup, that
lets you run Perl code just before a slave is killed. Based on
a suggestion by Brian Landers.
* Version 2.29 RELEASED
* mimedefang.pl.in (send_mail): Redirect sendmail's STDOUT to
STDERR; otherwise, complaints from Sendmail can mess up the
communication between the multiplexor and the slaves.
* mimedefang.pl.in: Add support for Trophie scanning library.
(Jason Englander)
* Version 2.28 RELEASED
* mimedefang.pl.in (spam_assassin_mail): Synthesize "Return-Path:"
and "Received:" headers for SpamAssassin (Nels Lindquist).
* mimedefang-multiplexor.c (MAX_CMD_LEN): Increased MAX_CMD_LEN
to 4096 from 512.
* mimedefang.pl.in (recipient_ok): Set global variables in
filter_relay, filter_sender and filter_recipient based on the
information available so far in the SMTP transaction. (Anne Bennet)
* Version 2.26 RELEASED
* Quarantine notifications no longer sent unless you explicitly
ask for them.
*** INCOMPATIBILITY ***
* mimedefang.pl.in (md_check_against_smtp_server): Added
md_check_against_smtp_server to check recipient addresses
before accepting them.
* Version 2.25 RELEASED
* mimedefang.pl.in: Added $RealRelayAddr and $RealRelayHostname
which give the actual relay host, ignoring the IP address
validation header. (Used by CanIt.)
*mimedefang.pl.in: Remove append_boilerplate
*** INCOMPATIBILITY ***
The append_boilerplate function is gone. It never really
worked properly. Instead, use append_text_boilerplate and
append_html_boilerplate.
* mimedefang.pl.in (message_contains_virus_clamd): Let clamd
recurse through work directory. Make sure you run Clam AntiVirus
version 0.52 or higher! (Jason Englander)
* watch-mimedefang: Now generated at configure time from
watch-mimedefang.in. Let's us specify @SPOOLDIR@
(Jason Englander)
Changes in 2.24:
This release includes "watch-mimedefang", a graphical monitoring tool [not enabled].
It does stricter checks on functions which only make sense in the context of a
message. Global variables are cleared between messages so that extraneous values
don't stick around. There are important fixes for Solaris and possibly other
non-Linux machines.
Changes in 2.23:
A bug which could crash mimedefang-multiplexor under conditions of extreme load
has been fixed. An attacker with sufficient bandwidth may be able to exploit the
bug to mount a denial-of-service attack.
Changes in 2.22:
Support has been added for clamd, the daemonized version of Clam AntiVirus. A new
variable $MaxMIMEParts lets you reject overly complex MIME messages which could
otherwise result in a DoS. A new action_delete_all_headers routine has been added
which deletes all instance of a given header. Many little bugs were fixed and
portability was improved.
MIMEDefang is an e-mail filter program which works with Sendmail 8.12
and later. MIMEDefang filters all e-mail messages sent via SMTP.
MIMEDefang splits multi-part MIME messages into their components and
potentially deletes or modifies the various parts. It then
reassembles the parts back into an e-mail message and sends it on its
way.
MIMEDefang is written (mostly) in Perl, and the filter actions are
expressed in Perl. This makes MIMEDefang highly flexible and
configurable. As a simple example, you can delete all *.exe and *.com
files, convert all Word documents to HTML, and allow other attachments
through.
MIMEDefang uses the "milter" feature of Sendmail to "listen in" to
SMTP connections. It runs a scan once for each message, not once for
each recipient (as simpler procmail-based systems do.) Therefore, it
is more CPU-friendly than procmail-based systems. In addition,
because MIMEDefang can participate in the SMTP connection, you can
bounce messages (something impossible to do with procmail-based
systems.)