1
20.93  Dec 17, 2013
3
4  Added Authentication-Results header
5    moves Authentication-Results to Original-Authentication-Results on inbound.
6    no longer puts auth info in Received header
7
8  TcpServer: ignore DNS search path and explicitely request PTR lookups (speedup)
9
10  store envelope TO/FROM in connection notes
11
12  raised max msg size in clamdscan
13
14  SPF enabled by default (if Mail::SPF available)
15
16  auth_vpopmaild: added taint checking to responses
17
18  added run files for most common deployment methods (easier install)
19
20  untaint config data passed to plugins
21
22  Qpsmtpd.pm: split config args on /\s+/, was / /
23    (compatibility with newer versions of perl)
24
25  dmarc: added subdomain policy handling
26
27
280.92  Apr 20, 2013
29
30  new plugins: dmarc, fcrdns
31
32  new feature: DKIM message signing. See 'perldoc plugins/dkim' for details.
33        includes script for generating DKIM selectors, keys, and DNS records.
34        RAM bumped up to 300MB, to avoid memory exhaustion errors.
35
36  Qpsmtpd.pm: untaint config options before passing them to plugins.
37
38  auth_vpopmaild: untaint responses obtained from network. Combined with the taint fix for config options, enables auth_vpopmaild to work when setting the host config and port
39
40  tls: added ability to store SSL keys in config/ssl
41
42  log2sql: added UPDATE query support
43
44  removed FAQ to: https://github.com/qpsmtpd-dev/qpsmtpd-dev/wiki/faq
45
46  helo: cease processing DNS records after first positive match
47
48  karma: sprinkled karma awards throughout other plugins
49     - limit poor karma hosts to 1 concurrent connection
50     - allow +3 conncurrent connections to hosts with good karma
51     - limit recipients to 1 for senders with negative karma
52
53  Sanitize spamd_sock path for perl taint mode - Markus Ullmann
54
55  geo_ip: added too_far option (deduct karma from distant senders)
56
57  bogus_bounce: add Return-Path check, per RFC 3834
58
59  Fix for Net::DNS break -  Markus Ullmann
60
61  SPF: arrange logic to so improve reliability of spf pass reporting (helpful to DMARC plugin)
62
63  is_naughty removed from is_immune feature. Allows more granular handling by plugins.
64
650.91  Nov 20, 2012
66
67  a handful of minor changes to log messages, similar to v0.90
68
69  replace all instances of split '' with split // (required for 5.1?+)
70
71  clamdscan: skip processing of naughty messages
72
73  TcpServer: improved IPv6 support (Michael Holzt)
74
75  SPF: improved support for IPv6, removed is_in_relayclient in favor
76    of checking if relayclient() note is set.
77
78  spamassassin: added 'headers none' option
79
80  qmail_deliverable: added vpopmail extension support, reject null
81    senders to ezmlm mailing lists.
82
83  dnsbl rejections handled by naughty plugin
84
85  changed default loglevel from 9 to 6
86
87  allow messages with no body: (Robin's patch)
88
89  ordered config.sample/plugins roughly in SMTP phase order
90
91  added Plugins::adjust_karma, reduces code requirements in other plugins
92
93  added whitelist plugin
94
95  helo: added is_plain_ip to lenient checks
96
97  dspam improvements
98
99  added log2sql, log/watch.pl, log/summarize.pl, and plugins/registry.txt
100
101  new dkim plugin added (deprecates domainkeys plugin).
102
1030.90  Jun 27, 2012
104
105  Many logging adjustments for plugins, to achieve the goal of emitting
106     a single message per plugin that provides a summary of that plugins
107     action(s) and/or outcome(s).
108
109  qmail_deliverable plugin added (depends on Qmail::Deliverable).
110
111  karma plugin added.
112
113  naughty plugin added.
114
115  count_unrecognized_commands: corrected variable assignment error
116
117  connection_time: added tcpserver deployment compatibility
118
119  loop: max_hops was sometimes unset
120
121  dnsbl,rhsbl: process DNS queries syncronously to improve overall efficiency
122
123  insert headers at top of message (consistent SMTP behavior) in uribl
124     domainkeys, spamassassin plugins.
125
126  spamassassin: consolidated two data_post methods (more linear, simpler)
127
128  rewrote check_basicheaders  -> headers
129
130  renamed check_loop          -> loop
131  renamed check_badrcptto     -> badrcptto
132  renamed check_badmailfromto -> badmailfromto
133  renamed check_badmailfrom   -> badmailfrom
134
135  check_badmailfrom_patterns, merged functionality into check_badmailfrom
136
137  check_badrcptto_patterns, merged functionality into check_badrcptto
138
139  check_basicheaders. New arguments available: past, future, reject, reject_type
140
141  sender_permitted_from. see UPGRADING (Matt Simerson)
142
143  dspam plugin added (Matt Simerson)
144
145  p0f version 3 supported and new default. see UPGRADING (Matt Simerson)
146
147  resolvable_fromhost ignores DNS search path (i.e. it expects fully resolved domains)  (Robert Spier, Charlie Brady)
148
149  new plugin auth_vpopmaild (Robin Bowes)
150
151  new plugin auth_checkpassword (Matt Simerson)
152
153  auth_vpopmail_sql: more flexible db config (Matt Simerson)
154
155  new plugin check_bogus_bounce (Steve Kemp)
156
157  clamav: added ClamAV version to the X-Virus-Checked header,
158  as well as noting "no virus found".  (Matt Simerson)
159
160  assorted documentation cleanups (Steve Kemp, Robert Spier)
161
162  Revert "Spool body when $transaction->body_fh() is called"
163
1640.84 April 7, 2010
165
166  uribl: fix scan-headers option (Jost Krieger, Robert Spier)
167
168  exim: Use BSMTP response codes, various cleanups (Devin Carraway)
169
170  config: cache returned values from config plugins (Peter J. Holzer)
171
172  AUTH PLAIN bug with Alpine (Rick Richard)
173
174  resolvable_fromhost: Moved DENYSOFT for temp_resolver_failed
175  to the RCPT TO hook. (Larry Nedry)
176
177  Note Net::IP dependency (Larry Nedry)
178
179  Various minor spelling cleanups and such (Steve Kemp, Devin Carraway)
180
181  rpm: create .rpm files from the packaging/rpm directory (Peter J. Holzer,
182  Robin Bowes, Filippo Carletti, Richard Siddell)
183
184  spamassasin: Custom spam tag subject munging (Jonathan Martens, Robert Spier)
185
186  clamav: Fix typo in name of default configuration file (Filippo Carletti)
187
188
1890.83 September 15, 2009
190
191  plugins/queue/maildir: Allow hyphens in the maildir path (Hinrik Örn Sigurðsson)
192
193  Modify plugins/virus/clamav no-summary option for ClamAV 0.95 (Jonathan Martens)
194
195  Temporary deny if clamd is not running (Shad L. Lords)
196
197  Fix spamassassin plugin log noise if spam score is 0.0
198
199  Fix spool_dir configuration documentation and README update (Tomas Lee)
200
201  Disconnect host in rhsbl (Charlie Brady)
202
203  POD cleanups (Steve Kemp)
204
205  check_badmailfrom: Fix parsing of reason messages etc (Robert Spier, Tomas Lee)
206
207  check_spamhelo disconnects after denying a 'helo' (Filippo Carletti)
208
209  Log even when aren't in a transaction (Jared Johnson)
210
211  prefork: More robust child spawning (Peter Samuelson)
212
213  Add dup_body_fh method to return a dup'd body FH (Jared Johnson)
214
215
2160.82 - June 2, 2009
217
218  prefork: Fix problem with processes sometimes being "left behind" (Charlie Brady)
219
220  prefork: Fix startup when no interface addresses are specified (Devin Carraway)
221
222  prefork: add multi-address support
223
224  The clamdscan virus-scanning plugin now requires the ClamAV::Client
225  perl module instead of the older, deprecated Clamd module (Devin Carraway)
226
227  prefork: support --listen-address for consistency with forkserver
228
229  prefork: Sanitize the shell environment before loading modules
230
231
2320.81 - April 2, 2009
233
234  Close spamd socket after reading the result back (Jared Johnson)
235
236  p0f plugin updates (Tom Callahan)
237
238  Change transaction->add_recipient to skip adding "null" rcpt if passed
239
240  Add logging/apache plugin for logging to the apache error log
241
242  Add connection_time plugin
243
244  Add git information to version number when running from a git clone
245
246  Add rcpt_regexp plugin (Hanno Hecker)
247
248  Add notes method to Qpsmtpd::Address objects (Jared Johnson)
249
250  Add remove_recipient method to the transaction object (Jared Johnson)
251
2520.80 - February 27, 2009
253
254  moved development to git repository!
255
256  reorganized plugin author documentation
257
258  added End of headers hook: data_headers_end
259
260  added "random error plugin"
261
262  improve logging of plugins generating fatal errors (Steve Kemp)
263
264  async: added $connection->local_ip, $connection->local_port
265
266  async: Fix bug where the body_file/body_filename wouldn't have headers
267
268  lower log level of rcpt/from addresses
269
270  prefork: improve shutdown of parent (and children) on very busy
271  systems (Diego d'Ambra)
272
273  prefork: exit codes cleanup (based on patch by Diego d'Ambra)
274
275  prefork: detect and reset locked shared memory (based on patch by
276  Diego d'Ambra)
277
278  prefork: untaint the value of the --interface option (reported by
279  Diego d'Ambra)
280
281  prefork: the children pool size was sometimes not adjusted immediately
282  after the exit of children (reported by Diego d'Ambra)
283
284  async, prefork: detach and daemonize only after reading the configuration
285  and loading the plugins, to give the init scripts a chance to detect
286  failed startups due to broken configuration or plugins (Diego d'Ambra)
287
288  plugins/tls: close the file descriptor for the SSL socket
289
290  plugins/queue/maildir: multi user / multi domain support added
291  set the Return-Path header when queuing into maildir mailboxes
292
293  plugins/resolvable_fromhost: check all MX hosts, not just the first
294
295  remove outdated virus/check_for_hi_virus plugin
296
297  prefork, forkserver: restart on SIGHUP (reload all modules, with register()
298  or init() phase).
299
300  prefork: add --detach option to daemonize like forkserver
301  use user/group switching from forkserver to support secondary groups
302  (needed with plugins/queue/postfix-queue)
303  --pid-file now works
304
305  apache: add post-connection hook, connection->reset
306
307  Create async version of dns_whitelist_soft, rhsbl and uribl plugins.
308
309  async: added pre- and post-connection hooks
310
311  improve handling of inetd/xinetd connections (Hanno Hecker)
312
313  Qpsmtpd::Connection->notes are now reset on end of connection (currently
314  not in Apache). The workaround plugins/tls for -prefork is no longer
315  needed now.
316
317  keep the square brackets around the IP as "remote_host" if the reverse lookup failed (Hanno Hecker)
318
319  async: Dereference the DATA deny message before sending it to the client
320
321  Change async/resolvable_fromhost to match the logic of
322  the non-async version and other MTAs
323
324  async: Handle End-of-data marker split across packets
325
326  Allow plugins to use the post-fork hook
327
328  Add qpsmtpd-prefork to the install targets (Robin Bowes)
329
330  Address definitions are now package vars and can be overriden for
331  sites that wish to change the definition of an email address.  (Jared Johnson)
332  http://groups.google.com/group/perl.qpsmtpd/browse_thread/thread/35e3a187d8e75cbe
333
334  New config option "spool_perms" to set permissions of spool_dir
335  (Jared Johnson)
336
337  leading/trailing whitespace in config files is ignored (Henry Baragar)
338
3390.43 - February 5, 2008 - Never offically released; oops.
340
341  (This release was mostly done by Matt Sergeant and Hanno Hecker)
342
343  Allow qpsmtpd-async to detatch (Chris Lewis).
344
345  plugins/tls: work-around for failed connections in -prefork after
346  STARTTLS connection (Stefan Priebe, Hanno Hecker)
347
348  Make the cleanup socket location parameter in the postfix plugin work
349  (ulr...@topfen.net)
350
351  Implement config caching properly (for async).
352
353  Hook/plugin caching
354
355  Remove the connection / transaction id feature (never released)
356
357  Option to clamdscan to scan all messages, even if there are no attachments
358
359  add new clamd_user parameter that sets the user we pass to clamd
360
361  async: Support for HUPing the server to clear the cache. Wake-one child support.
362
363  async: Don't listen for readiness in the parent any more - breaks
364  under high load.
365
366  Made user() and host() setters as well as getters in
367  Qpsmtpd::Address.  Suggested by mpelzer@gmail.com.
368
369  Pluggable "help", based on patch by Jose Luis Martinez.
370
371  Updated plugin documentation.
372
373
3740.42 - October 1, 2007 - Never released
375
376  Pluggable hook "noop"
377
378  Pluggable hook "help" (based on patch by Jose Luis Martinez)
379
380  async: better config caching (of flat files, not results from hook_config
381  or .cdb files), send SIGHUP to clear cache
382
383  New docs/plugins.pod documentation!
384
385  Add X-Spam-Level header in spamassassin plugin (idea from Werner Fleck)
386
387  prefork: support two or more parallel running instances (on different
388  ports; the first 4 digits of the port number must be different for each
389  instance - see IPC::Sharable).
390
391  prefork: Fix sporadic bug showing itself after millions of
392  connections (S. Priebe)
393
394  Remove the auth/authnull sample plugin (there are plenty proper examples now
395  so we don't have to include this insecure plugin)
396
397  POD syntax cleanup (Steve Kemp)
398
399  Fix Qpsmtpd::Plugins::isa_plugin() with multiple plugin dirs (Gavin Carr)
400
401  Fix false positives in check_for_hi_virus plugin (Jerry D. Hedden)
402
403  Make connection->local_ip available from the Apache transport (Peter Eisch)
404
405  Support checking for early talkers at DATA
406
407  Make the documented DENY{,SOFT}_DISCONNECT work in the data-post hook
408
409  Allow buffered writes in Postfix plugin (from Joe Schaefer)
410
411  Cleanup spamassassin plugin code a little
412
413  Fix bug which breaks queue plugins that implement continuations
414
415  Fix false positives in check_for_hi_virus plugin (Jerry D. Hedden)
416
417  Unrecognized command fix (issue #16)
418
419  Updated documentation (Apache 2.2, more)
420
421  Add uribl plugin (Devin Carraway)
422
4230.40 - June 11, 2007
424
425  Add async server - uses epoll/kqueue/poll where available. (Matt Sergeant)
426
427  Add preforking qpsmtp server (Lars Roland)
428
429  Support SMTPS (John Peacock)
430
431  Support "module" plugins ("My::Plugin" in the config/plugins file)
432
433  Added IPv6 support. (Mike Williams)
434
435  Added tests for the rcpt_ok plugin (Guy Hulbert, issue #4)
436
437  Fix logging when dropping a mail due to size (m. allan noah /
438  kitno455, issue #13)
439
440  Don't drop privileges in forkserver if we don't have to.
441
442  greylisting: fix db_dir configuration option so it actually works
443  (kitno455, issue #6)
444
445  Correct header parsing of "space only" lines (Joerg Meyer, issue #11)
446
447  Update the sample configuration to use zen.spamhaus.org
448
449  Make the badmailfrom plugin support (optional) rejection messages after the
450  rejection pattern (Robin Hugh Johnson)
451
452  The ill-named $transaction->body_size() is depreceated now, use
453  $transaction->data_size() instead. Check your logs for LOGWARN messages
454  about "body_size" and fix your plugins. (Hanno Hecker)
455
456  Support pluggable Received headers (Matt Sergeant)
457
458  RFC3848 support for ESMTP. (Nick Leverton)
459
460  Updated the list of DNSBLs in the default config
461
462  Instead of failing with cryptic message, ignore lines in config/plugins
463  for uninstalled plugins. (John Peacock)
464
465  Clean up some of the logging (hjp)
466
467  Patch to prefork code to make it run (Leonardo Helman). Add --pretty
468  option to qpsmtpd-prefork to change $0 for child processes (John Peacock).
469
470  Add support for multiple plugin directories, whose paths are given by the
471  'plugin_dirs' configuration.  (Devin Carraway, Nick Leverton)
472
473  Greylisting DBs may now be stored in a configured location, and are
474  looked for by default in /var/lib/qpsmtpd/greylisting in addition to the
475  previous locations relative to the qpsmtpd binary.  (Devin Carraway)
476
477  New Qpsmtpd::Postfix::Constants to encapsulate all of the current return
478  codes from Postfix, plus script to generate it.  (Hanno Hecker)
479
480  Add ability to specific socket for syslog (Peter Eisch)
481
482  Do the right thing for unimplemented AUTH mechanisms (Brian Szymanski)
483
484  relay_only plugin for smart relay host. (John Peacock)
485
486  Enhance the spamassassin plugin to support connecting to a remote
487  spamd process (Kjetil Kjernsmo).
488
489  Add domainkeys plugin (John Peacock)
490
491  Add SSL encryption method to header to mirror other qmail/SSL patches.
492  Add tls_before_auth to suppress AUTH unless TLS has already been
493  established (Robin Johnson).
494
495  Fix "help" command when there's no "smtpgreeting" configured (the default)
496  (Thanks to Thomas Ogrisegg)
497
498  Move the Qpsmtpd::Auth POD to a top-level README to be more obvious.
499
500  Add Qpsmtpd::Command to gather all parsing logic in one place (Hanno
501  Hecker)
502
503  Support multiline responses from plugins (Charlie Brady)
504
505  Added queue_pre and queue_post hooks (John Peacock)
506
507  Implement multiple host/port listening for qpsmtpd-forkserver (Devin
508  Carraway)
509
510  Fix a spurious newline at the start of messages queued via exim (Devin
511  Carraway)
512
513  Make the clamdscan plugin temporarily deny mail if if can't talk to clamd
514  (Filippo Carletti)
515
516  Improve Qpsmtpd::Transaction documentation (Fred Moyer)
517
518
5190.32 - 2006/02/26
520
521  Add logging/file plugin for simple logging to a file (Devin Carraway and
522  Peter J. Holzer).
523
524  Add logging/syslog plugin for logging via the syslog facility (Devin
525  Carrway)
526
527  Add Qpsmtpd::DSN to return extended SMTP status codes from RFC-1893 and
528  patch existing plugins to use it when appropriate (Hanno Hecker).
529
530  Add plugins/tls_cert to generate appropriately shaped self-signed certs for
531  TLS support.  Add explicit use of CA used to sign cert.  Abstract clone()ing
532  of connection information when switching to TLS.  Fix the AUTH code to work
533  correctly with TLS.
534
535  Add hosts_allow plugin to support pre- and post-connection hooks as well
536  as move --max-from-ip tests out of core (Hanno Hecker).
537
538  Improve postfix-queue plugin to support the known processing flags (Hanno
539  Hecker).
540
541  Drop root privileges before loading plugins, rather than after.
542
543  A few fixes to the clamdscan plugin (Dave Rolsky)
544
545  Various minor fixes and improvements
546
547
5480.31.1 - 2005/11/18
549
550  Add missing files to the distribution, oops... (Thanks Budi Ang!)
551  (exim plugin, tls plugin, various sample configuration files)
552
553
5540.31 - 2005/11/16
555
556  STARTTLS support (see plugins/tls)
557
558  Added queue/exim-bsmtp plugin to spool accepted mail into an Exim
559  backend via BSMTP. (Devin Carraway)
560
561  New plugin inheritance system, see the bottom of README.plugins for
562  more information
563
564  qpsmtpd-forkserver: --listen-address may now be given more than once, to
565  request listening on multiple local addresses (Devin Carraway)
566  (also: no more signal problems making qpsmtpd-forkserver crash/loop
567  when forking).
568
569  qpsmtpd-forkserver: add an option for writing a PID file (pjh)
570
571  qpsmtpd-forkserver: set auxiliary groups (this is needed for the
572  postfix backend, which expects to have write permission to a fifo
573  which usually belongs to group postdrop). (pjh)
574
575  qpsmtpd-forkserver: if -d or --detach is given on the commandline,
576  forkserver will detach from the controlling terminal and daemonize
577  itself (Devin Carraway)
578
579  replace some fun smtp comments with boring ones.
580
581  example patterns for badrcptto plugin - Gordon Rowell
582
583  Extend resolvable_fromhost to include a configurable list of
584  "impossible" addresses to combat spammer forging.  (Hanno Hecker)
585
586  Use qmail/control/smtpdgreeting if it exists, otherwise
587  show the original qpsmtpd greeting (with version information).
588
589  Apply slight variation on patch from Peter Holzer to allow specification of
590  an explicit $QPSMTPD_CONFIG variable to specify where the config lives,
591  overriding $QMAIL/control and /var/qmail/control if set.  The usual
592  "last location with the file wins" rule still applies.
593
594  Refactor Qpsmtpd::Address
595
596  when disconncting with a temporary failure, return 421 rather than
597  450 or 451. (Peter J. Holzer)
598
599  The unrecognized_command hook now uses DENY_DISCONNECT return
600  for disconnecting the user.
601
602  If the environment variable $QPSMTPD_CONFIG is set, qpsmtpd will look
603  for its config files in the directory given therein, in addition to (and
604  in preference to) other locations. (Peter J. Holzer)
605
606  Updated documentation
607
608  Various minor cleanups
609
610
6110.30 - 2005/07/05
612
613  Add plugable logging support include sample plugin which replicates
614  the existing core code.  Add OK hook.
615
616  Add new logging plugin, logging/adaptive, which logs at different
617  levels depending on whether the message was accepted/rejected.
618
619  (See README.logging for information about the new logging system by
620  John Peacock)
621
622  plugins/auth/auth_ldap_bind - New plugin to authenticate against an
623  LDAP database. Thanks to Elliot Foster <elliotf@gratuitous.net>
624
625  new plugin: plugins/auth/auth_flat_file - flat file auth plugin
626
627  new plugin: plugins/auth/auth_cvm_unix_local - Only DENY if the
628  credentials were accepted but incorrect (bad password?). Interfaces
629  with Bruce Guenther's Credential Validation Module (CVM)
630
631  Revamp Qpsmtpd::Constants so it is possible to retrieve the text
632  representation from the numeric (for logging purposes).
633
634  new plugin: plugins/check_badrcptto_patterns - Match bad RCPTO
635  address with regex (Gordon Rowell)
636
637  new plugin: plugins/check_norelay - Carve out holes from larger
638  relay blocks (Also Gordon Rowell)
639
640  new plugin: plugins/virus/sophie - Uses SOPHOS Antivirus via Sophie
641  resident daemon.
642
643  Store mail in memory up to a certain threshold (default 10k).
644
645  Remove needless restriction on temp_file() to allow the spool
646  directory path to include dots (as in ../)
647
648  Fix off-by-one line numbers in warnings from plugins (thanks to
649  Brian Grossman).
650
651  Don't check the HELO host for rfc-ignorant compliance
652
653  body_write patches from Brian Grossman
654
655  Fix for corruption problem under Apache
656
657  Update Apache::Qpsmtpd to work with the latest Apache/mod_perl 2.0
658  API.  Fix various bucket issues.
659
660  Replace $ENV{RELAYCLIENT} with $connection->relay_client in last plugin.
661
662  Fix typo in qpsmtpd-forkserver commandline help
663
664
6650.29 - 2005/03/03
666
667  Store entire incoming message in spool file (so that scanners can read
668  the complete message) and ignore old headers before adding lines and
669  queuing for delivery.
670
671  New anti-virus scanners: hbedv (Hanno Hecker), bitdefender, and clamdscan
672  (John Peacock).  Update clamav plugin to directly scan the spool file.
673
674  New temp_file() and temp_dir() methods; when used by plugins, they create
675  a filename or directory which will last only as long as the current
676  transaction.  Also created a spool_dir() method which checks/creates the
677  spool_dir when the application starts up.  All three methods are also
678  available in the base class where the temp_* objects are not automatically
679  limited to the transaction's lifetime. (John Peacock)
680
681  Added Gavin Carr's greylisting plugin
682
683  Renamed config/ to config.sample/
684
685  Qpsmtpd::Auth - document $mechanism option, improve fallback to generic
686  hooks, document that auth-login works now, stash auth user and method for
687  later use by Qpsmtpd::SMTP to generate authentication header.
688  (Michael Toren)
689
690  Qpsmtpd::SMTP - "MAIL FROM: <#@[]>" now works like qmail (null sender),
691  add LOGIN to default auth mechanisms, display auth user and method in
692  Received: line instead of X-Qpsmtpd-Auth header.
693  (Michael Toren)
694
695  check_badmailfromto - NEW PLUGIN - like check_badmailfrom except matches
696  both FROM: and TO:, and effectively makes it seem like the recipient
697  no longer exists for that sender (great for harassment cases).
698  (John Peacock)
699
700  earlytalker and resolvable_fromhost - short circuit test if
701  whitelistclient is set. (Michael Toren)
702
703  check_badmailfrom - Do not say why a given message is denied.
704  (Michael Toren)
705
706  dns_whitelist_soft - NEW PLUGIN - dns-based whitelist override for
707  other qpsmtpd plugins.  Add suuport for whitelisthost to dnsbl.
708  (John Peacock)
709
710  auth/auth_vpopmail_sql - Support CRAM-MD5 (requires clear_passwd)
711  (John Peacock)
712
713  plugins/queue/qmail-queue - Added a timestamp and the qmail-queue qp
714  identifier to the "Queued!" message, for compatibility with qmail-smtpd
715  (Michael Toren)
716
717  Support qmail-smtpd's timeoutsmtpd config file
718
719  Many improvements to the forking server (qpsmtpd-forkserver)
720
721  Plugin testing framework (Matt)
722
723  Added Apache::Qpsmtpd (Apache/mod_perl 2.0 connection handler)
724
725  Allow for multiple instances of a single plugin by using plugin:0
726  notation (Robert)
727
728  Fix CDB support so the server can work without it
729
730  VRFY plugin support (Robert Spier)
731
732  Added Makefile.PL etc to make it easier to build a package (Matt).
733
734  Added Apache::Qpsmtpd to the distro.
735
736  Make the distro follow the CPAN module style (Makefile.PL, MANIFEST, etc)
737
738  Make the rhsbl plugin do DNS lookups in the background. (Mark Powell)
739
740  Fix warning in count_unrecognized_commands plugin (thanks to spaze
741  and Roger Walker)
742
743  Improve error messages from the Postfix module (Erik I. Bolsø,
744  <knan at mo.himolde.no>)
745
746  make the maildir plugin record who the message was to (with a bit of improvements
747  this could make a decent local delivery plugin)
748
749  Pass extra "stuff" to HELO/EHLO callbacks (to make it easier to
750  support SMTP extensions)
751
752  Renamed the *HARD return codes to DENY_DISCONNECT and
753  DENYSOFT_DISCONNECT (DENYSOFT_DISCONNECT is new)
754
755  Mail::Address does RFC822 addresses, we need SMTP addresses.
756  Replace Mail::Address with Peter J. Holzer's Qpsmtpd::Address module.
757
758  Don't keep adding ip addresses to the process status line ($0) when
759  running under PPerl.
760
761  Include the date and time the session started in the process status line.
762
763  Add "plugin/virus/uvscan" - McAfee commandline virus scanner
764
765  Inbound connections logged as soon as the remote host address is known
766  when running under tcpserver.
767
768  Add Qpsmtpd::Auth (authentication handlers! See plugins/auth/) (John Peacock)
769
770  Add a plugin hook for the DATA command
771
772  earlytalker -
773    + optionally react to an earlytalker by denying all MAIL-FROM commands
774      rather than issuing a 4xx/5xx greeting and disconnecting. (Mark
775      Powell)
776    + initial "awkward silence" period now configurable (Mark Powell)
777    + DENY/DENYSOFT now configurable
778
779  Move relay flag to connection object (John Peacock):
780    + add relay_client() method to Connection.pm
781    + Remove $transaction->relaying() completely (due to popular demand)
782
783  Split check_relay plugin into two plugins (John Peacock):
784    + check_relay now fires on connect and sets relay_client() flag
785    + rcpt_ok runs last of rcpt plugins and performs final OK/DENY
786    + change default config/plugins to reflect new order
787
7880.28 - 2004/06/05
789
790  Don't keep adding ip addresses to the process status line ($0) when running under PPerl.
791
792  Include the date and time the session started in the process status line.
793
794  Added a "queue/maildir" plugin for writing incoming mails to a maildir.
795
796  Create temp files with permissions 0600 (thanks to Robert James Kaes again)
797
798  Fix warning in check_badrcptto plugin (Thanks to Robert James Kaes)
799
800  Proper "Log levels" with a configuration option
801
802  $Include feature in config/plugins
803
804
8050.27.1 - 2004/03/11
806
807  SpamAssassin plugin Outlook compatibility fix (Thanks to Gergely Risko)
808
809
8100.27 - 2004/03/10
811
812  Support for unix sockets in the spamassassin plugin (requires SA
813  2.60 or higher).  Thanks to John Peacock!
814
815  Modified the dnsbl plugin to better support both A and TXT records and
816  support all of the RBLSMTPD functionality. (Thanks to Mark Powell)
817
818  reject bare carriage-returns in addition to the  bare line-feeds
819  (based on a patch from Robert James Kaes, thanks!)
820
821  Bugfix to the count_unrecognized_commands plugin so it works
822  under PPerl (it wasn't resetting the count properly).
823
824  reset_transaction is called after disconnect plugins are called so
825  the Transaction objects DESTROY method is called. (Thanks to Robert
826  James Kaes <rjkaes@flarenet.com>)
827
828  Made the SpamAssassin plugin work with SA 2.6+ (thanks to numerous
829  contributors, thanks everyone!). Note that for now it's not
830  including the Spam: headers with the score explained. For that use
831  the spamassassin_spamc plugin from http://projects.bluefeet.net/
832  (for now).
833
834  Added Postfix queue plugin thanks to Peter J Holzer!
835
836  Took out the last "exit" call from the SMTP object; the "transport"
837  module ("TcpServer", "SelectServer") needs to do the right thing in
838  it's disconnect method.
839
840  Update the SPF plugin (Philip Gladstone, philip@gladstonefamily.net):
841   * Integrated with Mail::SPF::Query 1.991
842   * Don't do SPF processing when you are acting as a relay system
843   * Remove the MX changes as they are now inside Mail::SPF::Query
844
845  Take out Data::Dumper to save a few bytes of memory
846
847  Say Received: ... via ESMTP instead of via SMTP when the client
848  speaks ESMTP.  (Hoping this can be a useful SpamAssassin rule).
849
850  Take out the X-SMTPD header.
851
852  Add pod documentation and sanity checking of the config to
853  check_badmailfrom
854
855  Use $ENV{QMAIL} to override /var/qmail for where to find the
856  control/ directory.
857
858  Enable "earlytalker" in the default plugins config
859
860  Added a milter plugin to allow use of sendmail milters
861
862  Don't store the Qpsmtpd object in the Plugin object any more (this
863  caused a circular reference)
864
865  Added a new qpsmtpd-server - a select() based server for qpsmtpd
866
867  Allow a config/relayclients and config/morerelayclients files to
868  define who can relay (useful with the select() server)
869
870  Fixed qpsmtpd unfolding all header lines
871
872  Speed up persistent qpsmtpd's by checking for plugin functions after
873  munging the name (the main breakage was with queue/qmail-queue)
874
875  Use dup2() instead of perl open("<&") style. POSIX seems to work better.
876
877  Added SPF, sender permitted from, plugin
878
879  More minor changes and probably a few big ones that we missed adding here :-)
880
881
8820.26 - 2003/06/11
883
884  Add queue/smtp-forward plugin (Matt Sergeant)
885
886  Add documentation to Qpsmtpd::Transaction (Matt Sergeant)
887
888  Fix bug in dnsbl that made it sometimes ignore "hits" (thanks to
889  James H. Thompson <jht@lava.net>)
890
891  Fix bug hiding the error message when an existing configuration file
892  isn't readable.
893
894  If a plugin running the ehlo hook add something to the ARRAY
895  reference $self->transaction->notes('capabilities') then it will be
896  added to the EHLO response.
897
898  Add command_counter method to the SMTP object.  Plugins can use this
899  to catch (or not) consecutive commands.  In particular useful with
900  the unrecognized_command hook.
901
902  Filter out all uncommon characters from the remote_host
903  setting. (thanks to Frank Denis / Jedi/Sector One for the hint).
904
905  Added a check for the spool_dir having mode 0700.
906
907  Don't break under taint mode on OpenBSD. (thanks to Frank Denis /
908  Jedi/Sector One)
909
910  Have the qmail-queue plugin add the message-id to the "Queued!"
911  message we send back to the client (to help those odd sendmail using
912  people debug their logs)
913
914  Set the process name to "qpsmtpd [1.2.3.4 : host.name.tld]"
915
916  Fixed timeout bug when the client sent DATA and then stopped before
917  sending the next line. (Gergely Risko <risko@risko.hu>)
918
919  unrecognized_command hook and a count_unrecognized_commands
920  plugin. (Rasjid Wilcox)
921
922  earlytalker plugin.  Deny the connection if the client talks
923  before we show our SMTP banner.  (From Devin Carraway)
924
925  Patch Qpsmtpd::SMTP to allow connect plugins to give DENY and
926  DENYSOFT return codes.  Based on patch from Devin Carraway.
927
928  Support morercpthosts.cdb
929
930  config now takes an extra "type" parameter.  If it's "map" then a
931  reference to a tied hash will be returned.
932
933
9340.25 - 2003/03/18
935
936  Use the proper RFC2822 date format in the Received headers. (Somehow
937  I had convinced myself that ISO8601 dates were okay). Thanks to
938  Kee Hinckley <nazgul@somewhere.com>.
939
940  Print the date in the local timezone instead of in -0000. (Not
941  entirely convinced this is a good idea)
942
943  Lots of changes from Rasjid Wilcox <rasjidw@openminddev.net>:
944
945  Fix error handling in queue/qmail-queue. (Rasjid)
946
947  Add option to queue/qmail-queue to specify an alternate qmail-queue
948  location. (Rasjid)
949
950  Add support for the QMAILQUEUE environment variable. (Rasjid)
951
952  PPerl compatibility (yay!)  (Rasjid)
953
954  Allow mail to <abuse> and <postmaster> to go through. (Rasjid)
955
956  Add "deny" hook that gets called when another hook returns DENY or
957  DENYSOFT. (Rasjid)
958
959  Add list of required modules to the README. Thanks to Skaag Argonius
960  <skaag@skaag.net>.
961
962  Fix dnsbl plugin to give us all the results. (Patch from Matt
963  Sergeant <matt@sergeant.org>)
964
965  Disable identd lookups by passing -R to tcpserver. (Thanks to Matt)
966
967  add plugin hooks for HELO and EHLO (Devin Carraway
968  <qpsmtpd-list@devin.com>)
969
970  check_spamhelo plugin to deny mail from claimed senders from the
971  list specified in F<badhelo>.  (For example aol.com or yahoo.com)
972  (Devin Carraway)
973
974
9750.20 - 2002/12/09
976
977  Fix the "too many dots in the beginning of the line" bug.
978
979  Add munge_subject_threshold and reject_threshold options to the
980  spamassassin plugin.  Add documentation to the spamassassin plugin.
981
982  Add -p to mkdir in log/run (Rasjid Wilcox <rasjidw@openminddev.net>)
983
984  clamav plugin, thanks to Matt Sergeant, matt@sergeant.org.
985  Enabling this might require you to increase your "softlimit" in
986  the run file.  http://www.clamav.org/
987
988  Make the spamassassin plugin not stop the next content plugins from
989  running.
990
991  Store hooks runtime config globally so they will work within the
992  transaction objects too.
993
994  content_log plugin - log the content of all mails for
995  debugging. Robert Spier <robert@perl.org>.
996
997  http_config plugin - get configuration via http
998
999  plugins can take arguments via their line in the "plugins" file
1000
1001  make the quit_fortune plugin check that the fortune program exists
1002
1003
10040.12 - 2002/10/17
1005
1006  Better error messages when a plugin fails
1007
1008  Remove some debug messages in the log
1009
1010  Fix NOOP command with perl 5.6.
1011
1012  Better installation instructions and error message when no plugin
1013  allowed or denied relaying (thanks to Lars Rander
1014  <lrNOSPAM@rander.dk>).
1015
1016  Use /usr/bin/perl instead of the non-standard /home/perl/bin/perl
1017
1018
10190.11 - 2002/10/09
1020
1021  Make a "queue" plugin hook and move the qmail-queue functionality
1022  to plugins/queue/qmail-queue.  This allows you to make qpsmtpd
1023  delivery mail via smtp or lmtp or into a database or whatever you want.
1024
1025  Reorganize most of Qpsmtpd.pm into Qpsmtpd/SMTP.pm.
1026
1027  Add spool_dir option (thanks to Ross Mueller <ross@visual.com>)
1028
1029  Add plugin name to the "hooks" data structure, so we can log plugin
1030  module had an error when we run a hook.
1031
1032  Make klez filter run for mails bigger than 220KB; they are sometimes
1033  bigger than that.
1034
1035  Avoid "use of uninitialized variable" warning when the "MAIL" or the
1036  "RCPT" command is executed without a parameter.
1037
1038  Compatibility with perl 5.5.3.
1039
1040  Fix "Could not print" error message in the TcpServer object. (Thanks
1041  to Ross Mueller <ross@visual.com>)
1042
1043  dnsbl plugin queues lookups in the background upon connect but
1044  doesn't block for the results until they are needed, greatly
1045  speeding up connection times.  Also fix a typo in the dnsbl plugin
1046  so it'll actually work(!).
1047
1048  check_badmailfrom and check_badrcptto plugins (Jim Winstead
1049  <jimw@trainedmonkey.com>)
1050
1051  Better RFC conformance. (Reset transactions after the DATA command and
1052  when the MAIL command is being done)
1053
1054
10550.10 - 2002/09/08
1056
1057  New object oriented internals
1058
1059  Very flexible plugin
1060
1061  All functionality not core to SMTP moved to plugins
1062
1063  Can accept mails as large as your file system will allow (instead of
1064  up to as much memory you would allow qpsmtpd to eat).
1065
10662002/09/08
1067  Add klez_filter plugin
1068
1069  Support more return codes for data_post
1070
1071  Document data_post
1072
1073  Add plugin name to the log entries when plugins use log()
1074
1075  Add plugin_name method to the default plugin object.
1076
1077  Improve error handling in the spamassassin plugin
1078
1079
10802002/08/06
1081  Spool message bodies to a tmp file so we can support HUGE messages
1082
1083  API to read the message body (undocumented, subject to change)
1084
1085  data_post hook (undocumented)
1086
1087  SpamAssassin plugin (connects to spamd on localhost), see
1088  plugins/spamassassin
1089
1090
10912002/07/15
1092  DNS RBL and RHSBL support via plugins.
1093
1094  More hooks.
1095
10962002/07/03
1097  First (non functional) version of the new object oriented mail engine (0.10).
1098
1099
1100Changes on the old v0.0x branch:
1101
11022002/05/09
1103  Klez filter (thanks to Robert Spier)
1104
11052002/04/20
1106  Bumped version number to 0.07
1107
1108  Support comments in configuration files (prefix the line with #)
1109
1110  Support RELAYCLIENT like qmail-smtpd (thanks to Marius Kjeldahl
1111  <marius@kjeldahl.net> and Zukka Zitting <jukka.zitting@iki.fi>)
1112
1113  If the connection fails while in DATA we would just accept the
1114  message. Ouch! Thanks to Devin Carraway <qpsmtpd@devin.com> for the
1115  patch.
1116
1117
11182002/01/26
1119  Allow [1.2.3.4] for the hostname when checking if the dns resolves
1120
1121
11222002/01/21
1123  assorted fixes; getting dnsbl's to actually work
1124
1125  fixing the maximum message size (databytes) stuff (thanks for the
1126  spot to Andrew Pam <xanni@glasswings.com.au>)
1127
1128  support and enable taint checking (thanks to Devin Carraway
1129  <qpsmtpd@devin.com>)
1130
1131  Make the MAIL FROM host dns check configurable. (thanks to Devin
1132  Carraway).
1133
1134  Add more documentation to the README file.
1135
1136
1137