]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-3.1.0-RC1 v3.1.0-RC1
authorWietse Venema <wietse@porcupine.org>
Sun, 21 Feb 2016 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <postfix-users@dukhovni.org>
Mon, 22 Feb 2016 00:12:43 +0000 (19:12 -0500)
13 files changed:
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/WISHLIST [deleted file]
postfix/conf/postfix-tls-script
postfix/html/postconf.1.html
postfix/makedefs
postfix/man/man1/postconf.1
postfix/src/dns/Makefile.in
postfix/src/dns/dns.h
postfix/src/dns/test_dns_lookup.c
postfix/src/global/mail_version.h
postfix/src/postconf/postconf.c
postfix/src/smtpd/smtpd_check.c

index 7443a7d7a021552eae0798e759884db5c3233b04..e9c8bfa12fe6778c500372ba26831e99d50f1e65 100644 (file)
@@ -22178,3 +22178,11 @@ Apologies for any names omitted.
 20160214
 
        More manpage cleanups. Viktor, Wietse.
+
+20160215
+
+       Cleanup: "match_list_match: permit_mynetworks: no match" after
+       a SUCCESSFUL permit_mynetworks match of a client IP address was
+       complicating troubleshooting.  The fix is to log additional
+       context to clarify that this "no match" condition is for
+       smtpd_log_access_permit_actions. File: smtpd/smtpd_check.c.
index 3f27f9e864d34bed3dfc1a9823f8bc63916902d7..5a5eed240b32ed7d60d68f33745a93f7bd8c20ca 100644 (file)
@@ -1,12 +1,12 @@
-This is the Postfix 3.1 (experimental) release.
+This is the Postfix 3.1 (stable) release.
 
-The stable Postfix release is called postfix-3.0.x where 3=major
-release number, 0=minor release number, x=patchlevel.  The stable
+The stable Postfix release is called postfix-3.1.x where 3=major
+release number, 1=minor release number, x=patchlevel.  The stable
 release never changes except for patches that address bugs or
 emergencies. Patches change the patchlevel and the release date.
 
 New features are developed in snapshot releases. These are called
-postfix-3.1-yyyymmdd where yyyymmdd is the release date (yyyy=year,
+postfix-3.2-yyyymmdd where yyyymmdd is the release date (yyyy=year,
 mm=month, dd=day).  Patches are never issued for snapshot releases;
 instead, a new snapshot is released.
 
@@ -14,27 +14,17 @@ The mail_release_date configuration parameter (format: yyyymmdd)
 specifies the release date of a stable release or snapshot release.
 
 If you upgrade from Postfix 2.11 or earlier, read RELEASE_NOTES-3.0
-before proceeding.
 
+Major changes - address verification safety
+-------------------------------------------
 
-Major changes with snaphot 20160207
-===================================
-
-A new "postfix tls" command to quickly enable opportunistic TLS in
-the Postfix SMTP client or server, and to manage SMTP server keys
-and certificates, including certificate signing requests and TLSA
-DNS records for DANE. See the postfix-tls(1) manpage for a detailed
-description.
-
-Major changes with snaphot 20151227
-===================================
-
-The new address_verify_pending_request_limit parameter introduces
-a safety limit for the number of address verification probes in the
-active queue.  The default limit is 1/4 of the active queue maximum
-size. The queue manager enforces the limit by tempfailing probe
-messages that exceed the limit. This design avoids dependencies on
-global counters that get out of sync after a process or system crash.
+[Feature 20151227] The new address_verify_pending_request_limit
+parameter introduces a safety limit for the number of address
+verification probes in the active queue.  The default limit is 1/4
+of the active queue maximum size. The queue manager enforces the
+limit by tempfailing probe messages that exceed the limit. This
+design avoids dependencies on global counters that get out of sync
+after a process or system crash.
 
 Tempfailing verify requests is not as bad as one might think.  The
 Postfix verify cache proactively updates active addresses weeks
@@ -42,71 +32,53 @@ before they expire. The address_verify_pending_request_limit affects
 only unknown addresses, and inactive addresses that have expired
 from the address verify cache (by default, after 31 days).
 
-Major changes with snaphot 20151129
-===================================
-
-Machine-readable, JSON-formatted queue listing with "postqueue -j"
-(no "mailq" equivalent).  The output is a stream of JSON objects,
-one per queue file.  To simplify parsing, each JSON object is
-formatted as one text line followed by one newline character. See
-the postqueue(1) manpage for a detailed description of the output
-format.
-
-Major changes with Postfix snapshot 20151031
-============================================
+Major changes - json support
+----------------------------
 
-New "smtpd_client_auth_rate_limit" feature, to enforce an optional
-rate limit on the number of AUTH commands per client IP address.
-Similar to other smtpd_client_*rate_limit features, this enforces
-a limit on the number of requests per $anvil_rate_time_unit.
+[Feature 20151129] Machine-readable, JSON-formatted queue listing
+with "postqueue -j" (no "mailq" equivalent).  The output is a stream
+of JSON objects, one per queue file.  To simplify parsing, each
+JSON object is formatted as one text line followed by one newline
+character. See the postqueue(1) manpage for a detailed description
+of the output format.
 
-Major changes with Postfix snapshot 20150913
-============================================
+Major changes - milter support
+------------------------------
 
-New SMTPD policy service attribute "policy_context", with a
-corresponding "smtpd_policy_service_policy_context" configuration
-parameter.  Originally, this was implemented to share the same SMTPD
-policy service endpoint among multiple check_policy_service clients.
+[Feature 20150523] The milter_macro_defaults feature provides an
+optional list of macro name=value pairs. These specify default
+values for Milter macros when no value is available from the SMTP
+session context.
 
-Incompatible change with Postfix snapshot 20150721
-==================================================
+For example, with "milter_macro_defaults = auth_type=TLS", the
+Postfix SMTP server will send an auth_type of "TLS" to a Milter,
+unless the remote client authenticates with SASL.
 
-As of the middle of 2015, all supported Postfix releases no longer
-enable "export" grade ciphers for opportunistic TLS, and no longer
-use the deprecated SSLv2 and SSLv3 protocols for mandatory or
-opportunistic TLS.
+This feature was originally implemented for a submission service
+that may authenticate clients with a TLS certificate, without having
+to make changes to the code that implements TLS support.
 
-These changes are very unlikely to cause problems with server-to-server
-communication over the Internet, but they may result in interoperability
-problems with ancient client or server implementations on internal
-networks.  To address this problem, you can revert the changes with:
+Major changes - output rate control
+-----------------------------------
 
-Postfix SMTP client settings:
+[Feature 20150710] Destination-independent delivery rate delay
 
-    lmtp_tls_ciphers = export
-    smtp_tls_ciphers = export
-    lmtp_tls_protocols = !SSLv2
-    smtp_tls_protocols = !SSLv2
-    lmtp_tls_mandatory_protocols = !SSLv2
-    smtp_tls_mandatory_protocols = !SSLv2
-
-Postfix SMTP server settings:
+Support to enforce a destination-independent delay between email
+deliveries.  The following example inserts 20 seconds of delay
+between all deliveries with the SMTP transport, limiting the delivery
+rate to at most three messages per minute.
 
-    smtpd_tls_ciphers = export
-    smtpd_tls_protocols =
-    smtpd_tls_mandatory_protocols = !SSLv2
+/etc/postfix/main.cf:
+    smtp_transport_rate_delay = 20s
 
-These settings, if put in main.cf, affect all Postfix SMTP client
-or server communication, which may be undesirable. To be more
-selective, use "-o name=value" parameter overrides on specific
-services in master.cf. Execute the command "postfix reload" to make
-the changes effective.
+For details, see the description of default_transport_rate_delay
+and transport_transport_rate_delay in the postconf(5) manpage.
 
-Major changes with snaphot 20150710
-===================================
+Major changes - postscreen dnsbl
+--------------------------------
 
-postscreen support for the TTL of DNSBL and DNSWL lookup results
-----------------------------------------------------------------
+[Feature 20150710] postscreen support for the TTL of DNSBL and DNSWL
+lookup results
 
 Historically, the default setting "postscreen_dnsbl_ttl = 1h" assumes
 that a "not found" result from a DNSBL server will be valid for one
@@ -137,33 +109,80 @@ postscreen_dnsbl_max_ttl (default: $postscreen_dnsbl_ttl or 1 hour)
     specifies a very large reply TTL.
 
 The postscreen_dnsbl_ttl parameter is now obsolete, and has become
-a default value for the new postscreen_dnsbl_max_ttl parameter.
+the default value for the new postscreen_dnsbl_max_ttl parameter.
 
-Destination-independent delivery rate delay
--------------------------------------------
+Major changes - sasl auth safety
+--------------------------------
 
-Support to enforce a destination-independent delay between email
-deliveries.  The following example inserts 20 seconds of delay
-between all deliveries with the SMTP transport, limiting the delivery
-rate to at most three messages per minute.
+[Feature 20151031] New "smtpd_client_auth_rate_limit" feature, to
+enforce an optional rate limit on AUTH commands per SMTP client IP
+address.  Similar to other smtpd_client_*_rate_limit features, this
+enforces a limit on the number of requests per $anvil_rate_time_unit.
 
-/etc/postfix/main.cf:
-    smtp_transport_rate_delay = 20s
+Major changes - smtpd policy
+----------------------------
 
-For details, see the description of default_transport_rate_delay
-and transport_transport_rate_delay in the postconf(5) manpage.
+[Feature 20150913] New SMTPD policy service attribute "policy_context",
+with a corresponding "smtpd_policy_service_policy_context" configuration
+parameter.  Originally, this was implemented to share the same SMTPD
+policy service endpoint among multiple check_policy_service clients.
 
-Major changes with snaphot 20150523
-===================================
+Incompatible change with Postfix snapshot 20150721
+==================================================
 
-The milter_macro_defaults feature provides an optional list of macro
-name=value pairs. These specify default values for Milter macros
-when no value is available from the SMTP session context.
+Major changes - tls
+-------------------
 
-For example, with "milter_macro_defaults = auth_type=TLS", the
-Postfix SMTP server will send an auth_type of "TLS" to a Milter,
-unless the remote client authenticates with SASL.
+[Feature 20160207] A new "postfix tls" command to quickly enable
+opportunistic TLS in the Postfix SMTP client or server, and to
+manage SMTP server keys and certificates, including certificate
+signing requests and TLSA DNS records for DANE. See the postfix-tls(1)
+manpage for a detailed description.
+
+[Feature 20160103] The Postfix SMTP client by default enables DANE
+policies when an MX host has a (DNSSEC) secure TLSA DNS record,
+even if the MX DNS record was obtained with insecure lookups.  The
+existence of a secure TLSA record implies that the host wants to
+talk TLS and not plaintext. For details see the
+smtp_tls_dane_insecure_mx_policy configuration parameter.
+
+[Incompat 20150719] The default Diffie-Hellman non-export prime was
+updated from 1024 to 2048 bits, because SMTP clients are starting
+to reject TLS handshakes with primes smaller than 2048 bits.
+
+Historically, this prime size is not negotiable, and each site needs
+to determine which prime size works best for the majority of its
+clients. See FORWARD_SECRECY_README for some hints in the quick-start
+section.
+
+[Incompat 20150721] As of the middle of 2015, all supported Postfix
+releases no longer enable "export" grade ciphers for opportunistic
+TLS, and no longer use the deprecated SSLv2 and SSLv3 protocols for
+mandatory or opportunistic TLS.
+
+These changes are very unlikely to cause problems with server-to-server
+communication over the Internet, but they may result in interoperability
+problems with ancient client or server implementations on internal
+networks.  To address this problem, you can revert the changes with:
+
+Postfix SMTP client settings:
+
+    lmtp_tls_ciphers = export
+    smtp_tls_ciphers = export
+    lmtp_tls_protocols = !SSLv2
+    smtp_tls_protocols = !SSLv2
+    lmtp_tls_mandatory_protocols = !SSLv2
+    smtp_tls_mandatory_protocols = !SSLv2
+
+Postfix SMTP server settings:
+
+    smtpd_tls_ciphers = export
+    smtpd_tls_protocols =
+    smtpd_tls_mandatory_protocols = !SSLv2
+
+These settings, if put in main.cf, affect all Postfix SMTP client
+or server communication, which may be undesirable. To be more
+selective, use "-o name=value" parameter overrides on specific
+services in master.cf. Execute the command "postfix reload" to make
+the changes effective.
 
-This feature was originally implemented for a submission service
-that may authenticate clients with a TLS certificate, without having
-to make changes to the code that implements TLS support.
diff --git a/postfix/WISHLIST b/postfix/WISHLIST
deleted file mode 100644 (file)
index f8a7c2b..0000000
+++ /dev/null
@@ -1,947 +0,0 @@
-Wish list:
-
-       Things to do before the stable release:
-
-       Spell-check, double-word check, and HTML validator check.
-
-       Disable -DSNAPSHOT and -DNONPROD in makedefs.
-
-       Remove this file from the stable release.
-
-       Things to do after the stable release:
-
-       Specify WARN_UNUSED_RESULT for all library functions that
-       pass, deliver, bounce or defer a delivery request.
-
-       Invent some kind of type-checking wrappers for htable(3),
-       ctable(3) and other modules that take and return a void*
-       pointer. We already did that for variadic functions.
-
-       TLS certificate provenance: indicate whether a subject
-       name/issuer are verified or not (for example, change the
-       attribute name to unverified_ccert_subject etc.).  This is
-       relevant only for fingerprint-based authentication including
-       DANE, and affects logging, SMTPD policy, and Milters.
-
-       Generalize the daemon '-S' stand-alone mode, so that it can
-       be used with custom configuration settings for request/reply
-       regression testing. This would use the existing "-o name=value"
-       support to override parameters. For example, queue_directory
-       would point to a directory with sockets for fake versions of
-       Postfix-internal services.
-
-       Update the list of Sendmail macros that Postfix can send
-       to Milters (auth_ssf and TLS-related).
-
-       Update smtpd command count when rejecting or skipping input
-       before command-table lookup. But then we need to count
-       commands that are rejected (malformed UTF-8, tokenizer
-       error, forbidden command), or skipped (noop).
-
-       What is the best place to detect spaces in pathnames during
-       installation/upgrade/packaging? postfix-install for early
-       warning, and post-install as a safety net?
-
-       When the service basename differs from the program file
-       basename, either prepend the service name to the syslogname (as
-       if syslog_name=postfix/service/program), or prepend the service
-       name to the process name (perhaps too confusing).  The service
-       indication is desirable for mail delivery transports (smtp
-       versus relay) as it identifies what scheduler parameters are
-       in effect, but it is also desirable for mail receiving services
-       (smtp versus submission verus smtps as configured in the stock
-       master.cf file). This requires exceptions for some program names
-       (exclude smtpd to avoid logging postfix/smtp/smtpd which could
-       result in more confusion, and maybe other program names).
-
-       UTF8 DNS[BW]L domain name.
-
-       Consolidate maps flags in mail_params.h instead of having
-       multiple copies scattered across programs.
-
-       Try to allow UTF-8 myhostname/mydomain, at least in bounce
-       template expansion.
-
-       In the SMTP server, do not issue an enhanced status code when
-       rejecting a connection before the HELO handshake is completed.
-
-       Maybe don't whitelist a client that has maxed out its
-       per-MTA connection count limit.
-
-       Inline support for pcre:{/pattern/=action, ...} and ditto
-       support for regexp: and cidr: tables. Factor out and reuse
-       code that already exists in inline: and other tables.
-
-       Log command=good/bad statistics in postscreen?
-
-       Remember multiple access map BCC actions, for consistency
-       with header_checks.
-
-       smtpd_checks tests either must use a DNS dummy resolver
-       (override the res_search API) or all names must be under
-       porcupine.org (but that does not work for address->name
-       lookups, and cannot simulate some errors).
-
-       Reporting the original Message-ID in a bounce message
-       In-Reply-To: or References: header.  In the cleanup daemon,
-       grab a copy of the Message-ID and export it along with other
-       header-extracted information at the top of the "extracted"
-       queue file segment.  In the queue manager, extract this
-       along with other header-extracted information, and forward
-       the Message-ID in the bounce server notification request.
-
-       Clobber ORCPT when sender is owner-mumble?
-
-       Add milter_mumble_macros to the list of per-macro features.
-
-       The pickup daemon logs warnings only when the cleanup daemon
-       dit not provide a "reason" attribute. Is this logic right?
-
-       up-convert myhostname to UTF-8 in MIME boundary strings?
-
-       Eliminate code duplication between pcf_print_master_field()
-       and pcf_print_master_entry().
-
-       Error reporting: see if pcf_check_master_entry() and children
-       can return error descriptions instead of terminating with
-       a fatal error.
-
-       Add a switch to consider postscreen deep protocol tests as
-       "completed" when receiving "RSET" after "RCPT TO" and the
-       session has passed all tests up to that point. RSET becomes
-       like QUIT except perhaps that it does not hang up.
-
-       apipe: map, splits results into address lists and performs
-       lookups for the invidual addresses, converting back and
-       forth between external and internal forms.
-
-       Clarify that receive_override_options have no effect with
-       smtpd_proxy_filter.
-
-       Document the relative order of header_checks, address
-       rewriting, milters.
-
-       NOT: Table-driven case folding and case-insensitive string
-       comparison specifically for UTF-8. Use libicu functions
-       instead.
-
-       When downgrading message/global to 7bit, is quoted-printable
-       the appropriate encoding? Should it be base64?
-
-       Should we encode headers with RFC 2047, when that is the
-       only reason that Postfix cannot deliver to a non-UTF8SMTP
-       server? Probably not in the general case. What about 
-       Postfix as a gateway server that converts UTF8SMTP
-       for delivery to non-UTF8SMTP environments?
-
-       Document and test restriction_classes example for 
-       smtpd_policy_service_default_action.
-
-       Don't accept AUTH or other features that are not announced
-       in the EHLO response.
-
-       Suggested at Mailserver conference: Postscreen RDNS-based
-       reputation (but this makes postscreen performance highly
-       unpredicable because it introduces a dependency on random
-       DNS servers).
-
-       Suggested at Mailserver conference: a way to select a
-       specific field in a table, presumably as the result value.
-       This may be done with a filtermap{i,j,...}: table that propagates
-       only the specified field(s).
-
-       Discourage the use of "after 220" tests in POSTSCREEN_README
-       and the documentation of individual parameter settings.
-
-       To un-break "make tests" under src/smtpd, make tests
-       independent from the DNS and native routines for host
-       name/address lookup.
-
-       Make been_here flag BH_FLAG_FOLD configurable for masochists.
-
-       Replace some redundant TLS_README sections with pointers
-       to FORWARD_SECRECY_README.
-
-       Move html/index.html source to proto/.
-
-       How hard is it to follow canonical or virtual mapping
-       for the purpose of address validation? We must never
-       reject a valid address.
-
-       Preserve case in smtpd_resolve_addr() and add a structure
-       member for the case-folded address. IIRC some Milter macro
-       needs to show the unfolded address.
-
-       Per SASL account rate limits. This requires new infrastructure
-       that maintains stats by SASL account instead of client IP
-       address.
-
-       Watchdog timer in postmap/postalias.
-
-       Begin code revision, after DANE support stabilizes.  This
-       should be one pass that changes only names and no code.
-
-       recipient_delimiters = $recipient_delimiter for BC
-
-       All source code must specify its original author and
-       license statement. Some code modules specify Lutz Jaenicke
-       as the original author and fall under his liberal license.
-       Code that is added to such a module has the same license
-       (or at least something that is not more restrictive). Code
-       modules without input from Lutz Jaenicke must state its
-       original author and license (preferably no more restrictive
-       than Postfix's own license). Currently, too many files list
-       Wietse as the original author, and Lutz Jaenicke's license,
-       which is wrong.
-
-       We have smtp_host_lookup, smtp_dns_resolver_options, and
-       now smtp_dns_support_level.  Of these, smtp_dns_resolver_options
-       is orthogonal but the rest has overlap.
-
-       There needs to be support for automatic migration from the
-       deprecated disable_dns_lookups feature to the preferred
-       smtp_dns_support_level feature. This support needs to exist
-       for several releases before the deprecated feature can be
-       removed.
-
-       End code revision, after DANE support stabilizes.
-
-       It would be nice if "bare username" lookup is not hard-coded
-       for domains in the local address class.
-
-       Don't forget Apple's code donation for fetching mail from
-       IMAP server.
-
-       Should postconf -o refuse to work without the -x option?
-
-       Make 30s caching (feature 20070414) configurable, such that
-       0 means no caching.
-
-       Make errno white/blacklist for getpwnam_r etc. and mailbox
-       write errors.
-
-       smtpd_muble_restrictions rule names are case-insensitive.
-       restriction_classes values are case-sensitive but should
-       be case-insensitive for consistency with smtpd_muble_restrictions.
-
-       Make "rename" the default when postmapping a DB file
-       (later: use copy+rename for postmap -i, postmap -d).
-
-       Service-name parameters aren't documented in daemon manpages.
-
-       When faking up the DSN ORCPT, don't send bare usernames
-       from local command-line submission.
-
-       lmtp_assume_final is broken. A 2XX response does not imply
-       final delivery. The Sieve language implements accept-then-bounce.
-
-       postscreen event-driven plug-in interface to send out a
-       query in parallel with the Pregreet and DNSBL tests, using
-       a simplified version of the policy delegation protocol.
-
-       Parallelized queue preprocessing: rip out the queue manager
-       code to read queue files and resolve recipients, and run
-       it in parallel processes. The queue manager then processes
-       their results as they become available.  This would eliminate
-       the qmgr<->trivial-rewrite bottleneck. This can also eliminate
-       much of the scheduling disadvantage of a single queue manager
-       compared to hundreds of mail receiving or sending processes
-       (especially if there is a way to scan the queue in parallel).
-
-       Memory pools for same-type memory objects.  This can be
-       used to either increase memory locality for frequently-allocated
-       objects (MRU allocation) or to make use-after-free bugs
-       more detectable (use LRU allocation and wipe the object
-       immediately after free().  Finally, same-type memory pools
-       prevent object type errors with use-after-free bugs.
-
-       "no-cache" option for selected postscreen tests?
-
-       Need a new DICT flag to indicate that a map handle supports
-       locking.  If it doesn't (as with memcache or proxymap
-       handles), then postscreen etc. don't need to close a cache
-       file after "postfix reload".  After a fork() it is OK to
-       keep using a memcache or proxymap handle, because the parent
-       exits immediately.  For this to work, the memcache client
-       needs to propagate the flag from a persistent backup map,
-       but the proxymap protocol should not propagate this to the
-       client.
-
-       Different TTL values for different DNSBL sources?
-
-       Replace master(8) SIGHUP by very simple socket protocol to
-       allow reload of a specific service.
-
-       postscreen: in the dummy SMTP engine, log the protocol state
-       at time of violation (like smtpd, set state->where initially
-       to CONNECT, then update it with the name of the last "known"
-       command, or set it to "unimplemented").
-
-       The discussion of postscreen cache configuration is in the
-       wrong place (how whitelisting works). Move it to the section
-       about configuring postscreen.
-
-       Before proxymap can be exposed to the network (primarily
-       to share postscreen or verify caches), need to enforce
-       limits on attribute string name and value length in IPC
-       protocols.  10-20KB seems OK. We need to enforce content
-       sanity checks (for example, no control characters; Postfix
-       does not pass around multi-line data in table lookups). The
-       VSTREAM library already supports read/write deadlines.  We
-       need to use attack-resistant code for numeric conversion.
-
-       move flush_init() etc. from defer service clients to the
-       bounce daemon? Postfix works best when work can be spread
-       out over many clients, instead of over a few servers.
-
-       multi_connect() function that takes a list of inet:host:port
-       and/or unix:pathname specs, with an explicit "inet" prefix
-       argument to handle applications that use host:port only.
-       This will simplify multi-host implementation for memcache
-       client, dovecot client, and other.
-
-       dict_memcache: treat "bad" key as cache miss, i.e.  read/write
-       the backup database as if the cache did not exist. This
-       does not help because most Postfix maps (virtual, canonical,
-       access, transport, ...) also don't support spaces in keys.
-
-       postscreen: keep the cache open after "postfix reload" when
-       it is remote (type memcache: or proxy:). This does not work
-       because memcache can use a non-proxied file as backup).
-
-       What is the feasibility of adding an mta_name (personality)
-       attribute that is propagated via queue files and delivery
-       agent requests? It would default to myhostname.
-
-       Major performance improvement opportunity (that is until
-       everyone runs Postfix queues on SSDs).  Investigate the
-       viability of a daemon that produces incoming and postdrop
-       queue files on request (in reality it would maintain a
-       limited queue of "spare" files). Central queue file allocation
-       reduces the I/O performance disadvantage that qmgr has when
-       100 smtpd processes are receiving mail, or when lots of
-       mail is submitted with the sendmail command line.  When an
-       smtpd process accepts MAIL FROM, a cleanup daemon requests
-       a queue file and receives a queue ID + file handle from the
-       queue file daemon.  If the queue file daemon is down, the
-       cleanup daemon creates the file itself like it does now;
-       this can be hidden in the mail_stream library module.  If
-       the mail transaction is aborted, then the cleanup daemon
-       gives the queue file back to the queue file daemon's "spare"
-       file pool, saving most of the overhead of creating and
-       deleting a queue file (the file would still need to be
-       renamed at the start of the next mail transaction).  If the
-       cleanup daemon is unable to give a file back, then it can
-       delete the file like it does now; this can be hidden in the
-       mail_stream library module.  The whole thing can be
-       transparently added to Postfix by adding calls to a
-       queue-file-service client to the mail_queue_enter() and
-       mail_queue_remove() library routines.  Other advantages:
-       1) negligible performance hit when queue file allocation
-       happens earlier, so that logging and milters have a queue
-       ID for the whole transaction not just the first valid
-       recipient; 2) by not removing every queue files we get most
-       of the performance gain of a queue based on append/truncate
-       instead of the much more expensive create/delete.
-
-       Investigate viability of Sendmail dns maps.
-
-       Make the rules for how to use close-on-exec more explicit.
-
-       Provide separate timeout control for dict_proxy client,
-       rewrite client, resolve client, cleanup client, and so on.
-       Perhaps a timeout argument to the mail_connect() routines.
-
-       Trick from amavisd: save listen socket/fifo/etc state, clear
-       their close-on-exec flags, exec the same program file to
-       re-initialize (with saved socket state on command line or
-       in environment), then restore the listen socket/fifo/etc
-       close-on-exec flags.  This could be a way to mitigate the
-       impact of memory/file leaks, and to implement "postfix
-       reload" support for master(8) features that currently don't
-       support this. 
-
-       Sub-second time resolution. The first benefit is to make
-       per-destination rate delays more usable. Other applications
-       will come up once the support exists. The straightforward
-       approach is to represent all time intervals in milliseconds,
-       and to update all code that makes system calls with a time
-       argument (as well as the compiled-in upper and lower time
-       parameter bounds, which are currently in seconds).
-       Unfortunately, that limits he maximum time interval to less
-       than 25 days on 32-bit systems, and is likely to break
-       compatibility (for starters, it cannot even deal with the
-       compiled-in 100d upper bound on the queue file lifetime).
-       A second option is to have a "compatibility" time base
-       switch between milliseconds and seconds; this means extra
-       changes to all code that makes system calls with a time
-       argument, and the way that the compiled-in upper and lower
-       bounds are specified.  Some of this can be encapsulated in
-       macros like time_to_sec(t), time_to_msec(t) and sec_to_time(t).
-       Finally, it is relatively easy to replace the events(3)
-       interface to use "double" for the time delay arguments, but
-       it is a major pain to convert all main.cf time parameters
-       into doubles (converting only some leads to a documentation
-       nightmare).
-
-       Address verify cache: allow a negative cache "refresh"
-       result to purge a "positive" cache entry in some safe manner.
-       Currently, the negative cache "refresh" result is discarded,
-       address verify cache lookup returns OK, and each lookup
-       forces a "refresh" probe until the entry expires.
-
-       Some Sendmail configurations trigger sub-optimal behavior
-       when the postscreen_whitelist_interfaces parameter lists
-       primary MX addresses only.  When postscreen's "deep protocol
-       tests" are successful on the primary MX address (i.e. they
-       result in 4XX responses to RCPT TO), some Sendmail
-       configurations keep the primary MX connection open until
-       AFTER they finish talking to the backup MX address.  The
-       problem is that the backup connection runs into a WHITELIST
-       VETO condition because the whitelisting database has not
-       yet been updated with the PASS NEW result for the primary
-       MX connection.  Unfortunately postscreen can't update the
-       whitelisting database before the primary MX connection is
-       closed, because a client may still make a mistake.
-
-       In the SMTP server, check if the connection is closed before
-       replying to ".", and discard the message if the reply can't
-       be sent. This reduces the time window for RFC 1047 message
-       duplication, and may even prevent the delivery of some spam.
-       http://www.exim.org/lurker/message/20070416.103159.9d5ff0ce.en.html
-       This requires splitting the SMTP server's commit operation
-       into two operations: first, a tentative commit operation
-       that performs most of the I/O and processing in milters and
-       in the cleanup server; second, a final commit operation
-       that is executed only if the remote SMTP client hasn't hung
-       up in the mean time. Unfortunately, SMTP-based before-queue
-       content filters don't support a tentative commit operation.
-
-       Find out how to reproduce Berkeley DB bogus ENOENT errors.
-       postscreen does not log this with Berkeley DB 1 (FreeBSD
-       4..8), 4.7.25 (Ubuntu 9.04) and 4.8.24 (Ubuntu 10.04).
-
-       postconf command-line option to show the compile-time
-       settings (CCARGS, AUXLIBS) in case binary packages
-       don't install the makedefs.out file.
-
-       events.c: cache the side effects of file descriptor event
-       enable/disable operations in user space, and do bulk kernel
-       updates at event_loop() time.  This can eliminate costly
-       system calls with successive event disable/enable operations
-       on the same file descriptor. This can also eliminate the
-       need for tricky code that tries to avoid the expense of
-       successive disable/enable operations. Such code is likely
-       to introduce bugs.
-
-       When does it pay off to send domains in the active queue
-       to a DNS prefetch daemon? Could this generalize to a dynamic
-       transport map that piggy-backs domains with the same MX
-       host into the same mail delivery transaction?
-
-       tlsproxy(8) should receive TLS preferences from postscreen(8)
-       and smtpd(8), instead of reading them from main.cf. This
-       means that many tlsproxy_ parameters become postscreen_
-       parameters, and that tls_server_init() parameters move to
-       to tls_server_start(). That is a significant API change.
-       It also means tlsproxy can't open all files before chroot().
-
-       anvil rate limit for sasl_username.
-
-       Encapsulate nbbio buffer access and update by tlsproxy.
-
-       Full-duplex support for tlsproxy(8). This requires updating
-       events(3) and nbbio(3).
-
-       Register automagic destructor for object attached to VSTREAM.
-
-       Use different ipc time limits for email message transactions
-       (smtpd, pickup)->cleanup and for quick query/reply transactions
-       such as address rewriting/resolution. Beware of large time
-       limits for local or virtual alias expansion.
-
-       permit_tempfail_action (default: defer_if_reject) to be
-       used as the default value for dnswl_tempfail_action and
-       rhswl_tempfail_action. Steal liberally from the code that
-       implements unverified_recipient_tempfail_action etc.
-
-       Support filtering of messages that are generated by Postfix:
-       This would apply to postmaster notices and bounce messages
-       (DKIM), and address verification (BATV).
-
-       Consistency: in postconf.proto make <dt>..</dt> tags bold.
-
-       Would it help if there were different cleanup_service
-       parameter names for different message paths? smtpd(8) uses
-       the same cleanup_service value for receiving remote mail
-       and for submitting postmaster problem reports. Do we need
-       separate mumble_cleanup_service_name parameters for "inject",
-       "notify" and "forward" (with backwards compatible defaults)?
-
-       IF/ENDIF support for CIDR tables.
-
-       Need a regular expression table to translate address
-       verification responses into hard/soft/accept reply codes.
-
-       Is there a way to make sendmail -V work after local alias
-       expansion? Majordomo-like mailing lists would benefit from
-       this; the example in VERP_README does not work in the general
-       case.
-
-       When an alias is a member of an :include: list with owner-
-       alias, local(8) needs an option to deliver alias or alias->user
-       indirectly. What happens when an :include: list with owner-
-       alias includes another list?
-
-       Don't allow empty result values in pcre and regexp maps.
-       Postfix doesn't allow them anywhere else (check this).
-
-       Make PCRE_MAX_CAPTURE configurable.
-
-       Add some checks for tokens starting with #. A challenge
-       is to report sensible context from the guts of some low-level
-       parser, without introducing a great deal of clumsiness.
-
-       Add sendmail macros for {verify} and maybe other TLS info.
-
-       Find out if we are doing the correct thing by looking at
-       state->milter_reject_text when expanding {rcpt_addr} or
-       {rcpt_host}.
-
-       Find out why post_mail() etc. block when the qmgr fifo is
-       full (answer: trigger_timeout). How can this cause delays
-       in the queue manager?  When a recipient bounces during
-       (transport, nexthop, address) resolution, it is redirected
-       to the error or retry mailer; and bounce-after-delivery is
-       asynchrounous so it can't block the queue manager, either.
-
-       How to ensure that proxy_read_maps is processed after all
-       its dependencies are initialized, or just bite the bullet
-       and rewrite the parameter initialization code.
-
-       The cleanup virtual alias expansion limit does not really
-       deliver on its promises. 1) It promises to truncate the
-       result without aborting delivery, which would be undesirable
-       anyway, but that is not what it does, so that is good.  2)
-       It keeps all the recipients from multi-recipient database
-       lookup, then terminates further recursion when the result
-       exceeds the expansion limit. This behavior achieves the
-       original goal that all things shall have a finite size (even
-       though but we don'really care how large they are) but may
-       result in surprises when recipients are listed in virtual
-       alias domains or need expansion for other reasons.  In a
-       phone call with Victor, a reasonable way out is to set the
-       limit to some large number (100000) and abort delivery when
-       the result exceeds the limit.
-
-       Should the postscreen save permanent white/black list lookup
-       results to the temporary cache, and query the temporary
-       cache first? Skipping white/black list lookups will speed
-       up the handling of "good" clients without a permanent
-       whitelist entry.  Of course, this means that updates to the
-       white/black lists do not immediately take effect. Workarounds:
-       1) use a shorter temporary cache TTL for clients on the
-       permanent black/white lists; 2) ignore cached white/black
-       list lookup results after "postfix reload"; 2) adjust the
-       logging, for example "WHITELISTED address (cached)" and
-       "BLACKLISTED address (cached)" to eliminate surprises.
-       Comparing the cache entry time with the white/blacklist
-       file modification time is not foolproof: for example, pcre
-       or CIDR tables are read only once.
-
-       It would be nice if the generic dict_cache(3) cache manager
-       could postpone process suicide until cache cleanup is
-       completed (but that is not possible when postscreen forks
-       into the background to finish already-accepted connections,
-       and it is not desirable when a host is being shut down).
-
-       When postscreen drops a connection, a 521 "greeting" should
-       be of the form "521 servername..." and not have an enhanced
-       status code. The "521 5.7.1" form can be used after EHLO.
-       Of course no spammer is going to complain about Postfix
-       SMTP compliance.
-
-       Find a place to document all the mail routing mechanisms
-       in one place so people can figure out how Postfix works.
-
-       The access map BCC action is marked "not stable", perhaps
-       because people would also expect BCC actions in header/body_checks.
-       How much would it take to make the queue file editing code
-       generally usable?
-
-       Move smtpd_command_filter into smtpd_chat_query() and update
-       the session transcript (see smtp_chat_reply() for an example).
-
-       SMTP connection caching without storing connections, to
-       improve TLS mail delivery performance.
-
-       Should not milter8_mail_event() unset the "hold" default
-       reply? Better, the default reply should not be used for
-       this purpose.
-
-       Don't send MASTER_STAT_TAKEN/MASTER_STAT_AVAIL when a server
-       runs with process limit of 1. But this means the master
-       never learns that the process is successful and will always
-       pause $service_throttle_time before restarting a failed service.
-
-       Don't bother maintaining a per-service lockfile when a
-       server runs with process limit of 1. The purpose of the
-       lockfile is to avoid thundering herd problems when the kernel
-       wakes up multiple processes for each new client connection.
-
-       Implement PREPEND action for milter_header_checks. Save the
-       to-be-prepended text to buffer, then emit it along with the
-       new header.
-
-       Fix the header_body_checks API, so that the name of the map
-       class (e.g. milter_header_checks) is available for logging.
-
-       Fix the mime_state and header_body_checks APIs, so that
-       they use VSTRINGs. This simplifies REPLACE actions.
-
-       Update FILTER_README for multi-instance support, and rename
-       the old document to FILTER_LEGACY_README.
-
-       Need to sign delivery status notifications, to avoid surprises
-       when eventually people start enforcing DKIM etc. signatures.
-
-       Either document or remove the internal_mail_filter_classes
-       feature (it's disabled by default).
-
-       Make the "unknown recipient" test configurable as
-       first|last|never, with "yes"=="last" for backwards
-       compatibility. The "first" setting is good for performance
-       (stress=yes) when all users are defined in local files; but
-       it may perform worse when users are in networked tables.
-
-       Cleanup: make DNSBL query format configurable beyond the
-       client's reversed IP address.
-
-       With 'final delivery' in the LMTP client, need an option
-       to also add delivered-to and other pipe(8) features.  This
-       requires making mail_copy() functionality available in
-       non-mailbox context.
-
-       Cleanup: modernize the "add missing From: header" code, to
-       ``phrase <addr>'' form. Most likely, quote the entire phrase
-       if it contains any text that is special, then rfc822_externalize
-       the whole thing.
-
-       SMTP server: make the server_addr and server_port available
-       to policy server, Dovecot, and perhaps Milters.
-
-       Med: local and remote source port and IP address for smtpd
-       policy hook.
-
-       Maybe change maps_rbl_reject_code default to 521, and
-       update wording in STRESS_README.
-
-       Encapsulate time_t comparisons so that they can be made
-       system dependent (use difftime() where available).
-
-       Encapsulate time_t conversions (e.g. REC_TYPE_TIME) so that
-       they can be made system dependent.
-
-       Plan for time_t larger than long, or wait for LP64 to
-       dominate the world?
-
-       Make "AUTH=<>" appendage to MAIL FROM configurable, enabled
-       by default.
-
-       To support ternary operator without a huge parsing effort,
-       consider ${value?{xxx}:{yyy}} where ${name} is existing
-       syntax, and where ?{text} and :{text} are new syntax that
-       is unlikely to break existing configurations. Or perhaps
-       it's just too ugly.
-
-       Write delivery rate delay example (which _README?) and auth
-       failure cache example (SASL_README). Then include them in
-       SOHO_README.
-
-       Look for alternatives for the use of non_smtpd_milters.
-       This involves some way to force local submissions to go
-       through a local SMTP client and server, without triggering
-       "mail loops back to myself" false alarms. The advantage is
-       that it makes smtpd_mumble_restrictions available for local
-       and remote mail; the disadvantage is that it makes local
-       submissions more dependent on networking.  One possibility
-       is to use "pickup -o content_filter=smtp:127.0.0.1:10025",
-       or a dedicated SMTP client/server on UNIX-domain sockets;
-       we could also decide to always suppress "mail loop" detection
-       for loopback connections.  Another option is to have the
-       pickup or cleanup server drive an SMTP client directly;
-       this would require extension of the mail_stream() interface,
-       plus a way to handle bounced/deferred recipients intelligently,
-       but it would be at odds with Postfix design where delivery
-       agents access queue files directly; exposing delivery agents
-       to raw queue files violates another Postfix design principle.
-
-       Consolidate duplicated code in *_server_accept_{pass,inet}().
-
-       Consolidate duplicated code in {inet,unix,upass}_trigger.c.
-
-       In the SMTP client, handle 421 replies in smtp_loop() by
-       having the input function raise a flag after detecting 421
-       (kill connection caching and be sure to do the right thing
-       with RSET probes), leave the smtp_loop() per-command reply
-       handlers unchanged, and have the smtp_loop() reader loop
-       bail out with smtp_site_fail("server disconnected after
-       %s", where), but only in the case that it isn't already in
-       the final state. But first we need to clean up the handling
-       of do/don't cache, expired, bad and dead sessions.
-
-       Combine smtpd_peer.c and qmqpd_peer.c into a single function
-       that produces a client context object, and provide attribute
-       print/scan routines that pass these client context objects
-       around. With this, we no longer have to update multiple
-       pieces of code when a client attribute is added. Ditto for
-       SASL and TLS context.
-
-       Don't log "warning: XXXXX: undeliverable postmaster
-       notification discarded" for spam from outside.
-
-       Really need a cleanup driver that allows testing against
-       Milter applications instead of synthetic events. This would
-       have to provide stubs for clients that talk to Postfix
-       daemon processes. See if this approach can also be used for
-       other daemons.
-
-       smtpd(8) exempts $address_verify_sender from access controls,
-       but it doesn't know whether cleanup(8) or delivery agents
-       modify the sender. Would it be possible to "calibrate" this
-       exemption, perhaps by having delivery agents pass the probe
-       sender to the verify server, keeping in mind that the probe
-       sender may differ per delivery agent due to output rewriting.
-
-       Update attr_print/scan() so they can send/receive file
-       descriptors. This simplifies kludgy code in many daemons.
-
-       Would there be a problem adding $smtpd_mumble_restrictions
-       and $smtpd_sender_login_maps to the default proxy_read_maps
-       settings?
-
-       Remove defer(8) and trace(8) references and man pages. These
-       are services not program names. On the other hand we have
-       man pages for lmtp(8) and smtp(8), but not for relay(8).
-       Likewise, retry(8) does not have a man page.
-
-       Bind all deliveries to the same local delivery process,
-       making Postfix perform as poorly as monolithic mailers, but
-       giving a possibility to eliminate duplicate deliveries.
-
-       Maybe declare loop when resolve_local(mxhost) is true?
-
-       Update message content length when adding/removing headers.
-
-       Need scache size limit.
-
-       REDIRECT should override original recipient info, and
-       probably override DSN as well.
-
-       Update FILTER_README with mailing list suggestions to tag
-       with a badness indicator and then filter down-stream.
-
-       Make null local-part handling configurable: either expand
-       into mailer-daemon (current bahavior) or disallow (strict
-       behavior, currently implemented only in the SMTP server).
-
-       Add M flag (enable multi-recipient delivery) to pipe daemon.
-
-       The usage of TLScontext->cache_type is unclear. It specifies
-       a TLS session cache type (smtpd, smtp, or lmtp), but it is
-       sometimes used as an indicator that TLS session caching is
-       unavailable.  In reality, that decision is made by not
-       registering call-back functions for cache maintenance.
-
-       Postfix TLS library code should copy any strings that it
-       receives from the application, instead of passing them
-       around as pointers. TLScontext->cache_type is a case in
-       point.
-
-       Are transport:nexthop null fields the same as in the case
-       of default_transport etc. parameters?
-
-       Don't lose bits when converting st_dev into maildir file
-       name. It's 64 bits on Linux. Found with the BEAM source
-       code analyzer. Is this really a problem, or are they just
-       using 64 bits for upwards compatibility with LP64 systems?
-
-       Do or don't introduce unknown_reverse_client_reject_code.
-
-       Check that "UINT32 == unsigned int" choice is ok (i.e. LP64
-       UNIX).
-
-       Tempfail when a Milter application tries to negotiate content
-       access, while it is configured in an SMTP server that runs
-       before the smtpd_proxy filter.
-
-       Log DSN original recipient when rejecting mail.
-
-       Keep whitespace between label and ":"?
-
-       Make the map case folding/locking options configurable, if
-       not at run-time then at least at compile time so we get
-       consistent behavior across applications.
-
-       Investigate what it would take to eliminate oqmgr, and to
-       make the old behavior configurable in a unified queue
-       manager.  This would shave another 2.7 KLOC from the source
-       footprint.
-
-       Document the case folding strategy for match_list like
-       features.
-
-       Eliminate the (incoming,deferred)->active rename operation.
-       This requires an in-memory hash of queue file names to avoid 
-       duplicate open() operations.
-
-       Softbounce fallback-to-ISP for SOHO users. This heuristic
-       assumes that when direct-to-MX delivery fails with 5XX,
-       delivery via the ISP may still succeed.  This could be
-       implemented by enabling soft bounces for destinations other
-       than the smtp_fallback_relay. So the only benefit of this
-       over the existing soft_bounce feature is that it has no
-       effect on smtp_fallback_relay deliveries.
-
-       Centralize main.cf parameter input so that defaults work
-       consistently. What about parameter names that are prefixed
-       with mail delivery transport names?
-
-       Fix default time unit handling so that we can have a default
-       bounce lifetime of $maximal_queue_lifetime, without causing
-       panics when a non-default maximal_queue_lifetime setting
-       includes no time unit.
-
-       After the 20051222 ISASCII paranoia, lowercase() lowercases
-       ASCII text only.
-
-       Privacy: remove local command/pathname details from remote
-       delivery status reports, and log them via local msg_warn().
-
-       Is it safe to cache a connection after it has been used for
-       more than some number of address verification probes?
-
-       Try to recognize that Resent- headers appear in blocks,
-       newest block first. But don't break on incorrect header
-       block organization.
-
-       Hard limits on cache sizes (anvil, specifically).
-
-       Laptop friendliness: make the qmgr remember when the next
-       deferred queue scan needs to be done, and have the pickup
-       server stat() the maildrop directory before searching it.
-
-       Low: replace_sender/replace_recipient actions in access
-       maps, so they can be used in policy servers?
-
-       Low: configurable order of local(8) delivery methods.
-
-       Med: smtp_connect_timeout_budget (default: 3x smtp_connect_timeout)
-       to limit the total time spent trying to connect.
-
-       Med: transform IPv4-in-IPv6 address literals to IPv4 form
-       when comparing against local IP addresses?
-
-       Med: transform IPv4-in-IPv6 address literals to IPv4 form
-       when eliminating MX mailer loops?
-
-       Med: Postfix requires [] around IPv6 address information
-       in match lists such as mynetworks, debug_peer_list etc.,
-       but the [] must not be specified in access(5) maps. Other
-       places don't care.  For now, this gotcha is documented in
-       IPV6_README and in postconf(5) with each feature that may
-       use IPv6 address information. The general recommendation
-       is not to use [] unless absolutely necessary.
-
-       Med: the partial address matching of IPv6 addresses in
-       access(5) maps is a bit lame: it repeatedly truncates the
-       last ":octetpair" from the printable address representation
-       until a match is found or until truncation is no longer
-       possible.  Since one or more ":" are usually omitted from
-       the printable IPv6 address representation, this does not
-       really try all the possibilities that one might expect to
-       be tried. For now, this gotcha is documented in access(5).
-
-       Low: reject HELO with any domain name or IP address that
-       this MTA is the final destination for.
-
-       Low: should the Delivered-To: test in local(8) be configurable?
-
-       Low: make mail_addr_find() lookup configurable.
-
-       Low: update events.c so that 1-second timer requests do not
-       suffer from rounding errors. This is needed for 1-second
-       SMTP session caching time limits. A 1-second interval would
-       become arbitrarily short when an event is scheduled just
-       before the current second rolls over.
-
-       Low: configurable internal/system locking method.
-
-       Low: add INSTALL section for pre-existing Postfix systems.
-
-       Low: add INSTALL section for pre-existing RPM Postfixes.
-
-       Low: disallow smtpd_recipient_limit < 100 (the RFC minimum).
-
-       Low: noise filter: allow smtp(8) to retry immediately if
-       all MXes return a quick ECONNRESET or 4xx reply during the
-       initial handshake. Retry once? How many times?
-
-       Low: make post-install a "postfix-only script" so it can
-       take data from the environment instead of main.cf.
-
-       Low: randomize deferred mail backoff.
-
-       Med: separate ulimit for delivery to command?
-
-       Med: postsuper -r should do something with recipients in
-       bounce logfiles, to make sure the sender will be notified.
-       To be perfectly safe, no process other than the queue manager
-       should move a queue file away from the active queue.
-
-       This could involve tagging a queue file, and use up another
-       permission bit (postsuper tags a "hot" file, qmgr requeues it).
-
-       Low: postsuper re-run after renaming files, but only a
-       limited number of times.
-
-       Low: smtp-source may block when sending large test messages.
-
-       Med: find a way to log the sender address when MAIL FROM
-       is rejected due to lack of disk space.
-
-       Low: revise other local delivery agent duplicate filters.
-
-       Low: all table lookups should consistently use internalized
-       (unquoted) or externalized (quoted) forms as lookup keys.
-       smtpd, qmgr, local, etc. use unquoted address forms as keys.
-       cleanup uses quoted forms.
-
-       Low: have a configurable list of errno values for mailbox
-       or maildir delivery that result in deferral rather than
-       bouncing mail. What about "killed by signal" exits?
-
-       Low: after reorganizing configuration parameters, add flags
-       to all parameters whose value can be read from file.
-
-       Medium: need in-process caching for map lookups. LDAP servers
-       seem to need this in particular. Need a way to expire cached
-       results that are too old.
-
-       Low: generic showq protocol, to allow for more intelligent
-       processing than just mailq. Maybe marry this with postsuper.
-
-       Low: default domain for appending to unqualified recipients,
-       so that unqualified names can be delivered locally.
-
-       Low: The $process_id_directory setting is not used anywhere
-       in Postfix. Problem reported by Michael Smith, texas.net.
-       This should be documented, or better, the code should warn
-       about attempts to set read-only parameters.
-
-       Low: while converting 8bit text to quoted-printable, perhaps
-       use =46rom to avoid having to produce >From when delivering
-       to mailbox.
-
-       virtual_mailbox_path expression like forward_path, so that
-       people can specify prefix and suffix.
index ea418c3afb0db0c1332cd8ac473f712ca39a5541..c8e991e59a57dca88e842785aa84f93a8073601c 100644 (file)
@@ -317,10 +317,7 @@ openssl=`$postconf -c $default_config_directory -xh openssl_path`
 
 # ----- END OpenSSL-specific -----
 
-# Make this our *last* "cd", so all the key/cert generation runs in the
-# configuration directory.
-#
-test -n "$config_directory" && cd $config_directory || {
+test -n "$config_directory" -a -d "$config_directory" || {
     $FATAL no Postfix configuration directory $config_directory!
     exit 1
 }
@@ -566,7 +563,8 @@ info_enable_client() {
 
 info_client_deployed() {
        cat <<-EOM
-       Enabled opportunistic TLS in the Postfix SMTP client, run:
+       Enabled opportunistic TLS in the Postfix SMTP client.
+       Run the command:
          # postfix reload
        if you want the new settings to take effect immediately.
        EOM
@@ -603,7 +601,8 @@ info_server_deployed() {
            echo "Enabled opportunistic TLS in the Postfix SMTP server"
        fi
        cat <<-EOM
-       New TLS private key and certificate deployed, run:
+       New TLS private key and certificate deployed.
+       Run the command:
          # postfix reload
        if you want the new settings to take effect immediately.
        EOM
@@ -616,9 +615,9 @@ info_csr() {
          # postfix tls output-server-csr -k $2 [<hostname> ...]
        EOM
        if [ -z "$3" ]; then
-           echo "Save the signed certificate chain in ${config_directory}/$1, and deploy as above."
+           echo "Save the signed certificate chain in $1, and deploy as above."
        else
-           echo "Save the signed certificate chain in ${config_directory}/$1."
+           echo "Save the signed certificate chain in $1."
        fi
 }
 
@@ -659,9 +658,24 @@ set_fqdn() {
 set_keyfile() {
     keyfile=$1
     case $keyfile in
-       "") : empty ok;;
-      $rsa) keyfile=`$postconf -nxh smtpd_tls_key_file`;;
-    $ecdsa) keyfile=`$postconf -nxh smtpd_tls_eckey_file`;;
+       rsa) if [ -n "${rsa}" ]; then
+               keyfile=`$postconf -nxh smtpd_tls_key_file`
+           else
+               keyfile=
+           fi
+           ;;
+     ecdsa) if [ -n "${ecdsa}" ]; then
+               keyfile=`$postconf -nxh smtpd_tls_eckey_file`
+           else
+               keyfile=
+           fi
+           ;;
+        "") : empty ok;;
+      none) : see below;;
+        /*) ;;
+         *) # User-specified key pathnames are relative to the configuration
+           # directory
+           keyfile="${config_directory}/${keyfile}";;
     esac
     if [ "${keyfile}" = "none" ]; then keyfile= ; fi
 }
@@ -681,8 +695,10 @@ ensure_key() {
 
     case $_algo in
        "") $FATAL "Internal error: empty algorithm "; return 1;;
-      $rsa) keyfile="key-${stamp}.pem";   certfile="cert-${stamp}.pem";;
-    $ecdsa) keyfile="eckey-${stamp}.pem"; certfile="eccert-${stamp}.pem";;
+      $rsa) keyfile="${config_directory}/key-${stamp}.pem"
+           certfile="${config_directory}/cert-${stamp}.pem";;
+    $ecdsa) keyfile="${config_directory}/eckey-${stamp}.pem"
+           certfile="${config_directory}/eccert-${stamp}.pem";;
         *) $FATAL "Internal error: bad algorithm '${_algo}'"
            return 1;;
     esac
@@ -1003,8 +1019,21 @@ deploy-server-cert)
            exit 1
        fi
        shift
-       deploy_server_cert "$@" || exit 1
-       info_server_deployed "$1" "$2" "deploy" | $INFO
+
+       # User-specified key and cert pathnames are relative to the
+       # configuration directory
+       #
+       case "${1}" in
+       /*) certfile="${1}" ;;
+        *) certfile="${config_directory}/${1}" ;;
+       esac
+       case "${2}" in
+       /*) certfile="${2}" ;;
+        *) certfile="${config_directory}/${2}" ;;
+       esac
+
+       deploy_server_cert "${certfile}" "${keyfile}" || exit 1
+       info_server_deployed "${certfile}" "${keyfile}" "deploy" | $INFO
        ;;
 
 output-server-csr)
index 104f661d111e4483e2e7a66fc96c56d8f6a38c80..06cd292a3b4c55473010949a92c07ea62c74f04e 100644 (file)
@@ -290,30 +290,31 @@ POSTCONF(1)                                                        POSTCONF(1)
                      ple:  "<b><a href="DATABASE_README.html#types">randmap</a>:{</b><i>result</i><b>_</b><i>1,  ...,  result</i><b>_</b><i>n</i><b>}</b>".  Each  table
                      query returns a random choice from the specified results.
                      The first and last characters  of  the  "<a href="DATABASE_README.html#types">randmap</a>:"  table
-                     name  must be "<b>{</b>" and "<b>}</b>".  Within these, individual maps
-                     are separated with comma or whitespace.
+                     name  must  be  "<b>{</b>"  and  "<b>}</b>".   Within these, individual
+                     results are separated with comma or whitespace. To give a
+                     specific result more weight, specify it multiple times.
 
               <b>regexp</b> (read-only)
-                     A lookup table based on  regular  expressions.  The  file
+                     A  lookup  table  based  on regular expressions. The file
                      format is described in <a href="regexp_table.5.html"><b>regexp_table</b>(5)</a>.
 
               <b>sdbm</b>   An indexed file type based on hashing.  Available on sys-
                      tems with support for SDBM databases.
 
               <b>socketmap</b> (read-only)
-                     Sendmail-style  socketmap  client.  The  table  name   is
-                     <b>inet</b>:<i>host</i>:<i>port</i>:<i>name</i>  for  a  TCP/IP server, or <b>unix</b>:<i>path-</i>
-                     <i>name</i>:<i>name</i> for a UNIX-domain server. This is described  in
+                     Sendmail-style   socketmap  client.  The  table  name  is
+                     <b>inet</b>:<i>host</i>:<i>port</i>:<i>name</i> for a TCP/IP  server,  or  <b>unix</b>:<i>path-</i>
+                     <i>name</i>:<i>name</i>  for a UNIX-domain server. This is described in
                      <a href="socketmap_table.5.html"><b>socketmap_table</b>(5)</a>.
 
               <b>sqlite</b> (read-only)
                      SQLite database. This is described in <a href="sqlite_table.5.html"><b>sqlite_table</b>(5)</a>.
 
               <b>static</b> (read-only)
-                     A  table  that  always returns its name as lookup result.
+                     A table that always returns its name  as  lookup  result.
                      For example, <b><a href="DATABASE_README.html#types">static</a>:foobar</b> always returns the string <b>foo-</b>
-                     <b>bar</b>  as lookup result. Specify "<b><a href="DATABASE_README.html#types">static</a>:{</b> <i>text with white-</i>
-                     <i>space</i> <b>}</b>" when the result contains whitespace;  this  form
+                     <b>bar</b> as lookup result. Specify "<b><a href="DATABASE_README.html#types">static</a>:{</b> <i>text with  white-</i>
+                     <i>space</i>  <b>}</b>"  when the result contains whitespace; this form
                      ignores whitespace after "<b>{</b>" and before "<b>}</b>". See also the
                      <i><a href="DATABASE_README.html#types">inline</a>:</i> map.
 
@@ -321,53 +322,53 @@ POSTCONF(1)                                                        POSTCONF(1)
                      TCP/IP client. The protocol is described in <a href="tcp_table.5.html"><b>tcp_table</b>(5)</a>.
 
               <b>texthash</b> (read-only)
-                     Produces  similar results as <a href="DATABASE_README.html#types">hash</a>: files, except that you
-                     don't need to run the <a href="postmap.1.html"><b>postmap</b>(1)</a> command before  you  can
-                     use  the  file, and that it does not detect changes after
+                     Produces similar results as <a href="DATABASE_README.html#types">hash</a>: files, except that  you
+                     don't  need  to run the <a href="postmap.1.html"><b>postmap</b>(1)</a> command before you can
+                     use the file, and that it does not detect  changes  after
                      the file is read.
 
               <b>unionmap</b> (read-only)
-                     A table that sends each query to multiple  lookup  tables
-                     and  that  concatenates  all  found results, separated by
+                     A  table  that sends each query to multiple lookup tables
+                     and that concatenates all  found  results,  separated  by
                      comma.  The table name syntax is the same as for <b>pipemap</b>.
 
               <b>unix</b> (read-only)
-                     A  limited  view of the UNIX authentication database. The
+                     A limited view of the UNIX authentication  database.  The
                      following tables are implemented:
 
                      <b>unix:passwd.byname</b>
-                            The table is the UNIX password database.  The  key
-                            is  a  login  name.  The result is a password file
+                            The  table  is the UNIX password database. The key
+                            is a login name.  The result is  a  password  file
                             entry in <b>passwd</b>(5) format.
 
                      <b>unix:group.byname</b>
                             The table is the UNIX group database. The key is a
-                            group  name.   The result is a group file entry in
+                            group name.  The result is a group file  entry  in
                             <b>group</b>(5) format.
 
-              Other table types may exist depending on how Postfix was  built.
+              Other  table types may exist depending on how Postfix was built.
 
-       <b>-M</b>     Show  <a href="master.5.html"><b>master.cf</b></a>  file contents instead of <a href="postconf.5.html"><b>main.cf</b></a> file contents.
+       <b>-M</b>     Show <a href="master.5.html"><b>master.cf</b></a> file contents instead of <a href="postconf.5.html"><b>main.cf</b></a>  file  contents.
               Specify <b>-Mf</b> to fold long lines for human readability.
 
               Specify zero or more arguments, each with a <i>service-name</i> or <i>ser-</i>
-              <i>vice-name/service-type</i>  pair,  where  <i>service-name</i>  is the first
-              field of a <a href="master.5.html">master.cf</a> entry and <i>service-type</i>  is  one  of  (<b>inet</b>,
+              <i>vice-name/service-type</i> pair, where  <i>service-name</i>  is  the  first
+              field  of  a  <a href="master.5.html">master.cf</a>  entry and <i>service-type</i> is one of (<b>inet</b>,
               <b>unix</b>, <b>fifo</b>, or <b>pass</b>).
 
-              If  <i>service-name</i> or <i>service-name/service-type</i> is specified, only
-              the matching <a href="master.5.html">master.cf</a> entries  will  be  output.  For  example,
-              "<b>postconf  -Mf  smtp</b>" will output all services named "smtp", and
-              "<b>postconf -Mf smtp/inet</b>" will output only the smtp service  that
-              listens  on  the network.  Trailing service type fields that are
+              If <i>service-name</i> or <i>service-name/service-type</i> is specified,  only
+              the  matching  <a href="master.5.html">master.cf</a>  entries  will  be output. For example,
+              "<b>postconf -Mf smtp</b>" will output all services named  "smtp",  and
+              "<b>postconf  -Mf smtp/inet</b>" will output only the smtp service that
+              listens on the network.  Trailing service type fields  that  are
               omitted will be handled as "*" wildcard fields.
 
               This feature is available with Postfix 2.9 and later. The syntax
-              was  changed  from  "<i>name.type</i>" to "<i>name/type</i>", and "*" wildcard
+              was changed from "<i>name.type</i>" to "<i>name/type</i>",  and  "*"  wildcard
               support was added with Postfix 2.11.
 
        <b>-n</b>     Show only configuration parameters that have explicit <i>name=value</i>
-              settings  in  <a href="postconf.5.html"><b>main.cf</b></a>.  Specify <b>-nf</b> to fold long lines for human
+              settings in <a href="postconf.5.html"><b>main.cf</b></a>.  Specify <b>-nf</b> to fold long lines  for  human
               readability (Postfix 2.9 and later).
 
        <b>-o</b> <i>name=value</i>
@@ -379,41 +380,41 @@ POSTCONF(1)                                                        POSTCONF(1)
 
               This feature is available with Postfix 2.11 and later.
 
-       <b>-P</b>     Show <a href="master.5.html"><b>master.cf</b></a> service parameter settings (by default  all  ser-
-              vices  and  all  parameters), formatted as "<i>service/type/parame-</i>
+       <b>-P</b>     Show  <a href="master.5.html"><b>master.cf</b></a>  service parameter settings (by default all ser-
+              vices and all parameters),  formatted  as  "<i>service/type/parame-</i>
               <i>ter=value</i>", one per line.  Specify <b>-Pf</b> to fold long lines.
 
-              Specify one or more "<i>service/type/parameter</i>"  instances  on  the
-              <a href="postconf.1.html"><b>postconf</b>(1)</a>  command  line  to limit the output to parameters of
-              interest.  Trailing parameter name or service type  fields  that
+              Specify  one  or  more "<i>service/type/parameter</i>" instances on the
+              <a href="postconf.1.html"><b>postconf</b>(1)</a> command line to limit the output  to  parameters  of
+              interest.   Trailing  parameter name or service type fields that
               are omitted will be handled as "*" wildcard fields.
 
               This feature is available with Postfix 2.11 and later.
 
        <b>-t</b> [<i>template</i><b>_</b><i>file</i>]
-              Display  the templates for text that appears at the beginning of
-              delivery status notification (DSN) messages,  without  expanding
+              Display the templates for text that appears at the beginning  of
+              delivery  status  notification (DSN) messages, without expanding
               $<b>name</b> expressions.
 
               To override the built-in templates, specify a template file name
-              at the end of the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line, or  specify  a  file
+              at  the  end  of the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line, or specify a file
               name in <a href="postconf.5.html"><b>main.cf</b></a> with the <b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a></b> parameter.
 
-              To  force  selection of the built-in templates, specify an empty
-              template file name on the <a href="postconf.1.html"><b>postconf</b>(1)</a>  command  line  (in  shell
+              To force selection of the built-in templates, specify  an  empty
+              template  file  name  on  the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line (in shell
               language: "").
 
               This feature is available with Postfix 2.3 and later.
 
        <b>-T</b> <i>mode</i>
-              If  Postfix  is compiled without TLS support, the <b>-T</b> option pro-
-              duces no output.  Otherwise, if an invalid  <i>mode</i>  is  specified,
-              the  <b>-T</b> option reports an error and exits with a non-zero status
+              If Postfix is compiled without TLS support, the <b>-T</b>  option  pro-
+              duces  no  output.   Otherwise, if an invalid <i>mode</i> is specified,
+              the <b>-T</b> option reports an error and exits with a non-zero  status
               code. The valid modes are:
 
               <b>compile-version</b>
                      Output the OpenSSL version that Postfix was compiled with
-                     (i.e.  the  OpenSSL version in a header file). The output
+                     (i.e. the OpenSSL version in a header file).  The  output
                      format is the same as with the command "<b>openssl version</b>".
 
               <b>run-version</b>
@@ -421,28 +422,28 @@ POSTCONF(1)                                                        POSTCONF(1)
                      runtime (i.e. the OpenSSL version in a shared library).
 
               <b>public-key-algorithms</b>
-                     Output the lower-case names of the  supported  public-key
+                     Output  the  lower-case names of the supported public-key
                      algorithms, one per-line.
 
               This feature is available with Postfix 3.1 and later.
 
-       <b>-v</b>     Enable  verbose  logging  for  debugging  purposes.  Multiple <b>-v</b>
+       <b>-v</b>     Enable verbose  logging  for  debugging  purposes.  Multiple  <b>-v</b>
               options make the software increasingly verbose.
 
-       <b>-x</b>     Expand <i>$name</i> in  <a href="postconf.5.html"><b>main.cf</b></a>  or  <a href="master.5.html"><b>master.cf</b></a>  parameter  values.  The
+       <b>-x</b>     Expand  <i>$name</i>  in  <a href="postconf.5.html"><b>main.cf</b></a>  or  <a href="master.5.html"><b>master.cf</b></a>  parameter values. The
               expansion is recursive.
 
               This feature is available with Postfix 2.10 and later.
 
-       <b>-X</b>     Edit  the  <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and remove the parameters
+       <b>-X</b>     Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and remove  the  parameters
               named on the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.  Specify a list of param-
               eter names, not "<i>name=value</i>" pairs.
 
-              With  <b>-M</b>,  edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and remove one
-              or more service entries as specified with "<i>service/type</i>" on  the
+              With <b>-M</b>, edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and  remove  one
+              or  more service entries as specified with "<i>service/type</i>" on the
               <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
 
-              With  <b>-P</b>,  edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and remove one
+              With <b>-P</b>, edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and  remove  one
               or more service parameter settings (-o parameter=value settings)
               as specied with "<i>service/type/parameter</i>" on the <a href="postconf.1.html"><b>postconf</b>(1)</a> com-
               mand line.
@@ -451,10 +452,10 @@ POSTCONF(1)                                                        POSTCONF(1)
               into place.  Specify quotes to protect special characters on the
               <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
 
-              There is no <a href="postconf.1.html"><b>postconf</b>(1)</a> command to perform  the  reverse  opera-
+              There  is  no  <a href="postconf.1.html"><b>postconf</b>(1)</a> command to perform the reverse opera-
               tion.
 
-              This  feature is available with Postfix 2.10 and later.  Support
+              This feature is available with Postfix 2.10 and later.   Support
               for -M and -P was added with Postfix 2.11.
 
        <b>-#</b>     Edit the <a href="postconf.5.html"><b>main.cf</b></a> configuration file, and comment out the parame-
@@ -462,18 +463,18 @@ POSTCONF(1)                                                        POSTCONF(1)
               eters revert to their default values.  Specify a list of parame-
               ter names, not "<i>name=value</i>" pairs.
 
-              With  <b>-M</b>, edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and comment out
-              one or more service entries as specified with "<i>service/type</i>"  on
+              With <b>-M</b>, edit the <a href="master.5.html"><b>master.cf</b></a> configuration file, and comment  out
+              one  or more service entries as specified with "<i>service/type</i>" on
               the <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
 
               In all cases the file is copied to a temporary file then renamed
               into place.  Specify quotes to protect special characters on the
               <a href="postconf.1.html"><b>postconf</b>(1)</a> command line.
 
-              There  is  no  <a href="postconf.1.html"><b>postconf</b>(1)</a> command to perform the reverse opera-
+              There is no <a href="postconf.1.html"><b>postconf</b>(1)</a> command to perform  the  reverse  opera-
               tion.
 
-              This feature is available with Postfix 2.6  and  later.  Support
+              This  feature  is  available with Postfix 2.6 and later. Support
               for -M was added with Postfix 2.11.
 
 <b>DIAGNOSTICS</b>
@@ -484,18 +485,18 @@ POSTCONF(1)                                                        POSTCONF(1)
               Directory with Postfix configuration files.
 
 <b>CONFIGURATION PARAMETERS</b>
-       The  following  <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant to this pro-
+       The following <a href="postconf.5.html"><b>main.cf</b></a> parameters are especially relevant to  this  pro-
        gram.
 
-       The text below provides only a parameter summary. See  <a href="postconf.5.html"><b>postconf</b>(5)</a>  for
+       The  text  below provides only a parameter summary. See <a href="postconf.5.html"><b>postconf</b>(5)</a> for
        more details including examples.
 
        <b><a href="postconf.5.html#config_directory">config_directory</a> (see 'postconf -d' output)</b>
-              The  default  location of the Postfix <a href="postconf.5.html">main.cf</a> and <a href="master.5.html">master.cf</a> con-
+              The default location of the Postfix <a href="postconf.5.html">main.cf</a> and  <a href="master.5.html">master.cf</a>  con-
               figuration files.
 
        <b><a href="postconf.5.html#bounce_template_file">bounce_template_file</a> (empty)</b>
-              Pathname of a configuration file with bounce message  templates.
+              Pathname  of a configuration file with bounce message templates.
 
 <b>FILES</b>
        /etc/postfix/<a href="postconf.5.html">main.cf</a>, Postfix configuration parameters
index 077b64d6eab28792b5dd7e885ef76770a9c73913..7c0f22694e83cf40ca79a904bc1e686edf8d4915 100644 (file)
@@ -832,7 +832,7 @@ case "$CC" in
 esac
 
 # Snapshot only.
-CCARGS="$CCARGS -DSNAPSHOT"
+#CCARGS="$CCARGS -DSNAPSHOT"
 
 # Non-production: needs thorough testing, or major changes are still
 # needed before the code stabilizes.
index a093b9aa90208ce2d2f89a76e07b2c3f618c05e4..e8eb1316f171796810efb30989c6e2b3c42dc8b6 100644 (file)
@@ -316,8 +316,9 @@ An in\-memory table that performs random selection. Example:
 "\fBrandmap:{\fIresult_1, ..., result_n\fB}\fR". Each table query
 returns a random choice from the specified results. The first
 and last characters of the "randmap:" table name must be
-"\fB{\fR" and "\fB}\fR".  Within these, individual maps are
-separated with comma or whitespace.
+"\fB{\fR" and "\fB}\fR".  Within these, individual results
+are separated with comma or whitespace. To give a specific
+result more weight, specify it multiple times.
 .IP "\fBregexp\fR (read\-only)"
 A lookup table based on regular expressions. The file format
 is described in \fBregexp_table\fR(5).
index 81fcc5d5617e3a182acbb9e3e6c16aac98eeba66..8e87a5e50eb7fde92d2bd3a8f40cc3f19878ba08 100644 (file)
@@ -381,6 +381,7 @@ dns_strtype.o: dns.h
 dns_strtype.o: dns_strtype.c
 test_dns_lookup.o: ../../include/argv.h
 test_dns_lookup.o: ../../include/check_arg.h
+test_dns_lookup.o: ../../include/mail_params.h
 test_dns_lookup.o: ../../include/msg.h
 test_dns_lookup.o: ../../include/msg_vstream.h
 test_dns_lookup.o: ../../include/myaddrinfo.h
index c65ac732edafb3bacabcfb4e89b206e34f46224e..c3fb5a43a940b141fceeb6f4ea3e4acf067df3fa 100644 (file)
@@ -225,7 +225,6 @@ extern int dns_lookup_rl(const char *, unsigned, DNS_RR **, VSTRING *,
                                 VSTRING *, int *, int,...);
 extern int dns_lookup_rv(const char *, unsigned, DNS_RR **, VSTRING *,
                                 VSTRING *, int *, int, unsigned *);
-extern int dns_ncache_ttl_fix_enable;
 
 #define dns_lookup(name, type, rflags, list, fqdn, why) \
     dns_lookup_x((name), (type), (rflags), (list), (fqdn), (why), (int *) 0, \
index ee5863bda1827f14cd5d6cf7fed0bafdc449585a..003fc39928b38498b62d17c1296ed4f458e336b6 100644 (file)
 #include <mymalloc.h>
 #include <argv.h>
 
+/* Global library. */
+
+#include <mail_params.h>
+
 /* Application-specific. */
 
 #include "dns.h"
@@ -86,7 +90,7 @@ int     main(int argc, char **argv)
            lflags |= DNS_REQ_FLAG_NCACHE_TTL;
            break;
        case 'p':
-           dns_ncache_ttl_fix_enable = 1;
+           var_dns_ncache_ttl_fix = 1;
            break;
        default:
            usage(argv);
index fd699debfbb86c5c1d19b8145e7cb4e9bb9122cd..9d84a25fe1baa398deaac4cfc4bb54b26a72671f 100644 (file)
@@ -20,8 +20,8 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20160214"
-#define MAIL_VERSION_NUMBER    "3.1"
+#define MAIL_RELEASE_DATE      "20160221"
+#define MAIL_VERSION_NUMBER    "3.1.0-RC1"
 
 #ifdef SNAPSHOT
 #define MAIL_VERSION_DATE      "-" MAIL_RELEASE_DATE
index 275a84893c8a66ec8bd658c594808f66fa928dc4..09397e1610525fbd9b45170d061e34bac3619343 100644 (file)
 /*     "\fBrandmap:{\fIresult_1, ..., result_n\fB}\fR". Each table query
 /*     returns a random choice from the specified results. The first
 /*     and last characters of the "randmap:" table name must be
-/*     "\fB{\fR" and "\fB}\fR".  Within these, individual maps are
-/*     separated with comma or whitespace.
+/*     "\fB{\fR" and "\fB}\fR".  Within these, individual results
+/*     are separated with comma or whitespace. To give a specific
+/*     result more weight, specify it multiple times.
 /* .IP "\fBregexp\fR (read-only)"
 /*     A lookup table based on regular expressions. The file format
 /*     is described in \fBregexp_table\fR(5).
index b04120f595dd4f8ff0029f4937ecf09a9b65a34d..74e42d720e3e295e4b795d3472a0b67b76441b6a 100644 (file)
@@ -934,6 +934,7 @@ static int PRINTFLIKE(5, 6) smtpd_acl_permit(SMTPD_STATE *state,
                                                     const char *reply_name,
                                                     const char *format,...)
 {
+    const char myname[] = "smtpd_acl_permit";
     va_list ap;
     const char *whatsup;
 
@@ -946,6 +947,9 @@ static int PRINTFLIKE(5, 6) smtpd_acl_permit(SMTPD_STATE *state,
     /*
      * First, find out if (and how) this permit action should be logged.
      */
+    if (msg_verbose)
+       msg_info("%s: checking %s settings", myname, VAR_SMTPD_ACL_PERM_LOG);
+
     if (state->defer_if_permit.active) {
        /* This action is overruled. Do not log. */
        whatsup = 0;
@@ -966,6 +970,9 @@ static int PRINTFLIKE(5, 6) smtpd_acl_permit(SMTPD_STATE *state,
            va_end(ap);
        }
        log_whatsup(state, whatsup, STR(error_text));
+    } else {
+       if (msg_verbose)
+           msg_info("%s: %s: no match", myname, VAR_SMTPD_ACL_PERM_LOG);
     }
     return (SMTPD_CHECK_OK);
 }