Newer
Older
Here is a history of user visible changes to Python milter.
0.7.0 SPF check hello name
Move pythonsock to /var/run/milter
Move milter.cfg to /etc/mail/pymilter.cfg
Check M$ style XML CID records by converting to SPF
Recognize, but never match ip6 - until we properly support it.
Option to reject when no PTR and no SPF
0.6.9 Reject invalid SRS immediately for benefit of callback verifiers
Fix include bug in spf.py
Fix check_header bug
Fix setup.py to work with python < 2.2.3, thanks to Eric S. Johansson
Test driver for SPF test suite. Fix bugs and add features to
pass most of test suite.
Use best_guess() and get_header() in bms.py for SPF support
0.6.8 Defang message/rfc822 content_type with boundary
Support SPF delegation
Reject neutral SPF result for selected domains
Support SPF default (best_guess)
Don't report "spoofed" unless rcpt looks like SRS
Check for bounce with multiple rcpts
Make dspam see Received-SPF headers
Fix sysv init for Redhat 9 and other single ps line per process systems
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
0.6.7 Fix failure to remove explicit unix socket thanks to Alexander again.
Support SRS forgery detection.
Detect thread resource starvation in Milter.py.
Decode obfuscated subject headers.
0.6.6 Another memory leak plugged by Alexander Kourakos.
Support SPF checking: http://spf.pobox.com
Hello blacklist
RPM compiled for python2.3 and sendmail-8.12
0.6.5 Plug memory leak in wrap_connect thanks to Alexander Kourakos.
Support progress notification.
Log Received header for trusted relay.
Support wildcard user for smart alias.
0.6.4 Exempt entire domains.
Tweak SMTP error codes reported.
Suppress traceback for Dspam lock timeouts.
Dspam internal mail for dspam users.
Match hostname for internal connection test, even if no ipaddr.
Fix for not saving defang of false positive triggered rejecting it
as a virus from self.
Size limit for dspam to work around dspam-2.6.5.2 bug.
(dspam-2.8 still showstopper buggy for libdspam API.)
Whitelist for dspam.
Reject list for dspam (REJECT rather than quarantine SCREENed
spam for listed domains).
Report dspam header changes to sendmail, fix headerChange
to handle deleting absent header.
dspam feature requires pydspam-1.1.5
0.6.3 dspam screening (with pydspam-1.1.4)
Don't write "defang" file for false positive feedback
0.6.2 Work around email package bug in get_filename().
add dspam_exempt list to milter.cfg
REJECT messages with missing MIME boundaries (almost always spam)
DISCARD messages which any dspam user flags as spam
start.sh was calling python instead of python2 on Linux
0.6.1 Work with python-2.2.3
Integrate full dspam application
0.6.0 Use email package in python-2.2.2
0.5.6 Include dspam interface for Bayesian filtering
0.5.5 Allow passing None to setreply and chgheader thanks to George Graf.
Experimental IPv6 support thanks to Deron Meranda.
Allow removing callbacks by passing None to set_XXX_callback.
Recognize internal connections in bms.py.
Give users a clue when rejecting banned subjects.
0.5.4 Wiretap redirection feature, smart alias feature, QUARANTINE support
0.5.3 Tweak to run under 2.2 in production
0.5.2 Fix and add to unit test another parsing failure.
0.5.1 Properly handle modifications to rfc822 attachments.
Handle encoded rfc822 attachments.
0.5.0 Use config file so users don't have to keep syncing the
bms.py script. Keep bms.py marked as %config for a while
to avoid wiping out their customizations just yet.
0.4.5 Work with sgmlop package to speed up HTML parsing.
Reduce various local hacks to config variables.
0.4.4 Bug fixes for HTML encoding.
0.4.3 Handle quoted-printable HTML attachments. Remove entire
attachment when HTML can't be parsed.
0.4.2 Parse HTML attachments to remove <script ...>...</script>.
Klez virus uses malformed MIME part separators to prevent
the multifile module and other virus scanners from seeing its
HTML attachment (which contains Javascript and VBScript). Outhouse
happily accepts and executes the malformed attachments, but
we still kill the Klez virus because we:
Defang attachment when any Content-Type attribute ends with
a banned extension - one of the Outhouse bugs exploited by the
Klez virus. Outhouse really, really stinks . . .
0.4.1 Bug fix from Jason Erikson for NULL hostaddr in connect callback.
0.4.0 New check_attachments(msg,check) function in mime module allows
filtering based on attachment contents. Distribution now includes
bms.py, an example milter used in production - including use of the
new check_attachments(msg,check) API.
Report hostname in WARNING.TXT.
More parameter list bug fixes.
0.3.10 Parse quotes in parameter lists to handle embedded ';'.
Move test data to subdirectory, write non-junit output to
log file in test subdirectory.
0.3.9 Handle non-multipart messages with executable content in sample.py,
add more extensions to banned list.
0.3.8 Handle malformed Content-Type in mime.py. Test viruses have
been deactivated by deleting most of the viral code.
0.3.7 Put back hint on running sample.py. Add .bat as banned extension.
More sample spam filtering logic.
0.3.6 Ran through pychecker-0.8.5. Most systems will name the sendmail
user library (used by the milter extension module) 'libsm', but AIX
still needs to call it 'libsmutil' because there is a system library
called 'libsm'.
0.3.5 Enhanced logging. Fix bug in sample milter where headers were
included in body when removing a virus.
0.3.4 Tested distribution on RH6.2 and updated sample.py and docs.
Tested with gcc-2.95.2, python-2.1.1, sendmail-8.11.6-2.6.x
The RH6.2 spec file to enable libmilter for sendmail-8.11.6
can be obtained from http://www.bmsi.com/linux/sendmail-rhmilter.spec
The SRPM can be obtained from http://www.redhat.com
0.3.3 Remove reference to sa_len - not supported by linux.
0.3.2 Rename and add more hints to the sample milter.
0.3.1 Pass a more useful hostaddr to the connect callback.
0.3 Interface now uses a milterContext extension object instead of
an index. A PyThreadContext is now created for each milterContext so that
"simultaneously" processing multiple messages at once (as often happens
on a busy server) actually works.
Many milter methods are now object methods of the milterContext
extension object. No compatibility API is provided for this change due
to the limited user base at this stage. The setname method has been removed,
and the name is now passed to register.
A simple class to provide an OO wrapper to the milter API is
provided.
A simple class to parse multipart mime messages into parts and replace
selected parts is provided. The sample filter will eventually use the mimelib
package instead, but mimelib currently requires reading the entire message
into memory.
A sample filter that replaces attachments with naughty extensions
with a warning message is provided.