diff options
| author | itojun <itojun@NetBSD.org> | 2002-06-08 22:36:08 +0000 |
|---|---|---|
| committer | itojun <itojun@NetBSD.org> | 2002-06-08 22:36:08 +0000 |
| commit | d7d544aee7fc21eafced81772b3349d3e444503f (patch) | |
| tree | c47d7b850b858e54032f62c253776697fb337d0f /gnu | |
| parent | 8999a8b38670c7f9b1205ed8d4b1863cb8376a73 (diff) | |
postfix 1.1.11
check following for list of changes:
ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-1.1.11.RELEASE_NOTES
Diffstat (limited to 'gnu')
98 files changed, 1155 insertions, 420 deletions
diff --git a/gnu/dist/postfix/COPYRIGHT b/gnu/dist/postfix/COPYRIGHT new file mode 100644 index 00000000000..beb9c97d96f --- /dev/null +++ b/gnu/dist/postfix/COPYRIGHT @@ -0,0 +1,35 @@ +Included for the use of the fix_strcasecmp.c module which works +around a Solaris problem. + +/* + * Copyright (c) 1987, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ diff --git a/gnu/dist/postfix/HISTORY b/gnu/dist/postfix/HISTORY index 14e3ce8cf6d..a6791ab3616 100644 --- a/gnu/dist/postfix/HISTORY +++ b/gnu/dist/postfix/HISTORY @@ -6052,8 +6052,289 @@ Apologies for any names omitted. and /usr/sbin/sendmail differ, and will propose to replace one by a symlink to the other. File: conf/postfix-script. +20020204 + + Sanity: additional permission checks for "postfix check" + that warn for setgid_group group ownership mismatches. by + Matthias Andree, uni-dortmund.de. File: conf/postfix-script. + + Bugfix: "postfix check" used a too simplistic way to + recognize file ownership (grepping ls output). It now uses + the recently discovered "find -prune". Peter Bieringer, + Matthias Andree. File: conf/postfix-script. + +20020218 + + Workaround: log a warning and disconnect when an SMTP client + ignores our negative replies and starts sending message + content without permission. File: smtpd/smtpd.c. + +20020220 + + Bugfix: mismatch in the file being locked by dict_dbm and + the file being locked by postmap, so that locks did not + work correctly. Victor Duchovni, Morgan Stanley. + +20020222 + + Workaround: Solaris bug 4380626: strcasecmp() and strncasecmp() + produce incorrect results with 8-bit characters. For example, + non-ASCII characters could compare equal to ASCII characters, + and that could result in any number of security problems. + Files: util/strcasecmp.c, COPYRIGHT (the BSD license). + + Bugfix: off-by-one error, causing a null byte to be written + outside dynamically allocated memory in the queue manager + with addresses of exactly 100 bytes long, resulting in + SIGSEGV on systems with an "exact fit" malloc routine. + Experienced by Ralf Hildebrandt; diagnosed by Victor + Duchovny. Files: *qmgr/qmgr_message.c. This is not a + security problem. + + Bugfix: make all recipient comparisons transitive, because + Solaris qsort() causes SIGSEGV errors otherwise. Victor + Duchovny, Morgan Stanley. File: *qmgr/qmgr_message.c. + +20020302 + + Bugfix: don't strip source route (@domain...:) when the + result would be an empty address. This avoids problems when + append_at_myorigin is set to "no" (which is not supported). + Problem reported by Charles McColgan, Big Fish Communications. + File: trivial-rewrite/rewrite.c. + +20020304 + + Cleanup: postqueue should not not complain when output + fails with "broken pipe". + +20020308 + + Bugfix? reply with 550 not 552 when content is rejected. + 552 is reserved for "too much mail". + + Documentation: add note to sendmail manual page that running + "sendmail -bs" as $mail_owner enables SMTP server UCE and + access control checks. This is meant for use from inetd etc. + Matthias Andree. + +20020311 + + Bugfix: DBM maps should use different files for locking + and for change detection. Problem reported by Victor + Duchovny, Morgan Stanley. Files: util/dict.h util/dict.c + util/dict_db.c util/dict_dbm.c global/mkmap.c local/alias.c. + +20020313 + + Bugfix: mailq could show addresses with unusual characters + twice. Problem reported by Victor Duchovny, Morgan Stanley. + File: showq/showq.c. + + Bugfix: null recipients weren't properly recorded in + bounce/defer logfiles. Such recipient addresses are not + accepted in SMTP mail, but they could appear within locally + submitted mail. File: bounce/bounce_append_service.c. + +20020318 + + Workaround: Berkeley DB can't handle null key lookups, + which happen with HELO names ending in ".". Victor Duchovni, + Morgan Stanley. File: smtpd/smtpd_check.c. + + Logging: log a hint when mail is deferred because the + soft_bounce parameter is set. People sometimes forget to + turn it off. File: global/bounce.c. + +20020319 + + Cleanup: add a msg_warn() call when fork() fails in + pipe_command(), to make problems easier to investigate. + Chris Wedgwood. File: global/pipe_command.c. + +20020324 + + Cleanup: more graceful handling of long physical message + header lines upon input. Physical header lines can now + extend up to $header_size_limit characters. When a logical + message header is too long, the excess text is discarded + and Postfix no longer switches to body mode, to avoid + breaking MIME encapsulation. Based on code by Victor + Duchovni, Morgan Stanley. Files: cleanup/cleanup_out.c, + cleanup/cleanup_message.c. + + Cleanup: more graceful handling of long physical message + header or body lines upon output by the SMTP client. The + SMTP client output line length is controlled by a new + parameter smtp_line_length_limit (default: 990; specify 0 + to disable the limit). Long lines are folded by inserting + <CR> <LF> <SPACE>, to avoid breaking MIME encapsulation. + Based on code by Victor Duchovni, Morgan Stanley. File: + smtp/smtp_proto.c. + +20020325 + + Cleanup: allow additional text after a WARN command in a + header/body_checks pattern file, so that one can change + REJECT+text into WARN+text and vice versa. Based on code + by Fredrik Thulin, Stockholm University. + + Cleanup: log a warning when an unknown command is found in + a header/body_checks pattern file, or when additional text + is found after a command that does not expect additional + text. Based on code by Fredrik Thulin, Stockholm University. + + Bugfix: sendmail should not recognize "." as the end of + input when the current read operation started in the middle + of a line. Victor Duchovni, Morgan Stanley. File: + sendmail/sendmail.c. + +20020328 + + Portability fix for OPENSTEP and NEXTSTEP by Gerben Wierda. + File: util/sys_defs.h. + +20020329 + + Bugfix: defer_transports broke because the flush server + triggered mail delivery (as if ETRN was sent) while doing + some internal housekeeping of per-destination logfiles. + Problem experienced by LaMont Jones, HP. File: flush/flush.c. + + Bugfix: virtual mapping broke for addresses with embedded + whitespace. Fix by Victor Duchovni, Morgan Stanley. File: + cleanup/cleanup_map1n.c. + +20020330 + + Bugfix: postqueue did not pass on non-default configuration + directory settings when running showq while the mail system + is down. The super-user is now exempted from environment + stripping in postqueue/postqueue.c. Problem reported by + Victor Duchovni, Morgan Stanley. + +20020414 + + Portability: Postfix will no longer attempt to build with + gdbm support, because gdbm is broken. File: makedefs. + +20020417 + + Bugfix: the post-install script failed to upgrade master.cf + settings from private to public if the service was explicitly + configured as private. + +20020426 + + Bugfix: the SMTP client forgot to quote whitespace etc. + in a sender/recipient address when DNS lookup was turned + off (disable_dns_lookups = yes). Problem experienced by + Chip Paswater. Files: smtp/smtp_proto.c. + +20020503 + + Cleanup: postqueue silently ignored command-line arguments + following -p or -f options, instead of complaining; postqueue + produced an incorrect error message (mail system down) when + the command was installed with incorrect privileges. File: + postqueue/postqueue.c. + + Bugfix: while reporting a domain name or IP address syntax + error, postqueue could dereference a dangling pointer with + some getopt() implementations. LaMont Jones, HP. File: + postqueue/postqueue.c. + +20020504 + + Portability: run-time test to avoid GDBM trouble. File: + util/dict_dbm.c. + +20020508 + + Bugfix: close user@domain@postfix-style.virtual.domain + source routing relaying loophole involving postfix-style + virtual domains with @virtual.domain catch-all patterns. + Problem reported by Victor Duchovny. File: smtpd/smtpd_check.c. + + Bugfix: mail_addr_map() used the "wrong" @ character in + addresses with multiple @. Victor Duchovny. File: + global/mail_addr_map.c. + + Bugfix: for address localpart quoting, now quote @ as a + special character everywhere, except when resolving addresses. + Previously, the @ was nowhere quoted as a special character, + not even in SMTP commands. Files: global/quote_82[12]_local.c + and some clients. + +20020509 + + Safety: don't allow an OK access rule lookup result for + user@domain@postfix-style.virtual.domain. Suggested by + Victor Duchovny, Morgan Stanley. File: smtpd/smtpd_check.c. + + Bugfix: quote unquoted address localparts that need quoting. + Files: global/tok822_parse.c, global/quote_82[12]_local.c. + +20020512 + + Cleanup: the SMTP client logged and bounced the CNAME + expanded recipient address, and thereby complicated trouble + shooting. File: src/smtp_proto.c. + + Bugfix: the SMTP and LMTP clients bounced the quoted + recipient address, resulting in too much quoting in bounce + reports. Files: src/smtp_proto.c, lmtp/lmtp_proto.c. + +20020513 + + Bugfix: the LDAP client used the "wrong" @ character in + addresses with multiple @. LaMont Jones, HP. File: + util/dict_ldap.c. + + Compatibility: forwards "postqueue -r" compatibility with + the additional queue file records that are stored by snapshot + 20050512. + + Cleanup: specify "resolve_dequoted_address = no" to prevent + Postfix from looking inside quotes for extra @ etc. characters + when resolving an address. This behavior is technically + more correct, but it opens a mail relay loophole with "user + @domain"@domain when relaying mail to a Sendmail system. + +20020514 + + Bugfix: the new code for header address quoting sometimes + did not null terminate strings so that arbitrary garbage + could appear at the end of message headers. Reported by + Ralf Hildebrandt. File: global/tok822_parse.c. + + Safety: user@domain@domain is no longer accepted by the + permit_mx_backup uce restriction (unless Postfix is configured + with "resolve_dequoted_address = no"). Victor Duchovny, + Morgan Stanley. File: smtpd/smtpd_check.c. + +20020517 + + Cleanup: Mailbox-Line: message header labels should be + X-Mailbox-Line: labels. Files: smtpd/smtpd.c, qmqpd/qmqpd.c. + +20020526 + + Bugfix: the SMTP server now disallows RCPT TO:<"">, just + like it disallows RCPT TO:<>. File: smtpd/smtpd.c. + + Documentation: replace domain.name by domain.tld in the + example config files. The domain exists. They were getting + mail from poorly configured Postfix boxes. + + Bugfix: The Postfix sendmail command did not export the + MAIL_CONFIG environment setting to the postdrop command. + File: global/mail_config.h. + Open problems: + Low: sendmail does not store null command-line recipients. + Low: don't do user@domain and @domain lookups in local_recipient_maps queries. diff --git a/gnu/dist/postfix/INSTALL b/gnu/dist/postfix/INSTALL index 117cd6d6ec8..cd6d229a913 100644 --- a/gnu/dist/postfix/INSTALL +++ b/gnu/dist/postfix/INSTALL @@ -222,6 +222,11 @@ In order to install or upgrade Postfix: NB: this group was optional with older Postfix releases; it is now required. +- Optional: If you want to install symbol-stripped (non-debug) versions + of the Postfix programs and daemons, do: + + % strip bin/* libexec/* + - Run one of the following commands as the super-user: # make install (interactive version, first time install) @@ -295,7 +300,7 @@ up virtual interfaces for a variety of UNIX versions. In the /etc/postfix/main.cf file, I would specify - myhostname = virtual.host.name + myhostname = virtual.host.tld inet_interfaces = $myhostname mydestination = $myhostname @@ -381,7 +386,7 @@ configuration language uses lazy evaluation, and does not look at a parameter value until it is needed at runtime. First of all, you must specify what domain will be appended to an -unqualified address (i.e. an address without @domain.name). The +unqualified address (i.e. an address without @domain.tld). The "myorigin" parameter defaults to the local hostname, but that is probably OK only for very small sites. diff --git a/gnu/dist/postfix/README_FILES/ETRN_README b/gnu/dist/postfix/README_FILES/ETRN_README index c7b18d31dae..0dc5d7c12d1 100644 --- a/gnu/dist/postfix/README_FILES/ETRN_README +++ b/gnu/dist/postfix/README_FILES/ETRN_README @@ -77,7 +77,7 @@ can take a while), you're ready to test the "fast ETRN" service. Telnet to the Postfix SMTP server from a client that is allowed to execute ETRN commands (by default, that's every client), and type: - helo my.client.name + helo my.client.tld etrn some.customer.domain where "some.customer.domain" is the name of a domain that has a @@ -99,7 +99,7 @@ Repeat the exercise with another domain that your server is willing to relay to (domain listed in "relay_domains"), but that has no mail queued. - helo my.client.name + helo my.client.tld etrn some.other.customer.domain This time, the "etrn" command should trigger NO mail deliveries at @@ -110,7 +110,7 @@ Finally, repeat the exercise with a destination that your mail server is not willing to relay to. It does not matter if your server has mail queued for that destination. - helo my.client.name + helo my.client.tld etrn not.a.customer.domain If your "fast ETRN" caching policy is left at its default setting, diff --git a/gnu/dist/postfix/README_FILES/FILTER_README b/gnu/dist/postfix/README_FILES/FILTER_README index a325aa7abdf..6394904cdbd 100644 --- a/gnu/dist/postfix/README_FILES/FILTER_README +++ b/gnu/dist/postfix/README_FILES/FILTER_README @@ -51,7 +51,7 @@ The /some/where/filter program can be a simple shell script like this: exit $? The idea is to first capture the message to file and then run the -content through run a third-party content filter program. If the +content through a third-party content filter program. If the mail cannot be captured to file, mail delivery is deferred by terminating with exit status 75 (EX_TEMPFAIL). If the content filter program finds a problem, the mail is bounced by terminating @@ -213,7 +213,7 @@ a dedicated listener on port localhost 10026: localhost:10026 inet n - n - 10 smtpd -o content_filter= -o local_recipient_maps= - -o myhostname=localhost.domain.name + -o myhostname=localhost.domain.tld This is just another SMTP server. It is configured NOT to request content filtering for incoming mail. The server has the same process diff --git a/gnu/dist/postfix/README_FILES/INSTALL b/gnu/dist/postfix/README_FILES/INSTALL index 117cd6d6ec8..cd6d229a913 100644 --- a/gnu/dist/postfix/README_FILES/INSTALL +++ b/gnu/dist/postfix/README_FILES/INSTALL @@ -222,6 +222,11 @@ In order to install or upgrade Postfix: NB: this group was optional with older Postfix releases; it is now required. +- Optional: If you want to install symbol-stripped (non-debug) versions + of the Postfix programs and daemons, do: + + % strip bin/* libexec/* + - Run one of the following commands as the super-user: # make install (interactive version, first time install) @@ -295,7 +300,7 @@ up virtual interfaces for a variety of UNIX versions. In the /etc/postfix/main.cf file, I would specify - myhostname = virtual.host.name + myhostname = virtual.host.tld inet_interfaces = $myhostname mydestination = $myhostname @@ -381,7 +386,7 @@ configuration language uses lazy evaluation, and does not look at a parameter value until it is needed at runtime. First of all, you must specify what domain will be appended to an -unqualified address (i.e. an address without @domain.name). The +unqualified address (i.e. an address without @domain.tld). The "myorigin" parameter defaults to the local hostname, but that is probably OK only for very small sites. diff --git a/gnu/dist/postfix/README_FILES/LMTP_README b/gnu/dist/postfix/README_FILES/LMTP_README index ca051466b77..06a6878eafc 100644 --- a/gnu/dist/postfix/README_FILES/LMTP_README +++ b/gnu/dist/postfix/README_FILES/LMTP_README @@ -265,8 +265,8 @@ to route mail for multiple domains to their respective mail retrieval /etc/postfix/transport: - domain1.name lmtp1:unix:/path/name - domain2.name lmtp2:lmtp2host + domain1.tld lmtp1:unix:/path/name + domain2.tld lmtp2:lmtp2host /etc/postfix/master.cf: @@ -466,8 +466,8 @@ Cyrus 1.6.24 LMTP server: /etc/postfix/transport: - domain1.name lmtp1:lmtp1host - domain2.name lmtp2:lmtp2host + domain1.tld lmtp1:lmtp1host + domain2.tld lmtp2:lmtp2host /etc/postfix/master.cf: diff --git a/gnu/dist/postfix/README_FILES/SASL_README b/gnu/dist/postfix/README_FILES/SASL_README index e334ca9fc0f..aeb6f66db70 100644 --- a/gnu/dist/postfix/README_FILES/SASL_README +++ b/gnu/dist/postfix/README_FILES/SASL_README @@ -144,9 +144,9 @@ Testing SASL authentication in the Postfix SMTP server To test the whole mess, connect to the SMTP server, and you should be able to have a conversation like this: - 220 server.host.name ESMTP Postfix - EHLO client.host.name - 250-server.host.name + 220 server.host.tld ESMTP Postfix + EHLO client.host.tld + 250-server.host.tld 250-PIPELINING 250-SIZE 10240000 250-ETRN diff --git a/gnu/dist/postfix/README_FILES/VIRTUAL_README b/gnu/dist/postfix/README_FILES/VIRTUAL_README index 0a648ab0861..821919026a9 100644 --- a/gnu/dist/postfix/README_FILES/VIRTUAL_README +++ b/gnu/dist/postfix/README_FILES/VIRTUAL_README @@ -270,11 +270,11 @@ domains): virtual_maps = hash:/etc/postfix/virtual /etc/postfix/virtual: - user@domain.name user@domain.name, user@autoreply.domain.name + user@domain.tld user@domain.tld, user@autoreply.domain.tld This delivers mail to the recipient, and sends a copy of the mail to the address that produces automatic replies. The address can be serviced on a different machine, or it can be serviced locally by setting up a transport map entry that pipes all mail for the -autoreply.domain.name into some script that sends an automatic +autoreply.domain.tld into some script that sends an automatic reply back to the sender. diff --git a/gnu/dist/postfix/RELEASE_NOTES b/gnu/dist/postfix/RELEASE_NOTES index 6b174f3191f..78a50af8936 100644 --- a/gnu/dist/postfix/RELEASE_NOTES +++ b/gnu/dist/postfix/RELEASE_NOTES @@ -12,6 +12,62 @@ snapshot release). Patches change the patchlevel and the release date. Snapshots change only the release date, unless they include the same bugfix as a patch release. +Incompatible changes with Postfix version 1.1.10 (released 20020514) +==================================================================== + +For safety reasons, the permit_mx_backup restriction no longer +accepts mail for user@domain@domain. To recover the old behavior, +specify "resolve_dequoted_address = no" which opens up a completely +different can of worms as described a few paragraphs down in this +document. + +Incompatible changes with Postfix version 1.1.9 (released 20020513) +=================================================================== + +The Postfix SMTP server by default no longer accepts mail for +user@domain@postfix-style.virtual.domain, to close a relaying +loophole with postfix-style virtual domains that have @domain.name +catch-all patterns. + +To allow such addresses, specify "resolve_dequoted_address = no" +in main.cf (quote the address localpart as per RFC 822, and don't +look for @ or % or ! characters inside the address localpart). +However, this opens opportunities for obscure mail relay attacks +when Postfix provides backup MX service for Sendmail systems. + +The appearance of user@domain1@domain2 addresses has changed. In +mail headers, such addresses are now properly quoted as +"user@domain1"@domain2. As a side effect, this quoted form is now +also expected on the left-hand side of virtual and canonical lookup +tables, but only by some of the Postfix components. For now, it +is better not to use user@domain1@domain2 address forms on the +left-hand side of lookup tables. + +Incompatible changes with Postfix version 1.1.6 (released 20020326) +=================================================================== + +The Postfix SMTP client now breaks message header or body lines +that are longer than $smtp_line_length_limit characters (default: +990). Earlier Postfix versions broke lines at $line_length_limit +characters (default: 2048). Postfix versions before 20010611 did +not break long lines at all. Reportedly, some mail servers refuse +to receive mail with lines that exceed the 1000 character limit +that is specified by the SMTP standard. + +The Postfix SMTP client now breaks long message header or body +lines by inserting <CR> <LF> <SPACE>. Earlier Postfix versions +broke long lines by inserting <CR> <LF> only. This broke MIME +encapsulation, causing MIME attachments to "disappear" with Postfix +versions after 20010611. + +Postfix now discards text when a logical message header exceeds +$header_size_limit characters (default: 102400). Earlier Postfix +versions would place excess text, and all following text, in the +message body. The same thing was done when a physical header line +exceeded $line_length_limit characters (default: 2048). Both +behaviors broke MIME encapsulation, causing MIME attachments to +"disappear" with all previous Postfix versions. + Incompatible changes with Postfix version 1.1.3 (released 20020201) =================================================================== @@ -20,7 +76,7 @@ lookup key for the null address, in order to work around bugs in some Berkeley DB implementations. This behavior is controlled with the smtpd_null_access_lookup_key configuration parameter. -On SCO #.2 UNIX, the input rate flow control is now turned off by +On SCO 3.2 UNIX, the input rate flow control is now turned off by default, because of limitations in the SCO UNIX kernel. Incompatible changes with Postfix version 1.1.2 (released 20020125) diff --git a/gnu/dist/postfix/conf/access b/gnu/dist/postfix/conf/access index 4bc39ca0626..0b1148ed08d 100644 --- a/gnu/dist/postfix/conf/access +++ b/gnu/dist/postfix/conf/access @@ -53,16 +53,16 @@ # user@domain # Matches the specified mail address. # -# domain.name -# Matches domain.name as the domain part of an email +# domain.tld +# Matches domain.tld as the domain part of an email # address. # -# The pattern domain.name also matches subdomains, -# but only when the string smtpd_access_maps is -# listed in the Postfix parent_domain_matches_subdo- -# mains configuration setting. Otherwise, specify -# .domain.name (note the initial dot) in order to -# match subdomains. +# The pattern domain.tld also matches subdomains, but +# only when the string smtpd_access_maps is listed in +# the Postfix parent_domain_matches_subdomains con- +# figuration setting. Otherwise, specify .domain.tld +# (note the initial dot) in order to match subdo- +# mains. # # user@ Matches all mail addresses with the specified user # part. @@ -85,15 +85,15 @@ # networked tables such as NIS, LDAP or SQL, the following # lookup patterns are examined in the order as listed: # -# domain.name -# Matches domain.name. +# domain.tld +# Matches domain.tld. # -# The pattern domain.name also matches subdomains, -# but only when the string smtpd_access_maps is -# listed in the Postfix parent_domain_matches_subdo- -# mains configuration setting. Otherwise, specify -# .domain.name (note the initial dot) in order to -# match subdomains. +# The pattern domain.tld also matches subdomains, but +# only when the string smtpd_access_maps is listed in +# the Postfix parent_domain_matches_subdomains con- +# figuration setting. Otherwise, specify .domain.tld +# (note the initial dot) in order to match subdo- +# mains. # # net.work.addr.ess # diff --git a/gnu/dist/postfix/conf/master.cf b/gnu/dist/postfix/conf/master.cf index 622615671d2..70a33f47af6 100644 --- a/gnu/dist/postfix/conf/master.cf +++ b/gnu/dist/postfix/conf/master.cf @@ -1,3 +1,5 @@ +# $NetBSD: master.cf,v 1.1.1.5 2002/06/08 22:36:13 itojun Exp $ +# # # Postfix master process configuration file. Each line describes how # a mailer component program should be run. The fields that make up @@ -24,9 +26,9 @@ # Chroot: whether or not the service runs chrooted to the mail queue # directory (pathname is controlled by the queue_directory configuration # variable in the main.cf file). Presently, all Postfix daemons can run -# chrooted, except for the pipe and local daemons. The files in the -# examples/chroot-setup subdirectory describe how to set up a Postfix -# chroot environment for your type of machine. +# chrooted, except for the pipe, virtual and local delivery daemons. +# The files in the examples/chroot-setup subdirectory describe how +# to set up a Postfix chroot environment for your type of machine. # # Wakeup time: automatically wake up the named service after the # specified number of seconds. A ? at the end of the wakeup time diff --git a/gnu/dist/postfix/conf/post-install b/gnu/dist/postfix/conf/post-install index 3feeb4a2e97..4fd59c31245 100644 --- a/gnu/dist/postfix/conf/post-install +++ b/gnu/dist/postfix/conf/post-install @@ -487,12 +487,12 @@ EOF for name in cleanup flush do - grep "^$name[ ]*unix[ ]*-" \ + grep "^$name[ ]*unix[ ]*[-y]" \ $config_directory/master.cf >/dev/null && { echo Editing $config_directory/master.cf, making the $name service public ed $config_directory/master.cf <<EOF || exit 1 -/^$name[ ]*unix[ ]*-/ -s/-/n/ +/^$name[ ]*unix[ ]*[-y]/ +s/[-y]/n/ p w q diff --git a/gnu/dist/postfix/conf/postfix-script b/gnu/dist/postfix/conf/postfix-script index a1662fabb4b..e1558eb93c8 100755 --- a/gnu/dist/postfix/conf/postfix-script +++ b/gnu/dist/postfix/conf/postfix-script @@ -174,6 +174,15 @@ check) ! \( -type p -o -type s \) ! -user $mail_owner \ -exec $WARN not owned by $mail_owner: {} \; + find $queue_directory/public $queue_directory/maildrop \ + $command_directory/postqueue $command_directory/postdrop \ + -prune ! -group $setgid_group \ + -exec $WARN not owned by group $setgid_group: {} \; + + find $command_directory/postqueue $command_directory/postdrop \ + -prune ! -perm -02111 \ + -exec $WARN not set-gid: {} \; + for name in `ls -d $queue_directory/* | \ egrep '/(bin|etc|lib|usr)$'` ; \ do \ @@ -181,11 +190,11 @@ check) -exec $WARN not owned by root: {} \; ; \ done - for dir in $queue_directory/maildrop - do - ls -lLd $dir | (grep " $mail_owner " >/dev/null || - $WARN not owned by $mail_owner: $dir) - done + # WARNING: this should not descend into the maildrop directory. + # maildrop is the least trusted Postfix directory. + + find $queue_directory/maildrop/. -prune ! -user $mail_owner \ + -exec $WARN not owned by $mail_owner: $queue_directory/maildrop \; for dir in bin etc lib sbin usr do diff --git a/gnu/dist/postfix/conf/sample-aliases.cf b/gnu/dist/postfix/conf/sample-aliases.cf index 6ebebb66de1..ad9bcc20cfc 100644 --- a/gnu/dist/postfix/conf/sample-aliases.cf +++ b/gnu/dist/postfix/conf/sample-aliases.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-aliases.cf,v 1.1.1.3 2002/06/08 22:36:14 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-auth.cf b/gnu/dist/postfix/conf/sample-auth.cf index 00920bde736..29805efc7df 100644 --- a/gnu/dist/postfix/conf/sample-auth.cf +++ b/gnu/dist/postfix/conf/sample-auth.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-auth.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-canonical.cf b/gnu/dist/postfix/conf/sample-canonical.cf index 474976b70a8..413557ba233 100644 --- a/gnu/dist/postfix/conf/sample-canonical.cf +++ b/gnu/dist/postfix/conf/sample-canonical.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-canonical.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-compatibility.cf b/gnu/dist/postfix/conf/sample-compatibility.cf index 868ee5df0f9..5445c25bd1d 100644 --- a/gnu/dist/postfix/conf/sample-compatibility.cf +++ b/gnu/dist/postfix/conf/sample-compatibility.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-compatibility.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # @@ -24,19 +26,15 @@ ignore_mx_lookup_error = no # The smtp_always_send_ehlo parameter specifies that the SMTP client # should always send EHLO at the start of an SMTP session. # -# By default, Postfix sends EHLO only when the word "ESMTP" appears -# in the server greeting banner (example: 220 spike.porcupine.org +# If you specify "no", Postfix sends EHLO only when the word "ESMTP" +# appears in the server greeting banner (example: 220 spike.porcupine.org # ESMTP Postfix). # -smtp_always_send_ehlo = no +smtp_always_send_ehlo = yes # The smtp_never_send_ehlo parameter specifies that the SMTP client # should never send EHLO at the start of an SMTP session. # -# By default, Postfix sends EHLO whenever the word "ESMTP" appears -# in the server greeting banner (example: 220 spike.porcupine.org -# ESMTP Postfix). -# smtp_never_send_ehlo = no # The smtp_skip_4xx_greeting parameter controls what happens when diff --git a/gnu/dist/postfix/conf/sample-debug.cf b/gnu/dist/postfix/conf/sample-debug.cf index 5f850ddc751..3f8e358cf96 100644 --- a/gnu/dist/postfix/conf/sample-debug.cf +++ b/gnu/dist/postfix/conf/sample-debug.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-debug.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-filter.cf b/gnu/dist/postfix/conf/sample-filter.cf index 8b9c960384e..826cebf4d8a 100644 --- a/gnu/dist/postfix/conf/sample-filter.cf +++ b/gnu/dist/postfix/conf/sample-filter.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-filter.cf,v 1.1.1.4 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # @@ -15,6 +17,7 @@ # REJECT text.... The text is sent to the originator. # IGNORE the header line is silently discarded. # WARN the header is logged (not rejected) with a warning message. +# WARN text... as above, and the text is logged, too. # # These patterns do not apply to MIME headers in the message body. # @@ -34,5 +37,6 @@ header_checks = regexp:/etc/postfix/header_checks # REJECT text.... The text is sent to the originator. # IGNORE the body line is silently discarded. # WARN the body line is logged (not rejected) with a warning message. +# WARN text... as above, and the text is logged, too. # body_checks = regexp:/etc/postfix/body_checks diff --git a/gnu/dist/postfix/conf/sample-flush.cf b/gnu/dist/postfix/conf/sample-flush.cf index 2db8143686b..357421e3dec 100644 --- a/gnu/dist/postfix/conf/sample-flush.cf +++ b/gnu/dist/postfix/conf/sample-flush.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-flush.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-ldap.cf b/gnu/dist/postfix/conf/sample-ldap.cf index 58a752a33b2..bf3a54bdbe8 100644 --- a/gnu/dist/postfix/conf/sample-ldap.cf +++ b/gnu/dist/postfix/conf/sample-ldap.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-ldap.cf,v 1.1.1.6 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-lmtp.cf b/gnu/dist/postfix/conf/sample-lmtp.cf index 9e2699cccbd..d2b8f47be2f 100644 --- a/gnu/dist/postfix/conf/sample-lmtp.cf +++ b/gnu/dist/postfix/conf/sample-lmtp.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-lmtp.cf,v 1.1.1.3 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-local.cf b/gnu/dist/postfix/conf/sample-local.cf index 5e61971bb20..f2454501930 100644 --- a/gnu/dist/postfix/conf/sample-local.cf +++ b/gnu/dist/postfix/conf/sample-local.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-local.cf,v 1.1.1.5 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-misc.cf b/gnu/dist/postfix/conf/sample-misc.cf index d848d911975..6b4f573519a 100644 --- a/gnu/dist/postfix/conf/sample-misc.cf +++ b/gnu/dist/postfix/conf/sample-misc.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-misc.cf,v 1.1.1.6 2002/06/08 22:36:15 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # @@ -196,14 +198,14 @@ mydestination = $myhostname, localhost.$mydomain # $mydomain is used as a default value for many other configuration # parameters. # -#mydomain = domain.name +#mydomain = domain.tld # The myhostname parameter specifies the internet hostname of this # mail system. The default is to use the fully-qualified domain name # from gethostname(). $myhostname is used as a default value for many # other configuration parameters. # -#myhostname = host.domain.name +#myhostname = host.domain.tld # The myorigin parameter specifies the domain that locally-posted # mail appears to come from. The default is to append $myhostname, @@ -273,10 +275,10 @@ delay_notice_recipient = postmaster error_notice_recipient = postmaster # The parent_domain_matches_subdomains parameter specifies what -# Postfix features use "domain.name matches sub.domain.name" style -# pattern matching instead of requiring ".domain.name". This is +# Postfix features use "domain.tld matches sub.domain.tld" style +# pattern matching instead of requiring ".domain.tld". This is # planned backwards compatibility: eventually, all Postfix features -# are expected to require ".domain.name" style patterns. +# are expected to require ".domain.tld" style patterns. # parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains, mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients, @@ -362,6 +364,22 @@ relayhost = #relocated_maps = hash:/etc/postfix/relocated relocated_maps = +# The resolve_dequoted_address parameter controls how Postfix +# resolves addresses. +# +# By default, the Postfix address resolver does not quote the address +# localpart as per RFC 822, so that additional @ or % or ! operators +# remain visible. This behavior is safe but it is also technically +# incorrect. +# +# If you specify "resolve_dequoted_address = no", then the Postfix +# resolver will not know about additional @ etc. operators in the +# address localpart. This opens opportunities for obscure mail relay +# attacks with user@domain@domain addresses when Postfix provides +# backup MX service for Sendmail systems. +# +resolve_dequoted_address = no + # The syslog_facility parameter controls where Postfix logging is # sent by the syslog daemon. Specify a logging facility as defined # in syslog.conf(5). The default logging facility is "mail". diff --git a/gnu/dist/postfix/conf/sample-pcre-access.cf b/gnu/dist/postfix/conf/sample-pcre-access.cf index 849641fc0e7..936e5b4d5b4 100644 --- a/gnu/dist/postfix/conf/sample-pcre-access.cf +++ b/gnu/dist/postfix/conf/sample-pcre-access.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-pcre-access.cf,v 1.1.1.2 2002/06/08 22:36:15 itojun Exp $ +# # # Sample pcre (PERL-compatible regular expression) map file for # SMTPD access control. See pcre_table(5) and access(5) for diff --git a/gnu/dist/postfix/conf/sample-pcre-body.cf b/gnu/dist/postfix/conf/sample-pcre-body.cf index df3c6e03b6a..bfee7c4eba1 100644 --- a/gnu/dist/postfix/conf/sample-pcre-body.cf +++ b/gnu/dist/postfix/conf/sample-pcre-body.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-pcre-body.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # # Sample pcre (PERL-compatible regular expression) map file for # mail body filtering. See pcre_table(5) for syntax description. @@ -25,6 +27,7 @@ # REJECT text.... The text is sent to the originator. # IGNORE The line is silently discarded. # WARN The line is logged (not rejected) with a warning. +# WARN text.... As above, and the text is logged, too. # # Substitution of sub-strings from the matched expression is # possible using the conventional perl syntax. The macros in the diff --git a/gnu/dist/postfix/conf/sample-pcre-header.cf b/gnu/dist/postfix/conf/sample-pcre-header.cf index 6e5af4178cd..d2b3aded96f 100644 --- a/gnu/dist/postfix/conf/sample-pcre-header.cf +++ b/gnu/dist/postfix/conf/sample-pcre-header.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-pcre-header.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # # Sample pcre (PERL-compatible regular expression) map file for # message header filtering. See pcre_table(5) for syntax description. @@ -25,6 +27,7 @@ # REJECT text.... The text is sent to the originator. # IGNORE The header line is silently discarded. # WARN The header is logged (not rejected) with a warning. +# WARN text.... As above, and the text is logged, too. # # Substitution of sub-strings from the matched expression is # possible using the conventional perl syntax. The macros in the diff --git a/gnu/dist/postfix/conf/sample-qmqpd.cf b/gnu/dist/postfix/conf/sample-qmqpd.cf index 03d26ee3c4f..cbc38d75f60 100644 --- a/gnu/dist/postfix/conf/sample-qmqpd.cf +++ b/gnu/dist/postfix/conf/sample-qmqpd.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-qmqpd.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-rate.cf b/gnu/dist/postfix/conf/sample-rate.cf index 8cd1bb4e4d1..3225c290c60 100644 --- a/gnu/dist/postfix/conf/sample-rate.cf +++ b/gnu/dist/postfix/conf/sample-rate.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-rate.cf,v 1.1.1.3 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-regexp-access.cf b/gnu/dist/postfix/conf/sample-regexp-access.cf index 9ac54c1ab76..71d2984c897 100644 --- a/gnu/dist/postfix/conf/sample-regexp-access.cf +++ b/gnu/dist/postfix/conf/sample-regexp-access.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-regexp-access.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # Sample regexp SMTPD access lookup "table". See regexp_table(5) # and access(5) for a description of the syntax. # diff --git a/gnu/dist/postfix/conf/sample-regexp-body.cf b/gnu/dist/postfix/conf/sample-regexp-body.cf index f9d3172dab3..5f85cbac69c 100644 --- a/gnu/dist/postfix/conf/sample-regexp-body.cf +++ b/gnu/dist/postfix/conf/sample-regexp-body.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-regexp-body.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # Sample regexp message body filter lookup "table". See regexp_table(5) # for a description of the syntax. # @@ -21,3 +23,4 @@ # REJECT text.... The text is sent to the originator. # IGNORE The header line is silently discarded. # WARN The header is logged (not rejected) with a warning. +# WARN text.... As above, and the text is logged, too. diff --git a/gnu/dist/postfix/conf/sample-regexp-header.cf b/gnu/dist/postfix/conf/sample-regexp-header.cf index 6d46bdad2eb..57a63002fb0 100644 --- a/gnu/dist/postfix/conf/sample-regexp-header.cf +++ b/gnu/dist/postfix/conf/sample-regexp-header.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-regexp-header.cf,v 1.1.1.2 2002/06/08 22:36:16 itojun Exp $ +# # Sample regexp message header filter lookup "table". See regexp_table(5) # for a description of the syntax. # @@ -22,6 +24,7 @@ # REJECT text.... The text is sent to the originator. # IGNORE the header line is silently discarded. # WARN the header is logged (not rejected) with a warning. +# WARN text... As above, and the text is logged, too. /^Subject: Make Money Fast/ REJECT /^To: friend@public.com/ REJECT diff --git a/gnu/dist/postfix/conf/sample-relocated.cf b/gnu/dist/postfix/conf/sample-relocated.cf index 611134b0a64..4e8617c6039 100644 --- a/gnu/dist/postfix/conf/sample-relocated.cf +++ b/gnu/dist/postfix/conf/sample-relocated.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-relocated.cf,v 1.1.1.3 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-resource.cf b/gnu/dist/postfix/conf/sample-resource.cf index 13c7211b55a..878b4f9379d 100644 --- a/gnu/dist/postfix/conf/sample-resource.cf +++ b/gnu/dist/postfix/conf/sample-resource.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-resource.cf,v 1.1.1.3 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-rewrite.cf b/gnu/dist/postfix/conf/sample-rewrite.cf index c4d5e1ea194..0b8a13dbac9 100644 --- a/gnu/dist/postfix/conf/sample-rewrite.cf +++ b/gnu/dist/postfix/conf/sample-rewrite.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-rewrite.cf,v 1.1.1.4 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-smtp.cf b/gnu/dist/postfix/conf/sample-smtp.cf index d2648e42ce4..52e09953234 100644 --- a/gnu/dist/postfix/conf/sample-smtp.cf +++ b/gnu/dist/postfix/conf/sample-smtp.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-smtp.cf,v 1.1.1.4 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # @@ -65,13 +67,14 @@ smtp_never_send_ehlo = no # #smtp_bind_address=111.222.333.444 -# The smtp_break_lines parameter controls whether the SMTP client -# will break lines longer than $line_length_limit characters. +# The smtp_line_length_limit parameter controls the length of +# message header and body lines that Postfix will send via SMTP. +# Lines that are longer are broken by inserting <CR> <LF> <SPACE>. # -# By default, line breaking is turned on, because some fragile SMTP -# server implementations cannot receive mail with long lines. +# By default, the line length is limited to 990 characters, because +# some server implementations cannot receive mail with long lines. # -#smtp_break_lines = yes +#smtp_line_length_limit = 990 # The smtp_skip_4xx_greeting parameter controls what happens when # an SMTP server greets us with a 4XX status code (go away, try diff --git a/gnu/dist/postfix/conf/sample-smtpd.cf b/gnu/dist/postfix/conf/sample-smtpd.cf index 2882009b695..c8960ccd70c 100644 --- a/gnu/dist/postfix/conf/sample-smtpd.cf +++ b/gnu/dist/postfix/conf/sample-smtpd.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-smtpd.cf,v 1.1.1.5 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # @@ -440,7 +442,7 @@ relay_domains = $mydestination # The access_map_reject_code parameter specifies the SMTP server # response code when a client violates an access map restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # access_map_reject_code = 550 @@ -448,28 +450,28 @@ access_map_reject_code = 550 # response when a client violates the reject_invalid_hostname anti-UCE # restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # invalid_hostname_reject_code = 501 # The maps_rbl_reject_code parameter specifies the SMTP server response # when a client violates the maps_rbl_domains restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # maps_rbl_reject_code = 550 # The reject_code parameter specifies the SMTP server response code # when an SMTP client matches a reject restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # reject_code = 550 # The relay_domains_reject_code parameter specifies the SMTP server # response when a client attempts to violate the mail relay policy. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # relay_domains_reject_code = 550 @@ -477,7 +479,7 @@ relay_domains_reject_code = 550 # response when a client violates the reject_unknown_sender_domain # or reject_unknown_recipient_domain restrictions. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # unknown_address_reject_code = 450 @@ -485,7 +487,7 @@ unknown_address_reject_code = 450 # response when a client without address to name mapping violates # the reject_unknown_clients restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # unknown_client_reject_code = 450 @@ -493,6 +495,6 @@ unknown_client_reject_code = 450 # response when a client violates the reject_unknown_hostname # restriction. # -# Do not change this unless you have a complete understanding of RFC 822. +# Do not change this unless you have a complete understanding of RFC 821. # unknown_hostname_reject_code = 450 diff --git a/gnu/dist/postfix/conf/sample-transport.cf b/gnu/dist/postfix/conf/sample-transport.cf index 79d6f87d0f6..4576d96a556 100644 --- a/gnu/dist/postfix/conf/sample-transport.cf +++ b/gnu/dist/postfix/conf/sample-transport.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-transport.cf,v 1.1.1.3 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/sample-virtual.cf b/gnu/dist/postfix/conf/sample-virtual.cf index f11ccc317c3..87504666233 100644 --- a/gnu/dist/postfix/conf/sample-virtual.cf +++ b/gnu/dist/postfix/conf/sample-virtual.cf @@ -1,3 +1,5 @@ +# $NetBSD: sample-virtual.cf,v 1.1.1.3 2002/06/08 22:36:16 itojun Exp $ +# # DO NOT EDIT THIS FILE. EDIT THE MAIN.CF FILE INSTEAD. THE STUFF # HERE JUST SERVES AS AN EXAMPLE. # diff --git a/gnu/dist/postfix/conf/transport b/gnu/dist/postfix/conf/transport index 3d6e07f0dcb..fc4cf85347a 100644 --- a/gnu/dist/postfix/conf/transport +++ b/gnu/dist/postfix/conf/transport @@ -1,4 +1,3 @@ -# # TRANSPORT(5) TRANSPORT(5) # # NAME @@ -149,9 +148,9 @@ # command after a configuration change. # # parent_domain_matches_subdomains -# List of Postfix features that use domain.name pat- -# terns to match sub.domain.name (as opposed to -# requiring .domain.name patterns). +# List of Postfix features that use domain.tld pat- +# terns to match sub.domain.tld (as opposed to +# requiring .domain.tld patterns). # # transport_maps # List of transport lookup tables. @@ -182,5 +181,4 @@ # P.O. Box 704 # Yorktown Heights, NY 10598, USA # -# 1 -# +# TRANSPORT(5) diff --git a/gnu/dist/postfix/html/access.5.html b/gnu/dist/postfix/html/access.5.html index c393a7fee3e..2e140059651 100644 --- a/gnu/dist/postfix/html/access.5.html +++ b/gnu/dist/postfix/html/access.5.html @@ -54,16 +54,16 @@ ACCESS(5) ACCESS(5) <i>user</i>@<i>domain</i> Matches the specified mail address. - <i>domain.name</i> - Matches <i>domain.name</i> as the domain part of an email + <i>domain.tld</i> + Matches <i>domain.tld</i> as the domain part of an email address. - The pattern <i>domain.name</i> also matches subdomains, - but only when the string <b>smtpd</b><i>_</i><b>access</b><i>_</i><b>maps</b> is - listed in the Postfix <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdo-</b> - <b>mains</b> configuration setting. Otherwise, specify - <i>.domain.name</i> (note the initial dot) in order to - match subdomains. + The pattern <i>domain.tld</i> also matches subdomains, but + only when the string <b>smtpd</b><i>_</i><b>access</b><i>_</i><b>maps</b> is listed in + the Postfix <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> con- + figuration setting. Otherwise, specify <i>.domain.tld</i> + (note the initial dot) in order to match subdo- + mains. <i>user</i>@ Matches all mail addresses with the specified user part. @@ -86,15 +86,15 @@ ACCESS(5) ACCESS(5) networked tables such as NIS, LDAP or SQL, the following lookup patterns are examined in the order as listed: - <i>domain.name</i> - Matches <i>domain.name</i>. + <i>domain.tld</i> + Matches <i>domain.tld</i>. - The pattern <i>domain.name</i> also matches subdomains, - but only when the string <b>smtpd</b><i>_</i><b>access</b><i>_</i><b>maps</b> is - listed in the Postfix <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdo-</b> - <b>mains</b> configuration setting. Otherwise, specify - <i>.domain.name</i> (note the initial dot) in order to - match subdomains. + The pattern <i>domain.tld</i> also matches subdomains, but + only when the string <b>smtpd</b><i>_</i><b>access</b><i>_</i><b>maps</b> is listed in + the Postfix <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> con- + figuration setting. Otherwise, specify <i>.domain.tld</i> + (note the initial dot) in order to match subdo- + mains. <i>net.work.addr.ess</i> @@ -122,7 +122,7 @@ ACCESS(5) ACCESS(5) tion schemes. <i>restriction...</i> - Apply the named UCE restriction(s) (<b>permit</b>, reject, + Apply the named UCE restriction(s) (<b>permit</b>, <b>reject</b>, <b>reject</b><i>_</i><b>unauth</b><i>_</i><b>destination</b>, and so on). <b>REGULAR</b> <b>EXPRESSION</b> <b>TABLES</b> diff --git a/gnu/dist/postfix/html/basic.html b/gnu/dist/postfix/html/basic.html index 7e38a8d6c45..26db800a861 100644 --- a/gnu/dist/postfix/html/basic.html +++ b/gnu/dist/postfix/html/basic.html @@ -410,7 +410,7 @@ or you would have a mailer loop. <dt> Host running virtual mailers: -<dd> <b>inet_interfaces = virtual.host.name</b> (virtual domain) +<dd> <b>inet_interfaces = virtual.host.tld</b> (virtual domain) <dd> <b>inet_interfaces = $myhostname localhost.$mydomain</b> (non-virtual mailer) diff --git a/gnu/dist/postfix/html/faq.html b/gnu/dist/postfix/html/faq.html index 85f8cb644e4..a3a1dccf247 100644 --- a/gnu/dist/postfix/html/faq.html +++ b/gnu/dist/postfix/html/faq.html @@ -1748,10 +1748,10 @@ all you need: <pre> DNS: - the.backed-up.domain.name IN MX 100 your.machine.name + the.backed-up.domain.tld IN MX 100 your.machine.tld /etc/postfix/main.cf: - relay_domains = $mydestination the.backed-up.domain.name + relay_domains = $mydestination the.backed-up.domain.tld smtpd_recipient_restrictions = permit_mynetworks check_relay_domains </pre> @@ -1767,7 +1767,7 @@ need: transport_maps = hash:/etc/postfix/transport /etc/postfix/transport: - the.backed-up.domain.name smtp:[their.mail.host.name] + the.backed-up.domain.tld smtp:[their.mail.host.tld] </pre> <p> @@ -2208,14 +2208,14 @@ mail as user@domain</h3></a> <ul> -<li>In order to send mail as <i>user@domain.name</i>, specify what +<li>In order to send mail as <i>user@domain.tld</i>, specify what domain is to be appended to addresses that do not have a domain: <p> <pre> /etc/postfix/main.cf: - myorigin = domain.name + myorigin = domain.tld </pre> <p> @@ -2720,7 +2720,7 @@ your system supports, use the command <b>postconf -m</b>. <a name="virtual_logging"><h3>Postfix logs delivery to virtual address with the wrong name</h3></a> -When Postfix delivers mail for a virtual address <i>vuser@vdomain.name</i> +When Postfix delivers mail for a virtual address <i>vuser@vdomain.tld</i> that is aliased to a local user, then Postfix logs the local username instead of the virtual one. @@ -2743,15 +2743,15 @@ can be expensive if you have many virtual domains. recipient_delimiter = + /etc/postfix/virtual_regexp: - /^vdomain\.name$/ whatever - /(.*)@vdomain\.name$/ localuser+$1=vdomain.name + /^vdomain\.tld$/ whatever + /(.*)@vdomain\.tld$/ localuser+$1=vdomain.tld </pre> </blockquote> <p> This delivers the mail as -<i>localuser+vuser=vdomain.name@your.domain</i>. +<i>localuser+vuser=vdomain.tld@your.domain</i>. <hr> diff --git a/gnu/dist/postfix/html/flush.8.html b/gnu/dist/postfix/html/flush.8.html index 93223e406a7..b62fba9de8b 100644 --- a/gnu/dist/postfix/html/flush.8.html +++ b/gnu/dist/postfix/html/flush.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - FLUSH(8) FLUSH(8) <b>NAME</b> @@ -137,9 +136,9 @@ FLUSH(8) FLUSH(8) days). <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> - List of Postfix features that use <i>domain.name</i> pat- - terns to match <i>sub.domain.name</i> (as opposed to - requiring <i>.domain.name</i> patterns). + List of Postfix features that use <i>domain.tld</i> pat- + terns to match <i>sub.domain.tld</i> (as opposed to + requiring <i>.domain.tld</i> patterns). <b>SEE</b> <b>ALSO</b> <a href="smtpd.8.html">smtpd(8)</a> Postfix SMTP server @@ -156,6 +155,5 @@ FLUSH(8) FLUSH(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + FLUSH(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/nqmgr.8.html b/gnu/dist/postfix/html/nqmgr.8.html index 405e14d2ff9..6d2af0cf883 100644 --- a/gnu/dist/postfix/html/nqmgr.8.html +++ b/gnu/dist/postfix/html/nqmgr.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - NQMGR(8) NQMGR(8) <b>NAME</b> @@ -224,7 +223,7 @@ NQMGR(8) NQMGR(8) <i>transport</i> can have. <b>Timing</b> <b>controls</b> - <b>min</b><i>_</i><b>backoff</b> + <b>minimal</b><i>_</i><b>backoff</b><i>_</i><b>time</b> Minimal time in seconds between delivery attempts of a deferred message. @@ -232,7 +231,7 @@ NQMGR(8) NQMGR(8) destination is kept in the short-term, in-memory destination status cache. - <b>max</b><i>_</i><b>backoff</b> + <b>maximal</b><i>_</i><b>backoff</b><i>_</i><b>time</b> Maximal time in seconds between delivery attempts of a deferred message. @@ -338,6 +337,5 @@ NQMGR(8) NQMGR(8) Modra 6 155 00, Prague, Czech Republic - 1 - + NQMGR(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/pickup.8.html b/gnu/dist/postfix/html/pickup.8.html index 428f0e187f1..dfd20d5d779 100644 --- a/gnu/dist/postfix/html/pickup.8.html +++ b/gnu/dist/postfix/html/pickup.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - PICKUP(8) PICKUP(8) <b>NAME</b> @@ -80,6 +79,5 @@ PICKUP(8) PICKUP(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + PICKUP(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/postqueue.1.html b/gnu/dist/postfix/html/postqueue.1.html index 64b005a4567..c5ba1927aa7 100644 --- a/gnu/dist/postfix/html/postqueue.1.html +++ b/gnu/dist/postfix/html/postqueue.1.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - POSTQUEUE(1) POSTQUEUE(1) <b>NAME</b> @@ -110,6 +109,5 @@ POSTQUEUE(1) POSTQUEUE(1) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + POSTQUEUE(1) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/qmgr.8.html b/gnu/dist/postfix/html/qmgr.8.html index 6cc03ee15ae..2ca5e6b7242 100644 --- a/gnu/dist/postfix/html/qmgr.8.html +++ b/gnu/dist/postfix/html/qmgr.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - QMGR(8) QMGR(8) <b>NAME</b> @@ -193,7 +192,7 @@ QMGR(8) QMGR(8) term, in-memory destination cache. <b>Timing</b> <b>controls</b> - <b>min</b><i>_</i><b>backoff</b> + <b>minimal</b><i>_</i><b>backoff</b><i>_</i><b>time</b> Minimal time in seconds between delivery attempts of a deferred message. @@ -201,7 +200,7 @@ QMGR(8) QMGR(8) destination is kept in the short-term, in-memory destination status cache. - <b>max</b><i>_</i><b>backoff</b> + <b>maximal</b><i>_</i><b>backoff</b><i>_</i><b>time</b> Maximal time in seconds between delivery attempts of a deferred message. @@ -287,6 +286,5 @@ QMGR(8) QMGR(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + QMGR(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/sendmail.1.html b/gnu/dist/postfix/html/sendmail.1.html index 7f2655ce824..9daf15bd54d 100644 --- a/gnu/dist/postfix/html/sendmail.1.html +++ b/gnu/dist/postfix/html/sendmail.1.html @@ -124,20 +124,25 @@ SENDMAIL(1) SENDMAIL(1) <b>-bs</b> Stand-alone SMTP server mode. Read SMTP commands from standard input, and write responses to stan- - dard output. This mode of operation is implemented - by running the <a href="smtpd.8.html"><b>smtpd</b>(8)</a> daemon. + dard output. In stand-alone SMTP server mode, UCE + restrictions and access controls are disabled by + default. To enable them, run the process as the + <b>mail</b><i>_</i><b>owner</b> user. + + This mode of operation is implemented by running + the <a href="smtpd.8.html"><b>smtpd</b>(8)</a> daemon. <b>-f</b> <i>sender</i> Set the envelope sender address. This is the address where delivery problems are sent to, unless - the message contains an <b>Errors-To:</b> message header. + the message contains an <b>Errors-To:</b> message header. <b>-h</b> <i>hop_count</i> (ignored) - Hop count limit. Use the <b>hopcount</b><i>_</i><b>limit</b> configura- + Hop count limit. Use the <b>hopcount</b><i>_</i><b>limit</b> configura- tion parameter instead. - <b>-i</b> When reading a message from standard input, don't - treat a line with only a <b>.</b> character as the end of + <b>-i</b> When reading a message from standard input, don't + treat a line with only a <b>.</b> character as the end of input. <b>-m</b> (ignored) @@ -147,67 +152,67 @@ SENDMAIL(1) SENDMAIL(1) Backwards compatibility. <b>-oA</b><i>alias_database</i> - Non-default alias database. Specify <i>pathname</i> or + Non-default alias database. Specify <i>pathname</i> or <i>type</i>:<i>pathname</i>. See <a href="postalias.1.html"><b>postalias</b>(1)</a> for details. <b>-o7</b> (ignored) <b>-o8</b> (ignored) - The message body type. Currently, Postfix imple- + The message body type. Currently, Postfix imple- ments <b>just-send-eight</b>. - <b>-oi</b> When reading a message from standard input, don't - treat a line with only a <b>.</b> character as the end of + <b>-oi</b> When reading a message from standard input, don't + treat a line with only a <b>.</b> character as the end of input. <b>-om</b> (ignored) - The sender is never eliminated from alias etc. + The sender is never eliminated from alias etc. expansions. <b>-o</b> <i>x</i> <i>value</i> (ignored) - Set option <i>x</i> to <i>value</i>. Use the equivalent configu- + Set option <i>x</i> to <i>value</i>. Use the equivalent configu- ration parameter in <b>main.cf</b> instead. <b>-r</b> <i>sender</i> Set the envelope sender address. This is the address where delivery problems are sent to, unless - the message contains an <b>Errors-To:</b> message header. + the message contains an <b>Errors-To:</b> message header. - <b>-q</b> Attempt to deliver all queued mail. This is imple- + <b>-q</b> Attempt to deliver all queued mail. This is imple- mented by executing the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command. <b>-q</b><i>interval</i> (ignored) - The interval between queue runs. Use the + The interval between queue runs. Use the <b>queue</b><i>_</i><b>run</b><i>_</i><b>delay</b> configuration parameter instead. <b>-qR</b><i>site</i> - Schedule immediate delivery of all mail that is + Schedule immediate delivery of all mail that is queued for the named <i>site</i>. This option accepts only - <i>site</i> names that are eligible for the "fast flush" - service, and is implemented by executing the + <i>site</i> names that are eligible for the "fast flush" + service, and is implemented by executing the <a href="postqueue.1.html"><b>postqueue</b>(1)</a> command. See <a href="flushd.8.html"><b>flush</b>(8)</a> for more infor- mation about the "fast flush" service. <b>-qS</b><i>site</i> - This command is not implemented. Use the slower + This command is not implemented. Use the slower <b>sendmail</b> <b>-q</b> command instead. - <b>-t</b> Extract recipients from message headers. This - requires that no recipients be specified on the + <b>-t</b> Extract recipients from message headers. This + requires that no recipients be specified on the command line. <b>-v</b> Enable verbose logging for debugging purposes. Mul- - tiple <b>-v</b> options make the software increasingly + tiple <b>-v</b> options make the software increasingly verbose. <b>SECURITY</b> - By design, this program is not set-user (or group) id. - However, it must handle data from untrusted users or - untrusted machines. Thus, the usual precautions need to + By design, this program is not set-user (or group) id. + However, it must handle data from untrusted users or + untrusted machines. Thus, the usual precautions need to be taken against malicious inputs. <b>DIAGNOSTICS</b> - Problems are logged to <b>syslogd</b>(8) and to the standard + Problems are logged to <b>syslogd</b>(8) and to the standard error stream. <b>ENVIRONMENT</b> @@ -219,7 +224,7 @@ SENDMAIL(1) SENDMAIL(1) <b>MAIL</b><i>_</i><b>DEBUG</b> Enable debugging with an external command, as spec- - ified with the <b>debugger</b><i>_</i><b>command</b> configuration + ified with the <b>debugger</b><i>_</i><b>command</b> configuration parameter. <b>FILES</b> @@ -227,13 +232,13 @@ SENDMAIL(1) SENDMAIL(1) /etc/postfix, configuration files <b>CONFIGURATION</b> <b>PARAMETERS</b> - See the Postfix <b>main.cf</b> file for syntax details and for - default values. Use the <b>postfix</b> <b>reload</b> command after a + See the Postfix <b>main.cf</b> file for syntax details and for + default values. Use the <b>postfix</b> <b>reload</b> command after a configuration change. <b>alias</b><i>_</i><b>database</b> - Default alias database(s) for <b>newaliases</b>. The - default value for this parameter is system-spe- + Default alias database(s) for <b>newaliases</b>. The + default value for this parameter is system-spe- cific. <b>bounce</b><i>_</i><b>size</b><i>_</i><b>limit</b> @@ -249,62 +254,62 @@ SENDMAIL(1) SENDMAIL(1) initialized. <b>debug</b><i>_</i><b>peer</b><i>_</i><b>level</b> - Increment in verbose logging level when a remote + Increment in verbose logging level when a remote host matches a pattern in the <b>debug</b><i>_</i><b>peer</b><i>_</i><b>list</b> parameter. <b>debug</b><i>_</i><b>peer</b><i>_</i><b>list</b> - List of domain or network patterns. When a remote - host matches a pattern, increase the verbose log- - ging level by the amount specified in the + List of domain or network patterns. When a remote + host matches a pattern, increase the verbose log- + ging level by the amount specified in the <b>debug</b><i>_</i><b>peer</b><i>_</i><b>level</b> parameter. <b>default</b><i>_</i><b>verp</b><i>_</i><b>delimiters</b> - The VERP delimiter characters that are used when - the <b>-V</b> command line option is specified without + The VERP delimiter characters that are used when + the <b>-V</b> command line option is specified without delimiter characters. <b>fast</b><i>_</i><b>flush</b><i>_</i><b>domains</b> List of domains that will receive "fast flush" ser- - vice (default: all domains that this system is - willing to relay mail to). This list specifies the - domains that Postfix accepts in the SMTP <b>ETRN</b> + vice (default: all domains that this system is + willing to relay mail to). This list specifies the + domains that Postfix accepts in the SMTP <b>ETRN</b> request and in the <b>sendmail</b> <b>-qR</b> command. <b>fork</b><i>_</i><b>attempts</b> - Number of attempts to <b>fork</b>() a process before giv- + Number of attempts to <b>fork</b>() a process before giv- ing up. <b>fork</b><i>_</i><b>delay</b> - Delay in seconds between successive <b>fork</b>() + Delay in seconds between successive <b>fork</b>() attempts. <b>hopcount</b><i>_</i><b>limit</b> Limit the number of <b>Received:</b> message headers. <b>mail</b><i>_</i><b>owner</b> - The owner of the mail queue and of most Postfix + The owner of the mail queue and of most Postfix processes. <b>command</b><i>_</i><b>directory</b> - Directory with Postfix support commands (default: + Directory with Postfix support commands (default: <b>$program</b><i>_</i><b>directory</b>). <b>daemon</b><i>_</i><b>directory</b> - Directory with Postfix daemon programs (default: + Directory with Postfix daemon programs (default: <b>$program</b><i>_</i><b>directory</b>). <b>queue</b><i>_</i><b>directory</b> - Top-level directory of the Postfix queue. This is + Top-level directory of the Postfix queue. This is also the root directory of Postfix daemons that run chrooted. <b>queue</b><i>_</i><b>run</b><i>_</i><b>delay</b> - The time between successive scans of the deferred + The time between successive scans of the deferred queue. <b>verp</b><i>_</i><b>delimiter</b><i>_</i><b>filter</b> - The characters that Postfix accepts as VERP delim- + The characters that Postfix accepts as VERP delim- iter characters. <b>SEE</b> <b>ALSO</b> @@ -319,7 +324,7 @@ SENDMAIL(1) SENDMAIL(1) syslogd(8) system logging <b>LICENSE</b> - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. <b>AUTHOR(S)</b> diff --git a/gnu/dist/postfix/html/showq.8.html b/gnu/dist/postfix/html/showq.8.html index cec8cf9f1b8..a9de2ae8fc9 100644 --- a/gnu/dist/postfix/html/showq.8.html +++ b/gnu/dist/postfix/html/showq.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - SHOWQ(8) SHOWQ(8) <b>NAME</b> @@ -51,6 +50,5 @@ SHOWQ(8) SHOWQ(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + SHOWQ(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/smtp.8.html b/gnu/dist/postfix/html/smtp.8.html index 0e166ab1b5a..5d55566d9cf 100644 --- a/gnu/dist/postfix/html/smtp.8.html +++ b/gnu/dist/postfix/html/smtp.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - SMTP(8) SMTP(8) <b>NAME</b> @@ -121,10 +120,10 @@ SMTP(8) SMTP(8) Numerical source network address to bind to when making a connection. - <b>smtp</b><i>_</i><b>break</b><i>_</i><b>lines</b> - Break lines > <b>$line</b><i>_</i><b>length</b><i>_</i><b>limit</b> into multiple - shorter lines. Some SMTP servers misbehave on long - lines. + <b>smtp</b><i>_</i><b>line</b><i>_</i><b>length</b><i>_</i><b>limit</b> + Length limit for SMTP message content lines. Zero + means no limit. Some SMTP servers misbehave on + long lines. <b>smtp</b><i>_</i><b>skip</b><i>_</i><b>4xx</b><i>_</i><b>greeting</b> Skip servers that greet us with a 4xx status code. @@ -147,7 +146,7 @@ SMTP(8) SMTP(8) turned on. <b>Authentication</b> <b>controls</b> - <b>smtp</b><i>_</i><b>enable</b><i>_</i><b>sasl</b><i>_</i><b>auth</b> + <b>smtp</b><i>_</i><b>sasl</b><i>_</i><b>auth</b><i>_</i><b>enable</b> Enable per-session authentication as per <a href="http://www.faqs.org/rfcs/rfc2554.html">RFC 2554</a> (SASL). By default, Postfix is built without SASL support. @@ -250,6 +249,5 @@ SMTP(8) SMTP(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + SMTP(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/smtpd.8.html b/gnu/dist/postfix/html/smtpd.8.html index a579778b107..1676d4dec9e 100644 --- a/gnu/dist/postfix/html/smtpd.8.html +++ b/gnu/dist/postfix/html/smtpd.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - SMTPD(8) SMTPD(8) <b>NAME</b> @@ -228,9 +227,9 @@ SMTPD(8) SMTPD(8) <b>UCE</b> <b>control</b> <b>restrictions</b> <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> - List of Postfix features that use <i>domain.name</i> pat- - terns to match <i>sub.domain.name</i> (as opposed to - requiring <i>.domain.name</i> patterns). + List of Postfix features that use <i>domain.tld</i> pat- + terns to match <i>sub.domain.tld</i> (as opposed to + requiring <i>.domain.tld</i> patterns). <b>smtpd</b><i>_</i><b>client</b><i>_</i><b>restrictions</b> Restrict what clients may connect to this mail sys- @@ -335,6 +334,5 @@ SMTPD(8) SMTPD(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + SMTPD(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/transport.5.html b/gnu/dist/postfix/html/transport.5.html index 737c09c1e78..b6c2ded3bb8 100644 --- a/gnu/dist/postfix/html/transport.5.html +++ b/gnu/dist/postfix/html/transport.5.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - TRANSPORT(5) TRANSPORT(5) <b>NAME</b> @@ -150,9 +149,9 @@ TRANSPORT(5) TRANSPORT(5) command after a configuration change. <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> - List of Postfix features that use <i>domain.name</i> pat- - terns to match <i>sub.domain.name</i> (as opposed to - requiring <i>.domain.name</i> patterns). + List of Postfix features that use <i>domain.tld</i> pat- + terns to match <i>sub.domain.tld</i> (as opposed to + requiring <i>.domain.tld</i> patterns). <b>transport</b><i>_</i><b>maps</b> List of transport lookup tables. @@ -183,6 +182,5 @@ TRANSPORT(5) TRANSPORT(5) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + TRANSPORT(5) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/trivial-rewrite.8.html b/gnu/dist/postfix/html/trivial-rewrite.8.html index 92f478d06ae..60284d1040f 100644 --- a/gnu/dist/postfix/html/trivial-rewrite.8.html +++ b/gnu/dist/postfix/html/trivial-rewrite.8.html @@ -1,5 +1,4 @@ <html> <head> </head> <body> <pre> - TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) <b>NAME</b> @@ -80,6 +79,14 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) The domain that locally-posted mail appears to come from. + <b>resolve</b><i>_</i><b>unquoted</b><i>_</i><b>address</b> + When resolving an address, do not quote the address + localpart as per <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a>, so that additional <b>@</b>, <b>%</b> + or <b>!</b> characters remain visible. This is techni- + cally incorrect, but allows us to stop relay + attacks when forwarding mail to a Sendmail primary + MX host. + <b>Rewriting</b> <b>allow</b><i>_</i><b>percent</b><i>_</i><b>hack</b> Rewrite <i>user</i>%<i>domain</i> to <i>user</i>@<i>domain</i>. @@ -95,11 +102,11 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) <b>Routing</b> <b>local</b><i>_</i><b>transport</b> - Where to deliver mail for destinations that match - $<b>mydestination</b> or $<b>inet</b><i>_</i><b>interfaces</b>. The default + Where to deliver mail for destinations that match + $<b>mydestination</b> or $<b>inet</b><i>_</i><b>interfaces</b>. The default transport is <b>local</b>. - Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for + Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for details. The :<i>nexthop</i> part is optional. <b>default</b><i>_</i><b>transport</b> @@ -107,23 +114,23 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) is explicitly given in the <a href="transport.5.html"><b>transport</b>(5)</a> table. The default transport is <b>smtp</b>. - Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for + Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for details. The :<i>nexthop</i> part is optional. <b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b> - List of Postfix features that use <i>domain.name</i> pat- - terns to match <i>sub.domain.name</i> (as opposed to - requiring <i>.domain.name</i> patterns). + List of Postfix features that use <i>domain.tld</i> pat- + terns to match <i>sub.domain.tld</i> (as opposed to + requiring <i>.domain.tld</i> patterns). <b>relayhost</b> - The default host to send non-local mail to when no + The default host to send non-local mail to when no entry is matched in the <a href="transport.5.html"><b>transport</b>(5)</a> table. - When no <b>relayhost</b> is specified, mail is routed + When no <b>relayhost</b> is specified, mail is routed directly to the destination's mail exchanger. <b>transport</b><i>_</i><b>maps</b> - List of tables with <i>domain</i> to (<i>transport,</i> <i>nexthop</i>) + List of tables with <i>domain</i> to (<i>transport,</i> <i>nexthop</i>) mappings. <b>SEE</b> <b>ALSO</b> @@ -132,7 +139,7 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) <a href="transport.5.html">transport(5)</a> transport table format <b>LICENSE</b> - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. <b>AUTHOR(S)</b> @@ -141,6 +148,5 @@ TRIVIAL-REWRITE(8) TRIVIAL-REWRITE(8) P.O. Box 704 Yorktown Heights, NY 10598, USA - 1 - + TRIVIAL-REWRITE(8) </pre> </body> </html> diff --git a/gnu/dist/postfix/html/uce.html b/gnu/dist/postfix/html/uce.html index 7ea7a14e9df..bde7921b6fa 100644 --- a/gnu/dist/postfix/html/uce.html +++ b/gnu/dist/postfix/html/uce.html @@ -48,6 +48,10 @@ command. <p> +<li> <a href="#body_checks">Body filtering</a> + +<p> + <li> <a href="#smtpd_client_restrictions">Client hostname/address restrictions</a> @@ -93,8 +97,9 @@ restrictions</a> <h2> Header filtering</h2> -The <b>header_checks</b> parameter restricts what -is allowed in message headers. +The <b>header_checks</b> parameter restricts what is allowed in +message headers. Patterns are applied to entire logical message +headers, even when a header spans multiple lines of text. <p> @@ -124,6 +129,8 @@ the originator. <dt>WARN <dd> Log (but do not reject) the header with a warning. +<dt>WARN text... <dd> As above, and also log the text. + </dl> <p> @@ -151,6 +158,70 @@ mail still to be rejected.</i> <p> +<a name="body_checks"> + +<h2> Body filtering</h2> + +The <b>body_checks</b> parameter restricts what text is +is allowed in message body lines (including MIME headers +within the message body). + +<p> + +Note: the message body is matched one line at a time. +There is no multi-line concept as with message headers. + +<p> + +<dl> + +<dt>Default: + +<dd>Allow anything in message body lines. + +<p> + +<dt>Syntax: + +<dd>Specify a list of zero or more lookup tables. Whenever a body +line matches a table, the action depends on the lookup result: + +<p> + +<dl> + +<dt>REJECT <dd> Reject the message, and log the matched line. + +<dt>REJECT text... <dd> As above, and also send the text to +the originator. + +<dt>IGNORE <dd> Delete the matched line from the message. + +<dt>WARN <dd> Log (but do not reject) the matched line with a warning. + +<dt>WARN text... <dd> As above, and also log the text. + +</dl> + +<p> + +<i>At present, specifying a pattern with OK serves no useful +purpose. A rule ending in OK affects only the line being matched. +The next line may still result in a REJECT match, causing the +mail still to be rejected.</i> + +</dl> + +<p> + +<dt>Examples (main.cf): + +<dd> <b>body_checks = regexp:/etc/postfix/body_checks</b> + +<dd> <b>body_checks = pcre:/etc/postfix/body_checks</b> + +<p> + <a name="smtpd_client_restrictions"> <h2> Client hostname/address restrictions</h2> diff --git a/gnu/dist/postfix/man/man1/sendmail.1 b/gnu/dist/postfix/man/man1/sendmail.1 index 87fcd219aa4..10ca278c014 100644 --- a/gnu/dist/postfix/man/man1/sendmail.1 +++ b/gnu/dist/postfix/man/man1/sendmail.1 @@ -111,6 +111,10 @@ List the mail queue. See the \fBmailq\fR command above. .IP \fB-bs\fR Stand-alone SMTP server mode. Read SMTP commands from standard input, and write responses to standard output. +In stand-alone SMTP server mode, UCE restrictions and +access controls are disabled by default. To enable them, +run the process as the \fBmail_owner\fR user. +.sp This mode of operation is implemented by running the \fBsmtpd\fR(8) daemon. .IP "\fB-f \fIsender\fR" diff --git a/gnu/dist/postfix/man/man5/access.5 b/gnu/dist/postfix/man/man5/access.5 index 0c964490927..43846a08b17 100644 --- a/gnu/dist/postfix/man/man5/access.5 +++ b/gnu/dist/postfix/man/man5/access.5 @@ -55,13 +55,13 @@ tables such as NIS, LDAP or SQL, the following lookup patterns are examined in the order as listed: .IP \fIuser\fR@\fIdomain\fR Matches the specified mail address. -.IP \fIdomain.name\fR -Matches \fIdomain.name\fR as the domain part of an email address. +.IP \fIdomain.tld\fR +Matches \fIdomain.tld\fR as the domain part of an email address. .sp -The pattern \fIdomain.name\fR also matches subdomains, but only +The pattern \fIdomain.tld\fR also matches subdomains, but only when the string \fBsmtpd_access_maps\fR is listed in the Postfix \fBparent_domain_matches_subdomains\fR configuration setting. -Otherwise, specify \fI.domain.name\fR (note the initial dot) in +Otherwise, specify \fI.domain.tld\fR (note the initial dot) in order to match subdomains. .IP \fIuser\fR@ Matches all mail addresses with the specified user part. @@ -88,13 +88,13 @@ When a mail address localpart contains the optional recipient delimiter With lookups from indexed files such as DB or DBM, or from networked tables such as NIS, LDAP or SQL, the following lookup patterns are examined in the order as listed: -.IP \fIdomain.name\fR -Matches \fIdomain.name\fR. +.IP \fIdomain.tld\fR +Matches \fIdomain.tld\fR. .sp -The pattern \fIdomain.name\fR also matches subdomains, but only +The pattern \fIdomain.tld\fR also matches subdomains, but only when the string \fBsmtpd_access_maps\fR is listed in the Postfix \fBparent_domain_matches_subdomains\fR configuration setting. -Otherwise, specify \fI.domain.name\fR (note the initial dot) in +Otherwise, specify \fI.domain.tld\fR (note the initial dot) in order to match subdomains. .IP \fInet.work.addr.ess\fR .IP \fInet.work.addr\fR @@ -119,7 +119,7 @@ Accept the address etc. that matches the pattern. An all-numerical result is treated as OK. This format is generated by address-based relay authorization schemes. .IP \fIrestriction...\fR -Apply the named UCE restriction(s) (\fBpermit\fR, \fRreject\fR, +Apply the named UCE restriction(s) (\fBpermit\fR, \fBreject\fR, \fBreject_unauth_destination\fR, and so on). .SH REGULAR EXPRESSION TABLES .na diff --git a/gnu/dist/postfix/man/man5/transport.5 b/gnu/dist/postfix/man/man5/transport.5 index d292c2916a4..ba6a41e1aed 100644 --- a/gnu/dist/postfix/man/man5/transport.5 +++ b/gnu/dist/postfix/man/man5/transport.5 @@ -156,9 +156,9 @@ this topic. See the Postfix \fBmain.cf\fR file for syntax details and for default values. Use the \fBpostfix reload\fR command after a configuration change. .IP \fBparent_domain_matches_subdomains\fR -List of Postfix features that use \fIdomain.name\fR patterns -to match \fIsub.domain.name\fR (as opposed to -requiring \fI.domain.name\fR patterns). +List of Postfix features that use \fIdomain.tld\fR patterns +to match \fIsub.domain.tld\fR (as opposed to +requiring \fI.domain.tld\fR patterns). .IP \fBtransport_maps\fR List of transport lookup tables. .PP diff --git a/gnu/dist/postfix/man/man8/flush.8 b/gnu/dist/postfix/man/man8/flush.8 index 4aa4eb46ac0..61bd122ea5c 100644 --- a/gnu/dist/postfix/man/man8/flush.8 +++ b/gnu/dist/postfix/man/man8/flush.8 @@ -127,9 +127,9 @@ a send request for the corresponding destination. Remove an empty "fast flush" logfile that was not updated in this amount of time (default time unit: days). .IP \fBparent_domain_matches_subdomains\fR -List of Postfix features that use \fIdomain.name\fR patterns -to match \fIsub.domain.name\fR (as opposed to -requiring \fI.domain.name\fR patterns). +List of Postfix features that use \fIdomain.tld\fR patterns +to match \fIsub.domain.tld\fR (as opposed to +requiring \fI.domain.tld\fR patterns). .SH SEE ALSO .na .nf diff --git a/gnu/dist/postfix/man/man8/nqmgr.8 b/gnu/dist/postfix/man/man8/nqmgr.8 index 4a36d1df5a6..84a783f40db 100644 --- a/gnu/dist/postfix/man/man8/nqmgr.8 +++ b/gnu/dist/postfix/man/man8/nqmgr.8 @@ -208,13 +208,13 @@ messages delivered by the transport \fItransport\fR can have. .SH "Timing controls" .ad .fi -.IP \fBmin_backoff\fR +.IP \fBminimal_backoff_time\fR Minimal time in seconds between delivery attempts of a deferred message. .sp This parameter also limits the time an unreachable destination is kept in the short-term, in-memory destination status cache. -.IP \fBmax_backoff\fR +.IP \fBmaximal_backoff_time\fR Maximal time in seconds between delivery attempts of a deferred message. .IP \fBmaximal_queue_lifetime\fR diff --git a/gnu/dist/postfix/man/man8/qmgr.8 b/gnu/dist/postfix/man/man8/qmgr.8 index c0cb2ad961c..44b1492c656 100644 --- a/gnu/dist/postfix/man/man8/qmgr.8 +++ b/gnu/dist/postfix/man/man8/qmgr.8 @@ -189,13 +189,13 @@ destination cache. .SH "Timing controls" .ad .fi -.IP \fBmin_backoff\fR +.IP \fBminimal_backoff_time\fR Minimal time in seconds between delivery attempts of a deferred message. .sp This parameter also limits the time an unreachable destination is kept in the short-term, in-memory destination status cache. -.IP \fBmax_backoff\fR +.IP \fBmaximal_backoff_time\fR Maximal time in seconds between delivery attempts of a deferred message. .IP \fBmaximal_queue_lifetime\fR diff --git a/gnu/dist/postfix/man/man8/smtp.8 b/gnu/dist/postfix/man/man8/smtp.8 index c111772b1a9..6500a50ebd2 100644 --- a/gnu/dist/postfix/man/man8/smtp.8 +++ b/gnu/dist/postfix/man/man8/smtp.8 @@ -113,8 +113,8 @@ Always send EHLO at the start of a connection. Never send EHLO at the start of a connection. .IP \fBsmtp_bind_address\fR Numerical source network address to bind to when making a connection. -.IP \fBsmtp_break_lines\fR -Break lines > \fB$line_length_limit\fR into multiple shorter lines. +.IP \fBsmtp_line_length_limit\fR +Length limit for SMTP message content lines. Zero means no limit. Some SMTP servers misbehave on long lines. .IP \fBsmtp_skip_4xx_greeting\fR Skip servers that greet us with a 4xx status code. @@ -129,7 +129,7 @@ around the CISCO PIX firewall <CR><LF>.<CR><LF> bug. The time a message must be queued before the CISCO PIX firewall <CR><LF>.<CR><LF> bug workaround is turned on. .SH "Authentication controls" -.IP \fBsmtp_enable_sasl_auth\fR +.IP \fBsmtp_sasl_auth_enable\fR Enable per-session authentication as per RFC 2554 (SASL). By default, Postfix is built without SASL support. .IP \fBsmtp_sasl_password_maps\fR diff --git a/gnu/dist/postfix/man/man8/smtpd.8 b/gnu/dist/postfix/man/man8/smtpd.8 index 73814bedab6..c4e69063330 100644 --- a/gnu/dist/postfix/man/man8/smtpd.8 +++ b/gnu/dist/postfix/man/man8/smtpd.8 @@ -195,9 +195,9 @@ it is penalized with tarpit delays. .ad .fi .IP \fBparent_domain_matches_subdomains\fR -List of Postfix features that use \fIdomain.name\fR patterns -to match \fIsub.domain.name\fR (as opposed to -requiring \fI.domain.name\fR patterns). +List of Postfix features that use \fIdomain.tld\fR patterns +to match \fIsub.domain.tld\fR (as opposed to +requiring \fI.domain.tld\fR patterns). .IP \fBsmtpd_client_restrictions\fR Restrict what clients may connect to this mail system. .IP \fBsmtpd_helo_required\fR diff --git a/gnu/dist/postfix/man/man8/trivial-rewrite.8 b/gnu/dist/postfix/man/man8/trivial-rewrite.8 index 3aa705f575e..eee387c6694 100644 --- a/gnu/dist/postfix/man/man8/trivial-rewrite.8 +++ b/gnu/dist/postfix/man/man8/trivial-rewrite.8 @@ -80,6 +80,12 @@ This information is used to determine if List of domains that this machine considers local. .IP \fBmyorigin\fR The domain that locally-posted mail appears to come from. +.IP \fBresolve_unquoted_address\fR +When resolving an address, do not quote the address localpart as +per RFC 822, so that additional \fB@\fR, \fB%\fR or \fB!\fR +characters remain visible. This is technically incorrect, but +allows us to stop relay attacks when forwarding mail to a Sendmail +primary MX host. .SH Rewriting .ad .fi @@ -109,9 +115,9 @@ The default transport is \fBsmtp\fR. Syntax is \fItransport\fR:\fInexthop\fR; see \fBtransport\fR(5) for details. The :\fInexthop\fR part is optional. .IP \fBparent_domain_matches_subdomains\fR -List of Postfix features that use \fIdomain.name\fR patterns -to match \fIsub.domain.name\fR (as opposed to -requiring \fI.domain.name\fR patterns). +List of Postfix features that use \fIdomain.tld\fR patterns +to match \fIsub.domain.tld\fR (as opposed to +requiring \fI.domain.tld\fR patterns). .IP \fBrelayhost\fR The default host to send non-local mail to when no entry is matched in the \fBtransport\fR(5) table. diff --git a/gnu/dist/postfix/postfix-install b/gnu/dist/postfix/postfix-install index 66bbd557169..964dcdacb98 100644 --- a/gnu/dist/postfix/postfix-install +++ b/gnu/dist/postfix/postfix-install @@ -174,7 +174,7 @@ do case $arg in *=*) IFS= eval $arg; IFS="$BACKUP_IFS";; -non-int*) non_interactive=1;; - *) echo $0: Error: $USAGE 1>&2; exit 1;; + *) echo "$0: Error: $USAGE" 1>&2; exit 1;; esac shift done diff --git a/gnu/dist/postfix/proto/access b/gnu/dist/postfix/proto/access index 36713ab09a4..cdb44596633 100644 --- a/gnu/dist/postfix/proto/access +++ b/gnu/dist/postfix/proto/access @@ -45,13 +45,13 @@ # examined in the order as listed: # .IP \fIuser\fR@\fIdomain\fR # Matches the specified mail address. -# .IP \fIdomain.name\fR -# Matches \fIdomain.name\fR as the domain part of an email address. +# .IP \fIdomain.tld\fR +# Matches \fIdomain.tld\fR as the domain part of an email address. # .sp -# The pattern \fIdomain.name\fR also matches subdomains, but only +# The pattern \fIdomain.tld\fR also matches subdomains, but only # when the string \fBsmtpd_access_maps\fR is listed in the Postfix # \fBparent_domain_matches_subdomains\fR configuration setting. -# Otherwise, specify \fI.domain.name\fR (note the initial dot) in +# Otherwise, specify \fI.domain.tld\fR (note the initial dot) in # order to match subdomains. # .IP \fIuser\fR@ # Matches all mail addresses with the specified user part. @@ -74,13 +74,13 @@ # With lookups from indexed files such as DB or DBM, or from networked # tables such as NIS, LDAP or SQL, the following lookup patterns are # examined in the order as listed: -# .IP \fIdomain.name\fR -# Matches \fIdomain.name\fR. +# .IP \fIdomain.tld\fR +# Matches \fIdomain.tld\fR. # .sp -# The pattern \fIdomain.name\fR also matches subdomains, but only +# The pattern \fIdomain.tld\fR also matches subdomains, but only # when the string \fBsmtpd_access_maps\fR is listed in the Postfix # \fBparent_domain_matches_subdomains\fR configuration setting. -# Otherwise, specify \fI.domain.name\fR (note the initial dot) in +# Otherwise, specify \fI.domain.tld\fR (note the initial dot) in # order to match subdomains. # .IP \fInet.work.addr.ess\fR # .IP \fInet.work.addr\fR @@ -103,7 +103,7 @@ # An all-numerical result is treated as OK. This format is # generated by address-based relay authorization schemes. # .IP \fIrestriction...\fR -# Apply the named UCE restriction(s) (\fBpermit\fR, \fRreject\fR, +# Apply the named UCE restriction(s) (\fBpermit\fR, \fBreject\fR, # \fBreject_unauth_destination\fR, and so on). # REGULAR EXPRESSION TABLES # .ad diff --git a/gnu/dist/postfix/proto/transport b/gnu/dist/postfix/proto/transport index 18559faa9c6..358eb69091a 100644 --- a/gnu/dist/postfix/proto/transport +++ b/gnu/dist/postfix/proto/transport @@ -142,9 +142,9 @@ # and for default values. Use the \fBpostfix reload\fR command after # a configuration change. # .IP \fBparent_domain_matches_subdomains\fR -# List of Postfix features that use \fIdomain.name\fR patterns -# to match \fIsub.domain.name\fR (as opposed to -# requiring \fI.domain.name\fR patterns). +# List of Postfix features that use \fIdomain.tld\fR patterns +# to match \fIsub.domain.tld\fR (as opposed to +# requiring \fI.domain.tld\fR patterns). # .IP \fBtransport_maps\fR # List of transport lookup tables. # .PP diff --git a/gnu/dist/postfix/src/bounce/Makefile.in b/gnu/dist/postfix/src/bounce/Makefile.in index 66066c2330f..99e6d1af457 100644 --- a/gnu/dist/postfix/src/bounce/Makefile.in +++ b/gnu/dist/postfix/src/bounce/Makefile.in @@ -83,6 +83,7 @@ bounce_append_service.o: ../../include/vstream.h bounce_append_service.o: ../../include/stringops.h bounce_append_service.o: ../../include/mail_queue.h bounce_append_service.o: ../../include/quote_822_local.h +bounce_append_service.o: ../../include/quote_flags.h bounce_append_service.o: ../../include/deliver_flock.h bounce_append_service.o: ../../include/myflock.h bounce_append_service.o: bounce_service.h @@ -123,6 +124,7 @@ bounce_notify_util.o: ../../include/vstream.h bounce_notify_util.o: ../../include/line_wrap.h bounce_notify_util.o: ../../include/mail_queue.h bounce_notify_util.o: ../../include/quote_822_local.h +bounce_notify_util.o: ../../include/quote_flags.h bounce_notify_util.o: ../../include/mail_params.h bounce_notify_util.o: ../../include/is_header.h bounce_notify_util.o: ../../include/record.h diff --git a/gnu/dist/postfix/src/bounce/bounce_append_service.c b/gnu/dist/postfix/src/bounce/bounce_append_service.c index a309ee99778..82620f02b76 100644 --- a/gnu/dist/postfix/src/bounce/bounce_append_service.c +++ b/gnu/dist/postfix/src/bounce/bounce_append_service.c @@ -91,6 +91,12 @@ int bounce_append_service(char *service, char *queue_id, * file format because we do not need anything more complicated. As a * benefit, we can still recover some data when the file is a little * garbled. + * + * XXX addresses in defer logfiles are in printable quoted form, while + * addresses in message envelope records are in raw unquoted form. This + * may change once we replace the present ad-hoc bounce/defer logfile + * format by one that is transparent for control etc. characters. See + * also: showq/showq.c. */ if ((orig_length = vstream_fseek(log, 0L, SEEK_END)) < 0) msg_fatal("seek file %s %s: %m", service, queue_id); @@ -98,6 +104,8 @@ int bounce_append_service(char *service, char *queue_id, if (*recipient) vstream_fprintf(log, "<%s>: ", printable(vstring_str(quote_822_local(in_buf, recipient)), '?')); + else + vstream_fprintf(log, "<>: "); vstream_fputs(printable(why, '?'), log); vstream_fputs("\n\n", log); diff --git a/gnu/dist/postfix/src/cleanup/Makefile.in b/gnu/dist/postfix/src/cleanup/Makefile.in index cec834caa00..02ab36707b6 100644 --- a/gnu/dist/postfix/src/cleanup/Makefile.in +++ b/gnu/dist/postfix/src/cleanup/Makefile.in @@ -184,6 +184,7 @@ cleanup_map11.o: ../../include/cleanup_user.h cleanup_map11.o: ../../include/mail_addr_map.h cleanup_map11.o: ../../include/maps.h cleanup_map11.o: ../../include/quote_822_local.h +cleanup_map11.o: ../../include/quote_flags.h cleanup_map11.o: cleanup.h cleanup_map11.o: ../../include/tok822.h cleanup_map11.o: ../../include/resolve_clnt.h @@ -203,6 +204,7 @@ cleanup_map1n.o: ../../include/mail_addr_map.h cleanup_map1n.o: ../../include/maps.h cleanup_map1n.o: ../../include/cleanup_user.h cleanup_map1n.o: ../../include/quote_822_local.h +cleanup_map1n.o: ../../include/quote_flags.h cleanup_map1n.o: ../../include/been_here.h cleanup_map1n.o: cleanup.h cleanup_map1n.o: ../../include/tok822.h @@ -222,6 +224,7 @@ cleanup_masquerade.o: ../../include/mail_params.h cleanup_masquerade.o: ../../include/tok822.h cleanup_masquerade.o: ../../include/resolve_clnt.h cleanup_masquerade.o: ../../include/quote_822_local.h +cleanup_masquerade.o: ../../include/quote_flags.h cleanup_masquerade.o: cleanup.h cleanup_masquerade.o: ../../include/vstream.h cleanup_masquerade.o: ../../include/maps.h @@ -245,6 +248,7 @@ cleanup_message.o: ../../include/tok822.h cleanup_message.o: ../../include/resolve_clnt.h cleanup_message.o: ../../include/header_opts.h cleanup_message.o: ../../include/quote_822_local.h +cleanup_message.o: ../../include/quote_flags.h cleanup_message.o: ../../include/mail_params.h cleanup_message.o: ../../include/mail_date.h cleanup_message.o: ../../include/mail_addr.h @@ -265,6 +269,7 @@ cleanup_out.o: ../../include/vstream.h cleanup_out.o: ../../include/record.h cleanup_out.o: ../../include/rec_type.h cleanup_out.o: ../../include/cleanup_user.h +cleanup_out.o: ../../include/mail_params.h cleanup_out.o: cleanup.h cleanup_out.o: ../../include/argv.h cleanup_out.o: ../../include/maps.h @@ -300,6 +305,7 @@ cleanup_rewrite.o: ../../include/tok822.h cleanup_rewrite.o: ../../include/resolve_clnt.h cleanup_rewrite.o: ../../include/rewrite_clnt.h cleanup_rewrite.o: ../../include/quote_822_local.h +cleanup_rewrite.o: ../../include/quote_flags.h cleanup_rewrite.o: cleanup.h cleanup_rewrite.o: ../../include/vstream.h cleanup_rewrite.o: ../../include/argv.h diff --git a/gnu/dist/postfix/src/cleanup/cleanup_map1n.c b/gnu/dist/postfix/src/cleanup/cleanup_map1n.c index d7176a43404..f94e08e2724 100644 --- a/gnu/dist/postfix/src/cleanup/cleanup_map1n.c +++ b/gnu/dist/postfix/src/cleanup/cleanup_map1n.c @@ -112,7 +112,8 @@ ARGV *cleanup_map1n_internal(CLEANUP_STATE *state, char *addr, state->queue_id, maps->title, addr); break; } - if ((lookup = mail_addr_map(maps, argv->argv[arg], propagate)) != 0) { + quote_822_local(state->temp1, argv->argv[arg]); + if ((lookup = mail_addr_map(maps, STR(state->temp1), propagate)) != 0) { saved_lhs = mystrdup(argv->argv[arg]); for (i = 0; i < lookup->argc; i++) { unquote_822_local(state->temp1, lookup->argv[i]); diff --git a/gnu/dist/postfix/src/cleanup/cleanup_message.c b/gnu/dist/postfix/src/cleanup/cleanup_message.c index fca690451bc..f75a72eef0a 100644 --- a/gnu/dist/postfix/src/cleanup/cleanup_message.c +++ b/gnu/dist/postfix/src/cleanup/cleanup_message.c @@ -254,31 +254,52 @@ static void cleanup_rewrite_recip(CLEANUP_STATE *state, HEADER_OPTS *hdr_opts) cleanup_fold_header(state); } -/* cleanup_check_reject - parse and match header/body REJECT line */ +/* cleanup_act - act upon a header/body match */ -static int cleanup_check_reject(CLEANUP_STATE *state, const char *value) +static int cleanup_act(CLEANUP_STATE *state, char *context, char *buf, + const char *value, const char *map_class) { - const char *reason = value + strcspn(value, " \t"); + const char *optional_text = value + strcspn(value, " \t"); + int command_len = optional_text - value; - /* - * See if they spelled REJECT right. - * - * XXX The reason should be set only if we have a more severe error than - * anything that was found before. This calls for a cleanup_set_error() - * routine that takes an error code and an optional text. - */ - if (strncasecmp(value, "REJECT", reason - value) == 0) { - if (state->reason == 0) { - while (*reason && ISSPACE(*reason)) - reason++; - state->reason = mystrdup(*reason ? reason : + while (*optional_text && ISSPACE(*optional_text)) + optional_text++; + +#define STREQUAL(x,y,l) (strncasecmp((x), (y), (l)) == 0 && (y)[l] == 0) +#define CLEANUP_ACT_KEEP 1 +#define CLEANUP_ACT_DROP 0 + + if (STREQUAL(value, "REJECT", command_len)) { + if (state->reason == 0) + state->reason = mystrdup(*optional_text ? optional_text : cleanup_strerror(CLEANUP_STAT_CONT)); - } state->errs |= CLEANUP_STAT_CONT; - return (1); - } else { - return (0); + msg_info("%s: reject: %s %.200s; from=<%s> to=<%s>: %s", + state->queue_id, context, buf, state->sender, + state->recip ? state->recip : "unknown", + state->reason); + return (CLEANUP_ACT_KEEP); + } + if (STREQUAL(value, "WARN", command_len)) { + msg_info("%s: warning: %s %.200s; from=<%s> to=<%s>: %s", + state->queue_id, context, buf, state->sender, + state->recip ? state->recip : "unknown", + *optional_text ? optional_text : + cleanup_strerror(CLEANUP_STAT_CONT)); + return (CLEANUP_ACT_KEEP); } + if (*optional_text) + msg_warn("unexpected text after command in %s map: %s", + map_class, value); + + if (STREQUAL(value, "IGNORE", command_len)) + return (CLEANUP_ACT_DROP); + + if (STREQUAL(value, "OK", command_len)) + return (CLEANUP_ACT_KEEP); + + msg_warn("unknown command in %s map: %s", map_class, value); + return (CLEANUP_ACT_KEEP); } /* cleanup_header - process one complete header line */ @@ -296,18 +317,9 @@ static void cleanup_header(CLEANUP_STATE *state) const char *value; if ((value = maps_find(cleanup_header_checks, header, 0)) != 0) { - if (cleanup_check_reject(state, value) != 0) { - msg_info("%s: reject: header %.200s; from=<%s> to=<%s>: %s", - state->queue_id, header, state->sender, - state->recip ? state->recip : "unknown", - state->reason); - } else if (strcasecmp(value, "IGNORE") == 0) { + if (cleanup_act(state, "header", header, value, VAR_HEADER_CHECKS) + == CLEANUP_ACT_DROP) return; - } else if (strcasecmp(value, "WARN") == 0) { - msg_info("%s: warning: header %.200s; from=<%s> to=<%s>", - state->queue_id, header, state->sender, - state->recip ? state->recip : "unknown"); - } } } @@ -506,23 +518,36 @@ static void cleanup_message_header(CLEANUP_STATE *state, int type, char *buf, in /* * First, deal with header information that we have accumulated from - * previous input records. A whole record that starts with whitespace is - * a continuation of previous data. + * previous input records. * - * XXX Silently switch to body processing when some message header requires - * an unreasonable amount of storage, or when a message header record - * does not fit in a REC_TYPE_NORM type record. + * If a physical header line exceeds the capacity of a Postfix queue file + * record, reconstruct the long line from multiple records (up to the + * header size limit), and break the long line up into multiple Postfix + * records upon output to the queue file. Discard text that does not fit + * in a header buffer, so as to avoid breaking MIME formatting. + * + * It is left up to delivery agents to glue long lines back together and to + * enforce an appropriate output line length limit. */ if (VSTRING_LEN(state->header_buf) > 0) { - if ((VSTRING_LEN(state->header_buf) >= var_header_limit - || type == REC_TYPE_CONT)) { - state->errs |= CLEANUP_STAT_HOVFL; - } else if (type == REC_TYPE_NORM && ISSPACE(*buf)) { - VSTRING_ADDCH(state->header_buf, '\n'); - vstring_strcat(state->header_buf, buf); - return; - } else { - /* Body record or end of message segment. */ ; + if (type != REC_TYPE_XTRA) { + if (state->long_header) { + if (VSTRING_LEN(state->header_buf) < var_header_limit) + vstring_strcat(state->header_buf, buf); + else + state->errs |= CLEANUP_STAT_HOVFL; + state->long_header = (type == REC_TYPE_CONT); + return; + } + if (ISSPACE(*buf)) { + if (VSTRING_LEN(state->header_buf) < var_header_limit) { + VSTRING_ADDCH(state->header_buf, '\n'); + vstring_strcat(state->header_buf, buf); + } else + state->errs |= CLEANUP_STAT_HOVFL; + state->long_header = (type == REC_TYPE_CONT); + return; + } } /* @@ -535,14 +560,11 @@ static void cleanup_message_header(CLEANUP_STATE *state, int type, char *buf, in } /* - * Switch to body processing if this is not a header or if the saved - * header would require an unreasonable amount of storage. Generate - * missing headers. Add one blank line when the message headers are - * immediately followed by a non-empty message body. + * Switch to body processing if this is not a header. Generate missing + * headers. Add one blank line when the message headers are immediately + * followed by a non-empty message body. */ - if (((state->errs & CLEANUP_STAT_HOVFL) - || type != REC_TYPE_NORM - || !is_header(buf))) { + if (type == REC_TYPE_XTRA || !is_header(buf)) { cleanup_missing_headers(state); if (type != REC_TYPE_XTRA && *buf) /* output blank line */ cleanup_out_string(state, REC_TYPE_NORM, ""); @@ -555,6 +577,7 @@ static void cleanup_message_header(CLEANUP_STATE *state, int type, char *buf, in */ else { vstring_strcpy(state->header_buf, buf); + state->long_header = (type == REC_TYPE_CONT); } } @@ -580,18 +603,9 @@ static void cleanup_message_body(CLEANUP_STATE *state, int type, char *buf, int const char *value; if ((value = maps_find(cleanup_body_checks, buf, 0)) != 0) { - if (cleanup_check_reject(state, value) != 0) { - msg_info("%s: reject: body %.200s; from=<%s> to=<%s>: %s", - state->queue_id, buf, state->sender, - state->recip ? state->recip : "unknown", - state->reason); - } else if (strcasecmp(value, "IGNORE") == 0) { + if (cleanup_act(state, "body", buf, value, VAR_BODY_CHECKS) + == CLEANUP_ACT_DROP) return; - } else if (strcasecmp(value, "WARN") == 0) { - msg_info("%s: warning: body %.200s; from=<%s> to=<%s>", - state->queue_id, buf, state->sender, - state->recip ? state->recip : "unknown"); - } } } cleanup_out(state, type, buf, len); diff --git a/gnu/dist/postfix/src/cleanup/cleanup_out.c b/gnu/dist/postfix/src/cleanup/cleanup_out.c index aa9618dcc8a..a68d274152b 100644 --- a/gnu/dist/postfix/src/cleanup/cleanup_out.c +++ b/gnu/dist/postfix/src/cleanup/cleanup_out.c @@ -77,6 +77,7 @@ #include <record.h> #include <rec_type.h> #include <cleanup_user.h> +#include <mail_params.h> /* Application-specific. */ @@ -86,16 +87,42 @@ void cleanup_out(CLEANUP_STATE *state, int type, char *string, int len) { - if (CLEANUP_OUT_OK(state)) { - if (rec_put(state->dst, type, string, len) < 0) { - if (errno == EFBIG) { - msg_warn("%s: queue file size limit exceeded", - state->queue_id); - state->errs |= CLEANUP_STAT_SIZE; - } else { - msg_warn("%s: write queue file: %m", state->queue_id); - state->errs |= CLEANUP_STAT_WRITE; - } + int err = 0; + + /* + * Long message header lines have to be read and written as multiple + * records. Other header/body content, and envelope data, is copied one + * record at a time. Be sure to not skip a zero-length request. + * + * XXX We don't know if we're writing a message header or not, but that is + * not a problem. A REC_TYPE_NORM or REC_TYPE_CONT record can always be + * chopped up into an equivalent set of REC_TYPE_CONT plus REC_TYPE_NORM + * records. + */ + if (CLEANUP_OUT_OK(state) == 0) + return; + +#define TEXT_RECORD(t) ((t) == REC_TYPE_NORM || (t) == REC_TYPE_CONT) + + do { + if (len > var_line_limit && TEXT_RECORD(type)) { + err = rec_put(state->dst, REC_TYPE_CONT, string, var_line_limit); + string += var_line_limit; + len -= var_line_limit; + } else { + err = rec_put(state->dst, type, string, len); + break; + } + } while (len > 0 && err >= 0); + + if (err < 0) { + if (errno == EFBIG) { + msg_warn("%s: queue file size limit exceeded", + state->queue_id); + state->errs |= CLEANUP_STAT_SIZE; + } else { + msg_warn("%s: write queue file: %m", state->queue_id); + state->errs |= CLEANUP_STAT_WRITE; } } } diff --git a/gnu/dist/postfix/src/cleanup/cleanup_state.c b/gnu/dist/postfix/src/cleanup/cleanup_state.c index 2206d7a42ec..4b14461d9c0 100644 --- a/gnu/dist/postfix/src/cleanup/cleanup_state.c +++ b/gnu/dist/postfix/src/cleanup/cleanup_state.c @@ -72,6 +72,7 @@ CLEANUP_STATE *cleanup_state_alloc(void) state->err_mask = 0; state->header_buf = vstring_alloc(100); state->headers_seen = 0; + state->long_header = 0; state->hop_count = 0; state->recipients = argv_alloc(2); state->resent_recip = argv_alloc(2); diff --git a/gnu/dist/postfix/src/flush/flush.c b/gnu/dist/postfix/src/flush/flush.c index 828681ad24a..78c80b22b37 100644 --- a/gnu/dist/postfix/src/flush/flush.c +++ b/gnu/dist/postfix/src/flush/flush.c @@ -111,9 +111,9 @@ /* Remove an empty "fast flush" logfile that was not updated in /* this amount of time (default time unit: days). /* .IP \fBparent_domain_matches_subdomains\fR -/* List of Postfix features that use \fIdomain.name\fR patterns -/* to match \fIsub.domain.name\fR (as opposed to -/* requiring \fI.domain.name\fR patterns). +/* List of Postfix features that use \fIdomain.tld\fR patterns +/* to match \fIsub.domain.tld\fR (as opposed to +/* requiring \fI.domain.tld\fR patterns). /* SEE ALSO /* smtpd(8) Postfix SMTP server /* qmgr(8) Postfix queue manager @@ -203,7 +203,15 @@ static DOMAIN_LIST *flush_domains; * name space: domain names versus safe-to-use pathnames. */ static int flush_add_path(const char *, const char *); -static int flush_send_path(const char *); +static int flush_send_path(const char *, int); + + /* + * Do we only refresh the per-destination logfile, or do we really request + * mail delivery as if someone sent ETRN? If the latter, we must override + * information about unavailable hosts or unavailable transports. + */ +#define REFRESH_ONLY 0 +#define REFRESH_AND_DELIVER 1 /* flush_site_to_path - convert domain or [addr] to harmless string */ @@ -318,7 +326,7 @@ static int flush_add_path(const char *path, const char *queue_id) /* flush_send_service - flush mail queued for site */ -static int flush_send_service(const char *site) +static int flush_send_service(const char *site, int how) { char *myname = "flush_send_service"; VSTRING *site_path; @@ -337,7 +345,7 @@ static int flush_send_service(const char *site) * Map site name to path name and flush the log. */ site_path = flush_site_to_path((VSTRING *) 0, site); - status = flush_send_path(STR(site_path)); + status = flush_send_path(STR(site_path), how); vstring_free(site_path); return (status); @@ -345,17 +353,20 @@ static int flush_send_service(const char *site) /* flush_send_path - flush logfile file */ -static int flush_send_path(const char *path) +static int flush_send_path(const char *path, int how) { const char *myname = "flush_send_path"; VSTRING *queue_id; VSTRING *queue_file; VSTREAM *log; struct utimbuf tbuf; - static char qmgr_trigger[] = { + static char qmgr_deliver_trigger[] = { QMGR_REQ_SCAN_INCOMING, /* scan incoming queue */ QMGR_REQ_FLUSH_DEAD, /* flush dead site/transport cache */ }; + static char qmgr_refresh_trigger[] = { + QMGR_REQ_SCAN_INCOMING, /* scan incoming queue */ + }; HTABLE *dup_filter; int count; @@ -463,8 +474,12 @@ static int flush_send_path(const char *path) if (count > 0) { if (msg_verbose) msg_info("%s: requesting delivery for logfile %s", myname, path); - mail_trigger(MAIL_CLASS_PUBLIC, MAIL_SERVICE_QUEUE, - qmgr_trigger, sizeof(qmgr_trigger)); + if (how == REFRESH_ONLY) + mail_trigger(MAIL_CLASS_PUBLIC, MAIL_SERVICE_QUEUE, + qmgr_refresh_trigger, sizeof(qmgr_refresh_trigger)); + else + mail_trigger(MAIL_CLASS_PUBLIC, MAIL_SERVICE_QUEUE, + qmgr_deliver_trigger, sizeof(qmgr_deliver_trigger)); } return (FLUSH_STAT_OK); } @@ -503,7 +518,7 @@ static int flush_refresh_service(int max_age) } else if (st.st_atime + max_age < event_time()) { if (msg_verbose) msg_info("%s: flush logfile %s", myname, site_path); - flush_send_path(site_path); + flush_send_path(site_path, REFRESH_ONLY); } else { if (msg_verbose) msg_info("%s: skip logfile %s, unread for <%d hours(s) ", @@ -608,7 +623,8 @@ static void flush_service(VSTREAM *client_stream, char *unused_service, if (attr_scan(client_stream, ATTR_FLAG_STRICT, ATTR_TYPE_STR, MAIL_ATTR_SITE, site, ATTR_TYPE_END) == 1) - status = flush_send_service(lowercase(STR(site))); + status = flush_send_service(lowercase(STR(site)), + REFRESH_AND_DELIVER); attr_print(client_stream, ATTR_FLAG_NONE, ATTR_TYPE_NUM, MAIL_ATTR_STATUS, status, ATTR_TYPE_END); diff --git a/gnu/dist/postfix/src/global/bounce.c b/gnu/dist/postfix/src/global/bounce.c index 805d4c78710..8ac7c0fca5e 100644 --- a/gnu/dist/postfix/src/global/bounce.c +++ b/gnu/dist/postfix/src/global/bounce.c @@ -150,9 +150,10 @@ int vbounce_append(int flags, const char *id, const char *recipient, ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient, ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why), ATTR_TYPE_END) == 0) { - msg_info("%s: to=<%s>, relay=%s, delay=%d, status=%s (%s)", + msg_info("%s: to=<%s>, relay=%s, delay=%d, status=%s (%s%s)", id, recipient, relay, delay, var_soft_bounce ? "deferred" : - "bounced", vstring_str(why)); + "bounced", var_soft_bounce ? "SOFT BOUNCE - " : "", + vstring_str(why)); status = (var_soft_bounce ? -1 : 0); } else if ((flags & BOUNCE_FLAG_CLEAN) == 0) { status = defer_append(flags, id, recipient, "bounce", delay, diff --git a/gnu/dist/postfix/src/global/mail_addr_map.c b/gnu/dist/postfix/src/global/mail_addr_map.c index 6496ac99c59..7d05d0a885e 100644 --- a/gnu/dist/postfix/src/global/mail_addr_map.c +++ b/gnu/dist/postfix/src/global/mail_addr_map.c @@ -94,7 +94,7 @@ ARGV *mail_addr_map(MAPS *path, const char *address, int propagate) */ if (*string == '@') { buffer = vstring_alloc(100); - if ((ratsign = strchr(address, '@')) != 0) + if ((ratsign = strrchr(address, '@')) != 0) vstring_strncpy(buffer, address, ratsign - address); else vstring_strcpy(buffer, address); diff --git a/gnu/dist/postfix/src/global/mail_version.h b/gnu/dist/postfix/src/global/mail_version.h index 258ba11e5bc..3f6485b312a 100644 --- a/gnu/dist/postfix/src/global/mail_version.h +++ b/gnu/dist/postfix/src/global/mail_version.h @@ -21,18 +21,14 @@ * release date only, unless they include the same bugfix as a patch release. */ #define VAR_MAIL_VERSION "mail_version" -#ifdef SNAPSHOT -#define DEF_MAIL_VERSION "1.1.3-$mail_release_date" -#else -#define DEF_MAIL_VERSION "1.1.3" -#endif +#define DEF_MAIL_VERSION "1.1.11" extern char *var_mail_version; /* * Release date. */ #define VAR_MAIL_RELEASE "mail_release_date" -#define DEF_MAIL_RELEASE "20020201" +#define DEF_MAIL_RELEASE "20020528" extern char *var_mail_release; /* LICENSE diff --git a/gnu/dist/postfix/src/global/mkmap_open.c b/gnu/dist/postfix/src/global/mkmap_open.c index 593f7631739..e2cd167176d 100644 --- a/gnu/dist/postfix/src/global/mkmap_open.c +++ b/gnu/dist/postfix/src/global/mkmap_open.c @@ -124,7 +124,7 @@ void mkmap_close(MKMAP *mkmap) /* mkmap_open - create or truncate database */ MKMAP *mkmap_open(const char *type, const char *path, - int open_flags, int dict_flags) + int open_flags, int dict_flags) { MKMAP *mkmap; MKMAP_OPEN_INFO *mp; @@ -164,7 +164,8 @@ MKMAP *mkmap_open(const char *type, const char *path, * needed because the underlying routines read as well as write. */ mkmap->dict = mkmap->open(path, open_flags, dict_flags); - mkmap->dict->fd = -1; /* XXX just in case */ + mkmap->dict->lock_fd = -1; /* XXX just in case */ + mkmap->dict->stat_fd = -1; /* XXX just in case */ mkmap->dict->flags |= DICT_FLAG_DUP_WARN; return (mkmap); } diff --git a/gnu/dist/postfix/src/global/pipe_command.c b/gnu/dist/postfix/src/global/pipe_command.c index 11f68b32544..7cee11d7fa5 100644 --- a/gnu/dist/postfix/src/global/pipe_command.c +++ b/gnu/dist/postfix/src/global/pipe_command.c @@ -368,6 +368,7 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) * system a chance to recover, and try again later. */ case -1: + msg_warn("fork: %m"); vstring_sprintf(why, "Delivery failed: %m"); return (PIPE_STAT_DEFER); diff --git a/gnu/dist/postfix/src/global/quote_821_local.c b/gnu/dist/postfix/src/global/quote_821_local.c index 16f01253303..db176e3e219 100644 --- a/gnu/dist/postfix/src/global/quote_821_local.c +++ b/gnu/dist/postfix/src/global/quote_821_local.c @@ -9,16 +9,33 @@ /* VSTRING *quote_821_local(dst, src) /* VSTRING *dst; /* char *src; +/* +/* VSTRING *quote_821_local_flags(dst, src, flags) +/* VSTRING *dst; +/* char *src; +/* int flags; /* DESCRIPTION /* quote_821_local() quotes the local part of a mailbox address and /* returns a result that can be used in SMTP commands as specified -/* by RFC 821. +/* by RFC 821. It implements an 8-bit clean version of RFC 821. +/* +/* quote_821_local_flags() provides finer control. /* /* Arguments: /* .IP dst /* The result. /* .IP src /* The input address. +/* .IP flags +/* Bit-wise OR of zero or more of the following. +/* .RS +/* .IP QUOTE_FLAG_8BITCLEAN +/* In violation with RFCs, treat 8-bit text as ordinary text. +/* .IP QUOTE_FLAG_EXPOSE_AT +/* In violation with RFCs, treat `@' as an ordinary character. +/* .IP QUOTE_FLAG_APPEND +/* Append to the result buffer, instead of overwriting it. +/* .RE /* STANDARDS /* RFC 821 (SMTP protocol) /* BUGS @@ -55,7 +72,7 @@ /* is_821_dot_string - is this local-part an rfc 821 dot-string? */ -static int is_821_dot_string(char *local_part, char *end) +static int is_821_dot_string(char *local_part, char *end, int flags) { char *cp; int ch; @@ -70,7 +87,7 @@ static int is_821_dot_string(char *local_part, char *end) for (cp = local_part; cp < end && (ch = *(unsigned char *) cp) != 0; cp++) { if (ch == '.' && cp[1] == '.') return (NO); - if (ch > 127) + if (ch > 127 && !(flags & QUOTE_FLAG_8BITCLEAN)) return (NO); if (ch == ' ') return (NO); @@ -81,7 +98,7 @@ static int is_821_dot_string(char *local_part, char *end) || ch == '[' || ch == ']' || ch == '\\' || ch == ',' || ch == ';' || ch == ':' - /* || ch == '@' */ || ch == '"') + || (ch == '@' && !(flags & QUOTE_FLAG_EXPOSE_AT)) || ch == '"') return (NO); } if (cp[-1] == '.') @@ -91,7 +108,8 @@ static int is_821_dot_string(char *local_part, char *end) /* make_821_quoted_string - make quoted-string from local-part */ -static VSTRING *make_821_quoted_string(VSTRING *dst, char *local_part, char *end) +static VSTRING *make_821_quoted_string(VSTRING *dst, char *local_part, + char *end, int flags) { char *cp; int ch; @@ -100,10 +118,10 @@ static VSTRING *make_821_quoted_string(VSTRING *dst, char *local_part, char *end * Put quotes around the result, and prepend a backslash to characters * that need quoting when they occur in a quoted-string. */ - VSTRING_RESET(dst); VSTRING_ADDCH(dst, '"'); for (cp = local_part; cp < end && (ch = *cp) != 0; cp++) { - if (ch > 127 || ch == '\r' || ch == '\n' || ch == '"' || ch == '\\') + if ((ch > 127 && !(flags & QUOTE_FLAG_8BITCLEAN)) + || ch == '\r' || ch == '\n' || ch == '"' || ch == '\\') VSTRING_ADDCH(dst, '\\'); VSTRING_ADDCH(dst, ch); } @@ -112,9 +130,9 @@ static VSTRING *make_821_quoted_string(VSTRING *dst, char *local_part, char *end return (dst); } -/* quote_821_local - quote local part of address according to rfc 821 */ +/* quote_821_local_flags - quote local part of address according to rfc 821 */ -VSTRING *quote_821_local(VSTRING *dst, char *addr) +VSTRING *quote_821_local_flags(VSTRING *dst, char *addr, int flags) { char *at; @@ -125,10 +143,12 @@ VSTRING *quote_821_local(VSTRING *dst, char *addr) */ if ((at = strrchr(addr, '@')) == 0) /* just in case */ at = addr + strlen(addr); /* should not happen */ - if (is_821_dot_string(addr, at)) { - return (vstring_strcpy(dst, addr)); + if ((flags & QUOTE_FLAG_APPEND) == 0) + VSTRING_RESET(dst); + if (is_821_dot_string(addr, at, flags)) { + return (vstring_strcat(dst, addr)); } else { - make_821_quoted_string(dst, addr, at); + make_821_quoted_string(dst, addr, at, flags & QUOTE_FLAG_8BITCLEAN); return (vstring_strcat(dst, at)); } } diff --git a/gnu/dist/postfix/src/global/quote_821_local.h b/gnu/dist/postfix/src/global/quote_821_local.h index 09aca76a072..d1e91e56235 100644 --- a/gnu/dist/postfix/src/global/quote_821_local.h +++ b/gnu/dist/postfix/src/global/quote_821_local.h @@ -14,9 +14,16 @@ #include <vstring.h> /* + * Global library. + */ +#include <quote_flags.h> + + /* * External interface. */ -extern VSTRING *quote_821_local(VSTRING *, char *); +extern VSTRING *quote_821_local_flags(VSTRING *, char *, int); +#define quote_821_local(dst, src) \ + quote_821_local_flags((dst), (src), QUOTE_FLAG_8BITCLEAN) /* LICENSE /* .ad diff --git a/gnu/dist/postfix/src/global/quote_822_local.c b/gnu/dist/postfix/src/global/quote_822_local.c index 48f37bd8d88..5f4672f7423 100644 --- a/gnu/dist/postfix/src/global/quote_822_local.c +++ b/gnu/dist/postfix/src/global/quote_822_local.c @@ -10,6 +10,11 @@ /* VSTRING *dst; /* const char *src; /* +/* VSTRING *quote_822_local_flags(dst, src, flags) +/* VSTRING *dst; +/* const char *src; +/* int flags; +/* /* VSTRING *unquote_822_local(dst, src) /* VSTRING *dst; /* const char *src; @@ -17,7 +22,9 @@ /* quote_822_local() quotes the local part of a mailbox and /* returns a result that can be used in message headers as /* specified by RFC 822 (actually, an 8-bit clean version of -/* RFC 822). +/* RFC 822). It implements an 8-bit clean version of RFC 822. +/* +/* quote_822_local_flags() provides finer control. /* /* unquote_822_local() transforms the local part of a mailbox /* address to unquoted (internal) form. @@ -27,6 +34,16 @@ /* The result. /* .IP src /* The input address. +/* .IP flags +/* Bit-wise OR of zero or more of the following. +/* .RS +/* .IP QUOTE_FLAG_8BITCLEAN +/* In violation with RFCs, treat 8-bit text as ordinary text. +/* .IP QUOTE_FLAG_EXPOSE_AT +/* In violation with RFCs, treat `@' as an ordinary character. +/* .IP QUOTE_FLAG_APPEND +/* Append to the result buffer, instead of overwriting it. +/* .RE /* STANDARDS /* RFC 822 (ARPA Internet Text Messages) /* BUGS @@ -65,7 +82,7 @@ /* is_822_dot_string - is this local-part an rfc 822 dot-string? */ -static int is_822_dot_string(const char *local_part, const char *end) +static int is_822_dot_string(const char *local_part, const char *end, int flags) { const char *cp; int ch; @@ -83,17 +100,15 @@ static int is_822_dot_string(const char *local_part, const char *end) for (cp = local_part; cp < end && (ch = *(unsigned char *) cp) != 0; cp++) { if (ch == '.' && (cp + 1) < end && cp[1] == '.') return (NO); -#if 0 - if (ch > 127) + if (ch > 127 && !(flags & QUOTE_FLAG_8BITCLEAN)) return (NO); -#endif if (ch == ' ') return (NO); if (ISCNTRL(ch)) return (NO); if (ch == '(' || ch == ')' || ch == '<' || ch == '>' - /* || ch == '@' */ || ch == ',' + || (ch == '@' && !(flags & QUOTE_FLAG_EXPOSE_AT)) || ch == ',' || ch == ';' || ch == ':' || ch == '\\' || ch == '"' || ch == '[' || ch == ']') @@ -107,7 +122,7 @@ static int is_822_dot_string(const char *local_part, const char *end) /* make_822_quoted_string - make quoted-string from local-part */ static VSTRING *make_822_quoted_string(VSTRING *dst, const char *local_part, - const char *end) + const char *end, int flags) { const char *cp; int ch; @@ -118,7 +133,8 @@ static VSTRING *make_822_quoted_string(VSTRING *dst, const char *local_part, */ VSTRING_ADDCH(dst, '"'); for (cp = local_part; cp < end && (ch = *cp) != 0; cp++) { - if ( /* ch > 127 || */ ch == '"' || ch == '\\' || ch == '\r') + if ((ch > 127 && !(flags & QUOTE_FLAG_8BITCLEAN)) + || ch == '"' || ch == '\\' || ch == '\r') VSTRING_ADDCH(dst, '\\'); VSTRING_ADDCH(dst, ch); } @@ -126,9 +142,9 @@ static VSTRING *make_822_quoted_string(VSTRING *dst, const char *local_part, return (dst); } -/* quote_822_local - quote local part of mailbox according to rfc 822 */ +/* quote_822_local_flags - quote local part of mailbox according to rfc 822 */ -VSTRING *quote_822_local(VSTRING *dst, const char *mbox) +VSTRING *quote_822_local_flags(VSTRING *dst, const char *mbox, int flags) { const char *start; /* first byte of localpart */ const char *end; /* first byte after localpart */ @@ -146,11 +162,13 @@ VSTRING *quote_822_local(VSTRING *dst, const char *mbox) start = mbox; if ((end = strrchr(start, '@')) == 0) end = start + strlen(start); - if (is_822_dot_string(start, end)) { - return (vstring_strcpy(dst, mbox)); + if ((flags & QUOTE_FLAG_APPEND) == 0) + VSTRING_RESET(dst); + if (is_822_dot_string(start, end, flags)) { + return (vstring_strcat(dst, mbox)); } else { - vstring_strncpy(dst, mbox, start - mbox); - make_822_quoted_string(dst, start, end); + vstring_strncat(dst, mbox, start - mbox); + make_822_quoted_string(dst, start, end, flags & QUOTE_FLAG_8BITCLEAN); return (vstring_strcat(dst, end)); } } diff --git a/gnu/dist/postfix/src/global/quote_822_local.h b/gnu/dist/postfix/src/global/quote_822_local.h index 714de3627d2..cb545436041 100644 --- a/gnu/dist/postfix/src/global/quote_822_local.h +++ b/gnu/dist/postfix/src/global/quote_822_local.h @@ -17,10 +17,17 @@ #include <vstring.h> /* + * Global library. + */ +#include <quote_flags.h> + + /* * External interface. */ -extern VSTRING *quote_822_local(VSTRING *, const char *); +extern VSTRING *quote_822_local_flags(VSTRING *, const char *, int); extern VSTRING *unquote_822_local(VSTRING *, const char *); +#define quote_822_local(dst, src) \ + quote_822_local_flags((dst), (src), QUOTE_FLAG_8BITCLEAN) /* LICENSE /* .ad diff --git a/gnu/dist/postfix/src/global/quote_flags.h b/gnu/dist/postfix/src/global/quote_flags.h new file mode 100644 index 00000000000..df0e0b8376a --- /dev/null +++ b/gnu/dist/postfix/src/global/quote_flags.h @@ -0,0 +1,27 @@ +/*++ +/* NAME +/* quote_flags 3h +/* SUMMARY +/* quote rfc 821/822 local part +/* SYNOPSIS +/* #include "quote_flags.h" +/* DESCRIPTION +/* .nf + + /* + * External interface. + */ +#define QUOTE_FLAG_8BITCLEAN (1<<0) /* be 8-bit clean */ +#define QUOTE_FLAG_EXPOSE_AT (1<<1) /* @ is ordinary text */ +#define QUOTE_FLAG_APPEND (1<<2) /* append, not overwrite */ + +/* LICENSE +/* .ad +/* .fi +/* The Secure Mailer license must be distributed with this software. +/* AUTHOR(S) +/* Wietse Venema +/* IBM T.J. Watson Research +/* P.O. Box 704 +/* Yorktown Heights, NY 10598, USA +/*--*/ diff --git a/gnu/dist/postfix/src/global/rec_type.h b/gnu/dist/postfix/src/global/rec_type.h index f1caaa466fe..8d0c74195df 100644 --- a/gnu/dist/postfix/src/global/rec_type.h +++ b/gnu/dist/postfix/src/global/rec_type.h @@ -58,7 +58,7 @@ */ #define REC_TYPE_ENVELOPE "MCTFILSDROWVA" #define REC_TYPE_CONTENT "XLN" -#define REC_TYPE_EXTRACT "EDROPre" /* NOT A */ +#define REC_TYPE_EXTRACT "EDROPreA" #define REC_TYPE_NOEXTRACT "E" /* diff --git a/gnu/dist/postfix/src/global/record.c b/gnu/dist/postfix/src/global/record.c index 93c41c88b75..5e91a9ee548 100644 --- a/gnu/dist/postfix/src/global/record.c +++ b/gnu/dist/postfix/src/global/record.c @@ -113,6 +113,9 @@ int rec_put_type(VSTREAM *stream, int type, long offset) { + if (type < 0 || type > 255) + msg_panic("rec_put_type: bad record type %d", type); + if (msg_verbose > 2) msg_info("rec_put_type: %d at %ld", type, offset); @@ -131,6 +134,9 @@ int rec_put(VSTREAM *stream, int type, const char *data, int len) int len_rest; int len_byte; + if (type < 0 || type > 255) + msg_panic("rec_put: bad record type %d", type); + if (msg_verbose > 2) msg_info("rec_put: type %c len %d data %.10s", type, len, data); diff --git a/gnu/dist/postfix/src/lmtp/Makefile.in b/gnu/dist/postfix/src/lmtp/Makefile.in index cb8f5637fd9..98939cb5ae0 100644 --- a/gnu/dist/postfix/src/lmtp/Makefile.in +++ b/gnu/dist/postfix/src/lmtp/Makefile.in @@ -162,6 +162,7 @@ lmtp_proto.o: ../../include/rec_type.h lmtp_proto.o: ../../include/off_cvt.h lmtp_proto.o: ../../include/mark_corrupt.h lmtp_proto.o: ../../include/quote_821_local.h +lmtp_proto.o: ../../include/quote_flags.h lmtp_proto.o: lmtp.h lmtp_proto.o: ../../include/argv.h lmtp_proto.o: lmtp_sasl.h diff --git a/gnu/dist/postfix/src/lmtp/lmtp_proto.c b/gnu/dist/postfix/src/lmtp/lmtp_proto.c index 7cf98f77cc6..f60aa10d330 100644 --- a/gnu/dist/postfix/src/lmtp/lmtp_proto.c +++ b/gnu/dist/postfix/src/lmtp/lmtp_proto.c @@ -294,12 +294,12 @@ static int lmtp_loop(LMTP_STATE *state, int send_state, int recv_state) * Macros for readability. XXX Aren't LMTP addresses supposed to be case * insensitive? */ -#define REWRITE_ADDRESS(addr) do { \ - if (*(addr)) { \ - quote_821_local(state->scratch, addr); \ - myfree(addr); \ - addr = mystrdup(vstring_str(state->scratch)); \ - lowercase(addr); \ +#define REWRITE_ADDRESS(dst, src) do { \ + if (*(src)) { \ + quote_821_local(dst, src); \ + lowercase(vstring_str(dst)); \ + } else { \ + vstring_strcpy(dst, src); \ } \ } while (0) @@ -357,10 +357,10 @@ static int lmtp_loop(LMTP_STATE *state, int send_state, int recv_state) * Build the MAIL FROM command. */ case LMTP_STATE_MAIL: - if (*request->sender) - REWRITE_ADDRESS(request->sender); - vstring_sprintf(next_command, "MAIL FROM:<%s>", request->sender); - if (state->features & LMTP_FEATURE_SIZE) + REWRITE_ADDRESS(state->scratch, request->sender); + vstring_sprintf(next_command, "MAIL FROM:<%s>", + vstring_str(state->scratch)); + if (state->features & LMTP_FEATURE_SIZE) /* RFC 1652 */ vstring_sprintf_append(next_command, " SIZE=%lu", request->data_size); next_state = LMTP_STATE_RCPT; @@ -372,8 +372,9 @@ static int lmtp_loop(LMTP_STATE *state, int send_state, int recv_state) */ case LMTP_STATE_RCPT: rcpt = request->rcpt_list.info + send_rcpt; - REWRITE_ADDRESS(rcpt->address); - vstring_sprintf(next_command, "RCPT TO:<%s>", rcpt->address); + REWRITE_ADDRESS(state->scratch, rcpt->address); + vstring_sprintf(next_command, "RCPT TO:<%s>", + vstring_str(state->scratch)); if ((next_rcpt = send_rcpt + 1) == request->rcpt_list.len) next_state = LMTP_STATE_DATA; break; diff --git a/gnu/dist/postfix/src/local/Makefile.in b/gnu/dist/postfix/src/local/Makefile.in index fc6a4ae2d76..e04a3a51107 100644 --- a/gnu/dist/postfix/src/local/Makefile.in +++ b/gnu/dist/postfix/src/local/Makefile.in @@ -139,6 +139,7 @@ delivered.o: ../../include/record.h delivered.o: ../../include/rec_type.h delivered.o: ../../include/is_header.h delivered.o: ../../include/quote_822_local.h +delivered.o: ../../include/quote_flags.h delivered.o: ../../include/header_opts.h delivered.o: local.h delivered.o: ../../include/been_here.h diff --git a/gnu/dist/postfix/src/local/alias.c b/gnu/dist/postfix/src/local/alias.c index fe1eb46fd7d..af0fcf355a5 100644 --- a/gnu/dist/postfix/src/local/alias.c +++ b/gnu/dist/postfix/src/local/alias.c @@ -113,9 +113,9 @@ static uid_t dict_owner(char *table) */ if ((dict = dict_handle(table)) == 0) msg_panic("%s: can't find dictionary: %s", myname, table); - if (dict->fd < 0) + if (dict->stat_fd < 0) return (0); - if (fstat(dict->fd, &st) < 0) + if (fstat(dict->stat_fd, &st) < 0) msg_fatal("%s: fstat dictionary %s: %m", myname, table); return (st.st_uid); } diff --git a/gnu/dist/postfix/src/nqmgr/qmgr.c b/gnu/dist/postfix/src/nqmgr/qmgr.c index e259e47aa06..1c19eec0543 100644 --- a/gnu/dist/postfix/src/nqmgr/qmgr.c +++ b/gnu/dist/postfix/src/nqmgr/qmgr.c @@ -184,13 +184,13 @@ /* .SH "Timing controls" /* .ad /* .fi -/* .IP \fBmin_backoff\fR +/* .IP \fBminimal_backoff_time\fR /* Minimal time in seconds between delivery attempts /* of a deferred message. /* .sp /* This parameter also limits the time an unreachable destination /* is kept in the short-term, in-memory destination status cache. -/* .IP \fBmax_backoff\fR +/* .IP \fBmaximal_backoff_time\fR /* Maximal time in seconds between delivery attempts /* of a deferred message. /* .IP \fBmaximal_queue_lifetime\fR diff --git a/gnu/dist/postfix/src/nqmgr/qmgr_message.c b/gnu/dist/postfix/src/nqmgr/qmgr_message.c index f83f7e0d105..d5bde3a3dfc 100644 --- a/gnu/dist/postfix/src/nqmgr/qmgr_message.c +++ b/gnu/dist/postfix/src/nqmgr/qmgr_message.c @@ -509,8 +509,17 @@ static int qmgr_message_sort_compare(const void *p1, const void *p2) /* * Compare most significant to least significant recipient attributes. + * The comparison function must be transitive, so NULL values need to be + * assigned an ordinal (we set NULL last). */ - if ((queue1 = rcpt1->queue) != 0 && (queue2 = rcpt2->queue) != 0) { + + queue1 = rcpt1->queue; + queue2 = rcpt2->queue; + if (queue1 != 0 && queue2 == 0) + return (-1); + if (queue1 == 0 && queue2 != 0) + return (1); + if (queue1 != 0 && queue2 != 0) { /* * Compare message transport. @@ -529,8 +538,13 @@ static int qmgr_message_sort_compare(const void *p1, const void *p2) /* * Compare recipient domain. */ - if ((at1 = strrchr(rcpt1->address, '@')) != 0 - && (at2 = strrchr(rcpt2->address, '@')) != 0 + at1 = strrchr(rcpt1->address, '@'); + at2 = strrchr(rcpt2->address, '@'); + if (at1 == 0 && at2 != 0) + return (1); + if (at1 != 0 && at2 == 0) + return (-1); + if (at1 != 0 && at2 != 0 && (result = strcasecmp(at1, at2)) != 0) return (result); @@ -708,7 +722,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) queue = 0; } if (transport->recipient_limit == 1) { - VSTRING_SPACE(reply.nexthop, len + 1); + VSTRING_SPACE(reply.nexthop, len + 2); memmove(STR(reply.nexthop) + len + 1, STR(reply.nexthop), LEN(reply.nexthop) + 1); memcpy(STR(reply.nexthop), STR(reply.recipient), len); diff --git a/gnu/dist/postfix/src/pickup/pickup.c b/gnu/dist/postfix/src/pickup/pickup.c index 994a6328f58..c690ae73f4d 100644 --- a/gnu/dist/postfix/src/pickup/pickup.c +++ b/gnu/dist/postfix/src/pickup/pickup.c @@ -181,6 +181,8 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info, info->rcpt = mystrdup(vstring_str(buf)); if (type == REC_TYPE_TIME) continue; + if (type == REC_TYPE_ATTR) + continue; if (type == REC_TYPE_FILT && *expected == REC_TYPE_ENVELOPE[0]) continue; else { diff --git a/gnu/dist/postfix/src/pipe/Makefile.in b/gnu/dist/postfix/src/pipe/Makefile.in index c46d22ca03d..afc0bc722e1 100644 --- a/gnu/dist/postfix/src/pipe/Makefile.in +++ b/gnu/dist/postfix/src/pipe/Makefile.in @@ -83,4 +83,5 @@ pipe.o: ../../include/canon_addr.h pipe.o: ../../include/split_addr.h pipe.o: ../../include/off_cvt.h pipe.o: ../../include/quote_822_local.h +pipe.o: ../../include/quote_flags.h pipe.o: ../../include/mail_server.h diff --git a/gnu/dist/postfix/src/postqueue/postqueue.c b/gnu/dist/postfix/src/postqueue/postqueue.c index 7fba3c61d5b..12b4581c168 100644 --- a/gnu/dist/postfix/src/postqueue/postqueue.c +++ b/gnu/dist/postfix/src/postqueue/postqueue.c @@ -104,6 +104,7 @@ #include <stdlib.h> #include <signal.h> #include <sysexits.h> +#include <errno.h> /* Utility library. */ @@ -171,16 +172,29 @@ static void show_queue(void) * a program that terminates early. */ if ((showq = mail_connect(MAIL_CLASS_PUBLIC, MAIL_SERVICE_SHOWQ, BLOCKING)) != 0) { - while ((n = vstream_fread(showq, buf, sizeof(buf))) > 0) + while ((n = vstream_fread(showq, buf, sizeof(buf))) > 0) { if (vstream_fwrite(VSTREAM_OUT, buf, n) != n - || vstream_fflush(VSTREAM_OUT) != 0) + || vstream_fflush(VSTREAM_OUT) != 0) { + if (errno == EPIPE) + break; msg_fatal("write error: %m"); - - if (vstream_fclose(showq)) + } + } + if (vstream_fclose(showq) && errno != EPIPE) msg_warn("close: %m"); } /* + * Don't assume that the mail system is down when the user has + * insufficient permission to access the showq socket. + */ + else if (errno == EACCES) { + msg_fatal_status(EX_SOFTWARE, + "Connect to the %s %s service: %m", + var_mail_name, MAIL_SERVICE_SHOWQ); + } + + /* * When the mail system is down, the superuser can still access the queue * directly. Just run the showq program in stand-alone mode. */ @@ -251,7 +265,7 @@ static void flush_site(const char *site) static NORETURN usage(void) { - msg_fatal_status(EX_USAGE, "usage: specify one of -f, -p, or -s"); + msg_fatal_status(EX_USAGE, "usage: postqueue -f | postqueue -p | postqueue -s site"); } /* main - the main program */ @@ -266,6 +280,7 @@ int main(int argc, char **argv) char *site_to_flush = 0; ARGV *import_env; char *last; + int bad_site; /* * Be consistent with file permissions. @@ -315,7 +330,6 @@ int main(int argc, char **argv) usage(); mode = PQ_MODE_MAILQ_LIST; break; - break; case 's': /* flush site */ if (mode != PQ_MODE_DEFAULT) usage(); @@ -329,6 +343,8 @@ int main(int argc, char **argv) usage(); } } + if (argc > optind) + usage(); /* * Further initialization... @@ -336,12 +352,17 @@ int main(int argc, char **argv) mail_conf_read(); /* - * Strip the environment so we don't have to trust the C library. + * This program is designed to be set-gid, which makes it a potential + * target for attack. If not running as root, strip the environment so we + * don't have to trust the C library. If running as root, don't strip the + * environment so that showq can receive non-default configuration + * directory info when the mail system is down. */ - import_env = argv_split(var_import_environ, ", \t\r\n"); - clean_env(import_env->argv); - argv_free(import_env); - + if (geteuid() != 0) { + import_env = argv_split(var_import_environ, ", \t\r\n"); + clean_env(import_env->argv); + argv_free(import_env); + } if (chdir(var_queue_dir)) msg_fatal_status(EX_UNAVAILABLE, "chdir %s: %m", var_queue_dir); @@ -353,21 +374,20 @@ int main(int argc, char **argv) * Further input validation. */ if (site_to_flush != 0) { + bad_site = 0; if (*site_to_flush == '[' && *(last = site_to_flush + strlen(site_to_flush) - 1) == ']') { *last = 0; - if (!valid_hostaddr(site_to_flush + 1, DONT_GRIPE)) - site_to_flush = 0; + bad_site = !valid_hostaddr(site_to_flush + 1, DONT_GRIPE); *last = ']'; } else { - if (!valid_hostname(site_to_flush, DONT_GRIPE) - && !valid_hostaddr(site_to_flush, DONT_GRIPE)) - site_to_flush = 0; + bad_site = (!valid_hostname(site_to_flush, DONT_GRIPE) + && !valid_hostaddr(site_to_flush, DONT_GRIPE)); } - if (site_to_flush == 0) + if (bad_site) msg_fatal_status(EX_USAGE, "Cannot flush mail queue - invalid destination: \"%.100s%s\"", - optarg, strlen(optarg) > 100 ? "..." : ""); + site_to_flush, strlen(site_to_flush) > 100 ? "..." : ""); } /* diff --git a/gnu/dist/postfix/src/qmgr/qmgr.c b/gnu/dist/postfix/src/qmgr/qmgr.c index 146b2646933..b2ea9ec6fa5 100644 --- a/gnu/dist/postfix/src/qmgr/qmgr.c +++ b/gnu/dist/postfix/src/qmgr/qmgr.c @@ -165,13 +165,13 @@ /* .SH "Timing controls" /* .ad /* .fi -/* .IP \fBmin_backoff\fR +/* .IP \fBminimal_backoff_time\fR /* Minimal time in seconds between delivery attempts /* of a deferred message. /* .sp /* This parameter also limits the time an unreachable destination /* is kept in the short-term, in-memory destination status cache. -/* .IP \fBmax_backoff\fR +/* .IP \fBmaximal_backoff_time\fR /* Maximal time in seconds between delivery attempts /* of a deferred message. /* .IP \fBmaximal_queue_lifetime\fR |
