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