postfwd2 v1.39
==============
- code:    disabled AutoCacheID. this feature needs further development

postfwd2 1.38
=============
- bugfix:    fix for AutoCacheID and rulesets containing no items
- bugfix:    fixed logging for Net::Server class

postfwd2 1.37
=============
- code:    new options --stdin and --cmd re-enable the ability to check requests at
	   the commmand-line without opening a network socket
	   (this was broken since version 1.36, see manpage for more info)

postfwd2 1.36
=============
- feature: new items postfwd_port and postfwd_interface, allow to use the same
           ruleset for different instances of postfwd
- code:    code changes for --stdout and --nodaemon options allow to run postfwd in a
	   docker container. An example can be found in the ../docker folder of the
	   main distribution or at http://postfwd.org/docker
- code:    new AutoCacheID feature enhances effectivity of the builtin request cache
- bugfix:  --dumpstats and --dumpcache broke, when --cache_* arguments where given
- bugfix:  logging to stdout generated warnings under some conditions
- bugfix:  --noidlestats did not work correctly for cache daemon

postfwd2 1.35
=============
- code:    rate(), size() and rcpt() function index is now case insensitive by default
           (same limit counters for from@example.org and fRom@eXample.org)
           if you need to treat the localpart case-sensitive according to rfc5321
           you may use rate5321(), size5321() and rcpt5321().
- bugfix:  fixed segfault when using new perl versions (prevented to work with upstart)

postfwd2 1.34
=============
- bugfix:  fixed taint mode logging error for verbose --showconfig and --stdoutlog
           options and newer perl versions.
- bugfix:  check_* functions use print/getline instead of send/recv for large
           --dumpcache output (thanks to Alexandre Simon)
- code:    added more information when using --debug=cleanup
- docs:    documentation updates
- feature: new sendmail(sendmail-path::from::to::subject::body) action.
           Please take a look at the manual, especially about
           it's limitations, before using it!
    ------------------------------------------------------------
     # alert
     action=sendmail(/usr/sbin/sendmail::from@example.org::to@example.org::Subject::Text)
    ------------------------------------------------------------

postfwd2 1.33
=============
- feature: new compare operators *
        ====================================================================
         ITEM > VALUE                true if ITEM > VALUE
         ITEM < VALUE                true if ITEM < VALUE
        ====================================================================
- bugfix:  fixed bug when computing scores with more than 1 digit after the "." (n.nn)
- bugfix:  fixed bug when computing negative values with the set action
- bugfix:  ITEMS plugins returning zero values were handled incorrectly
- bugfix:  max command recursion was not reset for each rule
- bugfix:  fixed warning about use of (uninitialized value) when STORABLE is available
           but no cache file was defined

postfwd2 1.32
=============
- feature: new option --save_rates=<file> allows to load and save
	   rate limit counters to disk on program start and termination.
	   this allows rate limit persistence during restarts and reboots
	   (requires perl module 'Storable')
- feature: the --debugitem="sender=example\.org$" option
           allows verbose logging for particular requests
- feature: the debug() action allows verbose logging for certain
           rules:
    ------------------------------------------------------------
     id=R01
        client_address=1.1.1.1
        action=debug(on)
     id=R02
     ...
     id=R42
        action=debug(off)
    ------------------------------------------------------------
- feature: nested commands are possible now, e.g.:
    ------------------------------------------------------------
     # throttle
     action=rate(client_address/10/60/wait(3))
    ------------------------------------------------------------
- feature: new mail(server/helo/from/to/subject/body) action.
	   Please take a look at the manual, especially about
	   it's limitations, before using it!
    ------------------------------------------------------------
     # alert
     action=size(recipient_domain/100000000/86400/mail(mailhost/helo/from/to/subject/text))
    ------------------------------------------------------------
- feature: --chroot option works now (patch by Lukas Wunner).
	   Look for his notes at http://postfwd.org/postfwd2-chroot.html
	   on how to set up the required chroot environment.

postfwd2 1.31
=============
- feature: single cache items can be wiped using --delcache <item>
	   or --delrate <item> options. use --dumpcache to identify
- feature: sasl_username is logged if available
	   (thanks to Bernhard Schmidt)
- code:    rate limit action is executed, if the first request exceeds the limit
- code:    exceeded ratecounters will not be kept permanently anymore. this
	   allows further requests to pass, if they are below the limit
- code:	   rate limits are evaluated at ruleset stage now, which leads to
	   much more comprehensible behaviour. due to this change the request
	   cache is now disabled, if rate limits are used. use the
	   --fast_limit_evaluation option to return to the former mode.

postfwd2 1.30
=============
- feature: new parser enhancement allows to omit the trailing "\" for multi-line rules,
	   if the following lines are prefixed by whitespace characters:
		--------------------------------------
		 id=RCPTCOUNT
		    protocol_state  == END-OF-MESSAGE
		    client_address  != 10.1.1.0/24
		    recipient_count >= 100
		    action=REJECT too many recipients
		--------------------------------------
- feature: new plugin interface (BETA)
- feature: Time::HiRes is used if available
- feature: multiple rate limits for the same items are supported now
- feature: new $$ratecount variable for rate() actions
- feature: new option --keep_rates
- code:    new --debug class 'cleanup'
- docs:    documentation updates

postfwd2 1.22
=============
- general: adapted postfwd1 versioning scheme
- feature: queueid is logged when available
- bugfix:  rate limits did not work correctly (thanks to Yves Blusseau)
- docs:    documentation updates and fixes (thanks to Vincent Lefevre)

postfwd2 1.00
=============
- code:    changed the default umask for the server socket to 0111
	   to support out-of-the-box postfix setup. Use the
	   --server_umask setting to change this
- code:	   --dumpcache command does not require debug mode anymore
- code:    rate hits included to cache stats
- bugfix:  rbl checks disabled for ipv6 addresses, cidr compare
	   will switch to default (regex/string)

postfwd2 0.22
=============
- feature: Rate limits are completely supported by postfwd2 now.
	   Please note that the cache daemon is required for reliable operation.
- bugfix:  --syslog_facility could not be changed
- code:    rate limit code rewritten
- code:    new --umask, --cache_umask and --server_umask  settings allow to set
	   filepermissions for pidfiles and unix domain sockets. New defaults are:
	   * master (pidfile):	0177 (owner rw)
	   * cache (socket):	0177 (owner rw)
	   * server (socket):	0117 (owner and group rw)

postfwd2 0.21
=============
- bugfix:  Fixed bug when comparing sender and recipient addresses, like
           "sender=$$recipient". This affects only postfwd2 version 0.20.

postfwd2 0.20
=============
- bugfix:  Invalid characters in variable substitutions were not correctly catched when
           the '=' operator was used, like "client_name=$$helo_name". If you can not
           upgrade for some reason change your rule to "client_name=~$$helo_name"
- code:    Net::DNS errors will now be handled gracefully
- code:    default for options --dns_max_ns_a_lookups and --dns_max_mx_a_lookups of 100

postfwd2 0.19
=============
- bugfix:  this is a bugfix release for 0.18. anyone affected is encouraged to upgrade.
	   detail: the default behavior for the '=' operator with numeric items
	   (size, recipient_count, ...) changed with version 0.18 to '==' (equals to).
	   now these items are compared '>=' (greater than) again.
	   note: if you are using 0.18 and you are not able upgrade for some reason,
	   please change '=' to '>=' in your ruleset where you mean 'greater than'.

postfwd2 0.18
=============
- feature: items may now be retrieved from files using "item=file:/some/where"
	   more information in the postfwd manual (FILES section)
- feature: helo_address, and sender_(ns|mx)_addrs can now be csv items
- feature: new rcpt() command counts recipients for rate limits (thanks to Sahil Tandon)
- code:    redirect syslog to stdout for --kill, --reload, --showconfig and --dump(cache|stats)
- code:    option --reload (HUP signal) now reloads config, if the file is unchanged
- code:    new --debug classes 'config' and 'request'
- code:	   configuration parser improvements:
	   * rules without defined action will be skipped at configuration stage
	   * undefined ACLs will now be detected and skipped at configuration stage
	   * parser timeout skips loading a rule after 4s, to prevent problems with
	     large files or loops. use --config_timeout to override
- bugfix:  documentation fixed (missing "action=" in ask() examples)
- bugfix:  fixed logging of an uninitialized value in cache cleanups

postfwd2 0.17
=============
- feature: new compare operators *
        ====================================================================
         ITEM == VALUE                true if ITEM equals VALUE
         ITEM => VALUE                true if ITEM >= VALUE
         ITEM =< VALUE                true if ITEM <= VALUE
         ITEM =~ VALUE                true if ITEM ~= /^VALUE$/i
         *ITEM != VALUE               false if ITEM equals VALUE
         *ITEM !> VALUE               false if ITEM >= VALUE
         *ITEM !< VALUE               false if ITEM <= VALUE
         *ITEM !~ VALUE               false if ITEM ~= /^VALUE$/i
         ITEM =  VALUE                default behaviour (see ITEMS section)
        ====================================================================
- feature: added --nodaemon and --stdout options
- code:    non dns items first: if a rule contains dns and non dns items, the
	   lookups will only be done if all non dns items matched
- bugfix:  empty pcre with empty sender_(ns|mx)_names was parsed incorrectly.
	   this bug affects postfwd2 versions 0.15 - 0.16
- bugfix:  negated pcre items with '~=' operator were parsed incorrectly.
	   this bug affects postfwd2 version 0.16

postfwd2 0.16
=============
- feature: enabled dns cache for sender(ns|mx) and helo address
- feature: new options --dns_max_ns_lookups and --dns_max_mx_lookups
- code:    parent_dns_cache is now disabled by default. use
	   --parent_dns_cache if you have a slow nameserver
- bugfix:  workaround: Net::Server died if a unix domain socket
	   filename without a dot ('.') was used (B. Frauendienst)

postfwd2 0.15
=============
- feature: new items sender_ns_names and sender_ns_addrs
- feature: new items sender_mx_names and sender_mx_addrs
- feature: new item helo_address, please see docs for more
- feature: new parent cache statistics. the command line option --dumpstats
	   uses the --daemons setting now (default: cache,server)
- feature: dnsbl txt lookups only for dnsbls with at least one a record.
	   use --dns_async_txt for the old behaviour (see docs for more).
- code:    summary function went to postfwd::master (and will stay there ;)
- code:    small performance improvement (5-10%) for pcre (~= or =~) items
- bugfix:  network 0.0.0.0/0 did not work as expected on all platforms


postfwd2 0.14
=============
- code:    summary function was moved from postfwd::cache to postfwd::policy.
           the reduced policy <-> cache communication increases throughput
	   considerably and improves cpu balancing on multiprocessor systems
- bugfix:  fixed potential division by zero in summary function


postfwd2 0.13
=============
- feature: new options --noidlestats and --norulestats
- feature: more informative --version
- feature: documentation updates
- bugfix:  disabled parent_cache counters when --summary=0


postfwd2 0.12
=============
- feature: the ask() action allows to delegate the policy decision to another
           policy service (like postgrey). a new parameter allows to specify
           answer patterns which should be ignored by postfwd. please look
	   at the 'ACTIONS' section in the manual (postfwd2 -m) for details.
- feature: parent-request cache will now only be updated, if a rule matches.
           if postfwd should cache all requests, you must place a last rule:
	      id=DEFAULT; action=dunno
- bugfix:  reorganised some parent-cache loggings for -vv and *cache debug classes


postfwd2 0.11
=============
- bugfix: all postfwd settings are now detainted
- bugfix: cache-update used an uninitialized value when no rule had hit


postfwd2 0.10
=============
- bugfix: command line arguments --pidfile


postfwd2 0.09
=============
- bugfix: command line arguments --user and --group were not correctly de-tainted


postfwd2 0.08
=============
- bugfix: command line argument --pid_file was ignored
- bugfix: command line argument --manual (-m) did not work


postfwd2 0.07
=============
- first semi-public release of postfwd2
- full ruleset compatibility, no changes required when migrating from postfwd v1
- new architecture:

	* Net::Server::PreFork
	  ruleset processor (server) forks new child for any request

	* Net::Server::Multiplex for parent cache
	  offers a shared request, dns and rate cache for postfwd2 children

	* Net::Server::Daemonize for master process
	  controls server and cache (watchdog function) and allows direct
	  access to statistics, cache-contents, ... from the command-line

- many new commandline options (see postfwd2 -h) for more information
