<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article
  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'
  'http://www.docbook.org/xml/4.4/docbookx.dtd'>
<article><articleinfo><title>Changelog</title><revhistory><revision><revnumber>3</revnumber><date>2021-11-19 09:47:47</date><authorinitials>jcrey</authorinitials></revision><revision><revnumber>2</revnumber><date>2021-11-18 10:33:09</date><authorinitials>jcrey</authorinitials></revision><revision><revnumber>1</revnumber><date>2014-08-27 10:10:16</date><authorinitials>vic</authorinitials></revision></revhistory></articleinfo><section><title>0.74</title><itemizedlist><listitem><para>ldap support </para></listitem><listitem><para>message flow control with new <emphasis>mquota</emphasis> ACL and <emphasis>quotas</emphasis> backend </para></listitem><listitem><para>ACL sintax enhancement, arguments can be space/comma separated </para></listitem><listitem><para><emphasis>day</emphasis> ACL now can be used with full day names </para></listitem><listitem><para>Log enhancement, now you can relate with MTA transactions. </para></listitem></itemizedlist></section><section><title>0.73</title><itemizedlist><listitem><para>DEB and RPM packaging </para></listitem><listitem><para>New <emphasis>memcached</emphasis> backend for the greylisting ACL </para></listitem><listitem><para>New <emphasis>country</emphasis> ACL </para></listitem><listitem><para>New <emphasis>stress</emphasis> ACL </para></listitem></itemizedlist></section><section><title>0.72</title><itemizedlist><listitem><para>New <emphasis>protocol_name</emphasis> ACL </para></listitem><listitem><para>Improved debug log messages </para></listitem><listitem><para>In an <emphasis>access</emphasis> statement the <emphasis>action</emphasis> is now optional. If there is no <emphasis>action</emphasis> specified, the <emphasis>default</emphasis> action is used </para></listitem><listitem><para>New <emphasis>log</emphasis> ACL </para></listitem><listitem><para>Reduced the requirement for the <emphasis>size</emphasis> ACL from smtpd_end_of_data_restrictions to smtpd_sender_restrictions, thanks Manuel Mely for the suggestion </para></listitem><listitem><para>Better handling configuration errors </para></listitem></itemizedlist></section><section><title>0.71</title><itemizedlist><listitem><para>Code cleanup </para></listitem><listitem><para>Improved init scripts for Debian and Red Hat like distributions </para></listitem><listitem><para>Fixed a bug when loading ACL values from a file, thanks Sandra Patricia Casas for the report </para></listitem><listitem><para>greylisting ACL now has default values: time=5,lifetime=1440,backend=memory,root=/var/cache/apolicy </para></listitem><listitem><para>New <emphasis>timeout</emphasis> parameter available in main.conf. </para></listitem><listitem><para>New <emphasis>memcached</emphasis> backend for greylisting ACL (experimental) </para></listitem><listitem><para>Documentation update </para></listitem></itemizedlist></section><section><title>0.70</title><itemizedlist><listitem><para>Now use main.conf for daemon configuration and policy.conf for ACLs, Acesses and Actions </para></listitem><listitem><para>Removed MySQL support for now, it was very limited </para></listitem><listitem><para>apolicy is now a rock solid TCP server using Twisted! </para></listitem><listitem><para>New greylisting support, and it's an ACL too, check docs for more details </para></listitem><listitem><para>New ACLs: helo_name, sasl_user, sasl_sender, sasl_method, reverse_client_name </para></listitem><listitem><para>SPF verification is now an ACL, removed no_spf statement </para></listitem><listitem><para>Simplified and improved log configuration </para></listitem><listitem><para>Complete code refactoring </para></listitem><listitem><para>Removed pydns, IPy and pyspf from the source tree, now they should be installed separatedly </para></listitem><listitem><para>apolicyd *admin has been removed for now </para></listitem></itemizedlist></section><section><title>0.64</title><itemizedlist><listitem><para>Fixed broken import in apolicyd *admin </para></listitem><listitem><para>Fixed typos, and copyright notices </para></listitem><listitem><para>Log to syslog using /dev/log by default, thanks to Cassio </para></listitem></itemizedlist></section><section><title>0.63</title><itemizedlist><listitem><para>Fixed client_name missing parameter, closed bug #9385 </para></listitem></itemizedlist></section><section><title>0.62</title><itemizedlist><listitem><para>Fixed a list comprehension typo that made apolicy not work with Python 2.3 </para></listitem></itemizedlist></section><section><title>0.61</title><itemizedlist><listitem><para>Fixed bug when loading modules </para></listitem><listitem><para>Fixed sql script errors </para></listitem></itemizedlist></section><section><title>0.60</title><itemizedlist><listitem><para>Moved apolicy.py from a Postfix directory to /usr/sbin and renamed to  </para></listitem></itemizedlist><para>apolicyd, to avoid confusion with the package name. </para><itemizedlist><listitem><para>New MySQL engine (beta, but give it a try!). </para></listitem><listitem><para>New administration interface apolicyd *admin, will work on any tty and only </para></listitem></itemizedlist><para>with MySQL engine (beta, but give it a try!). </para><itemizedlist><listitem><para>New logging configuration. Now we use Python logging facility. </para></listitem><listitem><para>Removed the ' *d' option. For debugging, see apolicyd.conf. </para></listitem><listitem><para>Reworked most internals to handle and rise exceptions, instead of methods </para></listitem></itemizedlist><para>returning true or false. </para><itemizedlist><listitem><para>Fixed a bug when the value of a client_address ACL is invalid, the program </para></listitem></itemizedlist><para>exited without showing any error. Thanks Ricardson Williams. </para><itemizedlist><listitem><para>Improved setup.py, now just one command is needed to install. </para></listitem></itemizedlist></section><section><title>0.5</title><itemizedlist><listitem><para>New ACLs: client_address, client_name, rbl, day and time. </para></listitem><listitem><para>Merged into the code the IPy module, bringing a complete IPv4 and IPv6 </para></listitem></itemizedlist><para>support for the acl client_address. </para><itemizedlist><listitem><para>ACLs sender, recipient and client_name accepts regular expressions, </para></listitem></itemizedlist><para>this new feature makes sender_domain and recipient_domain redundant, so they were REMOVED. To get that behavior you do: &quot;acl a sender @domain.com&quot;. Great code reduction with this change. ADJUST YOUR CONFIGURATION FILE! </para><itemizedlist><listitem><para>Removed more useless debug messages. </para></listitem><listitem><para>Now we have a decent code documentation, needs more details, but it is </para></listitem></itemizedlist><para>mutch better than it was. </para><itemizedlist><listitem><para>New reserved acl 'all'. Use this acl as a wildcard that always matches, </para></listitem></itemizedlist><para>useful if you want to full disable spf checks, like: 'no_spf all' </para><itemizedlist><listitem><para>Configuration of apolicy and the ACLs policy have been splited. This </para></listitem></itemizedlist><para>makes apolicy ready and easier to support different backends now on. </para><itemizedlist><listitem><para>Installation process simplified. Now just running <code>python setup.py install</code> </para></listitem></itemizedlist><para>will do most of the dirt work. </para><itemizedlist><listitem><para>The value of the ACLs can now be a text file, like: &quot;acl a sender /path/file.txt&quot;. </para></listitem></itemizedlist><para>Inside the text file there must be one value per line. If anyone want to migrate all access controls from Postfix, this will facilitate. </para><itemizedlist><listitem><para>Huge update on documentation. </para></listitem></itemizedlist></section><section><title>0.4</title><itemizedlist><listitem><para>Updated pyspf to version 2.0 with RFC 4408 support. </para></listitem><listitem><para>Small but very efficient cache for SPF results, great speed improvement. </para></listitem><listitem><para>Heavy profiling made, from 300k calls to 90k calls with 560 requests. </para></listitem></itemizedlist><para>From 40secs to 4secs ACL tests. But outside DNS queries for SPF still a huge bottleneck. </para><itemizedlist><listitem><para>Removed .has_key() usage in pydns. </para></listitem><listitem><para>Removed a lot of useless code, renamed variables to shorter names, </para></listitem></itemizedlist><para>simplification everywhere. </para><itemizedlist><listitem><para>Apolicy will try silently to use psyco if available, insane performance gain. </para></listitem><listitem><para>Now we load with #!/usr/bin/env python, more compatible across Linux distros and BSDs. </para></listitem><listitem><para>Add script collector.py. It only gets the data from Postfix and write to /tmp. This was </para></listitem></itemizedlist><para>done do collect data from contributors to test apolicy better. </para><itemizedlist><listitem><para>Removed redundant debug log messages. </para></listitem><listitem><para>Improved the data validation sent by Postfix, used little code of </para></listitem></itemizedlist><para>tumgreyspf. </para></section><section><title>0.3</title><itemizedlist><listitem><para>SPF support added </para></listitem><listitem><para>Due to the new SPF support, pyspf and pydns are merged into our code </para></listitem><listitem><para>New statement 'no_spf' to skip SPF check based on acls </para></listitem><listitem><para>Fixed spell erros on log messages and comments </para></listitem><listitem><para>Configuration file is loaded by default from /etc/apolicy/apolicy.conf, </para></listitem></itemizedlist><para>you can use  *c parameter to change </para><itemizedlist><listitem><para>Fixed the logging level configuration, some debug messages were missed </para></listitem><listitem><para>Some code cleanup </para></listitem></itemizedlist></section><section><title>0.2</title><itemizedlist><listitem><para>Configuration file now can have comments </para></listitem><listitem><para>Internal code reorganization. Now the main code is separeted of the </para></listitem></itemizedlist><para>configuration loading and acl validation </para><itemizedlist><listitem><para>Lots of changes in comments and variable names for better reading </para></listitem><listitem><para>Ajust code to conform with official Python style (PEP 8) </para></listitem><listitem><para>New action behavior, the default action can be changed </para></listitem><listitem><para>Better exit handling in case of problems </para></listitem></itemizedlist></section><section><title>0.1</title><itemizedlist><listitem><para>Initial release </para></listitem></itemizedlist></section></article>