-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathCHANGELOG
78 lines (62 loc) · 3.49 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
### Release 1.0.7
* ppymilterserver.AsyncPpyMilterServer.handle_accept: Gracefully handle
multiple processes trying to accept an incoming connection (socket.accept()
returning None for all but one process).
### Release 1.0.6
* ppymilterserver.{Async,Threaded}PpyMilterServer.handle_error: Accept 0
arguments (besides self); the last exception can (and should) be determined
independently.
### Release 1.0.5
* Do not sent a response, 'c' (continue) or otherwise, to an 'A' (Abort)
message; the milter protocol expects no response to 'A'.
This fixes a bug where ppymilter would confuse the MTA with extraneous 'c'
(continue) responses after receiving an 'A' (Abort) message, such as when a
message is discarded and further messages are sent in the same SMTP
transaction.
### Release 1.0.4
* ppymilterbase.PpyMilterDispatcher now allows an on_error callback to be
passed, which is called in case of an unhandled exception in the milter.
This callback must return the value False if it wants the exception to be
re-raised; otherwise, such as if None is returned, it is assumed that the
exception has been handled.
ppymilterserver.{Async,Threaded}PpyMilterServer invoke their own (new)
handle_error methods via this facility; override them to define your own
catch-all exception handling for your milter.
### Release 1.0.3
* ppymilterbase.PpyMilterDispatcher, ppymilterserver.{Async,Threaded}PpyMilter-
Server now allow an arbitrary context argument to be passed, which is passed
to milter_class.__init__. This facility may be used to pass options or shared
state.
### Release 1.0.2
* ppymilterserver.AsyncPpyMilterServer: Arbitrary socket support, map support:
Alternatively to a TCP port number, ppymilterserver.AsyncPpyMilterServer
constructor now accepts arbitrary socket info in (family, address) tuple
format, either (socket.AF_INET, (host, port)) for TCP sockets or
(socket.AF_UNIX, socket_path) for UNIX domain sockets. Also constructor now
accepts an optional socket/channel map argument for use by asyncore.
* Strip \0 byte terminator from OnHeader value argument.
* Use 'ppymilter' logger instead of root logger.
* Use setuptools, not distutils. distutils is obsolete.
### Release 1.0.1
* Fork to GitHub: https://github.com/jmehnle/ppymilter
* Make distribution `setup.py develop` compatible.
setuptools does not support non-root (non-empty) package names in the
`package_dir` option when installing the distribution in development mode
(`setup.py develop` or `pip install --editable`). In order to attain
"editable" compatibility, move lib/ contents under lib/ppymilter/ and use
a root (empty) package name in the `package_dir` option.
<https://bitbucket.org/pypa/setuptools/issue/230>
<https://bitbucket.org/tarek/distribute/issue/177>
<https://github.com/pypa/pip/issues/126>
### Release 1.0
* PpyMilter 1.0 message modification handling has changed and is NOT backwards
compatible with any previous PpyMilter release:
ppymilterbase.PpyMilter no longer stores internal state when clients
call message modification functions (e.g. ChangeHeader, AddRecipient, etc)
to store up and send at the proper phase in the milter protocol. Instead
clients must store this state themselves, register an OnEndBody() function
and then "return self.ReturnOnEndBodyActions(modification_list)" to
send all modifications to a message. See the the ppymilter wiki or the
docstring for ppymilterbase.PpyMilter.ReturnOnEndBodyActions() for more
info and an example.
# vim:sw=2 sts=2 tw=79