From: Wietse Venema Date: Sun, 2 Jan 2022 05:00:00 +0000 (-0500) Subject: postfix-3.7-20220102 X-Git-Tag: v3.7.0-RC1~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=275a4b815e2b2116344c9597b7366ce2795a30f4;p=thirdparty%2Fpostfix.git postfix-3.7-20220102 --- diff --git a/postfix/HISTORY b/postfix/HISTORY index 14dece592..73ab7d767 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -25930,6 +25930,13 @@ Apologies for any names omitted. Regression prevention: copied a queue file record typecheck from the pickup daemon. Files: *qmgr/qmgr_message.c. +20211115 + + Bugfix (introduced: 20210708): duplicate bounce_notice_recipient + entries in postconf output. The fix to send SMTP session + transcripts to bounce_notice_recipient was incomplete. + Reported by Vincent Lefevre. File: smtpd/smtpd.c. + 20211127 Feature: support for the pcre2 library (the legacy pcre @@ -25968,3 +25975,192 @@ Apologies for any names omitted. automatically authorize proxied maps inside pipemap (example: pipemap:{proxy:maptype:mapname, ...}) or inside unionmap. Problem reported by Mirko Vogt. Files: proxymap/proxymap.c. + +20211218 + + Typo fixes based on automated scans of C source code comments. + Verified that the .o files have not changed. Files: + bounce/bounce_notify_util.c, cleanup/cleanup_api.c, + cleanup/cleanup_message.c, dns/dns_lookup.c, flush/flush.c, + global/compat_level.c, global/db_common.c, + global/deliver_request.c, global/dict_ldap.c, global/dict_sqlite.c, + global/dynamicmaps.c, global/mail_conf_time.c, global/mail_copy.c, + global/mail_params.h, global/mail_proto.h, global/memcache_proto.c, + global/normalize_mailhost_addr.c, global/quote_822_local.c, + global/test_main.c, global/verify.c, global/verify_sender_addr.c, + local/unknown.c, master/dgram_server.c, master/event_server.c, + master/multi_server.c, master/single_server.c, + master/trigger_server.c, oqmgr/qmgr_entry.c, + postconf/postconf_dbms.c, postconf/postconf_master.c, + postconf/postconf_user.c, postdrop/postdrop.c, postmap/postmap.c, + postmulti/postmulti.c, postqueue/showq_compat.c, + postscreen/postscreen_smtpd.c, postscreen/postscreen_starttls.c, + posttls-finger/posttls-finger.c, proxymap/proxymap.c, + qmgr/qmgr_entry.c, qmqpd/qmqpd_peer.c, smtp/smtp.h, + smtp/smtp_proto.c, smtpd/smtpd_check.c, smtpd/smtpd_peer.c, + tls/tls_certkey.c, tls/tls_client.c, tls/tls_fprint.c, + tls/tls_misc.c, tls/tls_server.c, tlsmgr/tlsmgr.c, + tlsproxy/tlsproxy.c, trivial-rewrite/resolve.c, + trivial-rewrite/transport.c, trivial-rewrite/trivial-rewrite.c, + util/argv.c, util/dict_cache.c, util/dict_cdb.c, util/dict_file.c, + util/dict_random.c, util/dict_random.h, util/dict_thash.c, + util/dup2_pass_on_exec.c, util/edit_file.c, util/extpar.c, + util/gccw.c, util/mac_expand.c, util/mac_expand.h, + util/myaddrinfo.c, util/name_mask.c, util/sane_link.c, + util/sane_rename.c, util/unix_dgram_connect.c, + util/unix_dgram_listen.c, util/unix_pass_fd_fix.c, + util/vstring.c, xsasl/xsasl_dovecot_server.c. + + Typo fixes based on automated scans of other files. Files: + auxiliary/qshape/qshape.pl, conf/post-install, + conf/postmulti-script, makedefs, postfix-install, + proto/postconf.proto, TLS_ACKNOWLEDGEMENTS, TLS_CHANGES. + + Documentation: added a note to the cidr_table manpage that + with an inline CIDR map, "$" needs to be specified as "$$" + to avoid $name expansion surprises. File: proto/cidr_table. + +20211220 + + Bugfix (introduced: Postfix 2.5): off-by-one error while writing + a string terminator. This code had passed all memory corruption + tests, presumably because it wrote over an alignment padding byte, + or over an adjacent character byte that was never read. Reported + by Robert Siemer. Files: *qmgr/qmgr_feedback.c. + + Typo fixes from Raf, based on manual inspection. Verified + that the .o files have not changed. Files: conf/main.cf, + mantools/postlink, proto/ADDRESS_REWRITING_README.html, + proto/BACKSCATTER_README.html, + proto/BASIC_CONFIGURATION_README.html, proto/BDAT_README.html, + proto/BUILTIN_FILTER_README.html, proto/COMPATIBILITY_README.html, + proto/CONNECTION_CACHE_README.html, proto/DATABASE_README.html, + proto/DEBUG_README.html, proto/FORWARD_SECRECY_README.html, + proto/INSTALL.html, proto/IPV6_README.html, proto/LDAP_README.html, + proto/LINUX_README.html, proto/MAILLOG_README.html, + proto/MILTER_README.html, proto/MULTI_INSTANCE_README.html, + proto/MYSQL_README.html, proto/POSTSCREEN_3_5_README.html, + proto/POSTSCREEN_README.html, proto/QSHAPE_README.html, + proto/SASL_README.html, proto/SCHEDULER_README.html, + proto/SMTPD_ACCESS_README.html, proto/SMTPD_POLICY_README.html, + proto/SMTPD_PROXY_README.html, proto/SMTPUTF8_README.html, + proto/SQLITE_README.html, proto/STANDARD_CONFIGURATION_README.html, + proto/STRESS_README.html, proto/TLS_LEGACY_README.html, + proto/TLS_README.html, proto/TUNING_README.html, + proto/VIRTUAL_README.html, proto/access, proto/canonical, + proto/generic, proto/ldap_table, proto/master, proto/mysql_table, + proto/pgsql_table, proto/postconf.proto, proto/relocated, + proto/sqlite_table, proto/transport, proto/virtual, + global/mail_version.h, local/local.c, pipe/pipe.c, + postalias/postalias.c, postconf/postconf.c, postfix/postfix.c, + postmap/postmap.c, postmulti/postmulti.c, + posttls-finger/posttls-finger.c, sendmail/sendmail.c, + smtpstone/smtp-sink.c, tlsproxy/tlsproxy.c, + trivial-rewrite/trivial-rewrite.c, virtual/virtual.c. + +20211221 + + Documentation: reverted some postconf(5) changes from + "Specify a non-zero time value" to "Specify a non-negative + time value". File: proto/postconf.proto. + + Documentation: reverted "destination concurrency limit" to + "destination recipient limit". File: proto/SCHEDULER_README.html. + + Documentation: rephrased conditional $name expositions for + forward_path and command_execution_directory. File: + local/local.c. + + Documentation: added Postfix 3.0 syntax to postconf(5) + descriptions of command_execution_directory, default_rbl_reply, + forward_path, luser_relay, recipient_delimiter. File: + proto/postconf.proto. + + Documentation: updated descriptions of smtpd_error_sleep_time + and smtpd_soft_error_limit. File: proto/postconf.proto. + + Fixed non-UTF8 quotes in TLS_CHANGES that caused nvi to + truncate the file. + + Fixed a remaining typo in util/load_lib.c. + +20211222 + + Added a top-level 'make typo-check' target to automate + the typo checks (this only works on Wietse's development + system, because it depends on specific implementations of + spell and lynx). Files: Makefile.in, mantools/comment.c, + mantools/deroff, mantools/check-double-cc, + mantools/check-double-install-proto-text, + mantools/check-double-proto-html, mantools/check-spell-cc, + mantools/check-spell-install-proto-text, + mantools/check-spell-proto-html, proto/stop, proto/stop.double-cc, + proto/stop.double-install-proto-text, proto/stop.double-proto-html, + proto/stop.spell-cc, proto/stop.spell-proto-html. + + Cleanup: manpages don't need \' - that causes groff to emit + non-ASCII text (depending on the locale). Christian Goettsche. + Files: sendmail/sendmail.c, spawn/spawn.c. + +20211223 + + Report unsupported usage. Do not link Postfix database + plugins against libpostfix-util or libpostfix-global. This + introduces false build dependencies. File: makedefs. + + Report unsupported usage. Do not build with LD_LIBRARY_PATH. + File: makedefs. + + Documented the implementation-dependent mailbox_size_limit + and message_size_limit maximal values. File: proto/postconf.proto. + + Cleanup: make typo-check tests portable across differernt + spellcheck implementations. Files: proto/stop.spell-proto-html, + proto/stop.spell-cc. + + Cleanup: added missing parameters to the mantools/postlink + script, based on output from the mantools/check-postlink + script. + + Cleanup: added missing _maps parameter names to the + proxy_read_maps default value, based on output from the + mantools/missing-proxy-read-maps script. + File: global/mail_params.h. + + Sanity: added LANG=C to the typo-check scripts to get + consistent output. Files: mantools/check-spell-proto-html, + mantools/check-spell-install-proto-text, mantools/check-spell-cc, + mantools/check-double-proto-html, + mantools/check-double-install-proto-text, mantools/check-double-cc. + +20211224 + + Cleanup: some compilter complains about indentation in a + multiline macro. File: util/dict_db.c. + +20211231 + + Cleanup: informative error message after failure to connect + to 'dovecot' socket. File: src/xsasl/xsasl_dovecot_server.c. + +20220101 + + Cleanup: AppArmor may return EPERM for permission errors. + This could result in a false "mail system is down" error + message from the postqueue command. File: postqueue/postqueue.c. + +202220102 + + Cleanup: log the reason why the postqueue command thinks + that the mail system is down, in case some security software + or kernel bug emits a weird error. File: postqueue/postqueue.c. + + Robustness: randomize the initial state of Postfix in-memory + hash tables, to defend against collision attacks involving + a large number of attacker-chosen lookup keys. Presently, + the only known opportunity for such attacks involves remote + SMTP client IPv6 addresses in the anvil service. Other + tables with attacker-chosen lookup keys are limited in size. + The fix is cheap, and therefore implemented for all Postfix + in-memory hash tables. Problem reported by Pascal Junod. + File: util/htable.c. diff --git a/postfix/INSTALL b/postfix/INSTALL index 28a7e68a3..4ab046d40 100644 --- a/postfix/INSTALL +++ b/postfix/INSTALL @@ -331,7 +331,7 @@ install" or "make upgrade". # make upgrade meta_directory=/usr/libexec/postfix ... # make install meta_directory=/usr/libexec/postfix ... -As with the command "make makefiles, the command "make install/upgrade +As with the command "make makefiles", the command "make install/upgrade name=value..." will replace the string MAIL_VERSION at the end of a configuration parameter value with the Postfix release version. Do not try to specify something like $mail_version on this command line. This produces @@ -1088,6 +1088,7 @@ Finally, build the indexed aliases file with one of the following commands: # newaliases # sendmail -bi + # postalias /etc/aliases (pathname is system dependent!) 11 - To chroot or not to chroot diff --git a/postfix/Makefile.in b/postfix/Makefile.in index 65e7911d3..b2ad1842a 100644 --- a/postfix/Makefile.in +++ b/postfix/Makefile.in @@ -1,5 +1,5 @@ # To test with valgrind: -# make -i tests VALGRIND="valgrind --tool=memcheck --log-file=/some/where.%p" +# make -i tests NORANDOMIZE="" VALGRIND="valgrind --tool=memcheck --log-file=/some/where.%p" SHELL = /bin/sh WARN = -Wmissing-prototypes -Wformat -Wno-comment -fno-common OPTS = 'WARN=$(WARN)' @@ -114,7 +114,26 @@ manpages: (set -e; echo "[$$i]"; cd $$i; $(MAKE) -f Makefile.in $(OPTS) MAKELEVEL=) || exit 1; \ done = + 2) when Postfix should forward mail from only the local machine. - * Specify "mynetworks_style = subnet" (the default) when Postfix should - forward mail from SMTP clients in the same IP subnetworks as the local - machine. On Linux, this works correctly only with interfaces specified with - the "ifconfig" command. + * Specify "mynetworks_style = subnet" (the default when compatibility_level < + 2) when Postfix should forward mail from SMTP clients in the same IP + subnetworks as the local machine. On Linux, this works correctly only with + interfaces specified with the "ifconfig" or "ip" command. * Specify "mynetworks_style = class" when Postfix should forward mail from SMTP clients in the same IP class A/B/C networks as the local machine. diff --git a/postfix/README_FILES/BDAT_README b/postfix/README_FILES/BDAT_README index 124880409..6ed565ccd 100644 --- a/postfix/README_FILES/BDAT_README +++ b/postfix/README_FILES/BDAT_README @@ -119,6 +119,6 @@ Postfix's CHUNKING announcement as described above. In RFC 4468, the authors write that a client may pipeline commands, and that after sending BURL LAST or BDAT LAST, a client must wait for the server's -response. But as this text does not appear in RFC 3030 which defines BDAT, is -it a useless restriction that Postfix will not enforce. +response. But as this text does not appear in RFC 3030 which defines BDAT, it +is a useless restriction that Postfix will not enforce. diff --git a/postfix/README_FILES/BUILTIN_FILTER_README b/postfix/README_FILES/BUILTIN_FILTER_README index 5ed04169d..2ce639df5 100644 --- a/postfix/README_FILES/BUILTIN_FILTER_README +++ b/postfix/README_FILES/BUILTIN_FILTER_README @@ -300,9 +300,9 @@ CCoonnffiigguurriinngg hheeaaddeerr//bbooddyy cchheecc The following information applies to Postfix 2.1. Earlier Postfix versions do not support the receive_override_options feature. -If you are MX service provider and want to apply disable head/body checks for -some domains, you can configure ONE Postfix instance with multiple SMTP server -IP addresses in master.cf. Each address provides a different service. +If you are an MX service provider and want to enable header/body checks only +for some domains, you can configure ONE Postfix instance with multiple SMTP +server IP addresses in master.cf. Each address provides a different service. /etc/postfix.master.cf: # ================================================================= diff --git a/postfix/README_FILES/COMPATIBILITY_README b/postfix/README_FILES/COMPATIBILITY_README index 112063a62..55182b7f6 100644 --- a/postfix/README_FILES/COMPATIBILITY_README +++ b/postfix/README_FILES/COMPATIBILITY_README @@ -156,7 +156,7 @@ UUssiinngg bbaacckkwwaarrddss--ccoommppaattiibbllee dd The mynetworks_style default value has changed from "subnet" to "host". This parameter is used to implement the "permit_mynetworks" feature. The change -could in unexpected 'access denied' errors after Postfix is updated from an +could cause unexpected 'access denied' errors after Postfix is updated from an older version. The backwards-compatibility safety net is designed to prevent such surprises. diff --git a/postfix/README_FILES/CONNECTION_CACHE_README b/postfix/README_FILES/CONNECTION_CACHE_README index e1a0f07df..f578fb7d1 100644 --- a/postfix/README_FILES/CONNECTION_CACHE_README +++ b/postfix/README_FILES/CONNECTION_CACHE_README @@ -113,7 +113,7 @@ mail delivery request. Meanwhile, any smtp(8) client process can ask the scache The connection cache can be searched by destination domain name (the right-hand side of the recipient address) and by the IP address of the host at the other end of the connection. This allows Postfix to reuse a connection even when the -remote host is mail server for domains with different names. +remote host is a mail server for domains with different names. CCoonnnneeccttiioonn ccaacchhee ccoonnffiigguurraattiioonn diff --git a/postfix/README_FILES/DATABASE_README b/postfix/README_FILES/DATABASE_README index 99e10a755..3fd88c3e6 100644 --- a/postfix/README_FILES/DATABASE_README +++ b/postfix/README_FILES/DATABASE_README @@ -58,7 +58,7 @@ With some tables, however, Postfix needs to know only if the lookup key exists. Any non-empty lookup result value may be used here: the lookup result is not used. Examples are the local_recipient_maps that determine what local recipients Postfix accepts in mail from the network, the mydestination -parameter that specifies what domains Postfix delivers locally, or the +parameter that specifies what domains Postfix delivers locally for, or the mynetworks parameter that specifies the IP addresses of trusted clients or client networks. Technically, these are lists, not tables. Despite the difference, Postfix lists are described here because they use the same @@ -221,8 +221,8 @@ To find out what database types your Postfix system supports, use the "ppooss to create a database file for just a few fixed elements. See also the static: map type. iinntteerrnnaall - A non-shared, in-memory hash table. Its content are lost when a process - terminates. + A non-shared, in-memory hash table. Its contents are lost when a + process terminates. llmmddbb OpenLDAP LMDB database. This is available only on systems with support for LMDB databases. Public database files are created with the postmap diff --git a/postfix/README_FILES/DEBUG_README b/postfix/README_FILES/DEBUG_README index a277d9663..3a895c743 100644 --- a/postfix/README_FILES/DEBUG_README +++ b/postfix/README_FILES/DEBUG_README @@ -386,12 +386,12 @@ When reporting a problem, be sure to include the following information. o "ppoossttccoonnff --MMff" (Postfix 2.9 or later). - * Better, provide output from the ppoossttffiinnggeerr tool. This can be found at http: - //ftp.wl0.org/SOURCES/postfinger. + * Better, provide output from the ppoossttffiinnggeerr tool. This can be found at + https://github.com/ford--prefect/postfinger. * If the problem is SASL related, consider including the output from the - ssaassllffiinnggeerr tool. This can be found at http://postfix.state-of-mind.de/ - patrick.koetter/saslfinger/. + ssaassllffiinnggeerr tool. This can be found at https://packages.debian.org/ + search?keywords=sasl2-bin. * If the problem is about too much mail in the queue, consider including output from the qqsshhaappee tool, as described in the QSHAPE_README file. diff --git a/postfix/README_FILES/FORWARD_SECRECY_README b/postfix/README_FILES/FORWARD_SECRECY_README index 4615b89c1..3eb707cc8 100644 --- a/postfix/README_FILES/FORWARD_SECRECY_README +++ b/postfix/README_FILES/FORWARD_SECRECY_README @@ -121,7 +121,7 @@ Exchange servers and is not recommended for now. EEDDHH SSeerrvveerr ssuuppppoorrtt -Postfix >= 2.2 support 1024-bit-prime EDH out of the box, with no additional +Postfix >= 2.2 supports 1024-bit-prime EDH out of the box, with no additional configuration, but you may want to override the default prime to be 2048 bits long, and you may want to regenerate your primes periodically. See the quick- start section for details. With Postfix >= 3.1 the out of the box (compiled-in) @@ -153,7 +153,7 @@ recommended configuration to work around this issue. EEEECCDDHH SSeerrvveerr ssuuppppoorrtt -Postfix >= 2.6 support NIST P-256 EECDH when built with OpenSSL >= 1.0.0. When +Postfix >= 2.6 supports NIST P-256 EECDH when built with OpenSSL >= 1.0.0. When the remote SMTP client also supports EECDH and implements the P-256 curve, forward secrecy just works. @@ -412,7 +412,7 @@ with one of these prefixes. This pattern is likely to persist until some new key-exchange mechanism is invented that also supports forward secrecy. The actual key length and raw algorithm key length are generally the same with -non-export ciphers, but may they differ for the legacy export ciphers where the +non-export ciphers, but they may differ for the legacy export ciphers where the actual key is artificially shortened. Starting with TLS 1.3 the cipher name no longer contains enough information to diff --git a/postfix/README_FILES/INSTALL b/postfix/README_FILES/INSTALL index ae822b935..e9d4f0695 100644 --- a/postfix/README_FILES/INSTALL +++ b/postfix/README_FILES/INSTALL @@ -331,7 +331,7 @@ install" or "make upgrade". # make upgrade meta_directory=/usr/libexec/postfix ... # make install meta_directory=/usr/libexec/postfix ... -As with the command "make makefiles, the command "make install/upgrade +As with the command "make makefiles", the command "make install/upgrade name=value..." will replace the string MAIL_VERSION at the end of a configuration parameter value with the Postfix release version. Do not try to specify something like $mail_version on this command line. This produces @@ -1088,6 +1088,7 @@ Finally, build the indexed aliases file with one of the following commands: # newaliases # sendmail -bi + # postalias /etc/aliases (pathname is system dependent!) 1111 -- TToo cchhrroooott oorr nnoott ttoo cchhrroooott diff --git a/postfix/README_FILES/IPV6_README b/postfix/README_FILES/IPV6_README index df6ad7ac2..a29560c47 100644 --- a/postfix/README_FILES/IPV6_README +++ b/postfix/README_FILES/IPV6_README @@ -98,7 +98,7 @@ configuration work with Postfix. mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128 [fe80::]/10 [2001: 240:587::]/64 - If you did specify the mynetworks parameter value in main.cf, you need + If you did specify the mynetworks parameter value in main.cf, you need to update the mynetworks value to include the IPv6 networks the system is in. Be sure to specify IPv6 address information inside "[]", like this: diff --git a/postfix/README_FILES/LDAP_README b/postfix/README_FILES/LDAP_README index a6cb84e5e..eeef565a6 100644 --- a/postfix/README_FILES/LDAP_README +++ b/postfix/README_FILES/LDAP_README @@ -394,7 +394,7 @@ NNootteess aanndd tthhiinnggss ttoo tthhiinnkk aabboouu query_filter = (&(mailacceptinggeneralid=%s)(!(|(maildrop="*|*") (maildrop="*:*")(maildrop="*/*")))) - * And for that matter, even for aliases, you may not want users able to + * And for that matter, even for aliases, you may not want users to be able to specify their maildrops as programs, includes, etc. This might be particularly pertinent on a "sealed" server where they don't have local UNIX accounts, but exist only in LDAP and Cyrus. You might allow the fun diff --git a/postfix/README_FILES/LINUX_README b/postfix/README_FILES/LINUX_README index a8569c7bb..6330278a1 100644 --- a/postfix/README_FILES/LINUX_README +++ b/postfix/README_FILES/LINUX_README @@ -4,10 +4,10 @@ PPoossttffiixx aanndd LLiinnuuxx HHoosstt llooookkuupp iissssuueess -By default Linux /etc/hosts lookups do not support multiple IP address per +By default Linux /etc/hosts lookups do not support multiple IP addresses per hostname. This causes warnings from the Postfix SMTP server that "hostname XXX does not resolve to address YYY", and is especially a problem with hosts that -have both IPv4 and IPv6 addresses. To fix, turn on support for multiple IP +have both IPv4 and IPv6 addresses. To fix this, turn on support for multiple IP addresses: /etc/host.conf: @@ -42,7 +42,7 @@ file for further information. PPrrooccmmaaiill iissssuueess -On RedHat Linux 7.1 and later pprrooccmmaaiill no longer has permission to write the +On RedHat Linux 7.1 and later pprrooccmmaaiill no longer has permission to write to the mail spool directory. Workaround: # chmod 1777 /var/spool/mail diff --git a/postfix/README_FILES/MAILLOG_README b/postfix/README_FILES/MAILLOG_README index d0849bb73..ec63b96fe 100644 --- a/postfix/README_FILES/MAILLOG_README +++ b/postfix/README_FILES/MAILLOG_README @@ -73,7 +73,7 @@ implements the following steps: Notes: - * This command will not rotate a logfile with pathname under the /dev + * This command will not rotate a logfile with a pathname under the /dev directory, such as /dev/stdout. * This command does not (yet) remove old logfiles. @@ -86,7 +86,7 @@ Background: as well as non-daemon programs for local mail submission or Postfix management. - * Logging to Postfix logfile or stdout requires the Postfix postlogd(8) + * Logging to the Postfix logfile or stdout requires the Postfix postlogd(8) service. This ensures that simultaneous logging from different programs will not get mixed up. diff --git a/postfix/README_FILES/MILTER_README b/postfix/README_FILES/MILTER_README index 6cdea837d..9e866d4cc 100644 --- a/postfix/README_FILES/MILTER_README +++ b/postfix/README_FILES/MILTER_README @@ -163,7 +163,7 @@ The general syntax for listening sockets is as follows: Connect to the local UNIX-domain server that is bound to the specified pathname. If the smtpd(8) or cleanup(8) process runs chrooted, an absolute pathname is interpreted relative to the Postfix queue - directory. + directory. On many systems, llooccaall is a synonym for uunniixx iinneett::host::port Connect to the specified TCP port on the specified local or remote @@ -507,7 +507,7 @@ queue ID, sender, or recipient). To force a macro to be sent even when its value has not been updated, you may specify macro default values with the milter_macro_defaults parameter. Specify zero or more name=value pairs separated by comma or whitespace; you may even -specify macro names that Postfix does know about! +specify macro names that Postfix does not know about! WWoorrkkaarroouunnddss diff --git a/postfix/README_FILES/MULTI_INSTANCE_README b/postfix/README_FILES/MULTI_INSTANCE_README index 7e930f25c..1f261f6c0 100644 --- a/postfix/README_FILES/MULTI_INSTANCE_README +++ b/postfix/README_FILES/MULTI_INSTANCE_README @@ -196,7 +196,7 @@ running "make"), then start and test the null-client: testing EOF -The test message should be delivered the members of the "mtaadmin" address +The test message should be delivered to the members of the "mtaadmin" address group (or whatever address group you choose) with the following headers: From: mtaadmin+root=mta1@example.com @@ -294,7 +294,7 @@ injection SMTP service. Typical additions include: smtpd_relay_restrictions = smtpd_recipient_restrictions = permit_mynetworks, reject - # Tolerate occasional high latency in the content filter. + # Tolerate occasional high latency in the content filter. # smtpd_timeout = 1200s diff --git a/postfix/README_FILES/MYSQL_README b/postfix/README_FILES/MYSQL_README index c6633a918..5a728fb06 100644 --- a/postfix/README_FILES/MYSQL_README +++ b/postfix/README_FILES/MYSQL_README @@ -29,7 +29,6 @@ The Postfix MySQL client utilizes the mysql client library, which can be obtained from: http://www.mysql.com/downloads/ - http://sourceforge.net/projects/mysql/ In order to build Postfix with mysql map support, you will need to add - DHAS_MYSQL and -I for the directory containing the mysql headers, and the @@ -132,5 +131,5 @@ CCrreeddiittss configuration feature. * Liviu Daia with further refinements from Jose Luis Tallon and Victor Duchovni developed the common query, result_format, domain and - expansion_limit interface for LDAP, MySQL and PosgreSQL. + expansion_limit interface for LDAP, MySQL and PostgreSQL. diff --git a/postfix/README_FILES/POSTSCREEN_3_5_README b/postfix/README_FILES/POSTSCREEN_3_5_README index 4fb3d896b..ab67800be 100644 --- a/postfix/README_FILES/POSTSCREEN_3_5_README +++ b/postfix/README_FILES/POSTSCREEN_3_5_README @@ -195,9 +195,9 @@ weaker anti-spam policies than primary MX hosts). introduce a common point of failure. * First, configure the host to listen on both primary and backup MX - addresses. Use the appropriate ifconfig command for the local operating - system, or update the appropriate configuration files and "refresh" the - network protocol stack. + addresses. Use the appropriate ifconfig or ip command for the local + operating system, or update the appropriate configuration files and + "refresh" the network protocol stack. Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in main.cf). @@ -642,8 +642,9 @@ Notes: * Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" output shows "parametername = $ - {stress?something}${stress:something}"). Other parameters always evaluate - as if the stress value is the empty string. + {stress?something}${stress:something}" or "parametername = ${stress? + {something}:{something}}"). Other parameters always evaluate as if the + stress value is the empty string. * See "Tests before the 220 SMTP server greeting" for details about the logging from these postscreen(8) tests. diff --git a/postfix/README_FILES/POSTSCREEN_README b/postfix/README_FILES/POSTSCREEN_README index d4399043b..9467e68f6 100644 --- a/postfix/README_FILES/POSTSCREEN_README +++ b/postfix/README_FILES/POSTSCREEN_README @@ -202,9 +202,9 @@ weaker anti-spam policies than primary MX hosts). introduce a common point of failure. * First, configure the host to listen on both primary and backup MX - addresses. Use the appropriate ifconfig command for the local operating - system, or update the appropriate configuration files and "refresh" the - network protocol stack. + addresses. Use the appropriate ifconfig or ip command for the local + operating system, or update the appropriate configuration files and + "refresh" the network protocol stack. Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in main.cf). @@ -652,8 +652,9 @@ Notes: * Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" output shows "parametername = $ - {stress?something}${stress:something}"). Other parameters always evaluate - as if the stress value is the empty string. + {stress?something}${stress:something}" or "parametername = ${stress? + {something}:{something}}"). Other parameters always evaluate as if the + stress value is the empty string. * See "Tests before the 220 SMTP server greeting" for details about the logging from these postscreen(8) tests. diff --git a/postfix/README_FILES/QSHAPE_README b/postfix/README_FILES/QSHAPE_README index 311797a6f..eba722e13 100644 --- a/postfix/README_FILES/QSHAPE_README +++ b/postfix/README_FILES/QSHAPE_README @@ -68,11 +68,11 @@ sender domain distribution for captured spam in the "hold" queue: When the output is a terminal intermediate results showing the top 20 domains (-n option) are displayed after every 1000 messages (-N option) and the final output also shows only the top 20 domains. This makes qshape useful even when -the deferred queue is very large and it may otherwise take prohibitively long -to read the entire deferred queue. +the "deferred" queue is very large and it may otherwise take prohibitively long +to read the entire "deferred" queue. -By default, qshape shows statistics for the union of both the incoming and -active queues which are the most relevant queues to look at when analyzing +By default, qshape shows statistics for the union of both the "incoming" and +"active" queues which are the most relevant queues to look at when analyzing performance. One can request an alternate list of queues: @@ -80,8 +80,8 @@ One can request an alternate list of queues: $ qshape deferred $ qshape incoming active deferred -this will show the age distribution of the deferred queue or the union of the -incoming active and deferred queues. +this will show the age distribution of the "deferred" queue or the union of the +"incoming", "active" and "deferred" queues. Command line options control the number of display "buckets", the age limit for the smallest bucket, display of parent domain counts and so on. The "-h" option @@ -96,16 +96,16 @@ recipient counts, approximately when a burst of mail started, and when it stopped. The problem destinations or sender domains appear near the top left corner of -the output table. Remember that the active queue can accommodate up to 20000 +the output table. Remember that the "active" queue can accommodate up to 20000 ($qmgr_message_active_limit) messages. To check whether this limit has been reached, use: $ qshape -s active (show sender statistics) -If the total sender count is below 20000 the active queue is not yet saturated, -any high volume sender domains show near the top of the output. +If the total sender count is below 20000 the "active" queue is not yet +saturated, any high volume sender domains show near the top of the output. -With oqmgr(8) the active queue is also limited to at most 20000 recipient +With oqmgr(8) the "active" queue is also limited to at most 20000 recipient addresses ($qmgr_message_recipient_limit). To check for exhaustion of this limit use: @@ -142,19 +142,19 @@ forget to include the top 10 or 20 lines of qshape(1) output. EExxaammppllee 11:: HHeeaalltthhyy qquueeuuee -When looking at just the incoming and active queues, under normal conditions -(no congestion) the incoming and active queues are nearly empty. Mail leaves -the system almost as quickly as it comes in or is deferred without congestion -in the active queue. +When looking at just the "incoming" and "active" queues, under normal +conditions (no congestion) the "incoming" and "active" queues are nearly empty. +Mail leaves the system almost as quickly as it comes in or is deferred without +congestion in the "active" queue. - $ qshape (show incoming and active queue status) + $ qshape (show "incoming" and "active" queue status) T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 5 0 0 0 1 0 0 0 1 1 2 meri.uwasa.fi 5 0 0 0 1 0 0 0 1 1 2 -If one looks at the two queues separately, the incoming queue is empty or -perhaps briefly has one or two messages, while the active queue holds more +If one looks at the two queues separately, the "incoming" queue is empty or +perhaps briefly has one or two messages, while the "active" queue holds more messages and for a somewhat longer time: $ qshape incoming @@ -173,8 +173,8 @@ EExxaammppllee 22:: DDeeffeerrrreedd qquueeuuee ffuulll This is from a server where recipient validation is not yet available for some of the hosted domains. Dictionary attacks on the unvalidated domains result in bounce backscatter. The bounces dominate the queue, but with proper tuning they -do not saturate the incoming or active queues. The high volume of deferred mail -is not a direct cause for alarm. +do not saturate the "incoming" or "active" queues. The high volume of deferred +mail is not a direct cause for alarm. $ qshape deferred | head @@ -192,8 +192,8 @@ is not a direct cause for alarm. The domains shown are mostly bulk-mailers and all the volume is the tail end of the time distribution, showing that short term arrival rates are moderate. Larger numbers and lower message ages are more indicative of current trouble. -Old mail still going nowhere is largely harmless so long as the active and -incoming queues are short. We can also see that the groups.msn.com +Old mail still going nowhere is largely harmless so long as the "active" and +"incoming" queues are short. We can also see that the groups.msn.com undeliverables are low rate steady stream rather than a concentrated dictionary attack that is now over. @@ -215,7 +215,7 @@ messages are bounces. EExxaammppllee 33:: CCoonnggeessttiioonn iinn tthhee aaccttiivvee qquueeuuee This example is taken from a Feb 2004 discussion on the Postfix Users list. -Congestion was reported with the active and incoming queues large and not +Congestion was reported with the "active" and "incoming" queues large and not shrinking despite very large delivery agent process limits. The thread is archived at: http://groups.google.com/ groups?threadm=c0b7js$2r65$1@FreeBSD.csie.NCTU.edu.tw and http:// @@ -224,7 +224,7 @@ archives.neohapsis.com/archives/postfix/2004-02/thread.html#1371 Using an older version of qshape(1) it was quickly determined that all the messages were for just a few destinations: - $ qshape (show incoming and active queue status) + $ qshape (show "incoming" and "active" queue status) T A 5 10 20 40 80 160 320 320+ TOTAL 11775 9996 0 0 1 1 42 94 221 1420 @@ -232,10 +232,10 @@ messages were for just a few destinations: lists.sourceforge.net 2313 2313 0 0 0 0 0 0 0 0 gzd.gotdns.com 102 0 0 0 0 0 0 0 2 100 -The "A" column showed the count of messages in the active queue, and the -numbered columns showed totals for the deferred queue. At 10000 messages -(Postfix 1.x active queue size limit) the active queue is full. The incoming -was growing rapidly. +The "A" column showed the count of messages in the "active" queue, and the +numbered columns showed totals for the "deferred" queue. At 10000 messages +(Postfix 1.x "active" queue size limit) the "active" queue is full. The +"incoming" queue was growing rapidly. With the trouble destinations clearly identified, the administrator quickly found and fixed the problem. It is substantially harder to glean the same @@ -246,7 +246,7 @@ by looking at the queue one message at a time. EExxaammppllee 44:: HHiigghh vvoolluummee ddeessttiinnaattiioonn bbaacckklloogg When a site you send a lot of email to is down or slow, mail messages will -rapidly build up in the deferred queue, or worse, in the active queue. The +rapidly build up in the "deferred" queue, or worse, in the "active" queue. The qshape output will show large numbers for the destination domain in all age buckets that overlap the starting time of the problem: @@ -258,14 +258,14 @@ buckets that overlap the starting time of the problem: ... Here the "highvolume.com" destination is continuing to accumulate deferred -mail. The incoming and active queues are fine, but the deferred queue started -growing some time between 1 and 2 hours ago and continues to grow. +mail. The "incoming" and "active" queues are fine, but the "deferred" queue +started growing some time between 1 and 2 hours ago and continues to grow. If the high volume destination is not down, but is instead slow, one might see -similar congestion in the active queue. Active queue congestion is a greater -cause for alarm; one might need to take measures to ensure that the mail is -deferred instead or even add an access(5) rule asking the sender to try again -later. +similar congestion in the "active" queue. "Active" queue congestion is a +greater cause for alarm; one might need to take measures to ensure that the +mail is deferred instead or even add an access(5) rule asking the sender to try +again later. If a high volume destination exhibits frequent bursts of consecutive connections refused by all MX hosts or "421 Server busy errors", it is possible @@ -456,7 +456,7 @@ Congestion in this queue is indicative of an excessive local message submission rate or perhaps excessive CPU consumption in the cleanup(8) service due to excessive body_checks, or (Postfix >= 2.3) high latency milters. -Note, that once the active queue is full, the cleanup service will attempt to +Note, that once the "active" queue is full, the cleanup service will attempt to slow down message injection by pausing $in_flow_delay for each message. In this case "maildrop" queue congestion may be a consequence of congestion downstream, rather than a problem in its own right. @@ -504,18 +504,18 @@ and notifies the queue manager of new mail arrival. The queue manager ignores incomplete queue files whose mode is 0600, as these are still being written by cleanup. -The queue manager scans the incoming queue bringing any new mail into the -"active" queue if the active queue resource limits have not been exceeded. By -default, the active queue accommodates at most 20000 messages. Once the active -queue message limit is reached, the queue manager stops scanning the incoming -(and deferred, see below) queue. +The queue manager scans the "incoming" queue bringing any new mail into the +"active" queue if the "active" queue resource limits have not been exceeded. By +default, the "active" queue accommodates at most 20000 messages. Once the +"active" queue message limit is reached, the queue manager stops scanning the +"incoming" queue (and the "deferred" queue, see below). -Under normal conditions the incoming queue is nearly empty (has only mode 0600 -files), with the queue manager able to import new messages into the active -queue as soon as they become available. +Under normal conditions the "incoming" queue is nearly empty (has only mode +0600 files), with the queue manager able to import new messages into the +"active" queue as soon as they become available. -The incoming queue grows when the message input rate spikes above the rate at -which the queue manager can import messages into the active queue. The main +The "incoming" queue grows when the message input rate spikes above the rate at +which the queue manager can import messages into the "active" queue. The main factors slowing down the queue manager are disk I/O and lookup queries to the trivial-rewrite service. If the queue manager is routinely not keeping up, consider not using "slow" lookup services (MySQL, LDAP, ...) for transport @@ -540,8 +540,8 @@ but is not strong enough to deflect an excessive input rate from many sources at the same time. If a server is being hammered from multiple directions, consider raising the -in_flow_delay to 10 seconds, but only if the incoming queue is growing even -while the active queue is not full and the trivial-rewrite service is using a +in_flow_delay to 10 seconds, but only if the "incoming" queue is growing even +while the "active" queue is not full and the trivial-rewrite service is using a fast transport lookup mechanism. TThhee ""aaccttiivvee"" qquueeuuee @@ -549,8 +549,8 @@ TThhee ""aaccttiivvee"" qquueeuuee The queue manager is a delivery agent scheduler; it works to ensure fast and fair delivery of mail to all destinations within designated resource limits. -The active queue is somewhat analogous to an operating system's process run -queue. Messages in the active queue are ready to be sent (runnable), but are +The "active" queue is somewhat analogous to an operating system's process run +queue. Messages in the "active" queue are ready to be sent (runnable), but are not necessarily in the process of being sent (running). While most Postfix administrators think of the "active" queue as a directory on @@ -562,9 +562,9 @@ below) do not occupy memory; they are safely stored on disk waiting for their turn to be processed. The envelope information for messages in the "active" queue is managed in memory, allowing the queue manager to do global scheduling, allocating available delivery agent processes to an appropriate message in the -active queue. +"active" queue. -Within the active queue, (multi-recipient) messages are broken up into groups +Within the "active" queue, (multi-recipient) messages are broken up into groups of recipients that share the same transport/nexthop combination; the group size is capped by the transport's recipient concurrency limit. @@ -577,14 +577,14 @@ per-recipient concurrency limits rather than per-domain concurrency limits. Per-recipient limits are appropriate when performing final delivery to mailboxes rather than when relaying to a remote server. -Congestion occurs in the active queue when one or more destinations drain +Congestion occurs in the "active" queue when one or more destinations drain slower than the corresponding message input rate. -Input into the active queue comes both from new mail in the "incoming" queue, +Input into the "active" queue comes both from new mail in the "incoming" queue, and retries of mail in the "deferred" queue. Should the "deferred" queue get really large, retries of old mail can dominate the arrival rate of new mail. Systems with more CPU, faster disks and more network bandwidth can deal with -larger deferred queues, but as a rule of thumb the deferred queue scales to +larger "deferred" queues, but as a rule of thumb the "deferred" queue scales to somewhere between 100,000 and 1,000,000 messages with good performance unlikely above that "limit". Systems with queues this large should typically stop accepting new mail, or put the backlog "on hold" until the underlying issue is @@ -592,14 +592,14 @@ fixed (provided that there is enough capacity to handle just the new mail). When a destination is down for some time, the queue manager will mark it dead, and immediately defer all mail for the destination without trying to assign it -to a delivery agent. In this case the messages will quickly leave the active -queue and end up in the deferred queue (with Postfix < 2.4, this is done +to a delivery agent. In this case the messages will quickly leave the "active" +queue and end up in the "deferred" queue (with Postfix < 2.4, this is done directly by the queue manager, with Postfix >= 2.4 this is done via the "retry" delivery agent). When the destination is instead simply slow, or there is a problem causing an -excessive arrival rate the active queue will grow and will become dominated by -mail to the congested destination. +excessive arrival rate the "active" queue will grow and will become dominated +by mail to the congested destination. The only way to reduce congestion is to either reduce the input rate or increase the throughput. Increasing the throughput requires either increasing @@ -635,7 +635,7 @@ per second. The best way to avoid bottlenecks when one or more MX hosts is non-responsive is to use connection caching. Connection caching was introduced with Postfix 2.2 and is by default enabled on demand for destinations with a backlog of mail -in the active queue. When connection caching is in effect for a particular +in the "active" queue. When connection caching is in effect for a particular destination, established connections are re-used to send additional messages, this reduces the number of connections made per message delivery and maintains good throughput even in the face of partial unavailability of the destination's @@ -664,73 +664,75 @@ a separate delivery agent pool to these destinations and allows separate tuning of timeouts and concurrency limits. Another common cause of congestion is unwarranted flushing of the entire -deferred queue. The deferred queue holds messages that are likely to fail to be -delivered and are also likely to be slow to fail delivery (time out). As a -result the most common reaction to a large deferred queue (flush it!) is more -than likely counter-productive, and typically makes the congestion worse. Do -not flush the deferred queue unless you expect that most of its content has -recently become deliverable (e.g. relayhost back up after an outage)! +"deferred" queue. The "deferred" queue holds messages that are likely to fail +to be delivered and are also likely to be slow to fail delivery (time out). As +a result the most common reaction to a large "deferred" queue (flush it!) is +more than likely counter-productive, and typically makes the congestion worse. +Do not flush the "deferred" queue unless you expect that most of its content +has recently become deliverable (e.g. relayhost back up after an outage)! Note that whenever the queue manager is restarted, there may already be -messages in the active queue directory, but the "real" active queue in memory -is empty. In order to recover the in-memory state, the queue manager moves all -the active queue messages back into the incoming queue, and then uses its -normal incoming queue scan to refill the active queue. The process of moving -all the messages back and forth, redoing transport table (trivial-rewrite(8) -resolve service) lookups, and re-importing the messages back into memory is -expensive. At all costs, avoid frequent restarts of the queue manager (e.g. via -frequent execution of "postfix reload"). +messages in the "active" queue directory, but the "real" "active" queue in +memory is empty. In order to recover the in-memory state, the queue manager +moves all the "active" queue messages back into the "incoming" queue, and then +uses its normal "incoming" queue scan to refill the "active" queue. The process +of moving all the messages back and forth, redoing transport table (trivial- +rewrite(8) resolve service) lookups, and re-importing the messages back into +memory is expensive. At all costs, avoid frequent restarts of the queue manager +(e.g. via frequent execution of "postfix reload"). TThhee ""ddeeffeerrrreedd"" qquueeuuee When all the deliverable recipients for a message are delivered, and for some recipients delivery failed for a transient reason (it might succeed later), the -message is placed in the deferred queue. +message is placed in the "deferred" queue. -The queue manager scans the deferred queue periodically. The scan interval is -controlled by the queue_run_delay parameter. While a deferred queue scan is in -progress, if an incoming queue scan is also in progress (ideally these are -brief since the incoming queue should be short), the queue manager alternates +The queue manager scans the "deferred" queue periodically. The scan interval is +controlled by the queue_run_delay parameter. While a "deferred" queue scan is +in progress, if an "incoming" queue scan is also in progress (ideally these are +brief since the "incoming" queue should be short), the queue manager alternates between looking for messages in the "incoming" queue and in the "deferred" -queue. This "round-robin" strategy prevents starvation of either the incoming -or the deferred queues. +queue. This "round-robin" strategy prevents starvation of either the "incoming" +or the "deferred" queues. -Each deferred queue scan only brings a fraction of the deferred queue back into -the active queue for a retry. This is because each message in the deferred -queue is assigned a "cool-off" time when it is deferred. This is done by time- -warping the modification time of the queue file into the future. The queue file -is not eligible for a retry if its modification time is not yet reached. +Each "deferred" queue scan only brings a fraction of the "deferred" queue back +into the "active" queue for a retry. This is because each message in the +"deferred" queue is assigned a "cool-off" time when it is deferred. This is +done by time-warping the modification time of the queue file into the future. +The queue file is not eligible for a retry if its modification time is not yet +reached. The "cool-off" time is at least $minimal_backoff_time and at most $maximal_backoff_time. The next retry time is set by doubling the message's age in the queue, and adjusting up or down to lie within the limits. This means that young messages are initially retried more often than old messages. -If a high volume site routinely has large deferred queues, it may be useful to -adjust the queue_run_delay, minimal_backoff_time and maximal_backoff_time to +If a high volume site routinely has large "deferred" queues, it may be useful +to adjust the queue_run_delay, minimal_backoff_time and maximal_backoff_time to provide short enough delays on first failure (Postfix >= 2.4 has a sensibly low minimal backoff time by default), with perhaps longer delays after multiple failures, to reduce the retransmission rate of old messages and thereby reduce -the quantity of previously deferred mail in the active queue. If you want a +the quantity of previously deferred mail in the "active" queue. If you want a really low minimal_backoff_time, you may also want to lower queue_run_delay, but understand that more frequent scans will increase the demand for disk I/O. -One common cause of large deferred queues is failure to validate recipients at -the SMTP input stage. Since spammers routinely launch dictionary attacks from -unrepliable sender addresses, the bounces for invalid recipient addresses clog -the deferred queue (and at high volumes proportionally clog the active queue). -Recipient validation is strongly recommended through use of the +One common cause of large "deferred" queues is failure to validate recipients +at the SMTP input stage. Since spammers routinely launch dictionary attacks +from unrepliable sender addresses, the bounces for invalid recipient addresses +clog the "deferred" queue (and at high volumes proportionally clog the "active" +queue). Recipient validation is strongly recommended through use of the local_recipient_maps and relay_recipient_maps parameters. Even when bounces drain quickly they inundate innocent victims of forgery with unwanted email. To avoid this, do not accept mail for invalid recipients. When a host with lots of deferred mail is down for some time, it is possible -for the entire deferred queue to reach its retry time simultaneously. This can -lead to a very full active queue once the host comes back up. The phenomenon -can repeat approximately every maximal_backoff_time seconds if the messages are -again deferred after a brief burst of congestion. Perhaps, a future Postfix -release will add a random offset to the retry time (or use a combination of -strategies) to reduce the odds of repeated complete deferred queue flushes. +for the entire "deferred" queue to reach its retry time simultaneously. This +can lead to a very full "active" queue once the host comes back up. The +phenomenon can repeat approximately every maximal_backoff_time seconds if the +messages are again deferred after a brief burst of congestion. Perhaps, a +future Postfix release will add a random offset to the retry time (or use a +combination of strategies) to reduce the odds of repeated complete "deferred" +queue flushes. CCrreeddiittss diff --git a/postfix/README_FILES/SASL_README b/postfix/README_FILES/SASL_README index 0feebc7f5..94a377eab 100644 --- a/postfix/README_FILES/SASL_README +++ b/postfix/README_FILES/SASL_README @@ -558,8 +558,8 @@ The following is a summary of applicable smtpd.conf file entries: Specify ldapdb to enable the plugin. ldapdb_uri - Specify either ldapi:// for to connect over a UNIX-domain socket, ldap: - // for an unencrypted TCP connection or ldaps:// for an encrypted TCP + Specify either ldapi:// to connect over a UNIX-domain socket, ldap:/ + / for an unencrypted TCP connection, or ldaps:// for an encrypted TCP connection. ldapdb_id @@ -1134,14 +1134,14 @@ final resort. single MySQL database, and configure different Postfix queries to extract the appropriate information. - * Specify dbm instead of hash if your system uses dbm files instead of db + * Specify ddbbmm instead of hhaasshh if your system uses ddbbmm files instead of ddbb files. To find out what lookup tables Postfix supports, use the command - "postconf -m". + "ppoossttccoonnff --mm". - * Execute the command "postmap /etc/postfix/sasl_passwd" whenever you change + * Execute the command "ppoossttmmaapp //eettcc//ppoossttffiixx//ssaassll__ppaasssswwdd" whenever you change the sasl_passwd table. - * Execute the command "postmap /etc/postfix/sender_relay" whenever you change + * Execute the command "ppoossttmmaapp //eettcc//ppoossttffiixx//sseennddeerr__rreellaayy" whenever you change the sender_relay table. PPoossttffiixx SSMMTTPP//LLMMTTPP cclliieenntt ppoolliiccyy -- SSAASSLL mmeecchhaanniissmm pprrooppeerrttiieess @@ -1296,7 +1296,7 @@ NNoottee Postfix configuration a little more convenient because you don't have to specify the SASL plug-in type in the Postfix main.cf file (but this may cause surprises when you switch to a later Postfix version that is built - with the default SASL type of sasl). + with the default SASL type of cyrus). * If you also want support for LDAP or TLS (or for Cyrus SASL), you need to merge their CCARGS and AUXLIBS options into the above command line; see the diff --git a/postfix/README_FILES/SCHEDULER_README b/postfix/README_FILES/SCHEDULER_README index a6f7702ff..448ee0a79 100644 --- a/postfix/README_FILES/SCHEDULER_README +++ b/postfix/README_FILES/SCHEDULER_README @@ -496,7 +496,7 @@ This document is divided into sections as follows: TThhee ssttrruuccttuurreess uusseedd bbyy nnqqmmggrr Let's start by recapitulating the structures and terms used when referring to -queue manager and how it operates. Many of these are partially described +the queue manager and how it operates. Many of these are partially described elsewhere, but it is nice to have a coherent overview in one place: * Each message structure represents one mail message which Postfix is to @@ -512,8 +512,8 @@ elsewhere, but it is nice to have a coherent overview in one place: set of queues (describing the destinations it shall talk to) and jobs (referencing the messages it shall deliver). - * Each transport queue (not to be confused with the on-disk active queue or - incoming queue) groups everything what is going be delivered to given + * Each transport queue (not to be confused with the on-disk "active" queue or + "incoming" queue) groups everything what is going be delivered to given destination (aka nexthop) by its transport. Each queue belongs to one transport, so each destination may be referred to by several queues, one for each transport. Each queue maintains a list of all recipient entries @@ -547,17 +547,17 @@ description above anytime you'll feel you have lost a sense what is what. WWhhaatt hhaappppeennss wwhheenn nnqqmmggrr ppiicckkss uupp tthhee mmeessssaaggee -Whenever nqmgr moves a queue file into the active queue, the following happens: -It reads all necessary information from the queue file as oqmgr does, and also -reads as many recipients as possible - more on that later, for now let's just -pretend it always reads all recipients. +Whenever nqmgr moves a queue file into the "active" queue, the following +happens: It reads all necessary information from the queue file as oqmgr does, +and also reads as many recipients as possible - more on that later, for now +let's just pretend it always reads all recipients. Then it resolves the recipients as oqmgr does, which means obtaining (address, nexthop, transport) triple for each recipient. For each triple, it finds the transport; if it does not exist yet, it instantiates it (unless it's dead). -Within the transport, it finds the destination queue for given nexthop; if it -does not exist yet, it instantiates it (unless it's dead). The triple is then -bound to given destination queue. This happens in qmgr_resolve() and is +Within the transport, it finds the destination queue for the given nexthop; if +it does not exist yet, it instantiates it (unless it's dead). The triple is +then bound to given destination queue. This happens in qmgr_resolve() and is basically the same as in oqmgr. Then for each triple which was bound to some queue (and thus transport), the @@ -566,19 +566,19 @@ context; if it does not exist yet, it instantiates it. Within the job, it finds the peer which represents the bound destination queue within this jobs context; if it does not exist yet, it instantiates it. Finally, it stores the address from the resolved triple to the recipient entry which is appended to both the -queue entry list and the peer entry list. The addresses for same nexthop are -batched in the entries up to recipient_concurrency limit for that transport. -This happens in qmgr_assign() and apart from that it operates with job and peer -structures it is basically the same as in oqmgr. +queue entry list and the peer entry list. The addresses for the same nexthop +are batched in the entries up to the transport_destination_recipient_limit for +that transport. This happens in qmgr_message_assign(), and apart from that it +operates with job and peer structures, it is basically the same as in oqmgr. When the job is instantiated, it is enqueued on the transport's job list based on the time its message was picked up by nqmgr. For first batch of recipients this means it is appended to the end of the job list, but the ordering of the job list by the enqueue time is important as we will see shortly. -[Now you should have pretty good idea what is the state of the nqmgr after -couple of messages was picked up, what is the relation between all those job, -peer, queue and entry structures.] +[Now you should have a pretty good idea what the state of the nqmgr is after a +couple of messages were picked up, and what the relation is between all those +job, peer, queue and entry structures.] HHooww tthhee eennttrryy sseelleeccttiioonn wwoorrkkss @@ -606,9 +606,9 @@ job list is by default kept in the order the message was picked up by the nqmgr. So by default we get the top-level round-robin transport, and within each transport we get the FIFO message delivery. The round-robin of the peers by the destination is perhaps of little importance in most real-life cases -(unless the recipient_concurrency limit is reached, in one job there is only -one peer structure for each destination), but theoretically it makes sure that -even within single jobs, destinations are treated fairly. +(unless the transport_destination_recipient_limit is reached, in one job there +is only one peer structure for each destination), but theoretically it makes +sure that even within single jobs, destinations are treated fairly. [By now you should have a feeling you really know how the scheduler works, except for the preemption, under ideal conditions - that is, no recipient @@ -661,14 +661,14 @@ with more than one recipient? Say if we have one four-recipient mail followed by two two-recipient mails? The simple answer would be to use delivery sequence 12121313. But the problem -is that this does not scale well. Imagine you have mail with thousand -recipients followed by mail with hundred recipients. It is tempting to suggest -the delivery sequence like 121212...., but alas! Imagine there arrives another -mail with say ten recipients. But there are no free slots anymore, so it can't -slip by, not even if it had just only one recipients. It will be stuck until +is that this does not scale well. Imagine you have mail with a thousand +recipients followed by mail with a hundred recipients. It is tempting to +suggest the delivery sequence like 121212...., but alas! Imagine there arrives +another mail with say ten recipients. But there are no free slots anymore, so +it can't slip by, not even if it had only one recipient. It will be stuck until the hundred-recipient mail is delivered, which really sucks. -So, it becomes obvious that while inflating the message to get free slots is +So, it becomes obvious that while inflating the message to get free slots is a great idea, one has to be really careful of how the free slots are assigned, otherwise one might corner himself. So, how does nqmgr really use the free slots? @@ -689,30 +689,30 @@ slots, and then we could preempt it and sneak in the ten-recipient mail... Wait wait wait! Could we? Aren't we overinflating the original one thousand recipient mail? -Well, despite it looks so at the first glance, another trick will allow us to -answer "no, we are not!". If we had said that we will inflate the delivery time -twice at maximum, and then we consider every other slot as a free slot, then we -would overinflate in case of the recursive preemption. BUT! The trick is that -if we use only every n-th slot as a free slot for n>2, there is always some -worst inflation factor which we can guarantee not to be breached, even if we -apply the algorithm recursively. To be precise, if for every k>1 normally used -slots we accumulate one free delivery slot, than the inflation factor is not -worse than k/(k-1) no matter how many recursive preemptions happen. And it's -not worse than (k+1)/k if only non-recursive preemption happens. Now, having -got through the theory and the related math, let's see how nqmgr implements -this. +Well, despite the fact that it looks so at the first glance, another trick will +allow us to answer "no, we are not!". If we had said that we will inflate the +delivery time twice at maximum, and then we consider every other slot as a free +slot, then we would overinflate in case of the recursive preemption. BUT! The +trick is that if we use only every n-th slot as a free slot for n>2, there is +always some worst inflation factor which we can guarantee not to be breached, +even if we apply the algorithm recursively. To be precise, if for every k>1 +normally used slots we accumulate one free delivery slot, than the inflation +factor is not worse than k/(k-1) no matter how many recursive preemptions +happen. And it's not worse than (k+1)/k if only non-recursive preemption +happens. Now, having got through the theory and the related math, let's see how +nqmgr implements this. Each job has so called "available delivery slot" counter. Each transport has a transport_delivery_slot_cost parameter, which defaults to default_delivery_slot_cost parameter which is set to 5 by default. This is the k from the paragraph above. Each time k entries of the job are selected for delivery, this counter is incremented by one. Once there are some slots -accumulated, job which requires no more than that number of slots to be fully +accumulated, a job which requires no more than that number of slots to be fully delivered can preempt this job. [Well, the truth is, the counter is incremented every time an entry is selected -and it is divided by k when it is used. But for the understanding it's good -enough to use the above approximation of the truth.] +and it is divided by k when it is used. But to understand, it's good enough to +use the above approximation of the truth.] OK, so now we know the conditions which must be satisfied so one job can preempt another one. But what job gets preempted, how do we choose what job @@ -720,11 +720,11 @@ preempts it if there are several valid candidates, and when does all this exactly happen? The answer for the first part is simple. The job whose entry was selected the -last time is so called current job. Normally, it is the first job on the +last time is the so called current job. Normally, it is the first job on the scheduler's job list, but destination concurrency limits may change this as we will see later. It is always only the current job which may get preempted. -Now for the second part. The current job has certain amount of recipient +Now for the second part. The current job has a certain amount of recipient entries, and as such may accumulate at maximum some amount of available delivery slots. It might have already accumulated some, and perhaps even already used some when it was preempted before (remember a job can be preempted @@ -737,22 +737,22 @@ The answer is - the one with maximum enqueue_time/recipient_entry_count. That is, the older the job is, the more we should try to deliver it in order to get best message delivery rates. These rates are of course subject to how many recipients the message has, therefore the division by the recipient (entry) -count. No one shall be surprised that message with n recipients takes n times -longer to deliver than message with one recipient. +count. No one shall be surprised that a message with n recipients takes n times +longer to deliver than a message with one recipient. Now let's recap the previous two paragraphs. Isn't it too complicated? Why don't the candidates come only among the jobs which can be delivered within the number of slots the current job already accumulated? Why do we need to estimate how much it has yet to accumulate? If you found out the answer, congratulate yourself. If we did it this simple way, we would always choose the candidate -with least recipient entries. If there were enough single recipient mails +with the fewest recipient entries. If there were enough single recipient mails coming in, they would always slip by the bulk mail as soon as possible, and the -two and more recipients mail would never get a chance, no matter how long they +two or more recipients mail would never get a chance, no matter how long they have been sitting around in the job list. -This candidate selection has interesting implication - that when we choose the -best candidate for preemption (this is done in qmgr_choose_candidate()), it may -happen that we may not use it for preemption immediately. This leads to an +This candidate selection has an interesting implication - that when we choose +the best candidate for preemption (this is done in qmgr_choose_candidate()), it +may happen that we may not use it for preemption immediately. This leads to an answer to the last part of the original question - when does the preemption happen? @@ -760,23 +760,23 @@ The preemption attempt happens every time next transport's recipient entry is to be chosen for delivery. To avoid needless overhead, the preemption is not attempted if the current job could never accumulate more than transport_minimum_delivery_slots (defaults to default_minimum_delivery_slots -which defaults to 3). If there is already enough accumulated slots to preempt +which defaults to 3). If there are already enough accumulated slots to preempt the current job by the chosen best candidate, it is done immediately. This basically means that the candidate is moved in front of the current job on the scheduler's job list and decreasing the accumulated slot counter by the amount -used by the candidate. If there is not enough slots... well, I could say that +used by the candidate. If there are not enough slots... well, I could say that nothing happens and the another preemption is attempted the next time. But that's not the complete truth. The truth is that it turns out that it is not really necessary to wait until the jobs counter accumulates all the delivery slots in advance. Say we have ten-recipient mail followed by two two-recipient mails. If the preemption -happened when enough delivery slot accumulate (assuming slot cost 2), the +happened when enough delivery slots accumulate (assuming slot cost 2), the delivery sequence becomes 11112211113311. Now what would we get if we would wait only for 50% of the necessary slots to accumulate and we promise we would wait for the remaining 50% later, after we get back to the preempted job? If we -use such slot loan, the delivery sequence becomes 11221111331111. As we can -see, it makes it no considerably worse for the delivery of the ten-recipient +use such a slot loan, the delivery sequence becomes 11221111331111. As we can +see, it makes it not considerably worse for the delivery of the ten-recipient mail, but it allows the small messages to be delivered sooner. The concept of these slot loans is where the transport_delivery_slot_discount @@ -787,11 +787,11 @@ many percent (resp. how many slots) one "gets in advance", when the number of slots required to deliver the best candidate is compared with the number of slots the current slot had accumulated so far. -And it pretty much concludes this chapter. +And that pretty much concludes this chapter. [Now you should have a feeling that you pretty much understand the scheduler -and the preemption, or at least that you will have it after you read the last -chapter couple more times. You shall clearly see the job list and the +and the preemption, or at least that you will have after you read the last +chapter a couple more times. You shall clearly see the job list and the preemption happening at its head, in ideal delivery conditions. The feeling of understanding shall last until you start wondering what happens if some of the jobs are blocked, which you might eventually figure out correctly from what had @@ -805,17 +805,18 @@ The nqmgr uses the same algorithm for destination concurrency control as oqmgr. Now what happens when the destination limits are reached and no more entries for that destination may be selected by the scheduler? -From user's point of view it is all simple. If some of the peers of a job can't -be selected, those peers are simply skipped by the entry selection algorithm -(the pseudo-code described before) and only the selectable ones are used. If -none of the peers may be selected, the job is declared a "blocker job". Blocker -jobs are skipped by the entry selection algorithm and they are also excluded -from the candidates for preemption of current job. Thus the scheduler -effectively behaves as if the blocker jobs didn't exist on the job list at all. -As soon as at least one of the peers of a blocker job becomes unblocked (that -is, the delivery agent handling the delivery of the recipient entry for given -destination successfully finishes), the job's blocker status is removed and the -job again participates in all further scheduler actions normally. +From the user's point of view it is all simple. If some of the peers of a job +can't be selected, those peers are simply skipped by the entry selection +algorithm (the pseudo-code described before) and only the selectable ones are +used. If none of the peers may be selected, the job is declared a "blocker +job". Blocker jobs are skipped by the entry selection algorithm and they are +also excluded from the candidates for preemption of the current job. Thus the +scheduler effectively behaves as if the blocker jobs didn't exist on the job +list at all. As soon as at least one of the peers of a blocker job becomes +unblocked (that is, the delivery agent handling the delivery of the recipient +entry for the given destination successfully finishes), the job's blocker +status is removed and the job again participates in all further scheduler +actions normally. So the summary is that the users don't really have to be concerned about the interaction of the destination limits and scheduling algorithm. It works well @@ -844,8 +845,8 @@ are selected, and once they are all selected, job 1 continues. As we see, it's all very clean and straightforward. Now how does this change because of blockers? -The answer is: a lot. Any job may become blocker job at any time, and also -become normal job again at any time. This has several important implications: +The answer is: a lot. Any job may become a blocker job at any time, and also +become a normal job again at any time. This has several important implications: 1. The jobs may be completed in arbitrary order. For example, in the example above, if the current job 7 becomes blocked, the next job 4 may complete @@ -854,7 +855,7 @@ become normal job again at any time. This has several important implications: completed and only after that 4 becomes unblocked and is completed... You get the idea. - [Interesting side note: even when jobs are delivered out of order, from + [Interesting side note: even when jobs are delivered out of order, from a single destination's point of view the jobs are still delivered in the expected order (that is, FIFO unless there was some preemption involved). This is because whenever a destination queue becomes unblocked (the @@ -885,7 +886,7 @@ the point 3) example: jobs 7 and 8 preempt job 4, now job 8 becomes blocked too, then job 4 completes. Tricky, huh? If I illustrate the relations after the above mentioned examples (but those in -point 1)), the situation would look like this: +point 1), the situation would look like this: v- parent @@ -900,11 +901,11 @@ point 1)), the situation would look like this: Now how does nqmgr deal with all these complicated relations? Well, it maintains them all as described, but fortunately, all these relations -are necessary only for purposes of proper counting of available delivery slots. -For purposes of ordering the jobs for entry selection, the original rule still -applies: "the job preempting the current job is moved in front of the current -job on the job list". So for entry selection purposes, the job relations remain -as simple as this: +are necessary only for the purpose of proper counting of available delivery +slots. For the purpose of ordering the jobs for entry selection, the original +rule still applies: "the job preempting the current job is moved in front of +the current job on the job list". So for entry selection purposes, the job +relations remain as simple as this: 7--8--1--2--6--3--5--.. <- scheduler's job list order @@ -916,8 +917,8 @@ introduction to the problem domain. Otherwise I suggest you just forget about all this and stick with the user's point of view: the blocker jobs are simply ignored. -[By now, you should have a feeling that there is more things going under the -hood than you ever wanted to know. You decide that forgetting about this +[By now, you should have a feeling that there are more things going on under +the hood than you ever wanted to know. You decide that forgetting about this chapter is the best you can do for the sake of your mind's health and you basically stick with the idea how the scheduler works in ideal conditions, when there are no blockers, which is good enough.] @@ -925,25 +926,25 @@ there are no blockers, which is good enough.] DDeeaalliinngg wwiitthh mmeemmoorryy rreessoouurrccee lliimmiittss When discussing the nqmgr scheduler, we have so far assumed that all recipients -of all messages in the active queue are completely read into the memory. This -is simply not true. There is an upper bound on the amount of memory the nqmgr -may use, and therefore it must impose some limits on the information it may -store in the memory at any given time. +of all messages in the "active" queue are completely read into memory. This is +simply not true. There is an upper bound on the amount of memory the nqmgr may +use, and therefore it must impose some limits on the information it may store +in memory at any given time. First of all, not all messages may be read in-core at once. At any time, only qmgr_message_active_limit messages may be read in-core at maximum. When read -into memory, the messages are picked from the incoming and deferred message -queues and moved to the active queue (incoming having priority), so if there is -more than qmgr_message_active_limit messages queued in the active queue, the -rest will have to wait until (some of) the messages in the active queue are +into memory, the messages are picked from the "incoming" and "deferred" queues +and moved to the "active" queue (incoming having priority), so if there are +more than qmgr_message_active_limit messages queued in the "active" queue, the +rest will have to wait until (some of) the messages in the "active" queue are completely delivered (or deferred). Even with the limited amount of in-core messages, there is another limit which -must be imposed in order to avoid memory exhaustion. Each message may contain -huge amount of recipients (tens or hundreds of thousands are not uncommon), so -if nqmgr read all recipients of all messages in the active queue, it may easily -run out of memory. Therefore there must be some upper bound on the amount of -message recipients which are read into the memory at the same time. +must be imposed in order to avoid memory exhaustion. Each message may contain a +huge number of recipients (tens or hundreds of thousands are not uncommon), so +if nqmgr read all recipients of all messages in the "active" queue, it may +easily run out of memory. Therefore there must be some upper bound on the +amount of message recipients which are read into memory at the same time. Before discussing how exactly nqmgr implements the recipient limits, let's see how the sole existence of the limits themselves affects the nqmgr and its @@ -951,7 +952,7 @@ scheduler. The message limit is straightforward - it just limits the size of the lookahead the nqmgr's scheduler has when choosing which message can preempt the current -one. Messages not in the active queue simply are not considered at all. +one. Messages not in the "active" queue are simply not considered at all. The recipient limit complicates more things. First of all, the message reading code must support reading the recipients in batches, which among other things @@ -967,14 +968,14 @@ file, the scheduler can't operate with exact counts of recipient entries. With unread recipients, it is not clear how many recipient entries there will be, as they are subject to per-destination grouping. It is not even clear to what transports (and thus jobs) the recipients will be assigned. And with messages -coming from the deferred queue, it is not even clear how many unread recipients -are still to be delivered. This all means that the scheduler must use only -estimates of how many recipients entries there will be. Fortunately, it is -possible to estimate the minimum and maximum correctly, so the scheduler can -always err on the safe side. Obviously, the better the estimates, the better -results, so it is best when we are able to read all recipients in-core and turn -the estimates into exact counts, or at least try to read as many as possible to -make the estimates as accurate as possible. +coming from the "deferred" queue, it is not even clear how many unread +recipients are still to be delivered. This all means that the scheduler must +use only estimates of how many recipients entries there will be. Fortunately, +it is possible to estimate the minimum and maximum correctly, so the scheduler +can always err on the safe side. Obviously, the better the estimates, the +better the results, so it is best when we are able to read all recipients in- +core and turn the estimates into exact counts, or at least try to read as many +as possible to make the estimates as accurate as possible. The third complication is that it is no longer true that the scheduler is done with a job once all of its in-core recipients are delivered. It is possible @@ -987,9 +988,9 @@ And finally, the fourth complication is that the nqmgr code must somehow impose the recipient limit itself. Now how does it achieve it? Perhaps the easiest solution would be to say that each message may have at -maximum X recipients stored in-core, but such solution would be poor for +maximum X recipients stored in-core, but such a solution would be poor for several reasons. With reasonable qmgr_message_active_limit values, the X would -have to be quite low to maintain reasonable memory footprint. And with low X +have to be quite low to maintain a reasonable memory footprint. And with low X lots of things would not work well. The nqmgr would have problems to use the transport_destination_recipient_limit efficiently. The scheduler's preemption would be suboptimal as the recipient count estimates would be inaccurate. The @@ -997,28 +998,28 @@ message queue file would have to be accessed many times to read in more recipients again and again. Therefore it seems reasonable to have a solution which does not use a limit -imposed on per-message basis, but which maintains a pool of available recipient -slots, which can be shared among all messages in the most efficient manner. And -as we do not want separate transports to compete for resources whenever -possible, it seems appropriate to maintain such recipient pool for each -transport separately. This is the general idea, now how does it work in +imposed on a per-message basis, but which maintains a pool of available +recipient slots, which can be shared among all messages in the most efficient +manner. And as we do not want separate transports to compete for resources +whenever possible, it seems appropriate to maintain such a recipient pool for +each transport separately. This is the general idea, now how does it work in practice? -First we have to solve little chicken-and-egg problem. If we want to use the -per-transport recipient pools, we first need to know to what transport(s) is -the message assigned. But we will find that out only after we read in the -recipients first. So it is obvious that we first have to read in some -recipients, use them to find out to what transports is the message to be -assigned, and only after that we can use the per-transport recipient pools. +First we have to solve a little chicken-and-egg problem. If we want to use the +per-transport recipient pools, we first need to know to what transport(s) the +message is assigned. But we will find that out only after we first read in the +recipients. So it is obvious that we first have to read in some recipients, use +them to find out to what transports the message is to be assigned, and only +after that can we use the per-transport recipient pools. Now how many recipients shall we read for the first time? This is what qmgr_message_recipient_minimum and qmgr_message_recipient_limit values control. The qmgr_message_recipient_minimum value specifies how many recipients of each -message we will read for the first time, no matter what. It is necessary to -read at least one recipient before we can assign the message to a transport and -create the first job. However, reading only qmgr_message_recipient_minimum -recipients even if there are only few messages with few recipients in-core -would be wasteful. Therefore if there is less than qmgr_message_recipient_limit +message we will read the first time, no matter what. It is necessary to read at +least one recipient before we can assign the message to a transport and create +the first job. However, reading only qmgr_message_recipient_minimum recipients +even if there are only few messages with few recipients in-core would be +wasteful. Therefore if there are fewer than qmgr_message_recipient_limit recipients in-core so far, the first batch of recipients may be larger than qmgr_message_recipient_minimum - as large as is required to reach the qmgr_message_recipient_limit limit. @@ -1033,12 +1034,12 @@ recipient batch may be as large as the sum of all recipient slots of all jobs of the message permits (plus the qmgr_message_recipient_minimum amount which always applies). -For example, if a message has three jobs, first with 1 recipient still in-core -and 4 recipient slots, second with 5 recipient in-core and 5 recipient slots, -and third with 2 recipients in-core and 0 recipient slots, it has 1+5+2=7 -recipients in-core and 4+5+0=9 jobs' recipients slots in total. This means that -we could immediately read 2+qmgr_message_recipient_minimum more recipients of -that message in core. +For example, if a message has three jobs, the first with 1 recipient still in- +core and 4 recipient slots, the second with 5 recipients in-core and 5 +recipient slots, and the third with 2 recipients in-core and 0 recipient slots, +it has 1+5+2=8 recipients in-core and 4+5+0=9 jobs' recipients slots in total. +This means that we could immediately read 2+qmgr_message_recipient_minimum more +recipients of that message in core. The above example illustrates several things which might be worth mentioning explicitly: first, note that although the per-transport slots are assigned to @@ -1067,17 +1068,17 @@ job list does. More specifically, each time a job is created and appended to the job list, it gets all unused recipient slots from its transport's pool. It keeps them until all recipients of its message are read. When this happens, all unused recipient -slots are transferred to the next job (which is now in fact now first such job) +slots are transferred to the next job (which is now in fact the first such job) on the job list which still has some recipients unread, or eventually back to -the transport pool if there is no such job. Such transfer then also happens +the transport pool if there is no such job. Such a transfer then also happens whenever a recipient entry of that job is delivered. There is also a scenario when a job is not appended to the end of the job list -(for example it was created as a result of second or later recipient batch). +(for example it was created as a result of a second or later recipient batch). Then it works exactly as above, except that if it was put in front of the first unread job (that is, the job of a message which still has some unread -recipients in queue file), that job is first forced to return all of its unused -recipient slots to the transport pool. +recipients in the queue file), that job is first forced to return all of its +unused recipient slots to the transport pool. The algorithm just described leads to the following state: The first unread job on the job list always gets all the remaining recipient slots of that transport @@ -1087,22 +1088,22 @@ maximum as many slots as they still have recipients in-core (the maximum is there because of the sponsoring mentioned before) and the jobs after this job get nothing from the transport recipient pool (unless they got something before and then the first unread job was created and enqueued in front of them later - -in such case the also get at maximum as many slots as they have recipients in- -core). - -Things work fine in such state for most of the time, because the current job is -either completely read in-core or has as much recipient slots as there are, but -there is one situation which we still have to take care of specially. Imagine -if the current job is preempted by some unread job from the job list and there -are no more recipient slots available, so this new current job could read only -batches of qmgr_message_recipient_minimum recipients at a time. This would -really degrade performance. For this reason, each transport has extra pool of -transport_extra_recipient_limit recipient slots, dedicated exactly for this -situation. Each time an unread job preempts the current job, it gets half of -the remaining recipient slots from the normal pool and this extra pool. +in such a case, they also get at maximum as many slots as they have recipients +in-core). + +Things work fine in such a state for most of the time, because the current job +is either completely read in-core or has as many recipient slots as there are, +but there is one situation which we still have to take care of specially. +Imagine if the current job is preempted by some unread job from the job list +and there are no more recipient slots available, so this new current job could +read only batches of qmgr_message_recipient_minimum recipients at a time. This +would really degrade performance. For this reason, each transport has an extra +pool of transport_extra_recipient_limit recipient slots, dedicated exactly for +this situation. Each time an unread job preempts the current job, it gets half +of the remaining recipient slots from the normal pool and this extra pool. And that's it. It sure does sound pretty complicated, but fortunately most -people don't really have to care how exactly it works as long as it works. +people don't really have to care exactly how it works as long as it works. Perhaps the only important things to know for most people are the following upper bound formulas: @@ -1126,14 +1127,14 @@ The total amount of recipients in core is where the sum is over all used transports. -And this terribly complicated chapter concludes the documentation of nqmgr +And this terribly complicated chapter concludes the documentation of the nqmgr scheduler. [By now you should theoretically know the nqmgr scheduler inside out. In practice, you still hope that you will never have to really understand the last or last two chapters completely, and fortunately most people really won't. Understanding how the scheduler works in ideal conditions is more than good -enough for vast majority of users.] +enough for the vast majority of users.] CCrreeddiittss diff --git a/postfix/README_FILES/SMTPD_ACCESS_README b/postfix/README_FILES/SMTPD_ACCESS_README index a4d7c208a..7477a3685 100644 --- a/postfix/README_FILES/SMTPD_ACCESS_README +++ b/postfix/README_FILES/SMTPD_ACCESS_README @@ -160,8 +160,9 @@ Each restriction list is evaluated from left to right until some restriction produces a result of PERMIT, REJECT or DEFER (try again later). The end of each list is equivalent to a PERMIT result. By placing a PERMIT restriction before a REJECT restriction you can make exceptions for specific clients or users. This -is called allowlisting; the fourth example above allows mail from local -networks but otherwise rejects mail to arbitrary destinations. +is called allowlisting; the smtpd_relay_restrictions example above allows mail +from local networks, and from SASL authenticated clients, but otherwise rejects +mail to arbitrary destinations. The table below summarizes the purpose of each SMTP access restriction list. All lists use the exact same syntax; they differ only in the time of evaluation diff --git a/postfix/README_FILES/SMTPD_POLICY_README b/postfix/README_FILES/SMTPD_POLICY_README index 6386b0ec5..291fa5c87 100644 --- a/postfix/README_FILES/SMTPD_POLICY_README +++ b/postfix/README_FILES/SMTPD_POLICY_README @@ -201,7 +201,7 @@ The first example specifies that the policy server listens on a TCP socket at 127.0.0.1 port 9998. The second example specifies an absolute pathname of a UNIX-domain socket. The third example specifies a pathname relative to the Postfix queue directory; use this for policy servers that are spawned by the -Postfix master daemon. +Postfix master daemon. On many systems, "local" is a synonym for "unix". To create a policy service that listens on a UNIX-domain socket called "policy", and that runs under control of the Postfix spawn(8) daemon, you would @@ -240,7 +240,7 @@ NOTES: * Line 11: this increases the time that a policy server process may run to 3600 seconds. The default time limit of 1000 seconds is too short; the - policy daemon needs to run long as the SMTP server process that talks to + policy daemon needs to run as long as the SMTP server process that talks to it. See the spawn(8) manpage for more information about the transport_time_limit parameter. @@ -432,8 +432,8 @@ Notes: * Line 6: this increases the time that a greylist server process may run to 3600 seconds. The default time limit of 1000 seconds is too short; the - greylist daemon needs to run long as the SMTP server process that talks to - it. See the spawn(8) manpage for more information about the + greylist daemon needs to run as long as the SMTP server process that talks + to it. See the spawn(8) manpage for more information about the transport_time_limit parameter. * Line 9: reject_unauth_destination is not needed here if the mail relay @@ -470,8 +470,9 @@ GGrreeyylliissttiinngg mmaaiill ffrroomm ffrreeqquueen It is relatively safe to turn on greylisting for specific domains that often appear in forged email. At some point in cyberspace/time a list of frequently -forged MAIL FROM domains could be found at http://www.monkeys.com/anti-spam/ -filtering/sender-domain-validate.in. +forged MAIL FROM domains could be found at https://web.archive.org/web/ +20080526153208/http://www.monkeys.com/anti-spam/filtering/sender-domain- +validate.in. 1 /etc/postfix/main.cf: 2 smtpd_recipient_restrictions = diff --git a/postfix/README_FILES/SMTPD_PROXY_README b/postfix/README_FILES/SMTPD_PROXY_README index f2cd530d4..a3707ea4c 100644 --- a/postfix/README_FILES/SMTPD_PROXY_README +++ b/postfix/README_FILES/SMTPD_PROXY_README @@ -102,8 +102,9 @@ From then on mail is processed as usual. The content filter itself is not described here. You can use any filter that is SMTP enabled. For non-SMTP capable content filtering software, Bennett Todd's -SMTP proxy implements a nice Perl-based framework. See: http:// -bent.latency.net/smtpprox/ or https://github.com/jnorell/smtpprox. +SMTP proxy implements a nice Perl-based framework. See: https:// +web.archive.org/web/20151022025756/http://bent.latency.net/smtpprox/ or https:/ +/github.com/jnorell/smtpprox/ Postfix Postfix filter on SMTP server Postfix Postfix @@ -197,9 +198,9 @@ The after-filter SMTP server is a new master.cf entry: By default, the filter has 100 seconds to do its work. If it takes longer then Postfix gives up and reports an error to the remote SMTP client. You can -increase this time limit (see configuration parameter section below) but doing -so is pointless because you can't control when the remote SMTP client times -out. +increase this time limit (see the "Configuration parameters" section below) but +doing so is pointless because you can't control when the remote SMTP client +times out. CCoonnffiigguurraattiioonn ppaarraammeetteerrss diff --git a/postfix/README_FILES/SMTPUTF8_README b/postfix/README_FILES/SMTPUTF8_README index 5496a3b0d..9e7970e72 100644 --- a/postfix/README_FILES/SMTPUTF8_README +++ b/postfix/README_FILES/SMTPUTF8_README @@ -173,7 +173,7 @@ This section applies only to systems that have SMTPUTF8 support turned on For compatibility with pre-SMTPUTF8 environments, Postfix does not automatically set the "SMTPUTF8 requested" flag on messages from non-SMTPUTF8 -clients that contain an UTF-8 header value or UTF-8 address localpart. This +clients that contain a UTF-8 header value or UTF-8 address localpart. This would make such messages undeliverable to non-SMTPUTF8 servers, and could be a barrier to SMTPUTF8 adoption. diff --git a/postfix/README_FILES/SOHO_README b/postfix/README_FILES/SOHO_README index 3804b9da2..bbba7c210 100644 --- a/postfix/README_FILES/SOHO_README +++ b/postfix/README_FILES/SOHO_README @@ -73,8 +73,8 @@ addresses by valid Internet addresses. This mapping happens ONLY when mail leaves the machine; not when you send mail between users on the same machine. The following example presents additional configuration. You need to combine -this with basic configuration information as discussed the first half of this -document. +this with basic configuration information as discussed in the first half of +this document. 1 /etc/postfix/main.cf: 2 smtp_generic_maps = hash:/etc/postfix/generic @@ -109,8 +109,8 @@ fantasy addresses, including mail to local fantasy addresses that don't have a valid Internet address of their own. The following example presents additional configuration. You need to combine -this with basic configuration information as discussed the first half of this -document. +this with basic configuration information as discussed in the first half of +this document. 1 /etc/postfix/main.cf: 2 myhostname = hostname.localdomain @@ -276,13 +276,13 @@ final resort. single MySQL database, and configure different Postfix queries to extract the appropriate information. - * Specify dbm instead of hash if your system uses dbm files instead of db + * Specify ddbbmm instead of hhaasshh if your system uses ddbbmm files instead of ddbb files. To find out what lookup tables Postfix supports, use the command - "postconf -m". + "ppoossttccoonnff --mm". - * Execute the command "postmap /etc/postfix/sasl_passwd" whenever you change + * Execute the command "ppoossttmmaapp //eettcc//ppoossttffiixx//ssaassll__ppaasssswwdd" whenever you change the sasl_passwd table. - * Execute the command "postmap /etc/postfix/sender_relay" whenever you change + * Execute the command "ppoossttmmaapp //eettcc//ppoossttffiixx//sseennddeerr__rreellaayy" whenever you change the sender_relay table. diff --git a/postfix/README_FILES/SQLITE_README b/postfix/README_FILES/SQLITE_README index 3fb9757c5..7f668dea4 100644 --- a/postfix/README_FILES/SQLITE_README +++ b/postfix/README_FILES/SQLITE_README @@ -65,12 +65,6 @@ dbpath = /some/path/to/sqlite_database # See sqlite_table(5) for details. query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid' -AAddddiittiioonnaall nnootteess - -The SQLite configuration interface setup allows for multiple sqlite databases: -you can use one for a virtual table, one for an access table, and one for an -aliases table if you want. - CCrreeddiittss SQLite support was added with Postfix version 2.8. diff --git a/postfix/README_FILES/STANDARD_CONFIGURATION_README b/postfix/README_FILES/STANDARD_CONFIGURATION_README index ceb18fce8..ca188fe2b 100644 --- a/postfix/README_FILES/STANDARD_CONFIGURATION_README +++ b/postfix/README_FILES/STANDARD_CONFIGURATION_README @@ -113,7 +113,7 @@ As usual, the examples show only parameters that are not left at their default settings. First we present the non-mailhost configuration, because it is the simpler one. -This machine sends mail as "user@example.com" and is final destination for +This machine sends mail as "user@example.com" and is the final destination for "user@hostname.example.com". 1 /etc/postfix/main.cf: @@ -135,8 +135,8 @@ Translation: below, "Postfix behind a firewall". Next we present the mailhost configuration. This machine sends mail as -"user@example.com" and is final destination for "user@hostname.example.com" as -well as "user@example.com". +"user@example.com" and is the final destination for "user@hostname.example.com" +as well as "user@example.com". 1 DNS: 2 example.com IN MX 10 mailhost.example.com. @@ -238,7 +238,7 @@ Translation: literals matching $inet_interfaces or $proxy_interfaces are deemed local. So "localpart@[a.d.d.r]" can be matched as simply "localpart" in canonical (5) and virtual(5). This avoids the need to specify firewall IP addresses - into Postfix configuration files. + in Postfix configuration files. The last part of the solution does the email forwarding, which is the real purpose of the firewall email function. @@ -348,8 +348,8 @@ Note: this example requires Postfix version 2.0 and later. To find out what Postfix version you have, execute the command "ppoossttccoonnff mmaaiill__vveerrssiioonn". The following example presents additional configuration. You need to combine -this with basic configuration information as discussed the first half of this -document. +this with basic configuration information as discussed in the first half of +this document. 1 /etc/postfix/main.cf: 2 transport_maps = hash:/etc/postfix/transport @@ -386,7 +386,8 @@ transport table. CCoonnffiigguurriinngg PPoossttffiixx aass pprriimmaarryy oorr bbaacckkuupp MMXX hhoosstt ffoorr aa rreemmoottee ssiittee This section presents additional configuration. You need to combine this with -basic configuration information as discussed the first half of this document. +basic configuration information as discussed in the first half of this +document. When your system is SECONDARY MX host for a remote site this is all you need: @@ -472,7 +473,8 @@ This section applies to dialup connections that are down most of the time. For dialup connections that are up 24x7, see the local area network section above. This section presents additional configuration. You need to combine this with -basic configuration information as discussed the first half of this document. +basic configuration information as discussed in the first half of this +document. If you do not have your own hostname and IP address (usually with dialup, cable TV or DSL connections) then you should also study the section on "Postfix on @@ -553,8 +555,8 @@ addresses by valid Internet addresses. This mapping happens ONLY when mail leaves the machine; not when you send mail between users on the same machine. The following example presents additional configuration. You need to combine -this with basic configuration information as discussed the first half of this -document. +this with basic configuration information as discussed in the first half of +this document. 1 /etc/postfix/main.cf: 2 smtp_generic_maps = hash:/etc/postfix/generic @@ -589,8 +591,8 @@ fantasy addresses, including mail to local fantasy addresses that don't have a valid Internet address of their own. The following example presents additional configuration. You need to combine -this with basic configuration information as discussed the first half of this -document. +this with basic configuration information as discussed in the first half of +this document. 1 /etc/postfix/main.cf: 2 myhostname = hostname.localdomain diff --git a/postfix/README_FILES/STRESS_README b/postfix/README_FILES/STRESS_README index 79d113a55..8edc148e4 100644 --- a/postfix/README_FILES/STRESS_README +++ b/postfix/README_FILES/STRESS_README @@ -410,7 +410,7 @@ OOtthheerr mmeeaassuurreess ttoo ooffff--llooaadd zzoom The postscreen(8) daemon, introduced with Postfix 2.8, provides additional protection against mail server overload. One postscreen(8) process handles -multiple inbound SMTP connections, and decides which clients may to talk to a +multiple inbound SMTP connections, and decides which clients may talk to a Postfix SMTP server process. By keeping spambots away, postscreen(8) leaves more SMTP server processes available for legitimate clients, and delays the onset of server overload conditions. diff --git a/postfix/README_FILES/TLS_LEGACY_README b/postfix/README_FILES/TLS_LEGACY_README index 1a18bc531..f4dae6b00 100644 --- a/postfix/README_FILES/TLS_LEGACY_README +++ b/postfix/README_FILES/TLS_LEGACY_README @@ -126,7 +126,7 @@ SSeerrvveerr--ssiiddee cceerrttiiffiiccaattee aanndd p In order to use TLS, the Postfix SMTP server needs a certificate and a private key. Both must be in "pem" format. The private key must not be encrypted, -meaning: the key must be accessible without password. Both certificate and +meaning: the key must be accessible without a password. Both certificate and private key may be in the same file. Both RSA and DSA certificates are supported. Typically you will only have RSA @@ -147,7 +147,7 @@ with: % ccaatt sseerrvveerr__cceerrtt..ppeemm iinntteerrmmeeddiiaattee__CCAA..ppeemm >> sseerrvveerr..ppeemm -A Postfix SMTP server certificate supplied here must be usable as SSL server +A Postfix SMTP server certificate supplied here must be usable as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test. A client that trusts the root CA has a local copy of the root CA certificate, @@ -410,8 +410,8 @@ server access control: The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special -CA issues the client certificates, and only if this CA is listed as trusted CA. -If other CAs are trusted, any owner of a valid client certificate would be +CA issues the client certificates, and only if this CA is listed as a trusted +CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server. @@ -447,9 +447,9 @@ Example: SSeerrvveerr--ssiiddee cciipphheerr ccoonnttrroollss To influence the Postfix SMTP server cipher selection scheme, you can give -cipherlist string. A detailed description would go to far here; please refer to -the OpenSSL documentation. If you don't know what to do with it, simply don't -touch it and leave the (openssl-)compiled in default! +cipherlist string. A detailed description would go too far here; please refer +to the OpenSSL documentation. If you don't know what to do with it, simply +don't touch it and leave the (openssl-)compiled in default! DO NOT USE " to enclose the string, specify just the string!!! @@ -520,8 +520,8 @@ time, in which case the cipher used determines which certificate is presented. It is possible for the Postfix SMTP client to use the same key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "pem" format. The private key must not be encrypted, meaning: it must be -accessible without password. Both parts (certificate and private key) may be in -the same file. +accessible without a password. Both parts (certificate and private key) may be +in the same file. In order for remote SMTP servers to verify the Postfix SMTP client certificates, the CA certificate (in case of a certificate chain, all CA @@ -534,7 +534,7 @@ with: % ccaatt cclliieenntt__cceerrtt..ppeemm iinntteerrmmeeddiiaattee__CCAA..ppeemm >> cclliieenntt..ppeemm -A Postfix SMTP client certificate supplied here must be usable as SSL client +A Postfix SMTP client certificate supplied here must be usable as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test. A server that trusts the root CA has a local copy of the root CA certificate, @@ -780,9 +780,9 @@ summarized as follows: "smtp_use_tls = yes". * When both hostname and next-hop destination lookups produce a result, the - more specific per-site policy (NONE, MUST, etc) overrides the less specific - one (MAY), and the more secure per-site policy (MUST, etc) overrides the - less secure one (NONE). + more specific per-site policy (NONE, MUST, etc.) overrides the less + specific one (MAY), and the more secure per-site policy (MUST, etc.) + overrides the less secure one (NONE). * After the per-site policy lookups are combined, the result generally overrides the global policy. The exception is the less specific MMAAYY per- @@ -827,7 +827,7 @@ Example: example.org NONE # TLS should not be used with the host smtp.example.com. - smtp.example.com NONE + [smtp.example.com] NONE DDiissccoovveerriinngg sseerrvveerrss tthhaatt ssuuppppoorrtt TTLLSS @@ -862,9 +862,9 @@ Example: CClliieenntt--ssiiddee cciipphheerr ccoonnttrroollss To influence the Postfix SMTP client cipher selection scheme, you can give -cipherlist string. A detailed description would go to far here; please refer to -the OpenSSL documentation. If you don't know what to do with it, simply don't -touch it and leave the (openssl-)compiled in default! +cipherlist string. A detailed description would go too far here; please refer +to the OpenSSL documentation. If you don't know what to do with it, simply +don't touch it and leave the (openssl-)compiled in default! DO NOT USE " to enclose the string, specify just the string!!! @@ -1071,7 +1071,7 @@ Please differentiate when possible between: * Problems in the TLS code: * Problems in vanilla Postfix: -CCoommppaattiibbiilliittyy wwiitthh PPoossttffiixx <<22..22 TTLLSS ssuuppppoorrtt +CCoommppaattiibbiilliittyy wwiitthh PPoossttffiixx << 22..22 TTLLSS ssuuppppoorrtt Postfix version 2.2 TLS support is based on the Postfix/TLS patch by Lutz Ja"nicke, but differs in a few minor ways. diff --git a/postfix/README_FILES/TLS_README b/postfix/README_FILES/TLS_README index 315d9fbf6..12ef62f37 100644 --- a/postfix/README_FILES/TLS_README +++ b/postfix/README_FILES/TLS_README @@ -12,7 +12,7 @@ NOTE: By turning on TLS support in Postfix, you not only get the ability to encrypt mail and to authenticate remote SMTP clients or servers. You also turn on hundreds of thousands of lines of OpenSSL library code. Assuming that OpenSSL is written as carefully as Wietse's own code, every 1000 lines -introduce one additional bug into Postfix. +introduces one additional bug into Postfix. Topics covered in this document: @@ -121,7 +121,7 @@ To verify the Postfix SMTP server certificate, the remote SMTP client must receive the issuing CA certificates via the TLS handshake or via public-key infrastructure. This means that the Postfix server public-key certificate file must include the server certificate first, then the issuing CA(s) (bottom-up -order). The Postfix SMTP server certificate must be usable as SSL server +order). The Postfix SMTP server certificate must be usable as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test. The examples that follow show how to create a server certificate file. We @@ -178,7 +178,8 @@ and any additional issuer certificates. A single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy just a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up to -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the obsolete DSA. +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete +DSA. # Postfix >= 3.4. Preferred configuration interface. Each file # starts with the private key, followed by the corresponding @@ -554,8 +555,8 @@ their use in this context, though not recommended, is still likely safe. The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special -CA issues the client certificates, and only if this CA is listed as trusted CA. -If other CAs are trusted, any owner of a valid client certificate would be +CA issues the client certificates, and only if this CA is listed as a trusted +CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server. @@ -1404,8 +1405,8 @@ which certificate is presented. It is possible for the Postfix SMTP client to use the same key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "PEM" format. The private key must not be encrypted, meaning: it must be -accessible without password. Both parts (certificate and private key) may be in -the same file. +accessible without a password. Both parts (certificate and private key) may be +in the same file. With OpenSSL 1.1.1 and Postfix >= 3.4 it is also possible to configure Ed25519 and Ed448 certificates. Rather than add two more pairs of key and certificate @@ -1426,7 +1427,7 @@ user create the client.pem file with: # uummaasskk 007777 # ccaatt cclliieenntt__kkeeyy..ppeemm cclliieenntt__cceerrtt..ppeemm iinntteerrmmeeddiiaattee__CCAA..ppeemm >> cchhaaiinn..ppeemm -A Postfix SMTP client certificate supplied here must be usable as SSL client +A Postfix SMTP client certificate supplied here must be usable as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test. A server that trusts the root CA has a local copy of the root CA certificate, @@ -1443,7 +1444,8 @@ and any additional issuer certificates. A single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy at most a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the obsolete DSA. +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete +DSA. # Postfix >= 3.4. Preferred configuration interface. Each file # starts with the private key, followed by the corresponding @@ -1782,14 +1784,15 @@ vveerriiffyy files. sseeccuurree Secure certificate verification. Mail is delivered only if the TLS - handshake succeeds, if the remote SMTP server certificate can be validated - (not expired or revoked, and signed by a trusted Certification Authority), - and if the server certificate name matches the optional "match" attribute - (or the main.cf smtp_tls_secure_cert_match parameter value when no optional - "match" attribute is specified). With Postfix >= 2.11 the "tafile" - attribute optionally modifies trust chain verification in the same manner - as the "smtp_tls_trust_anchor_file" parameter. The "tafile" attribute may - be specified multiple times to load multiple trust-anchor files. + handshake succeeds, and DNS forgery resistant remote SMTP certificate + verification succeeds (not expired or revoked, and signed by a trusted + Certification Authority), and if the server certificate name matches the + optional "match" attribute (or the main.cf smtp_tls_secure_cert_match + parameter value when no optional "match" attribute is specified). With + Postfix >= 2.11 the "tafile" attribute optionally modifies trust chain + verification in the same manner as the "smtp_tls_trust_anchor_file" + parameter. The "tafile" attribute may be specified multiple times to load + multiple trust-anchor files. Notes: * The "match" attribute is especially useful to verify TLS certificates for @@ -2174,7 +2177,7 @@ authentication. This is sufficient for testing, and for exchanging email with sites that you have no trust relationship with. For real authentication you need also enable DNSSEC record signing for your domain and publish TLSA records and/or your Postfix public key certificate needs to be signed by a recognized -Certification Authority. To authenticate the certificates of remote host you +Certification Authority. To authenticate the certificates of a remote host you need a DNSSEC-validating local resolver and to enable DANE authentication and/ or configure the Postfix SMTP client with a list of public key certificates of Certification Authorities, but make sure to read about the limitations of the @@ -2392,7 +2395,7 @@ PPrriivvaattee CCeerrttiiffiiccaattiioonn AAuutthhoorr Often servers that perform TLS client authentication will issue the required certificates signed by their own CA. If you configure the client certificate and key incorrectly, you will be unable to send mail to sites - that request client certificate, but don't require them from all clients. + that request a client certificate, but don't require them from all clients. /etc/postfix/main.cf: smtp_tls_CAfile = /etc/postfix/cacert.pem diff --git a/postfix/README_FILES/TUNING_README b/postfix/README_FILES/TUNING_README index c1176617a..10801646c 100644 --- a/postfix/README_FILES/TUNING_README +++ b/postfix/README_FILES/TUNING_README @@ -285,9 +285,8 @@ than the default 20) simultaneous connections, especially if the gateway forwards to multiple MX hosts. When all MX hosts are up and accepting connections in a timely fashion, throughput will be high. If any MX host is down and completely unresponsive, the average connection latency rises to at -least 1/N * $smtp_connection_timeout, if there are N MX hosts. This limits -throughput to at most the destination concurrency * N / -$smtp_connection_timeout. +least 1/N * $smtp_connect_timeout, if there are N MX hosts. This limits +throughput to at most the destination concurrency * N / $smtp_connect_timeout. For example, with a destination concurrency of 100 and 2 MX hosts, each host will handle up to 50 simultaneous connections. If one MX host is down and the @@ -298,10 +297,10 @@ low as 5s or even 1s can be used to prevent congestion when one or more, but not all MX hosts are down. If necessary, set a higher transport_destination_concurrency_limit (in main.cf -since this is a queue manager parameter) and a lower smtp_connection_timeout -(with a "-o" override in master.cf since this parameter has no per-transport -name) for the relay transport and any transports dedicated for specific high -volume destinations. +since this is a queue manager parameter) and a lower smtp_connect_timeout (with +a "-o" override in master.cf since this parameter has no per-transport name) +for the relay transport and any transports dedicated for specific high volume +destinations. TTuunniinngg tthhee nnuummbbeerr ooff rreecciippiieennttss ppeerr ddeelliivveerryy diff --git a/postfix/README_FILES/VIRTUAL_README b/postfix/README_FILES/VIRTUAL_README index 6f470eeb7..e693a0ceb 100644 --- a/postfix/README_FILES/VIRTUAL_README +++ b/postfix/README_FILES/VIRTUAL_README @@ -27,14 +27,14 @@ The following topics are covered: CCaannoonniiccaall vveerrssuuss hhoosstteedd vveerrssuuss ootthheerr ddoommaaiinnss -Most Postfix systems are ffiinnaall ddeessttiinnaattiioonn for only a few domain names. These -include the hostnames and [the IP addresses] of the machine that Postfix runs -on, and sometimes also include the parent domain of the hostname. The remainder -of this document will refer to these domains as the canonical domains. They are -usually implemented with the Postfix local domain address class, as defined in -the ADDRESS_CLASS_README file. - -Besides the canonical domains, Postfix can be configured to be ffiinnaall +Most Postfix systems are the ffiinnaall ddeessttiinnaattiioonn for only a few domain names. +These include the hostnames and [the IP addresses] of the machine that Postfix +runs on, and sometimes also include the parent domain of the hostname. The +remainder of this document will refer to these domains as the canonical +domains. They are usually implemented with the Postfix local domain address +class, as defined in the ADDRESS_CLASS_README file. + +Besides the canonical domains, Postfix can be configured to be the ffiinnaall ddeessttiinnaattiioonn for any number of additional domains. These domains are called hosted, because they are not directly associated with the name of the machine itself. Hosted domains are usually implemented with the virtual alias domain @@ -49,8 +49,8 @@ implemented with the relay domain address class, as defined in the ADDRESS_CLASS_README file. Finally, Postfix can be configured as a transit host for sending mail across -the internet. Obviously, Postfix is not final destination for such mail. This -function is available only for authorized clients and/or users, and is +the internet. Obviously, Postfix is not the final destination for such mail. +This function is available only for authorized clients and/or users, and is implemented by the default domain address class, as defined in the ADDRESS_CLASS_README file. diff --git a/postfix/TLS_ACKNOWLEDGEMENTS b/postfix/TLS_ACKNOWLEDGEMENTS index 93c93d5b2..6cf435448 100644 --- a/postfix/TLS_ACKNOWLEDGEMENTS +++ b/postfix/TLS_ACKNOWLEDGEMENTS @@ -1,5 +1,5 @@ - Walcir Fontanini - * tested on Solaris 2.5 and and reported missing "snprintf()" + * tested on Solaris 2.5 and reported missing "snprintf()" -> was fixed in pfixtls-0.1.2 * contributed the script to add fingerprints contributed/fp.csh diff --git a/postfix/TLS_CHANGES b/postfix/TLS_CHANGES index 62a529e6a..1abe0ff15 100644 --- a/postfix/TLS_CHANGES +++ b/postfix/TLS_CHANGES @@ -1940,7 +1940,7 @@ - Updated configuration information: * As of OpenSSL 0.9.4, certificate chain verification is not sufficient, since the certificate purpose is not checked, so I recommend to add - all intermediate CAs the the list of CAs and stay with a verification + all intermediate CAs the list of CAs and stay with a verification depth of 1. Work is in progress for 0.9.5. - Stepped up to the just released new patchlevel postfix-19990906-pl09. @@ -2070,7 +2070,7 @@ 1999/10/09 - Set an absolut maximum length of 32 for the IDs used for session caching. - This matches the default in OpenSSL, but I don´t want to see surprises + This matches the default in OpenSSL, but I don't want to see surprises when somebody sometimes will run into a longer session id. 1999/10/05 == Released 0.4.0 == @@ -2107,11 +2107,11 @@ to computer sience students. 1999/09/28 - - I cannot use the mod_ssl way for session caching and I don´t want to - spend an extra "gcache" daemon as ApacheSSL does. So I follow Wietse´s + - I cannot use the mod_ssl way for session caching and I don't want to + spend an extra "gcache" daemon as ApacheSSL does. So I follow Wietse's idea realized for his mail queues and create hash level based subdirectory structures. The good thing: I can cannibalize the mail_queue code. - The bad thing: there is a path length of 100 chars fix coded in Wietse´s + The bad thing: there is a path length of 100 chars fix coded in Wietse's routines. It does hold for 32byte session ideas. Status: can save sessions to disk and recall them (server side). @@ -2119,8 +2119,8 @@ - Created new call backs for external session caching for the server side. In a first step, they can print out the session ids for the newly created session and when recalling a session. - As the OpenSSL documentation on this is pretty sparse, Ben Laurie´s - ApacheSSL code is very helpful, Ralph Engelschall´s Mod_SSL code for + As the OpenSSL documentation on this is pretty sparse, Ben Laurie's + ApacheSSL code is very helpful, Ralph Engelschall's Mod_SSL code for session caching is far more complicated. 1999/09/23 == Released 0.3.10 == @@ -2146,7 +2146,7 @@ SSL_CTX_set_session_id_context() call was missing. To find this, I had to trace through the OpenSSL library and when I finally found it in ssl/ssl_sess.c, there was an appropriate comment about this. I however - have to find out why I didn´t receive the appropriate error message... + have to find out why I didn't receive the appropriate error message... - This bug was hidden during the first developing stages, as the shutdown sequence was not working correct, so the session was not cached. @@ -2181,7 +2181,7 @@ 1999/09/09 == Released 0.3.6 == 1999/09/09 - - Added a missing ´#ifdef HAS_SSL #endif´ in smtp_connect.c. + - Added a missing '#ifdef HAS_SSL #endif' in smtp_connect.c. Noted by Jeff Johnson . - HINT: On 1999/09/06 a new "stable" version of postfix was released. @@ -2357,7 +2357,7 @@ 1999/04/14 - Ported from OpenSSL the BIO_callback functions to dump out the negotiation and transmission for debugging purposes. The functions are triggered - by the the new loglevels 3 and 4. + by the new loglevels 3 and 4. - Call SSL_free() to get rid of the SSL connection structure not used anymore. diff --git a/postfix/WISHLIST b/postfix/WISHLIST index 701d0c7cd..6a817c495 100644 --- a/postfix/WISHLIST +++ b/postfix/WISHLIST @@ -1,18 +1,22 @@ Wish list: - Factor out the new get_nested_dict_name() function from - proxymap.c, make it a library function, and reuse it in - postconf_dbms.c. + Things to do before the stable release: + + make typo-check, HTML validator check, + mantools/missing-proxy-read-maps, mantools/check-postlink. - Convert the proxymap protol into "server speaks first". + Disable -DSNAPSHOT and -DNONPROD in makedefs. Fix code that still uses "long" for data_size and data_offset, and that uses "%ld" in sscanf(). - A smart query service for live Postfix tables that outputs JSON? + For consistent naming (tlsproxy_client_mumble <> smtp_tls_mumble), + rename tlsproxy_client_level to tlsproxy_client_security_level, + and tlsproxy_client_policy to tlsproxy_client_policy_maps. + This requires backwards-compatible defaults and documentation + updates. - proxy_read_maps needs a dedicated matcher that looks - inside pipemap:{}. Maybe steal some code from postconf. + A smart query service for live Postfix tables that outputs JSON? Add a pointer to http://mmogilvi.users.sourceforge.net/software/oauthbearer.html @@ -124,13 +128,6 @@ Wish list: Replace ad-hoc code for pipe(8) flags handling, with infrastructure that was built for smtp(8). - Things to do before the stable release: - - Spell-check, double-word check, HTML validator check, - mantools/missing-proxy-read-maps check. - - Disable -DSNAPSHOT and -DNONPROD in makedefs. - Move map descriptions from postconf(1) to DATABASE_README and point there. The text in DATABASE_README is less complete than that in postconf(1). diff --git a/postfix/auxiliary/qshape/qshape.pl b/postfix/auxiliary/qshape/qshape.pl index 2ad88e179..366521601 100755 --- a/postfix/auxiliary/qshape/qshape.pl +++ b/postfix/auxiliary/qshape/qshape.pl @@ -138,7 +138,7 @@ do { "The 's' option shows sender domain counts.\n". "The 'p' option shows address counts by for parent domains.\n". "Parent domains are shown with a leading '.' before the domain name.\n". - "Parent domains are only shown if the the domain is not a TLD, and at\n". + "Parent domains are only shown if the domain is not a TLD, and at\n". "least (default 5) subdomains are shown in the output.\n\n". "The bucket age ranges in units of minutes are\n". diff --git a/postfix/conf/access b/postfix/conf/access index 257339bfb..97892eb73 100644 --- a/postfix/conf/access +++ b/postfix/conf/access @@ -31,7 +31,7 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based +# expressions, or lookups can be directed to a TCP-based # server. In those cases, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". @@ -232,7 +232,7 @@ # # DEFER_IF_PERMIT optional text... # Defer the request if some later restriction would -# result in a an explicit or implicit PERMIT action. +# result in an explicit or implicit PERMIT action. # Reply with "$access_map_defer_code 4.7.1 optional # text..." when the optional text is specified, oth- # erwise reply with a generic error response message. diff --git a/postfix/conf/canonical b/postfix/conf/canonical index 9881f4ef8..4957fcc4f 100644 --- a/postfix/conf/canonical +++ b/postfix/conf/canonical @@ -29,7 +29,7 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based +# expressions, or lookups can be directed to a TCP-based # server. In those cases, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". @@ -252,8 +252,8 @@ # # masquerade_exceptions (empty) # Optional list of user names that are not subjected -# to address masquerading, even when their address -# matches $masquerade_domains. +# to address masquerading, even when their addresses +# match $masquerade_domains. # # mydestination ($myhostname, localhost.$mydomain, local- # host) diff --git a/postfix/conf/generic b/postfix/conf/generic index 9d293683a..f371eb9a5 100644 --- a/postfix/conf/generic +++ b/postfix/conf/generic @@ -42,8 +42,8 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based -# server. In those case, the lookups are done in a slightly +# expressions, or lookups can be directed to a TCP-based +# server. In those cases, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". # @@ -140,8 +140,8 @@ # This section describes how the table lookups change when # lookups are directed to a TCP-based server. For a descrip- # tion of the TCP client/server lookup protocol, see tcp_ta- -# ble(5). This feature is not available up to and including -# Postfix version 2.4. +# ble(5). This feature is available in Postfix 2.5 and +# later. # # Each lookup operation uses the entire address once. Thus, # user@domain mail addresses are not broken up into their @@ -180,40 +180,42 @@ # The text below provides only a parameter summary. See # postconf(5) for more details including examples. # -# smtp_generic_maps -# Address mapping lookup table for envelope and -# header sender and recipient addresses while deliv- -# ering mail via SMTP. +# smtp_generic_maps (empty) +# Optional lookup tables that perform address rewrit- +# ing in the Postfix SMTP client, typically to trans- +# form a locally valid address into a globally valid +# address when sending mail across the Internet. # -# propagate_unmatched_extensions -# A list of address rewriting or forwarding mecha- -# nisms that propagate an address extension from the -# original address to the result. Specify zero or -# more of canonical, virtual, alias, forward, -# include, or generic. +# propagate_unmatched_extensions (canonical, virtual) +# What address lookup tables copy an address exten- +# sion from the lookup key to the lookup result. # # Other parameters of interest: # -# inet_interfaces -# The network interface addresses that this system -# receives mail on. You need to stop and start Post- -# fix when this parameter changes. -# -# proxy_interfaces -# Other interfaces that this machine receives mail on -# by way of a proxy agent or network address transla- -# tor. -# -# mydestination -# List of domains that this mail system considers -# local. -# -# myorigin -# The domain that is appended to locally-posted mail. -# -# owner_request_special -# Give special treatment to owner-xxx and xxx-request -# addresses. +# inet_interfaces (all) +# The network interface addresses that this mail sys- +# tem receives mail on. +# +# proxy_interfaces (empty) +# The network interface addresses that this mail sys- +# tem receives mail on by way of a proxy or network +# address translation unit. +# +# mydestination ($myhostname, localhost.$mydomain, local- +# host) +# The list of domains that are delivered via the +# $local_transport mail delivery transport. +# +# myorigin ($myhostname) +# The domain name that locally-posted mail appears to +# come from, and that locally posted mail is deliv- +# ered to. +# +# owner_request_special (yes) +# Enable special treatment for owner-listname entries +# in the aliases(5) file, and don't split owner-list- +# name and listname-request address localparts when +# the recipient_delimiter is set to "-". # # SEE ALSO # postmap(1), Postfix lookup table manager diff --git a/postfix/conf/main.cf b/postfix/conf/main.cf index 562e4dfc3..47de43463 100644 --- a/postfix/conf/main.cf +++ b/postfix/conf/main.cf @@ -31,7 +31,7 @@ # # The level below is what should be used with new (not upgrade) installs. # -compatibility_level = 3.6 +compatibility_level = 3.7 # SOFT BOUNCE # @@ -251,11 +251,14 @@ unknown_local_recipient_reject_code = 550 # You can specify the list of "trusted" network addresses by hand # or you can let Postfix do it for you (which is the default). # -# By default (mynetworks_style = subnet), Postfix "trusts" SMTP -# clients in the same IP subnetworks as the local machine. -# On Linux, this works correctly only with interfaces specified -# with the "ifconfig" command. +# By default (mynetworks_style = host), Postfix "trusts" only +# the local machine. # +# Specify "mynetworks_style = subnet" when Postfix should "trust" +# SMTP clients in the same IP subnetworks as the local machine. +# On Linux, this works correctly only with interfaces specified +# with the "ifconfig" or "ip" command. +# # Specify "mynetworks_style = class" when Postfix should "trust" SMTP # clients in the same IP class A/B/C networks as the local machine. # Don't do this with a dialup site - it would cause Postfix to "trust" @@ -285,14 +288,16 @@ unknown_local_recipient_reject_code = 550 #mynetworks = hash:/etc/postfix/network_table # The relay_domains parameter restricts what destinations this system will -# relay mail to. See the smtpd_recipient_restrictions description in -# postconf(5) for detailed information. +# relay mail to. See the smtpd_relay_restrictions and +# smtpd_recipient_restrictions descriptions in postconf(5) for detailed +# information. # # By default, Postfix relays mail -# - from "trusted" clients (IP address matches $mynetworks) to any destination, +# - from "trusted" clients (IP address matches $mynetworks, or is +# SASL authenticated) to any destination, # - from "untrusted" clients to destinations that match $relay_domains or # subdomains thereof, except addresses with sender-specified routing. -# The default relay_domains value is $mydestination. +# The default relay_domains value is empty. # # In addition to the above, the Postfix SMTP server by default accepts mail # that Postfix is final destination for: @@ -312,7 +317,7 @@ unknown_local_recipient_reject_code = 550 # list this system as their primary or backup MX host. See the # permit_mx_backup restriction description in postconf(5). # -#relay_domains = $mydestination +#relay_domains = # INTERNET OR INTRANET diff --git a/postfix/conf/post-install b/postfix/conf/post-install index 975266b8b..2a7d99b9a 100644 --- a/postfix/conf/post-install +++ b/postfix/conf/post-install @@ -144,7 +144,7 @@ # should not be in the command search path of any users. # .IP command_directory # The directory for Postfix administrative commands. This -# directory should be in the command search path of adminstrative users. +# directory should be in the command search path of administrative users. # .IP queue_directory # The directory for Postfix queues. # .IP data_directory diff --git a/postfix/conf/postmulti-script b/postfix/conf/postmulti-script index 934228d16..1b3175540 100644 --- a/postfix/conf/postmulti-script +++ b/postfix/conf/postmulti-script @@ -16,7 +16,7 @@ umask 022 # daemon_directory - From primary instance # meta_directory - From primary instance # shlib_directory - From primary instance -# config_directroy - config_directory of target instance +# config_directory - config_directory of target instance # queue_directory - queue_directory of target instance # data_directory - data_directory of target instance # diff --git a/postfix/conf/relocated b/postfix/conf/relocated index e50edfd18..90f63ecf2 100644 --- a/postfix/conf/relocated +++ b/postfix/conf/relocated @@ -24,7 +24,7 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based +# expressions, or lookups can be directed to a TCP-based # server. In those case, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". @@ -86,66 +86,68 @@ # description of regular expression lookup table syntax, see # regexp_table(5) or pcre_table(5). For a description of the # TCP client/server table lookup protocol, see tcp_table(5). -# This feature is not available up to and including Postfix -# version 2.4. +# This feature is available in Postfix 2.5 and later. # -# Each pattern is a regular expression that is applied to +# Each pattern is a regular expression that is applied to # the entire address being looked up. Thus, user@domain mail -# addresses are not broken up into their user and @domain +# addresses are not broken up into their user and @domain # constituent parts, nor is user+foo broken up into user and # foo. # -# Patterns are applied in the order as specified in the ta- -# ble, until a pattern is found that matches the search +# Patterns are applied in the order as specified in the ta- +# ble, until a pattern is found that matches the search # string. # -# Results are the same as with indexed file lookups, with -# the additional feature that parenthesized substrings from +# Results are the same as with indexed file lookups, with +# the additional feature that parenthesized substrings from # the pattern can be interpolated as $1, $2 and so on. # # TCP-BASED TABLES -# This section describes how the table lookups change when +# This section describes how the table lookups change when # lookups are directed to a TCP-based server. For a descrip- # tion of the TCP client/server lookup protocol, see tcp_ta- -# ble(5). This feature is not available up to and including -# Postfix version 2.4. +# ble(5). This feature is available in Postfix 2.5 and +# later. # # Each lookup operation uses the entire address once. Thus, -# user@domain mail addresses are not broken up into their +# user@domain mail addresses are not broken up into their # user and @domain constituent parts, nor is user+foo broken # up into user and foo. # # Results are the same as with indexed file lookups. # # BUGS -# The table format does not understand quoting conventions. +# The table format does not understand quoting conventions. # # CONFIGURATION PARAMETERS -# The following main.cf parameters are especially relevant. -# The text below provides only a parameter summary. See +# The following main.cf parameters are especially relevant. +# The text below provides only a parameter summary. See # postconf(5) for more details including examples. # -# relocated_maps -# List of lookup tables for relocated users or sites. +# relocated_maps (empty) +# Optional lookup tables with new contact information +# for users or domains that no longer exist. # # Other parameters of interest: # -# inet_interfaces -# The network interface addresses that this system -# receives mail on. You need to stop and start Post- -# fix when this parameter changes. +# inet_interfaces (all) +# The network interface addresses that this mail sys- +# tem receives mail on. # -# mydestination -# List of domains that this mail system considers -# local. +# mydestination ($myhostname, localhost.$mydomain, local- +# host) +# The list of domains that are delivered via the +# $local_transport mail delivery transport. # -# myorigin -# The domain that is appended to locally-posted mail. +# myorigin ($myhostname) +# The domain name that locally-posted mail appears to +# come from, and that locally posted mail is deliv- +# ered to. # -# proxy_interfaces -# Other interfaces that this machine receives mail on -# by way of a proxy agent or network address transla- -# tor. +# proxy_interfaces (empty) +# The network interface addresses that this mail sys- +# tem receives mail on by way of a proxy or network +# address translation unit. # # SEE ALSO # trivial-rewrite(8), address resolver @@ -153,13 +155,13 @@ # postconf(5), configuration parameters # # README FILES -# Use "postconf readme_directory" or "postconf html_direc- +# Use "postconf readme_directory" or "postconf html_direc- # tory" to locate this information. # DATABASE_README, Postfix lookup table overview # ADDRESS_REWRITING_README, address rewriting guide # # LICENSE -# The Secure Mailer license must be distributed with this +# The Secure Mailer license must be distributed with this # software. # # AUTHOR(S) diff --git a/postfix/conf/transport b/postfix/conf/transport index 1dcd787bc..bad773951 100644 --- a/postfix/conf/transport +++ b/postfix/conf/transport @@ -61,7 +61,7 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based +# expressions, or lookups can be directed to a TCP-based # server. In those case, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". diff --git a/postfix/conf/virtual b/postfix/conf/virtual index da9cd655c..96390fee8 100644 --- a/postfix/conf/virtual +++ b/postfix/conf/virtual @@ -51,7 +51,7 @@ # # Alternatively, the table can be provided as a regu- # lar-expression map where patterns are given as regular -# expressions, or lookups can be directed to TCP-based +# expressions, or lookups can be directed to a TCP-based # server. In those case, the lookups are done in a slightly # different way as described below under "REGULAR EXPRESSION # TABLES" or "TCP-BASED TABLES". @@ -99,8 +99,8 @@ # tination, or when it is listed in $inet_interfaces # or $proxy_interfaces. # -# This functionality overlaps with functionality of -# the local aliases(5) database. The difference is +# This functionality overlaps with the functionality +# of the local aliases(5) database. The difference is # that virtual(5) mapping can be applied to non-local # addresses. # @@ -155,7 +155,7 @@ # # The propagate_unmatched_extensions parameter controls # whether an unmatched address extension (+foo) is propa- -# gated to the result of table lookup. +# gated to the result of a table lookup. # # VIRTUAL ALIAS DOMAINS # Besides virtual aliases, the virtual alias table can also @@ -232,8 +232,8 @@ # This section describes how the table lookups change when # lookups are directed to a TCP-based server. For a descrip- # tion of the TCP client/server lookup protocol, see tcp_ta- -# ble(5). This feature is not available up to and including -# Postfix version 2.4. +# ble(5). This feature is available in Postfix 2.5 and +# later. # # Each lookup operation uses the entire address once. Thus, # user@domain mail addresses are not broken up into their @@ -254,11 +254,11 @@ # virtual_alias_maps ($virtual_maps) # Optional lookup tables that alias specific mail # addresses or domains to other local or remote -# address. +# addresses. # # virtual_alias_domains ($virtual_alias_maps) -# Postfix is final destination for the specified list -# of virtual alias domains, that is, domains for +# Postfix is the final destination for the specified +# list of virtual alias domains, that is, domains for # which all addresses are aliased to addresses in # other local or remote domains. # diff --git a/postfix/html/ADDRESS_REWRITING_README.html b/postfix/html/ADDRESS_REWRITING_README.html index a20b50962..a2d83188c 100644 --- a/postfix/html/ADDRESS_REWRITING_README.html +++ b/postfix/html/ADDRESS_REWRITING_README.html @@ -493,8 +493,8 @@ document.

Rewrite "user@host" to "user@host.$mydomain"

This feature is controlled by the boolean append_dot_mydomain -parameter (default: yes). The purpose is to get consistent treatment -of different forms of the same hostname.

+parameter (default: Postfix ≥ 3.0: no, Postfix < 3.0: yes). The purpose +is to get consistent treatment of different forms of the same hostname.

NOTE: Postfix versions 2.2 and later rewrite message headers from remote SMTP clients only if the client matches the diff --git a/postfix/html/BACKSCATTER_README.html b/postfix/html/BACKSCATTER_README.html index 85effce37..f4e26edde 100644 --- a/postfix/html/BACKSCATTER_README.html +++ b/postfix/html/BACKSCATTER_README.html @@ -302,7 +302,7 @@ many users configure their email addresses as username@example.com, messages with DSN turned on will trigger the REJECT action in the previous section.

-

If you have such clients then you can to exclude their Message-ID +

If you have such clients then you can exclude their Message-ID strings with the two "Message-ID:.* <!&!" patterns that are shown in the previous section. Otherwise you will not be able to use the two backscatter rules to stop forged Message ID @@ -382,7 +382,8 @@ above techniques to recognize forgeries.

because there is a lot of variation in report formats. The following is only a small example of message header patterns. For a large collection of header and body patterns that recognize virus -notification email, see http://www.dkuug.dk/keld/virus/ +notification email, see +https://web.archive.org/web/20100317123907/http://std.dkuug.dk/keld/virus/ or http://www.t29.dk/antiantivirus.txt.

diff --git a/postfix/html/BASIC_CONFIGURATION_README.html b/postfix/html/BASIC_CONFIGURATION_README.html index e206c04a6..ccede706f 100644 --- a/postfix/html/BASIC_CONFIGURATION_README.html +++ b/postfix/html/BASIC_CONFIGURATION_README.html @@ -264,7 +264,7 @@ clients that send mail from outside an authorized network block. This is explained in the SASL_README and TLS_README documents.

IMPORTANT: If your machine is connected to a wide area network -then the "mynetworks_style = host" setting may be too friendly.

+then the "mynetworks_style = subnet" setting may be too friendly.

Examples (specify only one of the following):

@@ -286,13 +286,15 @@ parameter value.
    -
  • Specify "mynetworks_style = host" when Postfix should -forward mail from only the local machine.

    +
  • Specify "mynetworks_style = host" (the default when +compatibility_level ≥ 2) when Postfix should forward mail from +only the local machine.

    -
  • Specify "mynetworks_style = subnet" (the default) when -Postfix should forward mail from SMTP clients in the same IP -subnetworks as the local machine. On Linux, this works correctly -only with interfaces specified with the "ifconfig" command.

    +
  • Specify "mynetworks_style = subnet" (the default when +compatibility_level < 2) when Postfix should forward mail from +SMTP clients in the same IP subnetworks as the local machine. +On Linux, this works correctly only with interfaces specified +with the "ifconfig" or "ip" command.

  • Specify "mynetworks_style = class" when Postfix should forward mail from SMTP clients in the same IP class A/B/C networks diff --git a/postfix/html/BDAT_README.html b/postfix/html/BDAT_README.html index 56532fc30..3cc1daf83 100644 --- a/postfix/html/BDAT_README.html +++ b/postfix/html/BDAT_README.html @@ -170,7 +170,7 @@ then turn off Postfix's CHUNKING announcement as described above.

    In RFC 4468, the authors write that a client may pipeline commands, and that after sending BURL LAST or BDAT LAST, a client must wait for the server's response. But as this text does not -appear in RFC 3030 which defines BDAT, is it a useless restriction +appear in RFC 3030 which defines BDAT, it is a useless restriction that Postfix will not enforce.

    diff --git a/postfix/html/BUILTIN_FILTER_README.html b/postfix/html/BUILTIN_FILTER_README.html index 74d138d47..3cd3dec89 100644 --- a/postfix/html/BUILTIN_FILTER_README.html +++ b/postfix/html/BUILTIN_FILTER_README.html @@ -458,8 +458,8 @@ of duplication.

    Postfix versions do not support the receive_override_options feature.

    -

    If you are MX service provider and want to apply disable -head/body checks for some domains, you can configure ONE Postfix +

    If you are an MX service provider and want to enable header/body +checks only for some domains, you can configure ONE Postfix instance with multiple SMTP server IP addresses in master.cf. Each address provides a different service.

    diff --git a/postfix/html/COMPATIBILITY_README.html b/postfix/html/COMPATIBILITY_README.html index 1748cc58f..39ee71672 100644 --- a/postfix/html/COMPATIBILITY_README.html +++ b/postfix/html/COMPATIBILITY_README.html @@ -245,7 +245,7 @@ setting mynetworks_style=subnet

    The mynetworks_style default value has changed from "subnet" to "host". This parameter is used to implement the "permit_mynetworks" -feature. The change could in unexpected 'access denied' errors after +feature. The change could cause unexpected 'access denied' errors after Postfix is updated from an older version. The backwards-compatibility safety net is designed to prevent such surprises.

    diff --git a/postfix/html/CONNECTION_CACHE_README.html b/postfix/html/CONNECTION_CACHE_README.html index d541fba28..e18a05302 100644 --- a/postfix/html/CONNECTION_CACHE_README.html +++ b/postfix/html/CONNECTION_CACHE_README.html @@ -178,7 +178,7 @@ bgcolor="#f0f0ff"> scache(8)

    The connection cache can be searched by destination domain name (the right-hand side of the recipient address) and by the IP address of the host at the other end of the connection. This allows Postfix -to reuse a connection even when the remote host is mail server for +to reuse a connection even when the remote host is a mail server for domains with different names.

    Connection cache configuration

    diff --git a/postfix/html/DATABASE_README.html b/postfix/html/DATABASE_README.html index dab3bd22a..1305fdbe3 100644 --- a/postfix/html/DATABASE_README.html +++ b/postfix/html/DATABASE_README.html @@ -98,7 +98,7 @@ lookup key exists. Any non-empty lookup result value may be used here: the lookup result is not used. Examples are the local_recipient_maps that determine what local recipients Postfix accepts in mail from the network, the mydestination parameter -that specifies what domains Postfix delivers locally, or the +that specifies what domains Postfix delivers locally for, or the mynetworks parameter that specifies the IP addresses of trusted clients or client networks. Technically, these are lists, not tables. Despite the difference, Postfix lists are described here @@ -326,7 +326,7 @@ also the static: map type.
internal
-
A non-shared, in-memory hash table. Its content are lost when +
A non-shared, in-memory hash table. Its contents are lost when a process terminates.
lmdb
diff --git a/postfix/html/DEBUG_README.html b/postfix/html/DEBUG_README.html index a4e8128a5..a2cec547b 100644 --- a/postfix/html/DEBUG_README.html +++ b/postfix/html/DEBUG_README.html @@ -577,11 +577,11 @@ or 1000+ lines of postconf command output.

  • Better, provide output from the postfinger tool. -This can be found at http://ftp.wl0.org/SOURCES/postfinger.

    +This can be found at https://github.com/ford--prefect/postfinger.

  • If the problem is SASL related, consider including the output from the saslfinger tool. This can be found at -http://postfix.state-of-mind.de/patrick.koetter/saslfinger/.

    +https://packages.debian.org/search?keywords=sasl2-bin.

  • If the problem is about too much mail in the queue, consider including output from the qshape tool, as described in the diff --git a/postfix/html/FORWARD_SECRECY_README.html b/postfix/html/FORWARD_SECRECY_README.html index fd685bd40..4fa0a029b 100644 --- a/postfix/html/FORWARD_SECRECY_README.html +++ b/postfix/html/FORWARD_SECRECY_README.html @@ -176,7 +176,7 @@ and is not recommended for now.

    EDH Server support

    -

    Postfix ≥ 2.2 support 1024-bit-prime EDH out of the box, +

    Postfix ≥ 2.2 supports 1024-bit-prime EDH out of the box, with no additional configuration, but you may want to override the default prime to be 2048 bits long, and you may want to regenerate your primes periodically. See the quick-start @@ -218,7 +218,7 @@ for the recommended configuration to work around this issue.

    EECDH Server support

    -

    Postfix ≥ 2.6 support NIST P-256 EECDH when built with OpenSSL +

    Postfix ≥ 2.6 supports NIST P-256 EECDH when built with OpenSSL ≥ 1.0.0. When the remote SMTP client also supports EECDH and implements the P-256 curve, forward secrecy just works.

    @@ -530,7 +530,7 @@ This pattern is likely to persist until some new key-exchange mechanism is invented that also supports forward secrecy.

    The actual key length and raw algorithm key length -are generally the same with non-export ciphers, but may they +are generally the same with non-export ciphers, but they may differ for the legacy export ciphers where the actual key is artificially shortened.

    diff --git a/postfix/html/INSTALL.html b/postfix/html/INSTALL.html index 91a920d57..2070e3467 100644 --- a/postfix/html/INSTALL.html +++ b/postfix/html/INSTALL.html @@ -534,7 +534,7 @@ built, with "make install" or "make upgrade".

    -

    As with the command "make makefiles, the command "make +

    As with the command "make makefiles", the command "make install/upgrade name=value..." will replace the string MAIL_VERSION at the end of a configuration parameter value with the Postfix release version. Do not try to specify something like $mail_version @@ -795,7 +795,7 @@ $ make one or more non-default object libraries. Postfix 3.0 and later specify some of their database library dependencies with AUXLIBS_CDB, AUXLIBS_LDAP, AUXLIBS_LMDB, AUXLIBS_MYSQL, AUXLIBS_PCRE, AUXLIBS_PGSQL, -AUXLIBS_SDBM, and AUXLIBS_SQLITE, respectively. +AUXLIBS_SDBM, and AUXLIBS_SQLITE, respectively. CC=compiler_command Specifies a non-default compiler. On many systems, the default is gcc. @@ -1240,7 +1240,7 @@ of:

    Follow the instructions in the "Mandatory configuration file edits" in section 10, and review the "To chroot or not to chroot" text in section +href="#hamlet">To chroot or not to chroot" text in section 11.

    Start the Postfix system:

    @@ -1565,6 +1565,7 @@ following commands:

     # newaliases
     # sendmail -bi
    +# postalias /etc/aliases (pathname is system dependent!)
     
    diff --git a/postfix/html/IPV6_README.html b/postfix/html/IPV6_README.html index c1211e912..acf24b901 100644 --- a/postfix/html/IPV6_README.html +++ b/postfix/html/IPV6_README.html @@ -153,7 +153,7 @@ setting looks like:

    If you did specify the mynetworks parameter value in -main.cf, you need update the mynetworks value to include +main.cf, you need to update the mynetworks value to include the IPv6 networks the system is in. Be sure to specify IPv6 address information inside "[]", like this:

    diff --git a/postfix/html/LDAP_README.html b/postfix/html/LDAP_README.html index b4f938c13..d019dba47 100644 --- a/postfix/html/LDAP_README.html +++ b/postfix/html/LDAP_README.html @@ -533,7 +533,7 @@ query_filter = (&(mailacceptinggeneralid=%s)(!(|(maildrop="*|*")(maildrop="* -
  • And for that matter, even for aliases, you may not want users able to +

  • And for that matter, even for aliases, you may not want users to be able to specify their maildrops as programs, includes, etc. This might be particularly pertinent on a "sealed" server where they don't have local UNIX accounts, but exist only in LDAP and Cyrus. You might allow diff --git a/postfix/html/LINUX_README.html b/postfix/html/LINUX_README.html index b682fe9ab..84d16e206 100644 --- a/postfix/html/LINUX_README.html +++ b/postfix/html/LINUX_README.html @@ -20,10 +20,10 @@

    Host lookup issues

    By default Linux /etc/hosts lookups do not support multiple IP -address per hostname. This causes warnings from the Postfix SMTP +addresses per hostname. This causes warnings from the Postfix SMTP server that "hostname XXX does not resolve to address YYY", and is especially a problem with hosts that have both IPv4 and IPv6 -addresses. To fix, turn on support for multiple IP addresses:

    +addresses. To fix this, turn on support for multiple IP addresses:

    @@ -73,7 +73,7 @@ library routines.  See the DB_README file for furth
     
     

    On RedHat Linux 7.1 and later procmail no longer has permission -to write the mail spool directory. Workaround:

    +to write to the mail spool directory. Workaround:

    diff --git a/postfix/html/MAILLOG_README.html b/postfix/html/MAILLOG_README.html
    index ae267eec7..32e33677e 100644
    --- a/postfix/html/MAILLOG_README.html
    +++ b/postfix/html/MAILLOG_README.html
    @@ -129,7 +129,7 @@ program is configured with the 
     
    -
  • This command will not rotate a logfile with pathname under +

  • This command will not rotate a logfile with a pathname under the /dev directory, such as /dev/stdout.

  • This command does not (yet) remove old logfiles.

    @@ -146,7 +146,7 @@ the /dev directory, such as /dev/stdout.

    in the background, as well as non-daemon programs for local mail submission or Postfix management. -
  • Logging to Postfix logfile or stdout requires the Postfix +

  • Logging to the Postfix logfile or stdout requires the Postfix postlogd(8) service. This ensures that simultaneous logging from different programs will not get mixed up.

    diff --git a/postfix/html/MILTER_README.html b/postfix/html/MILTER_README.html index fd658dcd9..1c0ecae3e 100644 --- a/postfix/html/MILTER_README.html +++ b/postfix/html/MILTER_README.html @@ -309,7 +309,8 @@ from other Milter applications.

    unix:pathname

    Connect to the local UNIX-domain server that is bound to the specified pathname. If the smtpd(8) or cleanup(8) process runs chrooted, an absolute pathname -is interpreted relative to the Postfix queue directory.

    +is interpreted relative to the Postfix queue directory. On many +systems, local is a synonym for unix

    inet:host:port

    Connect to the specified TCP port on the specified local or remote @@ -758,7 +759,7 @@ transaction (for example; queue ID, sender, or recipient).

    you may specify macro default values with the milter_macro_defaults parameter. Specify zero or more name=value pairs separated by comma or whitespace; you may even specify macro names that Postfix does -know about!

    +not know about!

    Workarounds

    diff --git a/postfix/html/MULTI_INSTANCE_README.html b/postfix/html/MULTI_INSTANCE_README.html index 76be367b5..da8d801be 100644 --- a/postfix/html/MULTI_INSTANCE_README.html +++ b/postfix/html/MULTI_INSTANCE_README.html @@ -259,7 +259,7 @@ EOF
  • -

    The test message should be delivered the members of the "mtaadmin" +

    The test message should be delivered to the members of the "mtaadmin" address group (or whatever address group you choose) with the following headers:

    @@ -378,7 +378,7 @@ post-filter re-injection SMTP service. Typical additions include:

    smtpd_relay_restrictions = smtpd_recipient_restrictions = permit_mynetworks, reject - # Tolerate occasional high latency in the content filter. + # Tolerate occasional high latency in the content filter. # smtpd_timeout = 1200s @@ -637,7 +637,7 @@ of any users, including the $mail_owner
  • The main.cf, master.cf (and other optional) configuration files in $config_directory.

    -
  • The maildrop, incoming, active, deferred and hold queues +

  • The maildrop, incoming, active, deferred and hold queues in $queue_directory (which contains additional directories needed by Postfix, and which optionally doubles as a chroot jail for Postfix daemon processes).

    diff --git a/postfix/html/MYSQL_README.html b/postfix/html/MYSQL_README.html index 8ac3826e4..147802f0d 100644 --- a/postfix/html/MYSQL_README.html +++ b/postfix/html/MYSQL_README.html @@ -46,8 +46,7 @@ There is no need to recompile Postfix.

    which can be obtained from:

    -

    http://www.mysql.com/downloads/
    - http://sourceforge.net/projects/mysql/

    +

    http://www.mysql.com/downloads/

    In order to build Postfix with mysql map support, you will need to add @@ -178,7 +177,7 @@ Marcus, IC Group, Inc.

  • Liviu Daia with further refinements from Jose Luis Tallon and Victor Duchovni developed the common query, result_format, domain and -expansion_limit interface for LDAP, MySQL and PosgreSQL.
  • +expansion_limit interface for LDAP, MySQL and PostgreSQL.
  • diff --git a/postfix/html/POSTSCREEN_3_5_README.html b/postfix/html/POSTSCREEN_3_5_README.html index 61969894d..d26c6d6d8 100644 --- a/postfix/html/POSTSCREEN_3_5_README.html +++ b/postfix/html/POSTSCREEN_3_5_README.html @@ -228,7 +228,8 @@ temporary allowlist is not used for SMTP client addresses that appear on the permanent access list.

    By default the temporary allowlist is not shared with other -postscreen(8) daemons. See Sharing +postscreen(8) daemons. See + Sharing the temporary allowlist below for alternatives.

    When the SMTP client address appears on the temporary @@ -266,9 +267,9 @@ failure.

    • First, configure the host to listen on both primary and -backup MX addresses. Use the appropriate ifconfig command -for the local operating system, or update the appropriate configuration -files and "refresh" the network protocol stack.

      +backup MX addresses. Use the appropriate ifconfig or ip +command for the local operating system, or update the appropriate +configuration files and "refresh" the network protocol stack.

      Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in @@ -310,7 +311,8 @@ interval before the "220 text..." server greeting, where postscreen(8) can run a number of tests in parallel.

      When a good client passes these tests, and no "deep protocol tests" are configured, postscreen(8) +href="#after_220">deep protocol tests" +are configured, postscreen(8) adds the client to the temporary allowlist and hands off the "live" connection to a Postfix SMTP server process. The client can then continue as if postscreen(8) never even existed (except of course @@ -512,7 +514,8 @@ service, so that they never have to deal with postsc receiver send one command and one response at a time. Unlike the Postfix SMTP server, postscreen(8) does not announce support for ESMTP command pipelining. Therefore, clients are not allowed -to send multiple commands. postscreen(8)'s deep +to send multiple commands. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_pipelining_enable = yes", postscreen(8) detects @@ -546,7 +549,8 @@ after the 220 SMTP server greeting" below.

      of this is the usage of commands such as CONNECT and other non-SMTP commands. Just like the Postfix SMTP server's smtpd_forbidden_commands feature, postscreen(8) has an equivalent postscreen_forbidden_commands -feature to block these clients. postscreen(8)'s deep +feature to block these clients. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_non_smtp_command_enable = yes", postscreen(8) @@ -583,7 +587,8 @@ tests fail after the 220 SMTP server greeting" below.

      SMTP is a line-oriented protocol: lines have a limited length, and are terminated with <CR><LF>. Lines ending in a "bare" <LF>, that is newline not preceded by carriage return, -are not allowed in SMTP. postscreen(8)'s deep +are not allowed in SMTP. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_bare_newline_enable = yes", postscreen(8) @@ -902,14 +907,15 @@ Postfix version 2.8.

    • Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" -output shows "parametername = -${stress?something}${stress:something}"). +output shows +"parametername = ${stress?something}${stress:something}" or +"parametername = ${stress?{something}:{something}}"). Other parameters always evaluate as if the stress value is the empty string.

    • See "Tests before the 220 SMTP server -greeting" for details about the logging from these postscreen(8) -tests.

      +greeting" for details about the logging from these +postscreen(8) tests.

    • If you run Postfix 2.6 or earlier you must stop and start the master daemon ("postfix stop; postfix start"). This @@ -983,7 +989,8 @@ tests", but these are more intrusive than the pregreet or DNSBL tests.

      When a good client passes the "deep -protocol tests", postscreen(8) adds the client to the temporary +protocol tests", +postscreen(8) adds the client to the temporary allowlist but it cannot hand off the "live" connection to a Postfix SMTP server process in the middle of the session. Instead, postscreen(8) defers mail delivery attempts with a 4XX status, logs the diff --git a/postfix/html/POSTSCREEN_README.html b/postfix/html/POSTSCREEN_README.html index a21b80186..e6f1321e8 100644 --- a/postfix/html/POSTSCREEN_README.html +++ b/postfix/html/POSTSCREEN_README.html @@ -239,7 +239,8 @@ temporary allowlist is not used for SMTP client addresses that appear on the permanent access list.

      By default the temporary allowlist is not shared with other -postscreen(8) daemons. See Sharing +postscreen(8) daemons. See + Sharing the temporary allowlist below for alternatives.

      When the SMTP client address appears on the temporary @@ -277,9 +278,9 @@ failure.

      • First, configure the host to listen on both primary and -backup MX addresses. Use the appropriate ifconfig command -for the local operating system, or update the appropriate configuration -files and "refresh" the network protocol stack.

        +backup MX addresses. Use the appropriate ifconfig or ip +command for the local operating system, or update the appropriate +configuration files and "refresh" the network protocol stack.

        Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in @@ -324,7 +325,8 @@ interval before the "220 text..." server greeting, where postscreen(8) can run a number of tests in parallel.

        When a good client passes these tests, and no "deep protocol tests" are configured, postscreen(8) +href="#after_220">deep protocol tests" +are configured, postscreen(8) adds the client to the temporary allowlist and hands off the "live" connection to a Postfix SMTP server process. The client can then continue as if postscreen(8) never even existed (except of course @@ -526,7 +528,8 @@ service, so that they never have to deal with postsc receiver send one command and one response at a time. Unlike the Postfix SMTP server, postscreen(8) does not announce support for ESMTP command pipelining. Therefore, clients are not allowed -to send multiple commands. postscreen(8)'s deep +to send multiple commands. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_pipelining_enable = yes", postscreen(8) detects @@ -560,7 +563,8 @@ after the 220 SMTP server greeting" below.

        of this is the usage of commands such as CONNECT and other non-SMTP commands. Just like the Postfix SMTP server's smtpd_forbidden_commands feature, postscreen(8) has an equivalent postscreen_forbidden_commands -feature to block these clients. postscreen(8)'s deep +feature to block these clients. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_non_smtp_command_enable = yes", postscreen(8) @@ -597,7 +601,8 @@ tests fail after the 220 SMTP server greeting" below.

        SMTP is a line-oriented protocol: lines have a limited length, and are terminated with <CR><LF>. Lines ending in a "bare" <LF>, that is newline not preceded by carriage return, -are not allowed in SMTP. postscreen(8)'s deep +are not allowed in SMTP. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_bare_newline_enable = yes", postscreen(8) @@ -916,14 +921,15 @@ Postfix version 2.8.

      • Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" -output shows "parametername = -${stress?something}${stress:something}"). +output shows +"parametername = ${stress?something}${stress:something}" or +"parametername = ${stress?{something}:{something}}"). Other parameters always evaluate as if the stress value is the empty string.

      • See "Tests before the 220 SMTP server -greeting" for details about the logging from these postscreen(8) -tests.

        +greeting" for details about the logging from these +postscreen(8) tests.

      • If you run Postfix 2.6 or earlier you must stop and start the master daemon ("postfix stop; postfix start"). This @@ -997,7 +1003,8 @@ tests", but these are more intrusive than the pregreet or DNSBL tests.

        When a good client passes the "deep -protocol tests", postscreen(8) adds the client to the temporary +protocol tests", +postscreen(8) adds the client to the temporary allowlist but it cannot hand off the "live" connection to a Postfix SMTP server process in the middle of the session. Instead, postscreen(8) defers mail delivery attempts with a 4XX status, logs the diff --git a/postfix/html/QSHAPE_README.html b/postfix/html/QSHAPE_README.html index 06dd7c2dd..6b763969f 100644 --- a/postfix/html/QSHAPE_README.html +++ b/postfix/html/QSHAPE_README.html @@ -120,11 +120,11 @@ minutes old and 12 older than 1280 minutes (1440 minutes in a day).

        When the output is a terminal intermediate results showing the top 20 domains (-n option) are displayed after every 1000 messages (-N option) and the final output also shows only the top 20 domains. This makes -qshape useful even when the deferred queue is very large and it may -otherwise take prohibitively long to read the entire deferred queue.

        +qshape useful even when the "deferred" queue is very large and it may +otherwise take prohibitively long to read the entire "deferred" queue.

        By default, qshape shows statistics for the union of both the -incoming and active queues which are the most relevant queues to +"incoming" and "active" queues which are the most relevant queues to look at when analyzing performance.

        One can request an alternate list of queues:

        @@ -136,8 +136,8 @@ $ qshape incoming active deferred -

        this will show the age distribution of the deferred queue or -the union of the incoming active and deferred queues.

        +

        this will show the age distribution of the "deferred" queue or +the union of the "incoming", "active" and "deferred" queues.

        Command line options control the number of display "buckets", the age limit for the smallest bucket, display of parent domain @@ -154,7 +154,7 @@ dominate the queue sender or recipient counts, approximately when a burst of mail started, and when it stopped.

        The problem destinations or sender domains appear near the top -left corner of the output table. Remember that the active queue +left corner of the output table. Remember that the "active" queue can accommodate up to 20000 ($qmgr_message_active_limit) messages. To check whether this limit has been reached, use:

        @@ -164,11 +164,11 @@ $ qshape -s active (show sender statistics) -

        If the total sender count is below 20000 the active queue is +

        If the total sender count is below 20000 the "active" queue is not yet saturated, any high volume sender domains show near the top of the output. -

        With oqmgr(8) the active queue is also limited to at most 20000 +

        With oqmgr(8) the "active" queue is also limited to at most 20000 recipient addresses ($qmgr_message_recipient_limit). To check for exhaustion of this limit use:

        @@ -223,15 +223,15 @@ output.

        Example 1: Healthy queue

        -

        When looking at just the incoming and active queues, under -normal conditions (no congestion) the incoming and active queues +

        When looking at just the "incoming" and "active" queues, under +normal conditions (no congestion) the "incoming" and "active" queues are nearly empty. Mail leaves the system almost as quickly as it -comes in or is deferred without congestion in the active queue. +comes in or is deferred without congestion in the "active" queue.

        -$ qshape        (show incoming and active queue status)
        +$ qshape        (show "incoming" and "active" queue status)
         
                          T  5 10 20 40 80 160 320 640 1280 1280+
                   TOTAL  5  0  0  0  1  0   0   0   1    1     2
        @@ -239,9 +239,9 @@ $ qshape        (show incoming
         
        -

        If one looks at the two queues separately, the incoming queue +

        If one looks at the two queues separately, the "incoming" queue is empty or perhaps briefly has one or two messages, while the -active queue holds more messages and for a somewhat longer time: +"active" queue holds more messages and for a somewhat longer time:

        @@ -266,7 +266,7 @@ dictionary attack bounces available for some of the hosted domains. Dictionary attacks on the unvalidated domains result in bounce backscatter. The bounces dominate the queue, but with proper tuning they do not saturate the -incoming or active queues. The high volume of deferred mail is not +"incoming" or "active" queues. The high volume of deferred mail is not a direct cause for alarm.

        @@ -290,7 +290,7 @@ $ qshape deferred | head is the tail end of the time distribution, showing that short term arrival rates are moderate. Larger numbers and lower message ages are more indicative of current trouble. Old mail still going nowhere -is largely harmless so long as the active and incoming queues are +is largely harmless so long as the "active" and "incoming" queues are short. We can also see that the groups.msn.com undeliverables are low rate steady stream rather than a concentrated dictionary attack that is now over.

        @@ -318,8 +318,9 @@ most of the messages are bounces.

        queue

        This example is taken from a Feb 2004 discussion on the Postfix -Users list. Congestion was reported with the active and incoming -queues large and not shrinking despite very large delivery agent +Users list. Congestion was reported with the +"active" and "incoming" queues +large and not shrinking despite very large delivery agent process limits. The thread is archived at: http://groups.google.com/groups?threadm=c0b7js$2r65$1@FreeBSD.csie.NCTU.edu.tw and @@ -331,7 +332,7 @@ that all the messages were for just a few destinations:

        -$ qshape        (show incoming and active queue status)
        +$ qshape        (show "incoming" and "active" queue status)
         
                                    T   A   5  10  20  40  80 160 320 320+
                          TOTAL 11775 9996  0   0   1   1  42  94 221 1420
        @@ -341,10 +342,10 @@ $ qshape        (show incoming
         
        -

        The "A" column showed the count of messages in the active queue, -and the numbered columns showed totals for the deferred queue. At -10000 messages (Postfix 1.x active queue size limit) the active -queue is full. The incoming was growing rapidly.

        +

        The "A" column showed the count of messages in the "active" queue, +and the numbered columns showed totals for the "deferred" queue. At +10000 messages (Postfix 1.x "active" queue size limit) the "active" queue +is full. The "incoming" queue was growing rapidly.

        With the trouble destinations clearly identified, the administrator quickly found and fixed the problem. It is substantially harder to @@ -356,8 +357,8 @@ one message at a time.

        Example 4: High volume destination backlog

        When a site you send a lot of email to is down or slow, mail -messages will rapidly build up in the deferred queue, or worse, in -the active queue. The qshape output will show large numbers for +messages will rapidly build up in the "deferred" queue, or worse, in +the "active" queue. The qshape output will show large numbers for the destination domain in all age buckets that overlap the starting time of the problem:

        @@ -373,13 +374,13 @@ $ qshape deferred | head

        Here the "highvolume.com" destination is continuing to accumulate -deferred mail. The incoming and active queues are fine, but the -deferred queue started growing some time between 1 and 2 hours ago +deferred mail. The "incoming" and "active" queues are fine, but the +"deferred" queue started growing some time between 1 and 2 hours ago and continues to grow.

        If the high volume destination is not down, but is instead -slow, one might see similar congestion in the active queue. Active -queue congestion is a greater cause for alarm; one might need to +slow, one might see similar congestion in the "active" queue. +"Active" queue congestion is a greater cause for alarm; one might need to take measures to ensure that the mail is deferred instead or even add an access(5) rule asking the sender to try again later.

        @@ -616,7 +617,7 @@ submission rate or perhaps excessive CPU consumption in the body_checks, or (Postfix ≥ 2.3) high latency milters.

        -

        Note, that once the active queue is full, the cleanup service +

        Note, that once the "active" queue is full, the cleanup service will attempt to slow down message injection by pausing $in_flow_delay for each message. In this case "maildrop" queue congestion may be a consequence of congestion downstream, rather than a problem in @@ -643,7 +644,7 @@ size of the "maildrop" queue. The administrator can define "smtpd" access(5) policies, or cleanup(8) header/body checks that cause messages to be automatically diverted from normal processing and placed indefinitely in the -"hold" queue. Messages placed in the "hold" queue stay there until +"hold" queue. Messages placed in the "hold" queue stay there until the administrator intervenes. No periodic delivery attempts are made for messages in the "hold" queue. The postsuper(1) command can be used to manually release messages into the "deferred" queue. @@ -651,8 +652,8 @@ can be used to manually release messages into the "hold" queue longer than $maximal_queue_lifetime. If such "old" messages need to be released from -the "hold" queue, they should typically be moved into the "maildrop" -queue using "postsuper -r", so that the message gets a new timestamp and +the "hold" queue, they should typically be moved into the "maildrop" queue +using "postsuper -r", so that the message gets a new timestamp and is given more than one opportunity to be delivered. Messages that are "young" can be moved directly into the "deferred" queue using "postsuper -H".

        @@ -672,21 +673,21 @@ notifies the queue manager of new mail arrival. The queue manager ignores incomplete queue files whose mode is 0600, as these are still being written by cleanup.

        -

        The queue manager scans the incoming queue bringing any new -mail into the "active" queue if the active queue resource limits -have not been exceeded. By default, the active queue accommodates -at most 20000 messages. Once the active queue message limit is -reached, the queue manager stops scanning the incoming (and deferred, -see below) queue.

        +

        The queue manager scans the "incoming" queue bringing any new +mail into the "active" queue if the "active" queue resource limits +have not been exceeded. By default, the "active" queue accommodates +at most 20000 messages. Once the "active" queue message limit is +reached, the queue manager stops scanning the "incoming" queue +(and the "deferred" queue, see below).

        -

        Under normal conditions the incoming queue is nearly empty (has +

        Under normal conditions the "incoming" queue is nearly empty (has only mode 0600 files), with the queue manager able to import new -messages into the active queue as soon as they become available. +messages into the "active" queue as soon as they become available.

        -

        The incoming queue grows when the message input rate spikes +

        The "incoming" queue grows when the message input rate spikes above the rate at which the queue manager can import messages into -the active queue. The main factors slowing down the queue manager +the "active" queue. The main factors slowing down the queue manager are disk I/O and lookup queries to the trivial-rewrite service. If the queue manager is routinely not keeping up, consider not using "slow" lookup services (MySQL, LDAP, ...) for transport lookups or speeding @@ -712,8 +713,8 @@ to 1 message per second, but is not strong enough to deflect an excessive input rate from many sources at the same time.

        If a server is being hammered from multiple directions, consider -raising the in_flow_delay to 10 seconds, but only if the incoming -queue is growing even while the active queue is not full and the +raising the in_flow_delay to 10 seconds, but only if the "incoming" queue +is growing even while the "active" queue is not full and the trivial-rewrite service is using a fast transport lookup mechanism.

        @@ -723,8 +724,8 @@ trivial-rewrite service is using a fast transport lookup mechanism. ensure fast and fair delivery of mail to all destinations within designated resource limits.

        -

        The active queue is somewhat analogous to an operating system's -process run queue. Messages in the active queue are ready to be +

        The "active" queue is somewhat analogous to an operating system's +process run queue. Messages in the "active" queue are ready to be sent (runnable), but are not necessarily in the process of being sent (running).

        @@ -732,15 +733,14 @@ sent (running).

        as a directory on disk, the real "active" queue is a set of data structures in the memory of the queue manager process.

        -

        Messages in the "maildrop", "hold", "incoming" and "deferred" -queues (see below) do not occupy memory; they are safely stored on +

        Messages in the "maildrop", "hold", "incoming" and "deferred" queues +(see below) do not occupy memory; they are safely stored on disk waiting for their turn to be processed. The envelope information for messages in the "active" queue is managed in memory, allowing the queue manager to do global scheduling, allocating available -delivery agent processes to an appropriate message in the active -queue.

        +delivery agent processes to an appropriate message in the "active" queue.

        -

        Within the active queue, (multi-recipient) messages are broken +

        Within the "active" queue, (multi-recipient) messages are broken up into groups of recipients that share the same transport/nexthop combination; the group size is capped by the transport's recipient concurrency limit.

        @@ -756,15 +756,15 @@ concurrency limits. Per-recipient limits are appropriate when performing final delivery to mailboxes rather than when relaying to a remote server.

        -

        Congestion occurs in the active queue when one or more destinations +

        Congestion occurs in the "active" queue when one or more destinations drain slower than the corresponding message input rate.

        -

        Input into the active queue comes both from new mail in the "incoming" -queue, and retries of mail in the "deferred" queue. Should the "deferred" -queue get really large, retries of old mail can dominate the arrival +

        Input into the "active" queue comes both from new mail in the "incoming" queue, +and retries of mail in the "deferred" queue. Should the "deferred" queue +get really large, retries of old mail can dominate the arrival rate of new mail. Systems with more CPU, faster disks and more network -bandwidth can deal with larger deferred queues, but as a rule of thumb -the deferred queue scales to somewhere between 100,000 and 1,000,000 +bandwidth can deal with larger "deferred" queues, but as a rule of thumb +the "deferred" queue scales to somewhere between 100,000 and 1,000,000 messages with good performance unlikely above that "limit". Systems with queues this large should typically stop accepting new mail, or put the backlog "on hold" until the underlying issue is fixed (provided that @@ -773,12 +773,12 @@ there is enough capacity to handle just the new mail).

        When a destination is down for some time, the queue manager will mark it dead, and immediately defer all mail for the destination without trying to assign it to a delivery agent. In this case the messages -will quickly leave the active queue and end up in the deferred queue +will quickly leave the "active" queue and end up in the "deferred" queue (with Postfix < 2.4, this is done directly by the queue manager, with Postfix ≥ 2.4 this is done via the "retry" delivery agent).

        When the destination is instead simply slow, or there is a problem -causing an excessive arrival rate the active queue will grow and will +causing an excessive arrival rate the "active" queue will grow and will become dominated by mail to the congested destination.

        The only way to reduce congestion is to either reduce the input @@ -818,7 +818,7 @@ throughput falls to just over 1 message per second.

        The best way to avoid bottlenecks when one or more MX hosts is non-responsive is to use connection caching. Connection caching was introduced with Postfix 2.2 and is by default enabled on demand for -destinations with a backlog of mail in the active queue. When connection +destinations with a backlog of mail in the "active" queue. When connection caching is in effect for a particular destination, established connections are re-used to send additional messages, this reduces the number of connections made per message delivery and maintains good throughput even @@ -849,20 +849,20 @@ transport allocates a separate delivery agent pool to these destinations and allows separate tuning of timeouts and concurrency limits.

        Another common cause of congestion is unwarranted flushing of the -entire deferred queue. The deferred queue holds messages that are likely +entire "deferred" queue. The "deferred" queue holds messages that are likely to fail to be delivered and are also likely to be slow to fail delivery -(time out). As a result the most common reaction to a large deferred queue +(time out). As a result the most common reaction to a large "deferred" queue (flush it!) is more than likely counter-productive, and typically makes -the congestion worse. Do not flush the deferred queue unless you expect +the congestion worse. Do not flush the "deferred" queue unless you expect that most of its content has recently become deliverable (e.g. relayhost back up after an outage)!

        Note that whenever the queue manager is restarted, there may -already be messages in the active queue directory, but the "real" -active queue in memory is empty. In order to recover the in-memory -state, the queue manager moves all the active queue messages -back into the incoming queue, and then uses its normal incoming -queue scan to refill the active queue. The process of moving all +already be messages in the "active" queue directory, but the "real" +"active" queue in memory is empty. In order to recover the in-memory +state, the queue manager moves all the "active" queue messages +back into the "incoming" queue, and then uses its normal "incoming" queue +scan to refill the "active" queue. The process of moving all the messages back and forth, redoing transport table (trivial-rewrite(8) resolve service) lookups, and re-importing the messages back into memory is expensive. At all costs, avoid frequent restarts of the @@ -872,20 +872,20 @@ queue manager (e.g. via frequent execution of "postfix reload").

        When all the deliverable recipients for a message are delivered, and for some recipients delivery failed for a transient reason (it -might succeed later), the message is placed in the deferred queue. +might succeed later), the message is placed in the "deferred" queue.

        -

        The queue manager scans the deferred queue periodically. The scan -interval is controlled by the queue_run_delay parameter. While a deferred -queue scan is in progress, if an incoming queue scan is also in progress -(ideally these are brief since the incoming queue should be short), the -queue manager alternates between looking for messages in the "incoming" -queue and in the "deferred" queue. This "round-robin" strategy prevents -starvation of either the incoming or the deferred queues.

        - -

        Each deferred queue scan only brings a fraction of the deferred -queue back into the active queue for a retry. This is because each -message in the deferred queue is assigned a "cool-off" time when +

        The queue manager scans the "deferred" queue periodically. The scan +interval is controlled by the queue_run_delay parameter. While a "deferred" queue +scan is in progress, if an "incoming" queue scan is also in progress +(ideally these are brief since the "incoming" queue should be short), the +queue manager alternates between looking for messages in the "incoming" queue +and in the "deferred" queue. This "round-robin" strategy prevents +starvation of either the "incoming" or the "deferred" queues.

        + +

        Each "deferred" queue scan only brings a fraction of the "deferred" queue +back into the "active" queue for a retry. This is because each +message in the "deferred" queue is assigned a "cool-off" time when it is deferred. This is done by time-warping the modification time of the queue file into the future. The queue file is not eligible for a retry if its modification time is not yet reached. @@ -897,36 +897,36 @@ the message's age in the queue, and adjusting up or down to lie within the limits. This means that young messages are initially retried more often than old messages.

        -

        If a high volume site routinely has large deferred queues, it +

        If a high volume site routinely has large "deferred" queues, it may be useful to adjust the queue_run_delay, minimal_backoff_time and maximal_backoff_time to provide short enough delays on first failure (Postfix ≥ 2.4 has a sensibly low minimal backoff time by default), with perhaps longer delays after multiple failures, to reduce the retransmission rate of old messages and thereby reduce the quantity -of previously deferred mail in the active queue. If you want a really +of previously deferred mail in the "active" queue. If you want a really low minimal_backoff_time, you may also want to lower queue_run_delay, but understand that more frequent scans will increase the demand for disk I/O.

        -

        One common cause of large deferred queues is failure to validate +

        One common cause of large "deferred" queues is failure to validate recipients at the SMTP input stage. Since spammers routinely launch dictionary attacks from unrepliable sender addresses, the bounces -for invalid recipient addresses clog the deferred queue (and at high -volumes proportionally clog the active queue). Recipient validation +for invalid recipient addresses clog the "deferred" queue (and at high +volumes proportionally clog the "active" queue). Recipient validation is strongly recommended through use of the local_recipient_maps and relay_recipient_maps parameters. Even when bounces drain quickly they inundate innocent victims of forgery with unwanted email. To avoid this, do not accept mail for invalid recipients.

        When a host with lots of deferred mail is down for some time, -it is possible for the entire deferred queue to reach its retry -time simultaneously. This can lead to a very full active queue once +it is possible for the entire "deferred" queue to reach its retry +time simultaneously. This can lead to a very full "active" queue once the host comes back up. The phenomenon can repeat approximately every maximal_backoff_time seconds if the messages are again deferred after a brief burst of congestion. Perhaps, a future Postfix release will add a random offset to the retry time (or use a combination -of strategies) to reduce the odds of repeated complete deferred -queue flushes.

        +of strategies) to reduce the odds of repeated complete "deferred" queue +flushes.

        Credits

        diff --git a/postfix/html/SASL_README.html b/postfix/html/SASL_README.html index c074c8c21..eeaad4446 100644 --- a/postfix/html/SASL_README.html +++ b/postfix/html/SASL_README.html @@ -960,9 +960,9 @@ file entries:

        ldapdb_uri
        -

        Specify either ldapi:// for to connect over +

        Specify either ldapi:// to connect over a UNIX-domain socket, ldap:// for an unencrypted TCP -connection or ldaps:// for an encrypted TCP connection. +connection, or ldaps:// for an encrypted TCP connection.

        ldapdb_id
        @@ -1809,14 +1809,14 @@ resort.

        tables into one single MySQL database, and configure different Postfix queries to extract the appropriate information.

        -
      • Specify dbm instead of hash if your system uses dbm files -instead of db files. To find out what lookup tables Postfix supports, -use the command "postconf -m".

        +
      • Specify dbm instead of hash if your system uses +dbm files instead of db files. To find out what lookup +tables Postfix supports, use the command "postconf -m".

        -
      • Execute the command "postmap /etc/postfix/sasl_passwd" +

      • Execute the command "postmap /etc/postfix/sasl_passwd" whenever you change the sasl_passwd table.

        -
      • Execute the command "postmap /etc/postfix/sender_relay" +

      • Execute the command "postmap /etc/postfix/sender_relay" whenever you change the sender_relay table.

      @@ -2047,7 +2047,7 @@ necessary; it just makes Postfix configuration a little more convenient because you don't have to specify the SASL plug-in type in the Postfix main.cf file (but this may cause surprises when you switch to a later Postfix version that is built with the default -SASL type of sasl).

      +SASL type of cyrus).

    • @@ -2188,7 +2188,7 @@ it unless you are forced to. The makers of Cyrus SASL write:

      This library is being deprecated and applications should transition to using the SASLv2 library (source: Project Cyrus: +href="http://www.cyrusimap.org/download.html">Project Cyrus: Downloads).

      If you still need to set it up, here's a quick rundown:

      diff --git a/postfix/html/SCHEDULER_README.html b/postfix/html/SCHEDULER_README.html index ac92754b2..f303f33fa 100644 --- a/postfix/html/SCHEDULER_README.html +++ b/postfix/html/SCHEDULER_README.html @@ -720,7 +720,7 @@ nqmgr

      Let's start by recapitulating the structures and terms used when -referring to queue manager and how it operates. Many of these are +referring to the queue manager and how it operates. Many of these are partially described elsewhere, but it is nice to have a coherent overview in one place: @@ -745,7 +745,7 @@ it shall talk to) and jobs (referencing the messages it shall deliver).

    • Each transport queue (not to be confused with the on-disk -active queue or incoming queue) groups everything what is going be +"active" queue or "incoming" queue) groups everything what is going be delivered to given destination (aka nexthop) by its transport. Each queue belongs to one transport, so each destination may be referred to by several queues, one for each transport. Each queue maintains @@ -795,7 +795,7 @@ up the message

      -Whenever nqmgr moves a queue file into the active queue, +Whenever nqmgr moves a queue file into the "active" queue, the following happens: It reads all necessary information from the queue file as oqmgr does, and also reads as many recipients as possible - more on that later, for now let's just pretend it @@ -809,7 +809,7 @@ Then it resolves the recipients as oqmgr does, which means obtaining (address, nexthop, transport) triple for each recipient. For each triple, it finds the transport; if it does not exist yet, it instantiates it (unless it's dead). Within the -transport, it finds the destination queue for given nexthop; if it +transport, it finds the destination queue for the given nexthop; if it does not exist yet, it instantiates it (unless it's dead). The triple is then bound to given destination queue. This happens in qmgr_resolve() and is basically the same as in oqmgr. @@ -826,9 +826,10 @@ the bound destination queue within this jobs context; if it does not exist yet, it instantiates it. Finally, it stores the address from the resolved triple to the recipient entry which is appended to both the queue entry list and the peer entry list. The addresses -for same nexthop are batched in the entries up to recipient_concurrency -limit for that transport. This happens in qmgr_assign() and apart -from that it operates with job and peer structures it is basically the +for the same nexthop are batched in the entries up to the +transport_destination_recipient_limit for that transport. +This happens in qmgr_message_assign(), and apart +from that it operates with job and peer structures, it is basically the same as in oqmgr.

      @@ -845,9 +846,9 @@ time is important as we will see shortly.

      -[Now you should have pretty good idea what is the state of the -nqmgr after couple of messages was picked up, what is the -relation between all those job, peer, queue and entry structures.] +[Now you should have a pretty good idea what the state of the +nqmgr is after a couple of messages were picked up, and what the +relation is between all those job, peer, queue and entry structures.]

      @@ -894,7 +895,8 @@ was picked up by the nqmgr. So by default we get the top-level round-robin transport, and within each transport we get the FIFO message delivery. The round-robin of the peers by the destination is perhaps of little importance in most real-life cases -(unless the recipient_concurrency limit is reached, in one job there +(unless the transport_destination_recipient_limit is reached, +in one job there is only one peer structure for each destination), but theoretically it makes sure that even within single jobs, destinations are treated fairly. @@ -986,11 +988,11 @@ mail followed by two two-recipient mails? The simple answer would be to use delivery sequence 12121313. But the problem is that this does not scale well. Imagine you have -mail with thousand recipients followed by mail with hundred recipients. +mail with a thousand recipients followed by mail with a hundred recipients. It is tempting to suggest the delivery sequence like 121212...., but alas! Imagine there arrives another mail with say ten recipients. But there are no free slots anymore, so it can't slip by, not even -if it had just only one recipients. It will be stuck until the +if it had only one recipient. It will be stuck until the hundred-recipient mail is delivered, which really sucks.

      @@ -998,7 +1000,7 @@ hundred-recipient mail is delivered, which really sucks.

      So, it becomes obvious that while inflating the message to get -free slots is great idea, one has to be really careful of how the +free slots is a great idea, one has to be really careful of how the free slots are assigned, otherwise one might corner himself. So, how does nqmgr really use the free slots? @@ -1032,7 +1034,7 @@ thousand recipient mail?

      -Well, despite it looks so at the first glance, another trick will +Well, despite the fact that it looks so at the first glance, another trick will allow us to answer "no, we are not!". If we had said that we will inflate the delivery time twice at maximum, and then we consider every other slot as a free slot, then we would overinflate in case @@ -1056,7 +1058,7 @@ transport has a transp defaults to default_delivery_slot_cost parameter which is set to 5 by default. This is the k from the paragraph above. Each time k entries of the job are selected for delivery, this counter is -incremented by one. Once there are some slots accumulated, job which +incremented by one. Once there are some slots accumulated, a job which requires no more than that number of slots to be fully delivered can preempt this job. @@ -1066,7 +1068,7 @@ can preempt this job. [Well, the truth is, the counter is incremented every time an entry is selected and it is divided by k when it is used. -But for the understanding it's good enough to use +But to understand, it's good enough to use the above approximation of the truth.]

      @@ -1083,7 +1085,7 @@ and when does all this exactly happen?

      The answer for the first part is simple. The job whose entry was -selected the last time is so called current job. Normally, it is +selected the last time is the so called current job. Normally, it is the first job on the scheduler's job list, but destination concurrency limits may change this as we will see later. It is always only the current job which may get preempted. @@ -1092,7 +1094,7 @@ current job which may get preempted.

      -Now for the second part. The current job has certain amount of +Now for the second part. The current job has a certain amount of recipient entries, and as such may accumulate at maximum some amount of available delivery slots. It might have already accumulated some, and perhaps even already used some when it was preempted before @@ -1111,8 +1113,8 @@ That is, the older the job is, the more we should try to deliver it in order to get best message delivery rates. These rates are of course subject to how many recipients the message has, therefore the division by the recipient (entry) count. No one shall be surprised -that message with n recipients takes n times longer to deliver than -message with one recipient. +that a message with n recipients takes n times longer to deliver than +a message with one recipient.

      @@ -1124,9 +1126,9 @@ delivered within the number of slots the current job already accumulated? Why do we need to estimate how much it has yet to accumulate? If you found out the answer, congratulate yourself. If we did it this simple way, we would always choose the candidate -with least recipient entries. If there were enough single recipient +with the fewest recipient entries. If there were enough single recipient mails coming in, they would always slip by the bulk mail as soon -as possible, and the two and more recipients mail would never get +as possible, and the two or more recipients mail would never get a chance, no matter how long they have been sitting around in the job list. @@ -1134,7 +1136,7 @@ job list.

      -This candidate selection has interesting implication - that when +This candidate selection has an interesting implication - that when we choose the best candidate for preemption (this is done in qmgr_choose_candidate()), it may happen that we may not use it for preemption immediately. This leads to an answer to the last part @@ -1148,12 +1150,12 @@ The preemption attempt happens every time next transport's recipient entry is to be chosen for delivery. To avoid needless overhead, the preemption is not attempted if the current job could never accumulate more than transport_minimum_delivery_slots (defaults to -default_minimum_delivery_slots which defaults to 3). If there is +default_minimum_delivery_slots which defaults to 3). If there are already enough accumulated slots to preempt the current job by the chosen best candidate, it is done immediately. This basically means that the candidate is moved in front of the current job on the scheduler's job list and decreasing the accumulated slot counter -by the amount used by the candidate. If there is not enough slots... +by the amount used by the candidate. If there are not enough slots... well, I could say that nothing happens and the another preemption is attempted the next time. But that's not the complete truth. @@ -1164,13 +1166,13 @@ is attempted the next time. But that's not the complete truth. The truth is that it turns out that it is not really necessary to wait until the jobs counter accumulates all the delivery slots in advance. Say we have ten-recipient mail followed by two two-recipient -mails. If the preemption happened when enough delivery slot accumulate +mails. If the preemption happened when enough delivery slots accumulate (assuming slot cost 2), the delivery sequence becomes 11112211113311. Now what would we get if we would wait only for 50% of the necessary slots to accumulate and we promise we would wait for the remaining 50% later, after we get back -to the preempted job? If we use such slot loan, the delivery sequence -becomes 11221111331111. As we can see, it makes it no +to the preempted job? If we use such a slot loan, the delivery sequence +becomes 11221111331111. As we can see, it makes it not considerably worse for the delivery of the ten-recipient mail, but it allows the small messages to be delivered sooner. @@ -1192,15 +1194,15 @@ accumulated so far.

      -And it pretty much concludes this chapter. +And that pretty much concludes this chapter.

      [Now you should have a feeling that you pretty much understand the -scheduler and the preemption, or at least that you will have it -after you read the last chapter couple more times. You shall clearly +scheduler and the preemption, or at least that you will have +after you read the last chapter a couple more times. You shall clearly see the job list and the preemption happening at its head, in ideal delivery conditions. The feeling of understanding shall last until you start wondering what happens if some of the jobs are blocked, @@ -1226,17 +1228,17 @@ selected by the scheduler?

      -From user's point of view it is all simple. If some of the peers +From the user's point of view it is all simple. If some of the peers of a job can't be selected, those peers are simply skipped by the entry selection algorithm (the pseudo-code described before) and only the selectable ones are used. If none of the peers may be selected, the job is declared a "blocker job". Blocker jobs are skipped by the entry selection algorithm and they are also excluded -from the candidates for preemption of current job. Thus the scheduler +from the candidates for preemption of the current job. Thus the scheduler effectively behaves as if the blocker jobs didn't exist on the job list at all. As soon as at least one of the peers of a blocker job becomes unblocked (that is, the delivery agent handling the delivery -of the recipient entry for given destination successfully finishes), +of the recipient entry for the given destination successfully finishes), the job's blocker status is removed and the job again participates in all further scheduler actions normally. @@ -1298,8 +1300,8 @@ this change because of blockers?

      -The answer is: a lot. Any job may become blocker job at any time, -and also become normal job again at any time. This has several +The answer is: a lot. Any job may become a blocker job at any time, +and also become a normal job again at any time. This has several important implications:

      @@ -1320,7 +1322,7 @@ unblocked and is completed... You get the idea.

      [Interesting side note: even when jobs are delivered out of order, -from single destination's point of view the jobs are still delivered +from a single destination's point of view the jobs are still delivered in the expected order (that is, FIFO unless there was some preemption involved). This is because whenever a destination queue becomes unblocked (the destination limit allows selection of more recipient @@ -1371,7 +1373,7 @@ huh?

      If I illustrate the relations after the above mentioned examples -(but those in point 1)), the situation would look like this: +(but those in point 1), the situation would look like this:

      @@ -1398,8 +1400,8 @@ Now how does nqmgr deal with all these complicated relations?

      Well, it maintains them all as described, but fortunately, all these -relations are necessary only for purposes of proper counting of -available delivery slots. For purposes of ordering the jobs for +relations are necessary only for the purpose of proper counting of +available delivery slots. For the purpose of ordering the jobs for entry selection, the original rule still applies: "the job preempting the current job is moved in front of the current job on the job list". So for entry selection purposes, the job relations remain @@ -1428,8 +1430,8 @@ are simply ignored.

      -[By now, you should have a feeling that there is more things going -under the hood than you ever wanted to know. You decide that +[By now, you should have a feeling that there are more things going +on under the hood than you ever wanted to know. You decide that forgetting about this chapter is the best you can do for the sake of your mind's health and you basically stick with the idea how the scheduler works in ideal conditions, when there are no blockers, @@ -1443,11 +1445,11 @@ limits

      When discussing the nqmgr scheduler, we have so far assumed -that all recipients of all messages in the active queue are completely -read into the memory. This is simply not true. There is an upper +that all recipients of all messages in the "active" queue are completely +read into memory. This is simply not true. There is an upper bound on the amount of memory the nqmgr may use, and therefore it must impose some limits on the information it may store -in the memory at any given time. +in memory at any given time.

      @@ -1456,11 +1458,11 @@ in the memory at any given time. First of all, not all messages may be read in-core at once. At any time, only qmgr_message_active_limit messages may be read in-core at maximum. When read into memory, the messages are picked from the -incoming and deferred message queues and moved to the active queue -(incoming having priority), so if there is more than -qmgr_message_active_limit messages queued in the active queue, the -rest will have to wait until (some of) the messages in the active -queue are completely delivered (or deferred). +"incoming" and "deferred" queues and moved to the "active" queue +(incoming having priority), so if there are more than +qmgr_message_active_limit messages queued in the "active" queue, the +rest will have to wait until (some of) the messages in the "active" queue +are completely delivered (or deferred).

      @@ -1468,11 +1470,11 @@ queue are completely delivered (or deferred). Even with the limited amount of in-core messages, there is another limit which must be imposed in order to avoid memory exhaustion. -Each message may contain huge amount of recipients (tens or hundreds +Each message may contain a huge number of recipients (tens or hundreds of thousands are not uncommon), so if nqmgr read all -recipients of all messages in the active queue, it may easily run +recipients of all messages in the "active" queue, it may easily run out of memory. Therefore there must be some upper bound on the -amount of message recipients which are read into the memory at the +amount of message recipients which are read into memory at the same time.

      @@ -1490,8 +1492,8 @@ affects the nqmgr and its scheduler. The message limit is straightforward - it just limits the size of the lookahead the nqmgr's scheduler has when choosing which -message can preempt the current one. Messages not in the active -queue simply are not considered at all. +message can preempt the current one. Messages not in the "active" queue +are simply not considered at all.

      @@ -1517,12 +1519,12 @@ of recipient entries. With unread recipients, it is not clear how many recipient entries there will be, as they are subject to per-destination grouping. It is not even clear to what transports (and thus jobs) the recipients will be assigned. And with messages -coming from the deferred queue, it is not even clear how many unread +coming from the "deferred" queue, it is not even clear how many unread recipients are still to be delivered. This all means that the scheduler must use only estimates of how many recipients entries there will be. Fortunately, it is possible to estimate the minimum and maximum correctly, so the scheduler can always err on the safe -side. Obviously, the better the estimates, the better results, so +side. Obviously, the better the estimates, the better the results, so it is best when we are able to read all recipients in-core and turn the estimates into exact counts, or at least try to read as many as possible to make the estimates as accurate as possible. @@ -1552,9 +1554,9 @@ it achieve it?

      Perhaps the easiest solution would be to say that each message may -have at maximum X recipients stored in-core, but such solution would +have at maximum X recipients stored in-core, but such a solution would be poor for several reasons. With reasonable qmgr_message_active_limit -values, the X would have to be quite low to maintain reasonable +values, the X would have to be quite low to maintain a reasonable memory footprint. And with low X lots of things would not work well. The nqmgr would have problems to use the transport_destination_recipient_limit efficiently. The @@ -1568,11 +1570,11 @@ again.

      Therefore it seems reasonable to have a solution which does not use -a limit imposed on per-message basis, but which maintains a pool +a limit imposed on a per-message basis, but which maintains a pool of available recipient slots, which can be shared among all messages in the most efficient manner. And as we do not want separate transports to compete for resources whenever possible, it seems -appropriate to maintain such recipient pool for each transport +appropriate to maintain such a recipient pool for each transport separately. This is the general idea, now how does it work in practice? @@ -1580,13 +1582,13 @@ practice?

      -First we have to solve little chicken-and-egg problem. If we want +First we have to solve a little chicken-and-egg problem. If we want to use the per-transport recipient pools, we first need to know to -what transport(s) is the message assigned. But we will find that -out only after we read in the recipients first. So it is obvious +what transport(s) the message is assigned. But we will find that +out only after we first read in the recipients. So it is obvious that we first have to read in some recipients, use them to find out -to what transports is the message to be assigned, and only after -that we can use the per-transport recipient pools. +to what transports the message is to be assigned, and only after +that can we use the per-transport recipient pools.

      @@ -1595,12 +1597,12 @@ that we can use the per-transport recipient pools. Now how many recipients shall we read for the first time? This is what qmgr_message_recipient_minimum and qmgr_message_recipient_limit values control. The qmgr_message_recipient_minimum value specifies -how many recipients of each message we will read for the first time, +how many recipients of each message we will read the first time, no matter what. It is necessary to read at least one recipient before we can assign the message to a transport and create the first job. However, reading only qmgr_message_recipient_minimum recipients even if there are only few messages with few recipients in-core would -be wasteful. Therefore if there is less than qmgr_message_recipient_limit +be wasteful. Therefore if there are fewer than qmgr_message_recipient_limit recipients in-core so far, the first batch of recipients may be larger than qmgr_message_recipient_minimum - as large as is required to reach the qmgr_message_recipient_limit limit. @@ -1624,10 +1626,10 @@ recipient slots of all jobs of the message permits (plus the

      -For example, if a message has three jobs, first with 1 recipient -still in-core and 4 recipient slots, second with 5 recipient in-core -and 5 recipient slots, and third with 2 recipients in-core and 0 -recipient slots, it has 1+5+2=7 recipients in-core and 4+5+0=9 jobs' +For example, if a message has three jobs, the first with 1 recipient +still in-core and 4 recipient slots, the second with 5 recipients in-core +and 5 recipient slots, and the third with 2 recipients in-core and 0 +recipient slots, it has 1+5+2=8 recipients in-core and 4+5+0=9 jobs' recipients slots in total. This means that we could immediately read 2+qmgr_message_recipient_minimum more recipients of that message in core. @@ -1675,9 +1677,9 @@ More specifically, each time a job is created and appended to the job list, it gets all unused recipient slots from its transport's pool. It keeps them until all recipients of its message are read. When this happens, all unused recipient slots are transferred to -the next job (which is now in fact now first such job) on the job +the next job (which is now in fact the first such job) on the job list which still has some recipients unread, or eventually back to -the transport pool if there is no such job. Such transfer then also +the transport pool if there is no such job. Such a transfer then also happens whenever a recipient entry of that job is delivered.

      @@ -1685,10 +1687,10 @@ happens whenever a recipient entry of that job is delivered.

      There is also a scenario when a job is not appended to the end of -the job list (for example it was created as a result of second or +the job list (for example it was created as a result of a second or later recipient batch). Then it works exactly as above, except that if it was put in front of the first unread job (that is, the job -of a message which still has some unread recipients in queue file), +of a message which still has some unread recipients in the queue file), that job is first forced to return all of its unused recipient slots to the transport pool. @@ -1705,21 +1707,21 @@ as they still have recipients in-core (the maximum is there because of the sponsoring mentioned before) and the jobs after this job get nothing from the transport recipient pool (unless they got something before and then the first unread job was created and enqueued in -front of them later - in such case the also get at maximum as many +front of them later - in such a case, they also get at maximum as many slots as they have recipients in-core).

      -Things work fine in such state for most of the time, because the -current job is either completely read in-core or has as much recipient +Things work fine in such a state for most of the time, because the +current job is either completely read in-core or has as many recipient slots as there are, but there is one situation which we still have to take care of specially. Imagine if the current job is preempted by some unread job from the job list and there are no more recipient slots available, so this new current job could read only batches of qmgr_message_recipient_minimum recipients at a time. This would -really degrade performance. For this reason, each transport has +really degrade performance. For this reason, each transport has an extra pool of transport_extra_recipient_limit recipient slots, dedicated exactly for this situation. Each time an unread job preempts the current job, it gets half of the remaining recipient @@ -1730,7 +1732,7 @@ slots from the normal pool and this extra pool.

      And that's it. It sure does sound pretty complicated, but fortunately -most people don't really have to care how exactly it works as long +most people don't really have to care exactly how it works as long as it works. Perhaps the only important things to know for most people are the following upper bound formulas: @@ -1783,7 +1785,7 @@ where the sum is over all used transports.

      And this terribly complicated chapter concludes the documentation -of nqmgr scheduler. +of the nqmgr scheduler.

      @@ -1793,7 +1795,7 @@ of nqmgr scheduler. inside out. In practice, you still hope that you will never have to really understand the last or last two chapters completely, and fortunately most people really won't. Understanding how the scheduler -works in ideal conditions is more than good enough for vast majority +works in ideal conditions is more than good enough for the vast majority of users.]

      diff --git a/postfix/html/SMTPD_ACCESS_README.html b/postfix/html/SMTPD_ACCESS_README.html index 53aa66d1d..478d153ec 100644 --- a/postfix/html/SMTPD_ACCESS_README.html +++ b/postfix/html/SMTPD_ACCESS_README.html @@ -218,8 +218,9 @@ some restriction produces a result of PERMIT, REJECT or DEFER (try again later). The end of each list is equivalent to a PERMIT result. By placing a PERMIT restriction before a REJECT restriction you can make exceptions for specific clients or users. This is called -allowlisting; the fourth example above allows mail from local -networks but otherwise rejects mail to arbitrary destinations.

      +allowlisting; the smtpd_relay_restrictions example above allows mail from local +networks, and from SASL authenticated clients, but otherwise rejects mail +to arbitrary destinations.

      The table below summarizes the purpose of each SMTP access restriction list. All lists use the exact same syntax; they differ diff --git a/postfix/html/SMTPD_POLICY_README.html b/postfix/html/SMTPD_POLICY_README.html index bc58dd45c..3f74fc59f 100644 --- a/postfix/html/SMTPD_POLICY_README.html +++ b/postfix/html/SMTPD_POLICY_README.html @@ -24,14 +24,14 @@ block or accept mail at specific SMTP protocol stages. In addition, the Postfix SMTP server can delegate decisions to an external policy server (Postfix 2.1 and later).

      -

      With this policy delegation mechanism, a simple -greylist policy can be implemented with only a dozen lines of +

      With this policy delegation mechanism, a simple +greylist policy can be implemented with only a dozen lines of Perl, as is shown at the end of this document. A complete example can be found in the Postfix source code, in the directory examples/smtpd-policy.

      Another example of policy delegation is the SPF policy server -at https://web.archive.org/web/20190221142057/http://www.openspf.org/Software.

      +at https://web.archive.org/web/20190221142057/http://www.openspf.org/Software.

      Policy delegation is now the preferred method for adding policies to Postfix. It's much easier to develop a new feature in few lines @@ -269,7 +269,7 @@ a TCP socket at 127.0.0.1 port 9998. The second example specifies an absolute pathname of a UNIX-domain socket. The third example specifies a pathname relative to the Postfix queue directory; use this for policy servers that are spawned by the Postfix master -daemon.

      +daemon. On many systems, "local" is a synonym for "unix".

      To create a policy service that listens on a UNIX-domain socket called "policy", and that runs under control of the Postfix spawn(8) @@ -316,7 +316,7 @@ open relay.

    • Line 11: this increases the time that a policy server process may run to 3600 seconds. The default time limit of 1000 -seconds is too short; the policy daemon needs to run long as the +seconds is too short; the policy daemon needs to run as long as the SMTP server process that talks to it. See the spawn(8) manpage for more information about the transport_time_limit parameter.

      @@ -565,7 +565,7 @@ each request and reply.

    • Line 6: this increases the time that a greylist server process may run to 3600 seconds. The default time limit of 1000 -seconds is too short; the greylist daemon needs to run long as the +seconds is too short; the greylist daemon needs to run as long as the SMTP server process that talks to it. See the spawn(8) manpage for more information about the transport_time_limit parameter.

      @@ -615,7 +615,7 @@ client/server configuration" section above.

      domains that often appear in forged email. At some point in cyberspace/time a list of frequently forged MAIL FROM domains could be found at -http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in. +https://web.archive.org/web/20080526153208/http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in.
      diff --git a/postfix/html/SMTPD_PROXY_README.html b/postfix/html/SMTPD_PROXY_README.html
      index ab9a18e57..9e90ed103 100644
      --- a/postfix/html/SMTPD_PROXY_README.html
      +++ b/postfix/html/SMTPD_PROXY_README.html
      @@ -199,8 +199,9 @@ usual. 

      The content filter itself is not described here. You can use any filter that is SMTP enabled. For non-SMTP capable content filtering software, Bennett Todd's SMTP proxy implements a nice -Perl-based framework. See: http://bent.latency.net/smtpprox/ or -https://github.com/jnorell/smtpprox.

      +Perl-based framework. See: +https://web.archive.org/web/20151022025756/http://bent.latency.net/smtpprox/ +or https://github.com/jnorell/smtpprox/

      @@ -351,8 +352,8 @@ the top of the master.cf file:

      By default, the filter has 100 seconds to do its work. If it takes longer then Postfix gives up and reports an error to the -remote SMTP client. You can increase this time limit (see configuration -parameter section below) but doing so is pointless because you +remote SMTP client. You can increase this time limit (see the "Configuration +parameters" section below) but doing so is pointless because you can't control when the remote SMTP client times out.

      Configuration parameters

      diff --git a/postfix/html/SMTPUTF8_README.html b/postfix/html/SMTPUTF8_README.html index 9bcbdf598..4f37c9c75 100644 --- a/postfix/html/SMTPUTF8_README.html +++ b/postfix/html/SMTPUTF8_README.html @@ -244,7 +244,7 @@ turned on (smtputf8_enable = yes).

      For compatibility with pre-SMTPUTF8 environments, Postfix does not automatically set the "SMTPUTF8 requested" flag on messages -from non-SMTPUTF8 clients that contain an UTF-8 header value or +from non-SMTPUTF8 clients that contain a UTF-8 header value or UTF-8 address localpart. This would make such messages undeliverable to non-SMTPUTF8 servers, and could be a barrier to SMTPUTF8 adoption.

      diff --git a/postfix/html/SOHO_README.html b/postfix/html/SOHO_README.html index f6f879a6c..2d86167dc 100644 --- a/postfix/html/SOHO_README.html +++ b/postfix/html/SOHO_README.html @@ -117,7 +117,7 @@ send mail between users on the same machine.

      The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

      +discussed in the first half of this document.

      @@ -165,7 +165,7 @@ address of their own.

      The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

      +discussed in the first half of this document.

      @@ -400,14 +400,14 @@ resort.  

      tables into one single MySQL database, and configure different Postfix queries to extract the appropriate information.

      -
    • Specify dbm instead of hash if your system uses dbm files -instead of db files. To find out what lookup tables Postfix supports, -use the command "postconf -m".

      +
    • Specify dbm instead of hash if your system uses +dbm files instead of db files. To find out what lookup +tables Postfix supports, use the command "postconf -m".

      -
    • Execute the command "postmap /etc/postfix/sasl_passwd" +

    • Execute the command "postmap /etc/postfix/sasl_passwd" whenever you change the sasl_passwd table.

      -
    • Execute the command "postmap /etc/postfix/sender_relay" +

    • Execute the command "postmap /etc/postfix/sender_relay" whenever you change the sender_relay table.

    diff --git a/postfix/html/SQLITE_README.html b/postfix/html/SQLITE_README.html index f850d50a7..bc91e5fdc 100644 --- a/postfix/html/SQLITE_README.html +++ b/postfix/html/SQLITE_README.html @@ -98,12 +98,6 @@ dbpath = /some/path/to/sqlite_database query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid' -

    Additional notes

    - -

    The SQLite configuration interface setup allows for multiple -sqlite databases: you can use one for a virtual table, one for an -access table, and one for an aliases table if you want.

    -

    Credits

    SQLite support was added with Postfix version 2.8.

    diff --git a/postfix/html/STANDARD_CONFIGURATION_README.html b/postfix/html/STANDARD_CONFIGURATION_README.html index 4fa268161..ee076f61f 100644 --- a/postfix/html/STANDARD_CONFIGURATION_README.html +++ b/postfix/html/STANDARD_CONFIGURATION_README.html @@ -168,7 +168,7 @@ at their default settings.

    First we present the non-mailhost configuration, because it is the simpler one. This machine sends mail as "user@example.com" and -is final destination for "user@hostname.example.com".

    +is the final destination for "user@hostname.example.com".

    @@ -198,7 +198,7 @@ a firewall". 

    Next we present the mailhost configuration. This machine sends -mail as "user@example.com" and is final destination for +mail as "user@example.com" and is the final destination for "user@hostname.example.com" as well as "user@example.com".

    @@ -341,7 +341,7 @@ All the mail to these two accounts is forwarded to an inside address. only address literals matching $inet_interfaces or $proxy_interfaces are deemed local. So "localpart@[a.d.d.r]" can be matched as simply "localpart" in canonical(5) and virtual(5). This avoids the need to -specify firewall IP addresses into Postfix configuration files.

    +specify firewall IP addresses in Postfix configuration files.

    @@ -478,7 +478,7 @@ out what Postfix version you have, execute the command "postconf

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    @@ -526,7 +526,7 @@ you edit the transport table. 

    Configuring Postfix as primary or backup MX host for a remote site

    This section presents additional configuration. You need to -combine this with basic configuration information as discussed the +combine this with basic configuration information as discussed in the first half of this document.

    When your system is SECONDARY MX host for a remote site this @@ -642,7 +642,7 @@ of the time. For dialup connections that are up 24x7, see the local area network section above.

    This section presents additional configuration. You need to -combine this with basic configuration information as discussed the +combine this with basic configuration information as discussed in the first half of this document.

    If you do not have your own hostname and IP address (usually @@ -749,7 +749,7 @@ send mail between users on the same machine.

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    @@ -797,7 +797,7 @@ address of their own.

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    diff --git a/postfix/html/STRESS_README.html b/postfix/html/STRESS_README.html
    index 0036b28d2..bc2afb836 100644
    --- a/postfix/html/STRESS_README.html
    +++ b/postfix/html/STRESS_README.html
    @@ -543,7 +543,7 @@ services that accept remote connections. 

    The postscreen(8) daemon, introduced with Postfix 2.8, provides additional protection against mail server overload. One postscreen(8) process handles multiple inbound SMTP connections, and decides which -clients may to talk to a Postfix SMTP server process. By keeping +clients may talk to a Postfix SMTP server process. By keeping spambots away, postscreen(8) leaves more SMTP server processes available for legitimate clients, and delays the onset of server overload conditions.

    diff --git a/postfix/html/TLS_LEGACY_README.html b/postfix/html/TLS_LEGACY_README.html index e36ad4e1e..1d8a8ae8d 100644 --- a/postfix/html/TLS_LEGACY_README.html +++ b/postfix/html/TLS_LEGACY_README.html @@ -35,7 +35,7 @@ SMTP mail or with SASL authentication.

    Postfix version 2.2 introduces support for TLS as described in RFC 3207. TLS Support for older Postfix versions was available as an add-on patch. The section "Compatibility with -Postfix < 2.2 TLS support" below discusses the differences +Postfix < 2.2 TLS support" below discusses the differences between these implementations.

    Topics covered in this document:

    @@ -54,7 +54,7 @@ between these implementations.

  • Reporting problems -
  • Compatibility with Postfix < 2.2 TLS support +
  • Compatibility with Postfix < 2.2 TLS support
  • Credits @@ -225,7 +225,7 @@ key configuration

    In order to use TLS, the Postfix SMTP server needs a certificate and a private key. Both must be in "pem" format. The private key must not be encrypted, meaning: the key must be accessible without -password. Both certificate and private key may be in the same +a password. Both certificate and private key may be in the same file.

    Both RSA and DSA certificates are supported. Typically you will @@ -253,7 +253,7 @@ CA". Create the server.pem file with:

  • A Postfix SMTP server certificate supplied here must be usable -as SSL server certificate and hence pass the "openssl verify -purpose +as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test.

    A client that trusts the root CA has a local copy of the root @@ -616,7 +616,7 @@ as a key for the specified access(5) table.

    The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special CA issues the client certificates, and -only if this CA is listed as trusted CA. If other CAs are trusted, +only if this CA is listed as a trusted CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server.

    @@ -663,7 +663,7 @@ the user or host.

    To influence the Postfix SMTP server cipher selection scheme, you can give cipherlist string. A detailed description would go -to far here; please refer to the OpenSSL documentation. If you +too far here; please refer to the OpenSSL documentation. If you don't know what to do with it, simply don't touch it and leave the (openssl-)compiled in default!

    @@ -778,7 +778,7 @@ certificate is presented.

    key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "pem" format. The private key must not be encrypted, meaning: it must be accessible without -password. Both parts (certificate and private key) may be in the +a password. Both parts (certificate and private key) may be in the same file.

    In order for remote SMTP servers to verify the Postfix SMTP @@ -798,7 +798,7 @@ Create the client.pem file with:

    A Postfix SMTP client certificate supplied here must be usable -as SSL client certificate and hence pass the "openssl verify -purpose +as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test.

    A server that trusts the root CA has a local copy of the root @@ -1156,9 +1156,9 @@ policy is based on smtp_use_tls, smtp_tls_enforce_peername = yes" imply "smtp_use_tls = yes".

  • When both hostname and next-hop destination lookups produce -a result, the more specific per-site policy (NONE, MUST, etc) +a result, the more specific per-site policy (NONE, MUST, etc.) overrides the less specific one (MAY), and the more secure per-site -policy (MUST, etc) overrides the less secure one (NONE).

    +policy (MUST, etc.) overrides the less secure one (NONE).

  • After the per-site policy lookups are combined, the result generally overrides the global policy. The exception is the less @@ -1215,7 +1215,7 @@ verification. This feature requires Postfix 2.2.9 or later.

    example.org NONE # TLS should not be used with the host smtp.example.com. - smtp.example.com NONE + [smtp.example.com] NONE
  • @@ -1266,7 +1266,7 @@ special CA which then issues the actual certificate...)

    To influence the Postfix SMTP client cipher selection scheme, you can give cipherlist string. A detailed description would go -to far here; please refer to the OpenSSL documentation. If you +too far here; please refer to the OpenSSL documentation. If you don't know what to do with it, simply don't touch it and leave the (openssl-)compiled in default!

    @@ -1539,7 +1539,7 @@ Patches, when possible, are greatly appreciated too.

    -

    Compatibility with Postfix <2.2 TLS support

    +

    Compatibility with Postfix < 2.2 TLS support

    Postfix version 2.2 TLS support is based on the Postfix/TLS patch by Lutz Jänicke, but differs in a few minor ways.

    diff --git a/postfix/html/TLS_README.html b/postfix/html/TLS_README.html index 249dd29ca..7f950aba3 100644 --- a/postfix/html/TLS_README.html +++ b/postfix/html/TLS_README.html @@ -29,7 +29,7 @@ SMTP mail or with SASL authentication.

    the ability to encrypt mail and to authenticate remote SMTP clients or servers. You also turn on hundreds of thousands of lines of OpenSSL library code. Assuming that OpenSSL is written as carefully -as Wietse's own code, every 1000 lines introduce one additional bug +as Wietse's own code, every 1000 lines introduces one additional bug into Postfix.

    Topics covered in this document:

    @@ -201,7 +201,7 @@ client must receive the issuing CA certificates via the TLS handshake or via public-key infrastructure. This means that the Postfix server public-key certificate file must include the server certificate first, then the issuing CA(s) (bottom-up order). The Postfix SMTP -server certificate must be usable as SSL server certificate and +server certificate must be usable as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test.

    @@ -280,7 +280,7 @@ single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy just a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up to -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete DSA.

    @@ -795,7 +795,7 @@ context, though not recommended, is still likely safe.

    The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special CA issues the client certificates, and -only if this CA is listed as trusted CA. If other CAs are trusted, +only if this CA is listed as a trusted CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server.

    @@ -1863,7 +1863,7 @@ cipher used determines which certificate is presented.

    key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "PEM" format. The private key must not be encrypted, meaning: it must be accessible without -password. Both parts (certificate and private key) may be in the +a password. Both parts (certificate and private key) may be in the same file.

    With OpenSSL 1.1.1 and Postfix ≥ 3.4 it is also possible to @@ -1892,7 +1892,7 @@ As the "root" super-user create the client.pem file with:

    A Postfix SMTP client certificate supplied here must be usable -as SSL client certificate and hence pass the "openssl verify -purpose +as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test.

    A server that trusts the root CA has a local copy of the root @@ -1911,7 +1911,7 @@ single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy at most a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete DSA.

    @@ -2332,10 +2332,10 @@ files.
    secure
    Secure certificate verification. Mail is delivered only if the TLS handshake succeeds, -if the remote SMTP server certificate can be validated (not expired -or revoked, and signed by a trusted Certification Authority), and if the -server certificate name matches the optional "match" attribute (or the -main.cf smtp_tls_secure_cert_match parameter value when no optional +and DNS forgery resistant remote SMTP certificate verification succeeds +(not expired or revoked, and signed by a trusted Certification Authority), +and if the server certificate name matches the optional "match" attribute +(or the main.cf smtp_tls_secure_cert_match parameter value when no optional "match" attribute is specified). With Postfix ≥ 2.11 the "tafile" attribute optionally modifies trust chain verification in the same manner as the "smtp_tls_trust_anchor_file" parameter. The "tafile" attribute @@ -2841,7 +2841,7 @@ for exchanging email with sites that you have no trust relationship with. For real authentication you need also enable DNSSEC record signing for your domain and publish TLSA records and/or your Postfix public key certificate needs to be signed by a recognized Certification -Authority. To authenticate the certificates of remote host you +Authority. To authenticate the certificates of a remote host you need a DNSSEC-validating local resolver and to enable DANE authentication and/or configure the Postfix SMTP client with a list of public key certificates of @@ -3112,7 +3112,7 @@ client certificates, unless there are servers which authenticate your mail submission via client certificates. Often servers that perform TLS client authentication will issue the required certificates signed by their own CA. If you configure the client certificate and key incorrectly, you -will be unable to send mail to sites that request client certificate, +will be unable to send mail to sites that request a client certificate, but don't require them from all clients.

    diff --git a/postfix/html/TUNING_README.html b/postfix/html/TUNING_README.html index 5377ffff2..164ef3ce7 100644 --- a/postfix/html/TUNING_README.html +++ b/postfix/html/TUNING_README.html @@ -409,9 +409,9 @@ especially if the gateway forwards to multiple MX hosts. When all MX hosts are up and accepting connections in a timely fashion, throughput will be high. If any MX host is down and completely unresponsive, the average connection latency rises to at least 1/N -* $smtp_connection_timeout, if there are N MX hosts. This limits +* $smtp_connect_timeout, if there are N MX hosts. This limits throughput to at most the destination concurrency * N / -$smtp_connection_timeout.

    +$smtp_connect_timeout.

    For example, with a destination concurrency of 100 and 2 MX hosts, each host will handle up to 50 simultaneous connections. If @@ -422,9 +422,9 @@ multiple MX hosts need a lower connection timeout, values as low as 5s or even 1s can be used to prevent congestion when one or more, but not all MX hosts are down.

    -

    If necessary, set a higher transport_destination_concurrency_limit +

    If necessary, set a higher transport_destination_concurrency_limit (in main.cf since this is a queue manager parameter) and a lower -smtp_connection_timeout (with a "-o" override in master.cf since +smtp_connect_timeout (with a "-o" override in master.cf since this parameter has no per-transport name) for the relay transport and any transports dedicated for specific high volume destinations.

    diff --git a/postfix/html/VIRTUAL_README.html b/postfix/html/VIRTUAL_README.html index bebcee095..ffc02e007 100644 --- a/postfix/html/VIRTUAL_README.html +++ b/postfix/html/VIRTUAL_README.html @@ -62,7 +62,7 @@ domains, non-UNIX accounts

    Canonical versus hosted versus other domains

    -

    Most Postfix systems are final destination for only a +

    Most Postfix systems are the final destination for only a few domain names. These include the hostnames and [the IP addresses] of the machine that Postfix runs on, and sometimes also include the parent domain of the hostname. The remainder of this document @@ -71,7 +71,7 @@ usually implemented with the Postfix ADDRESS_CLASS_README file.

    Besides the canonical domains, Postfix can be configured to be -final destination for any number of additional domains. +the final destination for any number of additional domains. These domains are called hosted, because they are not directly associated with the name of the machine itself. Hosted domains are usually implemented with the virtual alias domain address class @@ -87,7 +87,7 @@ MX host becomes available. This function is implemented with the file.

    Finally, Postfix can be configured as a transit host for sending -mail across the internet. Obviously, Postfix is not final destination +mail across the internet. Obviously, Postfix is not the final destination for such mail. This function is available only for authorized clients and/or users, and is implemented by the default domain address class, as defined in the ADDRESS_CLASS_README file.

    diff --git a/postfix/html/access.5.html b/postfix/html/access.5.html index 605db661e..cfbec47dd 100644 --- a/postfix/html/access.5.html +++ b/postfix/html/access.5.html @@ -34,8 +34,8 @@ ACCESS(5) ACCESS(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those cases, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those cases, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". CASE FOLDING @@ -213,7 +213,7 @@ ACCESS(5) ACCESS(5) This feature is available in Postfix 2.1 and later. DEFER_IF_PERMIT optional text... - Defer the request if some later restriction would result in a an + Defer the request if some later restriction would result in an explicit or implicit PERMIT action. Reply with "$access_map_defer_code 4.7.1 optional text..." when the optional text is specified, otherwise reply with a generic error diff --git a/postfix/html/bounce.8.html b/postfix/html/bounce.8.html index 5421e49e7..a2768453d 100644 --- a/postfix/html/bounce.8.html +++ b/postfix/html/bounce.8.html @@ -162,7 +162,7 @@ BOUNCE(8) BOUNCE(8) Available in Postfix 3.7 and later: - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. FILES diff --git a/postfix/html/canonical.5.html b/postfix/html/canonical.5.html index 224dfd8ce..5899a0024 100644 --- a/postfix/html/canonical.5.html +++ b/postfix/html/canonical.5.html @@ -33,8 +33,8 @@ CANONICAL(5) CANONICAL(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those cases, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those cases, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". By default the canonical(5) mapping affects both message header @@ -234,7 +234,7 @@ CANONICAL(5) CANONICAL(5) masquerade_exceptions (empty) Optional list of user names that are not subjected to address - masquerading, even when their address matches $masquer- + masquerading, even when their addresses match $masquer- ade_domains. mydestination ($myhostname, localhost.$mydomain, localhost) diff --git a/postfix/html/cidr_table.5.html b/postfix/html/cidr_table.5.html index cd90384c8..7cad83ca0 100644 --- a/postfix/html/cidr_table.5.html +++ b/postfix/html/cidr_table.5.html @@ -118,6 +118,9 @@ CIDR_TABLE(5) CIDR_TABLE(5) Postfix parses the result as if it is a file in /etc/postfix. + Note: if a rule contains $, specify $$ to keep Postfix from trying to + do $name expansion as it evaluates a parameter value. + EXAMPLE SMTPD ACCESS MAP /etc/postfix/main.cf: smtpd_client_restrictions = ... cidr:/etc/postfix/client.cidr ... diff --git a/postfix/html/cleanup.8.html b/postfix/html/cleanup.8.html index 026cf26ab..994c8a817 100644 --- a/postfix/html/cleanup.8.html +++ b/postfix/html/cleanup.8.html @@ -117,7 +117,7 @@ CLEANUP(8) CLEANUP(8) after applying header_checks(5) and before invoking Milter applications. - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. BUILT-IN CONTENT FILTERING CONTROLS diff --git a/postfix/html/defer.8.html b/postfix/html/defer.8.html index 5421e49e7..a2768453d 100644 --- a/postfix/html/defer.8.html +++ b/postfix/html/defer.8.html @@ -162,7 +162,7 @@ BOUNCE(8) BOUNCE(8) Available in Postfix 3.7 and later: - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. FILES diff --git a/postfix/html/generic.5.html b/postfix/html/generic.5.html index a2243ac73..304fd431e 100644 --- a/postfix/html/generic.5.html +++ b/postfix/html/generic.5.html @@ -43,8 +43,8 @@ GENERIC(5) GENERIC(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those case, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those cases, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". CASE FOLDING @@ -130,8 +130,8 @@ GENERIC(5) GENERIC(5) TCP-BASED TABLES This section describes how the table lookups change when lookups are directed to a TCP-based server. For a description of the TCP - client/server lookup protocol, see tcp_table(5). This feature is not - available up to and including Postfix version 2.4. + client/server lookup protocol, see tcp_table(5). This feature is + available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, user@domain mail addresses are not broken up into their user and @domain con- @@ -168,35 +168,39 @@ GENERIC(5) GENERIC(5) below provides only a parameter summary. See postconf(5) for more details including examples. - smtp_generic_maps - Address mapping lookup table for envelope and header sender and - recipient addresses while delivering mail via SMTP. + smtp_generic_maps (empty) + Optional lookup tables that perform address rewriting in the + Postfix SMTP client, typically to transform a locally valid + address into a globally valid address when sending mail across + the Internet. - propagate_unmatched_extensions - A list of address rewriting or forwarding mechanisms that propa- - gate an address extension from the original address to the - result. Specify zero or more of canonical, virtual, alias, for- - ward, include, or generic. + propagate_unmatched_extensions (canonical, virtual) + What address lookup tables copy an address extension from the + lookup key to the lookup result. Other parameters of interest: - inet_interfaces - The network interface addresses that this system receives mail - on. You need to stop and start Postfix when this parameter - changes. + inet_interfaces (all) + The network interface addresses that this mail system receives + mail on. - proxy_interfaces - Other interfaces that this machine receives mail on by way of a - proxy agent or network address translator. + proxy_interfaces (empty) + The network interface addresses that this mail system receives + mail on by way of a proxy or network address translation unit. - mydestination - List of domains that this mail system considers local. + mydestination ($myhostname, localhost.$mydomain, localhost) + The list of domains that are delivered via the $local_transport + mail delivery transport. - myorigin - The domain that is appended to locally-posted mail. + myorigin ($myhostname) + The domain name that locally-posted mail appears to come from, + and that locally posted mail is delivered to. - owner_request_special - Give special treatment to owner-xxx and xxx-request addresses. + owner_request_special (yes) + Enable special treatment for owner-listname entries in the + aliases(5) file, and don't split owner-listname and list- + name-request address localparts when the recipient_delimiter is + set to "-". SEE ALSO postmap(1), Postfix lookup table manager diff --git a/postfix/html/ldap_table.5.html b/postfix/html/ldap_table.5.html index 9ca15f4b6..d35f5e1be 100644 --- a/postfix/html/ldap_table.5.html +++ b/postfix/html/ldap_table.5.html @@ -88,8 +88,8 @@ LDAP_TABLE(5) LDAP_TABLE(5) (the last one provided that OpenLDAP was compiled with support for SSL): - server_host = ldapi://%2Fsome%2Fpath - ldaps://ldap.example.com:636 + server_host = ldapi://%2Fsome%2Fpath + ldaps://ldap.example.com:636 server_port (default: 389) The port the LDAP server listens on, e.g. @@ -129,20 +129,21 @@ LDAP_TABLE(5) LDAP_TABLE(5) %[SUD] For the search_base parameter, the upper-case equivalents of the above expansions behave identically to their lower-case counter-parts. With the result_format parame- - ter (previously called result_filter see the COMPATIBIL- - ITY section and below), they expand to the corresponding - components of input key rather than the result value. + ter (previously called result_filter see the OTHER OBSO- + LETE FEATURES section and below), they expand to the cor- + responding components of input key rather than the result + value. - %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- - sponding most significant component of the input key's - domain. If the input key is user@mail.example.com, then + %[1-9] The patterns %1, %2, ... %9 are replaced by the corre- + sponding most significant component of the input key's + domain. If the input key is user@mail.example.com, then %1 is com, %2 is example and %3 is mail. If the input key - is unqualified or does not have enough domain components + is unqualified or does not have enough domain components to satisfy all the specified patterns, the search is sup- pressed and returns no results. query_filter (default: mailacceptinggeneralid=%s) - The RFC2254 filter used to search the directory, where %s is a + The RFC2254 filter used to search the directory, where %s is a substitute for the address Postfix is trying to resolve, e.g. query_filter = (&(mail=%s)(paid_up=true)) @@ -152,27 +153,28 @@ LDAP_TABLE(5) LDAP_TABLE(5) %% This is replaced by a literal '%' character. (Postfix 2.2 and later). - %s This is replaced by the input key. RFC 2254 quoting is - used to make sure that the input key does not add unex- + %s This is replaced by the input key. RFC 2254 quoting is + used to make sure that the input key does not add unex- pected metacharacters. %u When the input key is an address of the form user@domain, %u is replaced by the (RFC 2254) quoted local part of the - address. Otherwise, %u is replaced by the entire search - string. If the localpart is empty, the search is sup- + address. Otherwise, %u is replaced by the entire search + string. If the localpart is empty, the search is sup- pressed and returns no results. %d When the input key is an address of the form user@domain, - %d is replaced by the (RFC 2254) quoted domain part of - the address. Otherwise, the search is suppressed and + %d is replaced by the (RFC 2254) quoted domain part of + the address. Otherwise, the search is suppressed and returns no results. %[SUD] The upper-case equivalents of the above expansions behave - in the query_filter parameter identically to their - lower-case counter-parts. With the result_format parame- - ter (previously called result_filter see the COMPATIBIL- - ITY section and below), they expand to the corresponding - components of input key rather than the result value. + in the query_filter parameter identically to their + lower-case counter-parts. With the result_format parame- + ter (previously called result_filter see the OTHER OBSO- + LETE FEATURES section and below), they expand to the cor- + responding components of input key rather than the result + value. The above %S, %U and %D expansions are available with Postfix 2.2 and later. @@ -249,9 +251,9 @@ LDAP_TABLE(5) LDAP_TABLE(5) NOTE: DO NOT put quotes around the result format! domain (default: no domain list) - This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + This is a list of domain names, paths to files, or "type:table" + databases. When specified, only fully qualified search keys with + a *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly reduce the query load on the LDAP server. @@ -522,7 +524,7 @@ LDAP_TABLE(5) LDAP_TABLE(5) LDAP SSL service can be requested by using a LDAP SSL URL in the server_host parameter: - server_host = ldaps://ldap.example.com:636 + server_host = ldaps://ldap.example.com:636 STARTTLS can be turned on with the start_tls parameter: diff --git a/postfix/html/lmtp.8.html b/postfix/html/lmtp.8.html index 5491c4ec2..98d8879ce 100644 --- a/postfix/html/lmtp.8.html +++ b/postfix/html/lmtp.8.html @@ -392,7 +392,7 @@ SMTP(8) SMTP(8) DATA requests, when deadlines are enabled with smtp_per_request_deadline. - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. MIME PROCESSING CONTROLS @@ -837,13 +837,13 @@ SMTP(8) SMTP(8) Implemented in the qmgr(8) daemon: - transport_destination_concurrency_limit ($default_destination_concur- + transport_destination_concurrency_limit ($default_destination_concur- rency_limit) - A transport-specific override for the default_destination_con- - currency_limit parameter value, where transport is the master.cf + A transport-specific override for the default_destination_con- + currency_limit parameter value, where transport is the master.cf name of the message delivery transport. - transport_destination_recipient_limit ($default_destination_recipi- + transport_destination_recipient_limit ($default_destination_recipi- ent_limit) A transport-specific override for the default_destination_recip- ient_limit parameter value, where transport is the master.cf diff --git a/postfix/html/local.8.html b/postfix/html/local.8.html index bcc0a032c..8c237db35 100644 --- a/postfix/html/local.8.html +++ b/postfix/html/local.8.html @@ -51,11 +51,15 @@ LOCAL(8) LOCAL(8) shell), $recipient (complete recipient address), $extension (recipient address extension), $domain (recipient domain), $local (entire recipi- ent address localpart) and $recipient_delimiter. The forms - ${name?value} and ${name:value} expand conditionally to value when - $name is (is not) defined. Characters that may have special meaning to - the shell or file system are replaced by underscores. The list of - acceptable characters is specified with the forward_expansion_filter - configuration parameter. + ${name?value} and ${name?{value}} (Postfix 3.0 and later) expand condi- + tionally to value when $name is defined, and the forms ${name:value} + ${name:{value}} (Postfix 3.0 and later) expand conditionally to value + when $name is not defined. The form ${name?{value1}:{value2}} (Postfix + 3.0 and later) expands conditionally to value1 when $name is defined, + or value2 otherwise. Characters that may have special meaning to the + shell or file system are replaced with underscores. The list of accept- + able characters is specified with the forward_expansion_filter configu- + ration parameter. An alias or ~/.forward file may list any combination of external com- mands, destination file names, :include: directives, or mail addresses. @@ -141,11 +145,15 @@ LOCAL(8) LOCAL(8) $shell (recipient shell), $recipient (complete recipient address), $extension (recipient address extension), $domain (recipient domain), $local (entire recipient address localpart) and $recipient_delimiter. - The forms ${name?value} and ${name:value} expand conditionally to value - when $name is (is not) defined. Characters that may have special mean- - ing to the shell or file system are replaced by underscores. The list - of acceptable characters is specified with the execution_direc- - tory_expansion_filter configuration parameter. + The forms ${name?value} and ${name?{value}} (Postfix 3.0 and later) + expand conditionally to value when $name is defined, and the forms + ${name:value} and ${name:{value}} (Postfix 3.0 and later) expand condi- + tionally to value when $name is not defined. The form + ${name?{value1}:{value2}} (Postfix 3.0 and later) expands conditionally + to value1 when $name is defined, or value2 otherwise. Characters that + may have special meaning to the shell or file system are replaced with + underscores. The list of acceptable characters is specified with the + execution_directory_expansion_filter configuration parameter. The command is executed directly where possible. Assistance by the shell (/bin/sh on UNIX systems) is used only when the command contains @@ -166,7 +174,7 @@ LOCAL(8) LOCAL(8) A limited amount of message context is exported via environment vari- ables. Characters that may have special meaning to the shell are - replaced by underscores. The list of acceptable characters is speci- + replaced with underscores. The list of acceptable characters is speci- fied with the command_expansion_filter configuration parameter. SHELL The recipient user's login shell. @@ -421,7 +429,7 @@ LOCAL(8) LOCAL(8) command_execution_directory (empty) The local(8) delivery agent working directory for delivery to - external command. + external commands. MAILBOX LOCKING CONTROLS deliver_lock_attempts (20) @@ -480,7 +488,7 @@ LOCAL(8) LOCAL(8) default_privs (nobody) The default rights used by the local(8) delivery agent for - delivery to external file or command. + delivery to an external file or command. forward_expansion_filter (see 'postconf -d' output) Restrict the characters that the local(8) delivery agent allows @@ -521,7 +529,7 @@ LOCAL(8) LOCAL(8) local_command_shell (empty) Optional shell program for local(8) delivery to non-Postfix com- - mand. + mands. max_idle (100s) The maximum amount of time that an idle Postfix daemon process diff --git a/postfix/html/mailq.1.html b/postfix/html/mailq.1.html index 482b227d4..eb99f16cb 100644 --- a/postfix/html/mailq.1.html +++ b/postfix/html/mailq.1.html @@ -442,7 +442,7 @@ SENDMAIL(1) SENDMAIL(1) headers of mail that is still queued. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. diff --git a/postfix/html/makedefs.1.html b/postfix/html/makedefs.1.html index 008787d19..46c9a9a1d 100644 --- a/postfix/html/makedefs.1.html +++ b/postfix/html/makedefs.1.html @@ -34,7 +34,7 @@ MAKEDEFS(1) MAKEDEFS(1) Specifies one or more non-default object libraries. Postfix 3.0 and later specify some of their database library dependencies with AUXLIBS_CDB, AUXLIBS_LDAP, AUXLIBS_LMDB, AUXLIBS_MYSQL, - AUXLIBS_PCRE, AUXLIBS_PGSQL, AUXLIBS_SDBM, and AUXLIBS_SQLITE, + AUXLIBS_PCRE, AUXLIBS_PGSQL, AUXLIBS_SDBM, and AUXLIBS_SQLITE, respectively. CC=compiler_command diff --git a/postfix/html/master.5.html b/postfix/html/master.5.html index b3a5fd7ec..1b924267a 100644 --- a/postfix/html/master.5.html +++ b/postfix/html/master.5.html @@ -135,7 +135,7 @@ MASTER(5) MASTER(5) The local(8), pipe(8), spawn(8), and virtual(8) daemons require privileges. - Chroot (default: Postfix >= 3.0: n, Postfix <3.0: y) + Chroot (default: Postfix >= 3.0: n, Postfix < 3.0: y) Whether or not the service runs chrooted to the mail queue directory (pathname is controlled by the queue_directory config- uration variable in the main.cf file). diff --git a/postfix/html/mysql_table.5.html b/postfix/html/mysql_table.5.html index a45a6a4de..a196c1ddc 100644 --- a/postfix/html/mysql_table.5.html +++ b/postfix/html/mysql_table.5.html @@ -21,7 +21,7 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) Alternatively, lookup tables can be specified as MySQL databases. In order to use MySQL lookups, define a MySQL source as a lookup table in main.cf, for example: - alias_maps = mysql:/etc/mysql-aliases.cf + alias_maps = mysql:/etc/postfix/mysql-aliases.cf The file /etc/postfix/mysql-aliases.cf has the same format as the Post- fix main.cf file, and can specify the parameters described below. @@ -43,7 +43,8 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) MYSQL PARAMETERS hosts The hosts that Postfix will try to connect to and query from. Specify unix: for UNIX domain sockets, inet: for TCP connections - (default). Example: + (default). Examples: + hosts = inet:host1.some.domain inet:host2.some.domain:port hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name @@ -176,9 +177,9 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) NOTE: DO NOT put quotes around the result format! domain (default: no domain list) - This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + This is a list of domain names, paths to files, or "type:table" + databases. When specified, only fully qualified search keys with + a *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly reduce the query load on the MySQL server. diff --git a/postfix/html/newaliases.1.html b/postfix/html/newaliases.1.html index 482b227d4..eb99f16cb 100644 --- a/postfix/html/newaliases.1.html +++ b/postfix/html/newaliases.1.html @@ -442,7 +442,7 @@ SENDMAIL(1) SENDMAIL(1) headers of mail that is still queued. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. diff --git a/postfix/html/pgsql_table.5.html b/postfix/html/pgsql_table.5.html index f17b3edb8..89a200bf1 100644 --- a/postfix/html/pgsql_table.5.html +++ b/postfix/html/pgsql_table.5.html @@ -21,7 +21,7 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) Alternatively, lookup tables can be specified as PostgreSQL databases. In order to use PostgreSQL lookups, define a PostgreSQL source as a lookup table in main.cf, for example: - alias_maps = pgsql:/etc/pgsql-aliases.cf + alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf The file /etc/postfix/pgsql-aliases.cf has the same format as the Post- fix main.cf file, and can specify the parameters described below. @@ -48,6 +48,7 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) prefixes are accepted and ignored for backwards compatibility. Examples: hosts = postgresql://username@example.com/tablename?sslmode=require + hosts = inet:host1.some.domain inet:host2.some.domain:port hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name @@ -118,7 +119,7 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) select_function, query, select_field, ... With Postfix 2.2 the query parameter has highest precedence, see - COMPATIBILITY above. + OBSOLETE QUERY INTERFACES below. NOTE: DO NOT put quotes around the query parameter. @@ -167,9 +168,9 @@ PGSQL_TABLE(5) PGSQL_TABLE(5) NOTE: DO NOT put quotes around the result format! domain (default: no domain list) - This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + This is a list of domain names, paths to files, or "type:table" + databases. When specified, only fully qualified search keys with + a *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly reduce the query load on the PostgreSQL server. diff --git a/postfix/html/pipe.8.html b/postfix/html/pipe.8.html index ddcccb469..b2be99737 100644 --- a/postfix/html/pipe.8.html +++ b/postfix/html/pipe.8.html @@ -169,47 +169,49 @@ PIPE(8) PIPE(8) as an argument by itself: Right: command -f $sender -- $recipient + NOTE: DO NOT put quotes around the command, $sender, or $recipi- + ent. This feature is available as of Postfix 2.3. size=size_limit (optional) - Don't deliver messages that exceed this size limit (in bytes); + Don't deliver messages that exceed this size limit (in bytes); return them to the sender instead. user=username (required) user=username:groupname - Execute the external command with the user ID and group ID of - the specified username. The software refuses to execute com- - mands with root privileges, or with the privileges of the mail + Execute the external command with the user ID and group ID of + the specified username. The software refuses to execute com- + mands with root privileges, or with the privileges of the mail system owner. If groupname is specified, the corresponding group ID is used instead of the group ID of username. argv=command... (required) - The command to be executed. This must be specified as the last + The command to be executed. This must be specified as the last command attribute. The command is executed directly, i.e. with- - out interpretation of shell meta characters by a shell command + out interpretation of shell meta characters by a shell command interpreter. Specify "{" and "}" around command arguments that contain white- - space (Postfix 3.0 and later). Whitespace after the opening "{" + space (Postfix 3.0 and later). Whitespace after the opening "{" and before the closing "}" is ignored. - In the command argument vector, the following macros are recog- + In the command argument vector, the following macros are recog- nized and replaced with corresponding information from the Post- fix queue manager delivery request. - In addition to the form ${name}, the forms $name and the depre- + In addition to the form ${name}, the forms $name and the depre- cated form $(name) are also recognized. Specify $$ where a sin- gle $ is wanted. ${client_address} - This macro expands to the remote client network address. + This macro expands to the remote client network address. This feature is available as of Postfix 2.2. ${client_helo} - This macro expands to the remote client HELO command + This macro expands to the remote client HELO command parameter. This feature is available as of Postfix 2.2. @@ -220,7 +222,7 @@ PIPE(8) PIPE(8) This feature is available as of Postfix 2.2. ${client_port} - This macro expands to the remote client TCP port number. + This macro expands to the remote client TCP port number. This feature is available as of Postfix 2.5. @@ -231,7 +233,7 @@ PIPE(8) PIPE(8) ${domain} This macro expands to the domain portion of the recipient - address. For example, with an address user+foo@domain + address. For example, with an address user+foo@domain the domain is domain. This information is modified by the h flag for case fold- @@ -240,12 +242,12 @@ PIPE(8) PIPE(8) This feature is available as of Postfix 2.5. ${extension} - This macro expands to the extension part of a recipient - address. For example, with an address user+foo@domain + This macro expands to the extension part of a recipient + address. For example, with an address user+foo@domain the extension is foo. - A command-line argument that contains ${extension} - expands into as many command-line arguments as there are + A command-line argument that contains ${extension} + expands into as many command-line arguments as there are recipients. This information is modified by the u flag for case fold- @@ -253,11 +255,11 @@ PIPE(8) PIPE(8) ${mailbox} This macro expands to the complete local part of a recip- - ient address. For example, with an address + ient address. For example, with an address user+foo@domain the mailbox is user+foo. - A command-line argument that contains ${mailbox} expands - to as many command-line arguments as there are recipi- + A command-line argument that contains ${mailbox} expands + to as many command-line arguments as there are recipi- ents. This information is modified by the u flag for case fold- @@ -270,11 +272,11 @@ PIPE(8) PIPE(8) ing. ${original_recipient} - This macro expands to the complete recipient address + This macro expands to the complete recipient address before any address rewriting or aliasing. - A command-line argument that contains ${original_recipi- - ent} expands to as many command-line arguments as there + A command-line argument that contains ${original_recipi- + ent} expands to as many command-line arguments as there are recipients. This information is modified by the hqu flags for quoting @@ -290,8 +292,8 @@ PIPE(8) PIPE(8) ${recipient} This macro expands to the complete recipient address. - A command-line argument that contains ${recipient} - expands to as many command-line arguments as there are + A command-line argument that contains ${recipient} + expands to as many command-line arguments as there are recipients. This information is modified by the hqu flags for quoting @@ -299,13 +301,13 @@ PIPE(8) PIPE(8) ${sasl_method} This macro expands to the name of the SASL authentication - mechanism in the AUTH command when the Postfix SMTP + mechanism in the AUTH command when the Postfix SMTP server received the message. This feature is available as of Postfix 2.2. ${sasl_sender} - This macro expands to the SASL sender name (i.e. the + This macro expands to the SASL sender name (i.e. the original submitter as per RFC 4954) in the MAIL FROM com- mand when the Postfix SMTP server received the message. @@ -318,25 +320,25 @@ PIPE(8) PIPE(8) This feature is available as of Postfix 2.2. ${sender} - This macro expands to the envelope sender address. By - default, the null sender address expands to MAILER-DAE- - MON; this can be changed with the null_sender attribute, + This macro expands to the envelope sender address. By + default, the null sender address expands to MAILER-DAE- + MON; this can be changed with the null_sender attribute, as described above. This information is modified by the q flag for quoting. ${size} This macro expands to Postfix's idea of the message size, - which is an approximation of the size of the message as + which is an approximation of the size of the message as delivered. ${user} - This macro expands to the username part of a recipient - address. For example, with an address user+foo@domain + This macro expands to the username part of a recipient + address. For example, with an address user+foo@domain the username part is user. - A command-line argument that contains ${user} expands - into as many command-line arguments as there are recipi- + A command-line argument that contains ${user} expands + into as many command-line arguments as there are recipi- ents. This information is modified by the u flag for case fold- @@ -346,87 +348,87 @@ PIPE(8) PIPE(8) RFC 3463 (Enhanced status codes) DIAGNOSTICS - Command exit status codes are expected to follow the conventions + Command exit status codes are expected to follow the conventions defined in <sysexits.h>. Exit status 0 means normal successful comple- tion. In the case of a non-zero exit status, a limited amount of command out- - put is logged, and reported in a delivery status notification. When - the output begins with a 4.X.X or 5.X.X enhanced status code, the sta- - tus code takes precedence over the non-zero exit status (Postfix ver- + put is logged, and reported in a delivery status notification. When + the output begins with a 4.X.X or 5.X.X enhanced status code, the sta- + tus code takes precedence over the non-zero exit status (Postfix ver- sion 2.3 and later). - After successful delivery (zero exit status) a limited amount of com- - mand output is logged, and reported in "success" delivery status noti- + After successful delivery (zero exit status) a limited amount of com- + mand output is logged, and reported in "success" delivery status noti- fications (Postfix 3.0 and later). This command output is not examined for the presence of an enhanced status code. - Problems and transactions are logged to syslogd(8) or postlogd(8). - Corrupted message files are marked so that the queue manager can move + Problems and transactions are logged to syslogd(8) or postlogd(8). + Corrupted message files are marked so that the queue manager can move them to the corrupt queue for further inspection. SECURITY - This program needs a dual personality 1) to access the private Postfix - queue and IPC mechanisms, and 2) to execute external commands as the + This program needs a dual personality 1) to access the private Postfix + queue and IPC mechanisms, and 2) to execute external commands as the specified user. It is therefore security sensitive. CONFIGURATION PARAMETERS Changes to main.cf are picked up automatically as pipe(8) processes run - for only a limited amount of time. Use the command "postfix reload" to + for only a limited amount of time. Use the command "postfix reload" to speed up a change. - The text below provides only a parameter summary. See postconf(5) for + The text below provides only a parameter summary. See postconf(5) for more details including examples. RESOURCE AND RATE CONTROLS In the text below, transport is the first field in a master.cf entry. - transport_time_limit ($command_time_limit) + transport_time_limit ($command_time_limit) A transport-specific override for the command_time_limit parame- - ter value, where transport is the master.cf name of the message + ter value, where transport is the master.cf name of the message delivery transport. Implemented in the qmgr(8) daemon: - transport_destination_concurrency_limit ($default_destination_concur- + transport_destination_concurrency_limit ($default_destination_concur- rency_limit) - A transport-specific override for the default_destination_con- - currency_limit parameter value, where transport is the master.cf + A transport-specific override for the default_destination_con- + currency_limit parameter value, where transport is the master.cf name of the message delivery transport. - transport_destination_recipient_limit ($default_destination_recipi- + transport_destination_recipient_limit ($default_destination_recipi- ent_limit) A transport-specific override for the default_destination_recip- - ient_limit parameter value, where transport is the master.cf + ient_limit parameter value, where transport is the master.cf name of the message delivery transport. MISCELLANEOUS CONTROLS config_directory (see 'postconf -d' output) - The default location of the Postfix main.cf and master.cf con- + The default location of the Postfix main.cf and master.cf con- figuration files. daemon_timeout (18000s) - How much time a Postfix daemon process may take to handle a + How much time a Postfix daemon process may take to handle a request before it is terminated by a built-in watchdog timer. delay_logging_resolution_limit (2) - The maximal number of digits after the decimal point when log- + The maximal number of digits after the decimal point when log- ging sub-second delay values. export_environment (see 'postconf -d' output) - The list of environment variables that a Postfix process will + The list of environment variables that a Postfix process will export to non-Postfix processes. ipc_timeout (3600s) - The time limit for sending or receiving information over an + The time limit for sending or receiving information over an internal communication channel. mail_owner (postfix) - The UNIX system account that owns the Postfix queue and most + The UNIX system account that owns the Postfix queue and most Postfix daemon processes. max_idle (100s) - The maximum amount of time that an idle Postfix daemon process + The maximum amount of time that an idle Postfix daemon process waits for an incoming connection before terminating voluntarily. max_use (100) @@ -443,28 +445,28 @@ PIPE(8) PIPE(8) The location of the Postfix top-level queue directory. recipient_delimiter (empty) - The set of characters that can separate an email address local- + The set of characters that can separate an email address local- part, user name, or a .forward file name from its extension. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (see 'postconf -d' output) - A prefix that is prepended to the process name in syslog + A prefix that is prepended to the process name in syslog records, so that, for example, "smtpd" becomes "prefix/smtpd". Available in Postfix version 3.0 and later: pipe_delivery_status_filter ($default_delivery_status_filter) - Optional filter for the pipe(8) delivery agent to change the + Optional filter for the pipe(8) delivery agent to change the delivery status code or explanatory text of successful or unsuc- cessful deliveries. Available in Postfix version 3.3 and later: enable_original_recipient (yes) - Enable support for the original recipient address after an - address is rewritten to a different address (for example with + Enable support for the original recipient address after an + address is rewritten to a different address (for example with aliasing or with canonical mapping). service_name (read-only) @@ -473,7 +475,7 @@ PIPE(8) PIPE(8) Available in Postfix 3.5 and later: info_log_address_format (external) - The email address form that will be used in non-debug logging + The email address form that will be used in non-debug logging (info, warning, etc.). SEE ALSO diff --git a/postfix/html/postalias.1.html b/postfix/html/postalias.1.html index 60dc43640..f1c612c05 100644 --- a/postfix/html/postalias.1.html +++ b/postfix/html/postalias.1.html @@ -17,7 +17,7 @@ POSTALIAS(1) POSTALIAS(1) The postalias(1) command creates or queries one or more Postfix alias databases, or updates an existing one. The input and output file for- mats are expected to be compatible with Sendmail version 8, and are - expected to be suitable for the use as NIS alias maps. + expected to be suitable for use as NIS alias maps. If the result files do not exist they will be created with the same group and other read permissions as their source file. @@ -198,13 +198,13 @@ POSTALIAS(1) POSTALIAS(1) and postmap(1) commands. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. smtputf8_enable (yes) Enable preliminary SMTPUTF8 support for the protocols described - in RFC 6531..6533. + in RFC 6531, RFC 6532, and RFC 6533. syslog_facility (mail) The syslog facility of Postfix logging. diff --git a/postfix/html/postconf.1.html b/postfix/html/postconf.1.html index 6b769b491..813755e17 100644 --- a/postfix/html/postconf.1.html +++ b/postfix/html/postconf.1.html @@ -143,7 +143,7 @@ POSTCONF(1) POSTCONF(1) or more service fields with new values as specified with "ser- vice/type/field=value" on the postconf(1) command line. Cur- rently, the "command" field contains the command name and com- - mand arguments. this may change in the near future, so that the + mand arguments. This may change in the near future, so that the "command" field contains only the command name, and a new "argu- ments" pseudofield contains the command arguments. @@ -157,7 +157,8 @@ POSTCONF(1) POSTCONF(1) whitespace on the postconf(1) command line. The -e option is no longer needed with Postfix version 2.8 and - later. + later, as it is assumed whenever a value is specified (empty or + non-empty). -f Fold long lines when printing main.cf or master.cf configuration file entries, for human readability. @@ -165,58 +166,58 @@ POSTCONF(1) POSTCONF(1) This feature is available with Postfix 2.9 and later. -F Show master.cf per-entry field settings (by default all services - and all fields), formatted as "service/type/field=value", one + and all fields), formatted as "service/type/field=value", one per line. Specify -Ff to fold long lines. - Specify one or more "service/type/field" instances on the post- - conf(1) command line to limit the output to fields of interest. - Trailing parameter name or service type fields that are omitted + Specify one or more "service/type/field" instances on the post- + conf(1) command line to limit the output to fields 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. - -h Show parameter or attribute values without the "name = " label + -h Show parameter or attribute values without the "name = " label that normally precedes the value. - -H Show parameter or attribute names without the " = value" that + -H Show parameter or attribute names without the " = value" that normally follows the name. This feature is available with Postfix 3.1 and later. - -l List the names of all supported mailbox locking methods. Post- + -l List the names of all supported mailbox locking methods. Post- fix supports the following methods: - flock A kernel-based advisory locking method for local files + flock A kernel-based advisory locking method for local files only. This locking method is available on systems with a BSD compatible library. - fcntl A kernel-based advisory locking method for local and + fcntl A kernel-based advisory locking method for local and remote files. dotlock An application-level locking method. An application locks - a file named filename by creating a file named file- + a file named filename by creating a file named file- name.lock. The application is expected to remove its own - lock file, as well as stale lock files that were left + lock file, as well as stale lock files that were left behind after abnormal program termination. - -m List the names of all supported lookup table types. In Postfix - configuration files, lookup tables are specified as type:name, + -m List the names of all supported lookup table types. In Postfix + configuration files, lookup tables are specified as type:name, where type is one of the types listed below. The table name syn- - tax depends on the lookup table type as described in the DATA- + tax depends on the lookup table type as described in the DATA- BASE_README document. - btree A sorted, balanced tree structure. Available on systems + btree A sorted, balanced tree structure. Available on systems with support for Berkeley DB databases. - cdb A read-optimized structure with no support for incremen- - tal updates. Available on systems with support for CDB + cdb A read-optimized structure with no support for incremen- + tal updates. Available on systems with support for CDB databases. This feature is available with Postfix 2.2 and later. cidr A table that associates values with Classless - Inter-Domain Routing (CIDR) patterns. This is described + Inter-Domain Routing (CIDR) patterns. This is described in cidr_table(5). This feature is available with Postfix 2.2 and later. @@ -226,12 +227,12 @@ POSTCONF(1) POSTCONF(1) environ The UNIX process environment array. The lookup key is the - environment variable name; the table name is ignored. + environment variable name; the table name is ignored. Originally implemented for testing, someone may find this useful someday. - fail A table that reliably fails all requests. The lookup ta- - ble name is used for logging. This table exists to sim- + fail A table that reliably fails all requests. The lookup ta- + ble name is used for logging. This table exists to sim- plify Postfix error tests. This feature is available with Postfix 2.9 and later. @@ -240,23 +241,23 @@ POSTCONF(1) POSTCONF(1) tems with support for Berkeley DB databases. inline (read-only) - A non-shared, in-memory lookup table. Example: "inline:{ - key=value, { key = text with whitespace or comma }}". - Key-value pairs are separated by whitespace or comma; - with a key-value pair inside "{}", whitespace is ignored - after the opening "{", around the "=" between key and - value, and before the closing "}". Inline tables elimi- - nate the need to create a database file for just a few + A non-shared, in-memory lookup table. Example: "inline:{ + key=value, { key = text with whitespace or comma }}". + Key-value pairs are separated by whitespace or comma; + with a key-value pair inside "{}", whitespace is ignored + after the opening "{", around the "=" between key and + value, and before the closing "}". Inline tables elimi- + nate the need to create a database file for just a few fixed elements. See also the static: map type. This feature is available with Postfix 3.0 and later. internal - A non-shared, in-memory hash table. Its content are lost + A non-shared, in-memory hash table. Its content are lost when a process terminates. - lmdb OpenLDAP LMDB database (a memory-mapped, persistent - file). Available on systems with support for LMDB data- + lmdb OpenLDAP LMDB database (a memory-mapped, persistent + file). Available on systems with support for LMDB data- bases. This is described in lmdb_table(5). This feature is available with Postfix 2.11 and later. @@ -265,57 +266,57 @@ POSTCONF(1) POSTCONF(1) LDAP database client. This is described in ldap_table(5). memcache - Memcache database client. This is described in mem- + Memcache database client. This is described in mem- cache_table(5). This feature is available with Postfix 2.9 and later. mysql (read-only) MySQL database client. Available on systems with support - for MySQL databases. This is described in mysql_ta- + for MySQL databases. This is described in mysql_ta- ble(5). pcre (read-only) - A lookup table based on Perl Compatible Regular Expres- + A lookup table based on Perl Compatible Regular Expres- sions. The file format is described in pcre_table(5). pgsql (read-only) - PostgreSQL database client. This is described in + PostgreSQL database client. This is described in pgsql_table(5). This feature is available with Postfix 2.1 and later. pipemap (read-only) - A lookup table that constructs a pipeline of tables. - Example: "pipemap:{type_1:name_1, ..., type_n:name_n}". - Each "pipemap:" query is given to the first table. Each + A lookup table that constructs a pipeline of tables. + Example: "pipemap:{type_1:name_1, ..., type_n:name_n}". + Each "pipemap:" query is given to the first table. Each lookup result becomes the query for the next table in the - pipeline, and the last table produces the final result. - When any table lookup produces no result, the pipeline - produces no result. The first and last characters of the + pipeline, and the last table produces the final result. + When any table lookup produces no result, the pipeline + produces no result. The first and last characters of the "pipemap:" table name must be "{" and "}". Within these, individual maps are separated with comma or whitespace. This feature is available with Postfix 3.0 and later. - proxy Postfix proxymap(8) client for shared access to Postfix + proxy Postfix proxymap(8) client for shared access to Postfix databases. The table name syntax is type:name. This feature is available with Postfix 2.0 and later. randmap (read-only) - An in-memory table that performs random selection. Exam- + An in-memory table that performs random selection. Exam- ple: "randmap:{result_1, ..., result_n}". Each table query returns a random choice from the specified results. - The first and last characters of the "randmap:" table - name must be "{" and "}". Within these, individual + The first and last characters of the "randmap:" table + name must be "{" and "}". Within these, individual results are separated with comma or whitespace. To give a specific result more weight, specify it multiple times. This feature is available with Postfix 3.0 and later. regexp (read-only) - A lookup table based on regular expressions. The file + A lookup table based on regular expressions. The file format is described in regexp_table(5). sdbm An indexed file type based on hashing. Available on sys- @@ -324,9 +325,9 @@ POSTCONF(1) POSTCONF(1) This feature is available with Postfix 2.2 and later. socketmap (read-only) - Sendmail-style socketmap client. The table name is - inet:host:port:name for a TCP/IP server, or unix:path- - name:name for a UNIX-domain server. This is described in + Sendmail-style socketmap client. The table name is + inet:host:port:name for a TCP/IP server, or unix:path- + name:name for a UNIX-domain server. This is described in socketmap_table(5). This feature is available with Postfix 2.10 and later. @@ -337,11 +338,11 @@ POSTCONF(1) POSTCONF(1) This feature is available with Postfix 2.8 and later. static (read-only) - A table that always returns its name as lookup result. + A table that always returns its name as lookup result. For example, static:foobar always returns the string foo- - bar as lookup result. Specify "static:{ text with white- - space }" when the result contains whitespace; this form - ignores whitespace after the opening "{" and before the + bar as lookup result. Specify "static:{ text with white- + space }" when the result contains whitespace; this form + ignores whitespace after the opening "{" and before the closing "}". See also the inline: map. The form "static:{text} is available with Postfix 3.0 and @@ -351,65 +352,68 @@ POSTCONF(1) POSTCONF(1) TCP/IP client. The protocol is described in tcp_table(5). texthash (read-only) - Produces similar results as hash: files, except that you - don't need to run the postmap(1) command before you can - use the file, and that it does not detect changes after + Produces similar results as hash: files, except that you + don't need to run the postmap(1) command before you can + use the file, and that it does not detect changes after the file is read. This feature is available with Postfix 2.8 and later. unionmap (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 pipemap. This feature is available with Postfix 3.0 and later. unix (read-only) - A limited view of the UNIX authentication database. The + A limited view of the UNIX authentication database. The following tables are implemented: unix:passwd.byname - 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 passwd(5) format. unix:group.byname 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 group(5) format. - Other table types may exist depending on how Postfix was built. + Other table types may exist depending on how Postfix was built. - -M Show master.cf file contents instead of main.cf file contents. + -M Show master.cf file contents instead of main.cf file contents. Specify -Mf to fold long lines for human readability. Specify zero or more arguments, each with a service-name or ser- - vice-name/service-type pair, where service-name is the first - field of a master.cf entry and service-type is one of (inet, + vice-name/service-type pair, where service-name is the first + field of a master.cf entry and service-type is one of (inet, unix, fifo, or pass). - If service-name or service-name/service-type is specified, only - the matching master.cf entries will be output. For example, - "postconf -Mf smtp" will output all services named "smtp", and - "postconf -Mf smtp/inet" will output only the smtp service that - listens on the network. Trailing service type fields that are + If service-name or service-name/service-type is specified, only + the matching master.cf entries will be output. For example, + "postconf -Mf smtp" will output all services named "smtp", and + "postconf -Mf smtp/inet" 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 "name.type" to "name/type", and "*" wildcard + was changed from "name.type" to "name/type", and "*" wildcard support was added with Postfix 2.11. -n Show only configuration parameters that have explicit name=value - settings in main.cf. Specify -nf to fold long lines for human - readability (Postfix 2.9 and later). To show settings that dif- + settings in main.cf. Specify -nf to fold long lines for human + readability (Postfix 2.9 and later). To show settings that dif- fer from built-in defaults only, use the following bash syntax: - comm -23 <(postconf -n) <(postconf -d) + LANG=C comm -23 <(postconf -n) <(postconf -d) Replace "-23" with "-12" to show settings that duplicate built-in defaults. -o name=value - Override main.cf parameter settings. + Override main.cf parameter settings. This lets you see the + effect changing a parameter would have when it is used in other + configuration parameters, e.g.: + postconf -x -o stress=yes This feature is available with Postfix 2.10 and later. @@ -417,38 +421,38 @@ POSTCONF(1) POSTCONF(1) This feature is available with Postfix 2.11 and later. - -P Show master.cf service parameter settings (by default all ser- - vices and all parameters), formatted as "service/type/parame- + -P Show master.cf service parameter settings (by default all ser- + vices and all parameters), formatted as "service/type/parame- ter=value", one per line. Specify -Pf to fold long lines. - Specify one or more "service/type/parameter" instances on the - postconf(1) command line to limit the output to parameters of - interest. Trailing parameter name or service type fields that + Specify one or more "service/type/parameter" instances on the + postconf(1) 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. -t [template_file] - 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 $name expressions. - To override the bounce_template_file parameter setting, specify - a template file name at the end of the "postconf -t" command - line. Specify an empty file name to display built-in templates + To override the bounce_template_file parameter setting, specify + a template file name at the end of the "postconf -t" command + line. Specify an empty file name to display built-in templates (in shell language: ""). This feature is available with Postfix 2.3 and later. -T mode - If Postfix is compiled without TLS support, the -T option pro- - duces no output. Otherwise, if an invalid mode is specified, - the -T option reports an error and exits with a non-zero status + If Postfix is compiled without TLS support, the -T option pro- + duces no output. Otherwise, if an invalid mode is specified, + the -T option reports an error and exits with a non-zero status code. The valid modes are: compile-version 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 "openssl version". run-version @@ -456,40 +460,40 @@ POSTCONF(1) POSTCONF(1) runtime (i.e. the OpenSSL version in a shared library). public-key-algorithms - 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. - -v Enable verbose logging for debugging purposes. Multiple -v + -v Enable verbose logging for debugging purposes. Multiple -v options make the software increasingly verbose. - -x Expand $name in main.cf or master.cf parameter values. The + -x Expand $name in main.cf or master.cf parameter values. The expansion is recursive. This feature is available with Postfix 2.10 and later. - -X Edit the main.cf configuration file, and remove the parameters + -X Edit the main.cf configuration file, and remove the parameters named on the postconf(1) command line. Specify a list of param- eter names, not "name=value" pairs. - With -M, edit the master.cf configuration file, and remove one - or more service entries as specified with "service/type" on the + With -M, edit the master.cf configuration file, and remove one + or more service entries as specified with "service/type" on the postconf(1) command line. - With -P, edit the master.cf configuration file, and remove one + With -P, edit the master.cf configuration file, and remove one or more service parameter settings (-o parameter=value settings) - as specified with "service/type/parameter" on the postconf(1) + as specified with "service/type/parameter" on the postconf(1) 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 postconf(1) command line. - There is no postconf(1) command to perform the reverse opera- + There is no postconf(1) 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. -# Edit the main.cf configuration file, and comment out the parame- @@ -497,18 +501,18 @@ POSTCONF(1) POSTCONF(1) eters revert to their default values. Specify a list of parame- ter names, not "name=value" pairs. - With -M, edit the master.cf configuration file, and comment out - one or more service entries as specified with "service/type" on + With -M, edit the master.cf configuration file, and comment out + one or more service entries as specified with "service/type" on the postconf(1) 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 postconf(1) command line. - There is no postconf(1) command to perform the reverse opera- + There is no postconf(1) 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. DIAGNOSTICS @@ -519,18 +523,18 @@ POSTCONF(1) POSTCONF(1) Directory with Postfix configuration files. CONFIGURATION PARAMETERS - The following main.cf parameters are especially relevant to this pro- + The following main.cf parameters are especially relevant to this pro- gram. - The text below provides only a parameter summary. See postconf(5) for + The text below provides only a parameter summary. See postconf(5) for more details including examples. config_directory (see 'postconf -d' output) - The default location of the Postfix main.cf and master.cf con- + The default location of the Postfix main.cf and master.cf con- figuration files. bounce_template_file (empty) - Pathname of a configuration file with bounce message templates. + Pathname of a configuration file with bounce message templates. FILES /etc/postfix/main.cf, Postfix configuration parameters diff --git a/postfix/html/postconf.5.html b/postfix/html/postconf.5.html index 73dca5ce6..65171852f 100644 --- a/postfix/html/postconf.5.html +++ b/postfix/html/postconf.5.html @@ -163,8 +163,10 @@ logged as "partial" when the daemon terminates early after "postfix reload", "postfix stop", or no requests for $max_idle seconds.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.7.

    @@ -219,7 +221,7 @@ stop
    ". This is the default with Postfix version 2.6 and earlier.

    Specify a location in a file system that will not fill up. If the -database becomes corrupted, the world comes to an end. To recover +database becomes corrupted, the world comes to an end. To recover, delete (NOT: truncate) the file and do "postfix reload".

    @@ -271,9 +273,10 @@ The time after which a failed probe expires from the address verification cache.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -290,9 +293,10 @@ The time after which a failed address verification probe needs to be refreshed.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.1 and later. @@ -367,9 +371,10 @@ verification request in progress. The default polling delay is 3 seconds.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -386,9 +391,10 @@ The time after which a successful probe expires from the address verification cache.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -406,9 +412,10 @@ to be refreshed. The address verification status is not updated when the probe fails (optimistic caching).

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -519,12 +526,14 @@ caused such addresses to end up on spammer mailing lists, and has resulted in wasted network and processing resources.

    To enable time-dependent probe sender addresses, specify a -non-zero time value (an integral value plus an optional one-letter -suffix that specifies the time unit). Specify a value of at least -several hours, to avoid problems with senders that use greylisting. -Avoid nice TTL values, to make the result less predictable. Time -units are: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +non-zero time value. Specify a value of at least several hours, +to avoid problems with senders that use greylisting. Avoid nice +TTL values, to make the result less predictable.

    + +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.9 and later.

    @@ -863,10 +872,10 @@ frequency of updates, the anvil(8) server uses volati only. Thus, information is lost whenever the process terminates.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -879,13 +888,13 @@ How frequently the anvil(8) connection and rate limit logs peak usage information.

    -

    -This feature is available in Postfix 2.2 and later. -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). +This feature is available in Postfix 2.2 and later.

    @@ -971,10 +980,10 @@ How long the postkick(1) command waits for a reque Postfix daemon process input buffer before giving up.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -1274,10 +1283,10 @@ with a temporary error, and the time in the queue has reached the as for regular mail.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is d (days). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    Specify 0 when mail delivery should be tried only once. @@ -1338,7 +1347,7 @@ message size exceeds a local or remote MTA's message size limit.

    Pathname of a configuration file with bounce message templates. These override the built-in templates of delivery status notification -(DSN) messages for undeliverable mail, for delayed mail, successful +(DSN) messages for undeliverable mail, delayed mail, successful delivery, or delivery verification. The bounce(5) manual page describes how to edit and test template files.

    @@ -1474,7 +1483,7 @@ The location of all postfix administrative commands. (default: empty)

    The local(8) delivery agent working directory for delivery to -external command. Failure to change directory causes the delivery +external commands. Failure to change directory causes the delivery to be deferred.

    The command_execution_directory value is not subject to Postfix @@ -1523,12 +1532,21 @@ address extension delimiter (Postfix 2.10 and earlier).

    ${name?value}
    +
    ${name?{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is non-empty.
    ${name:value}
    +
    ${name:{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is empty.
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    +

    @@ -1821,10 +1839,10 @@ limited to 13 over the lifetime of a daemon process.

    How much time a Postfix daemon process may take to handle a request before it is terminated by a built-in watchdog timer.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -1953,7 +1971,7 @@ for each message. One message can be preempted by another one when the other message can be delivered using no more delivery slots (i.e., invocations of delivery agents) than the current message counter has accumulated (or will eventually accumulate - see about -slot loans below). This parameter controls how often is the counter +slot loans below). This parameter controls how often the counter is incremented - it happens after each default_delivery_slot_cost recipients have been delivered.

    @@ -2005,8 +2023,8 @@ settings. This parameter speeds up the moment when a message preemption can happen. Instead of waiting until the full amount of delivery slots required is available, the preemption can happen when -transport_delivery_slot_discount percent of the required amount -plus transport_delivery_slot_loan still remains to be accumulated. +transport_delivery_slot_discount percent of the required amount +plus transport_delivery_slot_loan still remains to be accumulated. Note that the full amount will still have to be accumulated before another preemption can take place later.

    @@ -2031,8 +2049,8 @@ settings. This parameter speeds up the moment when a message preemption can happen. Instead of waiting until the full amount of delivery slots required is available, the preemption can happen when -transport_delivery_slot_discount percent of the required amount -plus transport_delivery_slot_loan still remains to be accumulated. +transport_delivery_slot_discount percent of the required amount +plus transport_delivery_slot_loan still remains to be accumulated. Note that the full amount will still have to be accumulated before another preemption can take place later.

    @@ -2174,7 +2192,7 @@ is compatible with earlier Postfix versions.

    The default maximal number of parallel deliveries to the same destination. This is the default limit for delivery via the lmtp(8), pipe(8), smtp(8) and virtual(8) delivery agents. -With per-destination recipient limit > 1, a destination is a domain, +With a per-destination recipient limit > 1, a destination is a domain, otherwise it is a recipient.

    @@ -2394,7 +2412,7 @@ The default value for the extra per-transport limit imposed on the number of in-memory recipients. This extra recipient space is reserved for the cases when the Postfix queue manager's scheduler preempts one message with another and suddenly needs some extra -recipients slots for the chosen message in order to avoid performance +recipient slots for the chosen message in order to avoid performance degradation.

    @@ -2444,7 +2462,7 @@ name of the message delivery transport.

    The default rights used by the local(8) delivery agent for delivery -to external file or command. These rights are used when delivery +to an external file or command. These rights are used when delivery is requested from an aliases(5) file that is owned by root, or when delivery is done on behalf of root. DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER. @@ -2558,13 +2576,22 @@ name, or an email address whose domain was denylisted).

    The sender address localpart or <> in case of the null address.
    -
    ${name?text}
    +
    ${name?value}
    + +
    ${name?{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is non-empty.
    + +
    ${name:value}
    + +
    ${name:{value}} (Postfix ≥ 3.0)
    -
    Expands to `text' if $name is not empty.
    +
    Expands to value when $name is empty.
    -
    ${name:text}
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    -
    Expands to `text' if $name is empty.
    +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    @@ -2616,10 +2643,10 @@ name of the message delivery transport. (default: 5s)

    -The default per-transport maximum delay between recipients refills. -When not all message recipients fit into the memory at once, keep loading +The default per-transport maximum delay between refilling recipients. +When not all message recipients fit into memory at once, keep loading more of them at least once every this many seconds. This is used to -make sure the recipients are refilled in timely manner even when +make sure the recipients are refilled in a timely manner even when $default_recipient_refill_limit is too high for too slow deliveries.

    @@ -2638,7 +2665,7 @@ name of the message delivery transport.

    The default per-transport limit on the number of recipients refilled at -once. When not all message recipients fit into the memory at once, keep +once. When not all message recipients fit into memory at once, keep loading more of them in batches of at least this many at a time. See also $default_recipient_refill_delay, which may result in recipient batches lower than this when this limit is too high for too slow deliveries. @@ -2732,8 +2759,9 @@ unit).

    The two default VERP delimiter characters. These are used when no explicit delimiters are specified with the SMTP XVERP command -or with the "sendmail -V" command-line option. Specify -characters that are allowed by the verp_delimiter_filter setting. +or with the "sendmail -XV" command-line option (Postfix 2.2 +and earlier: -V). Specify characters that are allowed by the +verp_delimiter_filter setting.

    @@ -2780,7 +2808,7 @@ This feature is available in Postfix 2.0 and later.

    The names of message delivery transports that should not deliver mail unless someone issues "sendmail -q" or equivalent. Specify zero -or more names of mail delivery transports names that appear in the +or more mail delivery transport names that appear in the first field of master.cf.

    @@ -2801,7 +2829,7 @@ Example:

    The maximal number of digits after the decimal point when logging sub-second delay values. Specify a number in the range 0..6.

    -

    Large delay values are rounded off to an integral number seconds; +

    Large delay values are rounded off to an integral number of seconds; delay values below the delay_logging_resolution_limit are logged as "0", and delay values under 100s are logged with at most two-digit precision.

    @@ -2886,10 +2914,10 @@ The time between attempts to acquire an exclusive lock on a mailbox file or bounce(8) logfile.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -3654,8 +3682,10 @@ This feature is available in Postfix 2.0 and later.

    The delay between attempts to fork() a child process.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -3724,12 +3754,21 @@ address extension delimiter (Postfix 2.10 and earlier).
    ${name?value}
    +
    ${name?{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is non-empty.
    ${name:value}
    +
    ${name:{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is empty.
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    +

    @@ -3844,7 +3883,7 @@ message headers, as specified in the header_check

    The format of the Postfix-generated From: header. This setting affects the appearance of 'full name' information when a -local program such as /bin/mail submits a message without From: +local program such as /bin/mail submits a message without a From: header through the Postfix sendmail(1) command.

    Specify one of the following:

    @@ -3983,11 +4022,11 @@ mis-delivery of mail.
    import_environment (default: see "postconf -d" output)
    -

    The list of environment parameters that a privileged Postfix +

    The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. Unprivileged utilities will enforce the name=value overrides, but otherwise will not change their process -environment. Examples of relevant parameters:

    +environment. Examples of relevant environment variables:

    @@ -4012,7 +4051,7 @@ environment. Examples of relevant parameters:

    Specify a list of names and/or name=value pairs, separated by whitespace or comma. Specify "{ name=value }" to protect whitespace -or comma in parameter values (whitespace after the opening "{" and +or comma in environment variable values (whitespace after the opening "{" and before the closing "}" is ignored). The form name=value is supported with Postfix version 2.1 and later; the use of {} is supported with Postfix 3.0 and @@ -4280,10 +4319,10 @@ example, by the Postfix address resolving and rewriting clients.

    With Postfix 2.4 the default value was reduced from 100s to 5s.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -4298,10 +4337,10 @@ situations. If the time limit is exceeded the software aborts with a fatal error.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -4317,10 +4356,10 @@ after reaching their client limit. This is used, for example, by the Postfix address resolving and rewriting clients.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -4507,7 +4546,7 @@ command.

    Most of these limitations have been with the Postfix -a connection cache that is shared among multiple LMTP client +connection cache that is shared among multiple LMTP client programs.

    @@ -4533,10 +4572,10 @@ zero (use the operating system built-in time limit). When no connection can be made within the deadline, the LMTP client tries the next address on the mail exchanger list.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    Example: @@ -4613,10 +4652,10 @@ and for receiving the remote LMTP server response. When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -4630,10 +4669,10 @@ and for receiving the remote LMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -4648,10 +4687,10 @@ When the connection stalls for more than $lmtp(8) delivery agent, used for content filter message injection, to forward the name, address, protocol and HELO name of the original -client to the content filter and downstream queuing LMTP server. +client to the content filter and downstream LMTP server. Before you change the value to yes, it is best to make sure that your content filter supports this command.

    @@ -5762,10 +5801,10 @@ In case of problems the client does NOT try the next address on the mail exchanger list.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -5778,7 +5817,7 @@ This feature is available in Postfix 2.1 and later. (default: empty)

    -Optional shell program for local(8) delivery to non-Postfix command. +Optional shell program for local(8) delivery to non-Postfix commands. By default, non-Postfix commands are executed directly; commands are given to the default shell (typically, /bin/sh) only when they contain shell meta characters or shell built-in commands. @@ -6006,14 +6045,14 @@ match.

    # send mail as themselves. Use "uid:" followed by the numerical # UID when the UID has no entry in the UNIX password file. local_login_sender_maps = - inline:{ { root = *}, { postfix = * } }, + inline:{ { root = * }, { postfix = * } }, pcre:/etc/postfix/login_senders
     /etc/postfix/login_senders:
        # Allow both the bare username and the user@domain forms.
    -    /(.+)/ $1 $1@example.com/
    +    /(.+)/ $1 $1@example.com
     

    This feature is available in Postfix 3.6 and later.

    @@ -6170,11 +6209,20 @@ address extension delimiter (Postfix 2.10 and earlier).
    ${name?value}
    -
    Expands to value when $name has a non-empty value.
    +
    ${name?{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is non-empty.
    ${name:value}
    -
    Expands to value when $name has an empty value.
    +
    ${name:{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is empty.
    + +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    @@ -6478,7 +6526,9 @@ Note: the default setting of this parameter is system dependent. file, or zero (no limit). In fact, this limits the size of any file that is written to upon local delivery, including files written by external commands that are executed by the local(8) delivery -agent.

    +agent. The value cannot exceed LONG_MAX (typically, a 32-bit or +64-bit signed integer). +

    This limit must not be smaller than the message size limit. @@ -6809,10 +6859,10 @@ is ignored by the Postfix queue manager and by other long-lived Postfix daemon processes.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -6840,10 +6890,10 @@ The maximal time between attempts to deliver a deferred message.

    This parameter should be set to a value greater than or equal to $minimal_backoff_time. See also $queue_run_delay.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -6857,10 +6907,10 @@ temporary error, and the time in the queue has reached the maximal_queue_lifetime limit.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is d (days). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    Specify 0 when mail delivery should be tried only once. @@ -6916,6 +6966,8 @@ and body_checks.

    The maximal size in bytes of a message, including envelope information. +The value cannot exceed LONG_MAX (typically, a 32-bit or 64-bit +signed integer).

    Note: be careful when making changes. Excessively small values @@ -6980,10 +7032,9 @@ command line.

    filter) application, and for receiving the response.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -7009,10 +7060,9 @@ for a list of available macro names and their meanings.

    application, and for negotiating protocol options.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -7026,10 +7076,9 @@ one-letter suffix that specifies the time unit).

    filter) application, and for receiving the response.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -7165,7 +7214,7 @@ values for arbitrary macros that Postfix may send to Milter applications. These defaults are used when there is no corresponding information from the message delivery context.

    -

    Specify name=value or {name}=value pairs separated +

    Specify name=value or {name=value} pairs separated by comma or whitespace. Enclose a pair in "{}" when a value contains comma or whitespace (this form ignores whitespace after the enclosing "{", around the "=", and before the enclosing "}").

    @@ -7326,10 +7375,10 @@ kept in the short-term, in-memory, destination status cache.

    This parameter should be set greater than or equal to $queue_run_delay. See also $maximal_backoff_time.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -7587,7 +7636,7 @@ block from the list. The form "!/file/name" is supported only in Postfix version 2.4 and later.

    Note 1: Pattern matching of domain names is controlled by the -or absence of "mynetworks" in the parent_domain_matches_subdomains +presence or absence of "mynetworks" in the parent_domain_matches_subdomains parameter value.

    Note 2: IP version 6 address information must be specified inside @@ -7624,7 +7673,7 @@ This is the list of trusted networks for relay access control etc.

  • Specify "mynetworks_style = subnet" when Postfix should "trust" remote SMTP clients in the same IP subnetworks as the local machine. On Linux, this works correctly only with interfaces -specified with the "ifconfig" command.

    +specified with the "ifconfig" or "ip" command.

  • Specify "mynetworks_style = class" when Postfix should "trust" remote SMTP clients in the same IP class A/B/C networks as the @@ -7708,7 +7757,7 @@ or reject_non_fqdn_recipient does not arrive via the Postfix smtpd(8) server. This includes local submission via the sendmail(1) command line, new mail that arrives via the Postfix qmqpd(8) server, and old mail that is re-injected -into the queue with "postsuper -r". Specify space or comma as +into the queue with "postsuper -r". Specify space or comma as a separator. See the MILTER_README document for details.

    This feature is available in Postfix 2.3 and later.

    @@ -7899,7 +7948,7 @@ you really want to match subdomains.
    qmqpd_authorized_clients, -smtpd_access_maps, +smtpd_access_maps,
    Postfix version 2.8 and later
    @@ -7998,7 +8047,8 @@ cannot be set under 10s.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 3.4 and later.

    @@ -8176,7 +8226,7 @@ return. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -8225,7 +8275,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -8257,8 +8308,10 @@ logged as "partial" when the daemon terminates early after "postfix reload", "postfix stop", or no requests for $max_idle seconds.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.8.

    @@ -8290,8 +8343,10 @@ from being logged as "NEW" just because their cache entry expired an hour ago. It also prevents the cache from filling up with clients that passed some deep protocol test once and never came back.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -8492,7 +8547,8 @@ it would be smaller than post

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 3.1. The default setting is backwards-compatible with older Postfix versions.

    @@ -8511,7 +8567,8 @@ it would be larger than
    posts

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 3.1.

    @@ -8521,7 +8578,7 @@ one-letter suffix that specifies the time unit). Time units: s
    postscreen_dnsbl_reply_map (default: empty)
    -

    A mapping from actual DNSBL domain name which includes a secret +

    A mapping from an actual DNSBL domain name which includes a secret password, to the DNSBL domain name that postscreen will reply with when it rejects mail. When no mapping is found, the actual DNSBL domain will be used.

    @@ -8630,6 +8687,11 @@ parameter.

    the timeouts in the dnsblog(8) daemon which are defined by system resolver(3) routines.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 3.0.

    @@ -8644,7 +8706,8 @@ IP address is required to pass that test again.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.8-3.0. It was replaced by postscreen_dnsbl_max_ttl in Postfix 3.1.

    @@ -8762,7 +8825,8 @@ a good client can immediately talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -8778,10 +8842,9 @@ lookup results to arrive (default: up to 2 seconds under stress, up to 6 seconds otherwise).

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8.

    @@ -8811,7 +8874,7 @@ parameter. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -8859,7 +8922,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -8879,7 +8943,7 @@ the server to respond. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -8926,7 +8990,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -9047,7 +9112,8 @@ set under 10s.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8.

    @@ -9261,6 +9327,11 @@ The minimal delay between warnings that a specific destination is clogging up the Postfix active queue. Specify 0 to disable.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is enabled with the helpful_warnings parameter.

    @@ -9279,10 +9350,10 @@ This feature is available in Postfix 2.0 and later. a request before it is terminated by a built-in watchdog timer.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8 and later.

    @@ -9314,10 +9385,10 @@ over an internal communication channel. The purpose is to break out of deadlock situations. If the time limit is exceeded the software either retries or aborts the operation.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8 and later.

    @@ -9422,10 +9493,10 @@ reply to the remote QMQP client. The purpose is to slow down confused or malicious clients.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -9439,10 +9510,10 @@ If a read or write operation blocks for more than $minimal_backoff_time. See also $maximal_backoff_time.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -9755,7 +9826,7 @@ the recipient_delimiter set. T may then be used to generate an extended .forward file name. This implementation recognizes one delimiter character and one extension per email address localpart or email address. With Postfix 2.10 and -earler, the recipient_delimiter specifies a single character.

    +earlier, the recipient_delimiter specifies a single character.

    See canonical(5), local(8), relocated(5) and virtual(5) for the effects of recipient_delimiter on lookups in aliases, canonical, @@ -9965,7 +10036,7 @@ and then floods innocent people with undeliverable mail. Technically, tables listed with $relay_recipient_maps are used as lists: Postfix needs to know only if a lookup string is found or not, but it does not -use the result from table lookup.

    +use the result from the table lookup.

    Specify zero or more "type:name" lookup tables, separated by @@ -10576,10 +10647,10 @@ How long the Postfix master(8) waits before forking appears to be malfunctioning.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -10911,10 +10982,10 @@ disable the time limit (i.e. use whatever timeout is implemented by the operating system).

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11071,10 +11142,10 @@ When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11550,10 +11621,10 @@ The Postfix SMTP client time limit for sending the HELO or EHLO command, and for receiving the initial remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11625,10 +11696,10 @@ The Postfix SMTP client time limit for sending the MAIL FROM command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11779,10 +11850,15 @@ How long the Postfix SMTP client pauses before sending

    -Choosing a too short time makes this workaround ineffective when +Choosing too short a time makes this workaround ineffective when sending large messages over slow network connections.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    + @@ -11813,6 +11889,11 @@ turns on the PIX firewall "<CR><LF>.<CR><LF>" bug workaround for delivery through firewalls with "smtp fixup" mode turned on.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    By default, the workaround is turned off for mail that is queued for less than 500 seconds. In other words, the workaround is normally @@ -11864,10 +11945,10 @@ The Postfix SMTP client time limit for sending the QUIT command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11925,10 +12006,10 @@ The Postfix SMTP client time limit for sending the SMTP RCPT TO command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -11995,6 +12076,11 @@ sends RSET in order to finish a recipient address probe, or to verify that a cached session is still usable.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.1 and later.

    @@ -12009,7 +12095,7 @@ password. Each table (key, value) pair contains a server name, a username and password, and the full server response. This information is stored when a remote SMTP server rejects an authentication attempt with a 535 reply code. As long as the smtp_sasl_password_maps -information does no change, and as long as the smtp_sasl_auth_cache_name +information does not change, and as long as the smtp_sasl_auth_cache_name information does not expire (see smtp_sasl_auth_cache_time) the Postfix SMTP client avoids SASL authentication attempts with the same server, username and password, and instead bounces or defers @@ -12047,6 +12133,11 @@ passwords, and requires that Postfix is compiled with TLS support.

    The maximal age of an smtp_sasl_auth_cache_name entry before it is removed.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    +

    This feature is available in Postfix 2.5 and later.

    @@ -12376,6 +12467,11 @@ Do not wait for the response to the SMTP QUIT command.

    Time limit for Postfix SMTP client write and read operations during TLS startup and shutdown handshake procedures.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.2 and later.

    @@ -12576,7 +12672,7 @@ key.

    The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -12782,7 +12878,7 @@ With earlier Postfix versions the default setting was always "dane". compromise SMTP transport security by returning forged MX records, such attacks are "tamper-evident" since any forged MX hostnames will be recorded in the mail logs. Attackers who place a high value -staying hidden may be deterred from forging MX records.

    +on staying hidden may be deterred from forging MX records.

    This feature is available in Postfix 3.1 and later. The may @@ -12886,7 +12982,7 @@ for MTA clients are not specified.

    checking. This setting has no effect on sessions that are controlled via the smtp_tls_per_site table.

    -

    Disabling the hostname verification can make sense in closed +

    Disabling the hostname verification can make sense in a closed environment where special CAs are created. If not used carefully, this option opens the danger of a "man-in-the-middle" attack (the CommonName of this attacker will be logged).

    @@ -12919,7 +13015,7 @@ case only ciphers matching all the properties are excluded.

  • -

    The first setting, disables anonymous ciphers. The next setting +

    The first setting disables anonymous ciphers. The next setting disables ciphers that use the MD5 digest algorithm or the (single) DES encryption algorithm. The next setting disables ciphers that use MD5 and DES together. The next setting disables the two ciphers "AES256-SHA" @@ -13035,7 +13131,7 @@ $ openssl x509 -noout -fingerprint -digest -in certfile.pem -

    The text to the right of "=" sign is the desired fingerprint. +

    The text to the right of the "=" sign is the desired fingerprint. For example:

    @@ -13067,7 +13163,7 @@ $ openssl x509 -in cert.pem -noout -pubkey |

    The Postfix SMTP server and client log the peer (leaf) certificate -fingerprint and public key fingerprint when the TLS loglevel is 2 or +fingerprint and the public key fingerprint when the TLS loglevel is 2 or higher.

    This feature is available in Postfix 2.5 and later.

    @@ -13137,10 +13233,10 @@ log trust-chain verification errors.
    2 Also log levels during TLS negotiation.
    -
    3 Also log hexadecimal and ASCII dump of TLS negotiation -process.
    +
    3 Also log the hexadecimal and ASCII dump of the +TLS negotiation process.
    -
    4 Also log hexadecimal and ASCII dump of complete +
    4 Also log the hexadecimal and ASCII dump of complete transmission after STARTTLS.
    @@ -13170,19 +13266,19 @@ on a per-destination basis.

    export
    Enable "EXPORT" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    low
    Enable "LOW" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    medium
    Enable "MEDIUM" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_medium_cipherlist -configuration parameter, which you are strongly encouraged to not change. +configuration parameter, which you are strongly encouraged not to change.
    high
    @@ -13191,7 +13287,7 @@ be appropriate when all mandatory TLS destinations (e.g. when all mail is routed to a suitably capable relayhost) support at least one "HIGH" grade cipher. The underlying cipherlist is specified via the tls_high_cipherlist configuration parameter, which you are strongly -encouraged to not change. +encouraged not to change.
    null
    Enable only the "NULL" OpenSSL ciphers, these provide authentication @@ -13200,7 +13296,7 @@ that all servers are prepared to use NULL ciphers (not normally enabled in TLS servers). A plausible use-case is an LMTP server listening on a UNIX-domain socket that is configured to support "NULL" ciphers. The underlying cipherlist is specified via the tls_null_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change.
    @@ -13287,7 +13383,7 @@ yet support a symbolic name for that protocol version.

    With Postfix < 3.6 there is no support for a minimum or maximum version, and the protocol range is configured via protocol exclusions. To require at least TLS 1.0, set "smtp_tls_mandatory_protocols = !SSLv2, -!SSLv3". Listing the protocols to include, rather than protocols to +!SSLv3". Listing the protocols to include, rather than the protocols to exclude, is supported, but not recommended. The exclusion syntax more accurately matches the underlying OpenSSL interface.

    @@ -13302,7 +13398,7 @@ disables all versions above that higher version. Thus, for example:

    -

    also disables any protocols version higher than TLSv1.1 leaving +

    also disables any protocol versions higher than TLSv1.1 leaving only "TLSv1" enabled.

    Support for "TLSv1.3" was introduced in OpenSSL 1.1.1. Disabling @@ -13311,7 +13407,7 @@ releases ≥ 3.0.14, 3.1.10, 3.2.7 and 3.3.2).

    While the vast majority of SMTP servers with DANE TLSA records now support at least TLS 1.2, a few still only support TLS 1.0. If you use -"dane" or "dane-only" it is best to not disable TLSv1, except perhaps +"dane" or "dane-only" it is best not to disable TLSv1, except perhaps via the policy table for destinations which you are sure will support "TLSv1.2".

    @@ -13354,8 +13450,8 @@ postfix/smtp[pid]: Host offered STARTTLS: [name.of.host]

    Optional lookup tables with the Postfix SMTP client TLS usage policy by next-hop destination and by remote SMTP server hostname. When both lookups succeed, the more specific per-site policy (NONE, -MUST, etc) overrides the less specific one (MAY), and the more secure -per-site policy (MUST, etc) overrides the less secure one (NONE). +MUST, etc.) overrides the less specific one (MAY), and the more secure +per-site policy (MUST, etc.) overrides the less secure one (NONE). With Postfix 2.3 and later smtp_tls_per_site is strongly discouraged: use smtp_tls_policy_maps instead.

    @@ -13379,7 +13475,7 @@ lookup key, and overrides the global smtp and smtp_tls_enforce_peername settings.
    MAY
    Try to use TLS if the server announces support, -otherwise use the unencrypted connection. This has less precedence +otherwise use an unencrypted connection. This has less precedence than a more specific result (including NONE) from the alternate host or next-hop lookup key, and has less precedence than the more specific global "smtp_enforce_tls = yes" or "smtp_tls_enforce_peername @@ -13397,7 +13493,7 @@ or next-hop lookup key, and overrides the global smtp_use_tls, smtp_enforce_tls and smtp_tls_enforce_peername settings.
    @@ -13480,7 +13576,9 @@ attributes (available for opportunistic TLS with Postfix ≥ 2.6) and "connection_reuse" attribute (Postfix ≥ 3.4) override the "smtp_tls_ciphers", "smtp_tls_exclude_ciphers", "smtp_tls_protocols", and -"smtp_tls_connection_reuse" configuration parameters. When opportunistic +"smtp_tls_connection_reuse" configuration parameters. In the policy table, +multiple ciphers, protocols or excluded ciphers must be separated by colons, +as attribute values may not contain whitespace or commas. When opportunistic TLS handshakes fail, Postfix retries the connection with TLS disabled. This allows mail delivery to sites with non-interoperable TLS implementations. @@ -13494,7 +13592,7 @@ optional "exclude" attribute (Postfix ≥ 2.6) overrides the smtp_tls_mandatory_exclude_ciphers parameter, and the optional "connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. In the policy table, -multiple protocols or excluded ciphers must be separated by colons, +multiple ciphers, protocols or excluded ciphers must be separated by colons, as attribute values may not contain whitespace or commas.
    dane
    @@ -13509,6 +13607,16 @@ server certificate must match the TLSA records. main.cf smtp_tls_connection_reuse parameter. +When the effective security level used is may, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_ciphers", "smtp_tls_exclude_ciphers", and "smtp_tls_protocols" +configuration parameters. +When the effective security level used is encrypt, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters.
    dane-only
    @@ -13518,8 +13626,11 @@ or none are usable, no connection is made to the server. When usable TLSA records are obtained for the remote SMTP server, the server certificate must match the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is available with Postfix 2.11 -and later. The optional "connection_reuse" attribute (Postfix ≥ -3.4) overrides the main.cf smtp_tls_connection_reuse parameter. +and later. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix ≥ 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
    fingerprint
    @@ -13527,7 +13638,7 @@ and later. The optional "connection_reuse" attribute (Postfix ≥ verification. Available with Postfix 2.5 and later. At this security level, there are no trusted Certification Authorities. The certificate trust chain, expiration date, ... are not checked. Instead, -the optional match attribute, or else the main.cf +the optional "match" attribute, or else the main.cf smtp_tls_fingerprint_cert_match parameter, lists the certificate fingerprints or the public key fingerprint (Postfix 2.9 and later) of the valid server certificate. The digest @@ -13536,8 +13647,12 @@ algorithm used to calculate the fingerprint is selected by the be combined with a "|" delimiter in a single match attribute, or multiple match attributes can be employed. The ":" character is not used as a delimiter as it occurs between each pair of fingerprint (hexadecimal) -digits. The optional "connection_reuse" attribute (Postfix ≥ 3.4) -overrides the main.cf smtp_tls_connection_reuse parameter. +digits. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix ≥ 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse +parameter.
    verify
    Mandatory TLS verification. At this security @@ -13547,8 +13662,11 @@ unauthenticated DNS MX lookups. The optional "match" attribute overrides the main.cf smtp_tls_verify_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. In practice explicit control over matching is more common with the -"secure" policy, described below. The optional "connection_reuse" -attribute (Postfix ≥ 3.4) overrides the main.cf +"secure" policy, described below. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
    secure
    @@ -13557,18 +13675,21 @@ MX lookups, though potentially used to determine the candidate next-hop gateway IP addresses, are not trusted to be secure enough for TLS peername verification. Instead, the default name verified in the server certificate is obtained directly from the next-hop, or is explicitly -specified via the optional match attribute which overrides the +specified via the optional "match" attribute which overrides the main.cf smtp_tls_secure_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. The match attribute is most useful when multiple domains are supported by -common server, the policy entries for additional domains specify matching +a common server: the policy entries for additional domains specify matching rules for the primary domain certificate. While transport table overrides -routing the secondary domains to the primary nexthop also allow secure +that route the secondary domains to the primary nexthop also allow secure verification, they risk delivery to the wrong destination when domains change hands or are re-assigned to new gateways. With the "match" attribute approach, routing is not perturbed, and mail is deferred if -verification of a new MX host fails. The optional "connection_reuse" -attribute (Postfix ≥ 3.4) overrides the main.cf +verification of a new MX host fails. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. @@ -13603,10 +13724,10 @@ Example: match=51:e9:af:2e:1e:40:1f:...:64:0a:30:35:2d:09:16:31:5a:eb:82:76 -

    Note: The hostname strategy if listed in a non-default -setting of smtp_tls_secure_cert_match or in the match attribute -in the policy table can render the secure level vulnerable to -DNS forgery. Do not use the hostname strategy for secure-channel +

    Note: The "hostname" strategy if listed in a non-default +setting of smtp_tls_secure_cert_match or in the "match" attribute +in the policy table can render the "secure" level vulnerable to +DNS forgery. Do not use the "hostname" strategy for secure-channel configurations in environments where DNS security is not assured.

    This feature is available in Postfix 2.3 and later.

    @@ -13633,7 +13754,7 @@ use the "!" exclusion syntax, also described below.

    acceptable protocols is to set the lowest acceptable TLS protocol version and/or the highest acceptable TLS protocol version. To set the lower bound include an element of the form: ">=version" where -version is a either one of the TLS protocol names listed above, +version is either one of the TLS protocol names listed above, or a hexadecimal number corresponding to the desired TLS protocol version (0301 for TLS 1.0, 0302 for TLS 1.1, etc.). For the upper bound, use "<=version". There must be no whitespace between @@ -13766,10 +13887,12 @@ example.net secure match=example.com:.example.com
    smtp_tls_security_level (default: empty)
    -

    The default SMTP TLS security level for the Postfix SMTP client; -when a non-empty value is specified, this overrides the obsolete -parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. -

    +

    The default SMTP TLS security level for the Postfix SMTP client. +When a non-empty value is specified, this overrides the obsolete +parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername; +when no value is specified for smtp_tls_enforce_peername or the obsolete +parameters, the default SMTP TLS security level is +none.

    Specify one of the following security levels:

    @@ -13881,7 +14004,7 @@ Examples:
     # Opportunistic TLS.
     smtp_tls_security_level = may
    -# Do not tweak opportunistic ciphers or protocol unless it is essential
    +# Do not tweak opportunistic ciphers or protocols unless it is essential
     # to do so (if a security vulnerability is found in the SSL library that
     # can be mitigated by disabling a particular protocol or raising the
     # cipher grade).
    @@ -13972,7 +14095,7 @@ concurrent access.  The file is created if it does not exist. The tlsmgr(8) daemon. This means that
     per-smtp-instance master.cf overrides of this parameter are not effective.
    -Note, that each of the cache databases supported by tlsmgr(8) daemon:
    +Note that each of the cache databases supported by tlsmgr(8) daemon:
     $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database
     (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to
     be stored separately. It is not at this time possible to store multiple
    @@ -14012,6 +14135,11 @@ are not possible. 

    ≤ 0, session caching is disabled. If set to a positive value less than 2 minutes, the minimum value of 2 minutes is used instead.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.2 and later.

    @@ -14152,7 +14280,7 @@ example.com verify match=hostname:nexthop (default: no)

    Request that the Postfix SMTP client connects using the -legacy SMTPS protocol instead of using the STARTTLS command.

    +SUBMISSIONS/SMTPS protocol instead of using the STARTTLS command.

    This mode requires "smtp_tls_security_level = encrypt" or stronger.

    @@ -14201,10 +14329,10 @@ The Postfix SMTP client time limit for sending the XFORWARD command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -14363,7 +14491,7 @@ with the anvil_rate_time_unit

    -By default, there is no limit on the number AUTH commands that a +By default, there is no limit on the number of AUTH commands that a client may send.

    @@ -14642,7 +14770,7 @@ client network address information.
    By default use the remote SMTP client certificate fingerprint or the public key -fingerprint (Postfix 2.9 and later) as lookup key for the specified +fingerprint (Postfix 2.9 and later) as the lookup key for the specified access(5) database; with Postfix version 2.2, also require that the remote SMTP client certificate is verified successfully. The fingerprint digest algorithm is configurable via the @@ -14739,7 +14867,7 @@ This feature is available in Postfix 2.7 and later.
    check_sasl_access type:table
    -
    Use the remote SMTP client SASL user name as lookup key for +
    Use the remote SMTP client SASL user name as the lookup key for the specified access(5) database. The lookup key has the form "username@domainname" when the smtpd_sasl_local_domain parameter value is non-empty. Unlike the check_client_access feature, @@ -14766,7 +14894,7 @@ authenticated via the RFC 4954
    Permit the request when the remote SMTP client certificate is verified successfully. This option must be used only if a special -CA issues the certificates and only this CA is listed as trusted +CA issues the certificates and only this CA is listed as a trusted CA. Otherwise, clients with a third-party certificate would also be allowed to relay. Specify "tls_append_default_CA = no" when the trusted CA is specified with smtpd_tls_CAfile or smtpd_tls_CApath, @@ -15099,7 +15227,7 @@ feature:

         # Append XVERP to MAIL FROM commands to request VERP-style delivery.
         # See VERP_README for more information on how to use Postfix VERP.
    -    /^(MAIL FROM:\s*<listname@example\.com>.*)/   $1 XVERP
    +    /^(MAIL\s+FROM:\s*<listname@example\.com>.*)/   $1 XVERP
     
    @@ -15316,10 +15444,17 @@ a client has made more than $sm
     fewer than $smtpd_hard_error_limit errors, without delivering mail.
     

    -

    With Postfix version 2.0 and earlier: the SMTP server delay before -sending a reject (4xx or 5xx) response, when the client has made -fewer than $smtpd_soft_error_limit errors without delivering -mail.

    +

    With Postfix version 2.0 and earlier: the SMTP server delay +before sending a reject (4xx or 5xx) response, when the client has +made fewer than $smtpd_soft_error_limit errors without delivering +mail. When the client has made $smtpd_soft_error_limit or more errors, +delay all responses with the larger of (number of errors) seconds +or $smtpd_error_sleep_time.

    + +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    @@ -15438,9 +15573,10 @@ Support for inline regular expressions was added in Postfix version

    The maximal number of errors a remote SMTP client is allowed to make without delivering mail. The Postfix SMTP server disconnects -when the limit is exceeded. Normally the default limit is 20, but +when the limit is reached. Normally the default limit is 20, but it changes under overload to just 1. With Postfix 2.5 and earlier, the SMTP server always allows up to 20 errors by default. +Valid values are greater than zero.

    @@ -15882,6 +16018,11 @@ The time after which an idle SMTPD policy service connection is closed.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.1 and later.

    @@ -15897,6 +16038,11 @@ The time after which an active SMTPD policy service connection is closed.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.1 and later.

    @@ -15943,6 +16089,11 @@ This feature is available in Postfix 3.0 and later.

    The delay between attempts to resend a failed SMTPD policy service request. Specify a value greater than zero.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 3.0 and later.

    @@ -15956,6 +16107,11 @@ The time limit for connecting to, writing to, or receiving from a delegated SMTPD policy server.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.1 and later.

    @@ -16000,7 +16156,7 @@ supposed to give the result to another Postfix SMTP server process.

    Specify "host:port" or "inet:host:port" for a TCP endpoint, or "unix:pathname" for a UNIX-domain endpoint. The host can be specified as an IP address or as a symbolic name; no MX lookups are done. -When no "host" or "host:" are specified, the local machine is +When no "host" or "host:" is specified, the local machine is assumed. Pathname interpretation is relative to the Postfix queue directory.

    @@ -16055,10 +16211,10 @@ generic error message while more detailed information is logged to the maillog file.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -16182,7 +16338,7 @@ feature is available in Postfix 2.1 and later.

      -
    • Postfix is mail forwarder: the resolved RCPT TO domain matches +
    • Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and the address contains no sender-specified routing (user@elsewhere@domain), @@ -16195,7 +16351,7 @@ contains no sender-specified routing (user@elsewhere@domain).
      permit_mx_backup
      -
      Permit the request when the local mail system is backup MX for +
      Permit the request when the local mail system is a backup MX for the RCPT TO domain, or when the domain is an authorized destination (see permit_auth_destination for definition). @@ -16208,7 +16364,7 @@ sender-specified routing information (example: user@elsewhere@domain). access is not restricted with permit_mx_backup_networks.
    • Safety: as of Postfix version 2.3, permit_mx_backup no longer -accepts the address when the local mail system is primary MX for +accepts the address when the local mail system is a primary MX for the recipient domain. Exception: permit_mx_backup accepts the address when it specifies an authorized destination (see permit_auth_destination for definition). @@ -16248,7 +16404,7 @@ in Postfix version 2.0 and later.
      • -
      • Postfix is mail forwarder: the resolved RCPT TO domain matches +
      • Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and contains no sender-specified routing (user@elsewhere@domain), @@ -16294,7 +16450,7 @@ Address verification information is managed by the verif see the ADDRESS_VERIFICATION_README file for details.
        The unverified_recipient_reject_code parameter specifies the numerical response code when an address is known to bounce (default: 450, -change into 550 when you are confident that it is safe to do so). +change it to 550 when you are confident that it is safe to do so).
        The unverified_recipient_defer_code parameter specifies the numerical response code when an address probe failed due to a temporary problem (default: 450).
        The @@ -16571,6 +16727,8 @@ By default, the Postfix SMTP server accepts:
      • Mail from clients whose IP address matches $mynetworks, or: +
      • Mail from clients who are SASL authenticated, or: +
      • Mail to remote destinations that match $relay_domains, except for addresses that contain sender-specified routing (user@elsewhere@domain), or: @@ -16723,7 +16881,7 @@ $mynetworks to prevent Postfix from off

        Specify a list of network/netmask patterns, separated by commas and/or whitespace. The mask specifies the number of bits in the -network part of a host address. You can also "/file/name" or +network part of a host address. You can also specify "/file/name" or "type:table" patterns. A "/file/name" pattern is replaced by its contents; a "type:table" lookup table is matched when a table entry matches a lookup string (the lookup result is ignored). Continue @@ -17106,7 +17264,7 @@ Postfix version 2.1 and later.

        reject_unknown_sender_domain
        -
        Reject the request when Postfix is not final destination for +
        Reject the request when Postfix is not the final destination for the sender address, and the MAIL FROM domain has 1) no DNS MX and no DNS A record, or 2) a malformed MX record such as a record with @@ -17200,11 +17358,18 @@ responses.
          -
        • With Postfix version 2.1 and later, the Postfix SMTP server -delays all responses by $smtpd_error_sleep_time seconds.

          +
        • With Postfix version 2.1 and later, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server +delays all responses by $smtpd_error_sleep_time.

          + +
        • With Postfix versions 2.0 and earlier, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server delays all +responses by the larger of (number of errors) seconds or +$smtpd_error_sleep_time.

          -
        • With Postfix versions 2.0 and earlier, the Postfix SMTP -server delays all responses by (number of errors) seconds.

          +
        • With Postfix versions 2.0 and earlier, when the error count +is ≤ $smtpd_soft_error_limit, the Postfix SMTP server delays 4XX +and 5XX responses by $smtpd_error_sleep_time.

        @@ -17219,6 +17384,11 @@ during TLS startup and shutdown handshake procedures. The current default value is stress-dependent. Before Postfix version 2.8, it was fixed at 300s.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        @@ -17247,10 +17417,10 @@ Note: if you set SMTP time limits to very large values you may have to update the global ipc_timeout parameter.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        @@ -17521,7 +17691,7 @@ key.

        The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -17758,7 +17928,7 @@ Postfix uses ciphers with forward secrecy.

        smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem -

        This feature is available with Postfix version 2.2.

        +

        This feature is available in Postfix 2.2 and later.

        @@ -17784,7 +17954,8 @@ configuration parameter.

        smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem -

        This feature is available with Postfix version 2.2.

        +

        This feature is available in Postfix 2.2 and later, +but is ignored in Postfix 3.6 and later.

        @@ -18094,13 +18265,13 @@ one "medium" or "high" grade cipher.

        export
        Enable "EXPORT" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
        low
        Enable "LOW" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
        medium
        @@ -18108,7 +18279,7 @@ choice is insecure and SHOULD NOT be used. or longer symmetric bulk-encryption keys. This is the default minimum strength for mandatory TLS encryption. The underlying cipherlist is specified via the tls_medium_cipherlist configuration parameter, which -you are strongly encouraged to not change. +you are strongly encouraged not to change.
        high
        Enable only "HIGH" grade OpenSSL ciphers. The @@ -18122,7 +18293,7 @@ without encryption. This setting is only appropriate in the rare case that all clients are prepared to use NULL ciphers (not normally enabled in TLS clients). The underlying cipherlist is specified via the tls_null_cipherlist configuration parameter, which you are strongly -encouraged to not change.
        +encouraged not to change. @@ -18386,7 +18557,7 @@ concurrent access. The file is created if it does not exist. The tlsmgr(8) daemon. This means that per-smtpd-instance master.cf overrides of this parameter are not -effective. Note, that each of the cache databases supported by tlsmgr(8) +effective. Note that each of the cache databases supported by tlsmgr(8) daemon: $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to be stored separately. It is not at this time possible to store multiple @@ -18437,6 +18608,11 @@ value of 2 minutes is used instead. TLS session tickets require an OpenSSL library (at least version 0.9.8h) that provides full support for this TLS extension.

        +

        Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later, and updated for TLS session ticket support in Postfix 2.11.

        @@ -18446,13 +18622,13 @@ for TLS session ticket support in Postfix 2.11.

        smtpd_tls_wrappermode (default: no)
        -

        Run the Postfix SMTP server in the non-standard "wrapper" mode, +

        Run the Postfix SMTP server in TLS "wrapper" mode, instead of using the STARTTLS command.

        If you want to support this service, enable a special port in master.cf, and specify "-o smtpd_tls_wrappermode=yes" on the SMTP -server's command line. Port 465 (smtps) was once chosen for this -purpose.

        +server's command line. Port 465 (submissions/smtps) is reserved for +this purpose.

        This feature is available in Postfix 2.2 and later.

        @@ -18483,6 +18659,11 @@ authentication in the proxy agent (Postfix 2.9 and later).

        The time limit for the proxy protocol specified with the smtpd_upstream_proxy_protocol parameter.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.10 and later.

        @@ -18570,8 +18751,8 @@ mail.
        (default: yes)

        Enable preliminary SMTPUTF8 support for the protocols described -in RFC 6531..6533. This requires that Postfix is built to support -these protocols.

        +in RFC 6531, RFC 6532, and RFC 6533. This requires that Postfix is +built to support these protocols.

        This feature is available in Postfix 3.0 and later.

        @@ -18616,10 +18797,10 @@ The time after which a stale exclusive mailbox lockfile is removed. This is used for delivery to file or mailbox.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        @@ -18959,7 +19140,7 @@ ignored with a warning.

        Note: It is unwise to omit sha256 from the digest list. This digest algorithm is the only mandatory to implement digest algorithm -in RFC 6698, and many servers are expected publish TLSA records +in RFC 6698, and many servers are expected to publish TLSA records with just sha256 digests. Unless one of the standard digests is seriously compromised and servers have had ample time to update their TLSA records you should not omit any standard digests, just arrange @@ -19077,7 +19258,7 @@ be using 0.9.6! SMTP client and server. These curves are used by the Postfix SMTP server when "smtpd_tls_eecdh_grade = auto". The selected curves must be implemented by OpenSSL and be standardized for use in TLS -(RFC 4492 or its imminent successor). It is unwise to list only +(RFC 8422). It is unwise to list only "bleeding-edge" curves supported by a small subset of clients. The default list is suitable for most users.

        @@ -19107,10 +19288,10 @@ server when "smtpd_tls_eecdh_gra strong" means approximately 128-bit security based on best known attacks. The selected curve must be implemented by OpenSSL (as reported by ecparam(1) with the "-list_curves" option) and be one -of the curves listed in Section 5.1.1 of RFC 4492. You should not +of the curves listed in Section 5.1.1 of RFC 8422. You should not generally change this setting. Remote SMTP client implementations must support this curve for EECDH key exchange to take place. It -is unwise to choose an "bleeding-edge" curve supported by only a +is unwise to choose only "bleeding-edge" curves supported by only a small subset of clients.

        The default "strong" curve is rated in NSA smtpd_tls_eecdh_grade = strong". The selected curve must be implemented by OpenSSL (as reported by ecparam(1) with the "-list_curves" option) and be one of the curves listed in Section 5.1.1 -of RFC 4492. You should not generally change this setting.

        +of RFC 8422. You should not generally change this setting. Remote SMTP +client implementations must support this curve for EECDH key exchange +to take place. It is unwise to choose only "bleeding-edge" curves +supported by only a small subset of clients.

        This default "ultra" curve is rated in NSA Suite @@ -19185,7 +19369,7 @@ defines the meaning of the "export" setting in +encouraged not to change this setting.

        This feature is available in Postfix 2.3 and later.

        @@ -19211,7 +19395,7 @@ later.

        the meaning of the "high" setting in
        smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting.

        +encouraged not to change this setting.

        This feature is available in Postfix 2.3 and later.

        @@ -19226,7 +19410,7 @@ encouraged to not change this setting.

        an incorrect algorithm. This parameter has no effect on the certificate fingerprint support that is available since Postfix 2.2.

        -

        Specify "tls_legacy_public_key_fingerprints = yes" temporarily, +

        Specify "tls_legacy_public_key_fingerprints = yes" temporarily, pending a migration from configuration files with incorrect Postfix 2.9.0..2.9.5 certificate public-key finger prints, to the correct fingerprints used by Postfix 2.9.6 and later. To compute the correct @@ -19244,7 +19428,7 @@ certificate public-key fingerprints, see TLS_READMEsmtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting.

        +encouraged not to change this setting.

        This feature is available in Postfix 2.3 and later.

        @@ -19261,8 +19445,8 @@ defines the meaning of the "medium" setting in smtp_tls_mandatory_ciphers and -lmtp_tls_mandatory_ciphers. You are strongly encouraged to not +setting in smtpd_tls_mandatory_ciphers, smtp_tls_mandatory_ciphers and +lmtp_tls_mandatory_ciphers. You are strongly encouraged not to change this setting.

        This feature is available in Postfix 2.3 and later.

        @@ -19353,6 +19537,11 @@ warning is logged.

        the pseudo random number generator (PRNG) to the file specified with $tls_random_exchange_name.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        @@ -19366,6 +19555,11 @@ in-memory pseudo random number generator (PRNG) pool from external sources. The actual time between re-seeding attempts is calculated using the PRNG, and is between 0 and the time specified.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        @@ -19381,7 +19575,7 @@ type must be prepended: egd:/path/to/egd_socket for a source with EGD compatible socket interface, or dev:/path/to/device for a device file.

        -

        Note: on OpenBSD systems specify /dev/arandom when /dev/urandom +

        Note: on OpenBSD systems specify dev:/dev/arandom when dev:/dev/urandom gives timeout errors.

        This feature is available in Postfix 2.2 and later.

        @@ -19400,7 +19594,7 @@ server mode of tlsproxy(8).

        When this parameter is non-empty, the Postfix SMTP server enables SNI extension processing, and logs SNI values that are invalid or -don't match an entry in the the specified tables. When an entry +don't match an entry in the specified tables. When an entry does match, the SNI name is logged as part of the connection summary at log levels 1 and higher.

        @@ -19752,7 +19946,8 @@ to configure tlsproxy client keys and certificates is via the (default: $smtp_enforce_tls)

        Enforcement mode: require that SMTP servers use TLS encryption. -See smtp_enforce_tls for further details.

        +See smtp_enforce_tls for further details. Use +tlsproxy_client_security_level instead.

        This feature is available in Postfix 3.4 and later.

        @@ -19856,7 +20051,8 @@ client. See smtp_tls_security_ (default: $smtp_use_tls)

        Opportunistic mode: use TLS when a remote server announces TLS -support. See smtp_use_tls for further details.

        +support. See smtp_use_tls for further details. Use +tlsproxy_client_security_level instead.

        This feature is available in Postfix 3.4 and later.

        @@ -19868,7 +20064,7 @@ support. See smtp_use_tls for further

        Mandatory TLS: announce STARTTLS support to remote SMTP clients, and require that clients use TLS encryption. See smtpd_enforce_tls for -further details.

        +further details. Use tlsproxy_tls_security_level instead.

        This feature is available in Postfix 2.8 and later.

        @@ -20224,7 +20420,7 @@ shared by all three services, namely smtpd_use_tls -for further details.

        +for further details. Use tlsproxy_tls_security_level instead.

        This feature is available in Postfix 2.8 and later.

        @@ -20243,7 +20439,8 @@ cannot be set under 10s.

        Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

        +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        This feature is available in Postfix 2.8 and later

        @@ -20574,10 +20771,10 @@ The time between attempts by the Postfix queue manager to contact a malfunctioning message delivery transport.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        @@ -20589,6 +20786,11 @@ The default time unit is s (seconds). value, where transport is the master.cf name of the message delivery transport.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        Note: transport_time_limit parameters will not show up in "postconf" command output before Postfix version 2.9. This limitation applies to many parameters whose name is a combination @@ -20605,6 +20807,17 @@ of a master.cf service name and a built-in suffix (i parameter value, where the initial transport in the parameter name is the master.cf name of the message delivery transport.

        +

        Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        + +

        Note: transport_transport_rate_delay parameters will +not show up in "postconf" command output before Postfix version +2.9. This limitation applies to many parameters whose name is a +combination of a master.cf service name and a built-in suffix (in +this case: "_transport_rate_delay").

        + @@ -20618,10 +20831,10 @@ programs from getting stuck when the mail system is under heavy load.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        @@ -21005,7 +21218,7 @@ This feature is available in Postfix 3.0 and later.
        virtual_alias_domains (default: $virtual_alias_maps)
        -

        Postfix is final destination for the specified list of virtual +

        Postfix is the final destination for the specified list of virtual alias domains, that is, domains for which all addresses are aliased to addresses in other local or remote domains. The SMTP server validates recipient addresses with $virtual_alias_maps and rejects @@ -21029,7 +21242,7 @@ domain names).

        Specify a list of host or domain names, "/file/name" or "type:table" patterns, separated by commas and/or whitespace. A "/file/name" pattern is replaced by its contents; a "type:table" -lookup table is matched when a table entry matches a lookup string +lookup table is matched when a table entry matches a host or domain name (the lookup result is ignored). Continue long lines by starting the next line with whitespace. Specify "!pattern" to exclude a host or domain name from the list. The form "!/file/name" is supported @@ -21071,7 +21284,7 @@ This feature is available in Postfix 2.1 and later.

        Optional lookup tables that alias specific mail addresses or domains -to other local or remote address. The table format and lookups +to other local or remote addresses. The table format and lookups are documented in virtual(5). For an overview of Postfix address manipulations see the ADDRESS_REWRITING_README document.

        @@ -21237,7 +21450,7 @@ Example:
        virtual_mailbox_domains (default: $virtual_mailbox_maps)
        -

        Postfix is final destination for the specified list of domains; +

        Postfix is the final destination for the specified list of domains; mail is delivered via the $virtual_transport mail delivery transport. By default this is the Postfix virtual(8) delivery agent. The SMTP server validates recipient addresses with $virtual_mailbox_maps @@ -21320,6 +21533,13 @@ match any user in the specified domain that does not have a specific "user@domain.tld" entry.

        +

        +With the default "virtual_mailbox_domains = $virtual_mailbox_maps", +lookup tables also need entries with a left-hand side of "domain.tld" +to satisfy virtual_mailbox_domain lookups (the right-hand side is +required but will not be used). +

        +

        The remainder of this text is specific to the virtual(8) delivery agent. It does not apply when mail is delivered with a different mail delivery program.

        diff --git a/postfix/html/postfix-manuals.html b/postfix/html/postfix-manuals.html index 54aa8595b..6f674e6d6 100644 --- a/postfix/html/postfix-manuals.html +++ b/postfix/html/postfix-manuals.html @@ -84,6 +84,8 @@ the following convention:

      • postconf(1), Postfix configuration utility +
      • postdrop(1), Postfix mail posting utility +
      • postfix(1), Postfix control program
      • postfix-tls(1), Postfix TLS management diff --git a/postfix/html/postfix.1.html b/postfix/html/postfix.1.html index 4541c47db..d69e1ece6 100644 --- a/postfix/html/postfix.1.html +++ b/postfix/html/postfix.1.html @@ -246,7 +246,7 @@ POSTFIX(1) POSTFIX(1) Other configuration parameters: import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. @@ -322,6 +322,7 @@ POSTFIX(1) POSTFIX(1) postalias(1), create/update/query alias database postcat(1), examine Postfix queue file postconf(1), Postfix configuration utility + postdrop(1), Postfix mail posting utility postfix(1), Postfix control program postfix-tls(1), Postfix TLS management postkick(1), trigger Postfix daemon diff --git a/postfix/html/postmap.1.html b/postfix/html/postmap.1.html index db9fa28b2..aa5377b21 100644 --- a/postfix/html/postmap.1.html +++ b/postfix/html/postmap.1.html @@ -38,8 +38,10 @@ POSTMAP(1) POSTMAP(1) starts with whitespace continues a logical line. The key and value are processed as is, except that surrounding white - space is stripped off. Whitespace in lookup keys is supported as of - Postfix 3.2. + space is stripped off. Whitespace in lookup keys is supported in Post- + fix 3.2 and later, by surrounding the key with double quote characters + `"'. Within the double quotes, double quote `"' and backslash `\' char- + acters can be included by quoting them with a preceding backslash. When the -F option is given, the value must specify one or more file- names separated by comma and/or whitespace; postmap(1) will concatenate @@ -72,9 +74,9 @@ POSTMAP(1) POSTMAP(1) body-style lookup keys for attachment MIME headers and for attached message/* headers. - NOTE: with "smtputf8_enable = yes", the -b option option dis- - ables UTF-8 syntax checks on query keys and lookup results. - Specify the -U option to force UTF-8 syntax checks anyway. + NOTE: with "smtputf8_enable = yes", the -b option disables UTF-8 + syntax checks on query keys and lookup results. Specify the -U + option to force UTF-8 syntax checks anyway. This feature is available in Postfix version 2.6 and later. @@ -270,13 +272,13 @@ POSTMAP(1) POSTMAP(1) and postmap(1) commands. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. smtputf8_enable (yes) Enable preliminary SMTPUTF8 support for the protocols described - in RFC 6531..6533. + in RFC 6531, RFC 6532, and RFC 6533. syslog_facility (mail) The syslog facility of Postfix logging. diff --git a/postfix/html/postmulti.1.html b/postfix/html/postmulti.1.html index bb20536f2..6456b9219 100644 --- a/postfix/html/postmulti.1.html +++ b/postfix/html/postmulti.1.html @@ -200,7 +200,7 @@ POSTMULTI(1) POSTMULTI(1) default values for the private directories of the new instance. The "-G group" option may be specified to assign the instance to a group, otherwise, the new - instance is not a member of any groups. + instance is not a member of any group. The new instance main.cf is the stock main.cf with the parameters that specify the locations of shared files @@ -222,66 +222,67 @@ POSTMULTI(1) POSTMULTI(1) data_directory=/my/data/dir If any of these pathnames is not supplied, the program - attempts to generate the pathname by taking the corre- - sponding primary instance pathname, and by replacing the - last pathname component by the value of the -I option. + attempts to generate the missing pathname(s) by taking + the corresponding primary instance pathname, and replac- + ing the last pathname component by the value of the -I + option. - If the instance configuration directory already exists, - and contains both a main.cf and master.cf file, create + If the instance configuration directory already exists, + and contains both a main.cf and master.cf file, create will "import" the instance as-is. For existing instances, create and import are identical. - import Import an existing instance into the list of instances + import Import an existing instance into the list of instances managed by the postmulti(1) multi-instance manager. This - adds the instance to the multi_instance_directories list + adds the instance to the multi_instance_directories list of the primary instance. If the "-I name" option is pro- - vided it specifies the new name for the instance and is - used to define a default location for the instance con- - figuration directory (as with create above). The "-G - group" option may be used to assign the instance to a - group. Add a "config_directory=/path" argument to over- + vided it specifies the new name for the instance and is + used to define a default location for the instance con- + figuration directory (as with create above). The "-G + group" option may be used to assign the instance to a + group. Add a "config_directory=/path" argument to over- ride a default pathname based on "-I name". destroy - Destroy a secondary Postfix instance. To be a candidate + Destroy a secondary Postfix instance. To be a candidate for destruction an instance must be disabled, stopped and - its queue must not contain any messages. Attempts to - destroy the primary Postfix instance trigger a fatal + its queue must not contain any messages. Attempts to + destroy the primary Postfix instance trigger a fatal error, without destroying the instance. The instance is removed from the primary instance main.cf file's alternate_config_directories parameter and its - data, queue and configuration directories are cleaned of - files and directories created by the Postfix system. The + data, queue and configuration directories are cleaned of + files and directories created by the Postfix system. The main.cf and master.cf files are removed from the configu- - ration directory even if they have been modified since - initial creation. Finally, the instance is "deported" + ration directory even if they have been modified since + initial creation. Finally, the instance is "deported" from the list of managed instances. - If other files are present in instance private directo- + If other files are present in instance private directo- ries, the directories may not be fully removed, a warning is logged to alert the administrator. It is expected that - an instance built using "fresh" directories via the cre- - ate action will be fully removed by the destroy action - (if first disabled). If the instance configuration and - queue directories are populated with additional files - (access and rewriting tables, chroot jail content, etc.) + an instance built using "fresh" directories via the cre- + ate action will be fully removed by the destroy action + (if first disabled). If the instance configuration and + queue directories are populated with additional files + (access and rewriting tables, chroot jail content, etc.) the instance directories will not be fully removed. - The destroy action triggers potentially dangerous file - removal operations. Make sure the instance's data, queue - and configuration directories are set correctly and do + The destroy action triggers potentially dangerous file + removal operations. Make sure the instance's data, queue + and configuration directories are set correctly and do not contain any valuable files. - deport Deport a secondary instance from the list of managed + deport Deport a secondary instance from the list of managed instances. This deletes the instance configuration direc- - tory from the primary instance's multi_instance_directo- - ries list, but does not remove any files or directories. + tory from the primary instance's multi_instance_directo- + ries list, but does not remove any files or directories. - assign Assign a new instance name or a new group name to the - selected instance. Use "-G -" to specify "no group" and - "-I -" to specify "no name". If you choose to make an - instance "nameless", set a suitable syslog_name in the + assign Assign a new instance name or a new group name to the + selected instance. Use "-G -" to specify "no group" and + "-I -" to specify "no name". If you choose to make an + instance "nameless", set a suitable syslog_name in the corresponding main.cf file. enable Mark the selected instance as enabled. This just sets the @@ -289,18 +290,18 @@ POSTMULTI(1) POSTMULTI(1) instance's main.cf file. disable - Mark the selected instance as disabled. This means that - the instance will not be started etc. with "postfix - start", "postmulti -p start" and so on. The instance can - still be started etc. with "postfix -c config-directory + Mark the selected instance as disabled. This means that + the instance will not be started etc. with "postfix + start", "postmulti -p start" and so on. The instance can + still be started etc. with "postfix -c config-directory start". Other options - -v Enable verbose logging for debugging purposes. Multiple -v + -v Enable verbose logging for debugging purposes. Multiple -v options make the software increasingly verbose. ENVIRONMENT - The postmulti(1) command exports the following environment variables + The postmulti(1) command exports the following environment variables before executing the requested command for a given instance: MAIL_VERBOSE @@ -311,22 +312,22 @@ POSTMULTI(1) POSTMULTI(1) CONFIGURATION PARAMETERS config_directory (see 'postconf -d' output) - The default location of the Postfix main.cf and master.cf con- + The default location of the Postfix main.cf and master.cf con- figuration files. daemon_directory (see 'postconf -d' output) The directory with Postfix support programs and daemon programs. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix - process will import from a non-Postfix parent process, or + The list of environment variables that a privileged Postfix + process will import from a non-Postfix parent process, or name=value environment overrides. multi_instance_directories (empty) - An optional list of non-default Postfix configuration directo- - ries; these directories belong to additional Postfix instances - that share the Postfix executable files and documentation with - the default Postfix instance, and that are started, stopped, + An optional list of non-default Postfix configuration directo- + ries; these directories belong to additional Postfix instances + that share the Postfix executable files and documentation with + the default Postfix instance, and that are started, stopped, etc., together with the default Postfix instance. multi_instance_group (empty) @@ -336,40 +337,40 @@ POSTMULTI(1) POSTMULTI(1) The optional instance name of this Postfix instance. multi_instance_enable (no) - Allow this Postfix instance to be started, stopped, etc., by a + Allow this Postfix instance to be started, stopped, etc., by a multi-instance manager. postmulti_start_commands (start) - The postfix(1) commands that the postmulti(1) instance manager + The postfix(1) commands that the postmulti(1) instance manager treats as "start" commands. postmulti_stop_commands (see 'postconf -d' output) - The postfix(1) commands that the postmulti(1) instance manager + The postfix(1) commands that the postmulti(1) instance manager treats as "stop" commands. postmulti_control_commands (reload flush) - The postfix(1) commands that the postmulti(1) instance manager + The postfix(1) commands that the postmulti(1) instance manager treats as "control" commands, that operate on running instances. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (see 'postconf -d' output) - A prefix that is prepended to the process name in syslog + A prefix that is prepended to the process name in syslog records, so that, for example, "smtpd" becomes "prefix/smtpd". Available in Postfix 3.0 and later: meta_directory (see 'postconf -d' output) - The location of non-executable files that are shared among mul- - tiple Postfix instances, such as postfix-files, dynamicmaps.cf, - and the multi-instance template files main.cf.proto and mas- + The location of non-executable files that are shared among mul- + tiple Postfix instances, such as postfix-files, dynamicmaps.cf, + and the multi-instance template files main.cf.proto and mas- ter.cf.proto. shlib_directory (see 'postconf -d' output) - The location of Postfix dynamically-linked libraries (libpost- - fix-*.so), and the default location of Postfix database plugins - (postfix-*.so) that have a relative pathname in the dynam- + The location of Postfix dynamically-linked libraries (libpost- + fix-*.so), and the default location of Postfix database plugins + (postfix-*.so) that have a relative pathname in the dynam- icmaps.cf file. FILES diff --git a/postfix/html/posttls-finger.1.html b/postfix/html/posttls-finger.1.html index 4520d14c8..401ad0726 100644 --- a/postfix/html/posttls-finger.1.html +++ b/postfix/html/posttls-finger.1.html @@ -18,7 +18,7 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) TLS-related information about the server. With SMTP, the destination is a domainname; with LMTP it is either a domainname prefixed with inet: or a pathname prefixed with unix:. If Postfix is built without TLS - support, the resulting posttls-finger program has very limited func- + support, the resulting posttls-finger(1) program has very limited func- tionality, and only the -a, -c, -h, -o, -S, -t, -T and -v options are available. @@ -83,9 +83,9 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) -a family (default: any) Address family preference: ipv4, ipv6 or any. When using any, - posttls-finger will randomly select one of the two as the more - preferred, and exhaust all MX preferences for the first address - family before trying any addresses for the other. + posttls-finger(1) will randomly select one of the two as the + more preferred, and exhaust all MX preferences for the first + address family before trying any addresses for the other. -A trust-anchor.pem (default: none) A list of PEM trust-anchor files that overrides CAfile and CAp- @@ -109,7 +109,7 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) server fingerprints and matching against user provided certifi- cate fingerprints (with DANE TLSA records the algorithm is spec- ified in the DNS). In Postfix versions prior to 3.6, the - default value was "sha1". + default value was "md5". -f Lookup the associated DANE TLSA RRset even when a hostname is not an alias and its address records lie in an unsigned zone. @@ -121,7 +121,7 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) trusted. -g grade (default: medium) - The minimum TLS cipher grade used by posttls-finger. See + The minimum TLS cipher grade used by posttls-finger(1). See smtp_tls_mandatory_ciphers for details. -h host_lookup (default: dns) @@ -157,13 +157,13 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) allows you to test certificate or public-key fingerprint matches before you deploy them in the policy table. - Note, since posttls-finger does not actually deliver any email, - the none, may and encrypt security levels are not very useful. - Since may and encrypt don't require peer certificates, they will - often negotiate anonymous TLS ciphersuites, so you won't learn - much about the remote SMTP server's certificates at these levels - if it also supports anonymous TLS (though you may learn that the - server supports anonymous TLS). + Note, since posttls-finger(1) does not actually deliver any + email, the none, may and encrypt security levels are not very + useful. Since may and encrypt don't require peer certificates, + they will often negotiate anonymous TLS ciphersuites, so you + won't learn much about the remote SMTP server's certificates at + these levels if it also supports anonymous TLS (though you may + learn that the server supports anonymous TLS). -L logopts (default: routine,certmatch) Fine-grained TLS logging options. To tune the TLS features @@ -247,7 +247,7 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) The TLS policy for MX hosts with "secure" TLSA records when the nexthop destination security level is dane, but the MX record was found via an "insecure" MX lookup. See the main.cf documen- - tation for smtp_tls_insecure_mx_policy for details. + tation for smtp_tls_dane_insecure_mx_policy for details. -o name=value Specify zero or more times to override the value of the main.cf @@ -256,8 +256,8 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) configure the SMTP EHLO name sent to the remote server. -p protocols (default: >=TLSv1) - TLS protocols that posttls-finger will exclude or include. See - smtp_tls_mandatory_protocols for details. + TLS protocols that posttls-finger(1) will exclude or include. + See smtp_tls_mandatory_protocols for details. -P CApath/ (default: none) The OpenSSL CApath/ directory (indexed via c_rehash(1)) for @@ -293,11 +293,11 @@ POSTTLS-FINGER(1) POSTTLS-FINGER(1) -v Enable verbose Postfix logging. Specify more than once to increase the level of verbose logging. - -w Enable outgoing TLS wrapper mode, or SMTPS support. This is - typically provided on port 465 by servers that are compatible - with the ad-hoc SMTP in SSL protocol, rather than the standard - STARTTLS protocol. The destination domain:port should of course - provide such a service. + -w Enable outgoing TLS wrapper mode, or SUBMISSIONS/SMTPS support. + This is typically provided on port 465 by servers that are com- + patible with the SMTP-in-SSL protocol, rather than the STARTTLS + protocol. The destination domain:port must of course provide + such a service. -X Enable tlsproxy(8) mode. This is an unsupported mode, for pro- gram development only. diff --git a/postfix/html/relocated.5.html b/postfix/html/relocated.5.html index c74d47952..87db84b65 100644 --- a/postfix/html/relocated.5.html +++ b/postfix/html/relocated.5.html @@ -27,8 +27,8 @@ RELOCATED(5) RELOCATED(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those case, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those case, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". Table lookups are case insensitive. @@ -83,7 +83,7 @@ RELOCATED(5) RELOCATED(5) to a TCP-based server. For a description of regular expression lookup table syntax, see regexp_table(5) or pcre_table(5). For a description of the TCP client/server table lookup protocol, see tcp_table(5). This - feature is not available up to and including Postfix version 2.4. + feature is available in Postfix 2.5 and later. Each pattern is a regular expression that is applied to the entire address being looked up. Thus, user@domain mail addresses are not bro- @@ -100,8 +100,8 @@ RELOCATED(5) RELOCATED(5) TCP-BASED TABLES This section describes how the table lookups change when lookups are directed to a TCP-based server. For a description of the TCP - client/server lookup protocol, see tcp_table(5). This feature is not - available up to and including Postfix version 2.4. + client/server lookup protocol, see tcp_table(5). This feature is + available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, user@domain mail addresses are not broken up into their user and @domain con- @@ -117,25 +117,27 @@ RELOCATED(5) RELOCATED(5) below provides only a parameter summary. See postconf(5) for more details including examples. - relocated_maps - List of lookup tables for relocated users or sites. + relocated_maps (empty) + Optional lookup tables with new contact information for users or + domains that no longer exist. Other parameters of interest: - inet_interfaces - The network interface addresses that this system receives mail - on. You need to stop and start Postfix when this parameter - changes. + inet_interfaces (all) + The network interface addresses that this mail system receives + mail on. - mydestination - List of domains that this mail system considers local. + mydestination ($myhostname, localhost.$mydomain, localhost) + The list of domains that are delivered via the $local_transport + mail delivery transport. - myorigin - The domain that is appended to locally-posted mail. + myorigin ($myhostname) + The domain name that locally-posted mail appears to come from, + and that locally posted mail is delivered to. - proxy_interfaces - Other interfaces that this machine receives mail on by way of a - proxy agent or network address translator. + proxy_interfaces (empty) + The network interface addresses that this mail system receives + mail on by way of a proxy or network address translation unit. SEE ALSO trivial-rewrite(8), address resolver diff --git a/postfix/html/sendmail.1.html b/postfix/html/sendmail.1.html index 482b227d4..eb99f16cb 100644 --- a/postfix/html/sendmail.1.html +++ b/postfix/html/sendmail.1.html @@ -442,7 +442,7 @@ SENDMAIL(1) SENDMAIL(1) headers of mail that is still queued. import_environment (see 'postconf -d' output) - The list of environment parameters that a privileged Postfix + The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. diff --git a/postfix/html/smtp-sink.1.html b/postfix/html/smtp-sink.1.html index a3644f8a7..ed44dd4ba 100644 --- a/postfix/html/smtp-sink.1.html +++ b/postfix/html/smtp-sink.1.html @@ -213,8 +213,8 @@ SMTP-SINK(1) SMTP-SINK(1) Listen on the UNIX-domain socket at pathname. backlog - The maximum length the queue of pending connections, as defined - by the listen(2) system call. + The maximum length of the queue of pending connections, as + defined by the listen(2) system call. DUMP FILE FORMAT Each dumped message contains a sequence of text lines, terminated with diff --git a/postfix/html/smtp.8.html b/postfix/html/smtp.8.html index 5491c4ec2..98d8879ce 100644 --- a/postfix/html/smtp.8.html +++ b/postfix/html/smtp.8.html @@ -392,7 +392,7 @@ SMTP(8) SMTP(8) DATA requests, when deadlines are enabled with smtp_per_request_deadline. - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. MIME PROCESSING CONTROLS @@ -837,13 +837,13 @@ SMTP(8) SMTP(8) Implemented in the qmgr(8) daemon: - transport_destination_concurrency_limit ($default_destination_concur- + transport_destination_concurrency_limit ($default_destination_concur- rency_limit) - A transport-specific override for the default_destination_con- - currency_limit parameter value, where transport is the master.cf + A transport-specific override for the default_destination_con- + currency_limit parameter value, where transport is the master.cf name of the message delivery transport. - transport_destination_recipient_limit ($default_destination_recipi- + transport_destination_recipient_limit ($default_destination_recipi- ent_limit) A transport-specific override for the default_destination_recip- ient_limit parameter value, where transport is the master.cf diff --git a/postfix/html/smtpd.8.html b/postfix/html/smtpd.8.html index fbf1875cc..3e47a0eaf 100644 --- a/postfix/html/smtpd.8.html +++ b/postfix/html/smtpd.8.html @@ -410,7 +410,7 @@ SMTPD(8) SMTPD(8) Available in Postfix version 2.11 and later: - smtpd_sasl_service (smtp) + smtpd_sasl_service (smtp) The service name that is passed to the SASL plug-in that is selected with smtpd_sasl_type and smtpd_sasl_path. @@ -951,7 +951,7 @@ SMTPD(8) SMTPD(8) DATA and BDAT requests, when deadlines are enabled with smtpd_per_request_deadline. - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. TARPIT CONTROLS diff --git a/postfix/html/spawn.8.html b/postfix/html/spawn.8.html index f2889fb9c..a0fc22062 100644 --- a/postfix/html/spawn.8.html +++ b/postfix/html/spawn.8.html @@ -71,7 +71,7 @@ SPAWN(8) SPAWN(8) master.cf file. RESOURCE AND RATE CONTROL - transport_time_limit ($command_time_limit) + transport_time_limit ($command_time_limit) A transport-specific override for the command_time_limit parame- ter value, where transport is the master.cf name of the message delivery transport. diff --git a/postfix/html/sqlite_table.5.html b/postfix/html/sqlite_table.5.html index 6f34d3abc..308d1ccb7 100644 --- a/postfix/html/sqlite_table.5.html +++ b/postfix/html/sqlite_table.5.html @@ -21,7 +21,7 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) Alternatively, lookup tables can be specified as SQLite databases. In order to use SQLite lookups, define an SQLite source as a lookup table in main.cf, for example: - alias_maps = sqlite:/etc/sqlite-aliases.cf + alias_maps = sqlite:/etc/postfix/sqlite-aliases.cf The file /etc/postfix/sqlite-aliases.cf has the same format as the Postfix main.cf file, and can specify the parameters described below. @@ -147,9 +147,9 @@ SQLITE_TABLE(5) SQLITE_TABLE(5) NOTE: DO NOT put quotes around the result format! domain (default: no domain list) - This is a list of domain names, paths to files, or dictionaries. - When specified, only fully qualified search keys with a - *non-empty* localpart and a matching domain are eligible for + This is a list of domain names, paths to files, or "type:table" + databases. When specified, only fully qualified search keys with + a *non-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly reduce the query load on the SQLite server. diff --git a/postfix/html/tlsproxy.8.html b/postfix/html/tlsproxy.8.html index 6f5ad53ef..b78bed370 100644 --- a/postfix/html/tlsproxy.8.html +++ b/postfix/html/tlsproxy.8.html @@ -103,7 +103,7 @@ TLSPROXY(8) TLSPROXY(8) Available in Postfix version 2.9 and later: - tls_legacy_public_key_fingerprints (no) + tls_legacy_public_key_fingerprints (no) A temporary migration aid for sites that use certificate pub- lic-key fingerprints with Postfix 2.9.0..2.9.5, which use an incorrect algorithm. @@ -355,6 +355,13 @@ TLSPROXY(8) TLSPROXY(8) Mandatory TLS: announce STARTTLS support to remote SMTP clients, and require that clients use TLS encryption. + tlsproxy_client_use_tls ($smtp_use_tls) + Opportunistic mode: use TLS when a remote server announces TLS + support. + + tlsproxy_client_enforce_tls ($smtp_enforce_tls) + Enforcement mode: require that SMTP servers use TLS encryption. + RESOURCE CONTROLS tlsproxy_watchdog_timeout (10s) How much time a tlsproxy(8) process may take to process local or diff --git a/postfix/html/trace.8.html b/postfix/html/trace.8.html index 5421e49e7..a2768453d 100644 --- a/postfix/html/trace.8.html +++ b/postfix/html/trace.8.html @@ -162,7 +162,7 @@ BOUNCE(8) BOUNCE(8) Available in Postfix 3.7 and later: - header_from_format (standard) + header_from_format (standard) The format of the Postfix-generated From: header. FILES diff --git a/postfix/html/transport.5.html b/postfix/html/transport.5.html index 25fb602b5..b38dba51d 100644 --- a/postfix/html/transport.5.html +++ b/postfix/html/transport.5.html @@ -61,8 +61,8 @@ TRANSPORT(5) TRANSPORT(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those case, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those case, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". CASE FOLDING diff --git a/postfix/html/trivial-rewrite.8.html b/postfix/html/trivial-rewrite.8.html index 54cb125bb..60638567c 100644 --- a/postfix/html/trivial-rewrite.8.html +++ b/postfix/html/trivial-rewrite.8.html @@ -56,13 +56,13 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) Resolve the address for address verification purposes. SERVER PROCESS MANAGEMENT - The trivial-rewrite(8) servers run under control by the Postfix master - server. Each server can handle multiple simultaneous connections. - When all servers are busy while a client connects, the master creates a - new server process, provided that the trivial-rewrite server process - limit is not exceeded. Each trivial-rewrite server terminates after - serving at least $max_use clients of after $max_idle seconds of idle - time. + The trivial-rewrite(8) servers run under control by the Postfix mas- + ter(8) server. Each server can handle multiple simultaneous connec- + tions. When all servers are busy while a client connects, the master + creates a new server process, provided that the trivial-rewrite server + process limit is not exceeded. Each trivial-rewrite server terminates + after serving at least $max_use clients of after $max_idle seconds of + idle time. STANDARDS None. The command does not interact with the outside world. diff --git a/postfix/html/virtual.5.html b/postfix/html/virtual.5.html index b2f42bab9..27b139285 100644 --- a/postfix/html/virtual.5.html +++ b/postfix/html/virtual.5.html @@ -50,8 +50,8 @@ VIRTUAL(5) VIRTUAL(5) Alternatively, the table can be provided as a regular-expression map where patterns are given as regular expressions, or lookups can be - directed to TCP-based server. In those case, the lookups are done in a - slightly different way as described below under "REGULAR EXPRESSION + directed to a TCP-based server. In those case, the lookups are done in + a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". CASE FOLDING @@ -92,7 +92,7 @@ VIRTUAL(5) VIRTUAL(5) $myorigin, when site is listed in $mydestination, or when it is listed in $inet_interfaces or $proxy_interfaces. - This functionality overlaps with functionality of the local + This functionality overlaps with the functionality of the local aliases(5) database. The difference is that virtual(5) mapping can be applied to non-local addresses. @@ -140,8 +140,8 @@ VIRTUAL(5) VIRTUAL(5) user@domain, user+foo, user, and @domain. The propagate_unmatched_extensions parameter controls whether an - unmatched address extension (+foo) is propagated to the result of table - lookup. + unmatched address extension (+foo) is propagated to the result of a ta- + ble lookup. VIRTUAL ALIAS DOMAINS Besides virtual aliases, the virtual alias table can also be used to @@ -208,8 +208,8 @@ VIRTUAL(5) VIRTUAL(5) TCP-BASED TABLES This section describes how the table lookups change when lookups are directed to a TCP-based server. For a description of the TCP - client/server lookup protocol, see tcp_table(5). This feature is not - available up to and including Postfix version 2.4. + client/server lookup protocol, see tcp_table(5). This feature is + available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, user@domain mail addresses are not broken up into their user and @domain con- @@ -227,11 +227,11 @@ VIRTUAL(5) VIRTUAL(5) virtual_alias_maps ($virtual_maps) Optional lookup tables that alias specific mail addresses or - domains to other local or remote address. + domains to other local or remote addresses. virtual_alias_domains ($virtual_alias_maps) - Postfix is final destination for the specified list of virtual - alias domains, that is, domains for which all addresses are + Postfix is the final destination for the specified list of vir- + tual alias domains, that is, domains for which all addresses are aliased to addresses in other local or remote domains. propagate_unmatched_extensions (canonical, virtual) diff --git a/postfix/html/virtual.8.html b/postfix/html/virtual.8.html index 6de6dd6d7..c02c3624b 100644 --- a/postfix/html/virtual.8.html +++ b/postfix/html/virtual.8.html @@ -122,8 +122,8 @@ VIRTUAL(8) VIRTUAL(8) DIAGNOSTICS Mail bounces when the recipient has no mailbox or when the recipient is - over disk quota. In all other cases, mail for an existing recipient is - deferred and a warning is logged. + over disk quota. In all other problem cases, mail for an existing + recipient is deferred and a warning is logged. Problems and transactions are logged to syslogd(8) or postlogd(8). Corrupted message files are marked so that the queue manager can move @@ -173,9 +173,9 @@ VIRTUAL(8) VIRTUAL(8) Available in Postfix version 2.0 and later: virtual_mailbox_domains ($virtual_mailbox_maps) - Postfix is final destination for the specified list of domains; - mail is delivered via the $virtual_transport mail delivery - transport. + Postfix is the final destination for the specified list of + domains; mail is delivered via the $virtual_transport mail + delivery transport. virtual_transport (virtual) The default mail delivery transport and next-hop destination for diff --git a/postfix/makedefs b/postfix/makedefs index 294454adf..2839f3a8a 100644 --- a/postfix/makedefs +++ b/postfix/makedefs @@ -184,6 +184,28 @@ # New York, NY 10011, USA #-- +# By now all shells must have functions. + +error() { + # Alas, tput(1) is not portable so we can't use visual effects. + echo "ATTENTION:" 1>&2; + echo "ATTENTION:" $* 1>&2; + echo "ATTENTION:" 1>&2; + exit 1 +} + +# First, deal with unsupported usage. +case "$LD_LIBRARY_PATH" in +?*) error "Not supported: building with LD_LIBRARY_PATH";; +esac + +env | grep '^AUXLIBS_' | while read line +do + case "$line" in +*-lpostfix-*) error "Not supported: linking plugins with -lpostfix-*: $line";; + esac +done || exit 1 + # Emit system-dependent Makefile macro definitions to standard output. echo "#----------------------------------------------------------------" @@ -205,16 +227,6 @@ ARFL=rv # Ugly function to make our error message more visible among the # garbage that is output by some versions of make(1). -# By now all shells must have functions. - -error() { - # Alas, tput(1) is not portable so we can't use visual effects. - echo "ATTENTION:" 1>&2; - echo "ATTENTION:" $* 1>&2; - echo "ATTENTION:" 1>&2; - exit 1 -} - case $# in # Officially supported usage. 0) SYSTEM=`(uname -s) 2>/dev/null` @@ -472,10 +484,6 @@ case "$SYSTEM.$RELEASE" in CCARGS="$CCARGS -Dstrcasecmp=fix_strcasecmp \ -Dstrncasecmp=fix_strncasecmp" STRCASE="strcasecmp.o" - # Avoid common types of braindamage - case "$LD_LIBRARY_PATH" in - ?*) error "Don't set LD_LIBRARY_PATH";; - esac case "${CC}" in *" "*) ;; *ucb*) error "Don't use /usr/ucb/cc or ucblib";; @@ -974,7 +982,7 @@ CCARGS="-I. -I../../include $CCARGS" # "make makefiles name=value...". The replacement depends on usage # context: the expanded release version in actual pathnames, or the # unexpanded ${mail_version} in configuration parameter values (both -# main.cf and and built-in defaults). +# main.cf and built-in defaults). # Helper function to determine DEF_MAIL_VERSION. diff --git a/postfix/man/man1/postalias.1 b/postfix/man/man1/postalias.1 index 08ea13ddf..4c7f02bd1 100644 --- a/postfix/man/man1/postalias.1 +++ b/postfix/man/man1/postalias.1 @@ -18,7 +18,7 @@ Postfix alias database maintenance The \fBpostalias\fR(1) command creates or queries one or more Postfix alias databases, or updates an existing one. The input and output file formats are expected to be compatible with Sendmail version 8, -and are expected to be suitable for the use as NIS alias maps. +and are expected to be suitable for use as NIS alias maps. If the result files do not exist they will be created with the same group and other read permissions as their source file. @@ -202,12 +202,12 @@ hash or btree tables. The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1) and \fBpostmap\fR(1) commands. .IP "\fBimport_environment (see 'postconf -d' output)\fR" -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. .IP "\fBsmtputf8_enable (yes)\fR" Enable preliminary SMTPUTF8 support for the protocols described -in RFC 6531..6533. +in RFC 6531, RFC 6532, and RFC 6533. .IP "\fBsyslog_facility (mail)\fR" The syslog facility of Postfix logging. .IP "\fBsyslog_name (see 'postconf -d' output)\fR" diff --git a/postfix/man/man1/postconf.1 b/postfix/man/man1/postconf.1 index 1fb951fdc..e4224299e 100644 --- a/postfix/man/man1/postconf.1 +++ b/postfix/man/man1/postconf.1 @@ -171,7 +171,7 @@ With \fB\-F\fR, edit the \fBmaster.cf\fR configuration file, and replace one or more service fields with new values as specified with "\fIservice/type/field=value\fR" on the \fBpostconf\fR(1) command line. Currently, the "command" -field contains the command name and command arguments. this +field contains the command name and command arguments. This may change in the near future, so that the "command" field contains only the command name, and a new "arguments" pseudofield contains the command arguments. @@ -188,7 +188,8 @@ characters and whitespace on the \fBpostconf\fR(1) command line. The \fB\-e\fR option is no longer needed with Postfix version -2.8 and later. +2.8 and later, as it is assumed whenever a value is specified +(empty or non\-empty). .IP \fB\-f\fR Fold long lines when printing \fBmain.cf\fR or \fBmaster.cf\fR configuration file entries, for human readability. @@ -208,8 +209,8 @@ fields. This feature is available with Postfix 2.11 and later. .IP \fB\-h\fR -Show parameter or attribute values without the "\fIname\fR -= " label that normally precedes the value. +Show parameter or attribute values without the "\fIname\fR = " +label that normally precedes the value. .IP \fB\-H\fR Show parameter or attribute names without the " = \fIvalue\fR" that normally follows the name. @@ -427,12 +428,17 @@ to fold long lines for human readability (Postfix 2.9 and later). To show settings that differ from built\-in defaults only, use the following bash syntax: .nf - comm \-23 <(postconf \-n) <(postconf \-d) + LANG=C comm \-23 <(postconf \-n) <(postconf \-d) .fi Replace "\-23" with "\-12" to show settings that duplicate built\-in defaults. .IP "\fB\-o \fIname=value\fR" -Override \fBmain.cf\fR parameter settings. +Override \fBmain.cf\fR parameter settings. This lets you see +the effect changing a parameter would have when it is used in +other configuration parameters, e.g.: +.nf + postconf \-x \-o stress=yes +.fi This feature is available with Postfix 2.10 and later. .IP \fB\-p\fR diff --git a/postfix/man/man1/postfix.1 b/postfix/man/man1/postfix.1 index 5f52e69fd..21681de36 100644 --- a/postfix/man/man1/postfix.1 +++ b/postfix/man/man1/postfix.1 @@ -222,7 +222,7 @@ The location of the OpenSSL command line program \fBopenssl\fR(1). .PP Other configuration parameters: .IP "\fBimport_environment (see 'postconf -d' output)\fR" -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. .IP "\fBsyslog_facility (mail)\fR" @@ -294,6 +294,7 @@ Commands: postalias(1), create/update/query alias database postcat(1), examine Postfix queue file postconf(1), Postfix configuration utility +postdrop(1), Postfix mail posting utility postfix(1), Postfix control program postfix\-tls(1), Postfix TLS management postkick(1), trigger Postfix daemon diff --git a/postfix/man/man1/postmap.1 b/postfix/man/man1/postmap.1 index d086d6ca2..d2551e54e 100644 --- a/postfix/man/man1/postmap.1 +++ b/postfix/man/man1/postmap.1 @@ -46,7 +46,10 @@ starts with whitespace continues a logical line. .PP The \fIkey\fR and \fIvalue\fR are processed as is, except that surrounding white space is stripped off. Whitespace in lookup -keys is supported as of Postfix 3.2. +keys is supported in Postfix 3.2 and later, by surrounding the +key with double quote characters `"'. Within the double quotes, +double quote `"' and backslash `\\' characters can be included +by quoting them with a preceding backslash. When the \fB\-F\fR option is given, the \fIvalue\fR must specify one or more filenames separated by comma and/or @@ -88,8 +91,8 @@ generates no body\-style lookup keys for attachment MIME headers and for attached message/* headers. .sp NOTE: with "smtputf8_enable = yes", the \fB\-b\fR option -option disables UTF\-8 syntax checks on query keys and -lookup results. Specify the \fB\-U\fR option to force UTF\-8 +disables UTF\-8 syntax checks on query keys and lookup +results. Specify the \fB\-U\fR option to force UTF\-8 syntax checks anyway. .sp This feature is available in Postfix version 2.6 and later. @@ -287,12 +290,12 @@ configuration files. The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1) and \fBpostmap\fR(1) commands. .IP "\fBimport_environment (see 'postconf -d' output)\fR" -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. .IP "\fBsmtputf8_enable (yes)\fR" Enable preliminary SMTPUTF8 support for the protocols described -in RFC 6531..6533. +in RFC 6531, RFC 6532, and RFC 6533. .IP "\fBsyslog_facility (mail)\fR" The syslog facility of Postfix logging. .IP "\fBsyslog_name (see 'postconf -d' output)\fR" diff --git a/postfix/man/man1/postmulti.1 b/postfix/man/man1/postmulti.1 index ad04dea1e..6db035ea1 100644 --- a/postfix/man/man1/postmulti.1 +++ b/postfix/man/man1/postmulti.1 @@ -220,7 +220,7 @@ instance a short name that is used to construct default values for the private directories of the new instance. The "\fB\-G \fIgroup\fR" option may be specified to assign the instance to a group, otherwise, the new instance is not a -member of any groups. +member of any group. .sp The new instance main.cf is the stock main.cf with the parameters that specify the locations of shared files cloned @@ -245,9 +245,9 @@ For example: .RE .IP If any of these pathnames is not supplied, the program -attempts to generate the pathname by taking the corresponding -primary instance pathname, and by replacing the last pathname -component by the value of the \fB\-I\fR option. +attempts to generate the missing pathname(s) by taking the +corresponding primary instance pathname, and replacing the +last pathname component by the value of the \fB\-I\fR option. .sp If the instance configuration directory already exists, and contains both a main.cf and master.cf file, \fBcreate\fR @@ -342,7 +342,7 @@ configuration files. .IP "\fBdaemon_directory (see 'postconf -d' output)\fR" The directory with Postfix support programs and daemon programs. .IP "\fBimport_environment (see 'postconf -d' output)\fR" -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. .IP "\fBmulti_instance_directories (empty)\fR" diff --git a/postfix/man/man1/posttls-finger.1 b/postfix/man/man1/posttls-finger.1 index 699ff8d53..54b72aba2 100644 --- a/postfix/man/man1/posttls-finger.1 +++ b/postfix/man/man1/posttls-finger.1 @@ -18,7 +18,7 @@ Probe the TLS properties of an ESMTP or LMTP server. and reports TLS\-related information about the server. With SMTP, the destination is a domainname; with LMTP it is either a domainname prefixed with \fBinet:\fR or a pathname prefixed with \fBunix:\fR. If -Postfix is built without TLS support, the resulting posttls\-finger +Postfix is built without TLS support, the resulting \fBposttls\-finger\fR(1) program has very limited functionality, and only the \fB\-a\fR, \fB\-c\fR, \fB\-h\fR, \fB\-o\fR, \fB\-S\fR, \fB\-t\fR, \fB\-T\fR and \fB\-v\fR options are available. @@ -84,9 +84,9 @@ SMTP. The default TCP port for LMTP is 24. Arguments: .IP "\fB\-a\fR \fIfamily\fR (default: \fBany\fR)" Address family preference: \fBipv4\fR, \fBipv6\fR or \fBany\fR. When -using \fBany\fR, posttls\-finger will randomly select one of the two as -the more preferred, and exhaust all MX preferences for the first -address family before trying any addresses for the other. +using \fBany\fR, \fBposttls\-finger\fR(1) will randomly select one of +the two as the more preferred, and exhaust all MX preferences for the +first address family before trying any addresses for the other. .IP "\fB\-A\fR \fItrust\-anchor.pem\fR (default: none)" A list of PEM trust\-anchor files that overrides CAfile and CApath trust chain verification. Specify the option multiple times to @@ -107,7 +107,7 @@ The message digest algorithm to use for reporting remote SMTP server fingerprints and matching against user provided certificate fingerprints (with DANE TLSA records the algorithm is specified in the DNS). In Postfix versions prior to 3.6, the default value -was "sha1". +was "md5". .IP "\fB\-f\fR" Lookup the associated DANE TLSA RRset even when a hostname is not an alias and its address records lie in an unsigned zone. See @@ -117,8 +117,8 @@ The PEM formatted CAfile for remote SMTP server certificate verification. By default no CAfile is used and no public CAs are trusted. .IP "\fB\-g \fIgrade\fR (default: medium)" -The minimum TLS cipher grade used by posttls\-finger. See -smtp_tls_mandatory_ciphers for details. +The minimum TLS cipher grade used by \fBposttls\-finger\fR(1). +See smtp_tls_mandatory_ciphers for details. .IP "\fB\-h \fIhost_lookup\fR (default: \fBdns\fR)" The hostname lookup methods used for the connection. See the documentation of smtp_host_lookup for syntax and semantics. @@ -148,7 +148,7 @@ TLSA records are found, or all the records found are unusable, the security level allows you to test certificate or public\-key fingerprint matches before you deploy them in the policy table. .IP -Note, since \fBposttls\-finger\fR does not actually deliver any email, +Note, since \fBposttls\-finger\fR(1) does not actually deliver any email, the \fBnone\fR, \fBmay\fR and \fBencrypt\fR security levels are not very useful. Since \fBmay\fR and \fBencrypt\fR don't require peer certificates, they will often negotiate anonymous TLS ciphersuites, @@ -224,14 +224,14 @@ response; with these servers there will never be more than The TLS policy for MX hosts with "secure" TLSA records when the nexthop destination security level is \fBdane\fR, but the MX record was found via an "insecure" MX lookup. See the main.cf -documentation for smtp_tls_insecure_mx_policy for details. +documentation for smtp_tls_dane_insecure_mx_policy for details. .IP "\fB\-o \fIname=value\fR" Specify zero or more times to override the value of the main.cf parameter \fIname\fR with \fIvalue\fR. Possible use\-cases include overriding the values of TLS library parameters, or "myhostname" to configure the SMTP EHLO name sent to the remote server. .IP "\fB\-p \fIprotocols\fR (default: >=TLSv1)" -TLS protocols that posttls\-finger will exclude or include. See +TLS protocols that \fBposttls\-finger\fR(1) will exclude or include. See smtp_tls_mandatory_protocols for details. .IP "\fB\-P \fICApath/\fR (default: none)" The OpenSSL CApath/ directory (indexed via c_rehash(1)) for remote @@ -263,10 +263,10 @@ The SMTP/LMTP command timeout for EHLO/LHLO, STARTTLS and QUIT. Enable verbose Postfix logging. Specify more than once to increase the level of verbose logging. .IP "\fB\-w\fR" -Enable outgoing TLS wrapper mode, or SMTPS support. This is typically -provided on port 465 by servers that are compatible with the ad\-hoc -SMTP in SSL protocol, rather than the standard STARTTLS protocol. -The destination \fIdomain\fR:\fIport\fR should of course provide such +Enable outgoing TLS wrapper mode, or SUBMISSIONS/SMTPS support. This +is typically provided on port 465 by servers that are compatible with +the SMTP\-in\-SSL protocol, rather than the STARTTLS protocol. +The destination \fIdomain\fR:\fIport\fR must of course provide such a service. .IP "\fB\-X\fR" Enable \fBtlsproxy\fR(8) mode. This is an unsupported mode, diff --git a/postfix/man/man1/sendmail.1 b/postfix/man/man1/sendmail.1 index 3722a1787..22affe637 100644 --- a/postfix/man/man1/sendmail.1 +++ b/postfix/man/man1/sendmail.1 @@ -87,7 +87,7 @@ Initialize alias database. See the \fBnewaliases\fR command above. .IP \fB\-bl\fR Go into daemon mode. To accept only local connections as -with Sendmail\'s \fB\-bl\fR option, specify "\fBinet_interfaces +with Sendmail's \fB\-bl\fR option, specify "\fBinet_interfaces = loopback\fR" in the Postfix \fBmain.cf\fR configuration file. .IP \fB\-bm\fR @@ -146,7 +146,7 @@ parameter instead. Initialize alias database. See the \fBnewaliases\fR command above. .IP "\fB\-i\fR" -When reading a message from standard input, don\'t treat a line +When reading a message from standard input, don't treat a line with only a \fB.\fR character as the end of input. .IP "\fB\-L \fIlabel\fR (ignored)" The logging label. Use the \fBsyslog_name\fR configuration @@ -176,7 +176,7 @@ configuration parameter in \fBmain.cf\fR instead. To send 8\-bit or binary content, use an appropriate MIME encapsulation and specify the appropriate \fB\-B\fR command\-line option. .IP "\fB\-oi\fR" -When reading a message from standard input, don\'t treat a line +When reading a message from standard input, don't treat a line with only a \fB.\fR character as the end of input. .IP "\fB\-om\fR (ignored)" The sender is never eliminated from alias etc. expansions. @@ -431,7 +431,7 @@ and \fBpostmap\fR(1) commands. The time after which the sender receives a copy of the message headers of mail that is still queued. .IP "\fBimport_environment (see 'postconf -d' output)\fR" -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. .IP "\fBmail_owner (postfix)\fR" diff --git a/postfix/man/man1/smtp-sink.1 b/postfix/man/man1/smtp-sink.1 index 32cecb74b..17bb89c05 100644 --- a/postfix/man/man1/smtp-sink.1 +++ b/postfix/man/man1/smtp-sink.1 @@ -197,7 +197,7 @@ specified in numeric or symbolic form. .IP \fBunix:\fR\fIpathname\fR Listen on the UNIX\-domain socket at \fIpathname\fR. .IP \fIbacklog\fR -The maximum length the queue of pending connections, +The maximum length of the queue of pending connections, as defined by the \fBlisten\fR(2) system call. .SH "DUMP FILE FORMAT" .na diff --git a/postfix/man/man5/access.5 b/postfix/man/man5/access.5 index d1f7f92cb..07725be38 100644 --- a/postfix/man/man5/access.5 +++ b/postfix/man/man5/access.5 @@ -35,7 +35,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those cases, the lookups +can be directed to a TCP\-based server. In those cases, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". .SH "CASE FOLDING" @@ -219,7 +219,7 @@ Prior to Postfix 2.6, the SMTP reply code is 450. .sp This feature is available in Postfix 2.1 and later. .IP "\fBDEFER_IF_PERMIT \fIoptional text...\fR -Defer the request if some later restriction would result in a +Defer the request if some later restriction would result in an explicit or implicit PERMIT action. Reply with "\fB$access_map_defer_code 4.7.1 \fI optional text...\fR" when the diff --git a/postfix/man/man5/canonical.5 b/postfix/man/man5/canonical.5 index f467ad42c..e9876643b 100644 --- a/postfix/man/man5/canonical.5 +++ b/postfix/man/man5/canonical.5 @@ -33,7 +33,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those cases, the lookups +can be directed to a TCP\-based server. In those cases, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". @@ -250,7 +250,7 @@ Optional list of domains whose subdomain structure will be stripped off in email addresses. .IP "\fBmasquerade_exceptions (empty)\fR" Optional list of user names that are not subjected to address -masquerading, even when their address matches $masquerade_domains. +masquerading, even when their addresses match $masquerade_domains. .IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" The list of domains that are delivered via the $local_transport mail delivery transport. diff --git a/postfix/man/man5/cidr_table.5 b/postfix/man/man5/cidr_table.5 index 2e182ee5b..31ddfd469 100644 --- a/postfix/man/man5/cidr_table.5 +++ b/postfix/man/man5/cidr_table.5 @@ -138,6 +138,10 @@ in\-memory file: .fi Postfix parses the result as if it is a file in /etc/postfix. + +Note: if a rule contains \fB$\fR, specify \fB$$\fR to keep +Postfix from trying to do \fI$name\fR expansion as it +evaluates a parameter value. .SH "EXAMPLE SMTPD ACCESS MAP" .na .nf diff --git a/postfix/man/man5/generic.5 b/postfix/man/man5/generic.5 index 7fc08623c..6e891eb84 100644 --- a/postfix/man/man5/generic.5 +++ b/postfix/man/man5/generic.5 @@ -47,7 +47,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those case, the lookups +can be directed to a TCP\-based server. In those cases, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". .SH "CASE FOLDING" @@ -154,7 +154,7 @@ pattern can be interpolated as \fB$1\fR, \fB$2\fR and so on. This section describes how the table lookups change when lookups are directed to a TCP\-based server. For a description of the TCP client/server lookup protocol, see \fBtcp_table\fR(5). -This feature is not available up to and including Postfix version 2.4. +This feature is available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, \fIuser@domain\fR mail addresses are not broken up into their @@ -204,29 +204,32 @@ The table format does not understand quoting conventions. The following \fBmain.cf\fR parameters are especially relevant. The text below provides only a parameter summary. See \fBpostconf\fR(5) for more details including examples. -.IP \fBsmtp_generic_maps\fR -Address mapping lookup table for envelope and header sender -and recipient addresses while delivering mail via SMTP. -.IP \fBpropagate_unmatched_extensions\fR -A list of address rewriting or forwarding mechanisms that propagate -an address extension from the original address to the result. -Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR, -\fBforward\fR, \fBinclude\fR, or \fBgeneric\fR. +.IP "\fBsmtp_generic_maps (empty)\fR" +Optional lookup tables that perform address rewriting in the +Postfix SMTP client, typically to transform a locally valid address into +a globally valid address when sending mail across the Internet. +.IP "\fBpropagate_unmatched_extensions (canonical, virtual)\fR" +What address lookup tables copy an address extension from the lookup +key to the lookup result. .PP Other parameters of interest: -.IP \fBinet_interfaces\fR -The network interface addresses that this system receives mail on. -You need to stop and start Postfix when this parameter changes. -.IP \fBproxy_interfaces\fR -Other interfaces that this machine receives mail on by way of a -proxy agent or network address translator. -.IP \fBmydestination\fR -List of domains that this mail system considers local. -.IP \fBmyorigin\fR -The domain that is appended to locally\-posted mail. -.IP \fBowner_request_special\fR -Give special treatment to \fBowner\-\fIxxx\fR and \fIxxx\fB\-request\fR -addresses. +.IP "\fBinet_interfaces (all)\fR" +The network interface addresses that this mail system receives +mail on. +.IP "\fBproxy_interfaces (empty)\fR" +The network interface addresses that this mail system receives mail +on by way of a proxy or network address translation unit. +.IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" +The list of domains that are delivered via the $local_transport +mail delivery transport. +.IP "\fBmyorigin ($myhostname)\fR" +The domain name that locally\-posted mail appears to come +from, and that locally posted mail is delivered to. +.IP "\fBowner_request_special (yes)\fR" +Enable special treatment for owner\-\fIlistname\fR entries in the +\fBaliases\fR(5) file, and don't split owner\-\fIlistname\fR and +\fIlistname\fR\-request address localparts when the recipient_delimiter +is set to "\-". .SH "SEE ALSO" .na .nf diff --git a/postfix/man/man5/ldap_table.5 b/postfix/man/man5/ldap_table.5 index a3e95e817..464f51795 100644 --- a/postfix/man/man5/ldap_table.5 +++ b/postfix/man/man5/ldap_table.5 @@ -156,9 +156,9 @@ Otherwise, the search is suppressed and returns no results. For the \fBsearch_base\fR parameter, the upper\-case equivalents of the above expansions behave identically to their lower\-case counter\-parts. With the \fBresult_format\fR parameter (previously -called \fBresult_filter\fR see the COMPATIBILITY section and below), -they expand to the corresponding components of input key rather -than the result value. +called \fBresult_filter\fR see the OTHER OBSOLETE FEATURES section +and below), they expand to the corresponding components of input +key rather than the result value. .IP "\fB%[1\-9]\fR" The patterns %1, %2, ... %9 are replaced by the corresponding most significant component of the input key's domain. If the @@ -199,9 +199,9 @@ Otherwise, the search is suppressed and returns no results. The upper\-case equivalents of the above expansions behave in the \fBquery_filter\fR parameter identically to their lower\-case counter\-parts. With the \fBresult_format\fR parameter (previously -called \fBresult_filter\fR see the COMPATIBILITY section and below), -they expand to the corresponding components of input key rather -than the result value. +called \fBresult_filter\fR see the OTHER OBSOLETE FEATURES section +and below), they expand to the corresponding components of input +key rather than the result value. .IP The above %S, %U and %D expansions are available with Postfix 2.2 and later. @@ -278,7 +278,7 @@ with old configuration files. NOTE: DO NOT put quotes around the result format! .IP "\fBdomain (default: no domain list)\fR" This is a list of domain names, paths to files, or -dictionaries. When specified, only fully qualified search +"type:table" databases. When specified, only fully qualified search keys with a *non\-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly diff --git a/postfix/man/man5/master.5 b/postfix/man/man5/master.5 index d17b1797c..48fd4fd45 100644 --- a/postfix/man/man5/master.5 +++ b/postfix/man/man5/master.5 @@ -135,7 +135,7 @@ main.cf file). .sp The \fBlocal\fR(8), \fBpipe\fR(8), \fBspawn\fR(8), and \fBvirtual\fR(8) daemons require privileges. -.IP "\fBChroot (default: Postfix >= 3.0: n, Postfix <3.0: y)\fR" +.IP "\fBChroot (default: Postfix >= 3.0: n, Postfix < 3.0: y)\fR" Whether or not the service runs chrooted to the mail queue directory (pathname is controlled by the \fBqueue_directory\fR configuration variable in the main.cf file). diff --git a/postfix/man/man5/mysql_table.5 b/postfix/man/man5/mysql_table.5 index 64753182c..6c62b210a 100644 --- a/postfix/man/man5/mysql_table.5 +++ b/postfix/man/man5/mysql_table.5 @@ -22,7 +22,7 @@ Alternatively, lookup tables can be specified as MySQL databases. In order to use MySQL lookups, define a MySQL source as a lookup table in main.cf, for example: .nf - alias_maps = mysql:/etc/mysql\-aliases.cf + alias_maps = mysql:/etc/postfix/mysql\-aliases.cf .fi The file /etc/postfix/mysql\-aliases.cf has the same format as @@ -56,8 +56,9 @@ return the key itself or a constant value. .IP "\fBhosts\fR" The hosts that Postfix will try to connect to and query from. Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP -connections (default). Example: +connections (default). Examples: .nf + hosts = inet:host1.some.domain inet:host2.some.domain:port hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name .fi @@ -200,10 +201,10 @@ This parameter is available with Postfix 2.2 and later. NOTE: DO NOT put quotes around the result format! .IP "\fBdomain (default: no domain list)\fR" -This is a list of domain names, paths to files, or -dictionaries. When specified, only fully qualified search -keys with a *non\-empty* localpart and a matching domain -are eligible for lookup: 'user' lookups, bare domain lookups +This is a list of domain names, paths to files, or "type:table" +databases. When specified, only fully qualified search keys +with a *non\-empty* localpart and a matching domain are +eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly reduce the query load on the MySQL server. .nf diff --git a/postfix/man/man5/pgsql_table.5 b/postfix/man/man5/pgsql_table.5 index a55f2db31..150115245 100644 --- a/postfix/man/man5/pgsql_table.5 +++ b/postfix/man/man5/pgsql_table.5 @@ -22,7 +22,7 @@ Alternatively, lookup tables can be specified as PostgreSQL databases. In order to use PostgreSQL lookups, define a PostgreSQL source as a lookup table in main.cf, for example: .nf - alias_maps = pgsql:/etc/pgsql\-aliases.cf + alias_maps = pgsql:/etc/postfix/pgsql\-aliases.cf .fi The file /etc/postfix/pgsql\-aliases.cf has the same format as @@ -63,6 +63,7 @@ are accepted and ignored for backwards compatibility. Examples: .nf hosts = postgresql://username@example.com/tablename?sslmode=require + hosts = inet:host1.some.domain inet:host2.some.domain:port hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name .fi @@ -140,7 +141,7 @@ in prior releases the precedence was, from highest to lowest, \fBselect_function\fR, \fBquery\fR, \fBselect_field\fR, ... With Postfix 2.2 the \fBquery\fR parameter has highest precedence, -see COMPATIBILITY above. +see OBSOLETE QUERY INTERFACES below. NOTE: DO NOT put quotes around the \fBquery\fR parameter. .IP "\fBresult_format (default: \fB%s\fR)\fR" @@ -186,8 +187,8 @@ This parameter is available with Postfix 2.2 and later. NOTE: DO NOT put quotes around the result format! .IP "\fBdomain (default: no domain list)\fR" -This is a list of domain names, paths to files, or -dictionaries. When specified, only fully qualified search +This is a list of domain names, paths to files, or "type:table" +databases. When specified, only fully qualified search keys with a *non\-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly diff --git a/postfix/man/man5/postconf.5 b/postfix/man/man5/postconf.5 index 3c7022253..cf04f37ef 100644 --- a/postfix/man/man5/postconf.5 +++ b/postfix/man/man5/postconf.5 @@ -113,8 +113,10 @@ logged as "partial" when the daemon terminates early after "\fBpostfix reload\fR", "\fBpostfix stop\fR", or no requests for $max_idle seconds. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours). .PP This feature is available in Postfix 2.7. .SH address_verify_default_transport (default: $default_transport) @@ -138,7 +140,7 @@ memory which is lost after "\fBpostfix reload\fR" or "\fBpostfix stop\fR". This is the default with Postfix version 2.6 and earlier. .PP Specify a location in a file system that will not fill up. If the -database becomes corrupted, the world comes to an end. To recover +database becomes corrupted, the world comes to an end. To recover, delete (NOT: truncate) the file and do "\fBpostfix reload\fR". .PP Postfix daemon processes do not use root privileges when opening @@ -171,14 +173,20 @@ This feature is available in Postfix 2.1 and later. The time after which a failed probe expires from the address verification cache. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.1 and later. .SH address_verify_negative_refresh_time (default: 3h) The time after which a failed address verification probe needs to be refreshed. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours). .PP This feature is available in Postfix 2.1 and later. .SH address_verify_pending_request_limit (default: see "postconf \-d" output) @@ -225,14 +233,20 @@ verification request in progress. .PP The default polling delay is 3 seconds. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. .SH address_verify_positive_expire_time (default: 31d) The time after which a successful probe expires from the address verification cache. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.1 and later. .SH address_verify_positive_refresh_time (default: 7d) @@ -240,7 +254,10 @@ The time after which a successful address verification probe needs to be refreshed. The address verification status is not updated when the probe fails (optimistic caching). .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.1 and later. .SH address_verify_relay_transport (default: $relay_transport) @@ -299,11 +316,14 @@ caused such addresses to end up on spammer mailing lists, and has resulted in wasted network and processing resources. .PP To enable time\-dependent probe sender addresses, specify a -non\-zero time value (an integral value plus an optional one\-letter -suffix that specifies the time unit). Specify a value of at least -several hours, to avoid problems with senders that use greylisting. -Avoid nice TTL values, to make the result less predictable. Time -units are: s (seconds), m (minutes), h (hours), d (days), w (weeks). +non\-zero time value. Specify a value of at least several hours, +to avoid problems with senders that use greylisting. Avoid nice +TTL values, to make the result less predictable. +.PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.9 and later. .SH address_verify_service_name (default: verify) @@ -506,16 +526,20 @@ The default interval is relatively short. Because of the high frequency of updates, the \fBanvil\fR(8) server uses volatile memory only. Thus, information is lost whenever the process terminates. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH anvil_status_update_time (default: 600s) How frequently the \fBanvil\fR(8) connection and rate limiting server logs peak usage information. .PP -This feature is available in Postfix 2.2 and later. -.PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). +.PP +This feature is available in Postfix 2.2 and later. .SH append_at_myorigin (default: yes) With locally submitted mail, append the string "@$myorigin" to mail addresses without domain information. With remotely submitted mail, @@ -566,7 +590,9 @@ To get the behavior before Postfix version 2.2, specify How long the \fBpostkick\fR(1) command waits for a request to enter the Postfix daemon process input buffer before giving up. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. @@ -741,7 +767,9 @@ with a temporary error, and the time in the queue has reached the bounce_queue_lifetime limit. By default, this limit is the same as for regular mail. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is d (days). .PP Specify 0 when mail delivery should be tried only once. @@ -772,7 +800,7 @@ message size exceeds a local or remote MTA's message size limit. .SH bounce_template_file (default: empty) Pathname of a configuration file with bounce message templates. These override the built\-in templates of delivery status notification -(DSN) messages for undeliverable mail, for delayed mail, successful +(DSN) messages for undeliverable mail, delayed mail, successful delivery, or delivery verification. The \fBbounce\fR(5) manual page describes how to edit and test template files. .PP @@ -855,7 +883,7 @@ This feature is available in Postfix 2.0 and later. The location of all postfix administrative commands. .SH command_execution_directory (default: empty) The \fBlocal\fR(8) delivery agent working directory for delivery to -external command. Failure to change directory causes the delivery +external commands. Failure to change directory causes the delivery to be deferred. .PP The command_execution_directory value is not subject to Postfix @@ -892,11 +920,17 @@ address (Postfix 2.11 and later), or the system\-wide recipient address extension delimiter (Postfix 2.10 and earlier). .br .IP "\fB${name?value}\fR" +.IP "\fB${name?{value}}\fR (Postfix >= 3.0)" Expands to \fIvalue\fR when \fI$name\fR is non\-empty. .br .IP "\fB${name:value}\fR" +.IP "\fB${name:{value}}\fR (Postfix >= 3.0)" Expands to \fIvalue\fR when \fI$name\fR is empty. .br +.IP "\fB${name?{value1}:{value2}}\fR (Postfix >= 3.0)" +Expands to \fIvalue1\fR when \fI$name\fR is non\-empty, +\fIvalue2\fR otherwise. +.br .br .PP Instead of $name you can also specify ${name} or $(name). @@ -1105,7 +1139,9 @@ This feature is available in Postfix 2.9 and later. How much time a Postfix daemon process may take to handle a request before it is terminated by a built\-in watchdog timer. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH data_directory (default: see "postconf \-d" output) The directory with Postfix\-writable data files (for example: @@ -1193,7 +1229,7 @@ for each message. One message can be preempted by another one when the other message can be delivered using no more delivery slots (i.e., invocations of delivery agents) than the current message counter has accumulated (or will eventually accumulate \- see about -slot loans below). This parameter controls how often is the counter +slot loans below). This parameter controls how often the counter is incremented \- it happens after each default_delivery_slot_cost recipients have been delivered. .PP @@ -1232,8 +1268,8 @@ settings. This parameter speeds up the moment when a message preemption can happen. Instead of waiting until the full amount of delivery slots required is available, the preemption can happen when -transport_delivery_slot_discount percent of the required amount -plus transport_delivery_slot_loan still remains to be accumulated. +\fItransport\fR_delivery_slot_discount percent of the required amount +plus \fItransport\fR_delivery_slot_loan still remains to be accumulated. Note that the full amount will still have to be accumulated before another preemption can take place later. .PP @@ -1380,7 +1416,7 @@ is compatible with earlier Postfix versions. The default maximal number of parallel deliveries to the same destination. This is the default limit for delivery via the \fBlmtp\fR(8), \fBpipe\fR(8), \fBsmtp\fR(8) and \fBvirtual\fR(8) delivery agents. -With per\-destination recipient limit > 1, a destination is a domain, +With a per\-destination recipient limit > 1, a destination is a domain, otherwise it is a recipient. .PP Use \fItransport\fR_destination_concurrency_limit to specify a @@ -1540,7 +1576,7 @@ The default value for the extra per\-transport limit imposed on the number of in\-memory recipients. This extra recipient space is reserved for the cases when the Postfix queue manager's scheduler preempts one message with another and suddenly needs some extra -recipients slots for the chosen message in order to avoid performance +recipient slots for the chosen message in order to avoid performance degradation. .PP Use \fItransport\fR_extra_recipient_limit to specify a @@ -1566,7 +1602,7 @@ transport\-specific override, where \fItransport\fR is the master.cf name of the message delivery transport. .SH default_privs (default: nobody) The default rights used by the \fBlocal\fR(8) delivery agent for delivery -to external file or command. These rights are used when delivery +to an external file or command. These rights are used when delivery is requested from an \fBaliases\fR(5) file that is owned by \fBroot\fR, or when delivery is done on behalf of \fBroot\fR. \fBDO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER\fR. @@ -1640,11 +1676,17 @@ The sender domain or empty string. .IP "\fB$sender_name\fR" The sender address localpart or <> in case of the null address. .br -.IP "\fB${name?text}\fR" -Expands to `text' if $name is not empty. +.IP "\fB${name?value}\fR" +.IP "\fB${name?{value}}\fR (Postfix >= 3.0)" +Expands to \fIvalue\fR when \fI$name\fR is non\-empty. +.br +.IP "\fB${name:value}\fR" +.IP "\fB${name:{value}}\fR (Postfix >= 3.0)" +Expands to \fIvalue\fR when \fI$name\fR is empty. .br -.IP "\fB${name:text}\fR" -Expands to `text' if $name is empty. +.IP "\fB${name?{value1}:{value2}}\fR (Postfix >= 3.0)" +Expands to \fIvalue1\fR when \fI$name\fR is non\-empty, +\fIvalue2\fR otherwise. .br .br .PP @@ -1675,10 +1717,10 @@ Use \fItransport\fR_recipient_limit to specify a transport\-specific override, where \fItransport\fR is the master.cf name of the message delivery transport. .SH default_recipient_refill_delay (default: 5s) -The default per\-transport maximum delay between recipients refills. -When not all message recipients fit into the memory at once, keep loading +The default per\-transport maximum delay between refilling recipients. +When not all message recipients fit into memory at once, keep loading more of them at least once every this many seconds. This is used to -make sure the recipients are refilled in timely manner even when +make sure the recipients are refilled in a timely manner even when $default_recipient_refill_limit is too high for too slow deliveries. .PP Use \fItransport\fR_recipient_refill_delay to specify a @@ -1688,7 +1730,7 @@ name of the message delivery transport. This feature is available in Postfix 2.4 and later. .SH default_recipient_refill_limit (default: 100) The default per\-transport limit on the number of recipients refilled at -once. When not all message recipients fit into the memory at once, keep +once. When not all message recipients fit into memory at once, keep loading more of them in batches of at least this many at a time. See also $default_recipient_refill_delay, which may result in recipient batches lower than this when this limit is too high for too slow deliveries. @@ -1762,8 +1804,9 @@ This feature is available in Postfix 3.1 and later. .SH default_verp_delimiters (default: +=) The two default VERP delimiter characters. These are used when no explicit delimiters are specified with the SMTP XVERP command -or with the "\fBsendmail \-V\fR" command\-line option. Specify -characters that are allowed by the verp_delimiter_filter setting. +or with the "\fBsendmail \-XV\fR" command\-line option (Postfix 2.2 +and earlier: \fB\-V\fR). Specify characters that are allowed by the +verp_delimiter_filter setting. .PP This feature is available in Postfix 1.1 and later. .SH defer_code (default: 450) @@ -1780,7 +1823,7 @@ This feature is available in Postfix 2.0 and later. .SH defer_transports (default: empty) The names of message delivery transports that should not deliver mail unless someone issues "\fBsendmail \-q\fR" or equivalent. Specify zero -or more names of mail delivery transports names that appear in the +or more mail delivery transport names that appear in the first field of master.cf. .PP Example: @@ -1796,7 +1839,7 @@ defer_transports = smtp The maximal number of digits after the decimal point when logging sub\-second delay values. Specify a number in the range 0..6. .PP -Large delay values are rounded off to an integral number seconds; +Large delay values are rounded off to an integral number of seconds; delay values below the delay_logging_resolution_limit are logged as "0", and delay values under 100s are logged with at most two\-digit precision. @@ -1839,7 +1882,9 @@ mailbox file or \fBbounce\fR(8) logfile. The time between attempts to acquire an exclusive lock on a mailbox file or \fBbounce\fR(8) logfile. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH destination_concurrency_feedback_debug (default: no) Make the queue manager's feedback algorithm verbose for performance @@ -2296,8 +2341,10 @@ The maximal number of attempts to fork() a child process. .SH fork_delay (default: 1s) The delay between attempts to fork() a child process. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .SH forward_expansion_filter (default: see "postconf \-d" output) Restrict the characters that the \fBlocal\fR(8) delivery agent allows in $name expansions of $forward_path. Characters outside the @@ -2340,11 +2387,17 @@ address (Postfix 2.11 and later), or the system\-wide recipient address extension delimiter (Postfix 2.10 and earlier). .br .IP "\fB${name?value}\fR" +.IP "\fB${name?{value}}\fR (Postfix >= 3.0)" Expands to \fIvalue\fR when \fI$name\fR is non\-empty. .br .IP "\fB${name:value}\fR" +.IP "\fB${name:{value}}\fR (Postfix >= 3.0)" Expands to \fIvalue\fR when \fI$name\fR is empty. .br +.IP "\fB${name?{value1}:{value2}}\fR (Postfix >= 3.0)" +Expands to \fIvalue1\fR when \fI$name\fR is non\-empty, +\fIvalue2\fR otherwise. +.br .br .PP Instead of $name you can also specify ${name} or $(name). @@ -2412,7 +2465,7 @@ message headers, as specified in the \fBheader_checks\fR(5) manual page. .SH header_from_format (default: standard) The format of the Postfix\-generated \fBFrom:\fR header. This setting affects the appearance of 'full name' information when a -local program such as /bin/mail submits a message without From: +local program such as /bin/mail submits a message without a From: header through the Postfix \fBsendmail\fR(1) command. .PP Specify one of the following: @@ -2491,11 +2544,11 @@ Specify "ignore_mx_lookup_error = yes" to force a DNS A record lookup instead. This violates the SMTP standard and can result in mis\-delivery of mail. .SH import_environment (default: see "postconf \-d" output) -The list of environment parameters that a privileged Postfix +The list of environment variables that a privileged Postfix process will import from a non\-Postfix parent process, or name=value environment overrides. Unprivileged utilities will enforce the name=value overrides, but otherwise will not change their process -environment. Examples of relevant parameters: +environment. Examples of relevant environment variables: .IP "\fBTZ\fR" May be needed for sane time keeping on most System\-V\-ish systems. .br @@ -2512,7 +2565,7 @@ Needed to make "\fBpostfix \-c\fR" work. .PP Specify a list of names and/or name=value pairs, separated by whitespace or comma. Specify "{ name=value }" to protect whitespace -or comma in parameter values (whitespace after the opening "{" and +or comma in environment variable values (whitespace after the opening "{" and before the closing "}" is ignored). The form name=value is supported with Postfix version 2.1 and later; the use of {} is supported with Postfix 3.0 and @@ -2720,7 +2773,9 @@ example, by the Postfix address resolving and rewriting clients. .PP With Postfix 2.4 the default value was reduced from 100s to 5s. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH ipc_timeout (default: 3600s) The time limit for sending or receiving information over an internal @@ -2728,7 +2783,9 @@ communication channel. The purpose is to break out of deadlock situations. If the time limit is exceeded the software aborts with a fatal error. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH ipc_ttl (default: 1000s) The time after which a client closes an active internal communication @@ -2737,7 +2794,9 @@ terminate voluntarily after reaching their client limit. This is used, for example, by the Postfix address resolving and rewriting clients. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. @@ -2836,7 +2895,7 @@ command. .br .PP Most of these limitations have been with the Postfix -a connection cache that is shared among multiple LMTP client +connection cache that is shared among multiple LMTP client programs. .SH lmtp_cname_overrides_servername (default: yes) The LMTP\-specific version of the smtp_cname_overrides_servername @@ -2849,7 +2908,9 @@ zero (use the operating system built\-in time limit). When no connection can be made within the deadline, the LMTP client tries the next address on the mail exchanger list. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP Example: @@ -2893,14 +2954,18 @@ and for receiving the remote LMTP server response. When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_data_init_timeout (default: 120s) The Postfix LMTP client time limit for sending the LMTP DATA command, and for receiving the remote LMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_data_xfer_timeout (default: 180s) The Postfix LMTP client time limit for sending the LMTP message @@ -2908,7 +2973,9 @@ content. When the connection stalls for more than $lmtp_data_xfer_timeout the LMTP client terminates the transfer. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_defer_if_no_mx_address_found (default: no) The LMTP\-specific version of the smtp_defer_if_no_mx_address_found @@ -3014,7 +3081,7 @@ This feature is available in Postfix 2.3 and later. The hostname to send in the LMTP LHLO command. .PP The default value is the machine hostname. Specify a hostname or -[ip.add.re.ss]. +[ip.add.re.ss] or [ip:v6:add:re::ss]. .PP This information can be specified in the main.cf file for all LMTP clients, or it can be specified in the master.cf file for a specific @@ -3047,7 +3114,9 @@ This feature is available in Postfix 2.3 and later. The Postfix LMTP client time limit for sending the MAIL FROM command, and for receiving the remote LMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_mime_header_checks (default: empty) The LMTP\-specific version of the smtp_mime_header_checks @@ -3108,7 +3177,9 @@ This feature is available in Postfix 2.4 and later. The Postfix LMTP client time limit for sending the QUIT command, and for receiving the remote LMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_quote_rfc821_envelope (default: yes) The LMTP\-specific version of the smtp_quote_rfc821_envelope @@ -3124,7 +3195,9 @@ This feature is available in Postfix 2.3 and later. The Postfix LMTP client time limit for sending the RCPT TO command, and for receiving the remote LMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_reply_filter (default: empty) The LMTP\-specific version of the smtp_reply_filter @@ -3138,7 +3211,9 @@ sends RSET in order to finish a recipient address probe, or to verify that a cached connection is still alive. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH lmtp_sasl_auth_cache_name (default: empty) The LMTP\-specific version of the smtp_sasl_auth_cache_name @@ -3190,7 +3265,7 @@ active attacks. .br .IP "\fBnodictionary\fR" Disallow authentication methods that are vulnerable to passive -dictionary attack. +dictionary attacks. .br .IP "\fBnoanonymous\fR" Disallow anonymous logins. @@ -3233,7 +3308,7 @@ Send an XFORWARD command to the remote LMTP server when the LMTP LHLO server response announces XFORWARD support. This allows an \fBlmtp\fR(8) delivery agent, used for content filter message injection, to forward the name, address, protocol and HELO name of the original -client to the content filter and downstream queuing LMTP server. +client to the content filter and downstream LMTP server. Before you change the value to yes, it is best to make sure that your content filter supports this command. .PP @@ -3442,12 +3517,14 @@ and for receiving the remote LMTP server response. In case of problems the client does NOT try the next address on the mail exchanger list. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. .SH local_command_shell (default: empty) -Optional shell program for \fBlocal\fR(8) delivery to non\-Postfix command. +Optional shell program for \fBlocal\fR(8) delivery to non\-Postfix commands. By default, non\-Postfix commands are executed directly; commands are given to the default shell (typically, /bin/sh) only when they contain shell meta characters or shell built\-in commands. @@ -3648,7 +3725,7 @@ Examples: # send mail as themselves. Use "uid:" followed by the numerical # UID when the UID has no entry in the UNIX password file. local_login_sender_maps = - inline:{ { root = *}, { postfix = * } }, + inline:{ { root = * }, { postfix = * } }, pcre:/etc/postfix/login_senders .fi .ad @@ -3659,7 +3736,7 @@ Examples: .ft C /etc/postfix/login_senders: # Allow both the bare username and the user@domain forms. - /(.+)/ $1 $1@example.com/ + /(.+)/ $1 $1@example.com .fi .ad .ft R @@ -3765,10 +3842,16 @@ The recipient's login shell. The recipient username. .br .IP "\fB${name?value}\fR" -Expands to \fIvalue\fR when \fI$name\fR has a non\-empty value. +.IP "\fB${name?{value}}\fR (Postfix >= 3.0)" +Expands to \fIvalue\fR when \fI$name\fR is non\-empty. .br .IP "\fB${name:value}\fR" -Expands to \fIvalue\fR when \fI$name\fR has an empty value. +.IP "\fB${name:{value}}\fR (Postfix >= 3.0)" +Expands to \fIvalue\fR when \fI$name\fR is empty. +.br +.IP "\fB${name?{value1}:{value2}}\fR (Postfix >= 3.0)" +Expands to \fIvalue1\fR when \fI$name\fR is non\-empty, +\fIvalue2\fR otherwise. .br .br .PP @@ -3960,7 +4043,8 @@ The maximal size of any \fBlocal\fR(8) individual mailbox or maildir file, or zero (no limit). In fact, this limits the size of any file that is written to upon local delivery, including files written by external commands that are executed by the \fBlocal\fR(8) delivery -agent. +agent. The value cannot exceed LONG_MAX (typically, a 32\-bit or +64\-bit signed integer). .PP This limit must not be smaller than the message size limit. .SH mailbox_transport (default: empty) @@ -4173,7 +4257,9 @@ parameter is ignored by the Postfix queue manager and by other long\-lived Postfix daemon processes. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH max_use (default: 100) The maximal number of incoming connections that a Postfix daemon @@ -4186,14 +4272,18 @@ The maximal time between attempts to deliver a deferred message. This parameter should be set to a value greater than or equal to $minimal_backoff_time. See also $queue_run_delay. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH maximal_queue_lifetime (default: 5d) Consider a message as undeliverable, when delivery fails with a temporary error, and the time in the queue has reached the maximal_queue_lifetime limit. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is d (days). .PP Specify 0 when mail delivery should be tried only once. @@ -4233,6 +4323,8 @@ message_reject_characters = \e0 This feature is available in Postfix 2.3 and later. .SH message_size_limit (default: 10240000) The maximal size in bytes of a message, including envelope information. +The value cannot exceed LONG_MAX (typically, a 32\-bit or 64\-bit +signed integer). .PP Note: be careful when making changes. Excessively small values will result in the loss of non\-delivery notifications, when a bounce @@ -4281,10 +4373,9 @@ The time limit for sending an SMTP command to a Milter (mail filter) application, and for receiving the response. .PP Specify a non\-zero time value (an integral value plus an optional -one\-letter suffix that specifies the time unit). -.PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds). +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.3 and later. .SH milter_connect_macros (default: see "postconf \-d" output) @@ -4298,10 +4389,9 @@ The time limit for connecting to a Milter (mail filter) application, and for negotiating protocol options. .PP Specify a non\-zero time value (an integral value plus an optional -one\-letter suffix that specifies the time unit). -.PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds). +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.3 and later. .SH milter_content_timeout (default: 300s) @@ -4309,10 +4399,9 @@ The time limit for sending message content to a Milter (mail filter) application, and for receiving the response. .PP Specify a non\-zero time value (an integral value plus an optional -one\-letter suffix that specifies the time unit). -.PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds). +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.3 and later. .SH milter_data_macros (default: see "postconf \-d" output) @@ -4406,7 +4495,7 @@ values for arbitrary macros that Postfix may send to Milter applications. These defaults are used when there is no corresponding information from the message delivery context. .PP -Specify \fIname=value\fR or \fI{name}=value\fR pairs separated +Specify \fIname=value\fR or \fI{name=value}\fR pairs separated by comma or whitespace. Enclose a pair in "{}" when a value contains comma or whitespace (this form ignores whitespace after the enclosing "{", around the "=", and before the enclosing "}"). @@ -4496,7 +4585,9 @@ kept in the short\-term, in\-memory, destination status cache. This parameter should be set greater than or equal to $queue_run_delay. See also $maximal_backoff_time. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH multi_instance_directories (default: empty) An optional list of non\-default Postfix configuration directories; @@ -4672,7 +4763,7 @@ block from the list. The form "!/file/name" is supported only in Postfix version 2.4 and later. .PP Note 1: Pattern matching of domain names is controlled by the -or absence of "mynetworks" in the parent_domain_matches_subdomains +presence or absence of "mynetworks" in the parent_domain_matches_subdomains parameter value. .PP Note 2: IP version 6 address information must be specified inside @@ -4703,7 +4794,7 @@ Specify "mynetworks_style = host" when Postfix should Specify "mynetworks_style = subnet" when Postfix should "trust" remote SMTP clients in the same IP subnetworks as the local machine. On Linux, this works correctly only with interfaces -specified with the "ifconfig" command. +specified with the "ifconfig" or "ip" command. .IP \(bu Specify "mynetworks_style = class" when Postfix should "trust" remote SMTP clients in the same IP class A/B/C networks as the @@ -4748,7 +4839,7 @@ A list of Milter (mail filter) applications for new mail that does not arrive via the Postfix \fBsmtpd\fR(8) server. This includes local submission via the \fBsendmail\fR(1) command line, new mail that arrives via the Postfix \fBqmqpd\fR(8) server, and old mail that is re\-injected -into the queue with "postsuper \-r". Specify space or comma as +into the queue with "postsuper \-r". Specify space or comma as a separator. See the MILTER_README document for details. .PP This feature is available in Postfix 2.3 and later. @@ -4933,6 +5024,7 @@ cannot be set under 10s. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 3.4 and later. .SH postmulti_control_commands (default: reload flush) @@ -5089,7 +5181,7 @@ a bare newline character, that is, a newline not preceded by carriage return. Specify one of the following: .IP "\fBignore\fR" Ignore the failure of this test. Allow other tests to complete. -Do \fInot\fR repeat this test before some the result from some +Do \fInot\fR repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently. @@ -5124,6 +5216,7 @@ before it can talk to a real Postfix SMTP server. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.8. .SH postscreen_blacklist_action (default: ignore) @@ -5143,8 +5236,10 @@ logged as "partial" when the daemon terminates early after "\fBpostfix reload\fR", "\fBpostfix stop\fR", or no requests for $max_idle seconds. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours). .PP This feature is available in Postfix 2.8. .SH postscreen_cache_map (default: btree:$data_directory/postscreen_cache) @@ -5164,8 +5259,10 @@ from being logged as "NEW" just because their cache entry expired an hour ago. It also prevents the cache from filling up with clients that passed some deep protocol test once and never came back. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.8. .SH postscreen_client_connection_count_limit (default: $smtpd_client_connection_count_limit) @@ -5289,6 +5386,7 @@ it would be smaller than postscreen_dnsbl_min_ttl. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours). .PP This feature is available in Postfix 3.1. The default setting is backwards\-compatible with older Postfix versions. @@ -5302,10 +5400,11 @@ it would be larger than postscreen_dnsbl_max_ttl. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 3.1. .SH postscreen_dnsbl_reply_map (default: empty) -A mapping from actual DNSBL domain name which includes a secret +A mapping from an actual DNSBL domain name which includes a secret password, to the DNSBL domain name that postscreen will reply with when it rejects mail. When no mapping is found, the actual DNSBL domain will be used. @@ -5407,6 +5506,11 @@ The time limit for DNSBL or DNSWL lookups. This is separate from the timeouts in the \fBdnsblog\fR(8) daemon which are defined by system \fBresolver\fR(3) routines. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 3.0. .SH postscreen_dnsbl_ttl (default: 1h) The amount of time that \fBpostscreen\fR(8) will use the result from @@ -5416,6 +5520,7 @@ IP address is required to pass that test again. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours). .PP This feature is available in Postfix 2.8\-3.0. It was replaced by postscreen_dnsbl_max_ttl in Postfix 3.1. @@ -5485,6 +5590,7 @@ a good client can immediately talk to a real Postfix SMTP server. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.8. .SH postscreen_greet_wait (default: normal: 6s, overload: 2s) @@ -5494,10 +5600,9 @@ lookup results to arrive (default: up to 2 seconds under stress, up to 6 seconds otherwise). .PP Specify a non\-zero time value (an integral value plus an optional -one\-letter suffix that specifies the time unit). -.PP -Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.8. .SH postscreen_helo_required (default: $smtpd_helo_required) @@ -5511,7 +5616,7 @@ non\-SMTP commands as specified with the postscreen_forbidden_commands parameter. Specify one of the following: .IP "\fBignore\fR" Ignore the failure of this test. Allow other tests to complete. -Do \fInot\fR repeat this test before some the result from some +Do \fInot\fR repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently. @@ -5546,6 +5651,7 @@ before it can talk to a real Postfix SMTP server. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.8. .SH postscreen_pipelining_action (default: enforce) @@ -5555,7 +5661,7 @@ multiple commands instead of sending one command and waiting for the server to respond. Specify one of the following: .IP "\fBignore\fR" Ignore the failure of this test. Allow other tests to complete. -Do \fInot\fR repeat this test before some the result from some +Do \fInot\fR repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently. @@ -5589,6 +5695,7 @@ before it can talk to a real Postfix SMTP server. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). .PP This feature is available in Postfix 2.8. .SH postscreen_post_queue_limit (default: $default_process_limit) @@ -5656,6 +5763,7 @@ set under 10s. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.8. .SH postscreen_whitelist_interfaces (default: static:all) @@ -5771,6 +5879,11 @@ This feature is available in Postfix 2.6 and later. The minimal delay between warnings that a specific destination is clogging up the Postfix active queue. Specify 0 to disable. .PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is enabled with the helpful_warnings parameter. .PP This feature is available in Postfix 2.0 and later. @@ -5778,7 +5891,9 @@ This feature is available in Postfix 2.0 and later. How much time a Postfix queue manager process may take to handle a request before it is terminated by a built\-in watchdog timer. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.8 and later. @@ -5795,7 +5910,9 @@ over an internal communication channel. The purpose is to break out of deadlock situations. If the time limit is exceeded the software either retries or aborts the operation. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.8 and later. @@ -5853,14 +5970,18 @@ How long the Postfix QMQP server will pause before sending a negative reply to the remote QMQP client. The purpose is to slow down confused or malicious clients. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH qmqpd_timeout (default: 300s) The time limit for sending or receiving information over the network. If a read or write operation blocks for more than $qmqpd_timeout seconds the Postfix QMQP server gives up and disconnects. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH queue_directory (default: see "postconf \-d" output) The location of the Postfix top\-level queue directory. This is the @@ -5891,7 +6012,9 @@ prior to Postfix 2.4 the default value was 1000s. This parameter should be set less than or equal to $minimal_backoff_time. See also $maximal_backoff_time. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH queue_service_name (default: qmgr) The name of the \fBqmgr\fR(8) service. This service manages the Postfix @@ -6048,7 +6171,7 @@ the recipient_delimiter set. The delimiter character and extension may then be used to generate an extended .forward file name. This implementation recognizes one delimiter character and one extension per email address localpart or email address. With Postfix 2.10 and -earler, the recipient_delimiter specifies a single character. +earlier, the recipient_delimiter specifies a single character. .PP See \fBcanonical\fR(5), \fBlocal\fR(8), \fBrelocated\fR(5) and \fBvirtual\fR(5) for the effects of recipient_delimiter on lookups in aliases, canonical, @@ -6214,7 +6337,7 @@ and then floods innocent people with undeliverable mail. Technically, tables listed with $relay_recipient_maps are used as lists: Postfix needs to know only if a lookup string is found or not, but it does not -use the result from table lookup. +use the result from the table lookup. .PP Specify zero or more "type:name" lookup tables, separated by whitespace or comma. Tables will be searched in the specified order @@ -6637,7 +6760,9 @@ relay unix \- \- n \- \- smtp How long the Postfix \fBmaster\fR(8) waits before forking a server that appears to be malfunctioning. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH setgid_group (default: postdrop) The group ownership of set\-gid Postfix commands and of group\-writable @@ -6872,7 +6997,9 @@ tries the next address on the mail exchanger list. Specify 0 to disable the time limit (i.e. use whatever timeout is implemented by the operating system). .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_connection_cache_destinations (default: empty) Permanently enable SMTP connection caching for the specified @@ -6985,7 +7112,9 @@ for receiving the remote SMTP server response. When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_data_init_timeout (default: 120s) The Postfix SMTP client time limit for sending the SMTP DATA command, @@ -7326,7 +7455,9 @@ This feature is available in Postfix 2.0 and later. The Postfix SMTP client time limit for sending the HELO or EHLO command, and for receiving the initial remote SMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_host_lookup (default: dns) What mechanisms the Postfix SMTP client uses to look up a host's @@ -7363,7 +7494,9 @@ and earlier. The Postfix SMTP client time limit for sending the MAIL FROM command, and for receiving the remote SMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_mime_header_checks (default: empty) Restricted \fBmime_header_checks\fR(5) tables for the Postfix SMTP @@ -7454,8 +7587,13 @@ How long the Postfix SMTP client pauses before sending "." in order to work around the PIX firewall "." bug. .PP -Choosing a too short time makes this workaround ineffective when +Choosing too short a time makes this workaround ineffective when sending large messages over slow network connections. +.PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .SH smtp_pix_workaround_maps (default: empty) Lookup tables, indexed by the remote SMTP server address, with per\-destination workarounds for CISCO PIX firewall bugs. The table @@ -7473,6 +7611,11 @@ turns on the PIX firewall "." bug workaround for delivery through firewalls with "smtp fixup" mode turned on. .PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP By default, the workaround is turned off for mail that is queued for less than 500 seconds. In other words, the workaround is normally turned off for the first delivery attempt. @@ -7504,7 +7647,9 @@ settings are backwards compatible with earlier Postfix versions. The Postfix SMTP client time limit for sending the QUIT command, and for receiving the remote SMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_quote_rfc821_envelope (default: yes) Quote addresses in Postfix SMTP client MAIL FROM and RCPT TO commands @@ -7537,7 +7682,9 @@ is a performance feature of the Postfix SMTP client. The Postfix SMTP client time limit for sending the SMTP RCPT TO command, and for receiving the remote SMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtp_reply_filter (default: empty) A mechanism to transform replies from remote SMTP servers one @@ -7598,6 +7745,11 @@ sends RSET in order to finish a recipient address probe, or to verify that a cached session is still usable. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.1 and later. .SH smtp_sasl_auth_cache_name (default: empty) An optional table to prevent repeated SASL authentication @@ -7606,7 +7758,7 @@ password. Each table (key, value) pair contains a server name, a username and password, and the full server response. This information is stored when a remote SMTP server rejects an authentication attempt with a 535 reply code. As long as the smtp_sasl_password_maps -information does no change, and as long as the smtp_sasl_auth_cache_name +information does not change, and as long as the smtp_sasl_auth_cache_name information does not expire (see smtp_sasl_auth_cache_time) the Postfix SMTP client avoids SASL authentication attempts with the same server, username and password, and instead bounces or defers @@ -7640,6 +7792,11 @@ This feature is available in Postfix 2.5 and later. The maximal age of an smtp_sasl_auth_cache_name entry before it is removed. .PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days). +.PP This feature is available in Postfix 2.5 and later. .SH smtp_sasl_auth_enable (default: no) Enable SASL authentication in the Postfix SMTP client. By default, @@ -7846,6 +8003,11 @@ Do not wait for the response to the SMTP QUIT command. Time limit for Postfix SMTP client write and read operations during TLS startup and shutdown handshake procedures. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later. .SH smtp_tcp_port (default: smtp) The default TCP port that the Postfix SMTP client connects to. @@ -8025,7 +8187,7 @@ key. The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -8226,7 +8388,7 @@ Though with "insecure" MX records an active attacker can compromise SMTP transport security by returning forged MX records, such attacks are "tamper\-evident" since any forged MX hostnames will be recorded in the mail logs. Attackers who place a high value -staying hidden may be deterred from forging MX records. +on staying hidden may be deterred from forging MX records. .PP This feature is available in Postfix 3.1 and later. The \fBmay\fR policy is backwards\-compatible with earlier Postfix versions. @@ -8304,7 +8466,7 @@ This option can be set to "no" to disable strict peer name checking. This setting has no effect on sessions that are controlled via the smtp_tls_per_site table. .PP -Disabling the hostname verification can make sense in closed +Disabling the hostname verification can make sense in a closed environment where special CAs are created. If not used carefully, this option opens the danger of a "man\-in\-the\-middle" attack (the CommonName of this attacker will be logged). @@ -8335,7 +8497,7 @@ smtp_tls_exclude_ciphers = kEDH+aRSA .ft R .in -4 .PP -The first setting, disables anonymous ciphers. The next setting +The first setting disables anonymous ciphers. The next setting disables ciphers that use the MD5 digest algorithm or the (single) DES encryption algorithm. The next setting disables ciphers that use MD5 and DES together. The next setting disables the two ciphers "AES256\-SHA" @@ -8454,7 +8616,7 @@ $ openssl x509 \-noout \-fingerprint \-\fIdigest\fR \-in \fIcertfile\fR.pem .ft R .in -4 .PP -The text to the right of "=" sign is the desired fingerprint. +The text to the right of the "=" sign is the desired fingerprint. For example: .sp .in +4 @@ -8495,7 +8657,7 @@ $ openssl x509 \-in cert.pem \-noout \-pubkey | .in -4 .PP The Postfix SMTP server and client log the peer (leaf) certificate -fingerprint and public key fingerprint when the TLS loglevel is 2 or +fingerprint and the public key fingerprint when the TLS loglevel is 2 or higher. .PP This feature is available in Postfix 2.5 and later. @@ -8552,11 +8714,11 @@ log trust\-chain verification errors. 2 Also log levels during TLS negotiation. .br .IP "" -3 Also log hexadecimal and ASCII dump of TLS negotiation -process. +3 Also log the hexadecimal and ASCII dump of the +TLS negotiation process. .br .IP "" -4 Also log hexadecimal and ASCII dump of complete +4 Also log the hexadecimal and ASCII dump of complete transmission after STARTTLS. .br .br @@ -8578,19 +8740,19 @@ The following cipher grades are supported: .IP "\fBexport\fR" Enable "EXPORT" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used. .br .IP "\fBlow\fR" Enable "LOW" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used. .br .IP "\fBmedium\fR" Enable "MEDIUM" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_medium_cipherlist -configuration parameter, which you are strongly encouraged to not change. +configuration parameter, which you are strongly encouraged not to change. .br .IP "\fBhigh\fR" Enable only "HIGH" grade OpenSSL ciphers. This setting may @@ -8598,7 +8760,7 @@ be appropriate when all mandatory TLS destinations (e.g. when all mail is routed to a suitably capable relayhost) support at least one "HIGH" grade cipher. The underlying cipherlist is specified via the tls_high_cipherlist configuration parameter, which you are strongly -encouraged to not change. +encouraged not to change. .br .IP "\fBnull\fR" Enable only the "NULL" OpenSSL ciphers, these provide authentication @@ -8607,7 +8769,7 @@ that all servers are prepared to use NULL ciphers (not normally enabled in TLS servers). A plausible use\-case is an LMTP server listening on a UNIX\-domain socket that is configured to support "NULL" ciphers. The underlying cipherlist is specified via the tls_null_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change. .br .br @@ -8687,7 +8849,7 @@ smtp_tls_mandatory_protocols = >=0x0303 With Postfix < 3.6 there is no support for a minimum or maximum version, and the protocol range is configured via protocol exclusions. To require at least TLS 1.0, set "smtp_tls_mandatory_protocols = !SSLv2, -!SSLv3". Listing the protocols to include, rather than protocols to +!SSLv3". Listing the protocols to include, rather than the protocols to exclude, is supported, but not recommended. The exclusion syntax more accurately matches the underlying OpenSSL interface. .PP @@ -8706,7 +8868,7 @@ smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1.1 .ft R .in -4 .PP -also disables any protocols version higher than TLSv1.1 leaving +also disables any protocol versions higher than TLSv1.1 leaving only "TLSv1" enabled. .PP Support for "TLSv1.3" was introduced in OpenSSL 1.1.1. Disabling @@ -8715,7 +8877,7 @@ releases >= 3.0.14, 3.1.10, 3.2.7 and 3.3.2). .PP While the vast majority of SMTP servers with DANE TLSA records now support at least TLS 1.2, a few still only support TLS 1.0. If you use -"dane" or "dane\-only" it is best to not disable TLSv1, except perhaps +"dane" or "dane\-only" it is best not to disable TLSv1, except perhaps via the policy table for destinations which you are sure will support "TLSv1.2". .PP @@ -8754,8 +8916,8 @@ This feature is available in Postfix 2.2 and later. Optional lookup tables with the Postfix SMTP client TLS usage policy by next\-hop destination and by remote SMTP server hostname. When both lookups succeed, the more specific per\-site policy (NONE, -MUST, etc) overrides the less specific one (MAY), and the more secure -per\-site policy (MUST, etc) overrides the less secure one (NONE). +MUST, etc.) overrides the less specific one (MAY), and the more secure +per\-site policy (MUST, etc.) overrides the less secure one (NONE). With Postfix 2.3 and later smtp_tls_per_site is strongly discouraged: use smtp_tls_policy_maps instead. .PP @@ -8778,7 +8940,7 @@ and smtp_tls_enforce_peername settings. .br .IP "MAY" Try to use TLS if the server announces support, -otherwise use the unencrypted connection. This has less precedence +otherwise use an unencrypted connection. This has less precedence than a more specific result (including \fBNONE\fR) from the alternate host or next\-hop lookup key, and has less precedence than the more specific global "smtp_enforce_tls = yes" or "smtp_tls_enforce_peername @@ -8798,7 +8960,7 @@ Require TLS encryption, require that the remote SMTP server hostname matches the information in the remote SMTP server certificate, and require that the remote SMTP server certificate was issued by a trusted CA. This overrides a less secure \fBNONE\fR -and \fBMUST_NOPEERMATCH\fR or a less specific \fBMAY\fR lookup +or \fBMUST_NOPEERMATCH\fR or a less specific \fBMAY\fR lookup result from the alternate host or next\-hop lookup key, and overrides the global smtp_use_tls, smtp_enforce_tls and smtp_tls_enforce_peername settings. @@ -8869,7 +9031,9 @@ attributes (available for opportunistic TLS with Postfix >= 2.6) and "connection_reuse" attribute (Postfix >= 3.4) override the "smtp_tls_ciphers", "smtp_tls_exclude_ciphers", "smtp_tls_protocols", and -"smtp_tls_connection_reuse" configuration parameters. When opportunistic +"smtp_tls_connection_reuse" configuration parameters. In the policy table, +multiple ciphers, protocols or excluded ciphers must be separated by colons, +as attribute values may not contain whitespace or commas. When opportunistic TLS handshakes fail, Postfix retries the connection with TLS disabled. This allows mail delivery to sites with non\-interoperable TLS implementations. @@ -8883,7 +9047,7 @@ optional "exclude" attribute (Postfix >= 2.6) overrides the main.cf smtp_tls_mandatory_exclude_ciphers parameter, and the optional "connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. In the policy table, -multiple protocols or excluded ciphers must be separated by colons, +multiple ciphers, protocols or excluded ciphers must be separated by colons, as attribute values may not contain whitespace or commas. .br .IP "\fBdane\fR" @@ -8896,6 +9060,14 @@ server certificate must match the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is available with Postfix 2.11 and later. The optional "connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. +When the effective security level used is may, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix >= 2.6) override the +"smtp_tls_ciphers", "smtp_tls_exclude_ciphers", and "smtp_tls_protocols" +configuration parameters. +When the effective security level used is encrypt, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix >= 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. .br .IP "\fBdane\-only\fR" Mandatory DANE TLS. The TLS policy for the destination is @@ -8904,15 +9076,18 @@ or none are usable, no connection is made to the server. When usable TLSA records are obtained for the remote SMTP server, the server certificate must match the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is available with Postfix 2.11 -and later. The optional "connection_reuse" attribute (Postfix >= -3.4) overrides the main.cf smtp_tls_connection_reuse parameter. +and later. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix >= 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. .br .IP "\fBfingerprint\fR" Certificate fingerprint verification. Available with Postfix 2.5 and later. At this security level, there are no trusted Certification Authorities. The certificate trust chain, expiration date, ... are not checked. Instead, -the optional \fBmatch\fR attribute, or else the main.cf +the optional "match" attribute, or else the main.cf \fBsmtp_tls_fingerprint_cert_match\fR parameter, lists the certificate fingerprints or the public key fingerprint (Postfix 2.9 and later) of the valid server certificate. The digest @@ -8921,8 +9096,12 @@ algorithm used to calculate the fingerprint is selected by the be combined with a "|" delimiter in a single match attribute, or multiple match attributes can be employed. The ":" character is not used as a delimiter as it occurs between each pair of fingerprint (hexadecimal) -digits. The optional "connection_reuse" attribute (Postfix >= 3.4) -overrides the main.cf smtp_tls_connection_reuse parameter. +digits. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix >= 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse +parameter. .br .IP "\fBverify\fR" Mandatory TLS verification. At this security @@ -8932,8 +9111,11 @@ unauthenticated DNS MX lookups. The optional "match" attribute overrides the main.cf smtp_tls_verify_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. In practice explicit control over matching is more common with the -"secure" policy, described below. The optional "connection_reuse" -attribute (Postfix >= 3.4) overrides the main.cf +"secure" policy, described below. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix >= 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. .br .IP "\fBsecure\fR" @@ -8942,18 +9124,21 @@ MX lookups, though potentially used to determine the candidate next\-hop gateway IP addresses, are \fBnot\fR trusted to be secure enough for TLS peername verification. Instead, the default name verified in the server certificate is obtained directly from the next\-hop, or is explicitly -specified via the optional \fBmatch\fR attribute which overrides the +specified via the optional "match" attribute which overrides the main.cf smtp_tls_secure_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. The match attribute is most useful when multiple domains are supported by -common server, the policy entries for additional domains specify matching +a common server: the policy entries for additional domains specify matching rules for the primary domain certificate. While transport table overrides -routing the secondary domains to the primary nexthop also allow secure +that route the secondary domains to the primary nexthop also allow secure verification, they risk delivery to the wrong destination when domains change hands or are re\-assigned to new gateways. With the "match" attribute approach, routing is not perturbed, and mail is deferred if -verification of a new MX host fails. The optional "connection_reuse" -attribute (Postfix >= 3.4) overrides the main.cf +verification of a new MX host fails. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix >= 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix >= 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. .br .br @@ -8994,10 +9179,10 @@ Example: .ad .ft R .PP -\fBNote:\fR The \fBhostname\fR strategy if listed in a non\-default -setting of smtp_tls_secure_cert_match or in the \fBmatch\fR attribute -in the policy table can render the \fBsecure\fR level vulnerable to -DNS forgery. Do not use the \fBhostname\fR strategy for secure\-channel +\fBNote:\fR The "hostname" strategy if listed in a non\-default +setting of smtp_tls_secure_cert_match or in the "match" attribute +in the policy table can render the "secure" level vulnerable to +DNS forgery. Do not use the "hostname" strategy for secure\-channel configurations in environments where DNS security is not assured. .PP This feature is available in Postfix 2.3 and later. @@ -9018,7 +9203,7 @@ As of Postfix 3.6, the preferred way to limit the range of acceptable protocols is to set the lowest acceptable TLS protocol version and/or the highest acceptable TLS protocol version. To set the lower bound include an element of the form: ">=\fIversion\fR" where -\fIversion\fR is a either one of the TLS protocol names listed above, +\fIversion\fR is either one of the TLS protocol names listed above, or a hexadecimal number corresponding to the desired TLS protocol version (0301 for TLS 1.0, 0302 for TLS 1.1, etc.). For the upper bound, use "<=\fIversion\fR". There must be no whitespace between @@ -9150,9 +9335,12 @@ example.net secure match=example.com:.example.com .PP This feature is available in Postfix 2.3 and later. .SH smtp_tls_security_level (default: empty) -The default SMTP TLS security level for the Postfix SMTP client; -when a non\-empty value is specified, this overrides the obsolete -parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. +The default SMTP TLS security level for the Postfix SMTP client. +When a non\-empty value is specified, this overrides the obsolete +parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername; +when no value is specified for smtp_tls_enforce_peername or the obsolete +parameters, the default SMTP TLS security level is +none. .PP Specify one of the following security levels: .IP "\fBnone\fR" @@ -9264,7 +9452,7 @@ smtp_tls_security_level = none .ft C # Opportunistic TLS. smtp_tls_security_level = may -# Do not tweak opportunistic ciphers or protocol unless it is essential +# Do not tweak opportunistic ciphers or protocols unless it is essential # to do so (if a security vulnerability is found in the SSL library that # can be mitigated by disabling a particular protocol or raising the # cipher grade). @@ -9357,7 +9545,7 @@ concurrent access. The file is created if it does not exist. The \fBsmtp\fR(8) daemon does not use this parameter directly, rather the cache is implemented indirectly in the \fBtlsmgr\fR(8) daemon. This means that per\-smtp\-instance master.cf overrides of this parameter are not effective. -Note, that each of the cache databases supported by \fBtlsmgr\fR(8) daemon: +Note that each of the cache databases supported by \fBtlsmgr\fR(8) daemon: $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to be stored separately. It is not at this time possible to store multiple @@ -9395,6 +9583,11 @@ As of Postfix 2.11 this setting cannot exceed 100 days. If set <= 0, session caching is disabled. If set to a positive value less than 2 minutes, the minimum value of 2 minutes is used instead. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later. .SH smtp_tls_trust_anchor_file (default: empty) Zero or more PEM\-format files with trust\-anchor certificates @@ -9520,7 +9713,7 @@ example.com verify match=hostname:nexthop This feature is available in Postfix 2.3 and later. .SH smtp_tls_wrappermode (default: no) Request that the Postfix SMTP client connects using the -legacy SMTPS protocol instead of using the STARTTLS command. +SUBMISSIONS/SMTPS protocol instead of using the STARTTLS command. .PP This mode requires "smtp_tls_security_level = encrypt" or stronger. @@ -9559,7 +9752,9 @@ Postfix 2.3 and later use smtp_tls_security_level instead. The Postfix SMTP client time limit for sending the XFORWARD command, and for receiving the remote SMTP server response. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. @@ -9668,7 +9863,7 @@ send to this service per time unit, regardless of whether or not Postfix actually accepts those commands. The time unit is specified with the anvil_rate_time_unit configuration parameter. .PP -By default, there is no limit on the number AUTH commands that a +By default, there is no limit on the number of AUTH commands that a client may send. .PP To disable this feature, specify a limit of 0. @@ -9833,7 +10028,7 @@ client network address information. .IP "\fBcheck_ccert_access \fItype:table\fR\fR" By default use the remote SMTP client certificate fingerprint or the public key -fingerprint (Postfix 2.9 and later) as lookup key for the specified +fingerprint (Postfix 2.9 and later) as the lookup key for the specified \fBaccess\fR(5) database; with Postfix version 2.2, also require that the remote SMTP client certificate is verified successfully. The fingerprint digest algorithm is configurable via the @@ -9921,7 +10116,7 @@ Instead, use DUNNO in order to exclude specific hosts from denylists. This feature is available in Postfix 2.7 and later. .br .IP "\fBcheck_sasl_access \fItype:table\fR\fR" -Use the remote SMTP client SASL user name as lookup key for +Use the remote SMTP client SASL user name as the lookup key for the specified \fBaccess\fR(5) database. The lookup key has the form "username@domainname" when the smtpd_sasl_local_domain parameter value is non\-empty. Unlike the check_client_access feature, @@ -9944,7 +10139,7 @@ authenticated via the RFC 4954 (AUTH) protocol. .IP "\fBpermit_tls_all_clientcerts\fR" Permit the request when the remote SMTP client certificate is verified successfully. This option must be used only if a special -CA issues the certificates and only this CA is listed as trusted +CA issues the certificates and only this CA is listed as a trusted CA. Otherwise, clients with a third\-party certificate would also be allowed to relay. Specify "tls_append_default_CA = no" when the trusted CA is specified with smtpd_tls_CAfile or smtpd_tls_CApath, @@ -10280,7 +10475,7 @@ feature: .ft C # Append XVERP to MAIL FROM commands to request VERP\-style delivery. # See VERP_README for more information on how to use Postfix VERP. - /^(MAIL FROM:\es*.*)/ $1 XVERP + /^(MAIL\es+FROM:\es*.*)/ $1 XVERP .fi .ad .ft R @@ -10425,10 +10620,17 @@ With Postfix version 2.1 and later: the SMTP server response delay after a client has made more than $smtpd_soft_error_limit errors, and fewer than $smtpd_hard_error_limit errors, without delivering mail. .PP -With Postfix version 2.0 and earlier: the SMTP server delay before -sending a reject (4xx or 5xx) response, when the client has made -fewer than $smtpd_soft_error_limit errors without delivering -mail. +With Postfix version 2.0 and earlier: the SMTP server delay +before sending a reject (4xx or 5xx) response, when the client has +made fewer than $smtpd_soft_error_limit errors without delivering +mail. When the client has made $smtpd_soft_error_limit or more errors, +delay all responses with the larger of (number of errors) seconds +or $smtpd_error_sleep_time. +.PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .SH smtpd_etrn_restrictions (default: empty) Optional restrictions that the Postfix SMTP server applies in the context of a client ETRN command. @@ -10494,9 +10696,10 @@ Support for inline regular expressions was added in Postfix version .SH smtpd_hard_error_limit (default: normal: 20, overload: 1) The maximal number of errors a remote SMTP client is allowed to make without delivering mail. The Postfix SMTP server disconnects -when the limit is exceeded. Normally the default limit is 20, but +when the limit is reached. Normally the default limit is 20, but it changes under overload to just 1. With Postfix 2.5 and earlier, the SMTP server always allows up to 20 errors by default. +Valid values are greater than zero. .SH smtpd_helo_required (default: no) Require that a remote SMTP client introduces itself with the HELO or EHLO command before sending the MAIL command or other commands @@ -10829,11 +11032,21 @@ This feature is available in Postfix 3.0 and later. The time after which an idle SMTPD policy service connection is closed. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.1 and later. .SH smtpd_policy_service_max_ttl (default: 1000s) The time after which an active SMTPD policy service connection is closed. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.1 and later. .SH smtpd_policy_service_policy_context (default: empty) Optional information that the Postfix SMTP server specifies in @@ -10854,11 +11067,21 @@ This feature is available in Postfix 3.0 and later. The delay between attempts to resend a failed SMTPD policy service request. Specify a value greater than zero. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 3.0 and later. .SH smtpd_policy_service_timeout (default: 100s) The time limit for connecting to, writing to, or receiving from a delegated SMTPD policy server. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.1 and later. .SH smtpd_policy_service_try_limit (default: 2) The maximal number of attempts to send an SMTPD policy service @@ -10878,7 +11101,7 @@ supposed to give the result to another Postfix SMTP server process. Specify "host:port" or "inet:host:port" for a TCP endpoint, or "unix:pathname" for a UNIX\-domain endpoint. The host can be specified as an IP address or as a symbolic name; no MX lookups are done. -When no "host" or "host:" are specified, the local machine is +When no "host" or "host:" is specified, the local machine is assumed. Pathname interpretation is relative to the Postfix queue directory. .PP @@ -10912,7 +11135,9 @@ receiving information. When a connection fails the client gets a generic error message while more detailed information is logged to the maillog file. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .PP This feature is available in Postfix 2.1 and later. @@ -11005,7 +11230,7 @@ feature is available in Postfix 2.1 and later. .IP "\fBpermit_auth_destination\fR" Permit the request when one of the following is true: .IP \(bu -Postfix is mail forwarder: the resolved RCPT TO domain matches +Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and the address contains no sender\-specified routing (user@elsewhere@domain), .IP \(bu @@ -11016,7 +11241,7 @@ contains no sender\-specified routing (user@elsewhere@domain). .br .br .IP "\fBpermit_mx_backup\fR" -Permit the request when the local mail system is backup MX for +Permit the request when the local mail system is a backup MX for the RCPT TO domain, or when the domain is an authorized destination (see permit_auth_destination for definition). .IP \(bu @@ -11027,7 +11252,7 @@ Safety: permit_mx_backup can be vulnerable to mis\-use when access is not restricted with permit_mx_backup_networks. .IP \(bu Safety: as of Postfix version 2.3, permit_mx_backup no longer -accepts the address when the local mail system is primary MX for +accepts the address when the local mail system is a primary MX for the recipient domain. Exception: permit_mx_backup accepts the address when it specifies an authorized destination (see permit_auth_destination for definition). @@ -11065,7 +11290,7 @@ in Postfix version 2.0 and later. .IP "\fBreject_unauth_destination\fR" Reject the request unless one of the following is true: .IP \(bu -Postfix is mail forwarder: the resolved RCPT TO domain matches +Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and contains no sender\-specified routing (user@elsewhere@domain), .IP \(bu @@ -11110,7 +11335,7 @@ see the ADDRESS_VERIFICATION_README file for details. The unverified_recipient_reject_code parameter specifies the numerical response code when an address is known to bounce (default: 450, -change into 550 when you are confident that it is safe to do so). +change it to 550 when you are confident that it is safe to do so). .br The unverified_recipient_defer_code parameter specifies the numerical response code when an address probe failed due to a @@ -11340,6 +11565,8 @@ By default, the Postfix SMTP server accepts: .IP \(bu Mail from clients whose IP address matches $mynetworks, or: .IP \(bu +Mail from clients who are SASL authenticated, or: +.IP \(bu Mail to remote destinations that match $relay_domains, except for addresses that contain sender\-specified routing (user@elsewhere@domain), or: @@ -11457,7 +11684,7 @@ $mynetworks to prevent Postfix from offering AUTH to local clients. .PP Specify a list of network/netmask patterns, separated by commas and/or whitespace. The mask specifies the number of bits in the -network part of a host address. You can also "/file/name" or +network part of a host address. You can also specify "/file/name" or "type:table" patterns. A "/file/name" pattern is replaced by its contents; a "type:table" lookup table is matched when a table entry matches a lookup string (the lookup result is ignored). Continue @@ -11734,7 +11961,7 @@ unauthenticated clients only. This feature is available in Postfix version 2.1 and later. .br .IP "\fBreject_unknown_sender_domain\fR" -Reject the request when Postfix is not final destination for +Reject the request when Postfix is not the final destination for the sender address, and the MAIL FROM domain has 1) no DNS MX and no DNS A record, or 2) a malformed MX record such as a record with @@ -11816,11 +12043,18 @@ The number of errors a remote SMTP client is allowed to make without delivering mail before the Postfix SMTP server slows down all its responses. .IP \(bu -With Postfix version 2.1 and later, the Postfix SMTP server -delays all responses by $smtpd_error_sleep_time seconds. +With Postfix version 2.1 and later, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server +delays all responses by $smtpd_error_sleep_time. +.IP \(bu +With Postfix versions 2.0 and earlier, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server delays all +responses by the larger of (number of errors) seconds or +$smtpd_error_sleep_time. .IP \(bu -With Postfix versions 2.0 and earlier, the Postfix SMTP -server delays all responses by (number of errors) seconds. +With Postfix versions 2.0 and earlier, when the error count +is <= $smtpd_soft_error_limit, the Postfix SMTP server delays 4XX +and 5XX responses by $smtpd_error_sleep_time. .br .SH smtpd_starttls_timeout (default: see "postconf \-d" output) The time limit for Postfix SMTP server write and read operations @@ -11828,6 +12062,11 @@ during TLS startup and shutdown handshake procedures. The current default value is stress\-dependent. Before Postfix version 2.8, it was fixed at 300s. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later. .SH smtpd_timeout (default: normal: 300s, overload: 10s) When the Postfix SMTP server wants to send an SMTP server @@ -11847,7 +12086,9 @@ by default. Note: if you set SMTP time limits to very large values you may have to update the global ipc_timeout parameter. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH smtpd_tls_CAfile (default: empty) A file containing (PEM format) CA certificates of root CAs trusted @@ -12085,7 +12326,7 @@ key. The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -12328,7 +12569,7 @@ smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem .ad .ft R .PP -This feature is available with Postfix version 2.2. +This feature is available in Postfix 2.2 and later. .SH smtpd_tls_dh512_param_file (default: empty) File with DH parameters that the Postfix SMTP server should use with export\-grade EDH ciphers. The default SMTP server cipher @@ -12351,7 +12592,8 @@ smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem .ad .ft R .PP -This feature is available with Postfix version 2.2. +This feature is available in Postfix 2.2 and later, +but is ignored in Postfix 3.6 and later. .SH smtpd_tls_dkey_file (default: $smtpd_tls_dcert_file) File with the Postfix SMTP server DSA private key in PEM format. This file may be combined with the Postfix SMTP server DSA certificate @@ -12634,13 +12876,13 @@ The following cipher grades are supported: .IP "\fBexport\fR" Enable "EXPORT" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used. .br .IP "\fBlow\fR" Enable "LOW" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used. .br .IP "\fBmedium\fR" @@ -12648,7 +12890,7 @@ Enable "MEDIUM" grade or stronger OpenSSL ciphers. These use 128\-bit or longer symmetric bulk\-encryption keys. This is the default minimum strength for mandatory TLS encryption. The underlying cipherlist is specified via the tls_medium_cipherlist configuration parameter, which -you are strongly encouraged to not change. +you are strongly encouraged not to change. .br .IP "\fBhigh\fR" Enable only "HIGH" grade OpenSSL ciphers. The @@ -12662,7 +12904,7 @@ without encryption. This setting is only appropriate in the rare case that all clients are prepared to use NULL ciphers (not normally enabled in TLS clients). The underlying cipherlist is specified via the tls_null_cipherlist configuration parameter, which you are strongly -encouraged to not change. +encouraged not to change. .br .br .PP @@ -12901,7 +13143,7 @@ concurrent access. The file is created if it does not exist. The \fBsmtpd\fR(8) daemon does not use this parameter directly, rather the cache is implemented indirectly in the \fBtlsmgr\fR(8) daemon. This means that per\-smtpd\-instance master.cf overrides of this parameter are not -effective. Note, that each of the cache databases supported by \fBtlsmgr\fR(8) +effective. Note that each of the cache databases supported by \fBtlsmgr\fR(8) daemon: $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to be stored separately. It is not at this time possible to store multiple @@ -12950,16 +13192,21 @@ value of 2 minutes is used instead. TLS session tickets require an OpenSSL library (at least version 0.9.8h) that provides full support for this TLS extension. .PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later, and updated for TLS session ticket support in Postfix 2.11. .SH smtpd_tls_wrappermode (default: no) -Run the Postfix SMTP server in the non\-standard "wrapper" mode, +Run the Postfix SMTP server in TLS "wrapper" mode, instead of using the STARTTLS command. .PP If you want to support this service, enable a special port in master.cf, and specify "\-o smtpd_tls_wrappermode=yes" on the SMTP -server's command line. Port 465 (smtps) was once chosen for this -purpose. +server's command line. Port 465 (submissions/smtps) is reserved for +this purpose. .PP This feature is available in Postfix 2.2 and later. .SH smtpd_upstream_proxy_protocol (default: empty) @@ -12978,6 +13225,11 @@ This feature is available in Postfix 2.10 and later. The time limit for the proxy protocol specified with the smtpd_upstream_proxy_protocol parameter. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.10 and later. .SH smtpd_use_tls (default: no) Opportunistic TLS: announce STARTTLS support to remote SMTP clients, @@ -13052,8 +13304,8 @@ mail. This feature is available in Postfix 3.0 and later. .SH smtputf8_enable (default: yes) Enable preliminary SMTPUTF8 support for the protocols described -in RFC 6531..6533. This requires that Postfix is built to support -these protocols. +in RFC 6531, RFC 6532, and RFC 6533. This requires that Postfix is +built to support these protocols. .PP This feature is available in Postfix 3.0 and later. .SH soft_bounce (default: no) @@ -13082,7 +13334,9 @@ soft_bounce = yes The time after which a stale exclusive mailbox lockfile is removed. This is used for delivery to file or mailbox. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH stress (default: empty) This feature is documented in the STRESS_README document. @@ -13286,7 +13540,7 @@ ignored with a warning. .PP Note: It is unwise to omit sha256 from the digest list. This digest algorithm is the only mandatory to implement digest algorithm -in RFC 6698, and many servers are expected publish TLSA records +in RFC 6698, and many servers are expected to publish TLSA records with just sha256 digests. Unless one of the standard digests is seriously compromised and servers have had ample time to update their TLSA records you should not omit any standard digests, just arrange @@ -13397,7 +13651,7 @@ The prioritized list of elliptic curves supported by the Postfix SMTP client and server. These curves are used by the Postfix SMTP server when "smtpd_tls_eecdh_grade = auto". The selected curves must be implemented by OpenSSL and be standardized for use in TLS -(RFC 4492 or its imminent successor). It is unwise to list only +(RFC 8422). It is unwise to list only "bleeding\-edge" curves supported by a small subset of clients. The default list is suitable for most users. .PP @@ -13421,10 +13675,10 @@ server when "smtpd_tls_eecdh_grade = strong". The phrase "sensibly strong" means approximately 128\-bit security based on best known attacks. The selected curve must be implemented by OpenSSL (as reported by \fBecparam\fR(1) with the "\-list_curves" option) and be one -of the curves listed in Section 5.1.1 of RFC 4492. You should not +of the curves listed in Section 5.1.1 of RFC 8422. You should not generally change this setting. Remote SMTP client implementations must support this curve for EECDH key exchange to take place. It -is unwise to choose an "bleeding\-edge" curve supported by only a +is unwise to choose only "bleeding\-edge" curves supported by only a small subset of clients. .PP The default "strong" curve is rated in NSA Suite @@ -13457,7 +13711,10 @@ This additional strength comes at a significant computational cost, most users should instead set "smtpd_tls_eecdh_grade = strong". The selected curve must be implemented by OpenSSL (as reported by \fBecparam\fR(1) with the "\-list_curves" option) and be one of the curves listed in Section 5.1.1 -of RFC 4492. You should not generally change this setting. +of RFC 8422. You should not generally change this setting. Remote SMTP +client implementations must support this curve for EECDH key exchange +to take place. It is unwise to choose only "bleeding\-edge" curves +supported by only a small subset of clients. .PP This default "ultra" curve is rated in NSA Suite B for information classified up to TOP SECRET. @@ -13481,7 +13738,7 @@ lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. With Postfix releases before the middle of 2015 this is the default cipherlist for the opportunistic ("may") TLS client security level and also the default cipherlist for the SMTP server. You are strongly -encouraged to not change this setting. +encouraged not to change this setting. .PP This feature is available in Postfix 2.3 and later. .SH tls_fast_shutdown_enable (default: yes) @@ -13495,7 +13752,7 @@ The OpenSSL cipherlist for "high" grade ciphers. This defines the meaning of the "high" setting in smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting. +encouraged not to change this setting. .PP This feature is available in Postfix 2.3 and later. .SH tls_legacy_public_key_fingerprints (default: no) @@ -13516,7 +13773,7 @@ The OpenSSL cipherlist for "low" or higher grade ciphers. This defines the meaning of the "low" setting in smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting. +encouraged not to change this setting. .PP This feature is available in Postfix 2.3 and later. .SH tls_medium_cipherlist (default: see "postconf \-d" output) @@ -13527,15 +13784,15 @@ lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. This is the default cipherlist for mandatory TLS encryption in the TLS client (with anonymous ciphers disabled when verifying server certificates). This is the default cipherlist for opportunistic TLS with Postfix -releases after the middle of 2015. You are strongly encouraged to -not change this setting. +releases after the middle of 2015. You are strongly encouraged not +to change this setting. .PP This feature is available in Postfix 2.3 and later. .SH tls_null_cipherlist (default: eNULL:!aNULL) The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. This defines the meaning of the "null" -setting in smtpd_mandatory_tls_ciphers, smtp_tls_mandatory_ciphers and -lmtp_tls_mandatory_ciphers. You are strongly encouraged to not +setting in smtpd_tls_mandatory_ciphers, smtp_tls_mandatory_ciphers and +lmtp_tls_mandatory_ciphers. You are strongly encouraged not to change this setting. .PP This feature is available in Postfix 2.3 and later. @@ -13589,6 +13846,11 @@ The time between attempts by \fBtlsmgr\fR(8) to save the state of the pseudo random number generator (PRNG) to the file specified with $tls_random_exchange_name. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later. .SH tls_random_reseed_period (default: 3600s) The maximal time between attempts by \fBtlsmgr\fR(8) to re\-seed the @@ -13596,6 +13858,11 @@ in\-memory pseudo random number generator (PRNG) pool from external sources. The actual time between re\-seeding attempts is calculated using the PRNG, and is between 0 and the time specified. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP This feature is available in Postfix 2.2 and later. .SH tls_random_source (default: see "postconf \-d" output) The external entropy source for the in\-memory \fBtlsmgr\fR(8) pseudo @@ -13605,7 +13872,7 @@ type must be prepended: egd:/path/to/egd_socket for a source with EGD compatible socket interface, or dev:/path/to/device for a device file. .PP -Note: on OpenBSD systems specify /dev/arandom when /dev/urandom +Note: on OpenBSD systems specify dev:/dev/arandom when dev:/dev/urandom gives timeout errors. .PP This feature is available in Postfix 2.2 and later. @@ -13618,7 +13885,7 @@ server mode of \fBtlsproxy\fR(8). .PP When this parameter is non\-empty, the Postfix SMTP server enables SNI extension processing, and logs SNI values that are invalid or -don't match an entry in the the specified tables. When an entry +don't match an entry in the specified tables. When an entry does match, the SNI name is logged as part of the connection summary at log levels 1 and higher. .PP @@ -13905,7 +14172,8 @@ to configure tlsproxy client keys and certificates is via the This feature is available in Postfix 3.4 and later. .SH tlsproxy_client_enforce_tls (default: $smtp_enforce_tls) Enforcement mode: require that SMTP servers use TLS encryption. -See smtp_enforce_tls for further details. +See smtp_enforce_tls for further details. Use +tlsproxy_client_security_level instead. .PP This feature is available in Postfix 3.4 and later. .SH tlsproxy_client_fingerprint_digest (default: $smtp_tls_fingerprint_digest) @@ -13955,13 +14223,14 @@ client. See smtp_tls_security_level for further details. This feature is available in Postfix 3.4 and later. .SH tlsproxy_client_use_tls (default: $smtp_use_tls) Opportunistic mode: use TLS when a remote server announces TLS -support. See smtp_use_tls for further details. +support. See smtp_use_tls for further details. Use +tlsproxy_client_security_level instead. .PP This feature is available in Postfix 3.4 and later. .SH tlsproxy_enforce_tls (default: $smtpd_enforce_tls) Mandatory TLS: announce STARTTLS support to remote SMTP clients, and require that clients use TLS encryption. See smtpd_enforce_tls for -further details. +further details. Use tlsproxy_tls_security_level instead. .PP This feature is available in Postfix 2.8 and later. .SH tlsproxy_service_name (default: tlsproxy) @@ -14148,7 +14417,7 @@ This feature is available in Postfix 2.8 and later. .SH tlsproxy_use_tls (default: $smtpd_use_tls) Opportunistic TLS: announce STARTTLS support to remote SMTP clients, but do not require that clients use TLS encryption. See smtpd_use_tls -for further details. +for further details. Use tlsproxy_tls_security_level instead. .PP This feature is available in Postfix 2.8 and later. .SH tlsproxy_watchdog_timeout (default: 10s) @@ -14162,6 +14431,7 @@ cannot be set under 10s. Specify a non\-zero time value (an integral value plus an optional one\-letter suffix that specifies the time unit). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). .PP This feature is available in Postfix 2.8 and later .SH trace_service_name (default: trace) @@ -14375,13 +14645,20 @@ This feature is available in Postfix 2.4 and later. The time between attempts by the Postfix queue manager to contact a malfunctioning message delivery transport. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH transport_time_limit (default: $command_time_limit) A transport\-specific override for the command_time_limit parameter value, where \fItransport\fR is the master.cf name of the message delivery transport. .PP +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP Note: \fItransport\fR_time_limit parameters will not show up in "postconf" command output before Postfix version 2.9. This limitation applies to many parameters whose name is a combination @@ -14391,13 +14668,26 @@ of a master.cf service name and a built\-in suffix (in this case: A transport\-specific override for the default_transport_rate_delay parameter value, where the initial \fItransport\fR in the parameter name is the master.cf name of the message delivery transport. +.PP +Specify a non\-negative time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds). +.PP +Note: \fItransport\fR_transport_rate_delay parameters will +not show up in "postconf" command output before Postfix version +2.9. This limitation applies to many parameters whose name is a +combination of a master.cf service name and a built\-in suffix (in +this case: "_transport_rate_delay"). .SH trigger_timeout (default: 10s) The time limit for sending a trigger to a Postfix daemon (for example, the \fBpickup\fR(8) or \fBqmgr\fR(8) daemon). This time limit prevents programs from getting stuck when the mail system is under heavy load. .PP -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). +Specify a non\-zero time value (an integral value plus an optional +one\-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). The default time unit is s (seconds). .SH undisclosed_recipients_header (default: see "postconf \-d" output) Message header that the Postfix \fBcleanup\fR(8) server inserts when a @@ -14598,7 +14888,7 @@ exponentially. .PP This feature is available in Postfix 3.0 and later. .SH virtual_alias_domains (default: $virtual_alias_maps) -Postfix is final destination for the specified list of virtual +Postfix is the final destination for the specified list of virtual alias domains, that is, domains for which all addresses are aliased to addresses in other local or remote domains. The SMTP server validates recipient addresses with $virtual_alias_maps and rejects @@ -14618,7 +14908,7 @@ domain names). Specify a list of host or domain names, "/file/name" or "type:table" patterns, separated by commas and/or whitespace. A "/file/name" pattern is replaced by its contents; a "type:table" -lookup table is matched when a table entry matches a lookup string +lookup table is matched when a table entry matches a host or domain name (the lookup result is ignored). Continue long lines by starting the next line with whitespace. Specify "!pattern" to exclude a host or domain name from the list. The form "!/file/name" is supported @@ -14643,7 +14933,7 @@ from each original recipient. This feature is available in Postfix 2.1 and later. .SH virtual_alias_maps (default: $virtual_maps) Optional lookup tables that alias specific mail addresses or domains -to other local or remote address. The table format and lookups +to other local or remote addresses. The table format and lookups are documented in \fBvirtual\fR(5). For an overview of Postfix address manipulations see the ADDRESS_REWRITING_README document. .PP @@ -14746,7 +15036,7 @@ virtual_mailbox_base = /var/mail .ad .ft R .SH virtual_mailbox_domains (default: $virtual_mailbox_maps) -Postfix is final destination for the specified list of domains; +Postfix is the final destination for the specified list of domains; mail is delivered via the $virtual_transport mail delivery transport. By default this is the Postfix \fBvirtual\fR(8) delivery agent. The SMTP server validates recipient addresses with $virtual_mailbox_maps @@ -14794,6 +15084,11 @@ In a lookup table, specify a left\-hand side of "@domain.tld" to match any user in the specified domain that does not have a specific "user@domain.tld" entry. .PP +With the default "virtual_mailbox_domains = $virtual_mailbox_maps", +lookup tables also need entries with a left\-hand side of "domain.tld" +to satisfy virtual_mailbox_domain lookups (the right\-hand side is +required but will not be used). +.PP The remainder of this text is specific to the \fBvirtual\fR(8) delivery agent. It does not apply when mail is delivered with a different mail delivery program. diff --git a/postfix/man/man5/relocated.5 b/postfix/man/man5/relocated.5 index fdb61067e..fbc85a391 100644 --- a/postfix/man/man5/relocated.5 +++ b/postfix/man/man5/relocated.5 @@ -27,7 +27,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those case, the lookups +can be directed to a TCP\-based server. In those case, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". @@ -100,7 +100,7 @@ directed to a TCP\-based server. For a description of regular expression lookup table syntax, see \fBregexp_table\fR(5) or \fBpcre_table\fR(5). For a description of the TCP client/server table lookup protocol, see \fBtcp_table\fR(5). -This feature is not available up to and including Postfix version 2.4. +This feature is available in Postfix 2.5 and later. Each pattern is a regular expression that is applied to the entire address being looked up. Thus, \fIuser@domain\fR mail addresses are not @@ -121,7 +121,7 @@ pattern can be interpolated as \fB$1\fR, \fB$2\fR and so on. This section describes how the table lookups change when lookups are directed to a TCP\-based server. For a description of the TCP client/server lookup protocol, see \fBtcp_table\fR(5). -This feature is not available up to and including Postfix version 2.4. +This feature is available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, \fIuser@domain\fR mail addresses are not broken up into their @@ -141,20 +141,23 @@ The table format does not understand quoting conventions. The following \fBmain.cf\fR parameters are especially relevant. The text below provides only a parameter summary. See \fBpostconf\fR(5) for more details including examples. -.IP \fBrelocated_maps\fR -List of lookup tables for relocated users or sites. +.IP "\fBrelocated_maps (empty)\fR" +Optional lookup tables with new contact information for users or +domains that no longer exist. .PP Other parameters of interest: -.IP \fBinet_interfaces\fR -The network interface addresses that this system receives mail on. -You need to stop and start Postfix when this parameter changes. -.IP \fBmydestination\fR -List of domains that this mail system considers local. -.IP \fBmyorigin\fR -The domain that is appended to locally\-posted mail. -.IP \fBproxy_interfaces\fR -Other interfaces that this machine receives mail on by way of a -proxy agent or network address translator. +.IP "\fBinet_interfaces (all)\fR" +The network interface addresses that this mail system receives +mail on. +.IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" +The list of domains that are delivered via the $local_transport +mail delivery transport. +.IP "\fBmyorigin ($myhostname)\fR" +The domain name that locally\-posted mail appears to come +from, and that locally posted mail is delivered to. +.IP "\fBproxy_interfaces (empty)\fR" +The network interface addresses that this mail system receives mail +on by way of a proxy or network address translation unit. .SH "SEE ALSO" .na .nf diff --git a/postfix/man/man5/sqlite_table.5 b/postfix/man/man5/sqlite_table.5 index 01c420ae6..c0655976b 100644 --- a/postfix/man/man5/sqlite_table.5 +++ b/postfix/man/man5/sqlite_table.5 @@ -22,7 +22,7 @@ Alternatively, lookup tables can be specified as SQLite databases. In order to use SQLite lookups, define an SQLite source as a lookup table in main.cf, for example: .nf - alias_maps = sqlite:/etc/sqlite\-aliases.cf + alias_maps = sqlite:/etc/postfix/sqlite\-aliases.cf .fi The file /etc/postfix/sqlite\-aliases.cf has the same format as @@ -166,8 +166,8 @@ This parameter is available with Postfix 2.2 and later. NOTE: DO NOT put quotes around the result format! .IP "\fBdomain (default: no domain list)\fR" -This is a list of domain names, paths to files, or -dictionaries. When specified, only fully qualified search +This is a list of domain names, paths to files, or "type:table" +databases. When specified, only fully qualified search keys with a *non\-empty* localpart and a matching domain are eligible for lookup: 'user' lookups, bare domain lookups and "@domain" lookups are not performed. This can significantly diff --git a/postfix/man/man5/transport.5 b/postfix/man/man5/transport.5 index b19cfd596..223b95824 100644 --- a/postfix/man/man5/transport.5 +++ b/postfix/man/man5/transport.5 @@ -60,7 +60,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those case, the lookups +can be directed to a TCP\-based server. In those case, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". .SH "CASE FOLDING" diff --git a/postfix/man/man5/virtual.5 b/postfix/man/man5/virtual.5 index 74fbcef75..702f060ef 100644 --- a/postfix/man/man5/virtual.5 +++ b/postfix/man/man5/virtual.5 @@ -53,7 +53,7 @@ or SQL, the same lookups are done as for ordinary indexed files. Alternatively, the table can be provided as a regular\-expression map where patterns are given as regular expressions, or lookups -can be directed to TCP\-based server. In those case, the lookups +can be directed to a TCP\-based server. In those case, the lookups are done in a slightly different way as described below under "REGULAR EXPRESSION TABLES" or "TCP\-BASED TABLES". .SH "CASE FOLDING" @@ -101,7 +101,7 @@ Redirect mail for \fIuser\fR@\fIsite\fR to \fIaddress\fR when $\fBmydestination\fR, or when it is listed in $\fBinet_interfaces\fR or $\fBproxy_interfaces\fR. .sp -This functionality overlaps with functionality of the local +This functionality overlaps with the functionality of the local \fIaliases\fR(5) database. The difference is that \fBvirtual\fR(5) mapping can be applied to non\-local addresses. .IP "@\fIdomain address, address, ...\fR" @@ -161,7 +161,7 @@ When a mail address localpart contains the optional recipient delimiter The \fBpropagate_unmatched_extensions\fR parameter controls whether an unmatched address extension (\fI+foo\fR) is propagated to the -result of table lookup. +result of a table lookup. .SH "VIRTUAL ALIAS DOMAINS" .na .nf @@ -246,7 +246,7 @@ pattern can be interpolated as \fB$1\fR, \fB$2\fR and so on. This section describes how the table lookups change when lookups are directed to a TCP\-based server. For a description of the TCP client/server lookup protocol, see \fBtcp_table\fR(5). -This feature is not available up to and including Postfix version 2.4. +This feature is available in Postfix 2.5 and later. Each lookup operation uses the entire address once. Thus, \fIuser@domain\fR mail addresses are not broken up into their @@ -269,9 +269,9 @@ and for default values. Use the "\fBpostfix reload\fR" command after a configuration change. .IP "\fBvirtual_alias_maps ($virtual_maps)\fR" Optional lookup tables that alias specific mail addresses or domains -to other local or remote address. +to other local or remote addresses. .IP "\fBvirtual_alias_domains ($virtual_alias_maps)\fR" -Postfix is final destination for the specified list of virtual +Postfix is the final destination for the specified list of virtual alias domains, that is, domains for which all addresses are aliased to addresses in other local or remote domains. .IP "\fBpropagate_unmatched_extensions (canonical, virtual)\fR" diff --git a/postfix/man/man8/local.8 b/postfix/man/man8/local.8 index 6aeeac7a7..ca9c6c8d8 100644 --- a/postfix/man/man8/local.8 +++ b/postfix/man/man8/local.8 @@ -61,12 +61,18 @@ directory), \fB$shell\fR (recipient shell), \fB$recipient\fR (complete recipient address), \fB$extension\fR (recipient address extension), \fB$domain\fR (recipient domain), \fB$local\fR (entire recipient address localpart) and -\fB$recipient_delimiter.\fR The forms \fI${name?value}\fR and -\fI${name:value}\fR expand conditionally to \fIvalue\fR when -\fI$name\fR is (is not) defined. -Characters that may have special meaning to the shell or file system -are replaced by underscores. The list of acceptable characters -is specified with the \fBforward_expansion_filter\fR configuration +\fB$recipient_delimiter.\fR The forms \fI${name?value}\fR +and \fI${name?{value}}\fR (Postfix 3.0 and later) expand +conditionally to \fIvalue\fR when \fI$name\fR is defined, +and the forms \fI${name:value}\fR \fI${name:{value}}\fR +(Postfix 3.0 and later) expand conditionally to \fIvalue\fR +when \fI$name\fR is not defined. The form +\fI${name?{value1}:{value2}}\fR (Postfix 3.0 and later) +expands conditionally to \fIvalue1\fR when \fI$name\fR is +defined, or \fIvalue2\fR otherwise. Characters that may +have special meaning to the shell or file system are replaced +with underscores. The list of acceptable characters is +specified with the \fBforward_expansion_filter\fR configuration parameter. An alias or ~/.\fBforward\fR file may list any combination of external @@ -180,13 +186,18 @@ to interpolation of \fB$user\fR (recipient username), address), \fB$extension\fR (recipient address extension), \fB$domain\fR (recipient domain), \fB$local\fR (entire recipient address localpart) and \fB$recipient_delimiter.\fR -The forms \fI${name?value}\fR and \fI${name:value}\fR expand -conditionally to \fIvalue\fR when \fI$name\fR is (is not) -defined. Characters that may have special meaning to the -shell or file system are replaced by underscores. The list -of acceptable characters is specified with the -\fBexecution_directory_expansion_filter\fR configuration -parameter. +The forms \fI${name?value}\fR and \fI${name?{value}}\fR +(Postfix 3.0 and later) expand conditionally to \fIvalue\fR +when \fI$name\fR is defined, and the forms \fI${name:value}\fR +and \fI${name:{value}}\fR (Postfix 3.0 and later) expand +conditionally to \fIvalue\fR when \fI$name\fR is not defined. +The form \fI${name?{value1}:{value2}}\fR (Postfix 3.0 and +later) expands conditionally to \fIvalue1\fR when \fI$name\fR +is defined, or \fIvalue2\fR otherwise. Characters that may +have special meaning to the shell or file system are replaced +with underscores. The list of acceptable characters +is specified with the \fBexecution_directory_expansion_filter\fR +configuration parameter. The command is executed directly where possible. Assistance by the shell (\fB/bin/sh\fR on UNIX systems) is used only when the command @@ -208,7 +219,7 @@ non\-zero exit status. A limited amount of message context is exported via environment variables. Characters that may have special meaning to the shell -are replaced by underscores. The list of acceptable characters +are replaced with underscores. The list of acceptable characters is specified with the \fBcommand_expansion_filter\fR configuration parameter. .IP \fBSHELL\fR @@ -475,7 +486,7 @@ Optional catch\-all destination for unknown \fBlocal\fR(8) recipients. Available in Postfix version 2.2 and later: .IP "\fBcommand_execution_directory (empty)\fR" The \fBlocal\fR(8) delivery agent working directory for delivery to -external command. +external commands. .SH "MAILBOX LOCKING CONTROLS" .na .nf @@ -530,7 +541,7 @@ Restrict the characters that the \fBlocal\fR(8) delivery agent allows in $name expansions of $mailbox_command and $command_execution_directory. .IP "\fBdefault_privs (nobody)\fR" The default rights used by the \fBlocal\fR(8) delivery agent for delivery -to external file or command. +to an external file or command. .IP "\fBforward_expansion_filter (see 'postconf -d' output)\fR" Restrict the characters that the \fBlocal\fR(8) delivery agent allows in $name expansions of $forward_path. @@ -564,7 +575,7 @@ to non\-Postfix processes. The time limit for sending or receiving information over an internal communication channel. .IP "\fBlocal_command_shell (empty)\fR" -Optional shell program for \fBlocal\fR(8) delivery to non\-Postfix command. +Optional shell program for \fBlocal\fR(8) delivery to non\-Postfix commands. .IP "\fBmax_idle (100s)\fR" The maximum amount of time that an idle Postfix daemon process waits for an incoming connection before terminating voluntarily. diff --git a/postfix/man/man8/pipe.8 b/postfix/man/man8/pipe.8 index 59af49f70..8e54eafd7 100644 --- a/postfix/man/man8/pipe.8 +++ b/postfix/man/man8/pipe.8 @@ -180,6 +180,7 @@ specify \fB$sender\fR as an argument by itself: .nf \fIRight\fR: command \-f $sender \-\- $recipient .fi +NOTE: DO NOT put quotes around the command, $sender, or $recipient. .IP This feature is available as of Postfix 2.3. .IP "\fBsize\fR=\fIsize_limit\fR (optional)" diff --git a/postfix/man/man8/spawn.8 b/postfix/man/man8/spawn.8 index 410ec87b7..8baa440b2 100644 --- a/postfix/man/man8/spawn.8 +++ b/postfix/man/man8/spawn.8 @@ -18,7 +18,7 @@ It listens on a port as specified in the Postfix \fBmaster.cf\fR file and spawns an external command whenever a connection is established. The connection can be made over local IPC (such as UNIX\-domain sockets) or over non\-local IPC (such as TCP sockets). -The command\'s standard input, output and error streams are connected +The command's standard input, output and error streams are connected directly to the communication endpoint. This daemon expects to be run from the \fBmaster\fR(8) process diff --git a/postfix/man/man8/tlsproxy.8 b/postfix/man/man8/tlsproxy.8 index bec3f8588..fa1e572b5 100644 --- a/postfix/man/man8/tlsproxy.8 +++ b/postfix/man/man8/tlsproxy.8 @@ -320,6 +320,11 @@ but do not require that clients use TLS encryption. .IP "\fBtlsproxy_enforce_tls ($smtpd_enforce_tls)\fR" Mandatory TLS: announce STARTTLS support to remote SMTP clients, and require that clients use TLS encryption. +.IP "\fBtlsproxy_client_use_tls ($smtp_use_tls)\fR" +Opportunistic mode: use TLS when a remote server announces TLS +support. +.IP "\fBtlsproxy_client_enforce_tls ($smtp_enforce_tls)\fR" +Enforcement mode: require that SMTP servers use TLS encryption. .SH "RESOURCE CONTROLS" .na .nf diff --git a/postfix/man/man8/trivial-rewrite.8 b/postfix/man/man8/trivial-rewrite.8 index ccf601b08..e41da7190 100644 --- a/postfix/man/man8/trivial-rewrite.8 +++ b/postfix/man/man8/trivial-rewrite.8 @@ -56,7 +56,7 @@ Resolve the address for address verification purposes. .ad .fi The \fBtrivial\-rewrite\fR(8) servers run under control by -the Postfix master +the Postfix master(8) server. Each server can handle multiple simultaneous connections. When all servers are busy while a client connects, the master creates a new server process, provided that the trivial\-rewrite diff --git a/postfix/man/man8/virtual.8 b/postfix/man/man8/virtual.8 index 3a3525a74..746fc0df2 100644 --- a/postfix/man/man8/virtual.8 +++ b/postfix/man/man8/virtual.8 @@ -154,7 +154,7 @@ RFC 822 (ARPA Internet Text Messages) .ad .fi Mail bounces when the recipient has no mailbox or when the -recipient is over disk quota. In all other cases, mail for +recipient is over disk quota. In all other problem cases, mail for an existing recipient is deferred and a warning is logged. Problems and transactions are logged to \fBsyslogd\fR(8) @@ -209,7 +209,7 @@ delivery. .PP Available in Postfix version 2.0 and later: .IP "\fBvirtual_mailbox_domains ($virtual_mailbox_maps)\fR" -Postfix is final destination for the specified list of domains; +Postfix is the final destination for the specified list of domains; mail is delivered via the $virtual_transport mail delivery transport. .IP "\fBvirtual_transport (virtual)\fR" The default mail delivery transport and next\-hop destination for diff --git a/postfix/mantools/check-double-cc b/postfix/mantools/check-double-cc new file mode 100755 index 000000000..61ffc5b66 --- /dev/null +++ b/postfix/mantools/check-double-cc @@ -0,0 +1,8 @@ +#!/bin/sh + +# Finds double words in C comments. See mantools/comment.c for 'comment' +# source code. + +LANG=C; export LANG + +find src -name '*.[hc]' | xargs cat | comment | mantools/deroff | mantools/find-double | fgrep -vxf proto/stop.double-cc diff --git a/postfix/mantools/check-double-install-proto-text b/postfix/mantools/check-double-install-proto-text new file mode 100755 index 000000000..4a27b84e5 --- /dev/null +++ b/postfix/mantools/check-double-install-proto-text @@ -0,0 +1,7 @@ +#!/bin/sh + +# Finds double words in install and proto text files. + +LANG=C; export LANG + +ls *install* proto/* | egrep -v 'stop|Makefile|html|\.proto' | xargs mantools/deroff | mantools/find-double | fgrep -vxf proto/stop.double-install-proto-text diff --git a/postfix/mantools/check-double-proto-html b/postfix/mantools/check-double-proto-html new file mode 100755 index 000000000..234a7743d --- /dev/null +++ b/postfix/mantools/check-double-proto-html @@ -0,0 +1,7 @@ +#!/bin/sh + +# Finds double words in proto html files. + +LANG=C; export LANG + +ls proto/*.html proto/*.proto | xargs mantools/dehtml | mantools/find-double | fgrep -vxf proto/stop.double-proto-html diff --git a/postfix/mantools/check-spell-cc b/postfix/mantools/check-spell-cc new file mode 100755 index 000000000..ab2247019 --- /dev/null +++ b/postfix/mantools/check-spell-cc @@ -0,0 +1,8 @@ +#!/bin/sh + +# Spellchecks comments in C source code. See mantools/comment.c for +# 'comment' source code. + +LANG=C; export LANG + +find . -name *.[hc] | xargs cat | comment | mantools/deroff | spell | fgrep -vxf proto/stop | fgrep -vxf proto/stop.spell-cc diff --git a/postfix/mantools/check-spell-install-proto-text b/postfix/mantools/check-spell-install-proto-text new file mode 100755 index 000000000..fbf75c736 --- /dev/null +++ b/postfix/mantools/check-spell-install-proto-text @@ -0,0 +1,7 @@ +#!/bin/sh + +# Spellchecks the install scripts and proto non-html files. + +LANG=C; export LANG + +ls *install* proto/* | egrep -v 'stop|Makefile|html|\.proto' | mantools/deroff | spell | fgrep -vxf proto/stop diff --git a/postfix/mantools/check-spell-proto-html b/postfix/mantools/check-spell-proto-html new file mode 100755 index 000000000..3d05d6676 --- /dev/null +++ b/postfix/mantools/check-spell-proto-html @@ -0,0 +1,7 @@ +#!/bin/sh + +# Spellchecks the proto HTML files. + +LANG=C; export LANG + +mantools/dehtml proto/*html proto/*.proto | spell | fgrep -vxf proto/stop | fgrep -vxf proto/stop.spell-proto-html diff --git a/postfix/mantools/comment.c b/postfix/mantools/comment.c new file mode 100644 index 000000000..4372d4460 --- /dev/null +++ b/postfix/mantools/comment.c @@ -0,0 +1,66 @@ +#include + +void copy_comment() +{ + int c; + + while ((c = getchar()) != EOF) { + if (c == '*') { + if ((c = getchar()) == '/') { + putchar('\n'); + return; + } + if (c != EOF) + ungetc(c, stdin); + putchar('*'); + } else { + putchar(c); + } + } +} + +void skip_string(int quote) +{ + int c; + + while ((c = getchar()) != EOF) { + if (c == quote) { + return; + } else if (c == '\\') { + getchar(); + } + } +} + +int main() +{ + int c; + + while ((c = getchar()) != EOF) { + switch (c) { + case '/': + if ((c = getchar()) == '*') { + copy_comment(); + } else if (c == '/') { + while ((c = getchar()) != EOF) { + putchar(c); + if (c == '\n') + break; + } + } else { + if (c != EOF) + ungetc(c, stdin); + } + break; + case '"': + case '\'': + skip_string(c); + break; + case '\\': + (void) getchar(); + break; + default: + break; + } + } +} diff --git a/postfix/mantools/deroff b/postfix/mantools/deroff new file mode 100755 index 000000000..d538e6e10 --- /dev/null +++ b/postfix/mantools/deroff @@ -0,0 +1,7 @@ +#!/bin/sh + +sed ' + s/^\.[^ ]*// + s/\\f.//g + s/\\(..//g +' "$@" diff --git a/postfix/mantools/find-double b/postfix/mantools/find-double new file mode 100755 index 000000000..371663e88 --- /dev/null +++ b/postfix/mantools/find-double @@ -0,0 +1,13 @@ +#!/bin/sh + +sed 's/[^A-Z0-9a-z_][^A-Z0-9a-z_]*/ /g' "$@" | awk ' + { for (i = 1; i <= NF; i++) { + if (length($i) > 1 && $(i) == last) { + if (i == 1) + printf("%s ", last) + print + } + last = $(i) + } + } +' diff --git a/postfix/mantools/postlink b/postfix/mantools/postlink index c1972d13b..602d80c83 100755 --- a/postfix/mantools/postlink +++ b/postfix/mantools/postlink @@ -32,7 +32,7 @@ while (<>) { $printit = 0; next LINE; } - if (/"[Hh][Tt][Tt][Pp]:/) { + if (/"[Hh][Tt][Tt][Pp][Ss]?:/) { print; $printit = 0; next LINE; @@ -134,23 +134,24 @@ while (<>) { s;\bcon[-]*\n*[ ]*tent_filter\b;$&;g; s;\bdata_direc[-]*\n*[ ]*tory\b;$&;g; s;\bdae[-]*\n*[ ]*mon_direc[-]*\n*[ ]*tory\b;$&;g; + s;\bdaemon_table_open_error_is_fatal\b;$&;g; s;\bdaemon_timeout\b;$&;g; s;\bdebug_peer_level\b;$&;g; s;\bdebug_peer_list\b;$&;g; s;\bdefault_delivery_status_filter\b;$&;g; s;\bdefault_data[-]*\n* *[]*base_type\b;$&;g; s;\bdefault_deliv[-]*\n* *[]*ery_slot_cost\b;$&;g; - s;\bdefault_deliv[-]*\n* *[]*ery_slot_discount\b;$&;g; + s;\bdefault_deliv[-]*\n* *[]*ery_slot_dis[-]*\n* *[]*count\b;$&;g; s;\bdefault_deliv[-]*\n* *[]*ery_slot_loan\b;$&;g; - s;\bdefault_destina[-]*\n* *[]*tion_concur[-]*\n* *[]*rency_limit\b;$&;g; + s;\bdefault_destina[-]*\n* *[]*tion_con[-]*\n* *[]*cur[-]*\n* *[]*rency_limit\b;$&;g; s;\bdefault_destina[-]*\n* *[]*tion_recip[-]*\n* *[]*i[-]*\n* *[]*ent_limit\b;$&;g; s;\bdefault_extra_recipi[-]*\n* *[]*ent_limit\b;$&;g; s;\bdefault_minimum_deliv[-]*\n* *[]*ery_slots\b;$&;g; s;\bdefault_privs\b;$&;g; s;\bdefault_process_limit\b;$&;g; s;\bdefault_rbl_reply\b;$&;g; - s;\bdefault_recipi[-]*\n* *[]*ent_refill_limit\b;$&;g; - s;\bdefault_recipi[-]*\n* *[]*ent_refill_delay\b;$&;g; + s;\bdefault_recipi[-]*\n* *[]*ent_re[-]*\n* *[]*fill_limit\b;$&;g; + s;\bdefault_recipi[-]*\n* *[]*ent_re[-]*\n* *[]*fill_delay\b;$&;g; s;\bdefault_recip[-]*\n* *[]*ient_limit\b;$&;g; s;\bdefault_transport\b;$&;g; s;\bsender[-]*\n* *[]*_de[-]*\n* *[]*pen[-]*\n* *[]*dent_de[-]*\n* *[]*fault[-]*\n* *[]*_trans[-]*\n* *[]*port[-]*\n* *[]*_maps\b;$&;g; @@ -197,6 +198,7 @@ while (<>) { s;\bheader_address_token_limit\b;$&;g; s;\bheader_checks\b;$&;g; s;\bheader_size_limit\b;$&;g; + s;\bheader_from_format\b;$&;g; s;\bhelpful_warnings\b;$&;g; s;\bhome_mailbox\b;$&;g; s;\bhopcount_limit\b;$&;g; @@ -207,7 +209,7 @@ while (<>) { s;\bin_flow_delay\b;$&;g; s;\binet_inter[-]*\n*[ ]*faces\b;$&;g; s;\binet_protocols\b;$&;g; - s;\binitial_desti[-]*\n*[ ]*nation_concur[-]*\n*[ ]*rency\b;$&;g; + s;\binitial_desti[-]*\n*[ ]*nation_con[-]*\n*[ ]*cur[-]*\n*[ ]*rency\b;$&;g; s;\binvalid_hostname_reject_code\b;$&;g; s;\bipc_idle\b;$&;g; s;\bipc_timeout\b;$&;g; @@ -215,6 +217,7 @@ while (<>) { s;\bline_length_limit\b;$&;g; s;\blmdb_map_size\b;$&;g; s;\blmtp_address_preference\b;$&;g; + s;\blmtp_bind_address_enforce\b;$&;g; s;\blmtp_body_checks\b;$&;g; s;\blmtp_cname_overrides_servername\b;$&;g; s;\blmtp_delivery_status_filter\b;$&;g; @@ -398,12 +401,12 @@ while (<>) { s;\bqmqpd_authorized_clients\b;$&;g; s;\bservice_name\b;$&;g; - s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_concur[-]*\n* *[]*rency_negative_feedback\b;$&;g; - s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_concur[-]*\n* *[]*rency_positive_feedback\b;$&;g; - s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_con[-]*\n* *[]*currency_failed_cohort_limit\b;$&;g; + s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_con[-]*\n* *[]*cur[-]*\n* *[]*rency_negative_feedback\b;$&;g; + s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_con[-]*\n* *[]*cur[-]*\n* *[]*rency_positive_feedback\b;$&;g; + s;\bdefault_desti[-]*\n* *[]*na[-]*\n* *[]*tion_con[-]*\n* *[]*cur[-]*\n* *[]*rency_failed_cohort_limit\b;$&;g; s;\bdestination_concurrency_feedback_debug\b;$&;g; s;\bdefault_destina[-]*\n* *[]*tion_rate_delay\b;$&;g; - s;\bdefault_trans[-<\/bB>]*\n*[ ]*port_rate_delay\b;$&;g; + s;\bdefault_trans[-<\/bB>]*\n*[ ]*port_rate_de[-<\/bB>]*\n*[ ]*lay\b;$&;g; s;\bmeta_directory\b;$&;g; s;\bqmqpd_client_port_logging\b;$&;g; @@ -710,6 +713,7 @@ while (<>) { s;\bsmtpd_sasl_tls_security_options\b;$&;g; s;\bsmtpd_sasl_type\b;$&;g; s;\bsmtpd_sasl_mechanism_filter\b;$&;g; + s;\bsmtpd_sasl_service\b;$&;g; s;\bsmtpd_start[-]*\n* *[]*tls_timeout\b;$&;g; s;\bsmtpd_tls_CAfile\b;$&;g; s;\bsmtpd_tls_CApath\b;$&;g; @@ -769,7 +773,7 @@ while (<>) { s;\btls_preempt_cipherlist\b;$&;g; s;\btls_disable_workarounds\b;$&;g; s;\btls_append_default_CA\b;$&;g; - s;\btls_legacy_public_key_fingerprints\b;$&;g; + s;\btls_legacy_public_key_fingerprints\b;$&;g; s;\btls_dane_digests\b;$&;g; s;\btls_wildcard_matches_multiple_labels\b;$&;g; s;\btls_session_ticket_cipher\b;$&;g; @@ -786,24 +790,26 @@ while (<>) { s;\bknown_tcp_ports\b;$&;g; # Transport-dependent magical parameters. - - s;(transport)()?(_destination_concurrency_failed_cohort_limit)\b;$2$1$3;g; - s;(transport)()?(_destination_concurrency_negative_feedback)\b;$2$1$3;g; - s;(transport)()?(_destination_concurrency_positive_feedback)\b;$2$1$3;g; - s;(transport)()?(_delivery_slot_cost)\b;$2$1$3;g; - s;(transport)()?(_delivery_slot_discount)\b;$2$1$3;g; - s;(transport)()?(_delivery_slot_loan)\b;$2$1$3;g; - s;(transport)()?(_destination_concurrency_limit)\b;$2$1$3;g; - s;(transport)()?(_destination_recipient_limit)\b;$2$1$3;g; - s;(transport)()?(_extra_recipient_limit)\b;$2$1$3;g; - s;(transport)()?(_initial_destination_concurrency)\b;$2$1$3;g; - s;(transport)()?(_minimum_delivery_slots)\b;$2$1$3;g; - s;(transport)()?(_recipient_limit)\b;$2$1$3;g; - s;(transport)()?(_recipient_refill_delay)\b;$2$1$3;g; - s;(transport)()?(_recipient_refill_limit)\b;$2$1$3;g; - s;(transport)()?(_time_limit)\b;$2$1$3;g; - s;(transport)()?(_destination_rate_delay)\b;$2$1$3;g; - s;(transport)()?(_transport_rate_delay)\b;$2$1$3;g; + # Note: Accept non-italic "transport" prefix for content that has been + # converted from troff in C sources. Tooling doesn't support bold+italic. + + s;((?:)?transport(?:)?)()?(_destination_concurrency_failed_cohort_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_destination_concurrency_negative_feedback)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_destination_concurrency_positive_feedback)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_delivery_slot_cost)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_delivery_slot_discount)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_delivery_slot_loan)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_destination_concurrency_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_destination_recipient_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_extra_recipient_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_initial_destination_concurrency)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_minimum_delivery_slots)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_recipient_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_recipient_refill_delay)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_recipient_refill_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_time_limit)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_destination_rate_delay)\b;$2$1$3;g; + s;((?:)?transport(?:)?)()?(_transport_rate_delay)\b;$2$1$3;g; # Undo hyperlinks of manual pages with the same name as parameters. @@ -1180,30 +1186,32 @@ while (<>) { $printit = 0; next LINE; } - s/canonical domains*/$&<\/a>/; - s/hosted domains*/$&<\/a>/; - #s/other domains*/&<\/a>/ - s/virtual alias example/$&<\/a>/; - s/virtual mailbox example/$&<\/a>/; - s/local domains*/$&<\/a>/; - s/virtual alias domains*/$&<\/a>/; - s/virtual ALIAS domains*/$&<\/a>/; - s/virtual mailbox domains*/$&<\/a>/; - s/virtual MAILBOX domains*/$&<\/a>/; - s/relay domains*/$&<\/a>/; - s/default domains*/$&<\/a>/; - s/mydestination domains*/$&<\/a>/; - s/\b"*maildrop"* *queues*\b/$&<\/a>/; - s/\b("*maildrop"*),/$1<\/a>,/; - s/\b("*incoming"*) and\b/$1<\/a> and/; - s/\b("*incoming"*) or\b/$1<\/a> or/; - s/\b"*incoming"* *queues*\b/$&<\/a>/; - s/ *incoming *<\/b> *queues*\b/$&<\/a>/; - s/\b"*active"* *queues*\b/$&<\/a>/; - s/\b"*deferred"* *queues*\b/$&<\/a>/; - s/\b"*hold"* *queues*\b/$&<\/a>/; - s/\b("*hold"*),/$1<\/a>,/; - s/\b(postfix *tls)\b/$1<\/a>/; + s/canonical domains*/$&<\/a>/g; + s/hosted domains*/$&<\/a>/g; + #s/other domains*/&<\/a>/g; + s/virtual alias example/$&<\/a>/g; + s/virtual mailbox example/$&<\/a>/g; + s/local domains*/$&<\/a>/g; + s/virtual alias domains*/$&<\/a>/g; + s/virtual ALIAS domains*/$&<\/a>/g; + s/virtual mailbox domains*/$&<\/a>/g; + s/virtual MAILBOX domains*/$&<\/a>/g; + s/relay domains*/$&<\/a>/g; + s/default domains*/$&<\/a>/g; + s/mydestination domains*/$&<\/a>/g; + s/\b"*maildrop"* *queues*\b/$&<\/a>/g; + s/\b("*maildrop"*),/$1<\/a>,/g; + s/\b(?$1<\/a>,/g; + s/\b("*incoming"*) and\b/$1<\/a> and/g; + s/\b("*incoming"*) or\b/$1<\/a> or/g; + s/\b"*incoming"* *queues*\b/$&<\/a>/g; + s/ *incoming *<\/b> *queues*\b/$&<\/a>/g; + s/\b("*active"*) and\b/$1<\/a> and/g; + s/\b"*active"* *queues*\b/$&<\/a>/ig; + s/\b"*deferred"* *queues*\b/$&<\/a>/g; + s/\b"*hold"* *queues*\b/$&<\/a>/g; + s/\b("*hold"*),/$1<\/a>,/g; + s/\b(postfix *tls)\b/$1<\/a>/g; # Hyperlink map types. @@ -1215,7 +1223,7 @@ while (<>) { s/\b(fail):/$1<\/a>:/g; s/\b(hash):/$1<\/a>:/g; s/\b(internal):/$1<\/a>:/g; - s/\b(ldap):/$1<\/a>:/g; + s/\b(ldap[is]?):/$1<\/a>:/g; s/\b(lmdb):/$1<\/a>:/g; s/\b(memcache):/$1<\/a>:/g; s/\b(mysql):/$1<\/a>:/g; @@ -1245,8 +1253,9 @@ while (<>) { s/([^\/])\b(virtual):/$1$2<\/a>:/g; # Database library dependencies. + # Note: Exclude AUXLIBS_SDBM because there is no SDBM_README. - s/\b(AUXLIBS_)([A-Z]+)\b/$1$2<\/a>/g; + s/\b(AUXLIBS_(?!SDBM))([A-Z]+)\b/$1$2<\/a>/g; } continue { if ($printit) diff --git a/postfix/postfix-install b/postfix/postfix-install index e498cd34a..f6780e7fd 100644 --- a/postfix/postfix-install +++ b/postfix/postfix-install @@ -110,7 +110,7 @@ # This parameter setting is recorded in the installed main.cf file. # .IP command_directory # The final destination directory for Postfix administrative commands. -# This directory should be in the command search path of adminstrative +# This directory should be in the command search path of administrative # users. The built-in default directory name is system dependent. # This parameter setting is recorded in the installed main.cf file. # .IP html_directory @@ -405,7 +405,7 @@ in the command search path of any users." command_directory_prompt="the final destination directory for installed Postfix administrative commands. This directory should -be in the command search path of adminstrative users." +be in the command search path of administrative users." queue_directory_prompt="the final destination directory for Postfix queues." diff --git a/postfix/proto/ADDRESS_REWRITING_README.html b/postfix/proto/ADDRESS_REWRITING_README.html index 9a0e685b6..8c60b765a 100644 --- a/postfix/proto/ADDRESS_REWRITING_README.html +++ b/postfix/proto/ADDRESS_REWRITING_README.html @@ -493,8 +493,8 @@ document.

      • Rewrite "user@host" to "user@host.$mydomain"

        This feature is controlled by the boolean append_dot_mydomain -parameter (default: yes). The purpose is to get consistent treatment -of different forms of the same hostname.

        +parameter (default: Postfix ≥ 3.0: no, Postfix < 3.0: yes). The purpose +is to get consistent treatment of different forms of the same hostname.

        NOTE: Postfix versions 2.2 and later rewrite message headers from remote SMTP clients only if the client matches the diff --git a/postfix/proto/BACKSCATTER_README.html b/postfix/proto/BACKSCATTER_README.html index 1f90e00cb..aae943091 100644 --- a/postfix/proto/BACKSCATTER_README.html +++ b/postfix/proto/BACKSCATTER_README.html @@ -302,7 +302,7 @@ many users configure their email addresses as username@example.com, messages with DSN turned on will trigger the REJECT action in the previous section.

        -

        If you have such clients then you can to exclude their Message-ID +

        If you have such clients then you can exclude their Message-ID strings with the two "Message-ID:.* <!&!" patterns that are shown in the previous section. Otherwise you will not be able to use the two backscatter rules to stop forged Message ID @@ -382,7 +382,8 @@ above techniques to recognize forgeries.

        because there is a lot of variation in report formats. The following is only a small example of message header patterns. For a large collection of header and body patterns that recognize virus -notification email, see http://www.dkuug.dk/keld/virus/ +notification email, see +https://web.archive.org/web/20100317123907/http://std.dkuug.dk/keld/virus/ or http://www.t29.dk/antiantivirus.txt.

        diff --git a/postfix/proto/BASIC_CONFIGURATION_README.html b/postfix/proto/BASIC_CONFIGURATION_README.html index 4d6244b6c..531dbf9d8 100644 --- a/postfix/proto/BASIC_CONFIGURATION_README.html +++ b/postfix/proto/BASIC_CONFIGURATION_README.html @@ -264,7 +264,7 @@ clients that send mail from outside an authorized network block. This is explained in the SASL_README and TLS_README documents.

        IMPORTANT: If your machine is connected to a wide area network -then the "mynetworks_style = host" setting may be too friendly.

        +then the "mynetworks_style = subnet" setting may be too friendly.

        Examples (specify only one of the following):

        @@ -286,13 +286,15 @@ parameter value.
        internal
        -
        A non-shared, in-memory hash table. Its content are lost when +
        A non-shared, in-memory hash table. Its contents are lost when a process terminates.
        lmdb
        diff --git a/postfix/proto/DEBUG_README.html b/postfix/proto/DEBUG_README.html index a5778efa6..ea62cdc48 100644 --- a/postfix/proto/DEBUG_README.html +++ b/postfix/proto/DEBUG_README.html @@ -577,11 +577,11 @@ or 1000+ lines of postconf command output.

    • Better, provide output from the postfinger tool. -This can be found at http://ftp.wl0.org/SOURCES/postfinger.

      +This can be found at https://github.com/ford--prefect/postfinger.

    • If the problem is SASL related, consider including the output from the saslfinger tool. This can be found at -http://postfix.state-of-mind.de/patrick.koetter/saslfinger/.

      +https://packages.debian.org/search?keywords=sasl2-bin.

    • If the problem is about too much mail in the queue, consider including output from the qshape tool, as described in the diff --git a/postfix/proto/FORWARD_SECRECY_README.html b/postfix/proto/FORWARD_SECRECY_README.html index d2bab2af7..0ed87d618 100644 --- a/postfix/proto/FORWARD_SECRECY_README.html +++ b/postfix/proto/FORWARD_SECRECY_README.html @@ -176,7 +176,7 @@ and is not recommended for now.

      EDH Server support

      -

      Postfix ≥ 2.2 support 1024-bit-prime EDH out of the box, +

      Postfix ≥ 2.2 supports 1024-bit-prime EDH out of the box, with no additional configuration, but you may want to override the default prime to be 2048 bits long, and you may want to regenerate your primes periodically. See the quick-start @@ -218,7 +218,7 @@ for the recommended configuration to work around this issue.

      EECDH Server support

      -

      Postfix ≥ 2.6 support NIST P-256 EECDH when built with OpenSSL +

      Postfix ≥ 2.6 supports NIST P-256 EECDH when built with OpenSSL ≥ 1.0.0. When the remote SMTP client also supports EECDH and implements the P-256 curve, forward secrecy just works.

      @@ -530,7 +530,7 @@ This pattern is likely to persist until some new key-exchange mechanism is invented that also supports forward secrecy.

      The actual key length and raw algorithm key length -are generally the same with non-export ciphers, but may they +are generally the same with non-export ciphers, but they may differ for the legacy export ciphers where the actual key is artificially shortened.

      diff --git a/postfix/proto/INSTALL.html b/postfix/proto/INSTALL.html index 0091fdbdc..71bcc4ffb 100644 --- a/postfix/proto/INSTALL.html +++ b/postfix/proto/INSTALL.html @@ -534,7 +534,7 @@ built, with "make install" or "make upgrade".

      -

      As with the command "make makefiles, the command "make +

      As with the command "make makefiles", the command "make install/upgrade name=value..." will replace the string MAIL_VERSION at the end of a configuration parameter value with the Postfix release version. Do not try to specify something like $mail_version @@ -1240,7 +1240,7 @@ of:

      Follow the instructions in the "Mandatory configuration file edits" in section 10, and review the "To chroot or not to chroot" text in section +href="#hamlet">To chroot or not to chroot" text in section 11.

      Start the Postfix system:

      @@ -1565,6 +1565,7 @@ following commands:

       # newaliases
       # sendmail -bi
      +# postalias /etc/aliases (pathname is system dependent!)
       
      diff --git a/postfix/proto/IPV6_README.html b/postfix/proto/IPV6_README.html index db0dc61e6..01ea51bae 100644 --- a/postfix/proto/IPV6_README.html +++ b/postfix/proto/IPV6_README.html @@ -153,7 +153,7 @@ mynetworks = 127.0.0.0/8 168.100.189.0/28 [::1]/128 [fe80::]/10 [2001:240:587::]

      If you did specify the mynetworks parameter value in -main.cf, you need update the mynetworks value to include +main.cf, you need to update the mynetworks value to include the IPv6 networks the system is in. Be sure to specify IPv6 address information inside "[]", like this:

      diff --git a/postfix/proto/LDAP_README.html b/postfix/proto/LDAP_README.html index a105ff6d5..720d1c0d4 100644 --- a/postfix/proto/LDAP_README.html +++ b/postfix/proto/LDAP_README.html @@ -533,7 +533,7 @@ query_filter = (&(mailacceptinggeneralid=%s)(!(|(maildrop="*|*")(maildrop="* -
    • And for that matter, even for aliases, you may not want users able to +

    • And for that matter, even for aliases, you may not want users to be able to specify their maildrops as programs, includes, etc. This might be particularly pertinent on a "sealed" server where they don't have local UNIX accounts, but exist only in LDAP and Cyrus. You might allow diff --git a/postfix/proto/LINUX_README.html b/postfix/proto/LINUX_README.html index 71e0a63db..f04375e31 100644 --- a/postfix/proto/LINUX_README.html +++ b/postfix/proto/LINUX_README.html @@ -20,10 +20,10 @@

      Host lookup issues

      By default Linux /etc/hosts lookups do not support multiple IP -address per hostname. This causes warnings from the Postfix SMTP +addresses per hostname. This causes warnings from the Postfix SMTP server that "hostname XXX does not resolve to address YYY", and is especially a problem with hosts that have both IPv4 and IPv6 -addresses. To fix, turn on support for multiple IP addresses:

      +addresses. To fix this, turn on support for multiple IP addresses:

      @@ -73,7 +73,7 @@ library routines.  See the DB_README file for further information.
       
       

      On RedHat Linux 7.1 and later procmail no longer has permission -to write the mail spool directory. Workaround:

      +to write to the mail spool directory. Workaround:

      diff --git a/postfix/proto/MAILLOG_README.html b/postfix/proto/MAILLOG_README.html
      index 6f9882ec8..5a19a92e5 100644
      --- a/postfix/proto/MAILLOG_README.html
      +++ b/postfix/proto/MAILLOG_README.html
      @@ -129,7 +129,7 @@ program is configured with the maillog_file_compressor parameter
       
       
        -
      • This command will not rotate a logfile with pathname under +

      • This command will not rotate a logfile with a pathname under the /dev directory, such as /dev/stdout.

      • This command does not (yet) remove old logfiles.

        @@ -146,7 +146,7 @@ the /dev directory, such as /dev/stdout.

        in the background, as well as non-daemon programs for local mail submission or Postfix management. -
      • Logging to Postfix logfile or stdout requires the Postfix +

      • Logging to the Postfix logfile or stdout requires the Postfix postlogd(8) service. This ensures that simultaneous logging from different programs will not get mixed up.

        diff --git a/postfix/proto/MILTER_README.html b/postfix/proto/MILTER_README.html index 346d1cc55..a0d5ac692 100644 --- a/postfix/proto/MILTER_README.html +++ b/postfix/proto/MILTER_README.html @@ -309,7 +309,8 @@ from other Milter applications.

        unix:pathname

        Connect to the local UNIX-domain server that is bound to the specified pathname. If the smtpd(8) or cleanup(8) process runs chrooted, an absolute pathname -is interpreted relative to the Postfix queue directory.

        +is interpreted relative to the Postfix queue directory. On many +systems, local is a synonym for unix

        inet:host:port

        Connect to the specified TCP port on the specified local or remote @@ -758,7 +759,7 @@ transaction (for example; queue ID, sender, or recipient).

        you may specify macro default values with the milter_macro_defaults parameter. Specify zero or more name=value pairs separated by comma or whitespace; you may even specify macro names that Postfix does -know about!

        +not know about!

        Workarounds

        diff --git a/postfix/proto/MULTI_INSTANCE_README.html b/postfix/proto/MULTI_INSTANCE_README.html index d0e1f551f..196f80405 100644 --- a/postfix/proto/MULTI_INSTANCE_README.html +++ b/postfix/proto/MULTI_INSTANCE_README.html @@ -259,7 +259,7 @@ EOF
      -

      The test message should be delivered the members of the "mtaadmin" +

      The test message should be delivered to the members of the "mtaadmin" address group (or whatever address group you choose) with the following headers:

      @@ -378,7 +378,7 @@ post-filter re-injection SMTP service. Typical additions include:

      smtpd_relay_restrictions = smtpd_recipient_restrictions = permit_mynetworks, reject - # Tolerate occasional high latency in the content filter. + # Tolerate occasional high latency in the content filter. # smtpd_timeout = 1200s diff --git a/postfix/proto/MYSQL_README.html b/postfix/proto/MYSQL_README.html index fc7bdc997..db52f02f5 100644 --- a/postfix/proto/MYSQL_README.html +++ b/postfix/proto/MYSQL_README.html @@ -46,8 +46,7 @@ There is no need to recompile Postfix.

      which can be obtained from:

      -

      http://www.mysql.com/downloads/
      - http://sourceforge.net/projects/mysql/

      +

      http://www.mysql.com/downloads/

      In order to build Postfix with mysql map support, you will need to add @@ -178,7 +177,7 @@ main.cf configuration feature.

    • Liviu Daia with further refinements from Jose Luis Tallon and Victor Duchovni developed the common query, result_format, domain and -expansion_limit interface for LDAP, MySQL and PosgreSQL.
    • +expansion_limit interface for LDAP, MySQL and PostgreSQL.
    diff --git a/postfix/proto/POSTSCREEN_3_5_README.html b/postfix/proto/POSTSCREEN_3_5_README.html index c3d865333..56db3799a 100644 --- a/postfix/proto/POSTSCREEN_3_5_README.html +++ b/postfix/proto/POSTSCREEN_3_5_README.html @@ -228,7 +228,8 @@ temporary allowlist is not used for SMTP client addresses that appear on the permanent access list.

    By default the temporary allowlist is not shared with other -postscreen(8) daemons. See Sharing +postscreen(8) daemons. See + Sharing the temporary allowlist below for alternatives.

    When the SMTP client address appears on the temporary @@ -266,9 +267,9 @@ failure.

    • First, configure the host to listen on both primary and -backup MX addresses. Use the appropriate ifconfig command -for the local operating system, or update the appropriate configuration -files and "refresh" the network protocol stack.

      +backup MX addresses. Use the appropriate ifconfig or ip +command for the local operating system, or update the appropriate +configuration files and "refresh" the network protocol stack.

      Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in @@ -310,7 +311,8 @@ interval before the "220 text..." server greeting, where postscreen(8) can run a number of tests in parallel.

      When a good client passes these tests, and no "deep protocol tests" are configured, postscreen(8) +href="#after_220">deep protocol tests" +are configured, postscreen(8) adds the client to the temporary allowlist and hands off the "live" connection to a Postfix SMTP server process. The client can then continue as if postscreen(8) never even existed (except of course @@ -512,7 +514,8 @@ service, so that they never have to deal with postscreen(8)'s tests. receiver send one command and one response at a time. Unlike the Postfix SMTP server, postscreen(8) does not announce support for ESMTP command pipelining. Therefore, clients are not allowed -to send multiple commands. postscreen(8)'s deep +to send multiple commands. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_pipelining_enable = yes", postscreen(8) detects @@ -546,7 +549,8 @@ after the 220 SMTP server greeting" below.

      of this is the usage of commands such as CONNECT and other non-SMTP commands. Just like the Postfix SMTP server's smtpd_forbidden_commands feature, postscreen(8) has an equivalent postscreen_forbidden_commands -feature to block these clients. postscreen(8)'s deep +feature to block these clients. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_non_smtp_command_enable = yes", postscreen(8) @@ -583,7 +587,8 @@ tests fail after the 220 SMTP server greeting" below.

      SMTP is a line-oriented protocol: lines have a limited length, and are terminated with <CR><LF>. Lines ending in a "bare" <LF>, that is newline not preceded by carriage return, -are not allowed in SMTP. postscreen(8)'s deep +are not allowed in SMTP. postscreen(8)'s +deep protocol test for this is disabled by default.

      With "postscreen_bare_newline_enable = yes", postscreen(8) @@ -902,14 +907,15 @@ Postfix version 2.8.

    • Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" -output shows "parametername = -${stress?something}${stress:something}"). +output shows +"parametername = ${stress?something}${stress:something}" or +"parametername = ${stress?{something}:{something}}"). Other parameters always evaluate as if the stress value is the empty string.

    • See "Tests before the 220 SMTP server -greeting" for details about the logging from these postscreen(8) -tests.

      +greeting" for details about the logging from these +postscreen(8) tests.

    • If you run Postfix 2.6 or earlier you must stop and start the master daemon ("postfix stop; postfix start"). This @@ -983,7 +989,8 @@ tests", but these are more intrusive than the pregreet or DNSBL tests.

      When a good client passes the "deep -protocol tests", postscreen(8) adds the client to the temporary +protocol tests", +postscreen(8) adds the client to the temporary allowlist but it cannot hand off the "live" connection to a Postfix SMTP server process in the middle of the session. Instead, postscreen(8) defers mail delivery attempts with a 4XX status, logs the diff --git a/postfix/proto/POSTSCREEN_README.html b/postfix/proto/POSTSCREEN_README.html index 4e82aaf86..8ab32359d 100644 --- a/postfix/proto/POSTSCREEN_README.html +++ b/postfix/proto/POSTSCREEN_README.html @@ -239,7 +239,8 @@ temporary allowlist is not used for SMTP client addresses that appear on the permanent access list.

      By default the temporary allowlist is not shared with other -postscreen(8) daemons. See Sharing +postscreen(8) daemons. See + Sharing the temporary allowlist below for alternatives.

      When the SMTP client address appears on the temporary @@ -277,9 +278,9 @@ failure.

      • First, configure the host to listen on both primary and -backup MX addresses. Use the appropriate ifconfig command -for the local operating system, or update the appropriate configuration -files and "refresh" the network protocol stack.

        +backup MX addresses. Use the appropriate ifconfig or ip +command for the local operating system, or update the appropriate +configuration files and "refresh" the network protocol stack.

        Second, configure Postfix to listen on the new IP address (this step is needed when you have specified inet_interfaces in @@ -324,7 +325,8 @@ interval before the "220 text..." server greeting, where postscreen(8) can run a number of tests in parallel.

        When a good client passes these tests, and no "deep protocol tests" are configured, postscreen(8) +href="#after_220">deep protocol tests" +are configured, postscreen(8) adds the client to the temporary allowlist and hands off the "live" connection to a Postfix SMTP server process. The client can then continue as if postscreen(8) never even existed (except of course @@ -526,7 +528,8 @@ service, so that they never have to deal with postscreen(8)'s tests. receiver send one command and one response at a time. Unlike the Postfix SMTP server, postscreen(8) does not announce support for ESMTP command pipelining. Therefore, clients are not allowed -to send multiple commands. postscreen(8)'s deep +to send multiple commands. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_pipelining_enable = yes", postscreen(8) detects @@ -560,7 +563,8 @@ after the 220 SMTP server greeting" below.

        of this is the usage of commands such as CONNECT and other non-SMTP commands. Just like the Postfix SMTP server's smtpd_forbidden_commands feature, postscreen(8) has an equivalent postscreen_forbidden_commands -feature to block these clients. postscreen(8)'s deep +feature to block these clients. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_non_smtp_command_enable = yes", postscreen(8) @@ -597,7 +601,8 @@ tests fail after the 220 SMTP server greeting" below.

        SMTP is a line-oriented protocol: lines have a limited length, and are terminated with <CR><LF>. Lines ending in a "bare" <LF>, that is newline not preceded by carriage return, -are not allowed in SMTP. postscreen(8)'s deep +are not allowed in SMTP. postscreen(8)'s +deep protocol test for this is disabled by default.

        With "postscreen_bare_newline_enable = yes", postscreen(8) @@ -916,14 +921,15 @@ Postfix version 2.8.

      • Some postscreen(8) configuration parameters implement stress-dependent behavior. This is supported only when the default value is stress-dependent (that is, "postconf -d parametername" -output shows "parametername = -${stress?something}${stress:something}"). +output shows +"parametername = ${stress?something}${stress:something}" or +"parametername = ${stress?{something}:{something}}"). Other parameters always evaluate as if the stress value is the empty string.

      • See "Tests before the 220 SMTP server -greeting" for details about the logging from these postscreen(8) -tests.

        +greeting" for details about the logging from these +postscreen(8) tests.

      • If you run Postfix 2.6 or earlier you must stop and start the master daemon ("postfix stop; postfix start"). This @@ -997,7 +1003,8 @@ tests", but these are more intrusive than the pregreet or DNSBL tests.

        When a good client passes the "deep -protocol tests", postscreen(8) adds the client to the temporary +protocol tests", +postscreen(8) adds the client to the temporary allowlist but it cannot hand off the "live" connection to a Postfix SMTP server process in the middle of the session. Instead, postscreen(8) defers mail delivery attempts with a 4XX status, logs the diff --git a/postfix/proto/QSHAPE_README.html b/postfix/proto/QSHAPE_README.html index 2bf47be13..6956b46c7 100644 --- a/postfix/proto/QSHAPE_README.html +++ b/postfix/proto/QSHAPE_README.html @@ -120,11 +120,11 @@ minutes old and 12 older than 1280 minutes (1440 minutes in a day).

        When the output is a terminal intermediate results showing the top 20 domains (-n option) are displayed after every 1000 messages (-N option) and the final output also shows only the top 20 domains. This makes -qshape useful even when the deferred queue is very large and it may -otherwise take prohibitively long to read the entire deferred queue.

        +qshape useful even when the "deferred" queue is very large and it may +otherwise take prohibitively long to read the entire "deferred" queue.

        By default, qshape shows statistics for the union of both the -incoming and active queues which are the most relevant queues to +"incoming" and "active" queues which are the most relevant queues to look at when analyzing performance.

        One can request an alternate list of queues:

        @@ -136,8 +136,8 @@ $ qshape incoming active deferred -

        this will show the age distribution of the deferred queue or -the union of the incoming active and deferred queues.

        +

        this will show the age distribution of the "deferred" queue or +the union of the "incoming", "active" and "deferred" queues.

        Command line options control the number of display "buckets", the age limit for the smallest bucket, display of parent domain @@ -154,7 +154,7 @@ dominate the queue sender or recipient counts, approximately when a burst of mail started, and when it stopped.

        The problem destinations or sender domains appear near the top -left corner of the output table. Remember that the active queue +left corner of the output table. Remember that the "active" queue can accommodate up to 20000 ($qmgr_message_active_limit) messages. To check whether this limit has been reached, use:

        @@ -164,11 +164,11 @@ $ qshape -s active (show sender statistics) -

        If the total sender count is below 20000 the active queue is +

        If the total sender count is below 20000 the "active" queue is not yet saturated, any high volume sender domains show near the top of the output. -

        With oqmgr(8) the active queue is also limited to at most 20000 +

        With oqmgr(8) the "active" queue is also limited to at most 20000 recipient addresses ($qmgr_message_recipient_limit). To check for exhaustion of this limit use:

        @@ -223,15 +223,15 @@ output.

        Example 1: Healthy queue

        -

        When looking at just the incoming and active queues, under -normal conditions (no congestion) the incoming and active queues +

        When looking at just the "incoming" and "active" queues, under +normal conditions (no congestion) the "incoming" and "active" queues are nearly empty. Mail leaves the system almost as quickly as it -comes in or is deferred without congestion in the active queue. +comes in or is deferred without congestion in the "active" queue.

        -$ qshape        (show incoming and active queue status)
        +$ qshape        (show "incoming" and "active" queue status)
         
                          T  5 10 20 40 80 160 320 640 1280 1280+
                   TOTAL  5  0  0  0  1  0   0   0   1    1     2
        @@ -239,9 +239,9 @@ $ qshape        (show incoming and active queue status)
         
        -

        If one looks at the two queues separately, the incoming queue +

        If one looks at the two queues separately, the "incoming" queue is empty or perhaps briefly has one or two messages, while the -active queue holds more messages and for a somewhat longer time: +"active" queue holds more messages and for a somewhat longer time:

        @@ -266,7 +266,7 @@ dictionary attack bounces available for some of the hosted domains. Dictionary attacks on the unvalidated domains result in bounce backscatter. The bounces dominate the queue, but with proper tuning they do not saturate the -incoming or active queues. The high volume of deferred mail is not +"incoming" or "active" queues. The high volume of deferred mail is not a direct cause for alarm.

        @@ -290,7 +290,7 @@ $ qshape deferred | head is the tail end of the time distribution, showing that short term arrival rates are moderate. Larger numbers and lower message ages are more indicative of current trouble. Old mail still going nowhere -is largely harmless so long as the active and incoming queues are +is largely harmless so long as the "active" and "incoming" queues are short. We can also see that the groups.msn.com undeliverables are low rate steady stream rather than a concentrated dictionary attack that is now over.

        @@ -318,8 +318,9 @@ most of the messages are bounces.

        queue

        This example is taken from a Feb 2004 discussion on the Postfix -Users list. Congestion was reported with the active and incoming -queues large and not shrinking despite very large delivery agent +Users list. Congestion was reported with the +"active" and "incoming" queues +large and not shrinking despite very large delivery agent process limits. The thread is archived at: http://groups.google.com/groups?threadm=c0b7js$2r65$1@FreeBSD.csie.NCTU.edu.tw and @@ -331,7 +332,7 @@ that all the messages were for just a few destinations:

        -$ qshape        (show incoming and active queue status)
        +$ qshape        (show "incoming" and "active" queue status)
         
                                    T   A   5  10  20  40  80 160 320 320+
                          TOTAL 11775 9996  0   0   1   1  42  94 221 1420
        @@ -341,10 +342,10 @@ $ qshape        (show incoming and active queue status)
         
        -

        The "A" column showed the count of messages in the active queue, -and the numbered columns showed totals for the deferred queue. At -10000 messages (Postfix 1.x active queue size limit) the active -queue is full. The incoming was growing rapidly.

        +

        The "A" column showed the count of messages in the "active" queue, +and the numbered columns showed totals for the "deferred" queue. At +10000 messages (Postfix 1.x "active" queue size limit) the "active" queue +is full. The "incoming" queue was growing rapidly.

        With the trouble destinations clearly identified, the administrator quickly found and fixed the problem. It is substantially harder to @@ -356,8 +357,8 @@ one message at a time.

        Example 4: High volume destination backlog

        When a site you send a lot of email to is down or slow, mail -messages will rapidly build up in the deferred queue, or worse, in -the active queue. The qshape output will show large numbers for +messages will rapidly build up in the "deferred" queue, or worse, in +the "active" queue. The qshape output will show large numbers for the destination domain in all age buckets that overlap the starting time of the problem:

        @@ -373,13 +374,13 @@ $ qshape deferred | head

        Here the "highvolume.com" destination is continuing to accumulate -deferred mail. The incoming and active queues are fine, but the -deferred queue started growing some time between 1 and 2 hours ago +deferred mail. The "incoming" and "active" queues are fine, but the +"deferred" queue started growing some time between 1 and 2 hours ago and continues to grow.

        If the high volume destination is not down, but is instead -slow, one might see similar congestion in the active queue. Active -queue congestion is a greater cause for alarm; one might need to +slow, one might see similar congestion in the "active" queue. +"Active" queue congestion is a greater cause for alarm; one might need to take measures to ensure that the mail is deferred instead or even add an access(5) rule asking the sender to try again later.

        @@ -616,7 +617,7 @@ submission rate or perhaps excessive CPU consumption in the cleanup(8) service due to excessive body_checks, or (Postfix ≥ 2.3) high latency milters.

        -

        Note, that once the active queue is full, the cleanup service +

        Note, that once the "active" queue is full, the cleanup service will attempt to slow down message injection by pausing $in_flow_delay for each message. In this case "maildrop" queue congestion may be a consequence of congestion downstream, rather than a problem in @@ -651,8 +652,8 @@ can be used to manually release messages into the "deferred" queue.

        Messages can potentially stay in the "hold" queue longer than $maximal_queue_lifetime. If such "old" messages need to be released from -the "hold" queue, they should typically be moved into the "maildrop" -queue using "postsuper -r", so that the message gets a new timestamp and +the "hold" queue, they should typically be moved into the "maildrop" queue +using "postsuper -r", so that the message gets a new timestamp and is given more than one opportunity to be delivered. Messages that are "young" can be moved directly into the "deferred" queue using "postsuper -H".

        @@ -672,21 +673,21 @@ notifies the queue manager of new mail arrival. The queue manager ignores incomplete queue files whose mode is 0600, as these are still being written by cleanup.

        -

        The queue manager scans the incoming queue bringing any new -mail into the "active" queue if the active queue resource limits -have not been exceeded. By default, the active queue accommodates -at most 20000 messages. Once the active queue message limit is -reached, the queue manager stops scanning the incoming (and deferred, -see below) queue.

        +

        The queue manager scans the "incoming" queue bringing any new +mail into the "active" queue if the "active" queue resource limits +have not been exceeded. By default, the "active" queue accommodates +at most 20000 messages. Once the "active" queue message limit is +reached, the queue manager stops scanning the "incoming" queue +(and the "deferred" queue, see below).

        -

        Under normal conditions the incoming queue is nearly empty (has +

        Under normal conditions the "incoming" queue is nearly empty (has only mode 0600 files), with the queue manager able to import new -messages into the active queue as soon as they become available. +messages into the "active" queue as soon as they become available.

        -

        The incoming queue grows when the message input rate spikes +

        The "incoming" queue grows when the message input rate spikes above the rate at which the queue manager can import messages into -the active queue. The main factors slowing down the queue manager +the "active" queue. The main factors slowing down the queue manager are disk I/O and lookup queries to the trivial-rewrite service. If the queue manager is routinely not keeping up, consider not using "slow" lookup services (MySQL, LDAP, ...) for transport lookups or speeding @@ -712,8 +713,8 @@ to 1 message per second, but is not strong enough to deflect an excessive input rate from many sources at the same time.

        If a server is being hammered from multiple directions, consider -raising the in_flow_delay to 10 seconds, but only if the incoming -queue is growing even while the active queue is not full and the +raising the in_flow_delay to 10 seconds, but only if the "incoming" queue +is growing even while the "active" queue is not full and the trivial-rewrite service is using a fast transport lookup mechanism.

        @@ -723,8 +724,8 @@ trivial-rewrite service is using a fast transport lookup mechanism. ensure fast and fair delivery of mail to all destinations within designated resource limits.

        -

        The active queue is somewhat analogous to an operating system's -process run queue. Messages in the active queue are ready to be +

        The "active" queue is somewhat analogous to an operating system's +process run queue. Messages in the "active" queue are ready to be sent (runnable), but are not necessarily in the process of being sent (running).

        @@ -732,15 +733,14 @@ sent (running).

        as a directory on disk, the real "active" queue is a set of data structures in the memory of the queue manager process.

        -

        Messages in the "maildrop", "hold", "incoming" and "deferred" -queues (see below) do not occupy memory; they are safely stored on +

        Messages in the "maildrop", "hold", "incoming" and "deferred" queues +(see below) do not occupy memory; they are safely stored on disk waiting for their turn to be processed. The envelope information for messages in the "active" queue is managed in memory, allowing the queue manager to do global scheduling, allocating available -delivery agent processes to an appropriate message in the active -queue.

        +delivery agent processes to an appropriate message in the "active" queue.

        -

        Within the active queue, (multi-recipient) messages are broken +

        Within the "active" queue, (multi-recipient) messages are broken up into groups of recipients that share the same transport/nexthop combination; the group size is capped by the transport's recipient concurrency limit.

        @@ -756,15 +756,15 @@ concurrency limits. Per-recipient limits are appropriate when performing final delivery to mailboxes rather than when relaying to a remote server.

        -

        Congestion occurs in the active queue when one or more destinations +

        Congestion occurs in the "active" queue when one or more destinations drain slower than the corresponding message input rate.

        -

        Input into the active queue comes both from new mail in the "incoming" -queue, and retries of mail in the "deferred" queue. Should the "deferred" -queue get really large, retries of old mail can dominate the arrival +

        Input into the "active" queue comes both from new mail in the "incoming" queue, +and retries of mail in the "deferred" queue. Should the "deferred" queue +get really large, retries of old mail can dominate the arrival rate of new mail. Systems with more CPU, faster disks and more network -bandwidth can deal with larger deferred queues, but as a rule of thumb -the deferred queue scales to somewhere between 100,000 and 1,000,000 +bandwidth can deal with larger "deferred" queues, but as a rule of thumb +the "deferred" queue scales to somewhere between 100,000 and 1,000,000 messages with good performance unlikely above that "limit". Systems with queues this large should typically stop accepting new mail, or put the backlog "on hold" until the underlying issue is fixed (provided that @@ -773,12 +773,12 @@ there is enough capacity to handle just the new mail).

        When a destination is down for some time, the queue manager will mark it dead, and immediately defer all mail for the destination without trying to assign it to a delivery agent. In this case the messages -will quickly leave the active queue and end up in the deferred queue +will quickly leave the "active" queue and end up in the "deferred" queue (with Postfix < 2.4, this is done directly by the queue manager, with Postfix ≥ 2.4 this is done via the "retry" delivery agent).

        When the destination is instead simply slow, or there is a problem -causing an excessive arrival rate the active queue will grow and will +causing an excessive arrival rate the "active" queue will grow and will become dominated by mail to the congested destination.

        The only way to reduce congestion is to either reduce the input @@ -818,7 +818,7 @@ throughput falls to just over 1 message per second.

        The best way to avoid bottlenecks when one or more MX hosts is non-responsive is to use connection caching. Connection caching was introduced with Postfix 2.2 and is by default enabled on demand for -destinations with a backlog of mail in the active queue. When connection +destinations with a backlog of mail in the "active" queue. When connection caching is in effect for a particular destination, established connections are re-used to send additional messages, this reduces the number of connections made per message delivery and maintains good throughput even @@ -849,20 +849,20 @@ transport allocates a separate delivery agent pool to these destinations and allows separate tuning of timeouts and concurrency limits.

        Another common cause of congestion is unwarranted flushing of the -entire deferred queue. The deferred queue holds messages that are likely +entire "deferred" queue. The "deferred" queue holds messages that are likely to fail to be delivered and are also likely to be slow to fail delivery -(time out). As a result the most common reaction to a large deferred queue +(time out). As a result the most common reaction to a large "deferred" queue (flush it!) is more than likely counter-productive, and typically makes -the congestion worse. Do not flush the deferred queue unless you expect +the congestion worse. Do not flush the "deferred" queue unless you expect that most of its content has recently become deliverable (e.g. relayhost back up after an outage)!

        Note that whenever the queue manager is restarted, there may -already be messages in the active queue directory, but the "real" -active queue in memory is empty. In order to recover the in-memory -state, the queue manager moves all the active queue messages -back into the incoming queue, and then uses its normal incoming -queue scan to refill the active queue. The process of moving all +already be messages in the "active" queue directory, but the "real" +"active" queue in memory is empty. In order to recover the in-memory +state, the queue manager moves all the "active" queue messages +back into the "incoming" queue, and then uses its normal "incoming" queue +scan to refill the "active" queue. The process of moving all the messages back and forth, redoing transport table (trivial-rewrite(8) resolve service) lookups, and re-importing the messages back into memory is expensive. At all costs, avoid frequent restarts of the @@ -872,20 +872,20 @@ queue manager (e.g. via frequent execution of "postfix reload").

        When all the deliverable recipients for a message are delivered, and for some recipients delivery failed for a transient reason (it -might succeed later), the message is placed in the deferred queue. +might succeed later), the message is placed in the "deferred" queue.

        -

        The queue manager scans the deferred queue periodically. The scan -interval is controlled by the queue_run_delay parameter. While a deferred -queue scan is in progress, if an incoming queue scan is also in progress -(ideally these are brief since the incoming queue should be short), the -queue manager alternates between looking for messages in the "incoming" -queue and in the "deferred" queue. This "round-robin" strategy prevents -starvation of either the incoming or the deferred queues.

        - -

        Each deferred queue scan only brings a fraction of the deferred -queue back into the active queue for a retry. This is because each -message in the deferred queue is assigned a "cool-off" time when +

        The queue manager scans the "deferred" queue periodically. The scan +interval is controlled by the queue_run_delay parameter. While a "deferred" queue +scan is in progress, if an "incoming" queue scan is also in progress +(ideally these are brief since the "incoming" queue should be short), the +queue manager alternates between looking for messages in the "incoming" queue +and in the "deferred" queue. This "round-robin" strategy prevents +starvation of either the "incoming" or the "deferred" queues.

        + +

        Each "deferred" queue scan only brings a fraction of the "deferred" queue +back into the "active" queue for a retry. This is because each +message in the "deferred" queue is assigned a "cool-off" time when it is deferred. This is done by time-warping the modification time of the queue file into the future. The queue file is not eligible for a retry if its modification time is not yet reached. @@ -897,36 +897,36 @@ the message's age in the queue, and adjusting up or down to lie within the limits. This means that young messages are initially retried more often than old messages.

        -

        If a high volume site routinely has large deferred queues, it +

        If a high volume site routinely has large "deferred" queues, it may be useful to adjust the queue_run_delay, minimal_backoff_time and maximal_backoff_time to provide short enough delays on first failure (Postfix ≥ 2.4 has a sensibly low minimal backoff time by default), with perhaps longer delays after multiple failures, to reduce the retransmission rate of old messages and thereby reduce the quantity -of previously deferred mail in the active queue. If you want a really +of previously deferred mail in the "active" queue. If you want a really low minimal_backoff_time, you may also want to lower queue_run_delay, but understand that more frequent scans will increase the demand for disk I/O.

        -

        One common cause of large deferred queues is failure to validate +

        One common cause of large "deferred" queues is failure to validate recipients at the SMTP input stage. Since spammers routinely launch dictionary attacks from unrepliable sender addresses, the bounces -for invalid recipient addresses clog the deferred queue (and at high -volumes proportionally clog the active queue). Recipient validation +for invalid recipient addresses clog the "deferred" queue (and at high +volumes proportionally clog the "active" queue). Recipient validation is strongly recommended through use of the local_recipient_maps and relay_recipient_maps parameters. Even when bounces drain quickly they inundate innocent victims of forgery with unwanted email. To avoid this, do not accept mail for invalid recipients.

        When a host with lots of deferred mail is down for some time, -it is possible for the entire deferred queue to reach its retry -time simultaneously. This can lead to a very full active queue once +it is possible for the entire "deferred" queue to reach its retry +time simultaneously. This can lead to a very full "active" queue once the host comes back up. The phenomenon can repeat approximately every maximal_backoff_time seconds if the messages are again deferred after a brief burst of congestion. Perhaps, a future Postfix release will add a random offset to the retry time (or use a combination -of strategies) to reduce the odds of repeated complete deferred -queue flushes.

        +of strategies) to reduce the odds of repeated complete "deferred" queue +flushes.

        Credits

        diff --git a/postfix/proto/SASL_README.html b/postfix/proto/SASL_README.html index 932ef727b..c70d24233 100644 --- a/postfix/proto/SASL_README.html +++ b/postfix/proto/SASL_README.html @@ -960,9 +960,9 @@ file entries:

        ldapdb_uri
        -

        Specify either ldapi:// for to connect over +

        Specify either ldapi:// to connect over a UNIX-domain socket, ldap:// for an unencrypted TCP -connection or ldaps:// for an encrypted TCP connection. +connection, or ldaps:// for an encrypted TCP connection.

        ldapdb_id
        @@ -1809,14 +1809,14 @@ resort.

        tables into one single MySQL database, and configure different Postfix queries to extract the appropriate information.

        -
      • Specify dbm instead of hash if your system uses dbm files -instead of db files. To find out what lookup tables Postfix supports, -use the command "postconf -m".

        +
      • Specify dbm instead of hash if your system uses +dbm files instead of db files. To find out what lookup +tables Postfix supports, use the command "postconf -m".

        -
      • Execute the command "postmap /etc/postfix/sasl_passwd" +

      • Execute the command "postmap /etc/postfix/sasl_passwd" whenever you change the sasl_passwd table.

        -
      • Execute the command "postmap /etc/postfix/sender_relay" +

      • Execute the command "postmap /etc/postfix/sender_relay" whenever you change the sender_relay table.

      @@ -2047,7 +2047,7 @@ necessary; it just makes Postfix configuration a little more convenient because you don't have to specify the SASL plug-in type in the Postfix main.cf file (but this may cause surprises when you switch to a later Postfix version that is built with the default -SASL type of sasl).

      +SASL type of cyrus).

    • @@ -2188,7 +2188,7 @@ it unless you are forced to. The makers of Cyrus SASL write:

      This library is being deprecated and applications should transition to using the SASLv2 library (source: Project Cyrus: +href="http://www.cyrusimap.org/download.html">Project Cyrus: Downloads).

      If you still need to set it up, here's a quick rundown:

      diff --git a/postfix/proto/SCHEDULER_README.html b/postfix/proto/SCHEDULER_README.html index f9c1e7b8b..d80b8f4e3 100644 --- a/postfix/proto/SCHEDULER_README.html +++ b/postfix/proto/SCHEDULER_README.html @@ -720,7 +720,7 @@ nqmgr

      Let's start by recapitulating the structures and terms used when -referring to queue manager and how it operates. Many of these are +referring to the queue manager and how it operates. Many of these are partially described elsewhere, but it is nice to have a coherent overview in one place: @@ -745,7 +745,7 @@ it shall talk to) and jobs (referencing the messages it shall deliver).

    • Each transport queue (not to be confused with the on-disk -active queue or incoming queue) groups everything what is going be +"active" queue or "incoming" queue) groups everything what is going be delivered to given destination (aka nexthop) by its transport. Each queue belongs to one transport, so each destination may be referred to by several queues, one for each transport. Each queue maintains @@ -795,7 +795,7 @@ up the message

      -Whenever nqmgr moves a queue file into the active queue, +Whenever nqmgr moves a queue file into the "active" queue, the following happens: It reads all necessary information from the queue file as oqmgr does, and also reads as many recipients as possible - more on that later, for now let's just pretend it @@ -809,7 +809,7 @@ Then it resolves the recipients as oqmgr does, which means obtaining (address, nexthop, transport) triple for each recipient. For each triple, it finds the transport; if it does not exist yet, it instantiates it (unless it's dead). Within the -transport, it finds the destination queue for given nexthop; if it +transport, it finds the destination queue for the given nexthop; if it does not exist yet, it instantiates it (unless it's dead). The triple is then bound to given destination queue. This happens in qmgr_resolve() and is basically the same as in oqmgr. @@ -826,9 +826,10 @@ the bound destination queue within this jobs context; if it does not exist yet, it instantiates it. Finally, it stores the address from the resolved triple to the recipient entry which is appended to both the queue entry list and the peer entry list. The addresses -for same nexthop are batched in the entries up to recipient_concurrency -limit for that transport. This happens in qmgr_assign() and apart -from that it operates with job and peer structures it is basically the +for the same nexthop are batched in the entries up to the +transport_destination_recipient_limit for that transport. +This happens in qmgr_message_assign(), and apart +from that it operates with job and peer structures, it is basically the same as in oqmgr.

      @@ -845,9 +846,9 @@ time is important as we will see shortly.

      -[Now you should have pretty good idea what is the state of the -nqmgr after couple of messages was picked up, what is the -relation between all those job, peer, queue and entry structures.] +[Now you should have a pretty good idea what the state of the +nqmgr is after a couple of messages were picked up, and what the +relation is between all those job, peer, queue and entry structures.]

      @@ -894,7 +895,8 @@ was picked up by the nqmgr. So by default we get the top-level round-robin transport, and within each transport we get the FIFO message delivery. The round-robin of the peers by the destination is perhaps of little importance in most real-life cases -(unless the recipient_concurrency limit is reached, in one job there +(unless the transport_destination_recipient_limit is reached, +in one job there is only one peer structure for each destination), but theoretically it makes sure that even within single jobs, destinations are treated fairly. @@ -986,11 +988,11 @@ mail followed by two two-recipient mails? The simple answer would be to use delivery sequence 12121313. But the problem is that this does not scale well. Imagine you have -mail with thousand recipients followed by mail with hundred recipients. +mail with a thousand recipients followed by mail with a hundred recipients. It is tempting to suggest the delivery sequence like 121212...., but alas! Imagine there arrives another mail with say ten recipients. But there are no free slots anymore, so it can't slip by, not even -if it had just only one recipients. It will be stuck until the +if it had only one recipient. It will be stuck until the hundred-recipient mail is delivered, which really sucks.

      @@ -998,7 +1000,7 @@ hundred-recipient mail is delivered, which really sucks.

      So, it becomes obvious that while inflating the message to get -free slots is great idea, one has to be really careful of how the +free slots is a great idea, one has to be really careful of how the free slots are assigned, otherwise one might corner himself. So, how does nqmgr really use the free slots? @@ -1032,7 +1034,7 @@ thousand recipient mail?

      -Well, despite it looks so at the first glance, another trick will +Well, despite the fact that it looks so at the first glance, another trick will allow us to answer "no, we are not!". If we had said that we will inflate the delivery time twice at maximum, and then we consider every other slot as a free slot, then we would overinflate in case @@ -1056,7 +1058,7 @@ transport has a transport_delivery_slot_cost parameter, which defaults to default_delivery_slot_cost parameter which is set to 5 by default. This is the k from the paragraph above. Each time k entries of the job are selected for delivery, this counter is -incremented by one. Once there are some slots accumulated, job which +incremented by one. Once there are some slots accumulated, a job which requires no more than that number of slots to be fully delivered can preempt this job. @@ -1066,7 +1068,7 @@ can preempt this job. [Well, the truth is, the counter is incremented every time an entry is selected and it is divided by k when it is used. -But for the understanding it's good enough to use +But to understand, it's good enough to use the above approximation of the truth.]

      @@ -1083,7 +1085,7 @@ and when does all this exactly happen?

      The answer for the first part is simple. The job whose entry was -selected the last time is so called current job. Normally, it is +selected the last time is the so called current job. Normally, it is the first job on the scheduler's job list, but destination concurrency limits may change this as we will see later. It is always only the current job which may get preempted. @@ -1092,7 +1094,7 @@ current job which may get preempted.

      -Now for the second part. The current job has certain amount of +Now for the second part. The current job has a certain amount of recipient entries, and as such may accumulate at maximum some amount of available delivery slots. It might have already accumulated some, and perhaps even already used some when it was preempted before @@ -1111,8 +1113,8 @@ That is, the older the job is, the more we should try to deliver it in order to get best message delivery rates. These rates are of course subject to how many recipients the message has, therefore the division by the recipient (entry) count. No one shall be surprised -that message with n recipients takes n times longer to deliver than -message with one recipient. +that a message with n recipients takes n times longer to deliver than +a message with one recipient.

      @@ -1124,9 +1126,9 @@ delivered within the number of slots the current job already accumulated? Why do we need to estimate how much it has yet to accumulate? If you found out the answer, congratulate yourself. If we did it this simple way, we would always choose the candidate -with least recipient entries. If there were enough single recipient +with the fewest recipient entries. If there were enough single recipient mails coming in, they would always slip by the bulk mail as soon -as possible, and the two and more recipients mail would never get +as possible, and the two or more recipients mail would never get a chance, no matter how long they have been sitting around in the job list. @@ -1134,7 +1136,7 @@ job list.

      -This candidate selection has interesting implication - that when +This candidate selection has an interesting implication - that when we choose the best candidate for preemption (this is done in qmgr_choose_candidate()), it may happen that we may not use it for preemption immediately. This leads to an answer to the last part @@ -1148,12 +1150,12 @@ The preemption attempt happens every time next transport's recipient entry is to be chosen for delivery. To avoid needless overhead, the preemption is not attempted if the current job could never accumulate more than transport_minimum_delivery_slots (defaults to -default_minimum_delivery_slots which defaults to 3). If there is +default_minimum_delivery_slots which defaults to 3). If there are already enough accumulated slots to preempt the current job by the chosen best candidate, it is done immediately. This basically means that the candidate is moved in front of the current job on the scheduler's job list and decreasing the accumulated slot counter -by the amount used by the candidate. If there is not enough slots... +by the amount used by the candidate. If there are not enough slots... well, I could say that nothing happens and the another preemption is attempted the next time. But that's not the complete truth. @@ -1164,13 +1166,13 @@ is attempted the next time. But that's not the complete truth. The truth is that it turns out that it is not really necessary to wait until the jobs counter accumulates all the delivery slots in advance. Say we have ten-recipient mail followed by two two-recipient -mails. If the preemption happened when enough delivery slot accumulate +mails. If the preemption happened when enough delivery slots accumulate (assuming slot cost 2), the delivery sequence becomes 11112211113311. Now what would we get if we would wait only for 50% of the necessary slots to accumulate and we promise we would wait for the remaining 50% later, after we get back -to the preempted job? If we use such slot loan, the delivery sequence -becomes 11221111331111. As we can see, it makes it no +to the preempted job? If we use such a slot loan, the delivery sequence +becomes 11221111331111. As we can see, it makes it not considerably worse for the delivery of the ten-recipient mail, but it allows the small messages to be delivered sooner. @@ -1192,15 +1194,15 @@ accumulated so far.

      -And it pretty much concludes this chapter. +And that pretty much concludes this chapter.

      [Now you should have a feeling that you pretty much understand the -scheduler and the preemption, or at least that you will have it -after you read the last chapter couple more times. You shall clearly +scheduler and the preemption, or at least that you will have +after you read the last chapter a couple more times. You shall clearly see the job list and the preemption happening at its head, in ideal delivery conditions. The feeling of understanding shall last until you start wondering what happens if some of the jobs are blocked, @@ -1226,17 +1228,17 @@ selected by the scheduler?

      -From user's point of view it is all simple. If some of the peers +From the user's point of view it is all simple. If some of the peers of a job can't be selected, those peers are simply skipped by the entry selection algorithm (the pseudo-code described before) and only the selectable ones are used. If none of the peers may be selected, the job is declared a "blocker job". Blocker jobs are skipped by the entry selection algorithm and they are also excluded -from the candidates for preemption of current job. Thus the scheduler +from the candidates for preemption of the current job. Thus the scheduler effectively behaves as if the blocker jobs didn't exist on the job list at all. As soon as at least one of the peers of a blocker job becomes unblocked (that is, the delivery agent handling the delivery -of the recipient entry for given destination successfully finishes), +of the recipient entry for the given destination successfully finishes), the job's blocker status is removed and the job again participates in all further scheduler actions normally. @@ -1298,8 +1300,8 @@ this change because of blockers?

      -The answer is: a lot. Any job may become blocker job at any time, -and also become normal job again at any time. This has several +The answer is: a lot. Any job may become a blocker job at any time, +and also become a normal job again at any time. This has several important implications:

      @@ -1320,7 +1322,7 @@ unblocked and is completed... You get the idea.

      [Interesting side note: even when jobs are delivered out of order, -from single destination's point of view the jobs are still delivered +from a single destination's point of view the jobs are still delivered in the expected order (that is, FIFO unless there was some preemption involved). This is because whenever a destination queue becomes unblocked (the destination limit allows selection of more recipient @@ -1371,7 +1373,7 @@ huh?

      If I illustrate the relations after the above mentioned examples -(but those in point 1)), the situation would look like this: +(but those in point 1), the situation would look like this:

      @@ -1398,8 +1400,8 @@ Now how does nqmgr deal with all these complicated relations?

      Well, it maintains them all as described, but fortunately, all these -relations are necessary only for purposes of proper counting of -available delivery slots. For purposes of ordering the jobs for +relations are necessary only for the purpose of proper counting of +available delivery slots. For the purpose of ordering the jobs for entry selection, the original rule still applies: "the job preempting the current job is moved in front of the current job on the job list". So for entry selection purposes, the job relations remain @@ -1428,8 +1430,8 @@ are simply ignored.

      -[By now, you should have a feeling that there is more things going -under the hood than you ever wanted to know. You decide that +[By now, you should have a feeling that there are more things going +on under the hood than you ever wanted to know. You decide that forgetting about this chapter is the best you can do for the sake of your mind's health and you basically stick with the idea how the scheduler works in ideal conditions, when there are no blockers, @@ -1443,11 +1445,11 @@ limits

      When discussing the nqmgr scheduler, we have so far assumed -that all recipients of all messages in the active queue are completely -read into the memory. This is simply not true. There is an upper +that all recipients of all messages in the "active" queue are completely +read into memory. This is simply not true. There is an upper bound on the amount of memory the nqmgr may use, and therefore it must impose some limits on the information it may store -in the memory at any given time. +in memory at any given time.

      @@ -1456,11 +1458,11 @@ in the memory at any given time. First of all, not all messages may be read in-core at once. At any time, only qmgr_message_active_limit messages may be read in-core at maximum. When read into memory, the messages are picked from the -incoming and deferred message queues and moved to the active queue -(incoming having priority), so if there is more than -qmgr_message_active_limit messages queued in the active queue, the -rest will have to wait until (some of) the messages in the active -queue are completely delivered (or deferred). +"incoming" and "deferred" queues and moved to the "active" queue +(incoming having priority), so if there are more than +qmgr_message_active_limit messages queued in the "active" queue, the +rest will have to wait until (some of) the messages in the "active" queue +are completely delivered (or deferred).

      @@ -1468,11 +1470,11 @@ queue are completely delivered (or deferred). Even with the limited amount of in-core messages, there is another limit which must be imposed in order to avoid memory exhaustion. -Each message may contain huge amount of recipients (tens or hundreds +Each message may contain a huge number of recipients (tens or hundreds of thousands are not uncommon), so if nqmgr read all -recipients of all messages in the active queue, it may easily run +recipients of all messages in the "active" queue, it may easily run out of memory. Therefore there must be some upper bound on the -amount of message recipients which are read into the memory at the +amount of message recipients which are read into memory at the same time.

      @@ -1490,8 +1492,8 @@ affects the nqmgr and its scheduler. The message limit is straightforward - it just limits the size of the lookahead the nqmgr's scheduler has when choosing which -message can preempt the current one. Messages not in the active -queue simply are not considered at all. +message can preempt the current one. Messages not in the "active" queue +are simply not considered at all.

      @@ -1517,12 +1519,12 @@ of recipient entries. With unread recipients, it is not clear how many recipient entries there will be, as they are subject to per-destination grouping. It is not even clear to what transports (and thus jobs) the recipients will be assigned. And with messages -coming from the deferred queue, it is not even clear how many unread +coming from the "deferred" queue, it is not even clear how many unread recipients are still to be delivered. This all means that the scheduler must use only estimates of how many recipients entries there will be. Fortunately, it is possible to estimate the minimum and maximum correctly, so the scheduler can always err on the safe -side. Obviously, the better the estimates, the better results, so +side. Obviously, the better the estimates, the better the results, so it is best when we are able to read all recipients in-core and turn the estimates into exact counts, or at least try to read as many as possible to make the estimates as accurate as possible. @@ -1552,9 +1554,9 @@ it achieve it?

      Perhaps the easiest solution would be to say that each message may -have at maximum X recipients stored in-core, but such solution would +have at maximum X recipients stored in-core, but such a solution would be poor for several reasons. With reasonable qmgr_message_active_limit -values, the X would have to be quite low to maintain reasonable +values, the X would have to be quite low to maintain a reasonable memory footprint. And with low X lots of things would not work well. The nqmgr would have problems to use the transport_destination_recipient_limit efficiently. The @@ -1568,11 +1570,11 @@ again.

      Therefore it seems reasonable to have a solution which does not use -a limit imposed on per-message basis, but which maintains a pool +a limit imposed on a per-message basis, but which maintains a pool of available recipient slots, which can be shared among all messages in the most efficient manner. And as we do not want separate transports to compete for resources whenever possible, it seems -appropriate to maintain such recipient pool for each transport +appropriate to maintain such a recipient pool for each transport separately. This is the general idea, now how does it work in practice? @@ -1580,13 +1582,13 @@ practice?

      -First we have to solve little chicken-and-egg problem. If we want +First we have to solve a little chicken-and-egg problem. If we want to use the per-transport recipient pools, we first need to know to -what transport(s) is the message assigned. But we will find that -out only after we read in the recipients first. So it is obvious +what transport(s) the message is assigned. But we will find that +out only after we first read in the recipients. So it is obvious that we first have to read in some recipients, use them to find out -to what transports is the message to be assigned, and only after -that we can use the per-transport recipient pools. +to what transports the message is to be assigned, and only after +that can we use the per-transport recipient pools.

      @@ -1595,12 +1597,12 @@ that we can use the per-transport recipient pools. Now how many recipients shall we read for the first time? This is what qmgr_message_recipient_minimum and qmgr_message_recipient_limit values control. The qmgr_message_recipient_minimum value specifies -how many recipients of each message we will read for the first time, +how many recipients of each message we will read the first time, no matter what. It is necessary to read at least one recipient before we can assign the message to a transport and create the first job. However, reading only qmgr_message_recipient_minimum recipients even if there are only few messages with few recipients in-core would -be wasteful. Therefore if there is less than qmgr_message_recipient_limit +be wasteful. Therefore if there are fewer than qmgr_message_recipient_limit recipients in-core so far, the first batch of recipients may be larger than qmgr_message_recipient_minimum - as large as is required to reach the qmgr_message_recipient_limit limit. @@ -1624,10 +1626,10 @@ qmgr_message_recipient_minimum amount which always applies).

      -For example, if a message has three jobs, first with 1 recipient -still in-core and 4 recipient slots, second with 5 recipient in-core -and 5 recipient slots, and third with 2 recipients in-core and 0 -recipient slots, it has 1+5+2=7 recipients in-core and 4+5+0=9 jobs' +For example, if a message has three jobs, the first with 1 recipient +still in-core and 4 recipient slots, the second with 5 recipients in-core +and 5 recipient slots, and the third with 2 recipients in-core and 0 +recipient slots, it has 1+5+2=8 recipients in-core and 4+5+0=9 jobs' recipients slots in total. This means that we could immediately read 2+qmgr_message_recipient_minimum more recipients of that message in core. @@ -1675,9 +1677,9 @@ More specifically, each time a job is created and appended to the job list, it gets all unused recipient slots from its transport's pool. It keeps them until all recipients of its message are read. When this happens, all unused recipient slots are transferred to -the next job (which is now in fact now first such job) on the job +the next job (which is now in fact the first such job) on the job list which still has some recipients unread, or eventually back to -the transport pool if there is no such job. Such transfer then also +the transport pool if there is no such job. Such a transfer then also happens whenever a recipient entry of that job is delivered.

      @@ -1685,10 +1687,10 @@ happens whenever a recipient entry of that job is delivered.

      There is also a scenario when a job is not appended to the end of -the job list (for example it was created as a result of second or +the job list (for example it was created as a result of a second or later recipient batch). Then it works exactly as above, except that if it was put in front of the first unread job (that is, the job -of a message which still has some unread recipients in queue file), +of a message which still has some unread recipients in the queue file), that job is first forced to return all of its unused recipient slots to the transport pool. @@ -1705,21 +1707,21 @@ as they still have recipients in-core (the maximum is there because of the sponsoring mentioned before) and the jobs after this job get nothing from the transport recipient pool (unless they got something before and then the first unread job was created and enqueued in -front of them later - in such case the also get at maximum as many +front of them later - in such a case, they also get at maximum as many slots as they have recipients in-core).

      -Things work fine in such state for most of the time, because the -current job is either completely read in-core or has as much recipient +Things work fine in such a state for most of the time, because the +current job is either completely read in-core or has as many recipient slots as there are, but there is one situation which we still have to take care of specially. Imagine if the current job is preempted by some unread job from the job list and there are no more recipient slots available, so this new current job could read only batches of qmgr_message_recipient_minimum recipients at a time. This would -really degrade performance. For this reason, each transport has +really degrade performance. For this reason, each transport has an extra pool of transport_extra_recipient_limit recipient slots, dedicated exactly for this situation. Each time an unread job preempts the current job, it gets half of the remaining recipient @@ -1730,7 +1732,7 @@ slots from the normal pool and this extra pool.

      And that's it. It sure does sound pretty complicated, but fortunately -most people don't really have to care how exactly it works as long +most people don't really have to care exactly how it works as long as it works. Perhaps the only important things to know for most people are the following upper bound formulas: @@ -1783,7 +1785,7 @@ where the sum is over all used transports.

      And this terribly complicated chapter concludes the documentation -of nqmgr scheduler. +of the nqmgr scheduler.

      @@ -1793,7 +1795,7 @@ of nqmgr scheduler. inside out. In practice, you still hope that you will never have to really understand the last or last two chapters completely, and fortunately most people really won't. Understanding how the scheduler -works in ideal conditions is more than good enough for vast majority +works in ideal conditions is more than good enough for the vast majority of users.]

      diff --git a/postfix/proto/SMTPD_ACCESS_README.html b/postfix/proto/SMTPD_ACCESS_README.html index ee6916504..ce38bc82c 100644 --- a/postfix/proto/SMTPD_ACCESS_README.html +++ b/postfix/proto/SMTPD_ACCESS_README.html @@ -218,8 +218,9 @@ some restriction produces a result of PERMIT, REJECT or DEFER (try again later). The end of each list is equivalent to a PERMIT result. By placing a PERMIT restriction before a REJECT restriction you can make exceptions for specific clients or users. This is called -allowlisting; the fourth example above allows mail from local -networks but otherwise rejects mail to arbitrary destinations.

      +allowlisting; the smtpd_relay_restrictions example above allows mail from local +networks, and from SASL authenticated clients, but otherwise rejects mail +to arbitrary destinations.

      The table below summarizes the purpose of each SMTP access restriction list. All lists use the exact same syntax; they differ diff --git a/postfix/proto/SMTPD_POLICY_README.html b/postfix/proto/SMTPD_POLICY_README.html index da886ab70..b8df76eaa 100644 --- a/postfix/proto/SMTPD_POLICY_README.html +++ b/postfix/proto/SMTPD_POLICY_README.html @@ -24,8 +24,8 @@ block or accept mail at specific SMTP protocol stages. In addition, the Postfix SMTP server can delegate decisions to an external policy server (Postfix 2.1 and later).

      -

      With this policy delegation mechanism, a simple -greylist policy can be implemented with only a dozen lines of +

      With this policy delegation mechanism, a simple +greylist policy can be implemented with only a dozen lines of Perl, as is shown at the end of this document. A complete example can be found in the Postfix source code, in the directory examples/smtpd-policy.

      @@ -269,7 +269,7 @@ a TCP socket at 127.0.0.1 port 9998. The second example specifies an absolute pathname of a UNIX-domain socket. The third example specifies a pathname relative to the Postfix queue directory; use this for policy servers that are spawned by the Postfix master -daemon.

      +daemon. On many systems, "local" is a synonym for "unix".

      To create a policy service that listens on a UNIX-domain socket called "policy", and that runs under control of the Postfix spawn(8) @@ -316,7 +316,7 @@ open relay.

    • Line 11: this increases the time that a policy server process may run to 3600 seconds. The default time limit of 1000 -seconds is too short; the policy daemon needs to run long as the +seconds is too short; the policy daemon needs to run as long as the SMTP server process that talks to it. See the spawn(8) manpage for more information about the transport_time_limit parameter.

      @@ -565,7 +565,7 @@ each request and reply.

    • Line 6: this increases the time that a greylist server process may run to 3600 seconds. The default time limit of 1000 -seconds is too short; the greylist daemon needs to run long as the +seconds is too short; the greylist daemon needs to run as long as the SMTP server process that talks to it. See the spawn(8) manpage for more information about the transport_time_limit parameter.

      @@ -615,7 +615,7 @@ client/server configuration" section above.

      domains that often appear in forged email. At some point in cyberspace/time a list of frequently forged MAIL FROM domains could be found at -http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in. +https://web.archive.org/web/20080526153208/http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in.
      diff --git a/postfix/proto/SMTPD_PROXY_README.html b/postfix/proto/SMTPD_PROXY_README.html
      index 61699ed31..710183b7b 100644
      --- a/postfix/proto/SMTPD_PROXY_README.html
      +++ b/postfix/proto/SMTPD_PROXY_README.html
      @@ -199,8 +199,9 @@ usual. 

      The content filter itself is not described here. You can use any filter that is SMTP enabled. For non-SMTP capable content filtering software, Bennett Todd's SMTP proxy implements a nice -Perl-based framework. See: http://bent.latency.net/smtpprox/ or -https://github.com/jnorell/smtpprox.

      +Perl-based framework. See: +https://web.archive.org/web/20151022025756/http://bent.latency.net/smtpprox/ +or https://github.com/jnorell/smtpprox/

      @@ -351,8 +352,8 @@ the top of the master.cf file:

      By default, the filter has 100 seconds to do its work. If it takes longer then Postfix gives up and reports an error to the -remote SMTP client. You can increase this time limit (see configuration -parameter section below) but doing so is pointless because you +remote SMTP client. You can increase this time limit (see the "Configuration +parameters" section below) but doing so is pointless because you can't control when the remote SMTP client times out.

      Configuration parameters

      diff --git a/postfix/proto/SMTPUTF8_README.html b/postfix/proto/SMTPUTF8_README.html index 9389297ad..c0e560838 100644 --- a/postfix/proto/SMTPUTF8_README.html +++ b/postfix/proto/SMTPUTF8_README.html @@ -244,7 +244,7 @@ turned on (smtputf8_enable = yes).

      For compatibility with pre-SMTPUTF8 environments, Postfix does not automatically set the "SMTPUTF8 requested" flag on messages -from non-SMTPUTF8 clients that contain an UTF-8 header value or +from non-SMTPUTF8 clients that contain a UTF-8 header value or UTF-8 address localpart. This would make such messages undeliverable to non-SMTPUTF8 servers, and could be a barrier to SMTPUTF8 adoption.

      diff --git a/postfix/proto/SQLITE_README.html b/postfix/proto/SQLITE_README.html index 97f14d8e2..598f80cf2 100644 --- a/postfix/proto/SQLITE_README.html +++ b/postfix/proto/SQLITE_README.html @@ -98,12 +98,6 @@ dbpath = /some/path/to/sqlite_database query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'
      -

      Additional notes

      - -

      The SQLite configuration interface setup allows for multiple -sqlite databases: you can use one for a virtual table, one for an -access table, and one for an aliases table if you want.

      -

      Credits

      SQLite support was added with Postfix version 2.8.

      diff --git a/postfix/proto/STANDARD_CONFIGURATION_README.html b/postfix/proto/STANDARD_CONFIGURATION_README.html index 1714e4f2b..b4f4efcf5 100644 --- a/postfix/proto/STANDARD_CONFIGURATION_README.html +++ b/postfix/proto/STANDARD_CONFIGURATION_README.html @@ -168,7 +168,7 @@ at their default settings.

      First we present the non-mailhost configuration, because it is the simpler one. This machine sends mail as "user@example.com" and -is final destination for "user@hostname.example.com".

      +is the final destination for "user@hostname.example.com".

      @@ -198,7 +198,7 @@ a firewall". 

    Next we present the mailhost configuration. This machine sends -mail as "user@example.com" and is final destination for +mail as "user@example.com" and is the final destination for "user@hostname.example.com" as well as "user@example.com".

    @@ -341,7 +341,7 @@ All the mail to these two accounts is forwarded to an inside address. only address literals matching $inet_interfaces or $proxy_interfaces are deemed local. So "localpart@[a.d.d.r]" can be matched as simply "localpart" in canonical(5) and virtual(5). This avoids the need to -specify firewall IP addresses into Postfix configuration files.

    +specify firewall IP addresses in Postfix configuration files.

    @@ -478,7 +478,7 @@ mail_version
    ".

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    @@ -526,7 +526,7 @@ you edit the transport table. 

    Configuring Postfix as primary or backup MX host for a remote site

    This section presents additional configuration. You need to -combine this with basic configuration information as discussed the +combine this with basic configuration information as discussed in the first half of this document.

    When your system is SECONDARY MX host for a remote site this @@ -642,7 +642,7 @@ of the time. For dialup connections that are up 24x7, see the local area network section above.

    This section presents additional configuration. You need to -combine this with basic configuration information as discussed the +combine this with basic configuration information as discussed in the first half of this document.

    If you do not have your own hostname and IP address (usually @@ -749,7 +749,7 @@ send mail between users on the same machine.

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    @@ -797,7 +797,7 @@ address of their own.

    The following example presents additional configuration. You need to combine this with basic configuration information as -discussed the first half of this document.

    +discussed in the first half of this document.

    diff --git a/postfix/proto/STRESS_README.html b/postfix/proto/STRESS_README.html
    index 26b7b0ecd..30fa5f226 100644
    --- a/postfix/proto/STRESS_README.html
    +++ b/postfix/proto/STRESS_README.html
    @@ -543,7 +543,7 @@ services that accept remote connections. 

    The postscreen(8) daemon, introduced with Postfix 2.8, provides additional protection against mail server overload. One postscreen(8) process handles multiple inbound SMTP connections, and decides which -clients may to talk to a Postfix SMTP server process. By keeping +clients may talk to a Postfix SMTP server process. By keeping spambots away, postscreen(8) leaves more SMTP server processes available for legitimate clients, and delays the onset of server overload conditions.

    diff --git a/postfix/proto/TLS_LEGACY_README.html b/postfix/proto/TLS_LEGACY_README.html index 94d4a4b50..dacf1c138 100644 --- a/postfix/proto/TLS_LEGACY_README.html +++ b/postfix/proto/TLS_LEGACY_README.html @@ -35,7 +35,7 @@ SMTP mail or with SASL authentication.

    Postfix version 2.2 introduces support for TLS as described in RFC 3207. TLS Support for older Postfix versions was available as an add-on patch. The section "Compatibility with -Postfix < 2.2 TLS support" below discusses the differences +Postfix < 2.2 TLS support" below discusses the differences between these implementations.

    Topics covered in this document:

    @@ -54,7 +54,7 @@ between these implementations.

  • Reporting problems -
  • Compatibility with Postfix < 2.2 TLS support +
  • Compatibility with Postfix < 2.2 TLS support
  • Credits @@ -225,7 +225,7 @@ key configuration

    In order to use TLS, the Postfix SMTP server needs a certificate and a private key. Both must be in "pem" format. The private key must not be encrypted, meaning: the key must be accessible without -password. Both certificate and private key may be in the same +a password. Both certificate and private key may be in the same file.

    Both RSA and DSA certificates are supported. Typically you will @@ -253,7 +253,7 @@ CA". Create the server.pem file with:

  • A Postfix SMTP server certificate supplied here must be usable -as SSL server certificate and hence pass the "openssl verify -purpose +as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test.

    A client that trusts the root CA has a local copy of the root @@ -616,7 +616,7 @@ as a key for the specified access(5) table.

    The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special CA issues the client certificates, and -only if this CA is listed as trusted CA. If other CAs are trusted, +only if this CA is listed as a trusted CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server.

    @@ -663,7 +663,7 @@ the user or host.

    To influence the Postfix SMTP server cipher selection scheme, you can give cipherlist string. A detailed description would go -to far here; please refer to the OpenSSL documentation. If you +too far here; please refer to the OpenSSL documentation. If you don't know what to do with it, simply don't touch it and leave the (openssl-)compiled in default!

    @@ -778,7 +778,7 @@ certificate is presented.

    key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "pem" format. The private key must not be encrypted, meaning: it must be accessible without -password. Both parts (certificate and private key) may be in the +a password. Both parts (certificate and private key) may be in the same file.

    In order for remote SMTP servers to verify the Postfix SMTP @@ -798,7 +798,7 @@ Create the client.pem file with:

    A Postfix SMTP client certificate supplied here must be usable -as SSL client certificate and hence pass the "openssl verify -purpose +as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test.

    A server that trusts the root CA has a local copy of the root @@ -1156,9 +1156,9 @@ smtp_tls_enforce_peername. Note: "smtp_enforce_tls = yes" and "smtp_tls_enforce_peername = yes" imply "smtp_use_tls = yes".

  • When both hostname and next-hop destination lookups produce -a result, the more specific per-site policy (NONE, MUST, etc) +a result, the more specific per-site policy (NONE, MUST, etc.) overrides the less specific one (MAY), and the more secure per-site -policy (MUST, etc) overrides the less secure one (NONE).

    +policy (MUST, etc.) overrides the less secure one (NONE).

  • After the per-site policy lookups are combined, the result generally overrides the global policy. The exception is the less @@ -1215,7 +1215,7 @@ verification. This feature requires Postfix 2.2.9 or later.

    example.org NONE # TLS should not be used with the host smtp.example.com. - smtp.example.com NONE + [smtp.example.com] NONE
  • @@ -1266,7 +1266,7 @@ special CA which then issues the actual certificate...)

    To influence the Postfix SMTP client cipher selection scheme, you can give cipherlist string. A detailed description would go -to far here; please refer to the OpenSSL documentation. If you +too far here; please refer to the OpenSSL documentation. If you don't know what to do with it, simply don't touch it and leave the (openssl-)compiled in default!

    @@ -1539,7 +1539,7 @@ Patches, when possible, are greatly appreciated too.

    -

    Compatibility with Postfix <2.2 TLS support

    +

    Compatibility with Postfix < 2.2 TLS support

    Postfix version 2.2 TLS support is based on the Postfix/TLS patch by Lutz Jänicke, but differs in a few minor ways.

    diff --git a/postfix/proto/TLS_README.html b/postfix/proto/TLS_README.html index a58595768..b53e71bd3 100644 --- a/postfix/proto/TLS_README.html +++ b/postfix/proto/TLS_README.html @@ -29,7 +29,7 @@ SMTP mail or with SASL authentication.

    the ability to encrypt mail and to authenticate remote SMTP clients or servers. You also turn on hundreds of thousands of lines of OpenSSL library code. Assuming that OpenSSL is written as carefully -as Wietse's own code, every 1000 lines introduce one additional bug +as Wietse's own code, every 1000 lines introduces one additional bug into Postfix.

    Topics covered in this document:

    @@ -201,7 +201,7 @@ client must receive the issuing CA certificates via the TLS handshake or via public-key infrastructure. This means that the Postfix server public-key certificate file must include the server certificate first, then the issuing CA(s) (bottom-up order). The Postfix SMTP -server certificate must be usable as SSL server certificate and +server certificate must be usable as an SSL server certificate and hence pass the "openssl verify -purpose sslserver ..." test.

    @@ -280,7 +280,7 @@ single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy just a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up to -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete DSA.

    @@ -795,7 +795,7 @@ context, though not recommended, is still likely safe.

    The permit_tls_all_clientcerts feature must be used with caution, because it can result in too many access permissions. Use this feature only if a special CA issues the client certificates, and -only if this CA is listed as trusted CA. If other CAs are trusted, +only if this CA is listed as a trusted CA. If other CAs are trusted, any owner of a valid client certificate would be authorized. The permit_tls_all_clientcerts feature can be practical for a specially created email relay server.

    @@ -1863,7 +1863,7 @@ cipher used determines which certificate is presented.

    key/certificate pair as the Postfix SMTP server. If a certificate is to be presented, it must be in "PEM" format. The private key must not be encrypted, meaning: it must be accessible without -password. Both parts (certificate and private key) may be in the +a password. Both parts (certificate and private key) may be in the same file.

    With OpenSSL 1.1.1 and Postfix ≥ 3.4 it is also possible to @@ -1892,7 +1892,7 @@ As the "root" super-user create the client.pem file with:

    A Postfix SMTP client certificate supplied here must be usable -as SSL client certificate and hence pass the "openssl verify -purpose +as an SSL client certificate and hence pass the "openssl verify -purpose sslclient ..." test.

    A server that trusts the root CA has a local copy of the root @@ -1911,7 +1911,7 @@ single file can hold multiple (key, cert, [chain]) sequences, one per algorithm. It is typically simpler to keep the chain for each algorithm in its own file. Most users are likely to deploy at most a single RSA chain, but with OpenSSL 1.1.1, it is possible to deploy up -five chains, one each for RSA, ECDSA, ED25519, ED448 and even the +five chains, one each for RSA, ECDSA, ED25519, ED448, and even the obsolete DSA.

    @@ -2332,10 +2332,10 @@ files.
    secure
    Secure certificate verification. Mail is delivered only if the TLS handshake succeeds, -if the remote SMTP server certificate can be validated (not expired -or revoked, and signed by a trusted Certification Authority), and if the -server certificate name matches the optional "match" attribute (or the -main.cf smtp_tls_secure_cert_match parameter value when no optional +and DNS forgery resistant remote SMTP certificate verification succeeds +(not expired or revoked, and signed by a trusted Certification Authority), +and if the server certificate name matches the optional "match" attribute +(or the main.cf smtp_tls_secure_cert_match parameter value when no optional "match" attribute is specified). With Postfix ≥ 2.11 the "tafile" attribute optionally modifies trust chain verification in the same manner as the "smtp_tls_trust_anchor_file" parameter. The "tafile" attribute @@ -2841,7 +2841,7 @@ for exchanging email with sites that you have no trust relationship with. For real authentication you need also enable DNSSEC record signing for your domain and publish TLSA records and/or your Postfix public key certificate needs to be signed by a recognized Certification -Authority. To authenticate the certificates of remote host you +Authority. To authenticate the certificates of a remote host you need a DNSSEC-validating local resolver and to enable DANE authentication and/or configure the Postfix SMTP client with a list of public key certificates of @@ -3112,7 +3112,7 @@ client certificates, unless there are servers which authenticate your mail submission via client certificates. Often servers that perform TLS client authentication will issue the required certificates signed by their own CA. If you configure the client certificate and key incorrectly, you -will be unable to send mail to sites that request client certificate, +will be unable to send mail to sites that request a client certificate, but don't require them from all clients.

    diff --git a/postfix/proto/TUNING_README.html b/postfix/proto/TUNING_README.html index 0f0d0c75a..61b37bdb2 100644 --- a/postfix/proto/TUNING_README.html +++ b/postfix/proto/TUNING_README.html @@ -409,9 +409,9 @@ especially if the gateway forwards to multiple MX hosts. When all MX hosts are up and accepting connections in a timely fashion, throughput will be high. If any MX host is down and completely unresponsive, the average connection latency rises to at least 1/N -* $smtp_connection_timeout, if there are N MX hosts. This limits +* $smtp_connect_timeout, if there are N MX hosts. This limits throughput to at most the destination concurrency * N / -$smtp_connection_timeout.

    +$smtp_connect_timeout.

    For example, with a destination concurrency of 100 and 2 MX hosts, each host will handle up to 50 simultaneous connections. If @@ -422,9 +422,9 @@ multiple MX hosts need a lower connection timeout, values as low as 5s or even 1s can be used to prevent congestion when one or more, but not all MX hosts are down.

    -

    If necessary, set a higher transport_destination_concurrency_limit +

    If necessary, set a higher transport_destination_concurrency_limit (in main.cf since this is a queue manager parameter) and a lower -smtp_connection_timeout (with a "-o" override in master.cf since +smtp_connect_timeout (with a "-o" override in master.cf since this parameter has no per-transport name) for the relay transport and any transports dedicated for specific high volume destinations.

    diff --git a/postfix/proto/VIRTUAL_README.html b/postfix/proto/VIRTUAL_README.html index 3541fd41f..1c5aecc0c 100644 --- a/postfix/proto/VIRTUAL_README.html +++ b/postfix/proto/VIRTUAL_README.html @@ -62,7 +62,7 @@ domains, non-UNIX accounts

    Canonical versus hosted versus other domains

    -

    Most Postfix systems are final destination for only a +

    Most Postfix systems are the final destination for only a few domain names. These include the hostnames and [the IP addresses] of the machine that Postfix runs on, and sometimes also include the parent domain of the hostname. The remainder of this document @@ -71,7 +71,7 @@ usually implemented with the Postfix local domain address class, as defined in the ADDRESS_CLASS_README file.

    Besides the canonical domains, Postfix can be configured to be -final destination for any number of additional domains. +the final destination for any number of additional domains. These domains are called hosted, because they are not directly associated with the name of the machine itself. Hosted domains are usually implemented with the virtual alias domain address class @@ -87,7 +87,7 @@ relay domain address class, as defined in the ADDRESS_CLASS_README file.

    Finally, Postfix can be configured as a transit host for sending -mail across the internet. Obviously, Postfix is not final destination +mail across the internet. Obviously, Postfix is not the final destination for such mail. This function is available only for authorized clients and/or users, and is implemented by the default domain address class, as defined in the ADDRESS_CLASS_README file.

    diff --git a/postfix/proto/access b/postfix/proto/access index e01cc0f0e..0fe2a899e 100644 --- a/postfix/proto/access +++ b/postfix/proto/access @@ -29,7 +29,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those cases, the lookups +# can be directed to a TCP-based server. In those cases, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # CASE FOLDING @@ -199,7 +199,7 @@ # .sp # This feature is available in Postfix 2.1 and later. # .IP "\fBDEFER_IF_PERMIT \fIoptional text...\fR -# Defer the request if some later restriction would result in a +# Defer the request if some later restriction would result in # an explicit or implicit PERMIT action. # Reply with "\fB$access_map_defer_code 4.7.1 \fI optional # text...\fR" when the diff --git a/postfix/proto/canonical b/postfix/proto/canonical index de9e19143..6364d3e1d 100644 --- a/postfix/proto/canonical +++ b/postfix/proto/canonical @@ -27,7 +27,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those cases, the lookups +# can be directed to a TCP-based server. In those cases, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # @@ -226,7 +226,7 @@ # off in email addresses. # .IP "\fBmasquerade_exceptions (empty)\fR" # Optional list of user names that are not subjected to address -# masquerading, even when their address matches $masquerade_domains. +# masquerading, even when their addresses match $masquerade_domains. # .IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" # The list of domains that are delivered via the $local_transport # mail delivery transport. diff --git a/postfix/proto/cidr_table b/postfix/proto/cidr_table index ca0381399..5b4dd65eb 100644 --- a/postfix/proto/cidr_table +++ b/postfix/proto/cidr_table @@ -124,6 +124,10 @@ # .fi # # Postfix parses the result as if it is a file in /etc/postfix. +# +# Note: if a rule contains \fB$\fR, specify \fB$$\fR to keep +# Postfix from trying to do \fI$name\fR expansion as it +# evaluates a parameter value. # EXAMPLE SMTPD ACCESS MAP # .nf # /etc/postfix/main.cf: diff --git a/postfix/proto/generic b/postfix/proto/generic index 77d62252b..fdeb1eac5 100644 --- a/postfix/proto/generic +++ b/postfix/proto/generic @@ -41,7 +41,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those case, the lookups +# can be directed to a TCP-based server. In those cases, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # CASE FOLDING @@ -134,7 +134,7 @@ # This section describes how the table lookups change when lookups # are directed to a TCP-based server. For a description of the TCP # client/server lookup protocol, see \fBtcp_table\fR(5). -# This feature is not available up to and including Postfix version 2.4. +# This feature is available in Postfix 2.5 and later. # # Each lookup operation uses the entire address once. Thus, # \fIuser@domain\fR mail addresses are not broken up into their @@ -178,29 +178,32 @@ # The following \fBmain.cf\fR parameters are especially relevant. # The text below provides only a parameter summary. See # \fBpostconf\fR(5) for more details including examples. -# .IP \fBsmtp_generic_maps\fR -# Address mapping lookup table for envelope and header sender -# and recipient addresses while delivering mail via SMTP. -# .IP \fBpropagate_unmatched_extensions\fR -# A list of address rewriting or forwarding mechanisms that propagate -# an address extension from the original address to the result. -# Specify zero or more of \fBcanonical\fR, \fBvirtual\fR, \fBalias\fR, -# \fBforward\fR, \fBinclude\fR, or \fBgeneric\fR. +# .IP "\fBsmtp_generic_maps (empty)\fR" +# Optional lookup tables that perform address rewriting in the +# Postfix SMTP client, typically to transform a locally valid address into +# a globally valid address when sending mail across the Internet. +# .IP "\fBpropagate_unmatched_extensions (canonical, virtual)\fR" +# What address lookup tables copy an address extension from the lookup +# key to the lookup result. # .PP # Other parameters of interest: -# .IP \fBinet_interfaces\fR -# The network interface addresses that this system receives mail on. -# You need to stop and start Postfix when this parameter changes. -# .IP \fBproxy_interfaces\fR -# Other interfaces that this machine receives mail on by way of a -# proxy agent or network address translator. -# .IP \fBmydestination\fR -# List of domains that this mail system considers local. -# .IP \fBmyorigin\fR -# The domain that is appended to locally-posted mail. -# .IP \fBowner_request_special\fR -# Give special treatment to \fBowner-\fIxxx\fR and \fIxxx\fB-request\fR -# addresses. +# .IP "\fBinet_interfaces (all)\fR" +# The network interface addresses that this mail system receives +# mail on. +# .IP "\fBproxy_interfaces (empty)\fR" +# The network interface addresses that this mail system receives mail +# on by way of a proxy or network address translation unit. +# .IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" +# The list of domains that are delivered via the $local_transport +# mail delivery transport. +# .IP "\fBmyorigin ($myhostname)\fR" +# The domain name that locally-posted mail appears to come +# from, and that locally posted mail is delivered to. +# .IP "\fBowner_request_special (yes)\fR" +# Enable special treatment for owner-\fIlistname\fR entries in the +# \fBaliases\fR(5) file, and don't split owner-\fIlistname\fR and +# \fIlistname\fR-request address localparts when the recipient_delimiter +# is set to "-". # SEE ALSO # postmap(1), Postfix lookup table manager # postconf(5), configuration parameters diff --git a/postfix/proto/ldap_table b/postfix/proto/ldap_table index b770e4a16..fe3626a90 100644 --- a/postfix/proto/ldap_table +++ b/postfix/proto/ldap_table @@ -146,9 +146,9 @@ # For the \fBsearch_base\fR parameter, the upper-case equivalents # of the above expansions behave identically to their lower-case # counter-parts. With the \fBresult_format\fR parameter (previously -# called \fBresult_filter\fR see the COMPATIBILITY section and below), -# they expand to the corresponding components of input key rather -# than the result value. +# called \fBresult_filter\fR see the OTHER OBSOLETE FEATURES section +# and below), they expand to the corresponding components of input +# key rather than the result value. # .IP "\fB%[1-9]\fR" # The patterns %1, %2, ... %9 are replaced by the corresponding # most significant component of the input key's domain. If the @@ -189,9 +189,9 @@ # The upper-case equivalents of the above expansions behave in the # \fBquery_filter\fR parameter identically to their lower-case # counter-parts. With the \fBresult_format\fR parameter (previously -# called \fBresult_filter\fR see the COMPATIBILITY section and below), -# they expand to the corresponding components of input key rather -# than the result value. +# called \fBresult_filter\fR see the OTHER OBSOLETE FEATURES section +# and below), they expand to the corresponding components of input +# key rather than the result value. # .IP # The above %S, %U and %D expansions are available with Postfix 2.2 # and later. @@ -268,7 +268,7 @@ # NOTE: DO NOT put quotes around the result format! # .IP "\fBdomain (default: no domain list)\fR" # This is a list of domain names, paths to files, or -# dictionaries. When specified, only fully qualified search +# "type:table" databases. When specified, only fully qualified search # keys with a *non-empty* localpart and a matching domain # are eligible for lookup: 'user' lookups, bare domain lookups # and "@domain" lookups are not performed. This can significantly diff --git a/postfix/proto/master b/postfix/proto/master index 6f01c16ce..28040b69a 100644 --- a/postfix/proto/master +++ b/postfix/proto/master @@ -129,7 +129,7 @@ # .sp # The \fBlocal\fR(8), \fBpipe\fR(8), \fBspawn\fR(8), and # \fBvirtual\fR(8) daemons require privileges. -# .IP "\fBChroot (default: Postfix >= 3.0: n, Postfix <3.0: y)\fR" +# .IP "\fBChroot (default: Postfix >= 3.0: n, Postfix < 3.0: y)\fR" # Whether or not the service runs chrooted to the mail queue # directory (pathname is controlled by the \fBqueue_directory\fR # configuration variable in the main.cf file). diff --git a/postfix/proto/mysql_table b/postfix/proto/mysql_table index b4c7c75b0..6870acf40 100644 --- a/postfix/proto/mysql_table +++ b/postfix/proto/mysql_table @@ -16,7 +16,7 @@ # In order to use MySQL lookups, define a MySQL source as a lookup # table in main.cf, for example: # .nf -# alias_maps = mysql:/etc/mysql-aliases.cf +# alias_maps = mysql:/etc/postfix/mysql-aliases.cf # .fi # # The file /etc/postfix/mysql-aliases.cf has the same format as @@ -46,8 +46,9 @@ # .IP "\fBhosts\fR" # The hosts that Postfix will try to connect to and query from. # Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP -# connections (default). Example: +# connections (default). Examples: # .nf +# hosts = inet:host1.some.domain inet:host2.some.domain:port # hosts = host1.some.domain host2.some.domain:port # hosts = unix:/file/name # .fi @@ -190,10 +191,10 @@ # # NOTE: DO NOT put quotes around the result format! # .IP "\fBdomain (default: no domain list)\fR" -# This is a list of domain names, paths to files, or -# dictionaries. When specified, only fully qualified search -# keys with a *non-empty* localpart and a matching domain -# are eligible for lookup: 'user' lookups, bare domain lookups +# This is a list of domain names, paths to files, or "type:table" +# databases. When specified, only fully qualified search keys +# with a *non-empty* localpart and a matching domain are +# eligible for lookup: 'user' lookups, bare domain lookups # and "@domain" lookups are not performed. This can significantly # reduce the query load on the MySQL server. # .nf diff --git a/postfix/proto/pgsql_table b/postfix/proto/pgsql_table index fefc7a830..f5d96833c 100644 --- a/postfix/proto/pgsql_table +++ b/postfix/proto/pgsql_table @@ -16,7 +16,7 @@ # databases. In order to use PostgreSQL lookups, define a # PostgreSQL source as a lookup table in main.cf, for example: # .nf -# alias_maps = pgsql:/etc/pgsql-aliases.cf +# alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf # .fi # # The file /etc/postfix/pgsql-aliases.cf has the same format as @@ -53,6 +53,7 @@ # Examples: # .nf # hosts = postgresql://username@example.com/tablename?sslmode=require +# hosts = inet:host1.some.domain inet:host2.some.domain:port # hosts = host1.some.domain host2.some.domain:port # hosts = unix:/file/name # .fi @@ -130,7 +131,7 @@ # \fBselect_function\fR, \fBquery\fR, \fBselect_field\fR, ... # # With Postfix 2.2 the \fBquery\fR parameter has highest precedence, -# see COMPATIBILITY above. +# see OBSOLETE QUERY INTERFACES below. # # NOTE: DO NOT put quotes around the \fBquery\fR parameter. # .IP "\fBresult_format (default: \fB%s\fR)\fR" @@ -176,8 +177,8 @@ # # NOTE: DO NOT put quotes around the result format! # .IP "\fBdomain (default: no domain list)\fR" -# This is a list of domain names, paths to files, or -# dictionaries. When specified, only fully qualified search +# This is a list of domain names, paths to files, or "type:table" +# databases. When specified, only fully qualified search # keys with a *non-empty* localpart and a matching domain # are eligible for lookup: 'user' lookups, bare domain lookups # and "@domain" lookups are not performed. This can significantly diff --git a/postfix/proto/postconf.proto b/postfix/proto/postconf.proto index 19e5d16df..c9c5b8218 100644 --- a/postfix/proto/postconf.proto +++ b/postfix/proto/postconf.proto @@ -219,7 +219,7 @@ stop
    ". This is the default with Postfix version 2.6 and earlier.

    Specify a location in a file system that will not fill up. If the -database becomes corrupted, the world comes to an end. To recover +database becomes corrupted, the world comes to an end. To recover, delete (NOT: truncate) the file and do "postfix reload".

    @@ -263,9 +263,10 @@ The time after which a failed probe expires from the address verification cache.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -278,9 +279,10 @@ The time after which a failed address verification probe needs to be refreshed.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.1 and later. @@ -299,8 +301,10 @@ logged as "partial" when the daemon terminates early after "postfix reload", "postfix stop", or no requests for $max_idle seconds.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.7.

    @@ -348,9 +352,10 @@ verification request in progress. The default polling delay is 3 seconds.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -363,9 +368,10 @@ The time after which a successful probe expires from the address verification cache.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -379,9 +385,10 @@ to be refreshed. The address verification status is not updated when the probe fails (optimistic caching).

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.1 and later. @@ -751,10 +758,10 @@ bounce_queue_lifetime limit. By default, this limit is the same as for regular mail.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is d (days). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    Specify 0 when mail delivery should be tried only once. @@ -909,10 +916,10 @@ be owned by root.

    How much time a Postfix daemon process may take to handle a request before it is terminated by a built-in watchdog timer.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM debug_peer_level 2 @@ -979,7 +986,7 @@ for each message. One message can be preempted by another one when the other message can be delivered using no more delivery slots (i.e., invocations of delivery agents) than the current message counter has accumulated (or will eventually accumulate - see about -slot loans below). This parameter controls how often is the counter +slot loans below). This parameter controls how often the counter is incremented - it happens after each default_delivery_slot_cost recipients have been delivered.

    @@ -1022,7 +1029,7 @@ default_delivery_slot_cost = 2 The default maximal number of parallel deliveries to the same destination. This is the default limit for delivery via the lmtp(8), pipe(8), smtp(8) and virtual(8) delivery agents. -With per-destination recipient limit > 1, a destination is a domain, +With a per-destination recipient limit > 1, a destination is a domain, otherwise it is a recipient.

    @@ -1075,7 +1082,7 @@ The default value for the extra per-transport limit imposed on the number of in-memory recipients. This extra recipient space is reserved for the cases when the Postfix queue manager's scheduler preempts one message with another and suddenly needs some extra -recipients slots for the chosen message in order to avoid performance +recipient slots for the chosen message in order to avoid performance degradation.

    @@ -1102,7 +1109,7 @@ name of the message delivery transport.

    The default rights used by the local(8) delivery agent for delivery -to external file or command. These rights are used when delivery +to an external file or command. These rights are used when delivery is requested from an aliases(5) file that is owned by root, or when delivery is done on behalf of root. DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER. @@ -1214,13 +1221,22 @@ name, or an email address whose domain was denylisted).

    The sender address localpart or <> in case of the null address.
    -
    ${name?text}
    +
    ${name?value}
    -
    Expands to `text' if $name is not empty.
    +
    ${name?{value}} (Postfix ≥ 3.0)
    -
    ${name:text}
    +
    Expands to value when $name is non-empty.
    + +
    ${name:value}
    + +
    ${name:{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is empty.
    -
    Expands to `text' if $name is empty.
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    @@ -1265,7 +1281,7 @@ name of the message delivery transport.

    The default per-transport limit on the number of recipients refilled at -once. When not all message recipients fit into the memory at once, keep +once. When not all message recipients fit into memory at once, keep loading more of them in batches of at least this many at a time. See also $default_recipient_refill_delay, which may result in recipient batches lower than this when this limit is too high for too slow deliveries. @@ -1281,10 +1297,10 @@ name of the message delivery transport. %PARAM default_recipient_refill_delay 5s

    -The default per-transport maximum delay between recipients refills. -When not all message recipients fit into the memory at once, keep loading +The default per-transport maximum delay between refilling recipients. +When not all message recipients fit into memory at once, keep loading more of them at least once every this many seconds. This is used to -make sure the recipients are refilled in timely manner even when +make sure the recipients are refilled in a timely manner even when $default_recipient_refill_limit is too high for too slow deliveries.

    @@ -1345,7 +1361,7 @@ Do not change this unless you have a complete understanding of RFC 5321.

    The names of message delivery transports that should not deliver mail unless someone issues "sendmail -q" or equivalent. Specify zero -or more names of mail delivery transports names that appear in the +or more mail delivery transport names that appear in the first field of master.cf.

    @@ -1371,10 +1387,10 @@ The time between attempts to acquire an exclusive lock on a mailbox file or bounce(8) logfile.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM disable_vrfy_command no @@ -1615,8 +1631,10 @@ d=days, w=weeks. The default time unit is hours.

    The delay between attempts to fork() a child process.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM execution_directory_expansion_filter see "postconf -d" output @@ -1629,7 +1647,7 @@ outside the allowed set are replaced by underscores.

    %PARAM command_execution_directory

    The local(8) delivery agent working directory for delivery to -external command. Failure to change directory causes the delivery +external commands. Failure to change directory causes the delivery to be deferred.

    The command_execution_directory value is not subject to Postfix @@ -1678,12 +1696,21 @@ address extension delimiter (Postfix 2.10 and earlier).

    ${name?value}
    +
    ${name?{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is non-empty.
    ${name:value}
    +
    ${name:{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is empty.
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    +

    @@ -1743,12 +1770,21 @@ address extension delimiter (Postfix 2.10 and earlier).

    ${name?value}
    +
    ${name?{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is non-empty.
    ${name:value}
    +
    ${name:{value}} (Postfix ≥ 3.0)
    +
    Expands to value when $name is empty.
    +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    +

    @@ -1897,11 +1933,11 @@ mis-delivery of mail. %PARAM import_environment see "postconf -d" output -

    The list of environment parameters that a privileged Postfix +

    The list of environment variables that a privileged Postfix process will import from a non-Postfix parent process, or name=value environment overrides. Unprivileged utilities will enforce the name=value overrides, but otherwise will not change their process -environment. Examples of relevant parameters:

    +environment. Examples of relevant environment variables:

    @@ -1926,7 +1962,7 @@ environment. Examples of relevant parameters:

    Specify a list of names and/or name=value pairs, separated by whitespace or comma. Specify "{ name=value }" to protect whitespace -or comma in parameter values (whitespace after the opening "{" and +or comma in environment variable values (whitespace after the opening "{" and before the closing "}" is ignored). The form name=value is supported with Postfix version 2.1 and later; the use of {} is supported with Postfix 3.0 and @@ -2101,10 +2137,10 @@ example, by the Postfix address resolving and rewriting clients.

    With Postfix 2.4 the default value was reduced from 100s to 5s.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM ipc_timeout 3600s @@ -2115,10 +2151,10 @@ situations. If the time limit is exceeded the software aborts with a fatal error.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM ipc_ttl 1000s @@ -2130,10 +2166,10 @@ after reaching their client limit. This is used, for example, by the Postfix address resolving and rewriting clients.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -2151,10 +2187,10 @@ zero (use the operating system built-in time limit). When no connection can be made within the deadline, the LMTP client tries the next address on the mail exchanger list.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    Example: @@ -2171,10 +2207,10 @@ and for receiving the remote LMTP server response. When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_data_init_timeout 120s @@ -2184,10 +2220,10 @@ and for receiving the remote LMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_data_xfer_timeout 180s @@ -2198,10 +2234,10 @@ When the connection stalls for more than $lmtp_data_xfer_timeout the LMTP client terminates the transfer.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_lhlo_timeout 300s @@ -2212,10 +2248,10 @@ greeting banner, or when it sends no greeting banner within the deadline, the LMTP client tries the next address on the mail exchanger list.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_mail_timeout 300s @@ -2224,10 +2260,10 @@ The Postfix LMTP client time limit for sending the MAIL FROM command, and for receiving the remote LMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_quit_timeout 300s @@ -2236,10 +2272,10 @@ The Postfix LMTP client time limit for sending the QUIT command, and for receiving the remote LMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_rcpt_timeout 300s @@ -2248,10 +2284,10 @@ The Postfix LMTP client time limit for sending the RCPT TO command, and for receiving the remote LMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_rset_timeout 20s @@ -2261,10 +2297,10 @@ sends RSET in order to finish a recipient address probe, or to verify that a cached connection is still alive.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM lmtp_send_xforward_command no @@ -2273,7 +2309,7 @@ Send an XFORWARD command to the remote LMTP server when the LMTP LHLO server response announces XFORWARD support. This allows an lmtp(8) delivery agent, used for content filter message injection, to forward the name, address, protocol and HELO name of the original -client to the content filter and downstream queuing LMTP server. +client to the content filter and downstream LMTP server. Before you change the value to yes, it is best to make sure that your content filter supports this command.

    @@ -2300,10 +2336,10 @@ In case of problems the client does NOT try the next address on the mail exchanger list.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -2312,7 +2348,7 @@ This feature is available in Postfix 2.1 and later. %PARAM local_command_shell

    -Optional shell program for local(8) delivery to non-Postfix command. +Optional shell program for local(8) delivery to non-Postfix commands. By default, non-Postfix commands are executed directly; commands are given to the default shell (typically, /bin/sh) only when they contain shell meta characters or shell built-in commands. @@ -2501,11 +2537,20 @@ address extension delimiter (Postfix 2.10 and earlier).

    ${name?value}
    -
    Expands to value when $name has a non-empty value.
    +
    ${name?{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is non-empty.
    ${name:value}
    -
    Expands to value when $name has an empty value.
    +
    ${name:{value}} (Postfix ≥ 3.0)
    + +
    Expands to value when $name is empty.
    + +
    ${name?{value1}:{value2}} (Postfix ≥ 3.0)
    + +
    Expands to value1 when $name is non-empty, +value2 otherwise.
    @@ -2727,7 +2772,9 @@ mailbox_command = /some/where/maildrop -d "$USER" file, or zero (no limit). In fact, this limits the size of any file that is written to upon local delivery, including files written by external commands that are executed by the local(8) delivery -agent.

    +agent. The value cannot exceed LONG_MAX (typically, a 32-bit or +64-bit signed integer). +

    This limit must not be smaller than the message size limit. @@ -2871,10 +2918,10 @@ is ignored by the Postfix queue manager and by other long-lived Postfix daemon processes.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM max_use 100 @@ -2894,10 +2941,10 @@ The maximal time between attempts to deliver a deferred message.

    This parameter should be set to a value greater than or equal to $minimal_backoff_time. See also $queue_run_delay.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM maximal_queue_lifetime 5d @@ -2907,10 +2954,10 @@ temporary error, and the time in the queue has reached the maximal_queue_lifetime limit.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is d (days). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    Specify 0 when mail delivery should be tried only once. @@ -2931,6 +2978,8 @@ This feature is available in Postfix 2.11 and later.

    The maximal size in bytes of a message, including envelope information. +The value cannot exceed LONG_MAX (typically, a 32-bit or 64-bit +signed integer).

    Note: be careful when making changes. Excessively small values @@ -2953,10 +3002,10 @@ kept in the short-term, in-memory, destination status cache.

    This parameter should be set greater than or equal to $queue_run_delay. See also $maximal_backoff_time.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM multi_recipient_bounce_reject_code 550 @@ -3109,7 +3158,7 @@ block from the list. The form "!/file/name" is supported only in Postfix version 2.4 and later.

    Note 1: Pattern matching of domain names is controlled by the -or absence of "mynetworks" in the parent_domain_matches_subdomains +presence or absence of "mynetworks" in the parent_domain_matches_subdomains parameter value.

    Note 2: IP version 6 address information must be specified inside @@ -3266,7 +3315,7 @@ transport_maps

    qmqpd_authorized_clients, -smtpd_access_maps, +smtpd_access_maps,
    Postfix version 2.8 and later
    @@ -3413,10 +3462,10 @@ reply to the remote QMQP client. The purpose is to slow down confused or malicious clients.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM qmqpd_timeout 300s @@ -3426,10 +3475,10 @@ If a read or write operation blocks for more than $qmqpd_timeout seconds the Postfix QMQP server gives up and disconnects.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM queue_minfree 0 @@ -3462,10 +3511,10 @@ prior to Postfix 2.4 the default value was 1000s.

    This parameter should be set less than or equal to $minimal_backoff_time. See also $maximal_backoff_time.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM rbl_reply_maps @@ -3645,7 +3694,7 @@ the recipient_delimiter set. The delimiter character and extension may then be used to generate an extended .forward file name. This implementation recognizes one delimiter character and one extension per email address localpart or email address. With Postfix 2.10 and -earler, the recipient_delimiter specifies a single character.

    +earlier, the recipient_delimiter specifies a single character.

    See canonical(5), local(8), relocated(5) and virtual(5) for the effects of recipient_delimiter on lookups in aliases, canonical, @@ -3751,7 +3800,7 @@ and then floods innocent people with undeliverable mail. Technically, tables listed with $relay_recipient_maps are used as lists: Postfix needs to know only if a lookup string is found or not, but it does not -use the result from table lookup.

    +use the result from the table lookup.

    Specify zero or more "type:name" lookup tables, separated by @@ -4183,10 +4232,10 @@ disable the time limit (i.e. use whatever timeout is implemented by the operating system).

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_data_done_timeout 600s @@ -4200,10 +4249,10 @@ When no response is received within the deadline, a warning is logged that the mail may be delivered multiple times.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_data_init_timeout 120s @@ -4363,10 +4412,10 @@ The Postfix SMTP client time limit for sending the HELO or EHLO command, and for receiving the initial remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_host_lookup dns @@ -4426,10 +4475,10 @@ The Postfix SMTP client time limit for sending the MAIL FROM command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_mx_address_limit 5 @@ -4467,6 +4516,11 @@ turns on the PIX firewall "<CR><LF>.<CR><LF>" bug workaround for delivery through firewalls with "smtp fixup" mode turned on.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    By default, the workaround is turned off for mail that is queued for less than 500 seconds. In other words, the workaround is normally @@ -4486,10 +4540,10 @@ The Postfix SMTP client time limit for sending the QUIT command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_quote_rfc821_envelope yes @@ -4528,10 +4582,10 @@ The Postfix SMTP client time limit for sending the SMTP RCPT TO command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtp_sasl_auth_enable no @@ -4708,10 +4762,10 @@ The Postfix SMTP client time limit for sending the XFORWARD command, and for receiving the remote SMTP server response.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -5072,7 +5126,7 @@ with the anvil_rate_time_unit configuration parameter.

    -By default, there is no limit on the number AUTH commands that a +By default, there is no limit on the number of AUTH commands that a client may send.

    @@ -5120,7 +5174,7 @@ client network address information.
    By default use the remote SMTP client certificate fingerprint or the public key -fingerprint (Postfix 2.9 and later) as lookup key for the specified +fingerprint (Postfix 2.9 and later) as the lookup key for the specified access(5) database; with Postfix version 2.2, also require that the remote SMTP client certificate is verified successfully. The fingerprint digest algorithm is configurable via the @@ -5217,7 +5271,7 @@ This feature is available in Postfix 2.7 and later.
    check_sasl_access type:table
    -
    Use the remote SMTP client SASL user name as lookup key for +
    Use the remote SMTP client SASL user name as the lookup key for the specified access(5) database. The lookup key has the form "username@domainname" when the smtpd_sasl_local_domain parameter value is non-empty. Unlike the check_client_access feature, @@ -5245,7 +5299,7 @@ authenticated via the RFC 4954 (AUTH) protocol.
    Permit the request when the remote SMTP client certificate is verified successfully. This option must be used only if a special -CA issues the certificates and only this CA is listed as trusted +CA issues the certificates and only this CA is listed as a trusted CA. Otherwise, clients with a third-party certificate would also be allowed to relay. Specify "tls_append_default_CA = no" when the trusted CA is specified with smtpd_tls_CAfile or smtpd_tls_CApath, @@ -5557,10 +5611,17 @@ a client has made more than $smtpd_soft_error_limit errors, and fewer than $smtpd_hard_error_limit errors, without delivering mail.

    -

    With Postfix version 2.0 and earlier: the SMTP server delay before -sending a reject (4xx or 5xx) response, when the client has made -fewer than $smtpd_soft_error_limit errors without delivering -mail.

    +

    With Postfix version 2.0 and earlier: the SMTP server delay +before sending a reject (4xx or 5xx) response, when the client has +made fewer than $smtpd_soft_error_limit errors without delivering +mail. When the client has made $smtpd_soft_error_limit or more errors, +delay all responses with the larger of (number of errors) seconds +or $smtpd_error_sleep_time.

    + +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    %PARAM smtpd_soft_error_limit 10 @@ -5572,11 +5633,18 @@ responses.
      -
    • With Postfix version 2.1 and later, the Postfix SMTP server -delays all responses by $smtpd_error_sleep_time seconds.

      +
    • With Postfix version 2.1 and later, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server +delays all responses by $smtpd_error_sleep_time.

      + +
    • With Postfix versions 2.0 and earlier, when the error count +is > $smtpd_soft_error_limit, the Postfix SMTP server delays all +responses by the larger of (number of errors) seconds or +$smtpd_error_sleep_time.

      -
    • With Postfix versions 2.0 and earlier, the Postfix SMTP -server delays all responses by (number of errors) seconds.

      +
    • With Postfix versions 2.0 and earlier, when the error count +is ≤ $smtpd_soft_error_limit, the Postfix SMTP server delays 4XX +and 5XX responses by $smtpd_error_sleep_time.

    @@ -5585,9 +5653,10 @@ server delays all responses by (number of errors) seconds.

    The maximal number of errors a remote SMTP client is allowed to make without delivering mail. The Postfix SMTP server disconnects -when the limit is exceeded. Normally the default limit is 20, but +when the limit is reached. Normally the default limit is 20, but it changes under overload to just 1. With Postfix 2.5 and earlier, the SMTP server always allows up to 20 errors by default. +Valid values are greater than zero.

    @@ -5961,7 +6030,7 @@ supposed to give the result to another Postfix SMTP server process.

    Specify "host:port" or "inet:host:port" for a TCP endpoint, or "unix:pathname" for a UNIX-domain endpoint. The host can be specified as an IP address or as a symbolic name; no MX lookups are done. -When no "host" or "host:" are specified, the local machine is +When no "host" or "host:" is specified, the local machine is assumed. Pathname interpretation is relative to the Postfix queue directory.

    @@ -5979,10 +6048,10 @@ generic error message while more detailed information is logged to the maillog file.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.1 and later. @@ -6087,7 +6156,7 @@ feature is available in Postfix 2.1 and later.

      -
    • Postfix is mail forwarder: the resolved RCPT TO domain matches +
    • Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and the address contains no sender-specified routing (user@elsewhere@domain), @@ -6100,7 +6169,7 @@ contains no sender-specified routing (user@elsewhere@domain).
      permit_mx_backup
      -
      Permit the request when the local mail system is backup MX for +
      Permit the request when the local mail system is a backup MX for the RCPT TO domain, or when the domain is an authorized destination (see permit_auth_destination for definition). @@ -6113,7 +6182,7 @@ sender-specified routing information (example: user@elsewhere@domain). access is not restricted with permit_mx_backup_networks.
    • Safety: as of Postfix version 2.3, permit_mx_backup no longer -accepts the address when the local mail system is primary MX for +accepts the address when the local mail system is a primary MX for the recipient domain. Exception: permit_mx_backup accepts the address when it specifies an authorized destination (see permit_auth_destination for definition). @@ -6153,7 +6222,7 @@ in Postfix version 2.0 and later.
      • -
      • Postfix is mail forwarder: the resolved RCPT TO domain matches +
      • Postfix is a mail forwarder: the resolved RCPT TO domain matches $relay_domains or a subdomain thereof, and contains no sender-specified routing (user@elsewhere@domain), @@ -6199,7 +6268,7 @@ Address verification information is managed by the verify(8) server; see the ADDRESS_VERIFICATION_README file for details.
        The unverified_recipient_reject_code parameter specifies the numerical response code when an address is known to bounce (default: 450, -change into 550 when you are confident that it is safe to do so). +change it to 550 when you are confident that it is safe to do so).
        The unverified_recipient_defer_code parameter specifies the numerical response code when an address probe failed due to a temporary problem (default: 450).
        The @@ -6265,6 +6334,8 @@ By default, the Postfix SMTP server accepts:
      • Mail from clients whose IP address matches $mynetworks, or: +
      • Mail from clients who are SASL authenticated, or: +
      • Mail to remote destinations that match $relay_domains, except for addresses that contain sender-specified routing (user@elsewhere@domain), or: @@ -6378,7 +6449,7 @@ $mynetworks to prevent Postfix from offering AUTH to local clients.

        Specify a list of network/netmask patterns, separated by commas and/or whitespace. The mask specifies the number of bits in the -network part of a host address. You can also "/file/name" or +network part of a host address. You can also specify "/file/name" or "type:table" patterns. A "/file/name" pattern is replaced by its contents; a "type:table" lookup table is matched when a table entry matches a lookup string (the lookup result is ignored). Continue @@ -6646,7 +6717,7 @@ Postfix version 2.1 and later.

        reject_unknown_sender_domain
        -
        Reject the request when Postfix is not final destination for +
        Reject the request when Postfix is not the final destination for the sender address, and the MAIL FROM domain has 1) no DNS MX and no DNS A record, or 2) a malformed MX record such as a record with @@ -6736,10 +6807,10 @@ Note: if you set SMTP time limits to very large values you may have to update the global ipc_timeout parameter.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM soft_bounce no @@ -6774,10 +6845,10 @@ The time after which a stale exclusive mailbox lockfile is removed. This is used for delivery to file or mailbox.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM strict_rfc821_envelopes no @@ -6895,10 +6966,10 @@ The time between attempts by the Postfix queue manager to contact a malfunctioning message delivery transport.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM trigger_timeout 10s @@ -6909,10 +6980,10 @@ programs from getting stuck when the mail system is under heavy load.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM unknown_address_reject_code 450 @@ -7062,7 +7133,7 @@ This feature is available in Postfix 2.6 and later. %PARAM virtual_alias_domains $virtual_alias_maps -

        Postfix is final destination for the specified list of virtual +

        Postfix is the final destination for the specified list of virtual alias domains, that is, domains for which all addresses are aliased to addresses in other local or remote domains. The SMTP server validates recipient addresses with $virtual_alias_maps and rejects @@ -7086,7 +7157,7 @@ domain names).

        Specify a list of host or domain names, "/file/name" or "type:table" patterns, separated by commas and/or whitespace. A "/file/name" pattern is replaced by its contents; a "type:table" -lookup table is matched when a table entry matches a lookup string +lookup table is matched when a table entry matches a host or domain name (the lookup result is ignored). Continue long lines by starting the next line with whitespace. Specify "!pattern" to exclude a host or domain name from the list. The form "!/file/name" is supported @@ -7120,7 +7191,7 @@ This feature is available in Postfix 2.1 and later.

        Optional lookup tables that alias specific mail addresses or domains -to other local or remote address. The table format and lookups +to other local or remote addresses. The table format and lookups are documented in virtual(5). For an overview of Postfix address manipulations see the ADDRESS_REWRITING_README document.

        @@ -7308,10 +7379,10 @@ How long the postkick(1) command waits for a request to enter the Postfix daemon process input buffer before giving up.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        This feature is available in Postfix 2.1 and later. @@ -7480,13 +7551,13 @@ How frequently the anvil(8) connection and rate limiting server logs peak usage information.

        -

        -This feature is available in Postfix 2.2 and later. -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). +This feature is available in Postfix 2.2 and later.

        %PARAM enable_errors_to no @@ -7526,10 +7597,10 @@ frequency of updates, the anvil(8) server uses volatile memory only. Thus, information is lost whenever the process terminates.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM command_expansion_filter see "postconf -d" output @@ -7578,8 +7649,8 @@ settings. This parameter speeds up the moment when a message preemption can happen. Instead of waiting until the full amount of delivery slots required is available, the preemption can happen when -transport_delivery_slot_discount percent of the required amount -plus transport_delivery_slot_loan still remains to be accumulated. +transport_delivery_slot_discount percent of the required amount +plus transport_delivery_slot_loan still remains to be accumulated. Note that the full amount will still have to be accumulated before another preemption can take place later.

        @@ -7628,8 +7699,9 @@ is requested with the SMTP XVERP command or with the "sendmail

        The two default VERP delimiter characters. These are used when no explicit delimiters are specified with the SMTP XVERP command -or with the "sendmail -V" command-line option. Specify -characters that are allowed by the verp_delimiter_filter setting. +or with the "sendmail -XV" command-line option (Postfix 2.2 +and earlier: -V). Specify characters that are allowed by the +verp_delimiter_filter setting.

        @@ -7902,7 +7974,7 @@ command.

        Most of these limitations have been with the Postfix -a connection cache that is shared among multiple LMTP client +connection cache that is shared among multiple LMTP client programs.

        @@ -7944,7 +8016,7 @@ active attacks.
        nodictionary
        Disallow authentication methods that are vulnerable to passive -dictionary attack.
        +dictionary attacks.
        noanonymous
        @@ -8102,7 +8174,7 @@ This is the list of trusted networks for relay access control etc.
      • Specify "mynetworks_style = subnet" when Postfix should "trust" remote SMTP clients in the same IP subnetworks as the local machine. On Linux, this works correctly only with interfaces -specified with the "ifconfig" command.

        +specified with the "ifconfig" or "ip" command.

      • Specify "mynetworks_style = class" when Postfix should "trust" remote SMTP clients in the same IP class A/B/C networks as the @@ -8277,6 +8349,11 @@ The minimal delay between warnings that a specific destination is clogging up the Postfix active queue. Specify 0 to disable.

        +

        Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is enabled with the helpful_warnings parameter.

        @@ -8411,10 +8488,10 @@ How long the Postfix master(8) waits before forking a server that appears to be malfunctioning.

        -

        -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        %PARAM setgid_group postdrop @@ -8457,10 +8534,15 @@ How long the Postfix SMTP client pauses before sending

        -Choosing a too short time makes this workaround ineffective when +Choosing too short a time makes this workaround ineffective when sending large messages over slow network connections.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        + %PARAM smtp_randomize_addresses yes

        @@ -8476,6 +8558,11 @@ sends RSET in order to finish a recipient address probe, or to verify that a cached session is still usable.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.1 and later.

        %PARAM smtpd_data_restrictions @@ -8586,6 +8673,11 @@ The time after which an idle SMTPD policy service connection is closed.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.1 and later.

        @@ -8597,6 +8689,11 @@ The time after which an active SMTPD policy service connection is closed.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.1 and later.

        @@ -8608,6 +8705,11 @@ The time limit for connecting to, writing to, or receiving from a delegated SMTPD policy server.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.1 and later.

        @@ -8943,7 +9045,7 @@ virtual_mailbox_base = /var/mail %PARAM virtual_mailbox_domains $virtual_mailbox_maps -

        Postfix is final destination for the specified list of domains; +

        Postfix is the final destination for the specified list of domains; mail is delivered via the $virtual_transport mail delivery transport. By default this is the Postfix virtual(8) delivery agent. The SMTP server validates recipient addresses with $virtual_mailbox_maps @@ -9014,6 +9116,13 @@ match any user in the specified domain that does not have a specific "user@domain.tld" entry.

        +

        +With the default "virtual_mailbox_domains = $virtual_mailbox_maps", +lookup tables also need entries with a left-hand side of "domain.tld" +to satisfy virtual_mailbox_domain lookups (the right-hand side is +required but will not be used). +

        +

        The remainder of this text is specific to the virtual(8) delivery agent. It does not apply when mail is delivered with a different mail delivery program.

        @@ -9639,13 +9748,13 @@ Postfix 2.3 and later use smtpd_tls_security_level instead.

        %PARAM smtpd_tls_wrappermode no -

        Run the Postfix SMTP server in the non-standard "wrapper" mode, +

        Run the Postfix SMTP server in TLS "wrapper" mode, instead of using the STARTTLS command.

        If you want to support this service, enable a special port in master.cf, and specify "-o smtpd_tls_wrappermode=yes" on the SMTP -server's command line. Port 465 (smtps) was once chosen for this -purpose.

        +server's command line. Port 465 (submissions/smtps) is reserved for +this purpose.

        This feature is available in Postfix 2.2 and later.

        @@ -9708,7 +9817,7 @@ concurrent access. The file is created if it does not exist. The smtpd(8) daemon does not use this parameter directly, rather the cache is implemented indirectly in the tlsmgr(8) daemon. This means that per-smtpd-instance master.cf overrides of this parameter are not -effective. Note, that each of the cache databases supported by tlsmgr(8) +effective. Note that each of the cache databases supported by tlsmgr(8) daemon: $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to be stored separately. It is not at this time possible to store multiple @@ -9756,6 +9865,11 @@ value of 2 minutes is used instead. TLS session tickets require an OpenSSL library (at least version 0.9.8h) that provides full support for this TLS extension.

        +

        Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later, and updated for TLS session ticket support in Postfix 2.11.

        @@ -9865,7 +9979,7 @@ Postfix uses ciphers with forward secrecy.

        smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem -

        This feature is available with Postfix version 2.2.

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM smtpd_tls_dh512_param_file @@ -9887,7 +10001,8 @@ configuration parameter.

        smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem -

        This feature is available with Postfix version 2.2.

        +

        This feature is available in Postfix 2.2 and later, +but is ignored in Postfix 3.6 and later.

        %PARAM smtpd_starttls_timeout see "postconf -d" output @@ -9896,6 +10011,11 @@ during TLS startup and shutdown handshake procedures. The current default value is stress-dependent. Before Postfix version 2.8, it was fixed at 300s.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM smtp_tls_cert_file @@ -10055,10 +10175,10 @@ log trust-chain verification errors.
        2 Also log levels during TLS negotiation.
        -
        3 Also log hexadecimal and ASCII dump of TLS negotiation -process.
        +
        3 Also log the hexadecimal and ASCII dump of the +TLS negotiation process.
        -
        4 Also log hexadecimal and ASCII dump of complete +
        4 Also log the hexadecimal and ASCII dump of complete transmission after STARTTLS.
        @@ -10077,7 +10197,7 @@ concurrent access. The file is created if it does not exist. The smtp(8) daemon does not use this parameter directly, rather the cache is implemented indirectly in the tlsmgr(8) daemon. This means that per-smtp-instance master.cf overrides of this parameter are not effective. -Note, that each of the cache databases supported by tlsmgr(8) daemon: +Note that each of the cache databases supported by tlsmgr(8) daemon: $smtpd_tls_session_cache_database, $smtp_tls_session_cache_database (and with Postfix 2.3 and later $lmtp_tls_session_cache_database), needs to be stored separately. It is not at this time possible to store multiple @@ -10113,6 +10233,11 @@ are not possible.

        ≤ 0, session caching is disabled. If set to a positive value less than 2 minutes, the minimum value of 2 minutes is used instead.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM smtp_use_tls no @@ -10161,7 +10286,7 @@ for MTA clients are not specified.

        checking. This setting has no effect on sessions that are controlled via the smtp_tls_per_site table.

        -

        Disabling the hostname verification can make sense in closed +

        Disabling the hostname verification can make sense in a closed environment where special CAs are created. If not used carefully, this option opens the danger of a "man-in-the-middle" attack (the CommonName of this attacker will be logged).

        @@ -10174,8 +10299,8 @@ Postfix 2.3 and later use smtp_tls_security_level instead.

        Optional lookup tables with the Postfix SMTP client TLS usage policy by next-hop destination and by remote SMTP server hostname. When both lookups succeed, the more specific per-site policy (NONE, -MUST, etc) overrides the less specific one (MAY), and the more secure -per-site policy (MUST, etc) overrides the less secure one (NONE). +MUST, etc.) overrides the less specific one (MAY), and the more secure +per-site policy (MUST, etc.) overrides the less secure one (NONE). With Postfix 2.3 and later smtp_tls_per_site is strongly discouraged: use smtp_tls_policy_maps instead.

        @@ -10199,7 +10324,7 @@ lookup key, and overrides the global smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername settings.
        MAY
        Try to use TLS if the server announces support, -otherwise use the unencrypted connection. This has less precedence +otherwise use an unencrypted connection. This has less precedence than a more specific result (including NONE) from the alternate host or next-hop lookup key, and has less precedence than the more specific global "smtp_enforce_tls = yes" or "smtp_tls_enforce_peername @@ -10217,7 +10342,7 @@ smtp_enforce_tls and smtp_tls_enforce_peername settings.
        SMTP server hostname matches the information in the remote SMTP server certificate, and require that the remote SMTP server certificate was issued by a trusted CA. This overrides a less secure NONE -and MUST_NOPEERMATCH or a less specific MAY lookup +or MUST_NOPEERMATCH or a less specific MAY lookup result from the alternate host or next-hop lookup key, and overrides the global smtp_use_tls, smtp_enforce_tls and smtp_tls_enforce_peername settings. @@ -10295,6 +10420,11 @@ Postfix 2.3 and later; use smtp_tls_mandatory_ciphers instead.

        Time limit for Postfix SMTP client write and read operations during TLS startup and shutdown handshake procedures.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM smtp_tls_dkey_file $smtp_tls_dcert_file @@ -10365,7 +10495,7 @@ type must be prepended: egd:/path/to/egd_socket for a source with EGD compatible socket interface, or dev:/path/to/device for a device file.

        -

        Note: on OpenBSD systems specify /dev/arandom when /dev/urandom +

        Note: on OpenBSD systems specify dev:/dev/arandom when dev:/dev/urandom gives timeout errors.

        This feature is available in Postfix 2.2 and later.

        @@ -10387,6 +10517,11 @@ in-memory pseudo random number generator (PRNG) pool from external sources. The actual time between re-seeding attempts is calculated using the PRNG, and is between 0 and the time specified.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM tls_random_prng_update_period 3600s @@ -10395,6 +10530,11 @@ using the PRNG, and is between 0 and the time specified.

        the pseudo random number generator (PRNG) to the file specified with $tls_random_exchange_name.

        +

        Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

        +

        This feature is available in Postfix 2.2 and later.

        %PARAM tls_daemon_random_bytes 32 @@ -10515,7 +10655,7 @@ DNS lookup and increases the maximal inbound delivery rate.

        The maximal number of digits after the decimal point when logging sub-second delay values. Specify a number in the range 0..6.

        -

        Large delay values are rounded off to an integral number seconds; +

        Large delay values are rounded off to an integral number of seconds; delay values below the delay_logging_resolution_limit are logged as "0", and delay values under 100s are logged with at most two-digit precision.

        @@ -10540,7 +10680,7 @@ precision.

        Pathname of a configuration file with bounce message templates. These override the built-in templates of delivery status notification -(DSN) messages for undeliverable mail, for delayed mail, successful +(DSN) messages for undeliverable mail, delayed mail, successful delivery, or delivery verification. The bounce(5) manual page describes how to edit and test template files.

        @@ -10614,7 +10754,7 @@ The hostname to send in the LMTP LHLO command.

        The default value is the machine hostname. Specify a hostname or -[ip.add.re.ss]. +[ip.add.re.ss] or [ip:v6:add:re::ss].

        @@ -11208,7 +11348,9 @@ attributes (available for opportunistic TLS with Postfix ≥ 2.6) and "connection_reuse" attribute (Postfix ≥ 3.4) override the "smtp_tls_ciphers", "smtp_tls_exclude_ciphers", "smtp_tls_protocols", and -"smtp_tls_connection_reuse" configuration parameters. When opportunistic +"smtp_tls_connection_reuse" configuration parameters. In the policy table, +multiple ciphers, protocols or excluded ciphers must be separated by colons, +as attribute values may not contain whitespace or commas. When opportunistic TLS handshakes fail, Postfix retries the connection with TLS disabled. This allows mail delivery to sites with non-interoperable TLS implementations. @@ -11222,7 +11364,7 @@ optional "exclude" attribute (Postfix ≥ 2.6) overrides the main.cf smtp_tls_mandatory_exclude_ciphers parameter, and the optional "connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. In the policy table, -multiple protocols or excluded ciphers must be separated by colons, +multiple ciphers, protocols or excluded ciphers must be separated by colons, as attribute values may not contain whitespace or commas.

        dane
        @@ -11237,6 +11379,16 @@ server certificate must match the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is available with Postfix 2.11 and later. The optional "connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. +When the effective security level used is may, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_ciphers", "smtp_tls_exclude_ciphers", and "smtp_tls_protocols" +configuration parameters. +When the effective security level used is encrypt, the optional "ciphers", +"exclude", and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters.
        dane-only
        @@ -11246,8 +11398,11 @@ or none are usable, no connection is made to the server. When usable TLSA records are obtained for the remote SMTP server, the server certificate must match the TLSA records. RFC 7672 (DANE) TLS authentication and DNSSEC support is available with Postfix 2.11 -and later. The optional "connection_reuse" attribute (Postfix ≥ -3.4) overrides the main.cf smtp_tls_connection_reuse parameter. +and later. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix ≥ 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
        fingerprint
        @@ -11255,7 +11410,7 @@ and later. The optional "connection_reuse" attribute (Postfix ≥ verification. Available with Postfix 2.5 and later. At this security level, there are no trusted Certification Authorities. The certificate trust chain, expiration date, ... are not checked. Instead, -the optional match attribute, or else the main.cf +the optional "match" attribute, or else the main.cf smtp_tls_fingerprint_cert_match parameter, lists the certificate fingerprints or the public key fingerprint (Postfix 2.9 and later) of the valid server certificate. The digest @@ -11264,8 +11419,12 @@ algorithm used to calculate the fingerprint is selected by the be combined with a "|" delimiter in a single match attribute, or multiple match attributes can be employed. The ":" character is not used as a delimiter as it occurs between each pair of fingerprint (hexadecimal) -digits. The optional "connection_reuse" attribute (Postfix ≥ 3.4) -overrides the main.cf smtp_tls_connection_reuse parameter. +digits. The optional "ciphers", "exclude", and "protocols" attributes +(Postfix ≥ 2.6) override the "smtp_tls_mandatory_ciphers", +"smtp_tls_mandatory_exclude_ciphers", and "smtp_tls_mandatory_protocols" +configuration parameters. The optional "connection_reuse" attribute +(Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse +parameter.
        verify
        Mandatory TLS verification. At this security @@ -11275,8 +11434,11 @@ unauthenticated DNS MX lookups. The optional "match" attribute overrides the main.cf smtp_tls_verify_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. In practice explicit control over matching is more common with the -"secure" policy, described below. The optional "connection_reuse" -attribute (Postfix ≥ 3.4) overrides the main.cf +"secure" policy, described below. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter.
        secure
        @@ -11285,18 +11447,21 @@ MX lookups, though potentially used to determine the candidate next-hop gateway IP addresses, are not trusted to be secure enough for TLS peername verification. Instead, the default name verified in the server certificate is obtained directly from the next-hop, or is explicitly -specified via the optional match attribute which overrides the +specified via the optional "match" attribute which overrides the main.cf smtp_tls_secure_cert_match parameter. In the policy table, multiple match patterns and strategies must be separated by colons. The match attribute is most useful when multiple domains are supported by -common server, the policy entries for additional domains specify matching +a common server: the policy entries for additional domains specify matching rules for the primary domain certificate. While transport table overrides -routing the secondary domains to the primary nexthop also allow secure +that route the secondary domains to the primary nexthop also allow secure verification, they risk delivery to the wrong destination when domains change hands or are re-assigned to new gateways. With the "match" attribute approach, routing is not perturbed, and mail is deferred if -verification of a new MX host fails. The optional "connection_reuse" -attribute (Postfix ≥ 3.4) overrides the main.cf +verification of a new MX host fails. The optional "ciphers", "exclude", +and "protocols" attributes (Postfix ≥ 2.6) override the +"smtp_tls_mandatory_ciphers", "smtp_tls_mandatory_exclude_ciphers", and +"smtp_tls_mandatory_protocols" configuration parameters. The optional +"connection_reuse" attribute (Postfix ≥ 3.4) overrides the main.cf smtp_tls_connection_reuse parameter. @@ -11331,10 +11496,10 @@ Example: match=51:e9:af:2e:1e:40:1f:...:64:0a:30:35:2d:09:16:31:5a:eb:82:76 -

        Note: The hostname strategy if listed in a non-default -setting of smtp_tls_secure_cert_match or in the match attribute -in the policy table can render the secure level vulnerable to -DNS forgery. Do not use the hostname strategy for secure-channel +

        Note: The "hostname" strategy if listed in a non-default +setting of smtp_tls_secure_cert_match or in the "match" attribute +in the policy table can render the "secure" level vulnerable to +DNS forgery. Do not use the "hostname" strategy for secure-channel configurations in environments where DNS security is not assured.

        This feature is available in Postfix 2.3 and later.

        @@ -11388,7 +11553,7 @@ smtp_tls_mandatory_protocols = >=0x0303

        With Postfix < 3.6 there is no support for a minimum or maximum version, and the protocol range is configured via protocol exclusions. To require at least TLS 1.0, set "smtp_tls_mandatory_protocols = !SSLv2, -!SSLv3". Listing the protocols to include, rather than protocols to +!SSLv3". Listing the protocols to include, rather than the protocols to exclude, is supported, but not recommended. The exclusion syntax more accurately matches the underlying OpenSSL interface.

        @@ -11403,7 +11568,7 @@ smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1.1
    -

    also disables any protocols version higher than TLSv1.1 leaving +

    also disables any protocol versions higher than TLSv1.1 leaving only "TLSv1" enabled.

    Support for "TLSv1.3" was introduced in OpenSSL 1.1.1. Disabling @@ -11412,7 +11577,7 @@ releases ≥ 3.0.14, 3.1.10, 3.2.7 and 3.3.2).

    While the vast majority of SMTP servers with DANE TLSA records now support at least TLS 1.2, a few still only support TLS 1.0. If you use -"dane" or "dane-only" it is best to not disable TLSv1, except perhaps +"dane" or "dane-only" it is best not to disable TLSv1, except perhaps via the policy table for destinations which you are sure will support "TLSv1.2".

    @@ -11643,10 +11808,12 @@ smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 %PARAM smtp_tls_security_level -

    The default SMTP TLS security level for the Postfix SMTP client; -when a non-empty value is specified, this overrides the obsolete -parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername. -

    +

    The default SMTP TLS security level for the Postfix SMTP client. +When a non-empty value is specified, this overrides the obsolete +parameters smtp_use_tls, smtp_enforce_tls, and smtp_tls_enforce_peername; +when no value is specified for smtp_tls_enforce_peername or the obsolete +parameters, the default SMTP TLS security level is +none.

    Specify one of the following security levels:

    @@ -11758,7 +11925,7 @@ smtp_tls_security_level = none
     # Opportunistic TLS.
     smtp_tls_security_level = may
    -# Do not tweak opportunistic ciphers or protocol unless it is essential
    +# Do not tweak opportunistic ciphers or protocols unless it is essential
     # to do so (if a security vulnerability is found in the SSL library that
     # can be mitigated by disabling a particular protocol or raising the
     # cipher grade).
    @@ -11814,7 +11981,7 @@ separator. See the MILTER_README document for details.  

    does not arrive via the Postfix smtpd(8) server. This includes local submission via the sendmail(1) command line, new mail that arrives via the Postfix qmqpd(8) server, and old mail that is re-injected -into the queue with "postsuper -r". Specify space or comma as +into the queue with "postsuper -r". Specify space or comma as a separator. See the MILTER_README document for details.

    This feature is available in Postfix 2.3 and later.

    @@ -11886,10 +12053,9 @@ the "hold" queue. Available with Postfix 2.6 and later. application, and for negotiating protocol options.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -11899,10 +12065,9 @@ one-letter suffix that specifies the time unit).

    filter) application, and for receiving the response.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -11912,10 +12077,9 @@ one-letter suffix that specifies the time unit).

    filter) application, and for receiving the response.

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks). The default time unit is s (seconds).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.3 and later.

    @@ -11999,7 +12163,7 @@ values for arbitrary macros that Postfix may send to Milter applications. These defaults are used when there is no corresponding information from the message delivery context.

    -

    Specify name=value or {name}=value pairs separated +

    Specify name=value or {name=value} pairs separated by comma or whitespace. Enclose a pair in "{}" when a value contains comma or whitespace (this form ignores whitespace after the enclosing "{", around the "=", and before the enclosing "}").

    @@ -12034,13 +12198,13 @@ one "medium" or "high" grade cipher.

    export
    Enable "EXPORT" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    low
    Enable "LOW" grade or stronger OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    medium
    @@ -12048,7 +12212,7 @@ choice is insecure and SHOULD NOT be used. or longer symmetric bulk-encryption keys. This is the default minimum strength for mandatory TLS encryption. The underlying cipherlist is specified via the tls_medium_cipherlist configuration parameter, which -you are strongly encouraged to not change. +you are strongly encouraged not to change.
    high
    Enable only "HIGH" grade OpenSSL ciphers. The @@ -12062,7 +12226,7 @@ without encryption. This setting is only appropriate in the rare case that all clients are prepared to use NULL ciphers (not normally enabled in TLS clients). The underlying cipherlist is specified via the tls_null_cipherlist configuration parameter, which you are strongly -encouraged to not change.
    +encouraged not to change. @@ -12140,19 +12304,19 @@ on a per-destination basis.

    export
    Enable "EXPORT" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_export_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    low
    Enable "LOW" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_low_cipherlist configuration -parameter, which you are strongly encouraged to not change. This +parameter, which you are strongly encouraged not to change. This choice is insecure and SHOULD NOT be used.
    medium
    Enable "MEDIUM" grade or better OpenSSL ciphers. The underlying cipherlist is specified via the tls_medium_cipherlist -configuration parameter, which you are strongly encouraged to not change. +configuration parameter, which you are strongly encouraged not to change.
    high
    @@ -12161,7 +12325,7 @@ be appropriate when all mandatory TLS destinations (e.g. when all mail is routed to a suitably capable relayhost) support at least one "HIGH" grade cipher. The underlying cipherlist is specified via the tls_high_cipherlist configuration parameter, which you are strongly -encouraged to not change. +encouraged not to change.
    null
    Enable only the "NULL" OpenSSL ciphers, these provide authentication @@ -12170,7 +12334,7 @@ that all servers are prepared to use NULL ciphers (not normally enabled in TLS servers). A plausible use-case is an LMTP server listening on a UNIX-domain socket that is configured to support "NULL" ciphers. The underlying cipherlist is specified via the tls_null_cipherlist -configuration parameter, which you are strongly encouraged to not +configuration parameter, which you are strongly encouraged not to change.
    @@ -12208,7 +12372,7 @@ smtp_tls_exclude_ciphers = kEDH+aRSA
    -

    The first setting, disables anonymous ciphers. The next setting +

    The first setting disables anonymous ciphers. The next setting disables ciphers that use the MD5 digest algorithm or the (single) DES encryption algorithm. The next setting disables ciphers that use MD5 and DES together. The next setting disables the two ciphers "AES256-SHA" @@ -12236,7 +12400,7 @@ attribute. See smtp_tls_policy_maps for notes and examples.

    the meaning of the "high" setting in smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting.

    +encouraged not to change this setting.

    This feature is available in Postfix 2.3 and later.

    @@ -12249,8 +12413,8 @@ lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. This is the default cipherlist for mandatory TLS encryption in the TLS client (with anonymous ciphers disabled when verifying server certificates). This is the default cipherlist for opportunistic TLS with Postfix -releases after the middle of 2015. You are strongly encouraged to -not change this setting.

    +releases after the middle of 2015. You are strongly encouraged not +to change this setting.

    This feature is available in Postfix 2.3 and later.

    @@ -12260,7 +12424,7 @@ not change this setting.

    the meaning of the "low" setting in smtpd_tls_ciphers, smtpd_tls_mandatory_ciphers, smtp_tls_ciphers, smtp_tls_mandatory_ciphers, lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. You are strongly -encouraged to not change this setting.

    +encouraged not to change this setting.

    This feature is available in Postfix 2.3 and later.

    @@ -12273,7 +12437,7 @@ lmtp_tls_ciphers, and lmtp_tls_mandatory_ciphers. With Postfix releases before the middle of 2015 this is the default cipherlist for the opportunistic ("may") TLS client security level and also the default cipherlist for the SMTP server. You are strongly -encouraged to not change this setting.

    +encouraged not to change this setting.

    This feature is available in Postfix 2.3 and later.

    @@ -12281,8 +12445,8 @@ encouraged to not change this setting.

    The OpenSSL cipherlist for "NULL" grade ciphers that provide authentication without encryption. This defines the meaning of the "null" -setting in smtpd_mandatory_tls_ciphers, smtp_tls_mandatory_ciphers and -lmtp_tls_mandatory_ciphers. You are strongly encouraged to not +setting in smtpd_tls_mandatory_ciphers, smtp_tls_mandatory_ciphers and +lmtp_tls_mandatory_ciphers. You are strongly encouraged not to change this setting.

    This feature is available in Postfix 2.3 and later.

    @@ -12478,7 +12642,7 @@ $ openssl x509 -noout -fingerprint -digest -in certfile.pem -

    The text to the right of "=" sign is the desired fingerprint. +

    The text to the right of the "=" sign is the desired fingerprint. For example:

    @@ -12510,7 +12674,7 @@ $ openssl x509 -in cert.pem -noout -pubkey |

    The Postfix SMTP server and client log the peer (leaf) certificate -fingerprint and public key fingerprint when the TLS loglevel is 2 or +fingerprint and the public key fingerprint when the TLS loglevel is 2 or higher.

    This feature is available in Postfix 2.5 and later.

    @@ -12737,7 +12901,7 @@ use the "!" exclusion syntax, also described below.

    acceptable protocols is to set the lowest acceptable TLS protocol version and/or the highest acceptable TLS protocol version. To set the lower bound include an element of the form: ">=version" where -version is a either one of the TLS protocol names listed above, +version is either one of the TLS protocol names listed above, or a hexadecimal number corresponding to the desired TLS protocol version (0301 for TLS 1.0, 0302 for TLS 1.1, etc.). For the upper bound, use "<=version". There must be no whitespace between @@ -12920,7 +13084,7 @@ parameter. See there for details.

    SMTP client and server. These curves are used by the Postfix SMTP server when "smtpd_tls_eecdh_grade = auto". The selected curves must be implemented by OpenSSL and be standardized for use in TLS -(RFC 4492 or its imminent successor). It is unwise to list only +(RFC 8422). It is unwise to list only "bleeding-edge" curves supported by a small subset of clients. The default list is suitable for most users.

    @@ -12946,10 +13110,10 @@ server when "smtpd_tls_eecdh_grade = strong". The phrase "sensibly strong" means approximately 128-bit security based on best known attacks. The selected curve must be implemented by OpenSSL (as reported by ecparam(1) with the "-list_curves" option) and be one -of the curves listed in Section 5.1.1 of RFC 4492. You should not +of the curves listed in Section 5.1.1 of RFC 8422. You should not generally change this setting. Remote SMTP client implementations must support this curve for EECDH key exchange to take place. It -is unwise to choose an "bleeding-edge" curve supported by only a +is unwise to choose only "bleeding-edge" curves supported by only a small subset of clients.

    The default "strong" curve is rated in NSA +of RFC 8422. You should not generally change this setting. Remote SMTP +client implementations must support this curve for EECDH key exchange +to take place. It is unwise to choose only "bleeding-edge" curves +supported by only a small subset of clients.

    This default "ultra" curve is rated in NSA Suite @@ -13411,6 +13578,11 @@ this case: "_destination_recipient_limit").

    value, where transport is the master.cf name of the message delivery transport.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    Note: transport_time_limit parameters will not show up in "postconf" command output before Postfix version 2.9. This limitation applies to many parameters whose name is a combination @@ -13554,6 +13726,17 @@ unit).

    parameter value, where the initial transport in the parameter name is the master.cf name of the message delivery transport.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    + +

    Note: transport_transport_rate_delay parameters will +not show up in "postconf" command output before Postfix version +2.9. This limitation applies to many parameters whose name is a +combination of a master.cf service name and a built-in suffix (in +this case: "_transport_rate_delay").

    + %PARAM default_destination_rate_delay 0s

    The default amount of delay that is inserted between individual @@ -13664,7 +13847,7 @@ password. Each table (key, value) pair contains a server name, a username and password, and the full server response. This information is stored when a remote SMTP server rejects an authentication attempt with a 535 reply code. As long as the smtp_sasl_password_maps -information does no change, and as long as the smtp_sasl_auth_cache_name +information does not change, and as long as the smtp_sasl_auth_cache_name information does not expire (see smtp_sasl_auth_cache_time) the Postfix SMTP client avoids SASL authentication attempts with the same server, username and password, and instead bounces or defers @@ -13698,6 +13881,11 @@ smtp_sasl_auth_cache_name = proxy:btree:/var/lib/postfix/sasl_auth_cache

    The maximal age of an smtp_sasl_auth_cache_name entry before it is removed.

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    +

    This feature is available in Postfix 2.5 and later.

    %PARAM lmtp_sasl_auth_soft_bounce yes @@ -14110,7 +14298,8 @@ a good client can immediately talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -14122,8 +14311,10 @@ from being logged as "NEW" just because their cache entry expired an hour ago. It also prevents the cache from filling up with clients that passed some deep protocol test once and never came back.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -14141,8 +14332,10 @@ logged as "partial" when the daemon terminates early after "postfix reload", "postfix stop", or no requests for $max_idle seconds.

    -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.8.

    @@ -14154,10 +14347,9 @@ lookup results to arrive (default: up to 2 seconds under stress, up to 6 seconds otherwise).

    Specify a non-zero time value (an integral value plus an optional -one-letter suffix that specifies the time unit).

    - -

    Time units: s (seconds), m (minutes), h (hours), d (days), w -(weeks).

    +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8.

    @@ -14456,7 +14648,7 @@ feature:

         # Append XVERP to MAIL FROM commands to request VERP-style delivery.
         # See VERP_README for more information on how to use Postfix VERP.
    -    /^(MAIL FROM:\s*<listname@example\.com>.*)/   $1 XVERP
    +    /^(MAIL\s+FROM:\s*<listname@example\.com>.*)/   $1 XVERP
     
    @@ -14716,7 +14908,8 @@ IP address is required to pass that test again.  

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 2.8-3.0. It was replaced by postscreen_dnsbl_max_ttl in Postfix 3.1.

    @@ -14731,7 +14924,8 @@ it would be larger than postscreen_dnsbl_max_ttl.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 3.1.

    @@ -14745,7 +14939,8 @@ it would be smaller than postscreen_dnsbl_min_ttl.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is h (hours).

    This feature is available in Postfix 3.1. The default setting is backwards-compatible with older Postfix versions.

    @@ -14762,7 +14957,7 @@ the server to respond. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -14792,7 +14987,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -14817,7 +15013,8 @@ set under 10s.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8.

    @@ -14855,7 +15052,7 @@ parameter. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -14887,7 +15084,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -14901,7 +15099,7 @@ test, before it can talk to a real Postfix SMTP server.

    %PARAM postscreen_dnsbl_reply_map -

    A mapping from actual DNSBL domain name which includes a secret +

    A mapping from an actual DNSBL domain name which includes a secret password, to the DNSBL domain name that postscreen will reply with when it rejects mail. When no mapping is found, the actual DNSBL domain will be used.

    @@ -14932,6 +15130,11 @@ the file is read).

    the timeouts in the dnsblog(8) daemon which are defined by system resolver(3) routines.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 3.0.

    %PARAM postscreen_bare_newline_action ignore @@ -14944,7 +15147,7 @@ return. Specify one of the following:

    ignore
    Ignore the failure of this test. Allow other tests to complete. -Do not repeat this test before some the result from some +Do not repeat this test before the result from some other test expires. This option is useful for testing and collecting statistics without blocking mail permanently.
    @@ -14975,7 +15178,8 @@ before it can talk to a real Postfix SMTP server.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is d (days).

    This feature is available in Postfix 2.8.

    @@ -15066,10 +15270,10 @@ over an internal communication channel. The purpose is to break out of deadlock situations. If the time limit is exceeded the software either retries or aborts the operation.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8 and later.

    @@ -15079,10 +15283,10 @@ The default time unit is s (seconds). a request before it is terminated by a built-in watchdog timer.

    -

    -Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). -The default time unit is s (seconds). -

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8 and later.

    @@ -15218,7 +15422,8 @@ cannot be set under 10s.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.8 and later

    @@ -15271,7 +15476,7 @@ for details.

    Mandatory TLS: announce STARTTLS support to remote SMTP clients, and require that clients use TLS encryption. See smtpd_enforce_tls for -further details.

    +further details. Use tlsproxy_tls_security_level instead.

    This feature is available in Postfix 2.8 and later.

    @@ -15501,7 +15706,7 @@ shared by all three services, namely smtpd_tls_session_cache_timeout.

    Opportunistic TLS: announce STARTTLS support to remote SMTP clients, but do not require that clients use TLS encryption. See smtpd_use_tls -for further details.

    +for further details. Use tlsproxy_tls_security_level instead.

    This feature is available in Postfix 2.8 and later.

    @@ -15794,6 +15999,11 @@ authentication in the proxy agent (Postfix 2.9 and later).

    The time limit for the proxy protocol specified with the smtpd_upstream_proxy_protocol parameter.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 2.10 and later.

    %PARAM enable_long_queue_ids no @@ -15934,12 +16144,14 @@ caused such addresses to end up on spammer mailing lists, and has resulted in wasted network and processing resources.

    To enable time-dependent probe sender addresses, specify a -non-zero time value (an integral value plus an optional one-letter -suffix that specifies the time unit). Specify a value of at least -several hours, to avoid problems with senders that use greylisting. -Avoid nice TTL values, to make the result less predictable. Time -units are: s (seconds), m (minutes), h (hours), d (days), w (weeks). -

    +non-zero time value. Specify a value of at least several hours, +to avoid problems with senders that use greylisting. Avoid nice +TTL values, to make the result less predictable.

    + +

    Specify a non-negative time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 2.9 and later.

    @@ -16407,7 +16619,7 @@ ignored with a warning.

    Note: It is unwise to omit sha256 from the digest list. This digest algorithm is the only mandatory to implement digest algorithm -in RFC 6698, and many servers are expected publish TLSA records +in RFC 6698, and many servers are expected to publish TLSA records with just sha256 digests. Unless one of the standard digests is seriously compromised and servers have had ample time to update their TLSA records you should not omit any standard digests, just arrange @@ -16659,13 +16871,18 @@ request before giving up. Specify a value greater than zero.

    The delay between attempts to resend a failed SMTPD policy service request. Specify a value greater than zero.

    +

    Specify a non-zero time value (an integral value plus an optional +one-letter suffix that specifies the time unit). Time units: s +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    +

    This feature is available in Postfix 3.0 and later.

    %PARAM smtputf8_enable yes

    Enable preliminary SMTPUTF8 support for the protocols described -in RFC 6531..6533. This requires that Postfix is built to support -these protocols.

    +in RFC 6531, RFC 6532, and RFC 6533. This requires that Postfix is +built to support these protocols.

    This feature is available in Postfix 3.0 and later.

    @@ -16917,7 +17134,7 @@ with valid PTR etc. records.

    %PARAM smtp_tls_wrappermode no

    Request that the Postfix SMTP client connects using the -legacy SMTPS protocol instead of using the STARTTLS command.

    +SUBMISSIONS/SMTPS protocol instead of using the STARTTLS command.

    This mode requires "smtp_tls_security_level = encrypt" or stronger.

    @@ -17035,7 +17252,7 @@ With earlier Postfix versions the default setting was always "dane". compromise SMTP transport security by returning forged MX records, such attacks are "tamper-evident" since any forged MX hostnames will be recorded in the mail logs. Attackers who place a high value -staying hidden may be deterred from forging MX records.

    +on staying hidden may be deterred from forging MX records.

    This feature is available in Postfix 3.1 and later. The may @@ -17147,7 +17364,7 @@ configuration parameter. See there for details.

    The format of the Postfix-generated From: header. This setting affects the appearance of 'full name' information when a -local program such as /bin/mail submits a message without From: +local program such as /bin/mail submits a message without a From: header through the Postfix sendmail(1) command.

    Specify one of the following:

    @@ -17308,14 +17525,16 @@ for further details.

    %PARAM tlsproxy_client_use_tls $smtp_use_tls

    Opportunistic mode: use TLS when a remote server announces TLS -support. See smtp_use_tls for further details.

    +support. See smtp_use_tls for further details. Use +tlsproxy_client_security_level instead.

    This feature is available in Postfix 3.4 and later.

    %PARAM tlsproxy_client_enforce_tls $smtp_enforce_tls

    Enforcement mode: require that SMTP servers use TLS encryption. -See smtp_enforce_tls for further details.

    +See smtp_enforce_tls for further details. Use +tlsproxy_client_security_level instead.

    This feature is available in Postfix 3.4 and later.

    @@ -17357,7 +17576,7 @@ key.

    The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -17511,7 +17730,7 @@ key.

    The file or files must contain at most one key of each type. If, for example, two or more RSA keys and corresponding chains are listed, depending on the version of OpenSSL either only the last one will be -used or an configuration error may be detected. Note that while +used or a configuration error may be detected. Note that while "Ed25519" and "Ed448" are considered separate algorithms, the various ECDSA curves (typically one of prime256v1, secp384r1 or secp521r1) are considered as different parameters of a single "ECDSA" algorithm, so it @@ -17652,7 +17871,7 @@ server mode of tlsproxy(8).

    When this parameter is non-empty, the Postfix SMTP server enables SNI extension processing, and logs SNI values that are invalid or -don't match an entry in the the specified tables. When an entry +don't match an entry in the specified tables. When an entry does match, the SNI name is logged as part of the connection summary at log levels 1 and higher.

    @@ -17822,7 +18041,8 @@ cannot be set under 10s.

    Specify a non-zero time value (an integral value plus an optional one-letter suffix that specifies the time unit). Time units: s -(seconds), m (minutes), h (hours), d (days), w (weeks).

    +(seconds), m (minutes), h (hours), d (days), w (weeks). +The default time unit is s (seconds).

    This feature is available in Postfix 3.4 and later.

    @@ -18012,14 +18232,14 @@ match. # send mail as themselves. Use "uid:" followed by the numerical # UID when the UID has no entry in the UNIX password file. local_login_sender_maps = - inline:{ { root = *}, { postfix = * } }, + inline:{ { root = * }, { postfix = * } }, pcre:/etc/postfix/login_senders
     /etc/postfix/login_senders:
        # Allow both the bare username and the user@domain forms.
    -    /(.+)/ $1 $1@example.com/
    +    /(.+)/ $1 $1@example.com
     

    This feature is available in Postfix 3.6 and later.

    diff --git a/postfix/proto/relocated b/postfix/proto/relocated index c716a2165..a0a54cadf 100644 --- a/postfix/proto/relocated +++ b/postfix/proto/relocated @@ -21,7 +21,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those case, the lookups +# can be directed to a TCP-based server. In those case, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # @@ -84,7 +84,7 @@ # expression lookup table syntax, see \fBregexp_table\fR(5) or # \fBpcre_table\fR(5). For a description of the TCP client/server # table lookup protocol, see \fBtcp_table\fR(5). -# This feature is not available up to and including Postfix version 2.4. +# This feature is available in Postfix 2.5 and later. # # Each pattern is a regular expression that is applied to the entire # address being looked up. Thus, \fIuser@domain\fR mail addresses are not @@ -103,7 +103,7 @@ # This section describes how the table lookups change when lookups # are directed to a TCP-based server. For a description of the TCP # client/server lookup protocol, see \fBtcp_table\fR(5). -# This feature is not available up to and including Postfix version 2.4. +# This feature is available in Postfix 2.5 and later. # # Each lookup operation uses the entire address once. Thus, # \fIuser@domain\fR mail addresses are not broken up into their @@ -119,20 +119,23 @@ # The following \fBmain.cf\fR parameters are especially relevant. # The text below provides only a parameter summary. See # \fBpostconf\fR(5) for more details including examples. -# .IP \fBrelocated_maps\fR -# List of lookup tables for relocated users or sites. +# .IP "\fBrelocated_maps (empty)\fR" +# Optional lookup tables with new contact information for users or +# domains that no longer exist. # .PP # Other parameters of interest: -# .IP \fBinet_interfaces\fR -# The network interface addresses that this system receives mail on. -# You need to stop and start Postfix when this parameter changes. -# .IP \fBmydestination\fR -# List of domains that this mail system considers local. -# .IP \fBmyorigin\fR -# The domain that is appended to locally-posted mail. -# .IP \fBproxy_interfaces\fR -# Other interfaces that this machine receives mail on by way of a -# proxy agent or network address translator. +# .IP "\fBinet_interfaces (all)\fR" +# The network interface addresses that this mail system receives +# mail on. +# .IP "\fBmydestination ($myhostname, localhost.$mydomain, localhost)\fR" +# The list of domains that are delivered via the $local_transport +# mail delivery transport. +# .IP "\fBmyorigin ($myhostname)\fR" +# The domain name that locally-posted mail appears to come +# from, and that locally posted mail is delivered to. +# .IP "\fBproxy_interfaces (empty)\fR" +# The network interface addresses that this mail system receives mail +# on by way of a proxy or network address translation unit. # SEE ALSO # trivial-rewrite(8), address resolver # postmap(1), Postfix lookup table manager diff --git a/postfix/proto/sqlite_table b/postfix/proto/sqlite_table index aeaba341d..a4edf72e8 100644 --- a/postfix/proto/sqlite_table +++ b/postfix/proto/sqlite_table @@ -16,7 +16,7 @@ # In order to use SQLite lookups, define an SQLite source as a lookup # table in main.cf, for example: # .nf -# alias_maps = sqlite:/etc/sqlite-aliases.cf +# alias_maps = sqlite:/etc/postfix/sqlite-aliases.cf # .fi # # The file /etc/postfix/sqlite-aliases.cf has the same format as @@ -156,8 +156,8 @@ # # NOTE: DO NOT put quotes around the result format! # .IP "\fBdomain (default: no domain list)\fR" -# This is a list of domain names, paths to files, or -# dictionaries. When specified, only fully qualified search +# This is a list of domain names, paths to files, or "type:table" +# databases. When specified, only fully qualified search # keys with a *non-empty* localpart and a matching domain # are eligible for lookup: 'user' lookups, bare domain lookups # and "@domain" lookups are not performed. This can significantly diff --git a/postfix/proto/stop b/postfix/proto/stop index 0462f338e..af293d34c 100644 --- a/postfix/proto/stop +++ b/postfix/proto/stop @@ -1545,3 +1545,7 @@ ALLOWLIST ALLOWLISTED DENYLIST DENYLISTED +epilog +prolog +proto +ICMP diff --git a/postfix/proto/stop.double-cc b/postfix/proto/stop.double-cc new file mode 100644 index 000000000..3671205f5 --- /dev/null +++ b/postfix/proto/stop.double-cc @@ -0,0 +1,329 @@ +void void rewrite_proto stream + Strip trailing dot at end of domain but not dot dot or dot This + strip source routed addresses site site user domain +transport_lookup transport_lookup finds the channel and nexthop for the given + Typically the nexthop specifies a hostname hostname TCP Port or the +resolve_addr resolve_addr resolve address according to rule set + technically incorrect this is needed to stop user domain domain relay + needs white space but stuff stuff does not This is not a + where stuff stuff does not happen + Strip trailing dot at end of domain but not dot dot or at dot +XXX XXX Short cut invalid address forms + Connect via TCP to domain domain port port The default + Connect via TCP to domain domain port port The default +files files that are owned by the wrong user or files that have world write + name is is not defined + conditionally to value when name is is not +MUMBLE_TODO MUMBLE_TODO flags must not be cleared once raised The _TODO_TO_PASS and +psc_todo_tests psc_todo_tests overwrites all per session flag bits and + Either hand off the socket to a real SMTP engine or say bye bye +char char context +inet_pton inet_pton +void void psc_early_tests state +void void psc_smtpd_init void +void void psc_smtpd_tests state + IP postscreen_dnsbl_max_ttl postscreen_dnsbl_ttl postscreen_dnsbl_ttl 1 h + WARNING WARNING WARNING + WARNING WARNING WARNING + The event driven TLS I O implementation is founded on on line OpenSSL +unused unused + IP f command command + IP q command command + IP Q command command + IP r command command + IP s command command + TCP port port Both host and port may be +void void + reset_cmd_flags reset per command command flags + set_cmd_flags set per command command flags + Connect via TCP to host host port port The default + Connect via TCP to host host port port The default +argv argv command +time time of entry into active queue +peer peer entries +FD_SETSIZE FD_SETSIZE +FD_SETSIZE FD_SETSIZE +FD_SETSIZE FD_SETSIZE + var spool postfix incoming incoming queue + var spool postfix active active queue + var spool postfix deferred deferred queue +time time of entry into active queue +FD_SETSIZE FD_SETSIZE +FD_SETSIZE FD_SETSIZE +FD_SETSIZE FD_SETSIZE + var spool postfix incoming incoming queue + var spool postfix active active queue + var spool postfix deferred deferred queue +XXX XXX + WARNING WARNING WARNING + WARNING WARNING WARNING +NOTREACHED NOTREACHED + If not connected to stdin stdin must not be a terminal + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + WARNING WARNING WARNING + If not connected to stdin stdin must not be a terminal +select select + If not connected to stdin stdin must not be a terminal + main main program +this this first +linkage linkage + Postfix master master cf file processing +select select + If not connected to stdin stdin must not be a terminal + response to stress level changes Doing so would would contaminate + IP CA_MAIL_SERVER_EXIT void void + If not connected to stdin stdin must not be a terminal +smtp_site_fail smtp_site_fail handles the case where the program fails to + We can t avoid copying copying lots of strings into VSTRING buffers +binding binding properties passivated +endpoint endpoint properties passivated +safety safety +XXX XXX + See src tls tls_level c and src tls tls h Levels above encrypt require +smtp_rcpt_done smtp_rcpt_done +smtp_rcpt_done smtp_rcpt_done +smtp_rcpt_done smtp_rcpt_done + Ignore out of protocol enhanced status codes codes that accompany 3XX + IP name name +void void +FALLTHROUGH FALLTHROUGH +HAS_PCRE HAS_PCRE +HAS_PCRE HAS_PCRE + any any + typedef DICT DICT_OPEN_FN const char int int +EDIT_FILE EDIT_FILE edit_file_open original_path output_flags output_mode +void void +nvtable_locate nvtable_locate returns a pointer to the entry that was stored +legacy legacy + for symlinks owned by root NEVER NEVER make exceptions for symlinks + sanitize sanitize db_get put del result + simple attr attr name colon attr value newline +void void htable_free table free_fn +void void htable_walk table action ptr +htable_locate htable_locate returns a pointer to the entry that was stored + IP CA_VSTREAM_POPEN_WAITPID_FN pid_t pid_t WAIT_STATUS_T int +optimization optimization +msg_fatal msg_fatal reports an unrecoverable error and terminates the program + compare compare the address family and network address or + numbers or number number ranges + v4pattern v4field v4field v4field v4field + v4pattern v4field v4field v4field v4field + v4pattern v4field v4field v4field v4field + v4seq_member v4octet v4octet v4octet + v4seq_member v4octet v4octet v4octet +Corruption Corruption + main main program +privileges privileges +DICT_THASH_OPEN_RETURN DICT_THASH_OPEN_RETURN + Fatal errors cannot open file file write error out of memory +found found +found found +XXX XXX maybe earlier +XXX XXX + verified RedHat 3 03 + Bits per byte byte in vector bit offset in byte bytes per set + echo echo text received on stdin + request request a bunch of timer events + Fatal errors cannot open file file write error out of memory +found found +found found + concatenate concatenate null terminated list of strings +void void context +void void binhash_free table free_fn +void void binhash_walk table action ptr +binhash_locate binhash_locate returns a pointer to the entry that was stored +width width precision separator + and whitespace characters must be replaced by XX XX being the + and whitespace characters and the by XX XX being the two digit + Fatal errors cannot open file file write error out of +privileges privileges + Example 00000000000000000000000000000001 01 80 10 80 lo + text text +void void +matched matched text +SUNOS5 SUNOS5 + casefold casefold text for caseless comparison + simple name string string simple name + attribute list attribute attribute attribute list + attribute list attribute attribute attribute list + attribute string string +string string ISO Latin 1 character set except the character + WARNING WARNING WARNING + WARNING WARNING WARNING + Example checking infrastructure for int int const int + Example variables with type int int const int +int int int_val + host port host host +host host port host host + host port host host + port port + host port host host + host port host host port port + host port host host port port + simple attr attr name null attr value null + IP CA_SLMDB_CTL_LONGJMP_FN void void int + IP CA_SLMDB_CTL_NOTIFY_FN void void int + IP CA_SLMDB_CTL_ASSERT_FN void void const char + DICT dict_static_open name name dict_flags +buffer buffer length +privileges privileges +key key length + simple attr attr name attr value newline + attr name any string without null or or newline + var spool postfix maildrop maildrop queue + WARNING WARNING WARNING + WARNING WARNING WARNING +lmdb lmdb supports concurrent writes and reads from different +private private +private private + var spool postfix private private class endpoints + var spool postfix public public class endpoints +messages messages put on hold +option option disables UTF 8 syntax checks on query keys and +option option disables UTF 8 syntax checks on query keys and +lmdb lmdb supports concurrent writes and reads from different +peer peer +void void +XXX XXX + relay loopholes with user domain domain when relaying mail to a + Strip one trailing dot but not dot dot +void void +headers headers after multipart boundary + by XX XX being the two digit uppercase hexadecimal equivalent +must must +request request completed unsuccessfully +DSN_BUF DSN_BUF dsb_create void +DSN_SPLIT DSN_SPLIT dsn_split dp def_dsn text + that registers operators such as level level that compare + var_maillog_file var_maillog_file import_service_path 0 + IP address address family information and the numerical TCP port +privileges privileges +void void rcpb_reset rcpb + The entire lookup key key +DSN DSN dsn_create status action reason dtype dtext mtype mname + When specified with a flush request request that +storage storage +message message size + starts with or or the prefix which will be used + with or or the prefix which will be used to obtain +strings strings with digits uppercase letters and lowercase +safe_strtoul safe_strtoul implements similar functionality as strtoul + typedef LOGIN_SENDER_MATCH LOGIN_SENDER_MATCH +LOGIN_SENDER_MATCH LOGIN_SENDER_MATCH login_sender_create +void void anvil_clnt_free anvil_clnt +privileges privileges + characters specified with special with x XX XX being +0000 0000 0000 007 F 0x xxxxxx +0000 0000 0000 007 F 0x xxxxxx + https github com aox aox blob master encodings utf cpp with +FALLTHROUGH FALLTHROUGH + Detail format is digit digit 1 3 digit 1 3 +encoding encoding domain +domain domain +domain domain +encoding encoding +XXX XXX EAI inspect encoded message global +domain domain +MBOX MBOX mbox_open path flags mode st user group lock_style + incomplete address address rewriting alias expansion automatic BCC +unquoted unquoted form then quoted + records data offset offset of the first REC_TYPE_NORM or REC_TYPE_CONT +DELIVER_REQUEST DELIVER_REQUEST deliver_request_read stream +MAIL_VERSION MAIL_VERSION mail_version_parse version_string why +dict_xx_open dict_xx_open result + When specified with a flush request request that +MAIL_STREAM MAIL_STREAM mail_stream_file queue class service mode + starts with or or the prefix which will be used to +hosts hosts on which databases reside + or maptype mapname search name name The search + with or or the prefix which will be used to obtain +the the message delivery record +MKMAP MKMAP mkmap_open type path open_flags dict_flags +BOUNCE_LOG BOUNCE_LOG bounce_log_open queue id flags mode + internal external external first +context context for queue file changes +sender sender transport +SMFIM_EOH SMFIM_EOH SMFIM_EOM +value value to string +RE RE +PCF_MASTER_ENT PCF_MASTER_ENT local_scope +to to instantiate legacy per dbms parameters and to examine + tls_digest_encode encode message digest binary blob as xx xx +logged logged +logged logged + DNS at the dane dane only and half dane security levels or be +void void tls_pre_jail_init TLS_ROLE +TLS_ROLE TLS_ROLE role +and and the protocol version floor ceiling given a list plist of + of the form name name hexvalue hexvalue If plist + of the form name name hexvalue hexvalue If plist +XXX XXX We re ignoring the function name do we want to log it + If the match is required unambiguous insist that that no other values + etc postfix canonical canonical mapping table + etc postfix virtual virtual mapping table +void void +regions regions with body content +SASLv2 SASLv2 s sasl_server_new takes two new parameters to specify local and +SASLv2 SASLv2 s sasl_client_new takes two new parameters to specify local and + All 5xx replies must have a 5 xx xx detail code + Truncate hostnames ending in dot but not dot dot + Truncate hostnames ending in dot but not dot dot + Truncate hostnames ending in dot but not dot dot + Truncate names ending in dot but not dot dot +200412 200412 + Reject mail to unknown addresses in local domains domains that +client client name +stuff stuff +counter counter +Milter Milter initialization status +USE_TLSPROXY USE_TLSPROXY +address address family +void void +probed probed if non zero the time the currently outstanding address probe was + recipient lists and some MUAs even specify word word address +VERP VERP +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +NOTREACHED NOTREACHED +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key +key key + Fatal error error opening existing file +void void bounce_cleanup_unregister void + Fatal error error opening existing file +BOUNCE_TEMPLATES BOUNCE_TEMPLATES bounce_templates_create void +void void bounce_templates_free templates + Fatal error error opening existing file + also showq showq c +name name length +BOUNCE_INFO BOUNCE_INFO bounce_mail_init service queue_name queue_id encoding + Fatal error error opening existing file +more more useful and more consistent + Fatal error error opening existing file + Fatal error error opening existing file +XXX XXX + int compar DNS_RR DNS_RR diff --git a/postfix/proto/stop.double-install-proto-text b/postfix/proto/stop.double-install-proto-text new file mode 100644 index 000000000..338286eb8 --- /dev/null +++ b/postfix/proto/stop.double-install-proto-text @@ -0,0 +1,41 @@ +bind bind no +bind bind sasl +bind bind yes + command_directory command_directory + Content Disposition Type name es es e 2E + daemon_directory daemon_directory + data_directory data_directory +done done + echo 0 Error unknown type type for path in meta postfix files 1 2 + echo echo 0 Error name should be an absolute path name 1 2 +esac esac + eval echo n name name c + eval group group + eval owner owner +example example com uucp example +file contains only a small subset of all parameters parameters +group group + html_directory html_directory + IP domain address address + IP pattern address address + IP user address address + IP user domain address address + mail_owner mail_owner + mailq_path mailq_path + manpage_directory manpage_directory + meta_directory meta_directory + newaliases_path newaliases_path + nisplus name s name name name column + postmap q nisplus name s name name inputfile + postmap q string nisplus name s name name +postmaster postmaster root + queue_directory queue_directory + readme_directory readme_directory +root root you + sample_directory sample_directory + sendmail_path sendmail_path + server_host ldap ldap example com 1444 + setgid_group setgid_group + shlib_directory shlib_directory + user foo domain user domain domain +virtual virtual alias domain anything right hand content does not matter diff --git a/postfix/proto/stop.double-proto-html b/postfix/proto/stop.double-proto-html new file mode 100644 index 000000000..a7e78243d --- /dev/null +++ b/postfix/proto/stop.double-proto-html @@ -0,0 +1,247 @@ + 1 000 000 messages with good performance unlikely above that limit + 10 10 Mandatory configuration file edits + 11 11 To chroot or not to chroot + 12 12 Care and feeding of the Postfix system +14 rbl_domain rbl_reason rbl_reason +168 100 189 2 255 255 255 224 +18 rbl_domain rbl_reason rbl_reason + 1 ffff ffff ffff ffff ffff ffff ffff ffff +2001 240 587 0 2d0 b7ff fe88 2ca7 ffff ffff ffff ffff + 31 sasldb Accounts are stored stored in a Cyrus SASL Berkeley DB + 33 ldapdb Accounts are stored stored in an LDAP database + 4 yes yes yes never 100 +5 postmaster postmaster example com +5 root root localhost +6 abuse abuse example com +80821 S 0 00 24 smtpd n smtp t inet u c o stress yes +83326 S 0 00 28 smtpd n smtp t inet u c o stress +84345 Ss 0 00 11 usr bin perl usr libexec postfix smtpd policy pl + 8 SENDMAIL usr sbin sendmail G i NEVER NEVER NEVER use t here +address localpart as per RFC 822 so that additional or or +all all Maximum per destination delivery concurrency +and cost cost 1 times more than if the preemptive scheduler was + and sneak in the ten recipient mail Wait wait wait Could we Aren t + aNULL aNULL kEECDH kEDH RC4 eNULL EXPORT LOW STRENGTH +Arrival Date Sun 26 Nov 2006 17 01 01 0500 EST +attacks with user domain domain addresses when Postfix provides +authzTo authzTo dn regex uniqueIdentifier ou people dc example dc com + AUXLIBS AUXLIBS options for LDAP or TLS etc +blockquote blockquote + broken smtp smtp o smtp_quote_rfc821_envelope no +ccert_fingerprint C2 9D F4 87 71 73 73 D9 18 E7 C2 F3 C1 DA 6E 04 +command_directory command_directory + concurrency concurrency limit +config_directory config_directory +daemon_directory daemon_directory +data_directory data_directory +Date Sun 26 Nov 2006 17 01 01 0500 EST +dd dd Alternatively check_ccert_access accepts an explicit search +dd dd check_ccert_access type table search_order cert_fingerprint +dd dd The commas are optional dd +dd dd The default algorithm is b sha256 b with Postfix ge 3 6 + dd No TLS TLS will not be used unless enabled for specific +Dec 4 04 30 09 hostname postfix smtpd 58549 NOQUEUE reject + default_transport uucp uucp gateway + different client IP addresses Lookup results override the the global +Documentation Documentation is available as README files start with the file +done done +done done + dt b a name check_address_map check_address_map a i a href DATABASE_RE + dt b a name check_ccert_access check_ccert_access a i a href DATABASE_ + dt b a name check_client_a_access check_client_a_access a i a href DAT + dt b a name check_client_access check_client_access a i a href DATABAS + dt b a name check_client_mx_access check_client_mx_access a i a href D + dt b a name check_client_ns_access check_client_ns_access a i a href D + dt b a name check_etrn_access check_etrn_access a i a href DATABASE_RE + dt b a name check_helo_a_access check_helo_a_access a i a href DATABAS + dt b a name check_helo_access check_helo_access a i a href DATABASE_RE + dt b a name check_helo_mx_access check_helo_mx_access a i a href DATAB + dt b a name check_helo_ns_access check_helo_ns_access a i a href DATAB + dt b a name check_policy_service check_policy_service i servername i a + dt b a name check_recipient_a_access check_recipient_a_access a i a hre + dt b a name check_recipient_access check_recipient_access a i a href D + dt b a name check_recipient_mx_access check_recipient_mx_access a i a h + dt b a name check_recipient_ns_access check_recipient_ns_access a i a h + dt b a name check_sasl_access check_sasl_access a i a href DATABASE_RE + dt b a name check_sender_a_access check_sender_a_access a i a href DAT + dt b a name check_sender_access check_sender_access a i a href DATABAS + dt b a name check_sender_mx_access check_sender_mx_access a i a href D + dt b a name check_sender_ns_access check_sender_ns_access a i a href D + dt b a name defer defer a b dt + dt b a name defer_if_permit defer_if_permit a b dt + dt b a name defer_if_reject defer_if_reject a b dt + dt b a name defer_unauth_destination defer_unauth_destination a b dt + dt b a name no_address_mappings no_address_mappings a b dt + dt b a name no_header_body_checks no_header_body_checks a b dt + dt b a name no_milters no_milters a b dt + dt b a name no_unknown_recipient_checks no_unknown_recipient_checks a b + dt b a name permit_auth_destination permit_auth_destination a b dt + dt b a name permit_dnswl_client permit_dnswl_client i dnswl_domain d d d d + dt b a name permit_inet_interfaces permit_inet_interfaces a b dt + dt b a name permit_mx_backup permit_mx_backup a b dt + dt b a name permit_mynetworks permit_mynetworks a b dt + dt b a name permit permit a b dt + dt b a name permit_rhswl_client permit_rhswl_client i rhswl_domain d d d d + dt b a name permit_sasl_authenticated permit_sasl_authenticated a b dt + dt b a name permit_tls_all_clientcerts permit_tls_all_clientcerts a b + dt b a name permit_tls_clientcerts permit_tls_clientcerts a b dt + dt b a name reject_invalid_helo_hostname reject_invalid_helo_hostname a + dt b a name reject_multi_recipient_bounce reject_multi_recipient_bounce a + dt b a name reject_non_fqdn_helo_hostname reject_non_fqdn_helo_hostname a + dt b a name reject_non_fqdn_recipient reject_non_fqdn_recipient a b dt + dt b a name reject_non_fqdn_sender reject_non_fqdn_sender a b dt + dt b a name reject_plaintext_session reject_plaintext_session a b dt + dt b a name reject_rbl_client reject_rbl_client i rbl_domain d d d d i + dt b a name reject reject a b dt + dt b a name reject_rhsbl_client reject_rhsbl_client i rbl_domain d d d d + dt b a name reject_rhsbl_helo reject_rhsbl_helo i rbl_domain d d d d i + dt b a name reject_rhsbl_recipient reject_rhsbl_recipient i rbl_domain d d + dt b a name reject_rhsbl_reverse_client reject_rhsbl_reverse_client i rbl_ + dt b a name reject_rhsbl_sender reject_rhsbl_sender i rbl_domain d d d d + dt b a name reject_sender_login_mismatch reject_sender_login_mismatch a + dt b a name reject_unauth_destination reject_unauth_destination a b dt + dt b a name reject_unauth_pipelining reject_unauth_pipelining a b dt + dt b a name reject_unknown_client_hostname reject_unknown_client_hostname + dt b a name reject_unknown_helo_hostname reject_unknown_helo_hostname a + dt b a name reject_unknown_recipient_domain reject_unknown_recipient_domain + dt b a name reject_unknown_sender_domain reject_unknown_sender_domain a + dt b a name reject_unlisted_recipient reject_unlisted_recipient a b wi + dt b a name reject_unlisted_sender reject_unlisted_sender a b dt + dt b a name reject_unverified_recipient reject_unverified_recipient a b + dt b a name reject_unverified_sender reject_unverified_sender a b dt + dt b a name sleep sleep i seconds i a b dt + dt b a name warn_if_reject warn_if_reject a b dt +dt dt b i a href DATABASE_README html type table a i b dt +dt dt b i number i i number i b dt + dt dt dd 0 Disable logging of TLS activity dd + dt dt dd 1 Log only a summary message on TLS handshake completion + dt dt dd 2 Also log levels during TLS negotiation dd + dt dt dd 3 Also log hexadecimal and ASCII dump of TLS negotiation + dt dt dd 4 Also log hexadecimal and ASCII dump of complete + dude dude example com + eliminates the latency of the TCP handshake SYN SYN ACK ACK + example com uucp uucp host + example MAIL RCPT BDAT BDAT MAIL RCPT BDAT without ever having to + export MANPATH MANPATH pwd man MANPATH +fe80 1 2d0 b7ff fe88 2ca7 ffff ffff ffff ffff +fe80 5 1 ffff ffff ffff ffff +file allows for robust handling of temporary delivery errors errors +Filtered Filtered +for the file name when a pattern is a type table table specification +from host example com 192 168 0 2 TLSv1 with cipher cipher name +generic generic a restrictions These restrictions are applicable in + groups msn com 63 2 1 2 4 4 14 14 14 8 0 + highvolume com 4000 160 160 320 640 1280 1440 0 0 0 0 +host host port host port address or address port the form + http www umich edu dirsvcs ldap ldap html or OpenLDAP + id 84863BC0E5 Sun 26 Nov 2006 17 01 01 0500 EST + if concurrency concurrency limit + ifconfig en0 alias address netmask 255 255 255 255 + inet_addr_local inet_addr_local configured 2 IPv4 addresses + inet_addr_local inet_addr_local configured 4 IPv6 addresses +insiders_only insiders_only check_sender_access hash etc postfix insiders reject +in the form of a domain name hostname hostname port hostname port +into memory such as pcre regexp or texthash texthash is similar + jane jane janes preferred machine + joe joe joes preferred machine + Line 8 NEVER NEVER NEVER use the t command line option here It +listname listname request + lists sourceforge net 2313 2313 0 0 0 0 0 0 0 0 +local local 8 +local_only local_only +maildrop maildrop +maildrop maildrop owner cn root dc your dc com +make make makefiles CC opt ansic bin cc Ae HP UX +make make makefiles CC purify cc + man man man5 postconf 5 less +master_service_disable foo inet inet +multi_instance_enable multi_instance_enable +multi_instance_group multi_instance_group +multi_instance_name multi_instance_name +mydestination myhostname localhost mydomain mydomain + mydomain to an incomplete address address rewriting alias +mynetworks mynetworks 127 0 0 0 8 168 100 189 0 28 1 128 fe80 10 2001 240 587 +mynetworks mynetworks hash etc postfix network_table +Name lt user example com gt gt i Postfix will ignore the i User + name name port name or name port + NOTE Postfix 3 6 also introduces support for the level level +number number ranges Postfix version 2 8 and later If no +numbers or number number ranges Postfix version 2 8 and later +one or more separated numbers or number number ranges + openssl req new key key +or more separated numbers or number number ranges p +or number number ranges Postfix version 2 8 and later If no + ownership of system directories such as etc usr usr bin var + PARAM postscreen_dnsbl_max_ttl postscreen_dnsbl_ttl postscreen_dnsbl_ttl + patterns list multiple domain names as domain domain + p Note 2 address information may be enclosed inside tt tt + postfix 12345 12345 postfix no where no shell + Postfix 2 3 2 5 to hang up on clients that that match + Postfix has TWO sets of mail filters filters that are used for +Postfix Postfix can use an LDAP directory as a source for any of its lookups + Postfix Postfix passes the status back to the remote SMTP + Postfix Postfix will send the mail back to the sender address +pre pre +query_filter mailacceptinggeneralid s maildrop maildrop +queue_directory queue_directory +Received from localhost localhost 127 0 0 1 +Received Received from porcupine org +rejected rejected recipients are available on request by the Milter + rewrite 8 none none + Say we have ten recipient mail followed by two two recipient mails If + separated numbers or number number ranges If no +smtpd_recipient_restrictions smtpd_recipient_restrictions +smtpd_relay_restrictions smtpd_relay_restrictions +smtpd_relay_restrictions smtpd_relay_restrictions + smtpd_tls_mandatory_protocols SSLv2 SSLv3 TLSv1 TLSv1 1 +smtpd_tls_mandatory_protocols SSLv2 SSLv3 TLSv1 TLSv1 1 + smtp smtp o smtp_bind_address 11 22 33 44 + smtp smtp o smtp_bind_address6 1 2 3 4 5 6 7 8 + smtp_tls_mandatory_protocols SSLv2 SSLv3 TLSv1 TLSv1 1 +smtp_tls_mandatory_protocols SSLv2 SSLv3 TLSv1 TLSv1 1 + SSLv3 TLSv1 TLSv1 1 TLSv1 2 and TLSv1 3 Starting with + T 5 10 20 40 80 160 320 640 1280 1280 + T A 5 10 20 40 80 160 320 320 + The and match and literally Without the the + The matches literally Without the the would +Therefore 301 0301 0x301 and 0x0301 are all equivalent to + The syntax of name value value name value and name value +the the backed up domain tld domain This prevents your mail queue + tls_random_source dev dev urandom + tls_random_source dev dev urandom +tls_random_source dev dev urandom +TLS TLS support in the LMTP delivery agent + TLSv1 3 with cipher TLS_AES_256_GCM_SHA384 256 256 bits + to flush flush 8 Deferred +to host example com 192 168 0 2 25 TLSv1 with cipher cipher name + to server example TLSv1 3 with cipher TLS_AES_256_GCM_SHA384 256 256 bits + TOTAL 5000 200 200 400 800 1600 1000 200 200 200 200 +transport transport + tt tt in the authorized_verp_clients value and in files + tt tt in the mynetworks value and in files specified with + tt tt in the smtpd_authorized_verp_clients value and in + tt tt in the smtpd_authorized_xclient_hosts value and in + tt tt in the smtpd_authorized_xforward_hosts value and in + tt tt in the smtpd_client_event_limit_exceptions value and + tt tt in the smtpd_sasl_exceptions_networks value and in + tt tt p +two two recipient mails + uid cn cn auth +Unfiltered Unfiltered + unknown recipients in local domains domains that match mydestination + Use blockquote pre pre blockquote for examples + Use pre pre for the Examples section at the end +username username + user sourceforge net 7678 7678 0 0 0 0 0 0 0 0 + using TLSv1 3 with cipher TLS_AES_256_GCM_SHA384 256 256 bits + using TLSv1 with cipher cipher name +var var spool and so on This is especially an issue if you executed +With the standard operators lt lt etc compatibility + yes yes yes never 100 +zombie zombie tlsproxy 8 smtpd 8 + and 1 000 000 messages with good performance unlikely above that +dt dt b name value b Postfix ge 3 0 dt + dt dt dd 3 Also log the hexadecimal and ASCII dump of the + dt dt dd 4 Also log the hexadecimal and ASCII dump of complete + parametername stress something something Other + p Note on OpenBSD systems specify dev dev arandom when dev dev urandom diff --git a/postfix/proto/stop.spell-cc b/postfix/proto/stop.spell-cc new file mode 100644 index 000000000..31863165d --- /dev/null +++ b/postfix/proto/stop.spell-cc @@ -0,0 +1,1772 @@ +Aarnio +abcd +ABI +ABNF +abounce +accessor +ack +acked +acknowledgement +acl +ACL +adaptor +ADDCH +adddr +addenv +addn +Addr +addrbuf +ADDRFAMILY +addrinfo +ADDRINFO +addrs +adefer +adelay +adhoc +adomain +aes +af +AFS +Aho +ai +aierr +AIX +al +alg +algbits +algcode +allalnum +allascii +allbits +alldig +Allgemeine +ALLOC +allocator +Allowlist +allowlisting +ALLPERMS +ALLPKTS +allprint +Allright +allspace +alphanum +alphanumerics +androsyn +aox +ap +api +APIs +appl +APPL +ar +arg +argc +Argh +argi +argl +argp +Args +ARGS +ARGV +argvp +arpa +ARPA +aRv +ascii +aslo +ast +async +atol +atrace +ATTR +attrp +attrs +atype +Auch +auths +autoclass +Autodetect +Autodetection +automagically +AUTOUTF +AUXULIARY +AWK +Axel +Backoff +BADFLAGS +BADHINTS +balpar +basename +Basename +bdat +BDAT +bdehnoqv +BDFORXhqu +beh +bfFhimnNoprsuUvw +BH +BINARYMIME +binhash +BINHASH +BIOs +bitclean +BITCLEAN +bitmasks +bitrot +Bitrot +bitset +bitwise +Bitwise +blackholes +blocklisted +bona +bool +BOOL +booleans +br +bsmtp +BST +buf +BUF +BUFIZ +buflen +bufp +BUFSIZ +bufsize +BUFSIZE +bufstat +bugtraq +byuid +bzero +cachable +cacheable +canonicalization +canonicalize +Canonicalize +canonicalized +CANONNAME +CAPTURECOUNT +carriagecontrol +carriagereturn +Carsten +CASEF +Casefold +casefolded +casefoldx +casemapped +cC +ccerts +cdbm +CDBM +cdbq +CDE +certkey +certmatch +cfg +CFG +chainfiles +ChangeCipherSpec +charactersets +charset +checkdir +Chroot +CHROOT +chrooting +Ciphersuite +cleanenv +clearerr +clist +clnt +CLNT +clobbber +closefrom +closelog +CLR +clumsify +cmalloc +cmd +CMD +cmdp +cmds +cmp +cmsg +CMSG +CNAMEs +codepoint +Codepoint +codepoints +colocated +comingle +compar +COMPAT +comsat +COND +CONF +conn +const +Const +conv +cooldown +Coverity +cpio +cpp +cptr +CPTR +CPUs +CREAT +CRLF +ctable +CTABLE +ctext +ctime +ctl +CTL +ctype +CUID +curr +cvt +CWD +cz +da +datagram +datagrams +datalink +dbms +dbopen +dbpath +DCL +dcs +Dditvw +dealloc +deallocate +deallocates +deallocating +deallocation +debian +decapsulate +DECnet +decrypt +decryptable +decrypted +decrypting +DEFL +DEFLT +deflts +DEFNAME +DEFNAMES +DEFPATH +defport +DEFS +defval +del +delim +delims +deliverability +delrcpt +DELRCPT +denylisting +dequote +dereference +dereferencing +deserialization +Dest +DEST +DESTADDR +DESTPORT +destructor +df +DFFF +dfhHnopvx +DFL +DFXP +dgram +DGRAM +DHparams +dhs +Dik +dirent +dirname +dirs +DISCONN +DJB +DJBDNS +DJB's +dlen +dlfunc +DLL +DNSBLOG +DNSBNL +dNSName +DNSRCH +dnsxl +DNSXL +dom +dont +DONT +doproto +DORX +dotforward +dp +Driehuis +dsb +DSB +dsbuf +DSNs +dst +dtext +DTEXT +DTXT +dtype +DTYPE +dumpfile +dup +DUP +DUPFD +dups +dymap +EACCES +EADDRINUSE +EAGAIN +EBADF +ec +ECONNABORTED +ECONNREFUSED +ECONNRESET +eddd +EDQUOT +ee +EEXIST +EFBC +EFBDA +EFBIG +egid +Eindhoven +EINTR +EINVAL +Elektrotechnik +elif +else's +elsize +empt +emptive +Emtpy +emul +ENDIF +ENDIFs +endp +endpt +ENOBUFS +ENOENT +ENOMEM +ENOSPC +ENOTCONN +ent +ENT +entrancy +enum +ENUM +env +ENV +ENVFROM +envid +ENVID +ENVRCPT +eob +EOB +eod +eof +EOL +eother +EOVERFLOW +EPERM +epilog +EPIPE +EPROTO +epv +eq +EQ +ERANGE +errno +errstr +Eschborn +especials +ESTALE +et +ETIMEDOUT +eugid +EUGID +euid +EV +eval +EVAL +EVP +EXCHANGER +exchangers +execvp +expar +EXPN +expr +EXPR +extern +extpar +EXTPAR +FALLTHROUGH +FALLTRHOUGH +fam +Fawcett +fbck +fchmod +fclose +FCNTL +fdclose +FDD +FDEF +fdopen +fds +fdtable +feof +ferror +FFDHE +FFF +FFFE +FFFF +fflush +fg +fgetc +fgets +fh +fhHovx +fi +fide +fifo +FIFOs +filedes +fileno +filesystem +filesystems +filt +FILT +findenv +fixme +Fixme +FLD +fmt +fn +FN +FoldCase +fopen +forcetlsa +FOREACH +formatter +formfeed +Forststrasse +fovx +fp +fprint +fprintf +fpt +fpurge +fputc +fputs +fread +freeaddrinfo +fron +fscanf +fsck +fseek +fset +fsops +fsspace +fsstone +fstat +fsync +ftell +ftime +ftimeout +ftimeval +ftruncate +fu +fullname +fullwidth +func +FUNC +futimes +fwi +fwrite +gai +GECOS +Geoff +GETC +GETCHAR +getegid +getenv +geteuid +getgrnam +gethostbyaddr +GETHOSTBYNAME +getnameinfo +GETNAMEINFO +getopt +GETOPT +getpid +getpw +getsockopt +gettimeofday +getuid +ghostgun +giasbm +gid +GID +ging +github +GLIBC +glibc's +globals +gmtoff +gn +Goedel's +goto +GOTO +gotsigchld +gotsighup +grey +groupid +grr +Grr +halfdane +halfwidth +handoff +HaProxy +hardlink +hardlinks +hbc +HBC +hc +hdr +HDR +hdrs +HDRS +hdrval +HelloRetryRequest +helohost +herror +hexdump +hexvalue +hfrom +HFROM +HGMP +Hinxton +HMAC +honoured +hostaddr +HOSTADDR +hostmumble +Hostname +HOSTNAME +hostport +hostrr +hport +HPUX +HRR +htable +HTABLE +htonl +htons +https +HUP +ial +icgroup +ICT +IDENT +ideographic +idna +IDNA +ifdefs +IFF +ifinet +IFINET +IFMT +ifself +IGN +illumos +IMPL +INADDR +incr +INCR +indexable +Indexable +indirections +ing +INIT +initializations +initializer +inj +Inlined +inlining +instantiation +interruptible +intra +INTV +intval +inum +INVAL +ioctls +iostuff +iov +iovlen +ipaddr +IPD +ipmatch +IPPROTO +isalnum +ISALNUM +isascii +ISASCII +iscntrl +isjmp +ISMARKED +isprint +ISSET +issetuid +ISSOCK +ISXXX +iter +ITER +iterator's +iterators's +itty +Jaenicke +jbuf +JCL +jeffm +JIT +jmp +johhny +jq +json +JSON +KAME +Karlsruhe +kB +Keean +keepalive +keepalives +Kellerspeicherpegelanzeiger +Kernighan +keyfile +keyname +Kilani +killme +Kirch +koobera +Kouhei +Krahmer +lastl +latencies +lateron +ldapone +LDH +len +LEV +leven +lex +lexicals +lf +lflags +libbind +LIBC +libdata +libfuncs +libmaster +libmemcache +Libmilter +libname +libresolv +libtls +libunbound +libutil +lims +lineno +liveness +lnsl +LOCALDOMAIN +LOCALPART +Logfile +Logfiles +logmask +logopts +logrotate +logtag +logwriter +LOGWRITER +LONGJMP +longjump +Lookups +lowfd +lowfrom +lposix +lseek +lsm +LSM +lsocket +lstat +Lstat +ltype +lvalue +lvalues +lx +LY +macrps +MAILLOG +makedef +malloc +mallocs +mapnames +MAPNAMES +mapsize +maptypes +masq +masterp +matchlist +Matti +maxdepth +maxlen +MAXLEN +MaxProtocol +MAXSEG +maxsize +mbox +MBOX +mdalg +mdb +MDB +MECH +Meer +memcaches +memcat +memchr +memcmp +memcpy +memmove +memopen +memreopen +memset +MERCHANTABILITY +mesg +MESG +midna +MILTER +milter's +MILTERS +MinProtocol +minrate +minssf +Mis +misconfiguration +mkdirs +mkfifo +mkmap +MKMAP +mmap +MMNNFFPPS +mname +MNAME +Montegancedo +MQID +MRU +msgs +msk +mss +MSS +mtp +MTU +mtype +MTYPE +MUL +multf +multibyte +multiline +multiserver +multivalued +mutexes +Muuss +MVCC +mvect +MVECT +mxrr +MXs +myaddrinfo +mydest +mydomainname +myflock +MYFLOCK +myfree +mygroup +mymalloc +mymemdup +mypasswd +mypwcache +mypwd +mypwenter +mypwfree +mypwnam +mypwuid +myrand +myrealloc +mysqlsource +mysrand +mystrdup +mystrndup +mystrtok +mystrtokdq +mystrtokq +na +Nagle +Nagle's +nam +namaddr +namadr +NAMADR +namechecks +NAMELEN +namelength +nameser +namespace +namespaces +nameval +NAMEVAL +namme +nasties +natively +NATs +nbbio +NBBIO +nbool +NBOOL +nbytes +nc +ncache +Ncache +NCACHE +nd +ndbm +ndr +nelm +netblock +netdb +NetInfo +Netstring +NETSTRING +netstrings +newcontext +newd +newpath +newqeueid +newqueueid +newtls +nexhop +NeXT +NEXTHOP +nexthops +nf +Nfinoprsuvw +NFS +ni +nid +NID +nids +nint +NINT +nlink +nlinks +nnn +NOCLOSE +NODELAY +nodename +noexcept +NOEXT +noforward +NOKEY +NOLOCK +NOMEMINIT +NONAME +NONDEF +nonl +noop +Noop +nop +NOP +NORETURN +normalizer +NOSUB +notfound +NOTFOUND +NOTHROTTLE +NOTREACHED +nowait +NOWAIT +np +nparts +nr +Nr +nscd +ntls +ntohs +ntop +NUL +nulll +nullmx +nullMX +NULLMX +num +NUMERICHOST +nvtable +NVTABLE +nxxx +oact +Oaktree +oconv +offsetof +OID +oldd +oldlog +oldstyle +oname +OpenLDAP's +openlog +operability +OPs +OPTNEG +orcpt +ORCPT +ord +ot +ourself +overallocate +ownreq +ozz +padchar +padlen +pagein +pageout +PARAM +parametername +params +PARAMS +paren +parens +parm +parsable +parseline +parsers +Pashkov +passivate +Passivate +passivated +passivation +pathame +Pathname +pathp +patrik +pcf +PCF +pclose +pcs +PDDMDS +pdelay +PDMS +pedantism +peekfd +peercert +permited +pfxs +PGRES +PGresult +pgsqlsource +Pieter +Pipelining +PKCS +PKEY +PKIX +PLAINTEXT +Plauger +plist +plmysql +PLMYSQL +plpgsql +PLPGSQL +PMilter +Pn +pname +POB +popen +POPEN +portnum +PORTP +pos +posix +Posix +postcondition +Postcondition +postexpire +POSTFIX +postgresql +Postgresql +Postlog +postlogd +Postprocessing +postremove +postrename +postrmdir +posttls +PPTR +PQescapeString +PQescapeStringConn +prabhat +PRE +precedences +pred +predefines +prefetch +prefi +pregreet +PREGREET +pregreeting +preimage +Preload +prepended +prepending +Prepending +prepends +preprocessed +Preprocessing +PREREQ +prescan +printfck +PRINTFLIKE +PRINTFPTRLIKE +PRNGD +PROC +procname +procnet +PROCNET +progname +programmatically +prolog +proto +Proto +protomask +prototyped +PROX +proxied +Proxied +PROXYING +Proxymappers +psc +PSC +pseudofield +pseudothread +pseudothreads +PSS +psSv +PTHREAD +pton +PTRs +pushback +PUTC +PUTCHAR +putenv +pv +qfile +qflags +qI +qIqueueid +qname +qnameval +qsort +QSTRING +ratbox +raxoft +rcode +RCODE +rcpb +RCPTs +rdb +rdev +rdonly +RDONLY +rdwr +RDWR +readdir +readline +readlline +readllines +readwrite +realloc +recdump +recip +RECIP +reclen +reconnection +recurse +Recurse +RECURSE +Recurses +recursing +recv +RECV +Redhat +Redistributions +reentrancy +REENTRANCY +reentrant +refcounts +refesh +regerror +reget +REGSUB +relop +RELOP +relops +rendez +repl +replayer +replycode +representable +requestor +requestors +requeuing +resflags +responder +restartable +resync +resynchronize +ret +RET +retransmission +retransmit +retryable +retval +revalidate +revalidated +rewriter +rfind +rflag +rflags +rh +RHS +RHSBL +rhswl +RHSWL +Ribbens +rl +RLIM +RMTA +rname +RO +Roel +roques +roundtrips +rp +RPCs +RQST +rr +RRDATA +rrlist +RRSIG +rtnetlink +ruleset +RWR +sa +salen +SAML +sanitization +Santize +sb +SCACHE +SCANFLIKE +SCCS +Schoenmakers +Schupke +scott +screener +sdelay +SDK's +seach +seekable +selectable +sendfd +sendmsg +sep +serv +SERV +serverid +serverout +servers's +servicename +servname +SERVNAME +SERVPORT +sess +SESS +setegid +Setenv +seteuid +setgroups +Sethi +setrlimit +setsid +setsockopt +setuid +sgid +sig +SIG +sigaction +sigaddset +SIGALRM +sigchld +SIGCHLD +sigdeath +sigdelay +sigemptyset +sighup +SIGILL +siginit +SIGINT +SIGKILL +signum +SIGPIPE +sigprocmask +SIGQUIT +sigresume +SIGSEGV +sigset +sigsetup +sigval +silenty +siocgif +SIOCGIFCONF +SIOCGIFNETMASK +siocglif +SIOCGLIFCONF +SIOCGLIFNETMASK +SIOCLIF +sizeof +skipblanks +sl +SLMDB +SLMs +smap +SMFIF +SMFIM +sni +SOA +sockaddr +SOCKADDR +Socketmap +socketmapname +socketmaps +socketpair +socklen +sockmap +socktype +SOCKTYPE +sofar +softerror +softlinks +SOML +soname +sp +SPARC +spawner +Spead +SPID +splitq +splitter +sqlitecon +sqrt +SRC +srv +srvr +sscanf +SSF +ssize +ssscanf +stackable +starttime +STATCUR +STATFAIL +statp +STATUNTRIED +StatusOr +statusp +stdarg +stderr +STDERR +STDIN +stdout +STDOUT +steenkeeng +stmt +str +STR +strcasecmp +strcat +strcpy +streamlf +STREAMLF +STREQ +strerror +STRERROR +strflags +strftime +stringops +strlen +STRLEN +strncasecmp +strncat +strncpy +strrecord +STRREF +strspn +strtol +strtoul +strtype +struct +structs +strval +STS +stuffozz +stye +subclasses +subcommand +subdirectories +Subdirectory +subjectAltName +subjectAltNames +sublist +sublists +Subnet +subnets +subopen +subpatterns +Substring +substrings +subtype +subtypes +succ +sudo +sunislelodge +superblocks +superset +supprt +Sutou +SVID +swb +Symas +symlinked +symlink's +symlinks +syscall +SYSCALL +sysconf +Syslog +syslogged +syslogging +sysv +TAAAA +tailp +tas +teardown +Tempfail +tempfailed +testcase +testname +th +tha +thash +THASH +theadsafe +threadsafe +thusly +timecmp +timeval +timval +tindx +tItp +tkt +TLScontext +tlsext +tlsfinger +tlsmgrmem +tlsmgr's +tlsp +TLSP +TLSPKTS +TLSPROXY +TLVs +tm +tmpbuf +ToASCII +TOCTOU +Todo +TODO +TOFILE +tok +TOK +tokenize +Tokenize +tokenizer +tokenizes +tokenizing +tokval +toUTF +tp +translit +transp +TRANSP +treibsand +tresspassers +trimblanks +trivally +TRNC +TRUNC +TRUSTAD +trustfile +TTL +TTLs +tty +tunable +Tunable +Tunables +tv +txn +TXT +Typechecking +TYPECONNSTRING +typedef +typedefs +TYPEINET +TYPEUNIX +ucasemap +uchar +UDP +ug +ugid +uic +uidna +UIDNA +UIDs +uint +ULIMIT +Ullman +ulong +ULONG +ultostr +Ultrix +ulval +un +unalias +uname +UNAUTH +unbuffered +uncache +Uncomment +undef +UNDEF +Undefine +Undeliverable +unescape +UNFAIL +unformatted +unget +ungetc +Unhandled +unicode +unimpl +uniq +unistd +unitialized +Universitaetsplatz +UnixWare +unk +unlink +Unlink +unlinked +unlinking +unlockfile +unmark +Unmark +unmarks +Unoptimized +Unparsable +unparse +unparsed +unparser +unparsing +UNPROTO +unprototyped +unregister +unregistering +unregisters +unselect +unselected +unsetenv +unsets +UNSPEC +unterminated +unthrottle +Unthrottle +UNTHROTTLE +UNTRUSTED +upass +upd +updatable +UPDATABLE +Upref +uprefs +URI +URIs +url +useauto +usebits +usec +usleep +USR +utf +utime +UTS +uva +uxtext +va +valgrind +validator +VALIDATOR +variadic +vbuf +VBUF +VBUFs +vdsb +ve +ver +verifier +verpified +VERPify +vfprintf +vfy +vmailer +Vmailer +vmilter +VMS +vmsg +Vn +vopened +vous +vp +vprint +vprintf +vscan +vsmtp +vsmtpd +vsnl +VSNL +vsprintf +vstream +VSTREAM +Vstreams +VSTREAM's +VSTREAMs +VSTREAMS +vstring +VSTRING +VSTRINGs +vtrace +waitpid +WAITPID +Wakeup +WAKEUP +wat +webservers +WeiYu +Wformat +whatsup +Whitespace +WIFSTOPPED +wil +wildcarded +Wimplicit +wireshark +Wmissing +Woops +Wparentheses +wr +Wrappermode +WRITEMAP +WRONLY +wsp +Wstrict +Wswitch +WTF +Wuninitialized +Wunused +XCPT +xdelay +xe +xfers +xmask +xport +xsasl +XSASL +XSH +xt +XTRA +XVxy +xxdbx +xxgdb +xxxx +XXXXX +xxxxxx +XXXXXXX +YASLM +yeardays +yyyy +yyyymmdd +zA +zer +Zmailer +AMD +All's +BIO +BTU +CALLBACK +CHUNKING +CO +CONT +CV +Callback +Cert +Compaq +DBL +DBMS +DICT +DP +Deferrals +ENC +EXCL +EXP +EXT +Ff +Goode +Grandfathered +INST +Inline +Kluge +LANG +LIB +LP +MAI +MGR +MIPS +MISC +MSG +MULTIPART +Majordomo +Misc +Mn +NB +NR +OBS +ORIG +OTOH +PF +PP +PX +Pf +Plugins +REC +RR +Rcpt +Regexp +SB +SC +SEQ +SN +STAT +STATS +STD +Siemens +Simplistically +Stat +UK +UNICODE +USERNAME +UTC +Unicode +Username +VA +ab +alphanumerical +app +av +barf +beholder's +bidirectionally +binding's +bio +builtin +callback +callbacks +ch +chg +comm +comp +crappy +def +deferrals +diff +enc +excl +exp +ext +externalized +gazillions +ht +incl +instance's +key's +kluge +masqueraded +maxed +metadata +mgr +mp +neg +op +ops +perms +pf +piggybacked +pref +proactive +proactively +proxy's +pt +reanimates +rec +refactor +regexps +request's +rollover +schlepping +scratchpad +seq +singlets +stat +stats +trespassing +ts +val +vars +verboten +versioning +wiki diff --git a/postfix/proto/stop.spell-proto-html b/postfix/proto/stop.spell-proto-html new file mode 100644 index 000000000..937c984f5 --- /dev/null +++ b/postfix/proto/stop.spell-proto-html @@ -0,0 +1,348 @@ +ABNF +ADAgECAhQSv +adhoc +ADME +aes +af +ahQkZ +AIX +Allowlist +allowlisting +allowlists +alphanumerics +amavisd +ame +apache +ASE +ATABASE +ated +attractor +authc +Axel +backported +Backscatter +BAQEFAASCBKcwggSjAgEAAoIBAQDc +barelf +bC +BDAT +BgBQGBg +BINARYMIME +bona +BQ +br +CAQAwBQYDK +Carsten +CdUaexKP +ce +certN +cflags +cgi +CHACHA +chainN +ching +ciphe +cldr +cOkjtAH +COMPAT +concurrenc +conn +Crespo +cronjob +csie +cve +cvename +Cy +cyrusimap +DATAB +DATABAS +dbpath +DCCAeCgAwIBAgIUIUkrbk +deduplication +Denylist +denylisting +denylists +der +dereferencing +DESTADDR +destinatio +DESTPORT +dfn +dgram +dH +DISPLA +dll +dom +doma +dont +DONT +dq +ecdsacerts +ecdsakey +EEXIST +eeYOxyThMA +Efbz +egv +else's +ENOENT +exchangers +exploder +fb +fe +fg +fi +fide +fifo +filesystem +fmsiQoRHzAFBgMrZXEwFDESMBAG +fprint +Fq +GAemPCT +ge +gid +GID +github +Gunnar +hardlink +hea +hecks +HGVNTK +HHMMSS +hostn +HOSTNAME +hre +href +HswDQYJKoZIhvcNAQEL +https +HuNn +HUP +iana +IDENT +idna +IDNA +ijs +imit +IU +jane +Jänicke +Jänicke's +jByBifpIe +jnorell +joe +js +jsp +kali +KAME +KazmyRi +keld +keyN +Kilani +krcaJvDSMgvu +KypOZPNPF +lan +latencies +li +libmemcache +libs +lient +limi +LNler +Logfile +logrotate +LOGTAG +lookahead +Lookups +lsqlite +lt +MAILLOG +mbox +MEcCAQAwBQYDK +MessageLabs +MIDDLEBOX +MIIBdjCB +MIIBKzCB +MIIC +MIIEvQIBADANBgkqhkiG +MILTER +mit +mitre +mtaadmin +MTAADMIN +mtadmin +mua +mygroup +myinst +NAbIJaDBqZb +nameservers +namespace +nat +nC +ncache +NCALLS +NCTU +newgroup +NFS +nH +ninit +NNTP +noop +nroffescape +nullmx +nulPzwUo +nzHQJ +OGvpyrMlm +oP +opendmarc +orion +oth +overinflate +oyE +PARAM +parametername +params +parsers +Pathname +pfs +pkgsrc +POSTFIX +postlogd +pQcWsx +precedences +pregreet +Pregreet +PREGREET +prepended +prepending +prepends +proble +proxied +Pseudocode +PSS +punycode +qADAgECAhQaw +qi +qmznjbD +Quanah +QusgkahH +Ralf +relayhos +RESOLV +resolvers +retransmission +retransmits +retransmitted +rf +rflRreYuUZBp +rhswl +Rirz +rL +rMZDAFBgMrZXAwFDESMBAG +RolyeiE +roundtrips +RPCZDrPX +rsacerts +rsachain +rsakey +rsyslog +runnable +SASLAUTHD +scheduler's +schemas +se +selectable +ser +SESS +si +SLcOiXFHXlxp +smarthost +smatch +sni +Softw +sp +spamassassin +spambot +sqrt +stderr +stdout +Stdout +stname +strftime +subdirectories +suboptimal +suid +suiteb +systemd +sz +tDc +tempfailing +th +threadm +threadsafe +tname +TRE +trusteddomain +TTL +tu +tw +TXT +uname +Uncomment +Undeliverable +unexpanded +unextended +unicode +unrefreshed +unrepliable +Unselective +unvalidated +uva +vali +VwBCIEIEJfbbO +VxBDsEOQf +VZuh +Whitespace +wi +wip +wKsTGDH +wzFd +xhtml +YPDWxEHom +YWH +yYhh +zdlPQR +Aren +rejec +debian +prox +vir +AAA +Admin +CHUNKING +DAT +Downsides +Firefox +Inline +Jänicke's +LANG +NZ +Plugin +Plugins +Unicode +WHITELIST +bk +ch +chg +chunking +comm +dbl +downsides +fer +gt +hos +injectors +kinks +pkg +rollover +rs +subj +wiki +Jà diff --git a/postfix/proto/transport b/postfix/proto/transport index 1cd30b3ce..c5ffff2ac 100644 --- a/postfix/proto/transport +++ b/postfix/proto/transport @@ -54,7 +54,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those case, the lookups +# can be directed to a TCP-based server. In those case, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # CASE FOLDING diff --git a/postfix/proto/virtual b/postfix/proto/virtual index 8f047322f..84edde41c 100644 --- a/postfix/proto/virtual +++ b/postfix/proto/virtual @@ -47,7 +47,7 @@ # # Alternatively, the table can be provided as a regular-expression # map where patterns are given as regular expressions, or lookups -# can be directed to TCP-based server. In those case, the lookups +# can be directed to a TCP-based server. In those case, the lookups # are done in a slightly different way as described below under # "REGULAR EXPRESSION TABLES" or "TCP-BASED TABLES". # CASE FOLDING @@ -89,7 +89,7 @@ # $\fBmydestination\fR, or when it is listed in $\fBinet_interfaces\fR # or $\fBproxy_interfaces\fR. # .sp -# This functionality overlaps with functionality of the local +# This functionality overlaps with the functionality of the local # \fIaliases\fR(5) database. The difference is that \fBvirtual\fR(5) # mapping can be applied to non-local addresses. # .IP "@\fIdomain address, address, ...\fR" @@ -145,7 +145,7 @@ # # The \fBpropagate_unmatched_extensions\fR parameter controls whether # an unmatched address extension (\fI+foo\fR) is propagated to the -# result of table lookup. +# result of a table lookup. # VIRTUAL ALIAS DOMAINS # .ad # .fi @@ -224,7 +224,7 @@ # This section describes how the table lookups change when lookups # are directed to a TCP-based server. For a description of the TCP # client/server lookup protocol, see \fBtcp_table\fR(5). -# This feature is not available up to and including Postfix version 2.4. +# This feature is available in Postfix 2.5 and later. # # Each lookup operation uses the entire address once. Thus, # \fIuser@domain\fR mail addresses are not broken up into their @@ -243,9 +243,9 @@ # a configuration change. # .IP "\fBvirtual_alias_maps ($virtual_maps)\fR" # Optional lookup tables that alias specific mail addresses or domains -# to other local or remote address. +# to other local or remote addresses. # .IP "\fBvirtual_alias_domains ($virtual_alias_maps)\fR" -# Postfix is final destination for the specified list of virtual +# Postfix is the final destination for the specified list of virtual # alias domains, that is, domains for which all addresses are aliased # to addresses in other local or remote domains. # .IP "\fBpropagate_unmatched_extensions (canonical, virtual)\fR" diff --git a/postfix/src/bounce/bounce_notify_util.c b/postfix/src/bounce/bounce_notify_util.c index a314729ab..781a5257f 100644 --- a/postfix/src/bounce/bounce_notify_util.c +++ b/postfix/src/bounce/bounce_notify_util.c @@ -816,7 +816,7 @@ int bounce_recipient_dsn(VSTREAM *bounce, BOUNCE_INFO *bounce_info) * relayed.". Postfix adds an ORCPT parameter under these conditions. * * Therefore, all down-stream MTAs will send DSNs with Original-Recipient - * field ontaining this same ORCPT value. When a down-stream MTA can use + * field containing this same ORCPT value. When a down-stream MTA can use * that information in their DSNs, it makes no sense that an up-stream * MTA can't use that same information in its own DSNs. * diff --git a/postfix/src/cleanup/cleanup_api.c b/postfix/src/cleanup/cleanup_api.c index 4fc5e2eac..738bd733f 100644 --- a/postfix/src/cleanup/cleanup_api.c +++ b/postfix/src/cleanup/cleanup_api.c @@ -261,7 +261,7 @@ int cleanup_flush(CLEANUP_STATE *state) * (mail submitted with the Postfix sendmail command, mail forwarded by * the local(8) delivery agent, or mail re-queued with "postsuper -r"), * send a bounce notification, reset the error flags in case of success, - * and request deletion of the the incoming queue file and of the + * and request deletion of the incoming queue file and of the * optional DSN SUCCESS records from virtual alias expansion. * * XXX It would make no sense to knowingly report success after we already diff --git a/postfix/src/cleanup/cleanup_message.c b/postfix/src/cleanup/cleanup_message.c index 8fc0153fe..f2b86d05b 100644 --- a/postfix/src/cleanup/cleanup_message.c +++ b/postfix/src/cleanup/cleanup_message.c @@ -681,7 +681,7 @@ static void cleanup_header_done_callback(void *context) /* * Future proofing: the Milter client's header suppression algorithm * assumes that the MTA prepends its own Received: header. This - * assupmtion may be violated after some source-code update. The + * assumption may be violated after some source-code update. The * following check ensures consistency, at least for local submission. */ if (state->hop_count < 1) { diff --git a/postfix/src/dns/dns_lookup.c b/postfix/src/dns/dns_lookup.c index 94d8045f7..1c12a889d 100644 --- a/postfix/src/dns/dns_lookup.c +++ b/postfix/src/dns/dns_lookup.c @@ -295,7 +295,7 @@ typedef struct DNS_REPLY { #define INET6_ADDR_LEN 16 /* XXX */ /* - * Use the theadsafe resolver API if available, not because it is theadsafe, + * Use the threadsafe resolver API if available, not because it is theadsafe, * but because it has more functionality. */ #ifdef USE_RES_NCALLS diff --git a/postfix/src/flush/flush.c b/postfix/src/flush/flush.c index 372f2cf20..b8fae7788 100644 --- a/postfix/src/flush/flush.c +++ b/postfix/src/flush/flush.c @@ -479,7 +479,7 @@ static int flush_one_file(const char *queue_id, VSTRING *queue_file, path, queue_name, MAIL_QUEUE_INCOMING); /* - * If we got here, we achieved something, so let's claim succes. + * If we got here, we achieved something, so let's claim success. */ return (1); } diff --git a/postfix/src/global/compat_level.c b/postfix/src/global/compat_level.c index 98d65c439..74308787c 100644 --- a/postfix/src/global/compat_level.c +++ b/postfix/src/global/compat_level.c @@ -78,7 +78,7 @@ /* the major field ranges from 0..COMPAT_MAJOR_SHIFT47 or more /* (11 bits or more). /* -/* This would be a great use case for fucntions returning +/* This would be a great use case for functions returning /* StatusOr or StatusOr, but is it a bit /* late for a port to C++. /* LICENSE diff --git a/postfix/src/global/db_common.c b/postfix/src/global/db_common.c index e22a90ac9..15e7a1c1b 100644 --- a/postfix/src/global/db_common.c +++ b/postfix/src/global/db_common.c @@ -46,7 +46,7 @@ /* same ctx argument. The context accumulates run-time lookup key and result /* validation information (inapplicable keys or results are skipped) and is /* needed later in each call of \fIdb_common_expand\fR. A non-zero return -/* value indicates that data-depedent '%' expansions were found in the input +/* value indicates that data-dependent '%' expansions were found in the input /* template. /* /* db_common_alloc() provides a way to use db_common_parse_domain() @@ -56,7 +56,7 @@ /* When the input data lacks all fields needed for the expansion, zero /* is returned and the query or result should be skipped. Otherwise /* the expansion is appended to the result buffer (after a comma if the -/* the result buffer is not empty). +/* result buffer is not empty). /* /* If not NULL, the \fBquote_func\fR callback performs database-specific /* quoting of each variable before expansion. diff --git a/postfix/src/global/deliver_request.c b/postfix/src/global/deliver_request.c index 591c6c6d1..7bc5553d0 100644 --- a/postfix/src/global/deliver_request.c +++ b/postfix/src/global/deliver_request.c @@ -71,7 +71,7 @@ /* /* The \fIhop_status\fR member must be updated by the caller /* when all delivery to the destination in \fInexthop\fR should -/* be deferred. This member is passed to to dsn_free(). +/* be deferred. This member is passed to dsn_free(). /* /* deliver_request_done() reports the delivery status back to the /* client, including the optional \fIhop_status\fR etc. information, diff --git a/postfix/src/global/dict_ldap.c b/postfix/src/global/dict_ldap.c index 2efad14fc..a4a4c2675 100644 --- a/postfix/src/global/dict_ldap.c +++ b/postfix/src/global/dict_ldap.c @@ -1040,7 +1040,7 @@ static char **url_attrs(DICT_LDAP *dict_ldap, LDAPURLDesc * url) /* * When the LDAP URI explicitly specifies a set of attributes, we use the - * interection of the URI attributes and our result attributes. This way + * interaction of the URI attributes and our result attributes. This way * LDAP URIs can hide certain attributes that should not be part of the * query. There is no point in retrieving attributes not listed in our * result set, we won't make any use of those. diff --git a/postfix/src/global/dict_sqlite.c b/postfix/src/global/dict_sqlite.c index 3f581abfb..106731adb 100644 --- a/postfix/src/global/dict_sqlite.c +++ b/postfix/src/global/dict_sqlite.c @@ -174,7 +174,7 @@ static const char *dict_sqlite_lookup(DICT *dict, const char *name) } /* - * Optionally fold the key. Folding may be enabled on on-the-fly. + * Optionally fold the key. Folding may be enabled on-the-fly. */ if (dict->flags & DICT_FLAG_FOLD_FIX) { if (dict->fold_buf == 0) diff --git a/postfix/src/global/dynamicmaps.c b/postfix/src/global/dynamicmaps.c index f97846013..55d622aa2 100644 --- a/postfix/src/global/dynamicmaps.c +++ b/postfix/src/global/dynamicmaps.c @@ -311,7 +311,7 @@ void dymap_init(const char *conf_path, const char *plugin_dir) VSTRING *sub_conf_path; /* - * Reload dynamicsmaps.cf, but don't reload already-loaded plugins. + * Reload dynamicmaps.cf, but don't reload already-loaded plugins. */ if (dymap_info != 0) htable_free(dymap_info, dymap_entry_free); diff --git a/postfix/src/global/mail_conf_time.c b/postfix/src/global/mail_conf_time.c index 5961dfe3c..5237dad29 100644 --- a/postfix/src/global/mail_conf_time.c +++ b/postfix/src/global/mail_conf_time.c @@ -46,7 +46,7 @@ /* get_mail_conf_time() looks up the named entry in the global /* configuration dictionary. The default value is returned /* when no value was found. \fIdef_unit\fR supplies the default -/* time unit for numbers numbers specified without explicit unit. +/* time unit for numbers specified without explicit unit. /* \fImin\fR is zero or specifies a lower limit on the integer /* value or string length; \fImax\fR is zero or specifies an /* upper limit on the integer value or string length. diff --git a/postfix/src/global/mail_copy.c b/postfix/src/global/mail_copy.c index 8a56f84af..7c60370ef 100644 --- a/postfix/src/global/mail_copy.c +++ b/postfix/src/global/mail_copy.c @@ -265,7 +265,7 @@ int mail_copy(const char *sender, * while fflush and fsync() succeed. Think of remote file systems such as * AFS that copy the file back to the server upon close. Oh well, no * point optimizing the error case. XXX On systems that use flock() - * locking, we must truncate the file file before closing it (and losing + * locking, we must truncate the file before closing it (and losing * the exclusive lock). */ read_error = vstream_ferror(src); diff --git a/postfix/src/global/mail_params.h b/postfix/src/global/mail_params.h index 781953c7b..4b530648a 100644 --- a/postfix/src/global/mail_params.h +++ b/postfix/src/global/mail_params.h @@ -2079,7 +2079,7 @@ extern int var_mailtool_compat; /* * How long a daemon command may take to receive or deliver a message etc. - * before we assume it is wegded (should never happen). + * before we assume it is wedged (should never happen). */ #define VAR_DAEMON_TIMEOUT "daemon_timeout" #define DEF_DAEMON_TIMEOUT "18000s" @@ -2497,7 +2497,11 @@ extern int var_local_rcpt_code; " $" VAR_SMTPD_EHLO_DIS_MAPS \ " $" VAR_SMTPD_MILTER_MAPS \ " $" VAR_VIRT_GID_MAPS \ - " $" VAR_VIRT_UID_MAPS + " $" VAR_VIRT_UID_MAPS \ + " $" VAR_LOCAL_LOGIN_SND_MAPS \ + " $" VAR_PSC_REJ_FTR_MAPS \ + " $" VAR_SMTPD_REJ_FTR_MAPS \ + " $" VAR_TLS_SERVER_SNI_MAPS extern char *var_proxy_read_maps; #define VAR_PROXY_WRITE_MAPS "proxy_write_maps" @@ -4196,7 +4200,7 @@ extern char *var_smtp_dns_re_filter; extern char *var_smtpd_dns_re_filter; /* - * Share TLS sessions through tlproxy(8). + * Share TLS sessions through tlsproxy(8). */ #define VAR_SMTP_TLS_CONN_REUSE "smtp_tls_connection_reuse" #define DEF_SMTP_TLS_CONN_REUSE 0 diff --git a/postfix/src/global/mail_proto.h b/postfix/src/global/mail_proto.h index 3ffe1fcbd..b5504638e 100644 --- a/postfix/src/global/mail_proto.h +++ b/postfix/src/global/mail_proto.h @@ -32,7 +32,7 @@ #define MAIL_PROTO_QMQP "QMQP" /* - * Names of services: these are the names of the UNIX-domain socket or or + * Names of services: these are the names of the UNIX-domain socket or * FIFO that a service listens on. */ #define MAIL_SERVICE_BOUNCE "bounce" diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index 21d9d1d1f..3f46be576 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,7 +20,7 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20211217" +#define MAIL_RELEASE_DATE "20220102" #define MAIL_VERSION_NUMBER "3.7" #ifdef SNAPSHOT diff --git a/postfix/src/global/memcache_proto.c b/postfix/src/global/memcache_proto.c index 58a7e3cba..1290cf2eb 100644 --- a/postfix/src/global/memcache_proto.c +++ b/postfix/src/global/memcache_proto.c @@ -31,7 +31,7 @@ /* ssize_t len; /* DESCRIPTION /* This module implements the low-level memcache protocol. -/* All functions return -1 on error and 0 on succcess. +/* All functions return -1 on error and 0 on success. /* SEE ALSO /* smtp_proto(3) SMTP low-level protocol. /* AUTHOR(S) diff --git a/postfix/src/global/normalize_mailhost_addr.c b/postfix/src/global/normalize_mailhost_addr.c index 640b4f377..ba0f7bd10 100644 --- a/postfix/src/global/normalize_mailhost_addr.c +++ b/postfix/src/global/normalize_mailhost_addr.c @@ -34,7 +34,7 @@ /* .IP addr_family /* Null pointer, or pointer to integer for storing the address /* family. -/* DIAGNISTICS +/* DIAGNOSTICS /* normalize_mailhost_addr() returns -1 if the input is malformed, /* zero otherwise. /* LICENSE diff --git a/postfix/src/global/quote_822_local.c b/postfix/src/global/quote_822_local.c index 541e4f721..c19ee57d4 100644 --- a/postfix/src/global/quote_822_local.c +++ b/postfix/src/global/quote_822_local.c @@ -231,7 +231,7 @@ VSTRING *unquote_822_local(VSTRING *dst, const char *mbox) /* * Proof-of-concept test program. Read an unquoted address from stdin, and * show the quoted and unquoted results. Specify <> to test behavior for an - * empty unquoted adress. + * empty unquoted address. */ #include #include diff --git a/postfix/src/global/test_main.c b/postfix/src/global/test_main.c index b3adf5947..a783ce354 100644 --- a/postfix/src/global/test_main.c +++ b/postfix/src/global/test_main.c @@ -168,7 +168,7 @@ NORETURN test_main(int argc, char **argv, TEST_DRIVER_FN test_driver,...) /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/global/verify.c b/postfix/src/global/verify.c index c4b26be04..cfb564859 100644 --- a/postfix/src/global/verify.c +++ b/postfix/src/global/verify.c @@ -102,7 +102,7 @@ int verify_append(const char *queue_id, MSG_STATS *stats, * XXX No DSN check; this routine is called from bounce/defer/sent, which * know what the DSN initial digit should look like. * - * XXX vrfy_stat is competely redundant because of dsn. + * XXX vrfy_stat is completely redundant because of dsn. */ if (var_verify_neg_cache || vrfy_stat == DEL_RCPT_STAT_OK) { if (recipient->orig_addr[0]) diff --git a/postfix/src/global/verify_sender_addr.c b/postfix/src/global/verify_sender_addr.c index e818f90f7..a3eb1bbbd 100644 --- a/postfix/src/global/verify_sender_addr.c +++ b/postfix/src/global/verify_sender_addr.c @@ -84,7 +84,7 @@ #define VERIFY_BASE 31 /* - * We append the time-dependent portion to the localpart of the the address + * We append the time-dependent portion to the localpart of the address * verification probe sender address, so that the result has the form * ``fixed1variable@fixed2''. There is no delimiter between ``fixed1'' and * ``variable'', because that could make "old" time stamps valid depending diff --git a/postfix/src/local/local.c b/postfix/src/local/local.c index a4133259d..32bdea77e 100644 --- a/postfix/src/local/local.c +++ b/postfix/src/local/local.c @@ -51,12 +51,18 @@ /* (complete recipient address), \fB$extension\fR (recipient address /* extension), \fB$domain\fR (recipient domain), \fB$local\fR /* (entire recipient address localpart) and -/* \fB$recipient_delimiter.\fR The forms \fI${name?value}\fR and -/* \fI${name:value}\fR expand conditionally to \fIvalue\fR when -/* \fI$name\fR is (is not) defined. -/* Characters that may have special meaning to the shell or file system -/* are replaced by underscores. The list of acceptable characters -/* is specified with the \fBforward_expansion_filter\fR configuration +/* \fB$recipient_delimiter.\fR The forms \fI${name?value}\fR +/* and \fI${name?{value}}\fR (Postfix 3.0 and later) expand +/* conditionally to \fIvalue\fR when \fI$name\fR is defined, +/* and the forms \fI${name:value}\fR \fI${name:{value}}\fR +/* (Postfix 3.0 and later) expand conditionally to \fIvalue\fR +/* when \fI$name\fR is not defined. The form +/* \fI${name?{value1}:{value2}}\fR (Postfix 3.0 and later) +/* expands conditionally to \fIvalue1\fR when \fI$name\fR is +/* defined, or \fIvalue2\fR otherwise. Characters that may +/* have special meaning to the shell or file system are replaced +/* with underscores. The list of acceptable characters is +/* specified with the \fBforward_expansion_filter\fR configuration /* parameter. /* /* An alias or ~/.\fBforward\fR file may list any combination of external @@ -164,13 +170,18 @@ /* address), \fB$extension\fR (recipient address extension), /* \fB$domain\fR (recipient domain), \fB$local\fR (entire /* recipient address localpart) and \fB$recipient_delimiter.\fR -/* The forms \fI${name?value}\fR and \fI${name:value}\fR expand -/* conditionally to \fIvalue\fR when \fI$name\fR is (is not) -/* defined. Characters that may have special meaning to the -/* shell or file system are replaced by underscores. The list -/* of acceptable characters is specified with the -/* \fBexecution_directory_expansion_filter\fR configuration -/* parameter. +/* The forms \fI${name?value}\fR and \fI${name?{value}}\fR +/* (Postfix 3.0 and later) expand conditionally to \fIvalue\fR +/* when \fI$name\fR is defined, and the forms \fI${name:value}\fR +/* and \fI${name:{value}}\fR (Postfix 3.0 and later) expand +/* conditionally to \fIvalue\fR when \fI$name\fR is not defined. +/* The form \fI${name?{value1}:{value2}}\fR (Postfix 3.0 and +/* later) expands conditionally to \fIvalue1\fR when \fI$name\fR +/* is defined, or \fIvalue2\fR otherwise. Characters that may +/* have special meaning to the shell or file system are replaced +/* with underscores. The list of acceptable characters +/* is specified with the \fBexecution_directory_expansion_filter\fR +/* configuration parameter. /* /* The command is executed directly where possible. Assistance by the /* shell (\fB/bin/sh\fR on UNIX systems) is used only when the command @@ -192,7 +203,7 @@ /* /* A limited amount of message context is exported via environment /* variables. Characters that may have special meaning to the shell -/* are replaced by underscores. The list of acceptable characters +/* are replaced with underscores. The list of acceptable characters /* is specified with the \fBcommand_expansion_filter\fR configuration /* parameter. /* .IP \fBSHELL\fR @@ -439,7 +450,7 @@ /* Available in Postfix version 2.2 and later: /* .IP "\fBcommand_execution_directory (empty)\fR" /* The \fBlocal\fR(8) delivery agent working directory for delivery to -/* external command. +/* external commands. /* MAILBOX LOCKING CONTROLS /* .ad /* .fi @@ -488,7 +499,7 @@ /* $name expansions of $mailbox_command and $command_execution_directory. /* .IP "\fBdefault_privs (nobody)\fR" /* The default rights used by the \fBlocal\fR(8) delivery agent for delivery -/* to external file or command. +/* to an external file or command. /* .IP "\fBforward_expansion_filter (see 'postconf -d' output)\fR" /* Restrict the characters that the \fBlocal\fR(8) delivery agent allows in /* $name expansions of $forward_path. @@ -520,7 +531,7 @@ /* The time limit for sending or receiving information over an internal /* communication channel. /* .IP "\fBlocal_command_shell (empty)\fR" -/* Optional shell program for \fBlocal\fR(8) delivery to non-Postfix command. +/* Optional shell program for \fBlocal\fR(8) delivery to non-Postfix commands. /* .IP "\fBmax_idle (100s)\fR" /* The maximum amount of time that an idle Postfix daemon process waits /* for an incoming connection before terminating voluntarily. diff --git a/postfix/src/local/unknown.c b/postfix/src/local/unknown.c index e643aad68..96443e178 100644 --- a/postfix/src/local/unknown.c +++ b/postfix/src/local/unknown.c @@ -113,7 +113,7 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr) return (0); /* - * The fall-back transport specifies a delivery machanism that handles + * The fall-back transport specifies a delivery mechanism that handles * users not found in the aliases or UNIX passwd databases. */ if (*var_fbck_transp_maps && transp_maps == 0) diff --git a/postfix/src/master/dgram_server.c b/postfix/src/master/dgram_server.c index 2ef3a5ae0..e49500e34 100644 --- a/postfix/src/master/dgram_server.c +++ b/postfix/src/master/dgram_server.c @@ -460,7 +460,7 @@ NORETURN dgram_server_main(int argc, char **argv, DGRAM_SERVER_FN service,...) /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/master/event_server.c b/postfix/src/master/event_server.c index 9f81fc672..9802bdf2f 100644 --- a/postfix/src/master/event_server.c +++ b/postfix/src/master/event_server.c @@ -716,7 +716,7 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...) /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/master/multi_server.c b/postfix/src/master/multi_server.c index fbdaf34ce..6150f229a 100644 --- a/postfix/src/master/multi_server.c +++ b/postfix/src/master/multi_server.c @@ -113,7 +113,7 @@ /* Only the last instance of this parameter type is remembered. /* .IP "CA_MAIL_SERVER_POST_ACCEPT(void *(VSTREAM *stream, char *service_name, char **argv, HTABLE *attr))" /* Function to be executed after accepting a new connection. -/* The stream, service_name and argv argunents are the same +/* The stream, service_name and argv arguments are the same /* as with the "service" argument. The attr argument is null /* or a pointer to a table with 'pass' connection attributes. /* The table is destroyed after the function returns. @@ -694,7 +694,7 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...) /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/master/single_server.c b/postfix/src/master/single_server.c index f834d8b5d..38f22b724 100644 --- a/postfix/src/master/single_server.c +++ b/postfix/src/master/single_server.c @@ -587,7 +587,7 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...) /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/master/trigger_server.c b/postfix/src/master/trigger_server.c index fa6114b87..c483a9ecc 100644 --- a/postfix/src/master/trigger_server.c +++ b/postfix/src/master/trigger_server.c @@ -570,7 +570,7 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,.. /* * Register higher-level dictionaries and initialize the support for - * dynamically-loaded dictionarles. + * dynamically-loaded dictionaries. */ mail_dict_init(); diff --git a/postfix/src/oqmgr/qmgr_entry.c b/postfix/src/oqmgr/qmgr_entry.c index 5a81487df..d5f326438 100644 --- a/postfix/src/oqmgr/qmgr_entry.c +++ b/postfix/src/oqmgr/qmgr_entry.c @@ -331,7 +331,7 @@ QMGR_ENTRY *qmgr_entry_create(QMGR_QUEUE *queue, QMGR_MESSAGE *message) * * XXX At this point in the code, the busy reference count is still less * than the concurrency limit (otherwise this code would not be invoked - * in the first place) so we have to make make some awkward adjustments + * in the first place) so we have to make some awkward adjustments * below. * * XXX The queue length test below looks at the active queue share of an diff --git a/postfix/src/oqmgr/qmgr_feedback.c b/postfix/src/oqmgr/qmgr_feedback.c index f341b9591..bf7aebb20 100644 --- a/postfix/src/oqmgr/qmgr_feedback.c +++ b/postfix/src/oqmgr/qmgr_feedback.c @@ -109,7 +109,7 @@ void qmgr_feedback_init(QMGR_FEEDBACK *fb, double enum_val; char denom_str[30 + 1]; double denom_val; - char slash; + char slash[1 + 1]; char junk; char *fbck_name; char *fbck_val; @@ -135,7 +135,7 @@ void qmgr_feedback_init(QMGR_FEEDBACK *fb, fb->base = -1; /* assume error */ switch (sscanf(fbck_val, "%lf %1[/] %30s%c", - &enum_val, &slash, denom_str, &junk)) { + &enum_val, slash, denom_str, &junk)) { case 1: fb->index = QMGR_FEEDBACK_IDX_NONE; fb->base = enum_val; diff --git a/postfix/src/pipe/pipe.c b/postfix/src/pipe/pipe.c index 8ce59fbea..8a994304b 100644 --- a/postfix/src/pipe/pipe.c +++ b/postfix/src/pipe/pipe.c @@ -170,6 +170,7 @@ /* .nf /* \fIRight\fR: command -f $sender -- $recipient /* .fi +/* NOTE: DO NOT put quotes around the command, $sender, or $recipient. /* .IP /* This feature is available as of Postfix 2.3. /* .IP "\fBsize\fR=\fIsize_limit\fR (optional)" diff --git a/postfix/src/postalias/postalias.c b/postfix/src/postalias/postalias.c index 635338a71..95388836a 100644 --- a/postfix/src/postalias/postalias.c +++ b/postfix/src/postalias/postalias.c @@ -12,7 +12,7 @@ /* The \fBpostalias\fR(1) command creates or queries one or more Postfix /* alias databases, or updates an existing one. The input and output /* file formats are expected to be compatible with Sendmail version 8, -/* and are expected to be suitable for the use as NIS alias maps. +/* and are expected to be suitable for use as NIS alias maps. /* /* If the result files do not exist they will be created with the /* same group and other read permissions as their source file. @@ -190,12 +190,12 @@ /* The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1) /* and \fBpostmap\fR(1) commands. /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" -/* The list of environment parameters that a privileged Postfix +/* The list of environment variables that a privileged Postfix /* process will import from a non-Postfix parent process, or name=value /* environment overrides. /* .IP "\fBsmtputf8_enable (yes)\fR" /* Enable preliminary SMTPUTF8 support for the protocols described -/* in RFC 6531..6533. +/* in RFC 6531, RFC 6532, and RFC 6533. /* .IP "\fBsyslog_facility (mail)\fR" /* The syslog facility of Postfix logging. /* .IP "\fBsyslog_name (see 'postconf -d' output)\fR" diff --git a/postfix/src/postconf/postconf.c b/postfix/src/postconf/postconf.c index e52dbc1eb..f598a5be6 100644 --- a/postfix/src/postconf/postconf.c +++ b/postfix/src/postconf/postconf.c @@ -165,7 +165,7 @@ /* and replace one or more service fields with new values as /* specified with "\fIservice/type/field=value\fR" on the /* \fBpostconf\fR(1) command line. Currently, the "command" -/* field contains the command name and command arguments. this +/* field contains the command name and command arguments. This /* may change in the near future, so that the "command" field /* contains only the command name, and a new "arguments" /* pseudofield contains the command arguments. @@ -182,7 +182,8 @@ /* line. /* /* The \fB-e\fR option is no longer needed with Postfix version -/* 2.8 and later. +/* 2.8 and later, as it is assumed whenever a value is specified +/* (empty or non-empty). /* .IP \fB-f\fR /* Fold long lines when printing \fBmain.cf\fR or \fBmaster.cf\fR /* configuration file entries, for human readability. @@ -202,8 +203,8 @@ /* /* This feature is available with Postfix 2.11 and later. /* .IP \fB-h\fR -/* Show parameter or attribute values without the "\fIname\fR -/* = " label that normally precedes the value. +/* Show parameter or attribute values without the "\fIname\fR = " +/* label that normally precedes the value. /* .IP \fB-H\fR /* Show parameter or attribute names without the " = \fIvalue\fR" /* that normally follows the name. @@ -421,12 +422,17 @@ /* later). To show settings that differ from built-in defaults /* only, use the following bash syntax: /* .nf -/* comm -23 <(postconf -n) <(postconf -d) +/* LANG=C comm -23 <(postconf -n) <(postconf -d) /* .fi /* Replace "-23" with "-12" to show settings that duplicate /* built-in defaults. /* .IP "\fB-o \fIname=value\fR" -/* Override \fBmain.cf\fR parameter settings. +/* Override \fBmain.cf\fR parameter settings. This lets you see +/* the effect changing a parameter would have when it is used in +/* other configuration parameters, e.g.: +/* .nf +/* postconf -x -o stress=yes +/* .fi /* /* This feature is available with Postfix 2.10 and later. /* .IP \fB-p\fR diff --git a/postfix/src/postconf/postconf_dbms.c b/postfix/src/postconf/postconf_dbms.c index d5dda924f..d21cad18f 100644 --- a/postfix/src/postconf/postconf_dbms.c +++ b/postfix/src/postconf/postconf_dbms.c @@ -170,7 +170,7 @@ static void pcf_check_dbms_client(const PCF_DBMS_INFO *dp, const char *cf_file) * Populate the dictionary with settings in this database client * configuration file. Don't die if a file can't be opened - some * files may contain passwords and should not be world-readable. - * Note: dict_load_fp() nags about duplicate pameter settings. + * Note: dict_load_fp() nags about duplicate parameter settings. */ dict = dict_ht_open(dict_spec, O_CREAT | O_RDWR, 0); dict_register(dict_spec, dict); diff --git a/postfix/src/postconf/postconf_master.c b/postfix/src/postconf/postconf_master.c index f4cb854da..687e03fdf 100644 --- a/postfix/src/postconf/postconf_master.c +++ b/postfix/src/postconf/postconf_master.c @@ -930,7 +930,7 @@ static void pcf_show_master_any_param(VSTREAM *fp, int mode, /* * Print parameters in sorted order. The number of parameters per - * master.cf entry is small, so we optmiize for code simplicity and don't + * master.cf entry is small, so we optimize for code simplicity and don't * worry about the cost of double lookup. */ diff --git a/postfix/src/postconf/postconf_user.c b/postfix/src/postconf/postconf_user.c index 8d0e726d9..5942ec098 100644 --- a/postfix/src/postconf/postconf_user.c +++ b/postfix/src/postconf/postconf_user.c @@ -408,7 +408,7 @@ void pcf_register_user_parameters(void) /* * Scan parameter values that are left at their defaults in the global * name space. Some defaults contain the $name of an obsolete parameter - * for backwards compatilility purposes. We might warn that an explicit + * for backwards compatibility purposes. We might warn that an explicit * name=value is obsolete, but we must not warn that the parameter is * unused. */ diff --git a/postfix/src/postdrop/postdrop.c b/postfix/src/postdrop/postdrop.c index 16657abe4..e9335e99a 100644 --- a/postfix/src/postdrop/postdrop.c +++ b/postfix/src/postdrop/postdrop.c @@ -497,7 +497,7 @@ int main(int argc, char **argv) for (;;) { /* Don't allow PTR records. */ rec_type = rec_get_raw(VSTREAM_IN, buf, var_line_limit, REC_FLAG_NONE); - if (rec_type == REC_TYPE_EOF) { /* request cancelled */ + if (rec_type == REC_TYPE_EOF) { /* request canceled */ mail_stream_cleanup(dst); if (remove(postdrop_path)) msg_warn("uid=%ld: remove %s: %m", (long) uid, postdrop_path); diff --git a/postfix/src/postfix/postfix.c b/postfix/src/postfix/postfix.c index 0c4b6de50..fed152d65 100644 --- a/postfix/src/postfix/postfix.c +++ b/postfix/src/postfix/postfix.c @@ -212,7 +212,7 @@ /* .PP /* Other configuration parameters: /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" -/* The list of environment parameters that a privileged Postfix +/* The list of environment variables that a privileged Postfix /* process will import from a non-Postfix parent process, or name=value /* environment overrides. /* .IP "\fBsyslog_facility (mail)\fR" @@ -280,6 +280,7 @@ /* postalias(1), create/update/query alias database /* postcat(1), examine Postfix queue file /* postconf(1), Postfix configuration utility +/* postdrop(1), Postfix mail posting utility /* postfix(1), Postfix control program /* postfix-tls(1), Postfix TLS management /* postkick(1), trigger Postfix daemon diff --git a/postfix/src/postmap/postmap.c b/postfix/src/postmap/postmap.c index d97425c6c..66421d008 100644 --- a/postfix/src/postmap/postmap.c +++ b/postfix/src/postmap/postmap.c @@ -38,7 +38,10 @@ /* .PP /* The \fIkey\fR and \fIvalue\fR are processed as is, except that /* surrounding white space is stripped off. Whitespace in lookup -/* keys is supported as of Postfix 3.2. +/* keys is supported in Postfix 3.2 and later, by surrounding the +/* key with double quote characters `"'. Within the double quotes, +/* double quote `"' and backslash `\\' characters can be included +/* by quoting them with a preceding backslash. /* /* When the \fB-F\fR option is given, the \fIvalue\fR must /* specify one or more filenames separated by comma and/or @@ -78,8 +81,8 @@ /* headers and for attached message/* headers. /* .sp /* NOTE: with "smtputf8_enable = yes", the \fB-b\fR option -/* option disables UTF-8 syntax checks on query keys and -/* lookup results. Specify the \fB-U\fR option to force UTF-8 +/* disables UTF-8 syntax checks on query keys and lookup +/* results. Specify the \fB-U\fR option to force UTF-8 /* syntax checks anyway. /* .sp /* This feature is available in Postfix version 2.6 and later. @@ -271,12 +274,12 @@ /* The default database type for use in \fBnewaliases\fR(1), \fBpostalias\fR(1) /* and \fBpostmap\fR(1) commands. /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" -/* The list of environment parameters that a privileged Postfix +/* The list of environment variables that a privileged Postfix /* process will import from a non-Postfix parent process, or name=value /* environment overrides. /* .IP "\fBsmtputf8_enable (yes)\fR" /* Enable preliminary SMTPUTF8 support for the protocols described -/* in RFC 6531..6533. +/* in RFC 6531, RFC 6532, and RFC 6533. /* .IP "\fBsyslog_facility (mail)\fR" /* The syslog facility of Postfix logging. /* .IP "\fBsyslog_name (see 'postconf -d' output)\fR" @@ -657,7 +660,7 @@ static int postmap_queries(VSTREAM *in, char **maps, const int map_count, dicts[n] = 0; /* - * Perform all queries. Open maps on the fly, to avoid opening unecessary + * Perform all queries. Open maps on the fly, to avoid opening unnecessary * maps. */ if ((postmap_flags & POSTMAP_FLAG_HB_KEY) == 0) { diff --git a/postfix/src/postmulti/postmulti.c b/postfix/src/postmulti/postmulti.c index bffb8edfa..5adcd272c 100644 --- a/postfix/src/postmulti/postmulti.c +++ b/postfix/src/postmulti/postmulti.c @@ -208,7 +208,7 @@ /* values for the private directories of the new instance. The /* "\fB-G \fIgroup\fR" option may be specified to assign the /* instance to a group, otherwise, the new instance is not a -/* member of any groups. +/* member of any group. /* .sp /* The new instance main.cf is the stock main.cf with the /* parameters that specify the locations of shared files cloned @@ -233,9 +233,9 @@ /* .RE /* .IP /* If any of these pathnames is not supplied, the program -/* attempts to generate the pathname by taking the corresponding -/* primary instance pathname, and by replacing the last pathname -/* component by the value of the \fB-I\fR option. +/* attempts to generate the missing pathname(s) by taking the +/* corresponding primary instance pathname, and replacing the +/* last pathname component by the value of the \fB-I\fR option. /* .sp /* If the instance configuration directory already exists, and /* contains both a main.cf and master.cf file, \fBcreate\fR @@ -326,7 +326,7 @@ /* .IP "\fBdaemon_directory (see 'postconf -d' output)\fR" /* The directory with Postfix support programs and daemon programs. /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" -/* The list of environment parameters that a privileged Postfix +/* The list of environment variables that a privileged Postfix /* process will import from a non-Postfix parent process, or name=value /* environment overrides. /* .IP "\fBmulti_instance_directories (empty)\fR" @@ -614,7 +614,7 @@ typedef struct { * To detect conflicts, each instance name and each shared or private * pathname is registered in one place, with its owner. Everyone must * register their claims when they join, and will be rejected in case of - * conlict. + * conflict. * * Each claim value involves a parameter value (either a directory name or an * instance name). Each claim owner is the config_directory pathname plus @@ -965,7 +965,7 @@ static void check_shared_dir_status(void) /* * XXX Avoid false conflicts with meta_directory. This usually overlaps - * with other directories, typcally config_directory, shlib_directory or + * with other directories, typically config_directory, shlib_directory or * daemon_directory. */ for (sp = shared_dir_table; sp->param_name; ++sp) { diff --git a/postfix/src/postqueue/postqueue.c b/postfix/src/postqueue/postqueue.c index 937176383..f4afa632b 100644 --- a/postfix/src/postqueue/postqueue.c +++ b/postfix/src/postqueue/postqueue.c @@ -390,7 +390,7 @@ static void show_queue(int mode) * Don't assume that the mail system is down when the user has * insufficient permission to access the showq socket. */ - else if (errno == EACCES) { + else if (errno == EACCES || errno == EPERM) { msg_fatal_status(EX_SOFTWARE, "Connect to the %s %s service: %m", var_mail_name, var_showq_service); @@ -405,7 +405,9 @@ static void show_queue(int mode) ARGV *argv; int stat; - msg_warn("Mail system is down -- accessing queue directly"); + msg_warn("Mail system is down -- accessing queue directly" + " (Connect to the %s %s service: %m)", + var_mail_name, var_showq_service); showq_path = concatenate(var_daemon_dir, "/", var_showq_service, (char *) 0); argv = argv_alloc(6); @@ -436,7 +438,9 @@ static void show_queue(int mode) */ else { msg_fatal_status(EX_UNAVAILABLE, - "Queue report unavailable - mail system is down"); + "Queue report unavailable - mail system is down" + " (Connect to the %s %s service: %m)", + var_mail_name, var_showq_service); } } diff --git a/postfix/src/postqueue/showq_compat.c b/postfix/src/postqueue/showq_compat.c index c902b9c5d..f5ca05991 100644 --- a/postfix/src/postqueue/showq_compat.c +++ b/postfix/src/postqueue/showq_compat.c @@ -2,7 +2,7 @@ /* NAME /* showq_compat 8 /* SUMMARY -/* Sendmail mailq compatibitily adapter +/* Sendmail mailq compatibility adapter /* SYNOPSIS /* void showq_compat( /* VSTREAM *showq) diff --git a/postfix/src/postscreen/postscreen_smtpd.c b/postfix/src/postscreen/postscreen_smtpd.c index 1c8a749fe..5e544ae0c 100644 --- a/postfix/src/postscreen/postscreen_smtpd.c +++ b/postfix/src/postscreen/postscreen_smtpd.c @@ -213,7 +213,7 @@ static void psc_smtpd_read_event(int, void *); /* * Encapsulation. The STARTTLS, EHLO and AUTH command handlers temporarily * suspend SMTP command events, send an asynchronous proxy request, and - * resume SMTP command events after receiving the asynchrounous proxy + * resume SMTP command events after receiving the asynchronous proxy * response (the EHLO handler must asynchronously talk to the auth server * before it can announce the SASL mechanism list; the list can depend on * the client IP address and on the presence on TLS encryption). diff --git a/postfix/src/postscreen/postscreen_starttls.c b/postfix/src/postscreen/postscreen_starttls.c index 67dd3c1e1..4036a3dcd 100644 --- a/postfix/src/postscreen/postscreen_starttls.c +++ b/postfix/src/postscreen/postscreen_starttls.c @@ -76,7 +76,7 @@ */ /* - * Transient state for the portscreen(8)-to-tlsproxy(8) hand-off protocol. + * Transient state for the postscreen(8)-to-tlsproxy(8) hand-off protocol. */ typedef struct { VSTREAM *tlsproxy_stream; /* hand-off negotiation */ diff --git a/postfix/src/posttls-finger/posttls-finger.c b/postfix/src/posttls-finger/posttls-finger.c index 28e204856..8b34444e9 100644 --- a/postfix/src/posttls-finger/posttls-finger.c +++ b/postfix/src/posttls-finger/posttls-finger.c @@ -12,7 +12,7 @@ /* and reports TLS-related information about the server. With SMTP, the /* destination is a domainname; with LMTP it is either a domainname /* prefixed with \fBinet:\fR or a pathname prefixed with \fBunix:\fR. If -/* Postfix is built without TLS support, the resulting posttls-finger +/* Postfix is built without TLS support, the resulting \fBposttls-finger\fR(1) /* program has very limited functionality, and only the \fB-a\fR, \fB-c\fR, /* \fB-h\fR, \fB-o\fR, \fB-S\fR, \fB-t\fR, \fB-T\fR and \fB-v\fR options /* are available. @@ -78,9 +78,9 @@ /* Arguments: /* .IP "\fB-a\fR \fIfamily\fR (default: \fBany\fR)" /* Address family preference: \fBipv4\fR, \fBipv6\fR or \fBany\fR. When -/* using \fBany\fR, posttls-finger will randomly select one of the two as -/* the more preferred, and exhaust all MX preferences for the first -/* address family before trying any addresses for the other. +/* using \fBany\fR, \fBposttls-finger\fR(1) will randomly select one of +/* the two as the more preferred, and exhaust all MX preferences for the +/* first address family before trying any addresses for the other. /* .IP "\fB-A\fR \fItrust-anchor.pem\fR (default: none)" /* A list of PEM trust-anchor files that overrides CAfile and CApath /* trust chain verification. Specify the option multiple times to @@ -101,7 +101,7 @@ /* fingerprints and matching against user provided certificate /* fingerprints (with DANE TLSA records the algorithm is specified /* in the DNS). In Postfix versions prior to 3.6, the default value -/* was "sha1". +/* was "md5". /* .IP "\fB-f\fR" /* Lookup the associated DANE TLSA RRset even when a hostname is not an /* alias and its address records lie in an unsigned zone. See @@ -111,8 +111,8 @@ /* verification. By default no CAfile is used and no public CAs /* are trusted. /* .IP "\fB-g \fIgrade\fR (default: medium)" -/* The minimum TLS cipher grade used by posttls-finger. See -/* smtp_tls_mandatory_ciphers for details. +/* The minimum TLS cipher grade used by \fBposttls-finger\fR(1). +/* See smtp_tls_mandatory_ciphers for details. /* .IP "\fB-h \fIhost_lookup\fR (default: \fBdns\fR)" /* The hostname lookup methods used for the connection. See the /* documentation of smtp_host_lookup for syntax and semantics. @@ -142,7 +142,7 @@ /* security level allows you to test certificate or public-key /* fingerprint matches before you deploy them in the policy table. /* .IP -/* Note, since \fBposttls-finger\fR does not actually deliver any email, +/* Note, since \fBposttls-finger\fR(1) does not actually deliver any email, /* the \fBnone\fR, \fBmay\fR and \fBencrypt\fR security levels are not /* very useful. Since \fBmay\fR and \fBencrypt\fR don't require peer /* certificates, they will often negotiate anonymous TLS ciphersuites, @@ -218,14 +218,14 @@ /* The TLS policy for MX hosts with "secure" TLSA records when the /* nexthop destination security level is \fBdane\fR, but the MX /* record was found via an "insecure" MX lookup. See the main.cf -/* documentation for smtp_tls_insecure_mx_policy for details. +/* documentation for smtp_tls_dane_insecure_mx_policy for details. /* .IP "\fB-o \fIname=value\fR" /* Specify zero or more times to override the value of the main.cf /* parameter \fIname\fR with \fIvalue\fR. Possible use-cases include /* overriding the values of TLS library parameters, or "myhostname" to /* configure the SMTP EHLO name sent to the remote server. /* .IP "\fB-p \fIprotocols\fR (default: >=TLSv1)" -/* TLS protocols that posttls-finger will exclude or include. See +/* TLS protocols that \fBposttls-finger\fR(1) will exclude or include. See /* smtp_tls_mandatory_protocols for details. /* .IP "\fB-P \fICApath/\fR (default: none)" /* The OpenSSL CApath/ directory (indexed via c_rehash(1)) for remote @@ -257,10 +257,10 @@ /* Enable verbose Postfix logging. Specify more than once to increase /* the level of verbose logging. /* .IP "\fB-w\fR" -/* Enable outgoing TLS wrapper mode, or SMTPS support. This is typically -/* provided on port 465 by servers that are compatible with the ad-hoc -/* SMTP in SSL protocol, rather than the standard STARTTLS protocol. -/* The destination \fIdomain\fR:\fIport\fR should of course provide such +/* Enable outgoing TLS wrapper mode, or SUBMISSIONS/SMTPS support. This +/* is typically provided on port 465 by servers that are compatible with +/* the SMTP-in-SSL protocol, rather than the STARTTLS protocol. +/* The destination \fIdomain\fR:\fIport\fR must of course provide such /* a service. /* .IP "\fB-X\fR" /* Enable \fBtlsproxy\fR(8) mode. This is an unsupported mode, @@ -1393,7 +1393,7 @@ static DNS_RR *host_addr(STATE *state, const char *host) return (addr_list); } -/* dane_host_level - canidate host "dane" or degraded security level */ +/* dane_host_level - candidate host "dane" or degraded security level */ static int dane_host_level(STATE *state, DNS_RR *addr) { diff --git a/postfix/src/proxymap/proxymap.c b/postfix/src/proxymap/proxymap.c index a42ee73b8..abdcf3af7 100644 --- a/postfix/src/proxymap/proxymap.c +++ b/postfix/src/proxymap/proxymap.c @@ -303,7 +303,7 @@ static char *get_nested_dict_name(char *type_name) { const struct { const char *type_col; - ssize_t type_col_len + ssize_t type_col_len; } *prefix, prefixes[] = { DICT_TYPE_UNION ":", (sizeof(DICT_TYPE_UNION ":") - 1), DICT_TYPE_PIPE ":", (sizeof(DICT_TYPE_PIPE ":") - 1), @@ -793,7 +793,7 @@ static void pre_accept(char *unused_name, char **unused_argv) } } -/* post_accept - anounce our protocol name */ +/* post_accept - announce our protocol name */ static void post_accept(VSTREAM *stream, char *unused_name, char **unused_argv, HTABLE *unused_attr) diff --git a/postfix/src/qmgr/qmgr_entry.c b/postfix/src/qmgr/qmgr_entry.c index 61b343487..e0673a93d 100644 --- a/postfix/src/qmgr/qmgr_entry.c +++ b/postfix/src/qmgr/qmgr_entry.c @@ -392,7 +392,7 @@ QMGR_ENTRY *qmgr_entry_create(QMGR_PEER *peer, QMGR_MESSAGE *message) * * XXX At this point in the code, the busy reference count is still less * than the concurrency limit (otherwise this code would not be invoked - * in the first place) so we have to make make some awkward adjustments + * in the first place) so we have to make some awkward adjustments * below. * * XXX The queue length test below looks at the active queue share of an diff --git a/postfix/src/qmgr/qmgr_feedback.c b/postfix/src/qmgr/qmgr_feedback.c index f341b9591..bf7aebb20 100644 --- a/postfix/src/qmgr/qmgr_feedback.c +++ b/postfix/src/qmgr/qmgr_feedback.c @@ -109,7 +109,7 @@ void qmgr_feedback_init(QMGR_FEEDBACK *fb, double enum_val; char denom_str[30 + 1]; double denom_val; - char slash; + char slash[1 + 1]; char junk; char *fbck_name; char *fbck_val; @@ -135,7 +135,7 @@ void qmgr_feedback_init(QMGR_FEEDBACK *fb, fb->base = -1; /* assume error */ switch (sscanf(fbck_val, "%lf %1[/] %30s%c", - &enum_val, &slash, denom_str, &junk)) { + &enum_val, slash, denom_str, &junk)) { case 1: fb->index = QMGR_FEEDBACK_IDX_NONE; fb->base = enum_val; diff --git a/postfix/src/qmqpd/qmqpd_peer.c b/postfix/src/qmqpd/qmqpd_peer.c index 14893ddb5..41cd00953 100644 --- a/postfix/src/qmqpd/qmqpd_peer.c +++ b/postfix/src/qmqpd/qmqpd_peer.c @@ -199,7 +199,7 @@ void qmqpd_peer_init(QMQPD_STATE *state) /* * Following RFC 2821 section 4.1.3, an IPv6 address literal gets * a prefix of 'IPv6:'. We do this consistently for all IPv6 - * addresses that that appear in headers or envelopes. The fact + * addresses that appear in headers or envelopes. The fact * that valid_mailhost_addr() enforces the form helps of course. * We use the form without IPV6: prefix when doing access * control, or when accessing the connection cache. diff --git a/postfix/src/sendmail/sendmail.c b/postfix/src/sendmail/sendmail.c index e060e58b4..27b354345 100644 --- a/postfix/src/sendmail/sendmail.c +++ b/postfix/src/sendmail/sendmail.c @@ -81,7 +81,7 @@ /* command above. /* .IP \fB-bl\fR /* Go into daemon mode. To accept only local connections as -/* with Sendmail\'s \fB-bl\fR option, specify "\fBinet_interfaces +/* with Sendmail's \fB-bl\fR option, specify "\fBinet_interfaces /* = loopback\fR" in the Postfix \fBmain.cf\fR configuration /* file. /* .IP \fB-bm\fR @@ -140,7 +140,7 @@ /* Initialize alias database. See the \fBnewaliases\fR /* command above. /* .IP "\fB-i\fR" -/* When reading a message from standard input, don\'t treat a line +/* When reading a message from standard input, don't treat a line /* with only a \fB.\fR character as the end of input. /* .IP "\fB-L \fIlabel\fR (ignored)" /* The logging label. Use the \fBsyslog_name\fR configuration @@ -170,7 +170,7 @@ /* To send 8-bit or binary content, use an appropriate MIME encapsulation /* and specify the appropriate \fB-B\fR command-line option. /* .IP "\fB-oi\fR" -/* When reading a message from standard input, don\'t treat a line +/* When reading a message from standard input, don't treat a line /* with only a \fB.\fR character as the end of input. /* .IP "\fB-om\fR (ignored)" /* The sender is never eliminated from alias etc. expansions. @@ -403,7 +403,7 @@ /* The time after which the sender receives a copy of the message /* headers of mail that is still queued. /* .IP "\fBimport_environment (see 'postconf -d' output)\fR" -/* The list of environment parameters that a privileged Postfix +/* The list of environment variables that a privileged Postfix /* process will import from a non-Postfix parent process, or name=value /* environment overrides. /* .IP "\fBmail_owner (postfix)\fR" diff --git a/postfix/src/smtp/smtp.h b/postfix/src/smtp/smtp.h index 07b3b3a81..137ccc802 100644 --- a/postfix/src/smtp/smtp.h +++ b/postfix/src/smtp/smtp.h @@ -303,7 +303,7 @@ extern MAPS *smtp_ehlo_dis_maps; /* ehlo keyword filter */ extern MAPS *smtp_pix_bug_maps; /* PIX workarounds */ extern MAPS *smtp_generic_maps; /* make internal address valid */ -extern int smtp_ext_prop_mask; /* address externsion propagation */ +extern int smtp_ext_prop_mask; /* address extension propagation */ extern unsigned smtp_dns_res_opt; /* DNS query flags */ #ifdef USE_TLS @@ -471,7 +471,7 @@ extern HBC_CALL_BACKS smtp_hbc_callbacks[]; (session->expire_time = (when)) /* - * Encapsulate the following so that we don't expose details of of + * Encapsulate the following so that we don't expose details of * connection management and error handling to the SMTP protocol engine. */ #ifdef USE_SASL_AUTH diff --git a/postfix/src/smtp/smtp_proto.c b/postfix/src/smtp/smtp_proto.c index d110fc287..650b5306f 100644 --- a/postfix/src/smtp/smtp_proto.c +++ b/postfix/src/smtp/smtp_proto.c @@ -888,7 +888,7 @@ static int smtp_start_tls(SMTP_STATE *state) * either the transport name or the values of CAfile and CApath. We use * the transport name. * - * XXX: We store only one session per lookup key. Ideally the the key maps + * XXX: We store only one session per lookup key. Ideally the key maps * 1-to-1 to a server TLS session cache. We use the IP address, port and * ehlo response name to build a lookup key that works for split caches * (that announce distinct names) behind a load balancer. @@ -1935,7 +1935,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, * not clobber this non-zero value once it is set. The * variable need not survive longjmp() calls, since the only * setjmp() which does not return early is the one sets this - * condition, subquent failures always return early. + * condition, subsequent failures always return early. */ #define LOST_CONNECTION_INSIDE_DATA (except == SMTP_ERR_EOF) diff --git a/postfix/src/smtpd/smtpd_check.c b/postfix/src/smtpd/smtpd_check.c index 5bbee93b2..a4a6af063 100644 --- a/postfix/src/smtpd/smtpd_check.c +++ b/postfix/src/smtpd/smtpd_check.c @@ -5098,7 +5098,7 @@ char *smtpd_check_rcpt(SMTPD_STATE *state, char *recipient) * value would block the request, without logging REJECT messages. * Approach: evaluate fake relay restrictions (permit_mynetworks, * permit_sasl_authenticated, permit_auth_destination) and log a warning - * if the result is DUNNO instead of OK, i.e. a reject_unauth_destinatin + * if the result is DUNNO instead of OK, i.e. a reject_unauth_destination * at the end would have blocked the request. * * If warn_compat_break_relay_restrictions is true, always evaluate diff --git a/postfix/src/smtpd/smtpd_peer.c b/postfix/src/smtpd/smtpd_peer.c index 179e19d8f..3a5c1d46b 100644 --- a/postfix/src/smtpd/smtpd_peer.c +++ b/postfix/src/smtpd/smtpd_peer.c @@ -264,7 +264,7 @@ static int smtpd_peer_sockaddr_to_hostaddr(SMTPD_STATE *state) /* * Following RFC 2821 section 4.1.3, an IPv6 address literal gets * a prefix of 'IPv6:'. We do this consistently for all IPv6 - * addresses that that appear in headers or envelopes. The fact + * addresses that appear in headers or envelopes. The fact * that valid_mailhost_addr() enforces the form helps of course. * We use the form without IPV6: prefix when doing access * control, or when accessing the connection cache. diff --git a/postfix/src/smtpstone/smtp-sink.c b/postfix/src/smtpstone/smtp-sink.c index 2ebff92c9..c34f21df6 100644 --- a/postfix/src/smtpstone/smtp-sink.c +++ b/postfix/src/smtpstone/smtp-sink.c @@ -191,7 +191,7 @@ /* .IP \fBunix:\fR\fIpathname\fR /* Listen on the UNIX-domain socket at \fIpathname\fR. /* .IP \fIbacklog\fR -/* The maximum length the queue of pending connections, +/* The maximum length of the queue of pending connections, /* as defined by the \fBlisten\fR(2) system call. /* DUMP FILE FORMAT /* .ad diff --git a/postfix/src/spawn/spawn.c b/postfix/src/spawn/spawn.c index c9f5ae047..686b0da15 100644 --- a/postfix/src/spawn/spawn.c +++ b/postfix/src/spawn/spawn.c @@ -12,7 +12,7 @@ /* and spawns an external command whenever a connection is established. /* The connection can be made over local IPC (such as UNIX-domain /* sockets) or over non-local IPC (such as TCP sockets). -/* The command\'s standard input, output and error streams are connected +/* The command's standard input, output and error streams are connected /* directly to the communication endpoint. /* /* This daemon expects to be run from the \fBmaster\fR(8) process diff --git a/postfix/src/tls/tls_certkey.c b/postfix/src/tls/tls_certkey.c index 489c3557b..09a35e017 100644 --- a/postfix/src/tls/tls_certkey.c +++ b/postfix/src/tls/tls_certkey.c @@ -319,7 +319,7 @@ static void load_pkey(pem_load_state_t *st, int pkey_type, if (pkey) EVP_PKEY_free(pkey); - /* XXX: Legacy behaviour was silent, should we stay silent? */ + /* XXX: Legacy behavior was silent, should we stay silent? */ if (st->mixed) { msg_warn("ignoring 2nd key at index %d in %s after 1st at %d", st->objnum, st->source, st->keynum); diff --git a/postfix/src/tls/tls_client.c b/postfix/src/tls/tls_client.c index c9f259916..b6065649b 100644 --- a/postfix/src/tls/tls_client.c +++ b/postfix/src/tls/tls_client.c @@ -534,7 +534,7 @@ static int tls_auth_enable(TLS_SESS_STATE *TLScontext, * associated TLSA RRs. * * Since the hostname is DNSSEC-validated, it must be a DNS FQDN and - * thererefore valid for use with SNI. + * therefore valid for use with SNI. */ if (SSL_dane_enable(TLScontext->con, 0) <= 0) { msg_warn("%s: error enabling DANE-based certificate validation", diff --git a/postfix/src/tls/tls_fprint.c b/postfix/src/tls/tls_fprint.c index 5c7a4efdd..4f2f015b5 100644 --- a/postfix/src/tls/tls_fprint.c +++ b/postfix/src/tls/tls_fprint.c @@ -28,7 +28,7 @@ /* The return value is dynamically allocated with mymalloc(), /* and the caller must eventually free it with myfree(). /* -/* tls_cert_fprint() returns a fingerprint of the the given +/* tls_cert_fprint() returns a fingerprint of the given /* certificate using the requested message digest, formatted /* with tls_digest_encode(). Panics if the /* (previously verified) digest algorithm is not found. The return @@ -153,7 +153,7 @@ static int tlsa_cmp(const void *a, const void *b) return (memcmp(p->data, q->data, p->length)); } -/* tls_digest_tlsa - fold in digest of sorced TLSA records */ +/* tls_digest_tlsa - fold in digest of TLSA records */ static int tls_digest_tlsa(EVP_MD_CTX *mdctx, TLS_TLSA *tlsa) { @@ -293,7 +293,7 @@ char *tls_digest_encode(const unsigned char *md_buf, int md_len) if (md_len > EVP_MAX_MD_SIZE || md_len >= INT_MAX / 3) msg_panic("unexpectedly large message digest size: %u", md_len); - /* No risk of overrunes, len is bounded by OpenSSL digest length */ + /* No risk of overruns, len is bounded by OpenSSL digest length */ for (i = 0; i < md_len; i++) { result[i * 3] = hexcodes[(md_buf[i] & 0xf0) >> 4U]; result[(i * 3) + 1] = hexcodes[(md_buf[i] & 0x0f)]; diff --git a/postfix/src/tls/tls_misc.c b/postfix/src/tls/tls_misc.c index 338a63be4..d1685136b 100644 --- a/postfix/src/tls/tls_misc.c +++ b/postfix/src/tls/tls_misc.c @@ -1453,7 +1453,7 @@ void tls_info_callback(const SSL *s, int where, int ret) * * Modified to save a lot of strcpy and strcat by Matti Aarnio. * - * Rewritten by Wietse to elimate fixed-size stack buffer, array index + * Rewritten by Wietse to eliminate fixed-size stack buffer, array index * multiplication and division, sprintf() and strcpy(), and lots of strlen() * calls. We could make it a little faster by using a fixed-size stack-based * buffer. diff --git a/postfix/src/tls/tls_server.c b/postfix/src/tls/tls_server.c index 5b549f34e..9cfa34a80 100644 --- a/postfix/src/tls/tls_server.c +++ b/postfix/src/tls/tls_server.c @@ -161,7 +161,7 @@ /* Application-specific. */ /* - * The session_id_context indentifies the service that created a session. + * The session_id_context identifies the service that created a session. * This information is used to distinguish between multiple TLS-based * servers running on the same server. We use the name of the mail system. */ diff --git a/postfix/src/tlsmgr/tlsmgr.c b/postfix/src/tlsmgr/tlsmgr.c index 3b9373393..28ca96128 100644 --- a/postfix/src/tlsmgr/tlsmgr.c +++ b/postfix/src/tlsmgr/tlsmgr.c @@ -503,7 +503,7 @@ static int tlsmgr_key(VSTRING *buffer, int timeout) return (TLS_MGR_STAT_ERR); } } - /* Return value overrites name buffer */ + /* Return value overwrites name buffer */ vstring_memcpy(buffer, (char *) key, sizeof(*key)); return (TLS_MGR_STAT_OK); } diff --git a/postfix/src/tlsproxy/tlsproxy.c b/postfix/src/tlsproxy/tlsproxy.c index a2a01b77c..836177629 100644 --- a/postfix/src/tlsproxy/tlsproxy.c +++ b/postfix/src/tlsproxy/tlsproxy.c @@ -298,6 +298,11 @@ /* .IP "\fBtlsproxy_enforce_tls ($smtpd_enforce_tls)\fR" /* Mandatory TLS: announce STARTTLS support to remote SMTP clients, and /* require that clients use TLS encryption. +/* .IP "\fBtlsproxy_client_use_tls ($smtp_use_tls)\fR" +/* Opportunistic mode: use TLS when a remote server announces TLS +/* support. +/* .IP "\fBtlsproxy_client_enforce_tls ($smtp_enforce_tls)\fR" +/* Enforcement mode: require that SMTP servers use TLS encryption. /* RESOURCE CONTROLS /* .ad /* .fi @@ -923,7 +928,7 @@ static void tlsp_strategy(TLSP_STATE *state) * block. In practice, postscreen(8) limits the number of client * commands, and thus postscreen(8)'s output will fit in a kernel buffer. * A remote SMTP server is not supposed to flood the local SMTP client - * with massive replies; it it does, then the local SMTP client should + * with massive replies; if it does, then the local SMTP client should * deal with it. */ if (NBBIO_WRITE_PEND(plaintext_buf) > 0) { @@ -971,7 +976,7 @@ static void tlsp_ciphertext_event(int event, void *context) TLSP_STATE *state = (TLSP_STATE *) context; /* - * Without a TLS quivalent of the NBBIO layer, we must decode the events + * Without a TLS equivalent of the NBBIO layer, we must decode the events * ourselves and do the ciphertext I/O. Then, we can decide if we want to * read or write more ciphertext. */ diff --git a/postfix/src/trivial-rewrite/resolve.c b/postfix/src/trivial-rewrite/resolve.c index 4e9ea2a4d..40e6aa570 100644 --- a/postfix/src/trivial-rewrite/resolve.c +++ b/postfix/src/trivial-rewrite/resolve.c @@ -222,7 +222,7 @@ static void resolve_addr(RES_CONTEXT *rp, char *sender, char *addr, * This suggests that we parse the address in internalized (unquoted) form. * Unfortunately, if we do that, the unparser generates incorrect white * space between adjacent non-operator tokens. Example: ``first last'' - * needs white space, but ``stuff[stuff]'' does not. This is is not a + * needs white space, but ``stuff[stuff]'' does not. This is not a * problem when unparsing the result from parsing externalized forms, * because the parser/unparser were designed for valid externalized forms * where ``stuff[stuff]'' does not happen. diff --git a/postfix/src/trivial-rewrite/transport.c b/postfix/src/trivial-rewrite/transport.c index cd62d6720..90a2c4f91 100644 --- a/postfix/src/trivial-rewrite/transport.c +++ b/postfix/src/trivial-rewrite/transport.c @@ -31,7 +31,7 @@ /* before calling transport_lookup(). /* /* transport_post_init() can be invoked after entering the chroot -/* jail, and must be called before before calling transport_lookup(). +/* jail, and must be called before calling transport_lookup(). /* /* transport_lookup() finds the channel and nexthop for the given /* domain, and returns 1 if something was found. Otherwise, 0 diff --git a/postfix/src/trivial-rewrite/trivial-rewrite.c b/postfix/src/trivial-rewrite/trivial-rewrite.c index d57065456..675af80f8 100644 --- a/postfix/src/trivial-rewrite/trivial-rewrite.c +++ b/postfix/src/trivial-rewrite/trivial-rewrite.c @@ -48,7 +48,7 @@ /* .ad /* .fi /* The \fBtrivial-rewrite\fR(8) servers run under control by -/* the Postfix master +/* the Postfix master(8) /* server. Each server can handle multiple simultaneous connections. /* When all servers are busy while a client connects, the master /* creates a new server process, provided that the trivial-rewrite @@ -521,7 +521,7 @@ static void pre_accept(char *unused_name, char **unused_argv) #endif -/* post_accept - anounce our protocol name */ +/* post_accept - announce our protocol name */ static void post_accept(VSTREAM *stream, char *unused_name, char **unused_argv, HTABLE *unused_attr) diff --git a/postfix/src/util/argv.c b/postfix/src/util/argv.c index d6a4ef3eb..a364e2439 100644 --- a/postfix/src/util/argv.c +++ b/postfix/src/util/argv.c @@ -80,7 +80,7 @@ /* /* argv_terminate() null-terminates its string array argument. /* -/* argv_truncate() trucates its argument to the specified +/* argv_truncate() truncates its argument to the specified /* number of entries, but does not reallocate memory. The /* result is null-terminated. /* diff --git a/postfix/src/util/dict_cache.c b/postfix/src/util/dict_cache.c index d3bd10317..ae58e5d4c 100644 --- a/postfix/src/util/dict_cache.c +++ b/postfix/src/util/dict_cache.c @@ -139,7 +139,7 @@ /* behind" strategy does not interfere with database access, /* allow dict_cache_sequence() to run to completion. /* .IP table -/* A bare dictonary handle. +/* A bare dictionary handle. /* DIAGNOSTICS /* When a request is satisfied, the lookup routine returns /* non-null, and the update, delete and sequence routines diff --git a/postfix/src/util/dict_cdb.c b/postfix/src/util/dict_cdb.c index 85e49a4ca..a9133cc35 100644 --- a/postfix/src/util/dict_cdb.c +++ b/postfix/src/util/dict_cdb.c @@ -387,7 +387,7 @@ static DICT *dict_cdbm_open(const char *path, int dict_flags) if (st0.st_ino == st1.st_ino && st0.st_dev == st1.st_dev && st0.st_rdev == st1.st_rdev && st0.st_nlink == st1.st_nlink && st0.st_nlink > 0) - break; /* successefully opened */ + break; /* successfully opened */ close(fd); diff --git a/postfix/src/util/dict_db.c b/postfix/src/util/dict_db.c index 706d397a0..9cd1128ee 100644 --- a/postfix/src/util/dict_db.c +++ b/postfix/src/util/dict_db.c @@ -687,7 +687,8 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags, if (dbenv) dbenv->close(dbenv, 0); \ if (lock_fd >= 0) (void) close(lock_fd); \ if (db_base_buf) vstring_free(db_base_buf); \ - if (db_path) myfree(db_path); return (_dict); \ + if (db_path) myfree(db_path); \ + return (_dict); \ } while (0) #endif diff --git a/postfix/src/util/dict_file.c b/postfix/src/util/dict_file.c index eb86b3522..c6ea74c9a 100644 --- a/postfix/src/util/dict_file.c +++ b/postfix/src/util/dict_file.c @@ -45,7 +45,7 @@ /* memory that are associated with this DICT. /* /* dict_file_get_error() should be called only after error; -/* it returns a desciption of the problem. Storage is owned +/* it returns a description of the problem. Storage is owned /* by the caller. /* /* dict_file_lookup() wraps the dictionary lookup method and diff --git a/postfix/src/util/dict_random.c b/postfix/src/util/dict_random.c index 5fab96589..36f79b355 100644 --- a/postfix/src/util/dict_random.c +++ b/postfix/src/util/dict_random.c @@ -154,7 +154,7 @@ DICT *dict_random_open(const char *name, int open_flags, int dict_flags) dict_random->dict.owner.uid = 0; /* - * Split the name name into its constituent parts. + * Split the table name into its constituent parts. */ if ((len = balpar(name, CHARS_BRACE)) == 0 || name[len] != 0 || *(saved_name = mystrndup(name + 1, len - 2)) == 0 diff --git a/postfix/src/util/dict_random.h b/postfix/src/util/dict_random.h index 4aa08b140..b143d11cc 100644 --- a/postfix/src/util/dict_random.h +++ b/postfix/src/util/dict_random.h @@ -5,7 +5,7 @@ /* NAME /* dict_random 3h /* SUMMARY -/* dictionary manager interface for ramdomized tables +/* dictionary manager interface for randomized tables /* SYNOPSIS /* #include /* DESCRIPTION diff --git a/postfix/src/util/dict_thash.c b/postfix/src/util/dict_thash.c index 5012fb9e2..69eb17b6f 100644 --- a/postfix/src/util/dict_thash.c +++ b/postfix/src/util/dict_thash.c @@ -202,7 +202,7 @@ DICT *dict_thash_open(const char *path, int open_flags, int dict_flags) * Store the value under the key. Handle duplicates * appropriately. XXX Move this into dict_ht, but 1) that map * ignores duplicates by default and we would have to check that - * we won't break existing code that depends on such benavior; 2) + * we won't break existing code that depends on such behavior; 2) * by inlining the checks here we can degrade gracefully instead * of terminating with a fatal error. See comment in * dict_inline.c. diff --git a/postfix/src/util/dict_thash.ref b/postfix/src/util/dict_thash.ref index efdc20799..26ca0dd9a 100644 --- a/postfix/src/util/dict_thash.ref +++ b/postfix/src/util/dict_thash.ref @@ -2,5 +2,5 @@ postmap: warning: dict_thash.in, line 1: unbalanced '"' in '"the answer is 42' - postmap: warning: dict_thash.in, line 2: record is in "key: value" format; is this an alias file? postmap: warning: dict_thash.in, line 3: expected format: key whitespace value -- ignoring this line postmap: warning: dict_thash.in, line 5: duplicate entry: "aaa" -aaa bbb xxx: yyy +aaa bbb diff --git a/postfix/src/util/dup2_pass_on_exec.c b/postfix/src/util/dup2_pass_on_exec.c index df0e21cd3..5286e5bca 100644 --- a/postfix/src/util/dup2_pass_on_exec.c +++ b/postfix/src/util/dup2_pass_on_exec.c @@ -2,7 +2,7 @@ /* NAME /* dup2_pass_on_exec 1 /* SUMMARY -/* dup2 close-on-exec behaviour test program +/* dup2 close-on-exec behavior test program /* SYNOPSIS /* dup2_pass_on_exec /* DESCRIPTION diff --git a/postfix/src/util/edit_file.c b/postfix/src/util/edit_file.c index a7c1059cc..9d76b9314 100644 --- a/postfix/src/util/edit_file.c +++ b/postfix/src/util/edit_file.c @@ -262,7 +262,7 @@ EDIT_FILE *edit_file_open(const char *path, int flags, mode_t mode) * content and its temporary pathname (within the rules of the * cooperative protocol). But wait, there is more. * - * There are many opportunies for trouble when opening a pre-existing + * There are many opportunities for trouble when opening a pre-existing * output file. Here are just a few. * * - Victor observes that a system crash in the middle of the @@ -315,7 +315,7 @@ void edit_file_cleanup(EDIT_FILE *ep) EDIT_FILE_FREE(ep); } -/* edit_file_close - rename the file into place and and close the file */ +/* edit_file_close - rename the file into place and close the file */ int edit_file_close(EDIT_FILE *ep) { diff --git a/postfix/src/util/extpar.c b/postfix/src/util/extpar.c index 13e22c8d3..0b106bac8 100644 --- a/postfix/src/util/extpar.c +++ b/postfix/src/util/extpar.c @@ -25,8 +25,8 @@ /* EXTPAR_FLAG_NONE, or the bitwise OR of one or more flags: /* .RS /* .IP EXTPAR_FLAG_EXTRACT -/* This flag is intended to instruct expar() callers that -/* expar() should be invoked. It has no effect on expar() +/* This flag is intended to instruct extpar() callers that +/* extpar() should be invoked. It has no effect on expar() /* itself. /* .IP EXTPAR_FLAG_STRIP /* Skip whitespace after the opening parenthesis, and trim diff --git a/postfix/src/util/gccw.c b/postfix/src/util/gccw.c index d3421fe59..d3fd9852e 100644 --- a/postfix/src/util/gccw.c +++ b/postfix/src/util/gccw.c @@ -1,5 +1,5 @@ /* - * This is is a regression test for all the things that gcc is meant to warn + * This is a regression test for all the things that gcc is meant to warn * about. * * gcc version 3 breaks several tests: diff --git a/postfix/src/util/htable.c b/postfix/src/util/htable.c index 48838e5a6..addb51146 100644 --- a/postfix/src/util/htable.c +++ b/postfix/src/util/htable.c @@ -58,6 +58,12 @@ /* values to be remembered are not character pointers, proper casts /* should be used or the code will not be portable. /* +/* To thwart collision attacks, the hash function is seeded +/* once from /dev/urandom, and if that is unavailable, from +/* wallclock-time and monotonic system clocks. To disable +/* seeding for tests, specify NORANDOMIZE in the environment +/* (the value does not matter). +/* /* htable_create() creates a table of the specified size and returns a /* pointer to the result. The lookup keys are saved with mystrdup(). /* htable_enter() stores a (key, value) pair into the specified table @@ -119,6 +125,11 @@ #include #include +#include +#include +#include +#include +#include /* Local stuff */ @@ -126,23 +137,111 @@ #include "msg.h" #include "htable.h" + /* + * Fall back to a mix of absolute and time-since-boot information in the + * rare case that /dev/urandom is unavailable. + */ +#ifdef CLOCK_UPTIME +#define NON_WALLTIME_CLOCK CLOCK_UPTIME +#elif defined(CLOCK_BOOTTIME) +#define NON_WALLTIME_CLOCK CLOCK_BOOTTIME +#elif defined(CLOCK_MONOTONIC) +#define NON_WALLTIME_CLOCK CLOCK_MONOTONIC +#elif defined(CLOCK_HIGHRES) +#define NON_WALLTIME_CLOCK CLOCK_HIGHRES +#endif + +/* htable_seed - randomize the hash function */ + +static size_t htable_seed(void) +{ + uint32_t result = 0; + + /* + * Medium-quality seed, for defenses against local and remote attacks. + */ + int fd; + int count; + + if ((fd = open("/dev/urandom", O_RDONLY)) > 0) { + count = read(fd, &result, sizeof(result)); + (void) close(fd); + if (count == sizeof(result)) + return (result); + } + + /* + * Low-quality seed, for defenses against remote attacks. Based on 1) the + * time since boot (good when an attacker knows the program start time + * but not the system boot time), and 2) absolute time (good when an + * attacker does not know the program start time). Assumes a system with + * better than microsecond resolution, and a network stack that does not + * leak the time since boot, for example, through TCP or ICMP timestamps. + * With those caveats, this seed is good for 20-30 bits of randomness. + */ +#ifdef NON_WALLTIME_CLOCK + { + struct timespec ts; + + if (clock_gettime(NON_WALLTIME_CLOCK, &ts) != 0) + msg_fatal("clock_gettime() failed: %m"); + result += (size_t) ts.tv_sec ^ (size_t) ts.tv_nsec; + } +#elif defined(USE_GETHRTIME) + result += gethrtime(); +#endif + +#ifdef CLOCK_REALTIME + { + struct timespec ts; + + if (clock_gettime(CLOCK_REALTIME, &ts) != 0) + msg_fatal("clock_gettime() failed: %m"); + result += (size_t) ts.tv_sec ^ (size_t) ts.tv_nsec; + } +#else + { + struct timeval tv; + + if (GETTIMEOFDAY(&tv) != 0) + msg_fatal("gettimeofday() failed: %m"); + result += (size_t) tv.tv_sec + (size_t) tv.tv_usec; + } +#endif + return (result + getpid()); +} + /* htable_hash - hash a string */ static size_t htable_hash(const char *s, size_t size) { - size_t h = 0; + static size_t seed = 0; + static int randomize = 1; + size_t h; size_t g; /* - * From the "Dragon" book by Aho, Sethi and Ullman. + * Initialize. */ + if (seed == 0 && randomize) { + if (getenv("NORANDOMIZE")) + randomize = 0; + else + seed = htable_seed(); +#if 0 + if (msg_verbose) + msg_info("htable_hash: seed=0x%lx", (long) seed); +#endif + } + /* + * Inspired the "Dragon" book by Aho, Sethi and Ullman. Updated to use a + * seed, and to maintain 32+ bit state. + */ + h = seed; while (*s) { - h = (h << 4U) + *(unsigned const char *) s++; - if ((g = (h & 0xf0000000)) != 0) { - h ^= (g >> 24U); - h ^= g; - } + g = h & 0xf0000000; + h = ((h << 4U) | (g >> 28U)) + *(unsigned const char *) s++; } return (h % size); } @@ -392,6 +491,7 @@ int main(int unused_argc, char **unused_argv) /* * Load a large number of strings and delete them in a random order. */ + msg_verbose = 1; hash = htable_create(10); while (vstring_get(buf, VSTREAM_IN) != VSTREAM_EOF) htable_enter(hash, vstring_str(buf), CAST_INT_TO_VOID_PTR(count++)); diff --git a/postfix/src/util/load_lib.c b/postfix/src/util/load_lib.c index 013c95254..44e540d64 100644 --- a/postfix/src/util/load_lib.c +++ b/postfix/src/util/load_lib.c @@ -19,9 +19,9 @@ /* .IP libname /* shared-library pathname. /* .IP libfuncs -/* Array of LIB_FN strucures. The last name member must be null. +/* Array of LIB_FN structures. The last name member must be null. /* .IP libdata -/* Array of LIB_DP strucures. The last name member must be null. +/* Array of LIB_DP structures. The last name member must be null. /* SEE ALSO /* msg(3) diagnostics interface /* DIAGNOSTICS diff --git a/postfix/src/util/mac_expand.c b/postfix/src/util/mac_expand.c index 8817e9102..f40819eb5 100644 --- a/postfix/src/util/mac_expand.c +++ b/postfix/src/util/mac_expand.c @@ -42,29 +42,29 @@ /* /* The following substitutions are supported: /* .IP "$name, ${name}" -/* Unconditional attribute-based substition. The result is the +/* Unconditional attribute-based substitution. The result is the /* named attribute value (empty if the attribute is not defined) /* after optional further named attribute substitution. /* .IP "${name?text}, ${name?{text}}" -/* Conditional attribute-based substition. If the named attribute +/* Conditional attribute-based substitution. If the named attribute /* value is non-empty, the result is the given text, after /* named attribute expansion and relational expression evaluation. /* Otherwise, the result is empty. Whitespace before or after /* {text} is ignored. /* .IP "${name:text}, ${name:{text}}" -/* Conditional attribute-based substition. If the attribute +/* Conditional attribute-based substitution. If the attribute /* value is empty or undefined, the expansion is the given /* text, after named attribute expansion and relational expression /* evaluation. Otherwise, the result is empty. Whitespace /* before or after {text} is ignored. /* .IP "${name?{text1}:{text2}}, ${name?{text1}:text2}" -/* Conditional attribute-based substition. If the named attribute +/* Conditional attribute-based substitution. If the named attribute /* value is non-empty, the result is text1. Otherwise, the /* result is text2. In both cases the result is subject to /* named attribute expansion and relational expression evaluation. /* Whitespace before or after {text1} or {text2} is ignored. /* .IP "${{text1} == ${text2} ? {text3} : {text4}}" -/* Relational expression-based substition. First, the content +/* Relational expression-based substitution. First, the content /* of {text1} and ${text2} is subjected to named attribute and /* relational expression-based substitution. Next, the relational /* expression is evaluated. If it evaluates to "true", the @@ -620,7 +620,7 @@ static int mac_expand_callback(int type, VSTRING *buf, void *ptr) /* * Look up the named parameter. Todo: allow the lookup function - * to specify if the result is safe for $name expanson. + * to specify if the result is safe for $name expansion. */ lookup = mc->lookup(start, lookup_mode, mc->context); } diff --git a/postfix/src/util/mac_expand.h b/postfix/src/util/mac_expand.h index 4a2398218..fbe634793 100644 --- a/postfix/src/util/mac_expand.h +++ b/postfix/src/util/mac_expand.h @@ -38,7 +38,7 @@ #define MAC_EXP_OP_TOK_GT 6 /* > */ /* - * Relational operator results. An enum to discourage asuming that 0 is + * Relational operator results. An enum to discourage assuming that 0 is * false, !0 is true. */ typedef enum MAC_EXP_OP_RES { diff --git a/postfix/src/util/myaddrinfo.c b/postfix/src/util/myaddrinfo.c index a80eb2f79..5edafde8d 100644 --- a/postfix/src/util/myaddrinfo.c +++ b/postfix/src/util/myaddrinfo.c @@ -762,7 +762,7 @@ void freeaddrinfo(struct addrinfo * ai) struct addrinfo *next; /* - * Artefact of implementation: tolerate a null pointer argument. + * Artifact of implementation: tolerate a null pointer argument. */ for (ap = ai; ap != 0; ap = next) { next = ap->ai_next; diff --git a/postfix/src/util/name_mask.c b/postfix/src/util/name_mask.c index 92e956fa2..284d4fa9d 100644 --- a/postfix/src/util/name_mask.c +++ b/postfix/src/util/name_mask.c @@ -72,7 +72,7 @@ /* comma and/or whitespace characters. The "long_" version returns /* a "long int" bitmask, rather than an "int" bitmask. /* -/* str_name_mask() translates a mask into its equlvalent names. +/* str_name_mask() translates a mask into its equivalent names. /* The result is written to a static buffer that is overwritten /* upon each call. The "long_" version converts a "long int" /* bitmask, rather than an "int" bitmask. diff --git a/postfix/src/util/sane_link.c b/postfix/src/util/sane_link.c index de83564cd..40fd56d3b 100644 --- a/postfix/src/util/sane_link.c +++ b/postfix/src/util/sane_link.c @@ -52,7 +52,7 @@ int sane_link(const char *from, const char *to) return (0); /* - * Woops. Save errno, and see if the error is an NFS artefact. If it is, + * Woops. Save errno, and see if the error is an NFS artifact. If it is, * pretend the error never happened. */ saved_errno = errno; diff --git a/postfix/src/util/sane_rename.c b/postfix/src/util/sane_rename.c index 4c551605a..3b301bda6 100644 --- a/postfix/src/util/sane_rename.c +++ b/postfix/src/util/sane_rename.c @@ -51,7 +51,7 @@ int sane_rename(const char *from, const char *to) return (0); /* - * Woops. Save errno, and see if the error is an NFS artefact. If it is, + * Woops. Save errno, and see if the error is an NFS artifact. If it is, * pretend the error never happened. */ saved_errno = errno; diff --git a/postfix/src/util/unix_dgram_connect.c b/postfix/src/util/unix_dgram_connect.c index 83a035e76..3df8963a9 100644 --- a/postfix/src/util/unix_dgram_connect.c +++ b/postfix/src/util/unix_dgram_connect.c @@ -19,7 +19,7 @@ /* .IP block_mode /* Either NON_BLOCKING for a non-blocking socket, or BLOCKING for /* blocking mode. -/* DIAGNOSIICS +/* DIAGNOSTICS /* Fatal errors: path too large, can't create socket. /* /* Other errors result in a -1 result value, with errno indicating diff --git a/postfix/src/util/unix_dgram_listen.c b/postfix/src/util/unix_dgram_listen.c index 3dc677b1e..e73ad4e4e 100644 --- a/postfix/src/util/unix_dgram_listen.c +++ b/postfix/src/util/unix_dgram_listen.c @@ -19,7 +19,7 @@ /* .IP backlog /* Either NON_BLOCKING for a non-blocking socket, or BLOCKING for /* blocking mode. -/* DIAGNOSIICS +/* DIAGNOSTICS /* Fatal errors: path too large, can't create socket. /* LICENSE /* .ad diff --git a/postfix/src/util/unix_pass_fd_fix.c b/postfix/src/util/unix_pass_fd_fix.c index d59f08982..9522e6151 100644 --- a/postfix/src/util/unix_pass_fd_fix.c +++ b/postfix/src/util/unix_pass_fd_fix.c @@ -13,7 +13,7 @@ /* for sending or receiving file descriptors over UNIX-domain /* sockets. /* -/* set_unix_pass_fd_fix() takes a list of workarouds in external +/* set_unix_pass_fd_fix() takes a list of workarounds in external /* form, and stores their internal representation. The result /* is used by unix_send_fd() and unix_recv_fd(). /* diff --git a/postfix/src/util/vstring.c b/postfix/src/util/vstring.c index 941d476a9..43897eb82 100644 --- a/postfix/src/util/vstring.c +++ b/postfix/src/util/vstring.c @@ -142,7 +142,7 @@ /* Specifies a hard upper limit on a string's length. When the /* length would be exceeded, the program simulates a memory /* allocation problem (i.e. it terminates through msg_fatal()). -/* This fuctionality is currently unimplemented. +/* This functionality is currently unimplemented. /* .IP "CA_VSTRING_CTL_EXACT (no argument)" /* Allocate the requested amounts, instead of rounding up. /* This should be used for tests only. diff --git a/postfix/src/virtual/virtual.c b/postfix/src/virtual/virtual.c index 9665b5597..6fa9f1e67 100644 --- a/postfix/src/virtual/virtual.c +++ b/postfix/src/virtual/virtual.c @@ -130,7 +130,7 @@ /* RFC 822 (ARPA Internet Text Messages) /* DIAGNOSTICS /* Mail bounces when the recipient has no mailbox or when the -/* recipient is over disk quota. In all other cases, mail for +/* recipient is over disk quota. In all other problem cases, mail for /* an existing recipient is deferred and a warning is logged. /* /* Problems and transactions are logged to \fBsyslogd\fR(8) @@ -179,7 +179,7 @@ /* .PP /* Available in Postfix version 2.0 and later: /* .IP "\fBvirtual_mailbox_domains ($virtual_mailbox_maps)\fR" -/* Postfix is final destination for the specified list of domains; +/* Postfix is the final destination for the specified list of domains; /* mail is delivered via the $virtual_transport mail delivery transport. /* .IP "\fBvirtual_transport (virtual)\fR" /* The default mail delivery transport and next-hop destination for diff --git a/postfix/src/xsasl/xsasl_dovecot_server.c b/postfix/src/xsasl/xsasl_dovecot_server.c index 601f7874b..1d1c57063 100644 --- a/postfix/src/xsasl/xsasl_dovecot_server.c +++ b/postfix/src/xsasl/xsasl_dovecot_server.c @@ -89,7 +89,7 @@ #define AUTH_PROTOCOL_MINOR_VERSION 0 /* - * Encorce read/write time limits, so that we can produce accurate + * Enforce read/write time limits, so that we can produce accurate * diagnostics instead of getting killed by the watchdog timer. */ #define AUTH_TIMEOUT 10 @@ -278,7 +278,8 @@ static int xsasl_dovecot_server_connect(XSASL_DOVECOT_SERVER_IMPL *xp) fd = unix_connect(path, BLOCKING, AUTH_TIMEOUT); } if (fd < 0) { - msg_warn("SASL: Connect to %s failed: %m", xp->socket_path); + msg_warn("SASL: Connect to Dovecot auth socket '%s' failed: %m", + xp->socket_path); return (-1); } sasl_stream = vstream_fdopen(fd, O_RDWR);