postfix 1.1.11

check following for list of changes:
ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-1.1.11.RELEASE_NOTES
This commit is contained in:
itojun 2002-06-08 22:36:08 +00:00
parent 8999a8b386
commit d7d544aee7
98 changed files with 1155 additions and 420 deletions

35
gnu/dist/postfix/COPYRIGHT vendored Normal file
View File

@ -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.
*/

View File

@ -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.

View File

@ -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.

View File

@ -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,

View File

@ -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

View File

@ -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.

View File

@ -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:

View File

@ -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

View File

@ -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.

View File

@ -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)

View File

@ -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
#

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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

View File

@ -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.
#

View File

@ -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

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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".

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.

View File

@ -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

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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

View File

@ -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

View File

@ -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.
#

View File

@ -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.
#

View File

@ -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)

View File

@ -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>

View File

@ -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)

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 &gt; <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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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]);

View File

@ -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);

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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,

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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));
}
}

View File

@ -13,10 +13,17 @@
*/
#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

View File

@ -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));
}
}

View File

@ -16,11 +16,18 @@
*/
#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

View File

@ -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
/*--*/

View File

@ -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"
/*

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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);

View File

@ -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 {

View File

@ -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

View File

@ -104,6 +104,7 @@
#include <stdlib.h>
#include <signal.h>
#include <sysexits.h>
#include <errno.h>
/* Utility library. */
@ -171,15 +172,28 @@ 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 ? "..." : "");
}
/*

View File

@ -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